Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / FileShareDialog.java @ d4ace10a

History | View | Annotate | Download (23.3 kB)

1 64d3b76b Christos KK Loverdos
/*
2 64d3b76b Christos KK Loverdos
 * Copyright 2011-2013 GRNET S.A. All rights reserved.
3 64d3b76b Christos KK Loverdos
 *
4 64d3b76b Christos KK Loverdos
 * Redistribution and use in source and binary forms, with or
5 64d3b76b Christos KK Loverdos
 * without modification, are permitted provided that the following
6 64d3b76b Christos KK Loverdos
 * conditions are met:
7 64d3b76b Christos KK Loverdos
 *
8 64d3b76b Christos KK Loverdos
 *   1. Redistributions of source code must retain the above
9 64d3b76b Christos KK Loverdos
 *      copyright notice, this list of conditions and the following
10 64d3b76b Christos KK Loverdos
 *      disclaimer.
11 64d3b76b Christos KK Loverdos
 *
12 64d3b76b Christos KK Loverdos
 *   2. Redistributions in binary form must reproduce the above
13 64d3b76b Christos KK Loverdos
 *      copyright notice, this list of conditions and the following
14 64d3b76b Christos KK Loverdos
 *      disclaimer in the documentation and/or other materials
15 64d3b76b Christos KK Loverdos
 *      provided with the distribution.
16 64d3b76b Christos KK Loverdos
 *
17 64d3b76b Christos KK Loverdos
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 64d3b76b Christos KK Loverdos
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 64d3b76b Christos KK Loverdos
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 64d3b76b Christos KK Loverdos
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 64d3b76b Christos KK Loverdos
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 64d3b76b Christos KK Loverdos
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 64d3b76b Christos KK Loverdos
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 64d3b76b Christos KK Loverdos
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 64d3b76b Christos KK Loverdos
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 64d3b76b Christos KK Loverdos
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 64d3b76b Christos KK Loverdos
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 64d3b76b Christos KK Loverdos
 * POSSIBILITY OF SUCH DAMAGE.
29 64d3b76b Christos KK Loverdos
 *
30 64d3b76b Christos KK Loverdos
 * The views and conclusions contained in the software and
31 64d3b76b Christos KK Loverdos
 * documentation are those of the authors and should not be
32 64d3b76b Christos KK Loverdos
 * interpreted as representing official policies, either expressed
33 64d3b76b Christos KK Loverdos
 * or implied, of GRNET S.A.
34 64d3b76b Christos KK Loverdos
 */
35 64d3b76b Christos KK Loverdos
package gr.grnet.pithos.web.client;
36 64d3b76b Christos KK Loverdos
37 64d3b76b Christos KK Loverdos
import com.google.gwt.http.client.URL;
38 64d3b76b Christos KK Loverdos
import com.google.gwt.user.client.ui.*;
39 64d3b76b Christos KK Loverdos
import gr.grnet.pithos.web.client.foldertree.File;
40 64d3b76b Christos KK Loverdos
import gr.grnet.pithos.web.client.rest.HeadRequest;
41 64d3b76b Christos KK Loverdos
import gr.grnet.pithos.web.client.rest.PostRequest;
42 64d3b76b Christos KK Loverdos
43 64d3b76b Christos KK Loverdos
import com.google.gwt.core.client.GWT;
44 64d3b76b Christos KK Loverdos
import com.google.gwt.core.client.Scheduler;
45 64d3b76b Christos KK Loverdos
import com.google.gwt.dom.client.NativeEvent;
46 c963be61 Christos KK Loverdos
import com.google.gwt.event.dom.client.ClickEvent;
47 c963be61 Christos KK Loverdos
import com.google.gwt.event.dom.client.ClickHandler;
48 c963be61 Christos KK Loverdos
import com.google.gwt.event.dom.client.KeyCodes;
49 64d3b76b Christos KK Loverdos
import com.google.gwt.http.client.Response;
50 64d3b76b Christos KK Loverdos
import com.google.gwt.http.client.UrlBuilder;
51 64d3b76b Christos KK Loverdos
import com.google.gwt.resources.client.ImageResource;
52 64d3b76b Christos KK Loverdos
import com.google.gwt.user.client.Command;
53 64d3b76b Christos KK Loverdos
import com.google.gwt.user.client.Window;
54 64d3b76b Christos KK Loverdos
import com.google.gwt.user.client.Event.NativePreviewEvent;
55 64d3b76b Christos KK Loverdos
56 64d3b76b Christos KK Loverdos
import java.util.Map;
57 64d3b76b Christos KK Loverdos
58 64d3b76b Christos KK Loverdos
/**
59 64d3b76b Christos KK Loverdos
 * UI for the "Share" command.
60 64d3b76b Christos KK Loverdos
 */
