Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / GroupCreateDialog.java @ 59aa2375

History | View | Annotate | Download (5.9 kB)

1 53f8abed Christos Stathis
/*
2 e6e9f6e6 Christos KK Loverdos
 * Copyright 2011-2013 GRNET S.A. All rights reserved.
3 53f8abed Christos Stathis
 *
4 53f8abed Christos Stathis
 * Redistribution and use in source and binary forms, with or
5 53f8abed Christos Stathis
 * without modification, are permitted provided that the following
6 53f8abed Christos Stathis
 * conditions are met:
7 53f8abed Christos Stathis
 *
8 53f8abed Christos Stathis
 *   1. Redistributions of source code must retain the above
9 53f8abed Christos Stathis
 *      copyright notice, this list of conditions and the following
10 53f8abed Christos Stathis
 *      disclaimer.
11 53f8abed Christos Stathis
 *
12 53f8abed Christos Stathis
 *   2. Redistributions in binary form must reproduce the above
13 53f8abed Christos Stathis
 *      copyright notice, this list of conditions and the following
14 53f8abed Christos Stathis
 *      disclaimer in the documentation and/or other materials
15 53f8abed Christos Stathis
 *      provided with the distribution.
16 53f8abed Christos Stathis
 *
17 53f8abed Christos Stathis
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 53f8abed Christos Stathis
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 53f8abed Christos Stathis
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 53f8abed Christos Stathis
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 53f8abed Christos Stathis
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 53f8abed Christos Stathis
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 53f8abed Christos Stathis
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 53f8abed Christos Stathis
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 53f8abed Christos Stathis
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 53f8abed Christos Stathis
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 53f8abed Christos Stathis
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 53f8abed Christos Stathis
 * POSSIBILITY OF SUCH DAMAGE.
29 53f8abed Christos Stathis
 *
30 53f8abed Christos Stathis
 * The views and conclusions contained in the software and
31 53f8abed Christos Stathis
 * documentation are those of the authors and should not be
32 53f8abed Christos Stathis
 * interpreted as representing official policies, either expressed
33 53f8abed Christos Stathis
 * or implied, of GRNET S.A.
34 53f8abed Christos Stathis
 */
35 53f8abed Christos Stathis
package gr.grnet.pithos.web.client;
36 53f8abed Christos Stathis
37 dc8cc18a Christos KK Loverdos
import gr.grnet.pithos.web.client.commands.AddUserCommand;
38 dc8cc18a Christos KK Loverdos
import gr.grnet.pithos.web.client.foldertree.Folder;
39 dc8cc18a Christos KK Loverdos
import gr.grnet.pithos.web.client.grouptree.Group;
40 dc8cc18a Christos KK Loverdos
41 53f8abed Christos Stathis
import com.google.gwt.dom.client.NativeEvent;
42 53f8abed Christos Stathis
import com.google.gwt.event.dom.client.ClickEvent;
43 53f8abed Christos Stathis
import com.google.gwt.event.dom.client.ClickHandler;
44 53f8abed Christos Stathis
import com.google.gwt.event.dom.client.KeyCodes;
45 53f8abed Christos Stathis
import com.google.gwt.event.dom.client.KeyDownEvent;
46 5ec7b091 Christos Stathis
import com.google.gwt.user.client.Command;
47 53f8abed Christos Stathis
import com.google.gwt.user.client.Event.NativePreviewEvent;
48 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.Anchor;
49 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.Button;
50 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.DialogBox;
51 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.FlexTable;
52 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
53 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.TextBox;
54 dc8cc18a Christos KK Loverdos
import com.google.gwt.user.client.ui.VerticalPanel;
55 53f8abed Christos Stathis
56 53f8abed Christos Stathis
/**
57 53f8abed Christos Stathis
 * The 'Folder properties' dialog box implementation.
58 53f8abed Christos Stathis
 */
