Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (4.1 kB)

1 2002c1dc Dimitris Routsis
/*
2 2002c1dc Dimitris Routsis
 * Copyright 2007, 2008, 2009 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.Iterator;
25 2002c1dc Dimitris Routsis
import java.util.List;
26 2002c1dc Dimitris Routsis
27 2002c1dc Dimitris Routsis
import com.google.gwt.core.client.GWT;
28 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.DeferredCommand;
29 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.Button;
30 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.ClickListener;
31 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.DialogBox;
32 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.FlowPanel;
33 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.KeyboardListener;
34 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.TabPanel;
35 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.TextBox;
36 2002c1dc Dimitris Routsis
import com.google.gwt.user.client.ui.Widget;
37 2002c1dc Dimitris Routsis
38 2002c1dc Dimitris Routsis
/**
39 2002c1dc Dimitris Routsis
 * Abstract class, parent of all 'File properties' dialog boxes.
40 2002c1dc Dimitris Routsis
 *
41 2002c1dc Dimitris Routsis
 * @author droutsis
42 2002c1dc Dimitris Routsis
 */
43 2002c1dc Dimitris Routsis
public abstract class AbstractPropertiesDialog extends DialogBox {
44 2002c1dc Dimitris Routsis
45 54834916 Dimitris Routsis
        protected static final String MULTIPLE_VALUES_TEXT = "(Multiple values)";
46 2002c1dc Dimitris Routsis
47 2002c1dc Dimitris Routsis
        /**
48 2002c1dc Dimitris Routsis
         * Text box with the tags associated with the file
49 2002c1dc Dimitris Routsis
         */
50 2002c1dc Dimitris Routsis
        protected TextBox tags = new TextBox();
51 2002c1dc Dimitris Routsis
52 2002c1dc Dimitris Routsis
        protected String initialTagText;
53 2002c1dc Dimitris Routsis
54 2002c1dc Dimitris Routsis
        /**
55 2002c1dc Dimitris Routsis
         * A FlowPanel with all user tags
56 2002c1dc Dimitris Routsis
         */
57 2002c1dc Dimitris Routsis
        protected FlowPanel allTagsContent;
58 2002c1dc Dimitris Routsis
59 2002c1dc Dimitris Routsis
60 2002c1dc Dimitris Routsis
        protected TabPanel inner = null;
61 2002c1dc Dimitris Routsis
62 2002c1dc Dimitris Routsis
        /**
63 2002c1dc Dimitris Routsis
         * The widget's constructor.
64 2002c1dc Dimitris Routsis
         *
65 2002c1dc Dimitris Routsis
         */
66 2002c1dc Dimitris Routsis
        public AbstractPropertiesDialog() {
67 2002c1dc Dimitris Routsis
68 2002c1dc Dimitris Routsis
                // Enable IE selection for the dialog (must disable it upon closing it)
69 2002c1dc Dimitris Routsis
                GSS.enableIESelection();
70 2002c1dc Dimitris Routsis
71 2002c1dc Dimitris Routsis
                setAnimationEnabled(true);
72 2002c1dc Dimitris Routsis
73 2002c1dc Dimitris Routsis
        }
74 2002c1dc Dimitris Routsis
75 2002c1dc Dimitris Routsis
        /**
76 2002c1dc Dimitris Routsis
         * Retrieves all user tags from the server and updates the FlowPanel
77 2002c1dc Dimitris Routsis
         *
78 2002c1dc Dimitris Routsis
         * @param userId
79 2002c1dc Dimitris Routsis
         */
80 2002c1dc Dimitris Routsis
        protected void updateTags() {
81 2002c1dc Dimitris Routsis
                GetCommand<TagsResource> tc = new GetCommand<TagsResource>(TagsResource.class, GSS.get().getCurrentUserResource().getTagsPath()) {
82 2002c1dc Dimitris Routsis
83 2002c1dc Dimitris Routsis
                        @Override
84 2002c1dc Dimitris Routsis
                        public void onComplete() {
85 2002c1dc Dimitris Routsis
                                allTagsContent.clear();
86 2002c1dc Dimitris Routsis
                                TagsResource tagr = getResult();
87 2002c1dc Dimitris Routsis
                                List<String> userTags = tagr.getTags();
88 2002c1dc Dimitris Routsis
                                Iterator t = userTags.iterator();
89 2002c1dc Dimitris Routsis
                                while (t.hasNext()) {
90 2002c1dc Dimitris Routsis
                                        final Button tag = new Button((String) t.next(), new ClickListener() {
91 2002c1dc Dimitris Routsis
92 2002c1dc Dimitris Routsis
                                                public void onClick(Widget sender) {
93 2002c1dc Dimitris Routsis
                                                        String existing = tags.getText();
94 54834916 Dimitris Routsis
                                                        if (MULTIPLE_VALUES_TEXT.equals(existing)) existing = "";
95 2002c1dc Dimitris Routsis
                                                        String newTag = ((Button) sender).getText().trim();
96 2002c1dc Dimitris Routsis
                                                        // insert the new tag only if it is not in the list
97 2002c1dc Dimitris Routsis
                                                        // already
98 2002c1dc Dimitris Routsis
                                                        if (existing.indexOf(newTag + ",") == -1 && !existing.trim().endsWith(newTag))
99 2002c1dc Dimitris Routsis
                                                                tags.setText(existing.trim() + (existing.length() > 0 ? ", " : "") + newTag);
100 2002c1dc Dimitris Routsis
                                                }
101 2002c1dc Dimitris Routsis
                                        });
102 2002c1dc Dimitris Routsis
                                        allTagsContent.add(tag);
103 2002c1dc Dimitris Routsis
                                }
104 2002c1dc Dimitris Routsis
                        }
105 2002c1dc Dimitris Routsis
106 2002c1dc Dimitris Routsis
                        @Override
107 2002c1dc Dimitris Routsis
                        public void onError(Throwable t) {
108 2002c1dc Dimitris Routsis
                                GWT.log("", t);
109 2002c1dc Dimitris Routsis
                                GSS.get().displayError("Unable to fetch user tags");
110 2002c1dc Dimitris Routsis
                        }
111 2002c1dc Dimitris Routsis
                };
112 2002c1dc Dimitris Routsis
                DeferredCommand.addCommand(tc);
113 2002c1dc Dimitris Routsis
114 2002c1dc Dimitris Routsis
        }
115 2002c1dc Dimitris Routsis
116 2002c1dc Dimitris Routsis
        /**
117 2002c1dc Dimitris Routsis
         * Accepts any change and updates the file
118 2002c1dc Dimitris Routsis
         *
119 2002c1dc Dimitris Routsis
         */
120 2002c1dc Dimitris Routsis
        protected abstract void accept();
121 2002c1dc Dimitris Routsis
122 2002c1dc Dimitris Routsis
        @Override
123 2002c1dc Dimitris Routsis
        @SuppressWarnings("fallthrough")
124 2002c1dc Dimitris Routsis
        public boolean onKeyDownPreview(char key, int modifiers) {
125 2002c1dc Dimitris Routsis
                // Use the popup's key preview hooks to close the dialog when either
126 2002c1dc Dimitris Routsis
                // enter or escape is pressed.
127 2002c1dc Dimitris Routsis
                switch (key) {
128 2002c1dc Dimitris Routsis
                        case KeyboardListener.KEY_ENTER:
129 2002c1dc Dimitris Routsis
                                accept();
130 2002c1dc Dimitris Routsis
                        case KeyboardListener.KEY_ESCAPE:
131 2002c1dc Dimitris Routsis
                                closeDialog();
132 2002c1dc Dimitris Routsis
                                break;
133 2002c1dc Dimitris Routsis
                }
134 2002c1dc Dimitris Routsis
135 2002c1dc Dimitris Routsis
                return true;
136 2002c1dc Dimitris Routsis
        }
137 2002c1dc Dimitris Routsis
138 2002c1dc Dimitris Routsis
139 2002c1dc Dimitris Routsis
        public void selectTab(int _tab) {
140 2002c1dc Dimitris Routsis
                inner.selectTab(_tab);
141 2002c1dc Dimitris Routsis
        }
142 2002c1dc Dimitris Routsis
143 2002c1dc Dimitris Routsis
144 2002c1dc Dimitris Routsis
        /**
145 2002c1dc Dimitris Routsis
         * Enables IE selection prevention and hides the dialog
146 2002c1dc Dimitris Routsis
         * (we disable the prevention on creation of the dialog)
147 2002c1dc Dimitris Routsis
         */
148 2002c1dc Dimitris Routsis
        public void closeDialog() {
149 2002c1dc Dimitris Routsis
                GSS.preventIESelection();
150 2002c1dc Dimitris Routsis
                hide();
151 2002c1dc Dimitris Routsis
        }
152 2002c1dc Dimitris Routsis
153 2002c1dc Dimitris Routsis
}