Statistics
| Branch: | Tag: | Revision:

root / src / gr / ebs / gss / client / AbstractPropertiesDialog.java @ fc0fa492

History | View | Annotate | Download (4.6 kB)

1 2002c1dc Dimitris Routsis
/*
2 9ab5db6d Natasa Kapravelou
 * Copyright 2007, 2008, 2009, 2010 Electronic Business Systems Ltd.
3 2002c1dc Dimitris Routsis
 *
4 2002c1dc Dimitris Routsis
 * This file is part of GSS.
5 2002c1dc Dimitris Routsis
 *
6 2002c1dc Dimitris Routsis
 * GSS is free software: you can redistribute it and/or modify
7 2002c1dc Dimitris Routsis
 * it under the terms of the GNU General Public License as published by
8 2002c1dc Dimitris Routsis
 * the Free Software Foundation, either version 3 of the License, or
9 2002c1dc Dimitris Routsis
 * (at your option) any later version.
10 2002c1dc Dimitris Routsis
 *
11 2002c1dc Dimitris Routsis
 * GSS is distributed in the hope that it will be useful,
12 2002c1dc Dimitris Routsis
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 2002c1dc Dimitris Routsis
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 2002c1dc Dimitris Routsis
 * GNU General Public License for more details.
15 2002c1dc Dimitris Routsis
 *
16 2002c1dc Dimitris Routsis
 * You should have received a copy of the GNU General Public License
17 2002c1dc Dimitris Routsis
 * along with GSS.  If not, see <http://www.gnu.org/licenses/>.
18 2002c1dc Dimitris Routsis
 */
19 2002c1dc Dimitris Routsis
package gr.ebs.gss.client;
20 2002c1dc Dimitris Routsis
21 2002c1dc Dimitris Routsis
import gr.ebs.gss.client.rest.GetCommand;
22 2002c1dc Dimitris Routsis
import gr.ebs.gss.client.rest.resource.TagsResource;
23 2002c1dc Dimitris Routsis
24 2002c1dc Dimitris Routsis
import java.util.List;
25 2002c1dc Dimitris Routsis
26 2002c1dc Dimitris Routsis
import com.google.gwt.core.client.GWT;
27 afd3a0ef Giannis Koutsoubos
import com.google.gwt.dom.client.NativeEvent;
28 afd3a0ef Giannis Koutsoubos
import com.google.gwt.event.dom.client.ClickEvent;
29 afd3a0ef Giannis Koutsoubos
import com.google.gwt.event.dom.client.ClickHandler;
30 afd3a0ef Giannis Koutsoubos
import com.google.gwt.event.dom.client.KeyCodes;
31 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.DeferredCommand;
32 afd3a0ef Giannis Koutsoubos
import com.google.gwt.user.client.Event.NativePreviewEvent;
33 b75f55ce Natasa Kapravelou
import com.google.gwt.user.client.ui.Anchor;
34 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.DialogBox;
35 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.FlowPanel;
36 b75f55ce Natasa Kapravelou
import com.google.gwt.user.client.ui.Label;
37 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.TabPanel;
38 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.TextBox;
39 2002c1dc Dimitris Routsis
40 2002c1dc Dimitris Routsis
/**
41 2002c1dc Dimitris Routsis
 * Abstract class, parent of all 'File properties' dialog boxes.
42 2002c1dc Dimitris Routsis
 *
43 2002c1dc Dimitris Routsis
 * @author droutsis
44 2002c1dc Dimitris Routsis
 */