61 64d3b76b Christos KK Loverdos
public class FileShareDialog extends AbstractPropertiesDialog {
62 b12da07a Christos KK Loverdos
    private static final class PremissionsUncheckWarning extends AbstractPropertiesDialog {
63 b12da07a Christos KK Loverdos
        private PremissionsUncheckWarning(Pithos app) {
64 b12da07a Christos KK Loverdos
            super(app);
65 b12da07a Christos KK Loverdos
            final Anchor close = new Anchor("close");
66 b12da07a Christos KK Loverdos
            close.addStyleName("close");
67 b12da07a Christos KK Loverdos
            close.addClickHandler(new ClickHandler() {
68 b12da07a Christos KK Loverdos
                @Override
69 b12da07a Christos KK Loverdos
                public void onClick(ClickEvent event) {
70 b12da07a Christos KK Loverdos
                    hide();
71 b12da07a Christos KK Loverdos
                }
72 b12da07a Christos KK Loverdos
            });
73 b12da07a Christos KK Loverdos
            final String dialogText = "Info";
74 b12da07a Christos KK Loverdos
            setText(dialogText);
75 b12da07a Christos KK Loverdos
            setStyleName("pithos-DialogBox");
76 b12da07a Christos KK Loverdos
77 b12da07a Christos KK Loverdos
            final VerticalPanel panel = new VerticalPanel();
78 b12da07a Christos KK Loverdos
            panel.add(close);
79 b12da07a Christos KK Loverdos
80 b12da07a Christos KK Loverdos
            VerticalPanel inner = new VerticalPanel();
81 b12da07a Christos KK Loverdos
            inner.addStyleName("inner");
82 b12da07a Christos KK Loverdos
83 b12da07a Christos KK Loverdos
            inner.add(
84 b12da07a Christos KK Loverdos
                new InlineHTML(
85 b12da07a Christos KK Loverdos
                    "It seems you are already sharing this file with some users." +
86 b12da07a Christos KK Loverdos
                    "<br>" +
87 b12da07a Christos KK Loverdos
                    "Please remove all users from the sharing list, to be able to uncheck this option."
88 b12da07a Christos KK Loverdos
                )
89 b12da07a Christos KK Loverdos
            );
90 b12da07a Christos KK Loverdos
91 b12da07a Christos KK Loverdos
            final Button ok = new Button("OK", new ClickHandler() {
92 b12da07a Christos KK Loverdos
                @Override
93 b12da07a Christos KK Loverdos
                public void onClick(ClickEvent event) {
94 b12da07a Christos KK Loverdos
                    hide();
95 b12da07a Christos KK Loverdos
                }
96 b12da07a Christos KK Loverdos
            });
97 b12da07a Christos KK Loverdos
98 b12da07a Christos KK Loverdos
            ok.addStyleName("button");
99 b12da07a Christos KK Loverdos
            inner.add(ok);
100 b12da07a Christos KK Loverdos
101 b12da07a Christos KK Loverdos
            panel.add(inner);
102 b12da07a Christos KK Loverdos
            panel.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
103 b12da07a Christos KK Loverdos
104 b12da07a Christos KK Loverdos
            setWidget(panel);
105 b12da07a Christos KK Loverdos
        }
106 b12da07a Christos KK Loverdos
107 b12da07a Christos KK Loverdos
        @Override
108 b12da07a Christos KK Loverdos
        protected boolean accept() {
109 b12da07a Christos KK Loverdos
            return true;
110 b12da07a Christos KK Loverdos
        }
111 b12da07a Christos KK Loverdos
    }
112 b12da07a Christos KK Loverdos
113 64d3b76b Christos KK Loverdos
    // For public sharing
114 64d3b76b Christos KK Loverdos
        private final HorizontalPanel publicPathPanel = new HorizontalPanel();
115 c963be61 Christos KK Loverdos
        private final TextBox publicPathText = new TextBox();
116 64d3b76b Christos KK Loverdos
117 64d3b76b Christos KK Loverdos
    // For private sharing
118 64d3b76b Christos KK Loverdos
    private final HorizontalPanel privatePathPanel = new HorizontalPanel();
119 c963be61 Christos KK Loverdos
    private final TextBox privatePathText = new TextBox();
120 c963be61 Christos KK Loverdos
    private final VerticalPanel privatePermSuperPanel = new VerticalPanel();
121 64d3b76b Christos KK Loverdos
    private PermissionsList permList;
122 64d3b76b Christos KK Loverdos
        
123 64d3b76b Christos KK Loverdos
        /**
124 64d3b76b Christos KK Loverdos
         * An image bundle for this widgets images.
125 64d3b76b Christos KK Loverdos
         */
126 64d3b76b Christos KK Loverdos
        public interface PublicSharingImages extends MessagePanel.Images {
127 64d3b76b Christos KK Loverdos
128 64d3b76b Christos KK Loverdos
                @Source("gr/grnet/pithos/resources/edit_user.png")
129 64d3b76b Christos KK Loverdos
                ImageResource permUser();
130 64d3b76b Christos KK Loverdos
131 64d3b76b Christos KK Loverdos
                @Source("gr/grnet/pithos/resources/groups22.png")
132 64d3b76b Christos KK Loverdos
                ImageResource permGroup();
133 64d3b76b Christos KK Loverdos
134 64d3b76b Christos KK Loverdos
                @Source("gr/grnet/pithos/resources/editdelete.png")
135 64d3b76b Christos KK Loverdos
                ImageResource delete();
136 64d3b76b Christos KK Loverdos
    }
137 64d3b76b Christos KK Loverdos
138 64d3b76b Christos KK Loverdos
    public interface PrivateSharingImages extends MessagePanel.Images {
139 64d3b76b Christos KK Loverdos
140 64d3b76b Christos KK Loverdos
        @Source("gr/grnet/pithos/resources/edit_user.png")
141 64d3b76b Christos KK Loverdos
        ImageResource permUser();
142 64d3b76b Christos KK Loverdos
143 64d3b76b Christos KK Loverdos
        @Source("gr/grnet/pithos/resources/groups22.png")
144 64d3b76b Christos KK Loverdos
        ImageResource permGroup();
145 64d3b76b Christos KK Loverdos
146 64d3b76b Christos KK Loverdos
        @Source("gr/grnet/pithos/resources/delete.gif")
147 64d3b76b Christos KK Loverdos
        ImageResource delete();
148 64d3b76b Christos KK Loverdos
    }
149 64d3b76b Christos KK Loverdos
150 64d3b76b Christos KK Loverdos
    private final File file;
151 64d3b76b Christos KK Loverdos
152 64d3b76b Christos KK Loverdos
    private final PublicSharingImages publicSharingImages = GWT.create(PublicSharingImages.class);
153 64d3b76b Christos KK Loverdos
    private final PrivateSharingImages privateSharingImages = GWT.create(PrivateSharingImages.class);
154 64d3b76b Christos KK Loverdos
155 64d3b76b Christos KK Loverdos
        /**
156 64d3b76b Christos KK Loverdos
         * The widget's constructor.
157 64d3b76b Christos KK Loverdos
         */
158 ed2b76a4 Christos KK Loverdos
        public FileShareDialog(Pithos app, File file) {
159 ed2b76a4 Christos KK Loverdos
        super(app);
160 ed2b76a4 Christos KK Loverdos
        this.file = file;
161 64d3b76b Christos KK Loverdos
162 64d3b76b Christos KK Loverdos
                Anchor close = new Anchor("close");
163 64d3b76b Christos KK Loverdos
                close.addStyleName("close");
164 64d3b76b Christos KK Loverdos
                close.addClickHandler(new ClickHandler() {
165 64d3b76b Christos KK Loverdos
                        
166 64d3b76b Christos KK Loverdos
                        @Override
167 64d3b76b Christos KK Loverdos
                        public void onClick(ClickEvent event) {
168 64d3b76b Christos KK Loverdos
                                hide();
169 64d3b76b Christos KK Loverdos
                        }
170 64d3b76b Christos KK Loverdos
                });
171 64d3b76b Christos KK Loverdos
                // Set the dialog's caption.
172 d1609e26 Christos KK Loverdos
                setText(Const.TXT_SHARE_FILE);
173 64d3b76b Christos KK Loverdos
                setGlassEnabled(true);
174 64d3b76b Christos KK Loverdos
                setStyleName("pithos-DialogBox");
175 64d3b76b Christos KK Loverdos
176 64d3b76b Christos KK Loverdos
                // Outer contains inner and buttons.
177 64d3b76b Christos KK Loverdos
                final VerticalPanel outer = new VerticalPanel();
178 64d3b76b Christos KK Loverdos
                outer.add(close);
179 64d3b76b Christos KK Loverdos
                final FocusPanel focusPanel = new FocusPanel(outer);
180 64d3b76b Christos KK Loverdos
                // Inner contains generalPanel and permPanel.
181 64d3b76b Christos KK Loverdos
                inner = new VerticalPanel();
182 64d3b76b Christos KK Loverdos
                inner.addStyleName("inner");
183 64d3b76b Christos KK Loverdos
184 64d3b76b Christos KK Loverdos
        inner.add(createMainPanel());
185 64d3b76b Christos KK Loverdos
186 64d3b76b Christos KK Loverdos
        outer.add(inner);
187 64d3b76b Christos KK Loverdos
188 64d3b76b Christos KK Loverdos
                final Button ok = new Button("OK", new ClickHandler() {
189 64d3b76b Christos KK Loverdos
                        @Override
190 64d3b76b Christos KK Loverdos
                        public void onClick(ClickEvent event) {
191 64d3b76b Christos KK Loverdos
                                closeDialog();
192 64d3b76b Christos KK Loverdos
                        }
193 64d3b76b Christos KK Loverdos
                });
194 64d3b76b Christos KK Loverdos
                ok.addStyleName("button");
195 64d3b76b Christos KK Loverdos
196 64d3b76b Christos KK Loverdos
        outer.add(ok);
197 64d3b76b Christos KK Loverdos
        outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
198 64d3b76b Christos KK Loverdos
199 64d3b76b Christos KK Loverdos
        focusPanel.setFocus(true);
200 64d3b76b Christos KK Loverdos
        setWidget(outer);
201 64d3b76b Christos KK Loverdos
        }
202 64d3b76b Christos KK Loverdos
203 64d3b76b Christos KK Loverdos
    private boolean IamOwner() {
204 64d3b76b Christos KK Loverdos
        return file.getOwnerID().equals(app.getUserID());
205 64d3b76b Christos KK Loverdos
    }
206 64d3b76b Christos KK Loverdos
207 64d3b76b Christos KK Loverdos
    private void populatePublicSharingPanel(VerticalPanel publicSharingPanel) {
208 64d3b76b Christos KK Loverdos
        if(IamOwner()) {
209 64d3b76b Christos KK Loverdos
            final HorizontalPanel publicCheckPanel = new HorizontalPanel();
210 64d3b76b Christos KK Loverdos
            publicCheckPanel.setSpacing(8);
211 64d3b76b Christos KK Loverdos
212 64d3b76b Christos KK Loverdos
            // Check box header
213 64d3b76b Christos KK Loverdos
            final CheckBox publicCheckBox = new CheckBox();
214 64d3b76b Christos KK Loverdos
            Label publicCheckTitle = new InlineHTML("<b>Public on the Internet</b>");
215 64d3b76b Christos KK Loverdos
            Label publicCheckInfo = new Label("Anyone who has the public link can access. No sign-in required.", true);
216 64d3b76b Christos KK Loverdos
217 64d3b76b Christos KK Loverdos
            publicCheckBox.setValue(isFilePubliclyShared());
218 64d3b76b Christos KK Loverdos
            publicCheckBox.addClickHandler(new ClickHandler() {
219 64d3b76b Christos KK Loverdos
                @Override
220 64d3b76b Christos KK Loverdos
                public void onClick(ClickEvent event) {
221 64d3b76b Christos KK Loverdos
                    final Boolean published;
222 64d3b76b Christos KK Loverdos
                    if(publicCheckBox.getValue() != file.isPublished() && IamOwner()) {
223 64d3b76b Christos KK Loverdos
                        published = publicCheckBox.getValue();
224 64d3b76b Christos KK Loverdos
                    }
225 64d3b76b Christos KK Loverdos
                    else {
226 64d3b76b Christos KK Loverdos
                        published = Boolean.FALSE;
227 64d3b76b Christos KK Loverdos
                    }
228 64d3b76b Christos KK Loverdos
229 64d3b76b Christos KK Loverdos
                    updateMetaDataForPublicSharing(published);
230 64d3b76b Christos KK Loverdos
                }
231 64d3b76b Christos KK Loverdos
            });
232 64d3b76b Christos KK Loverdos
233 64d3b76b Christos KK Loverdos
            publicCheckPanel.add(publicCheckBox);
234 64d3b76b Christos KK Loverdos
            publicCheckPanel.add(publicCheckTitle);
235 64d3b76b Christos KK Loverdos
            publicCheckPanel.add(publicCheckInfo);
236 64d3b76b Christos KK Loverdos
237 64d3b76b Christos KK Loverdos
            // Public Link
238 64d3b76b Christos KK Loverdos
            publicPathPanel.setVisible(false);
239 64d3b76b Christos KK Loverdos
            publicPathPanel.setWidth(Const.PERCENT_100);
240 64d3b76b Christos KK Loverdos
            publicPathPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
241 b551f85b Christos KK Loverdos
            publicPathPanel.add(new Label(Const.TXT_PUBLIC_LINK));
242 64d3b76b Christos KK Loverdos
            publicPathPanel.setSpacing(8);
243 64d3b76b Christos KK Loverdos
            publicPathPanel.addStyleName("pithos-TabPanelBottom");
244 64d3b76b Christos KK Loverdos
245 64d3b76b Christos KK Loverdos
            publicPathText.setWidth(Const.PERCENT_100);
246 64d3b76b Christos KK Loverdos
            publicPathText.addClickHandler(new ClickHandler() {
247 64d3b76b Christos KK Loverdos
                @Override
248 64d3b76b Christos KK Loverdos
                public void onClick(ClickEvent event) {
249 64d3b76b Christos KK Loverdos
                    Pithos.enableIESelection();
250 64d3b76b Christos KK Loverdos
                    ((TextBox) event.getSource()).selectAll();
251 64d3b76b Christos KK Loverdos
                    Pithos.preventIESelection();
252 64d3b76b Christos KK Loverdos
                }
253 64d3b76b Christos KK Loverdos
            });
254 64d3b76b Christos KK Loverdos
            publicPathText.setText(Window.Location.getHost() + file.getPublicUri());
255 64d3b76b Christos KK Loverdos
            publicPathText.setTitle("Use this link for sharing the file via e-mail, IM, etc. (crtl-C/cmd-C to copy to system clipboard)");
256 64d3b76b Christos KK Loverdos
            publicPathText.setReadOnly(true);
257 64d3b76b Christos KK Loverdos
            publicPathPanel.add(publicPathText);
258 64d3b76b Christos KK Loverdos
259 64d3b76b Christos KK Loverdos
            publicSharingPanel.add(publicCheckPanel);
260 64d3b76b Christos KK Loverdos
            publicSharingPanel.add(publicPathPanel);
261 64d3b76b Christos KK Loverdos
262 64d3b76b Christos KK Loverdos
            Scheduler.get().scheduleDeferred(new Command() {
263 64d3b76b Christos KK Loverdos
                @Override
264 64d3b76b Christos KK Loverdos
                public void execute() {
265 64d3b76b Christos KK Loverdos
                    showLinkForPublicSharing();
266 64d3b76b Christos KK Loverdos
                }
267 64d3b76b Christos KK Loverdos
            });
268 64d3b76b Christos KK Loverdos
        }
269 64d3b76b Christos KK Loverdos
    }
270 64d3b76b Christos KK Loverdos
271 64d3b76b Christos KK Loverdos
    private void populatePrivateSharingPanel(VerticalPanel privateSharingPanel) {
272 64d3b76b Christos KK Loverdos
        final HorizontalPanel privateCheckPanel = new HorizontalPanel();
273 64d3b76b Christos KK Loverdos
        final VerticalPanel privatePermPanel = new VerticalPanel();
274 64d3b76b Christos KK Loverdos
        final HorizontalPanel permButtons = new HorizontalPanel();
275 64d3b76b Christos KK Loverdos
276 64d3b76b Christos KK Loverdos
        privateCheckPanel.setSpacing(8);
277 64d3b76b Christos KK Loverdos
        privatePermPanel.setVisible(isFilePrivatelyShared());
278 64d3b76b Christos KK Loverdos
        permButtons.setSpacing(8);
279 64d3b76b Christos KK Loverdos
280 64d3b76b Christos KK Loverdos
        // Check box header
281 64d3b76b Christos KK Loverdos
        final CheckBox privateCheckBox = new CheckBox();
282 64d3b76b Christos KK Loverdos
        final Label privateCheckTitle = new  InlineHTML("<b>Private sharing</b>");
283 64d3b76b Christos KK Loverdos
        final Label privateCheckInfo = new Label("Only people explicitly granted permission can access. Sign-in required.", true);
284 64d3b76b Christos KK Loverdos
285 64d3b76b Christos KK Loverdos
        privateCheckBox.setValue(isFilePrivatelyShared());
286 64d3b76b Christos KK Loverdos
        privateCheckBox.addClickHandler(new ClickHandler() {
287 64d3b76b Christos KK Loverdos
            @Override
288 64d3b76b Christos KK Loverdos
            public void onClick(ClickEvent event) {
289 b12da07a Christos KK Loverdos
                // This is the value *after* the click is applied :)
290 b12da07a Christos KK Loverdos
                boolean userCheckedIt = privateCheckBox.getValue();
291 b12da07a Christos KK Loverdos
                boolean userUncheckedIt = !userCheckedIt;
292 b12da07a Christos KK Loverdos
293 64d3b76b Christos KK Loverdos
                if(isFilePrivatelyShared()) {
294 64d3b76b Christos KK Loverdos
                    // ignore the click, set it always to "checked"
295 64d3b76b Christos KK Loverdos
                    privateCheckBox.setValue(true);
296 64d3b76b Christos KK Loverdos
                    // show permissions
297 64d3b76b Christos KK Loverdos
                    privatePermPanel.setVisible(true);
298 b12da07a Christos KK Loverdos
299 b12da07a Christos KK Loverdos
                    // Refs #3593
300 b12da07a Christos KK Loverdos
                    if(userUncheckedIt) {
301 b12da07a Christos KK Loverdos
                        new PremissionsUncheckWarning(app).center();
302 b12da07a Christos KK Loverdos
                    }
303 64d3b76b Christos KK Loverdos
                }
304 64d3b76b Christos KK Loverdos
                else {
305 b12da07a Christos KK Loverdos
                    privatePermPanel.setVisible(userCheckedIt);
306 64d3b76b Christos KK Loverdos
                }
307 64d3b76b Christos KK Loverdos
            }
308 64d3b76b Christos KK Loverdos
        });
309 64d3b76b Christos KK Loverdos
310 64d3b76b Christos KK Loverdos
        privateCheckPanel.add(privateCheckBox);
311 64d3b76b Christos KK Loverdos
        privateCheckPanel.add(privateCheckTitle);
312 64d3b76b Christos KK Loverdos
        privateCheckPanel.add(privateCheckInfo);
313 64d3b76b Christos KK Loverdos
314 64d3b76b Christos KK Loverdos
        // Permission list
315 64d3b76b Christos KK Loverdos
        permList = new PermissionsList(app, privateSharingImages, file.getPermissions(), file.getOwnerID(), false, new Command() {
316 64d3b76b Christos KK Loverdos
            @Override
317 64d3b76b Christos KK Loverdos
            public void execute() {
318 64d3b76b Christos KK Loverdos
                updateMetaDataForPrivateSharing();
319 64d3b76b Christos KK Loverdos
            }
320 64d3b76b Christos KK Loverdos
        });
321 64d3b76b Christos KK Loverdos
322 64d3b76b Christos KK Loverdos
        // Permission Add buttons
323 64d3b76b Christos KK Loverdos
        Button addUser = new Button("Add User", new ClickHandler() {
324 64d3b76b Christos KK Loverdos
            @Override
325 64d3b76b Christos KK Loverdos
            public void onClick(ClickEvent event) {
326 64d3b76b Christos KK Loverdos
                PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, true);
327 64d3b76b Christos KK Loverdos
                dlg.center();
328 64d3b76b Christos KK Loverdos
                permList.updatePermissionTable();
329 64d3b76b Christos KK Loverdos
            }
330 64d3b76b Christos KK Loverdos
        });
331 64d3b76b Christos KK Loverdos
        addUser.addStyleName("button");
332 64d3b76b Christos KK Loverdos
        permButtons.add(addUser);
333 64d3b76b Christos KK Loverdos
334 da9e51db Christos KK Loverdos
        final boolean haveGroups = app.getAccount().getGroups().size() > 0;
335 49a8183f Christos KK Loverdos
336 49a8183f Christos KK Loverdos
        if(haveGroups) {
337 49a8183f Christos KK Loverdos
            Button addGroup = new Button("Add Group", new ClickHandler() {
338 49a8183f Christos KK Loverdos
                @Override
339 49a8183f Christos KK Loverdos
                public void onClick(ClickEvent event) {
340 49a8183f Christos KK Loverdos
                    PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, false);
341 49a8183f Christos KK Loverdos
                    dlg.center();
342 49a8183f Christos KK Loverdos
                    permList.updatePermissionTable();
343 49a8183f Christos KK Loverdos
                }
344 49a8183f Christos KK Loverdos
            });
345 49a8183f Christos KK Loverdos
            addGroup.addStyleName("button");
346 49a8183f Christos KK Loverdos
347 49a8183f Christos KK Loverdos
            permButtons.add(addGroup);
348 49a8183f Christos KK Loverdos
            permButtons.setCellHorizontalAlignment(addGroup, HasHorizontalAlignment.ALIGN_CENTER);
349 da9e51db Christos KK Loverdos
        }