59 53f8abed Christos Stathis
public class GroupCreateDialog extends DialogBox {
60 53f8abed Christos Stathis
61 53f8abed Christos Stathis
    protected Pithos app;
62 53f8abed Christos Stathis
63 5ec7b091 Christos Stathis
    private Command callback;
64 dc8cc18a Christos KK Loverdos
    
65 dc8cc18a Christos KK Loverdos
        /**
66 dc8cc18a Christos KK Loverdos
         * The widget that holds the folderName of the folder.
67 dc8cc18a Christos KK Loverdos
         */
68 dc8cc18a Christos KK Loverdos
        TextBox groupName = new TextBox();
69 dc8cc18a Christos KK Loverdos
70 dc8cc18a Christos KK Loverdos
        final VerticalPanel inner;
71 dc8cc18a Christos KK Loverdos
72 dc8cc18a Christos KK Loverdos
        public GroupCreateDialog(final Pithos app) {
73 dc8cc18a Christos KK Loverdos
                this(app, null);
74 dc8cc18a Christos KK Loverdos
        }
75 dc8cc18a Christos KK Loverdos
        
76 dc8cc18a Christos KK Loverdos
        /**
77 dc8cc18a Christos KK Loverdos
         * The widget's constructor.
78 dc8cc18a Christos KK Loverdos
         */
79 dc8cc18a Christos KK Loverdos
        public GroupCreateDialog(final Pithos app, Command callback) {
80 53f8abed Christos Stathis
        this.app = app;
81 5ec7b091 Christos Stathis
        this.callback = callback;
82 dc8cc18a Christos KK Loverdos
        
83 dc8cc18a Christos KK Loverdos
                Anchor close = new Anchor("close");
84 dc8cc18a Christos KK Loverdos
                close.addStyleName("close");
85 dc8cc18a Christos KK Loverdos
                close.addClickHandler(new ClickHandler() {
86 dc8cc18a Christos KK Loverdos
                        
87 dc8cc18a Christos KK Loverdos
                        @Override
88 dc8cc18a Christos KK Loverdos
                        public void onClick(ClickEvent event) {
89 dc8cc18a Christos KK Loverdos
                                hide();
90 dc8cc18a Christos KK Loverdos
                        }
91 dc8cc18a Christos KK Loverdos
                });
92 dc8cc18a Christos KK Loverdos
93 dc8cc18a Christos KK Loverdos
                setGlassEnabled(true);
94 dc8cc18a Christos KK Loverdos
                setStyleName("pithos-DialogBox");
95 dc8cc18a Christos KK Loverdos
96 dc8cc18a Christos KK Loverdos
                // Enable IE selection for the dialog (must disable it upon closing it)
97 dc8cc18a Christos KK Loverdos
                Pithos.enableIESelection();
98 dc8cc18a Christos KK Loverdos
99 dc8cc18a Christos KK Loverdos
                // Use this opportunity to set the dialog's caption.
100 dc8cc18a Christos KK Loverdos
                setText("Create group");
101 dc8cc18a Christos KK Loverdos
102 dc8cc18a Christos KK Loverdos
                // Outer contains inner and buttons
103 dc8cc18a Christos KK Loverdos
                VerticalPanel outer = new VerticalPanel();
104 dc8cc18a Christos KK Loverdos
                outer.add(close);
105 dc8cc18a Christos KK Loverdos
                // Inner contains generalPanel and permPanel
106 dc8cc18a Christos KK Loverdos
                inner = new VerticalPanel();
107 dc8cc18a Christos KK Loverdos
                inner.addStyleName("inner");
108 dc8cc18a Christos KK Loverdos
109 dc8cc18a Christos KK Loverdos
                VerticalPanel generalPanel = new VerticalPanel();
110 53f8abed Christos Stathis
        FlexTable generalTable = new FlexTable();
111 53f8abed Christos Stathis
        generalTable.setText(0, 0, "Name");
112 53f8abed Christos Stathis
113 dc8cc18a Christos KK Loverdos
        generalTable.setWidget(0, 1, groupName);
114 53f8abed Christos Stathis
115 53f8abed Christos Stathis
        generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
116 53f8abed Christos Stathis
        generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");
117 53f8abed Christos Stathis
        generalTable.setCellSpacing(4);
118 53f8abed Christos Stathis
        generalPanel.add(generalTable);
119 53f8abed Christos Stathis
        inner.add(generalPanel);
120 53f8abed Christos Stathis
121 53f8abed Christos Stathis
        outer.add(inner);
122 53f8abed Christos Stathis
123 dc8cc18a Christos KK Loverdos
                // Create the 'Create/Update' button, along with a listener that hides the dialog
124 dc8cc18a Christos KK Loverdos
                // when the button is clicked and quits the application.
125 dc8cc18a Christos KK Loverdos
                String okLabel = "Create";
126 dc8cc18a Christos KK Loverdos
                final Button ok = new Button(okLabel, new ClickHandler() {
127 dc8cc18a Christos KK Loverdos
                        @Override
128 dc8cc18a Christos KK Loverdos
                        public void onClick(ClickEvent event) {
129 dc8cc18a Christos KK Loverdos
                                createGroup();
130 dc8cc18a Christos KK Loverdos
                                closeDialog();
131 dc8cc18a Christos KK Loverdos
                        }
132 dc8cc18a Christos KK Loverdos
                });
133 dc8cc18a Christos KK Loverdos
                ok.addStyleName("button");
134 dc8cc18a Christos KK Loverdos
                outer.add(ok);
135 53f8abed Christos Stathis
        outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
136 53f8abed Christos Stathis
137 53f8abed Christos Stathis
        setWidget(outer);
138 dc8cc18a Christos KK Loverdos
        }
139 dc8cc18a Christos KK Loverdos
140 dc8cc18a Christos KK Loverdos
        @Override
141 dc8cc18a Christos KK Loverdos
        public void center() {
142 dc8cc18a Christos KK Loverdos
                super.center();
143 dc8cc18a Christos KK Loverdos
                groupName.setFocus(true);
144 dc8cc18a Christos KK Loverdos
        }
145 dc8cc18a Christos KK Loverdos
146 dc8cc18a Christos KK Loverdos
        @Override
147 dc8cc18a Christos KK Loverdos
        protected void onPreviewNativeEvent(NativePreviewEvent preview) {
148 dc8cc18a Christos KK Loverdos
                super.onPreviewNativeEvent(preview);
149 dc8cc18a Christos KK Loverdos
150 dc8cc18a Christos KK Loverdos
                NativeEvent evt = preview.getNativeEvent();
151 dc8cc18a Christos KK Loverdos
                if (evt.getType().equals(KeyDownEvent.getType().getName()))
152 dc8cc18a Christos KK Loverdos
                        // Use the popup's key preview hooks to close the dialog when either
153 dc8cc18a Christos KK Loverdos
                        // enter or escape is pressed.
154 dc8cc18a Christos KK Loverdos
                        switch (evt.getKeyCode()) {
155 dc8cc18a Christos KK Loverdos
                                case KeyCodes.KEY_ENTER:
156 dc8cc18a Christos KK Loverdos
                                        createGroup();
157 53f8abed Christos Stathis
                    closeDialog();
158 dc8cc18a Christos KK Loverdos
                                        break;
159 dc8cc18a Christos KK Loverdos
                                case KeyCodes.KEY_ESCAPE:
160 dc8cc18a Christos KK Loverdos
                                        closeDialog();
161 dc8cc18a Christos KK Loverdos
                                        break;
162 dc8cc18a Christos KK Loverdos
                        }
163 dc8cc18a Christos KK Loverdos
        }
164 dc8cc18a Christos KK Loverdos
165 dc8cc18a Christos KK Loverdos
166 dc8cc18a Christos KK Loverdos
        /**
167 dc8cc18a Christos KK Loverdos
         * Enables IE selection prevention and hides the dialog
168 dc8cc18a Christos KK Loverdos
         * (we disable the prevention on creation of the dialog)
169 dc8cc18a Christos KK Loverdos
         */
170 dc8cc18a Christos KK Loverdos
        public void closeDialog() {
171 dc8cc18a Christos KK Loverdos
                Pithos.preventIESelection();
172 dc8cc18a Christos KK Loverdos
                hide();
173 dc8cc18a Christos KK Loverdos
                if (callback != null)
174 dc8cc18a Christos KK Loverdos
                        callback.execute();
175 dc8cc18a Christos KK Loverdos
        }
176 dc8cc18a Christos KK Loverdos
177 dc8cc18a Christos KK Loverdos
        /**
178 dc8cc18a Christos KK Loverdos
         * Generate an RPC request to create a new folder.
179 dc8cc18a Christos KK Loverdos
         */
180 dc8cc18a Christos KK Loverdos
        void createGroup() {
181 dc8cc18a Christos KK Loverdos
                String name = groupName.getText().trim();
182 dc8cc18a Christos KK Loverdos
                if (name.length() == 0)
183 dc8cc18a Christos KK Loverdos
                        return;
184 dc8cc18a Christos KK Loverdos
                Group group = app.addGroup(name);
185 dc8cc18a Christos KK Loverdos
                
186 dc8cc18a Christos KK Loverdos
                new AddUserCommand(app, null, group).execute();
187 dc8cc18a Christos KK Loverdos
        }
188 53f8abed Christos Stathis
}