45 2002c1dc Dimitris Routsis
public abstract class AbstractPropertiesDialog extends DialogBox {
46 2002c1dc Dimitris Routsis
47 54834916 Dimitris Routsis
        protected static final String MULTIPLE_VALUES_TEXT = "(Multiple values)";
48 2002c1dc Dimitris Routsis
49 2002c1dc Dimitris Routsis
        /**
50 2002c1dc Dimitris Routsis
         * Text box with the tags associated with the file
51 2002c1dc Dimitris Routsis
         */
52 2002c1dc Dimitris Routsis
        protected TextBox tags = new TextBox();
53 2002c1dc Dimitris Routsis
54 2002c1dc Dimitris Routsis
        protected String initialTagText;
55 2002c1dc Dimitris Routsis
56 2002c1dc Dimitris Routsis
        /**
57 2002c1dc Dimitris Routsis
         * A FlowPanel with all user tags
58 2002c1dc Dimitris Routsis
         */
59 2002c1dc Dimitris Routsis
        protected FlowPanel allTagsContent;
60 2002c1dc Dimitris Routsis
61 2002c1dc Dimitris Routsis
62 2002c1dc Dimitris Routsis
        protected TabPanel inner = null;
63 2002c1dc Dimitris Routsis
64 2002c1dc Dimitris Routsis
        /**
65 2002c1dc Dimitris Routsis
         * The widget's constructor.
66 2002c1dc Dimitris Routsis
         *
67 2002c1dc Dimitris Routsis
         */
68 2002c1dc Dimitris Routsis
        public AbstractPropertiesDialog() {
69 2002c1dc Dimitris Routsis
70 2002c1dc Dimitris Routsis
                // Enable IE selection for the dialog (must disable it upon closing it)
71 2002c1dc Dimitris Routsis
                GSS.enableIESelection();
72 2002c1dc Dimitris Routsis
73 2002c1dc Dimitris Routsis
                setAnimationEnabled(true);
74 2002c1dc Dimitris Routsis
75 2002c1dc Dimitris Routsis
        }
76 2002c1dc Dimitris Routsis
        /**
77 2002c1dc Dimitris Routsis
         * Retrieves all user tags from the server and updates the FlowPanel
78 2002c1dc Dimitris Routsis
         *
79 2002c1dc Dimitris Routsis
         * @param userId
80 2002c1dc Dimitris Routsis
         */
81 2002c1dc Dimitris Routsis
        protected void updateTags() {
82 62f168b2 Giannis Koutsoubos
                GetCommand<TagsResource> tc = new GetCommand<TagsResource>(TagsResource.class, GSS.get().getCurrentUserResource().getTagsPath(),null) {
83 2002c1dc Dimitris Routsis
84 2002c1dc Dimitris Routsis
                        @Override
85 2002c1dc Dimitris Routsis
                        public void onComplete() {
86 2002c1dc Dimitris Routsis
                                allTagsContent.clear();
87 2002c1dc Dimitris Routsis
                                TagsResource tagr = getResult();
88 2002c1dc Dimitris Routsis
                                List<String> userTags = tagr.getTags();
89 b75f55ce Natasa Kapravelou
                                Anchor tag = null;
90 f14e6b75 Natasa Kapravelou
                                for(String usrTag : userTags){
91 b75f55ce Natasa Kapravelou
                                        tag = new Anchor(usrTag.toString(), false);
92 f14e6b75 Natasa Kapravelou
                                        tag.addStyleName("gss-tag");
93 0fc071d9 Natasa Kapravelou
                                        allTagsContent.add(tag);
94 b75f55ce Natasa Kapravelou
                                        Label separator = new Label(", ");
95 b75f55ce Natasa Kapravelou
                                        separator.addStyleName("gss-tag");
96 b75f55ce Natasa Kapravelou
                                        allTagsContent.add(separator);
97 0fc071d9 Natasa Kapravelou
                                        tag.addClickHandler( new ClickHandler() {
98 b75f55ce Natasa Kapravelou
99 afd3a0ef Giannis Koutsoubos
                                                @Override
100 afd3a0ef Giannis Koutsoubos
                                                public void onClick(ClickEvent event) {
101 2002c1dc Dimitris Routsis
                                                        String existing = tags.getText();
102 54834916 Dimitris Routsis
                                                        if (MULTIPLE_VALUES_TEXT.equals(existing)) existing = "";
103 b75f55ce Natasa Kapravelou
                                                        String newTag = ((Anchor) event.getSource()).getText().trim();
104 2002c1dc Dimitris Routsis
                                                        // insert the new tag only if it is not in the list
105 2002c1dc Dimitris Routsis
                                                        // already
106 0fc071d9 Natasa Kapravelou
                                                        if (existing.indexOf(newTag) == -1 && !existing.trim().endsWith(newTag))
107 0fc071d9 Natasa Kapravelou
                                                                tags.setText(existing.trim()
108 0fc071d9 Natasa Kapravelou
                                                                                        + (existing.length() > 0 ? ", " : "")
109 0fc071d9 Natasa Kapravelou
                                                                                        + newTag);
110 2002c1dc Dimitris Routsis
                                                }
111 2002c1dc Dimitris Routsis
                                        });
112 2002c1dc Dimitris Routsis
                                }
113 2002c1dc Dimitris Routsis
                        }
114 2002c1dc Dimitris Routsis
115 2002c1dc Dimitris Routsis
                        @Override
116 2002c1dc Dimitris Routsis
                        public void onError(Throwable t) {
117 2002c1dc Dimitris Routsis
                                GWT.log("", t);
118 2002c1dc Dimitris Routsis
                                GSS.get().displayError("Unable to fetch user tags");
119 2002c1dc Dimitris Routsis
                        }
120 2002c1dc Dimitris Routsis
                };
121 2002c1dc Dimitris Routsis
                DeferredCommand.addCommand(tc);
122 2002c1dc Dimitris Routsis
123 2002c1dc Dimitris Routsis
        }
124 2002c1dc Dimitris Routsis
125 2002c1dc Dimitris Routsis
        /**
126 2002c1dc Dimitris Routsis
         * Accepts any change and updates the file
127 2002c1dc Dimitris Routsis
         *
128 2002c1dc Dimitris Routsis
         */
129 2002c1dc Dimitris Routsis
        protected abstract void accept();
130 2002c1dc Dimitris Routsis
131 2002c1dc Dimitris Routsis
        @Override
132 2002c1dc Dimitris Routsis
        @SuppressWarnings("fallthrough")
133 afd3a0ef Giannis Koutsoubos
        protected void onPreviewNativeEvent(NativePreviewEvent preview) {
134 afd3a0ef Giannis Koutsoubos
            super.onPreviewNativeEvent(preview);
135 afd3a0ef Giannis Koutsoubos
136 afd3a0ef Giannis Koutsoubos
            NativeEvent evt = preview.getNativeEvent();
137 afd3a0ef Giannis Koutsoubos
            if (evt.getType().equals("keydown"))
138 afd3a0ef Giannis Koutsoubos
                        // Use the popup's key preview hooks to close the dialog when either
139 afd3a0ef Giannis Koutsoubos
                          // enter or escape is pressed.
140 afd3a0ef Giannis Koutsoubos
                          switch (evt.getKeyCode()) {
141 afd3a0ef Giannis Koutsoubos
                            case KeyCodes.KEY_ENTER:
142 afd3a0ef Giannis Koutsoubos
                                    accept();
143 afd3a0ef Giannis Koutsoubos
                            case KeyCodes.KEY_ESCAPE:
144 afd3a0ef Giannis Koutsoubos
                              closeDialog();
145 afd3a0ef Giannis Koutsoubos
                              break;
146 afd3a0ef Giannis Koutsoubos
                          }
147 afd3a0ef Giannis Koutsoubos
          }
148 afd3a0ef Giannis Koutsoubos
149 2002c1dc Dimitris Routsis
150 2002c1dc Dimitris Routsis
151 2002c1dc Dimitris Routsis
        public void selectTab(int _tab) {
152 2002c1dc Dimitris Routsis
                inner.selectTab(_tab);
153 2002c1dc Dimitris Routsis
        }
154 2002c1dc Dimitris Routsis
155 2002c1dc Dimitris Routsis
156 2002c1dc Dimitris Routsis
        /**
157 2002c1dc Dimitris Routsis
         * Enables IE selection prevention and hides the dialog
158 2002c1dc Dimitris Routsis
         * (we disable the prevention on creation of the dialog)
159 2002c1dc Dimitris Routsis
         */
160 2002c1dc Dimitris Routsis
        public void closeDialog() {
161 2002c1dc Dimitris Routsis
                GSS.preventIESelection();
162 2002c1dc Dimitris Routsis
                hide();
163 2002c1dc Dimitris Routsis
        }
164 2002c1dc Dimitris Routsis
165 2002c1dc Dimitris Routsis
}