350 64d3b76b Christos KK Loverdos
351 49a8183f Christos KK Loverdos
        final Button addEverybody = new Button("Add everybody", new ClickHandler() {
352 34cd9aff Christos KK Loverdos
            @Override
353 34cd9aff Christos KK Loverdos
            public void onClick(ClickEvent event) {
354 34cd9aff Christos KK Loverdos
                Pithos.LOG("Adding to Everybody");
355 34cd9aff Christos KK Loverdos
                Pithos.LOG("");
356 34cd9aff Christos KK Loverdos
                permList.addPermission("*", true, false);
357 34cd9aff Christos KK Loverdos
                permList.updatePermissionTable();
358 34cd9aff Christos KK Loverdos
            }
359 34cd9aff Christos KK Loverdos
        });
360 34cd9aff Christos KK Loverdos
        addEverybody.addStyleName("button");
361 34cd9aff Christos KK Loverdos
        permButtons.add(addEverybody);
362 34cd9aff Christos KK Loverdos
363 64d3b76b Christos KK Loverdos
        privatePermPanel.add(permList);
364 64d3b76b Christos KK Loverdos
        privatePermPanel.add(permButtons);
365 64d3b76b Christos KK Loverdos
366 64d3b76b Christos KK Loverdos
        // Private Link
367 64d3b76b Christos KK Loverdos
        privatePathPanel.setVisible(false);
368 64d3b76b Christos KK Loverdos
        privatePathPanel.setWidth(Const.PERCENT_100);
369 64d3b76b Christos KK Loverdos
        privatePathPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
370 b551f85b Christos KK Loverdos
        privatePathPanel.add(new Label(Const.TXT_PRIVATE_LINK));
371 64d3b76b Christos KK Loverdos
        privatePathPanel.setSpacing(8);
372 64d3b76b Christos KK Loverdos
        privatePathPanel.addStyleName("pithos-TabPanelBottom");
373 64d3b76b Christos KK Loverdos
374 64d3b76b Christos KK Loverdos
        privatePathText.setWidth(Const.PERCENT_100);
375 64d3b76b Christos KK Loverdos
        privatePathText.addClickHandler(new ClickHandler() {
376 64d3b76b Christos KK Loverdos
            @Override
377 64d3b76b Christos KK Loverdos
            public void onClick(ClickEvent event) {
378 64d3b76b Christos KK Loverdos
                Pithos.enableIESelection();
379 64d3b76b Christos KK Loverdos
                ((TextBox) event.getSource()).selectAll();
380 64d3b76b Christos KK Loverdos
                Pithos.preventIESelection();
381 64d3b76b Christos KK Loverdos
            }
382 64d3b76b Christos KK Loverdos
        });
383 64d3b76b Christos KK Loverdos
        privatePathText.setText(Window.Location.getHost() + file.getPublicUri());
384 64d3b76b Christos KK Loverdos
        privatePathText.setTitle("Use this link for sharing the file via e-mail, IM, etc. (crtl-C/cmd-C to copy to system clipboard)");
385 64d3b76b Christos KK Loverdos
        privatePathText.setWidth(Const.PERCENT_100);
386 64d3b76b Christos KK Loverdos
        privatePathText.setReadOnly(true);
387 64d3b76b Christos KK Loverdos
        privatePathPanel.add(privatePathText);
388 64d3b76b Christos KK Loverdos
389 64d3b76b Christos KK Loverdos
        Scheduler.get().scheduleDeferred(new Command() {
390 64d3b76b Christos KK Loverdos
            @Override
391 64d3b76b Christos KK Loverdos
            public void execute() {
392 64d3b76b Christos KK Loverdos
                showLinkForPrivateSharing();
393 64d3b76b Christos KK Loverdos
            }
394 64d3b76b Christos KK Loverdos
        });
395 64d3b76b Christos KK Loverdos
396 64d3b76b Christos KK Loverdos
        privateSharingPanel.add(privateCheckPanel);
397 64d3b76b Christos KK Loverdos
        privateSharingPanel.add(privatePermPanel);
398 64d3b76b Christos KK Loverdos
        privateSharingPanel.add(privatePathPanel);
399 64d3b76b Christos KK Loverdos
    }
400 64d3b76b Christos KK Loverdos
401 64d3b76b Christos KK Loverdos
    private Panel createMainPanel() {
402 64d3b76b Christos KK Loverdos
        VerticalPanel panelAll = new VerticalPanel();
403 64d3b76b Christos KK Loverdos
        VerticalPanel panelPublic = new VerticalPanel();
404 64d3b76b Christos KK Loverdos
        VerticalPanel panelPrivate = new VerticalPanel();
405 64d3b76b Christos KK Loverdos
406 64d3b76b Christos KK Loverdos
        populatePrivateSharingPanel(panelPrivate);
407 64d3b76b Christos KK Loverdos
        populatePublicSharingPanel(panelPublic);
408 64d3b76b Christos KK Loverdos
409 cfdb1476 Christos KK Loverdos
        panelAll.add(panelPrivate);
410 cfdb1476 Christos KK Loverdos
        panelAll.add(new InlineHTML("<hr/>"));
411 cfdb1476 Christos KK Loverdos
        panelAll.add(panelPublic);
412 64d3b76b Christos KK Loverdos
413 64d3b76b Christos KK Loverdos
        return panelAll;
414 64d3b76b Christos KK Loverdos
    }
415 64d3b76b Christos KK Loverdos
416 64d3b76b Christos KK Loverdos
    private boolean isFilePubliclyShared() {
417 64d3b76b Christos KK Loverdos
        return file.isPublished();
418 64d3b76b Christos KK Loverdos
    }
419 64d3b76b Christos KK Loverdos
420 64d3b76b Christos KK Loverdos
    private boolean isFilePrivatelyShared() {
421 64d3b76b Christos KK Loverdos
        return file.isShared();
422 64d3b76b Christos KK Loverdos
    }
423 64d3b76b Christos KK Loverdos
424 64d3b76b Christos KK Loverdos
    private void showLinkForPublicSharing() {
425 64d3b76b Christos KK Loverdos
                if (isFilePubliclyShared()) {
426 64d3b76b Christos KK Loverdos
                        UrlBuilder b = Window.Location.createUrlBuilder();
427 64d3b76b Christos KK Loverdos
                        b.setPath(file.getPublicUri());
428 64d3b76b Christos KK Loverdos
                        publicPathText.setText(b.buildString());
429 64d3b76b Christos KK Loverdos
                publicPathPanel.setVisible(true);
430 64d3b76b Christos KK Loverdos
                }
431 64d3b76b Christos KK Loverdos
                else {
432 64d3b76b Christos KK Loverdos
                        publicPathPanel.setVisible(false);
433 64d3b76b Christos KK Loverdos
                }
434 64d3b76b Christos KK Loverdos
    }
435 64d3b76b Christos KK Loverdos
436 64d3b76b Christos KK Loverdos
    private void showLinkForPrivateSharing() {
437 64d3b76b Christos KK Loverdos
        if (isFilePrivatelyShared()) {
438 64d3b76b Christos KK Loverdos
            UrlBuilder b = Window.Location.createUrlBuilder();
439 28e270f9 Christos KK Loverdos
            b.setPath(Pithos.getStorageAPIURL() + file.getOwnerID() + file.getUri());
440 64d3b76b Christos KK Loverdos
            String href = Window.Location.getHref();
441 64d3b76b Christos KK Loverdos
            boolean hasParameters = href.contains(Const.QUESTION_MARK);
442 64d3b76b Christos KK Loverdos
            privatePathText.setText(href + (hasParameters ? Const.AMPERSAND : Const.QUESTION_MARK) + Const.GOTO_EQ + b.buildString());
443 64d3b76b Christos KK Loverdos
            privatePathPanel.setVisible(true);
444 64d3b76b Christos KK Loverdos
        }
445 64d3b76b Christos KK Loverdos
        else {
446 64d3b76b Christos KK Loverdos
            privatePathPanel.setVisible(false);
447 64d3b76b Christos KK Loverdos
        }
448 64d3b76b Christos KK Loverdos
    }
449 64d3b76b Christos KK Loverdos
450 64d3b76b Christos KK Loverdos
        protected void updateMetaDataForPublicSharing(String api, String owner, final String path, final Boolean published) {
451 64d3b76b Christos KK Loverdos
        if (published != null) {
452 64d3b76b Christos KK Loverdos
            PostRequest updateFile = new PostRequest(api, owner, path) {
453 64d3b76b Christos KK Loverdos
                @Override
454 64d3b76b Christos KK Loverdos
                public void onSuccess(Resource result) {
455 28e270f9 Christos KK Loverdos
                        HeadRequest<File> headFile = new HeadRequest<File>(File.class, Pithos.getStorageAPIURL(), file.getOwnerID(), path, file) {
456 64d3b76b Christos KK Loverdos
457 64d3b76b Christos KK Loverdos
                                                @Override
458 64d3b76b Christos KK Loverdos
                                                public void onSuccess(File _result) {
459 64d3b76b Christos KK Loverdos
                                                        showLinkForPublicSharing();
460 64d3b76b Christos KK Loverdos
                                                        if (!app.isMySharedSelected()) {
461 64d3b76b Christos KK Loverdos
                                            app.updateFolder(file.getParent(), true, new Command() {
462 64d3b76b Christos KK Loverdos
                                                                        
463 64d3b76b Christos KK Loverdos
                                                                        @Override
464 64d3b76b Christos KK Loverdos
                                                                        public void execute() {
465 64d3b76b Christos KK Loverdos
                                                                                app.updateMySharedRoot();
466 64d3b76b Christos KK Loverdos
                                                                        }
467 64d3b76b Christos KK Loverdos
                                                                }, true);
468 64d3b76b Christos KK Loverdos
                            }
469 64d3b76b Christos KK Loverdos
                                                        else {
470 64d3b76b Christos KK Loverdos
                                                                app.updateSharedFolder(file.getParent(), true);
471 64d3b76b Christos KK Loverdos
                            }
472 64d3b76b Christos KK Loverdos
                                                }
473 64d3b76b Christos KK Loverdos
474 64d3b76b Christos KK Loverdos
                                                @Override
475 64d3b76b Christos KK Loverdos
                                                public void onError(Throwable t) {
476 64d3b76b Christos KK Loverdos
                                                        app.setError(t);
477 64d3b76b Christos KK Loverdos
                                    app.displayError("System error modifying file:" + t.getMessage());
478 64d3b76b Christos KK Loverdos
                                                }
479 64d3b76b Christos KK Loverdos
480 64d3b76b Christos KK Loverdos
                                                @Override
481 64d3b76b Christos KK Loverdos
                                                protected void onUnauthorized(Response response) {
482 64d3b76b Christos KK Loverdos
                                                        app.sessionExpired();
483 64d3b76b Christos KK Loverdos
                                                }
484 64d3b76b Christos KK Loverdos
                                        };
485 64d3b76b Christos KK Loverdos
                                        headFile.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
486 64d3b76b Christos KK Loverdos
                                        Scheduler.get().scheduleDeferred(headFile);
487 64d3b76b Christos KK Loverdos
                }
488 64d3b76b Christos KK Loverdos
489 64d3b76b Christos KK Loverdos
                @Override
490 64d3b76b Christos KK Loverdos
                public void onError(Throwable t) {
491 64d3b76b Christos KK Loverdos
                                        app.setError(t);
492 64d3b76b Christos KK Loverdos
                    app.displayError("System error modifying file:" + t.getMessage());
493 64d3b76b Christos KK Loverdos
                }
494 64d3b76b Christos KK Loverdos
495 64d3b76b Christos KK Loverdos
                                @Override
496 64d3b76b Christos KK Loverdos
                                protected void onUnauthorized(Response response) {
497 64d3b76b Christos KK Loverdos
                                        app.sessionExpired();
498 64d3b76b Christos KK Loverdos
                                }
499 64d3b76b Christos KK Loverdos
            };
500 64d3b76b Christos KK Loverdos
            updateFile.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
501 64d3b76b Christos KK Loverdos
            updateFile.setHeader(Const.X_OBJECT_PUBLIC, published.toString());
502 64d3b76b Christos KK Loverdos
            Scheduler.get().scheduleDeferred(updateFile);
503 64d3b76b Christos KK Loverdos
        }
504 64d3b76b Christos KK Loverdos
        else if (!app.isMySharedSelected())
505 64d3b76b Christos KK Loverdos
            app.updateFolder(file.getParent(), true, new Command() {
506 64d3b76b Christos KK Loverdos
                                @Override
507 64d3b76b Christos KK Loverdos
                                public void execute() {
508 64d3b76b Christos KK Loverdos
                                        if (file.isSharedOrPublished()) {
509 64d3b76b Christos KK Loverdos
                        app.updateMySharedRoot();
510 64d3b76b Christos KK Loverdos
                    }
511 64d3b76b Christos KK Loverdos
                                }
512 64d3b76b Christos KK Loverdos
                        }, true);
513 64d3b76b Christos KK Loverdos
        else
514 64d3b76b Christos KK Loverdos
                app.updateSharedFolder(file.getParent(), true);
515 64d3b76b Christos KK Loverdos
    }
516 64d3b76b Christos KK Loverdos
    protected void updateMetaDataForPublicSharing(Boolean published) {
517 64d3b76b Christos KK Loverdos
        updateMetaDataForPublicSharing(
518 28e270f9 Christos KK Loverdos
            Pithos.getStorageAPIURL(),
519 64d3b76b Christos KK Loverdos
            app.getUserID(),
520 64d3b76b Christos KK Loverdos
            file.getUri() + Const.QUESTION_MARK_UPDATE_EQ,
521 64d3b76b Christos KK Loverdos
            published
522 64d3b76b Christos KK Loverdos
        );
523 64d3b76b Christos KK Loverdos
    }
524 64d3b76b Christos KK Loverdos
525 64d3b76b Christos KK Loverdos
    protected void updateMetaDataForPrivateSharing(String api, String owner, final String path, final Map<String, Boolean[]> newPermissions) {
526 64d3b76b Christos KK Loverdos
        if (newPermissions != null) {
527 64d3b76b Christos KK Loverdos
            PostRequest updateFile = new PostRequest(api, owner, path) {
528 64d3b76b Christos KK Loverdos
                @Override
529 64d3b76b Christos KK Loverdos
                public void onSuccess(Resource result) {
530 28e270f9 Christos KK Loverdos
                    HeadRequest<File> headFile = new HeadRequest<File>(File.class, Pithos.getStorageAPIURL(), file.getOwnerID(), path, file) {
531 64d3b76b Christos KK Loverdos
532 64d3b76b Christos KK Loverdos
                        @Override
533 64d3b76b Christos KK Loverdos
                        public void onSuccess(File _result) {
534 64d3b76b Christos KK Loverdos
                            showLinkForPrivateSharing();
535 64d3b76b Christos KK Loverdos
                            if (!app.isMySharedSelected())
536 64d3b76b Christos KK Loverdos
                                app.updateFolder(file.getParent(), true, new Command() {
537 64d3b76b Christos KK Loverdos
538 64d3b76b Christos KK Loverdos
                                    @Override
539 64d3b76b Christos KK Loverdos
                                    public void execute() {
540 64d3b76b Christos KK Loverdos
                                        app.updateMySharedRoot();
541 64d3b76b Christos KK Loverdos
                                    }
542 64d3b76b Christos KK Loverdos
                                }, true);
543 64d3b76b Christos KK Loverdos
                            else
544 64d3b76b Christos KK Loverdos
                                app.updateSharedFolder(file.getParent(), true);
545 64d3b76b Christos KK Loverdos
                        }
546 64d3b76b Christos KK Loverdos
547 64d3b76b Christos KK Loverdos
                        @Override
548 64d3b76b Christos KK Loverdos
                        public void onError(Throwable t) {
549 64d3b76b Christos KK Loverdos
                            app.setError(t);
550 64d3b76b Christos KK Loverdos
                            app.displayError("System error modifying file:" + t.getMessage());
551 64d3b76b Christos KK Loverdos
                        }
552 64d3b76b Christos KK Loverdos
553 64d3b76b Christos KK Loverdos
                        @Override
554 64d3b76b Christos KK Loverdos
                        protected void onUnauthorized(Response response) {
555 64d3b76b Christos KK Loverdos
                            app.sessionExpired();
556 64d3b76b Christos KK Loverdos
                        }
557 64d3b76b Christos KK Loverdos
                    };
558 64d3b76b Christos KK Loverdos
                    headFile.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
559 64d3b76b Christos KK Loverdos
                    Scheduler.get().scheduleDeferred(headFile);
560 64d3b76b Christos KK Loverdos
                }
561 64d3b76b Christos KK Loverdos
562 64d3b76b Christos KK Loverdos
                @Override
563 64d3b76b Christos KK Loverdos
                public void onError(Throwable t) {
564 64d3b76b Christos KK Loverdos
                    app.setError(t);
565 64d3b76b Christos KK Loverdos
                    app.displayError("System error modifying file:" + t.getMessage());
566 64d3b76b Christos KK Loverdos
                }
567 64d3b76b Christos KK Loverdos
568 64d3b76b Christos KK Loverdos
                @Override
569 64d3b76b Christos KK Loverdos
                protected void onUnauthorized(Response response) {
570 64d3b76b Christos KK Loverdos
                    app.sessionExpired();
571 64d3b76b Christos KK Loverdos
                }
572 64d3b76b Christos KK Loverdos
            };
573 64d3b76b Christos KK Loverdos
            updateFile.setHeader(Const.X_AUTH_TOKEN, app.getUserToken());
574 64d3b76b Christos KK Loverdos
575 64d3b76b Christos KK Loverdos
            String readPermHeader = Const.READ_EQ;
576 64d3b76b Christos KK Loverdos
            String writePermHeader = Const.WRITE_EQ;
577 64d3b76b Christos KK Loverdos
            for (String u : newPermissions.keySet()) {
578 64d3b76b Christos KK Loverdos
                Boolean[] p = newPermissions.get(u);
579 64d3b76b Christos KK Loverdos
                if (p[0] != null && p[0]) {
580 64d3b76b Christos KK Loverdos
                    readPermHeader += u + Const.COMMA;
581 64d3b76b Christos KK Loverdos
                }
582 64d3b76b Christos KK Loverdos
                if (p[1] != null && p[1]) {
583 64d3b76b Christos KK Loverdos
                    writePermHeader += u + Const.COMMA;
584 64d3b76b Christos KK Loverdos
                }
585 64d3b76b Christos KK Loverdos
            }
586 64d3b76b Christos KK Loverdos
            if (readPermHeader.endsWith(Const.EQ)) {
587 64d3b76b Christos KK Loverdos
                readPermHeader = "";
588 64d3b76b Christos KK Loverdos
            }
589 64d3b76b Christos KK Loverdos
            else if (readPermHeader.endsWith(Const.COMMA)) {
590 64d3b76b Christos KK Loverdos
                readPermHeader = readPermHeader.substring(0, readPermHeader.length() - 1);
591 64d3b76b Christos KK Loverdos
            }
592 64d3b76b Christos KK Loverdos
            if (writePermHeader.endsWith(Const.EQ)) {
593 64d3b76b Christos KK Loverdos
                writePermHeader = "";
594 64d3b76b Christos KK Loverdos
            }
595 64d3b76b Christos KK Loverdos
            else if (writePermHeader.endsWith(Const.COMMA)) {
596 64d3b76b Christos KK Loverdos
                writePermHeader = writePermHeader.substring(0, writePermHeader.length() - 1);
597 64d3b76b Christos KK Loverdos
            }
598 64d3b76b Christos KK Loverdos
            String permHeader = readPermHeader +
599 64d3b76b Christos KK Loverdos
                ((readPermHeader.length()  > 0 && writePermHeader.length() > 0) ?  Const.SEMI : "") + writePermHeader;
600 64d3b76b Christos KK Loverdos
            if (permHeader.length() == 0) {
601 64d3b76b Christos KK Loverdos
                permHeader=Const.TILDE;
602 64d3b76b Christos KK Loverdos
            }
603 64d3b76b Christos KK Loverdos
            else {
604 64d3b76b Christos KK Loverdos
                permHeader = URL.encodePathSegment(permHeader);
605 64d3b76b Christos KK Loverdos
            }
606 64d3b76b Christos KK Loverdos
            updateFile.setHeader(Const.X_OBJECT_SHARING, permHeader);
607 64d3b76b Christos KK Loverdos
            Scheduler.get().scheduleDeferred(updateFile);
608 64d3b76b Christos KK Loverdos
        }
609 64d3b76b Christos KK Loverdos
        else if (!app.isMySharedSelected()) {
610 64d3b76b Christos KK Loverdos
            app.updateFolder(file.getParent(), true, new Command() {
611 64d3b76b Christos KK Loverdos
                @Override
612 64d3b76b Christos KK Loverdos
                public void execute() {
613 64d3b76b Christos KK Loverdos
                    if (file.isSharedOrPublished())
614 64d3b76b Christos KK Loverdos
                        app.updateMySharedRoot();
615 64d3b76b Christos KK Loverdos
                }
616 64d3b76b Christos KK Loverdos
            }, true);
617 64d3b76b Christos KK Loverdos
        }
618 64d3b76b Christos KK Loverdos
        else {
619 64d3b76b Christos KK Loverdos
            app.updateSharedFolder(file.getParent(), true);
620 64d3b76b Christos KK Loverdos
        }
621 64d3b76b Christos KK Loverdos
    }
622 64d3b76b Christos KK Loverdos
    protected void updateMetaDataForPrivateSharing() {
623 64d3b76b Christos KK Loverdos
        updateMetaDataForPrivateSharing(
624 28e270f9 Christos KK Loverdos
            Pithos.getStorageAPIURL(),
625 64d3b76b Christos KK Loverdos
            app.getUserID(),
626 64d3b76b Christos KK Loverdos
            file.getUri() + Const.QUESTION_MARK_UPDATE_EQ,
627 64d3b76b Christos KK Loverdos
            permList.getPermissions()
628 64d3b76b Christos KK Loverdos
        );
629 64d3b76b Christos KK Loverdos
    }
630 b12da07a Christos KK Loverdos
631 64d3b76b Christos KK Loverdos
    @Override
632 64d3b76b Christos KK Loverdos
        protected void onPreviewNativeEvent(NativePreviewEvent preview) {
633 64d3b76b Christos KK Loverdos
            super.onPreviewNativeEvent(preview);
634 64d3b76b Christos KK Loverdos
635 64d3b76b Christos KK Loverdos
            NativeEvent evt = preview.getNativeEvent();
636 64d3b76b Christos KK Loverdos
            if (evt.getType().equals(Const.EVENT_TYPE_KEYDOWN) &&
637 64d3b76b Christos KK Loverdos
            evt.getKeyCode() == KeyCodes.KEY_ENTER) {
638 64d3b76b Christos KK Loverdos
639 64d3b76b Christos KK Loverdos
            closeDialog();
640 64d3b76b Christos KK Loverdos
        }
641 64d3b76b Christos KK Loverdos
        }
642 64d3b76b Christos KK Loverdos
643 64d3b76b Christos KK Loverdos
    @Override
644 64d3b76b Christos KK Loverdos
    protected boolean accept() {
645 64d3b76b Christos KK Loverdos
        return true;
646 64d3b76b Christos KK Loverdos
    }
647 64d3b76b Christos KK Loverdos
}