root / src / gr / grnet / pithos / web / client / Pithos.java @ d2b953c5
History | View | Annotate | Download (58.4 kB)
1 | a57faaf0 | Christos Stathis | /*
|
---|---|---|---|
2 | e6e9f6e6 | Christos KK Loverdos | * Copyright 2011-2013 GRNET S.A. All rights reserved.
|
3 | 63366925 | Christos Stathis | *
|
4 | 63366925 | Christos Stathis | * Redistribution and use in source and binary forms, with or
|
5 | 63366925 | Christos Stathis | * without modification, are permitted provided that the following
|
6 | 63366925 | Christos Stathis | * conditions are met:
|
7 | 63366925 | Christos Stathis | *
|
8 | 63366925 | Christos Stathis | * 1. Redistributions of source code must retain the above
|
9 | 63366925 | Christos Stathis | * copyright notice, this list of conditions and the following
|
10 | 63366925 | Christos Stathis | * disclaimer.
|
11 | 63366925 | Christos Stathis | *
|
12 | 63366925 | Christos Stathis | * 2. Redistributions in binary form must reproduce the above
|
13 | 63366925 | Christos Stathis | * copyright notice, this list of conditions and the following
|
14 | 63366925 | Christos Stathis | * disclaimer in the documentation and/or other materials
|
15 | 63366925 | Christos Stathis | * provided with the distribution.
|
16 | 63366925 | Christos Stathis | *
|
17 | 63366925 | Christos Stathis | * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
18 | 63366925 | Christos Stathis | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
19 | 63366925 | Christos Stathis | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
20 | 63366925 | Christos Stathis | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
21 | 63366925 | Christos Stathis | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22 | 63366925 | Christos Stathis | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23 | 63366925 | Christos Stathis | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
24 | 63366925 | Christos Stathis | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
25 | 63366925 | Christos Stathis | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
26 | 63366925 | Christos Stathis | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27 | 63366925 | Christos Stathis | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28 | 63366925 | Christos Stathis | * POSSIBILITY OF SUCH DAMAGE.
|
29 | 63366925 | Christos Stathis | *
|
30 | 63366925 | Christos Stathis | * The views and conclusions contained in the software and
|
31 | 63366925 | Christos Stathis | * documentation are those of the authors and should not be
|
32 | 63366925 | Christos Stathis | * interpreted as representing official policies, either expressed
|
33 | 63366925 | Christos Stathis | * or implied, of GRNET S.A.
|
34 | a57faaf0 | Christos Stathis | */
|
35 | a57faaf0 | Christos Stathis | package gr.grnet.pithos.web.client; |
36 | a57faaf0 | Christos Stathis | |
37 | a57faaf0 | Christos Stathis | import com.google.gwt.core.client.EntryPoint; |
38 | a57faaf0 | Christos Stathis | import com.google.gwt.core.client.GWT; |
39 | 3646552f | Christos Stathis | import com.google.gwt.core.client.JsArrayString; |
40 | 7811b9d1 | Christos Stathis | import com.google.gwt.core.client.Scheduler; |
41 | 983f9ee2 | Christos Stathis | import com.google.gwt.core.client.Scheduler.RepeatingCommand; |
42 | 7811b9d1 | Christos Stathis | import com.google.gwt.core.client.Scheduler.ScheduledCommand; |
43 | 7811b9d1 | Christos Stathis | import com.google.gwt.event.dom.client.ClickEvent; |
44 | 7811b9d1 | Christos Stathis | import com.google.gwt.event.dom.client.ClickHandler; |
45 | a57faaf0 | Christos Stathis | import com.google.gwt.event.logical.shared.ResizeEvent; |
46 | a57faaf0 | Christos Stathis | import com.google.gwt.event.logical.shared.ResizeHandler; |
47 | 7811b9d1 | Christos Stathis | import com.google.gwt.http.client.Response; |
48 | f5023f13 | Christos Stathis | import com.google.gwt.http.client.URL; |
49 | b1001100 | Christos Stathis | import com.google.gwt.i18n.client.DateTimeFormat; |
50 | f0105e9f | Christos Stathis | import com.google.gwt.i18n.client.Dictionary; |
51 | b1001100 | Christos Stathis | import com.google.gwt.i18n.client.TimeZone; |
52 | 01bd6099 | Christos Stathis | import com.google.gwt.resources.client.ClientBundle; |
53 | 01bd6099 | Christos Stathis | import com.google.gwt.resources.client.CssResource; |
54 | a57faaf0 | Christos Stathis | import com.google.gwt.resources.client.ImageResource; |
55 | 9fbf5596 | Christos Stathis | import com.google.gwt.resources.client.ImageResource.ImageOptions; |
56 | cdd90acb | Christos KK Loverdos | import com.google.gwt.user.client.*; |
57 | cdd90acb | Christos KK Loverdos | import com.google.gwt.user.client.ui.*; |
58 | 7811b9d1 | Christos Stathis | import com.google.gwt.view.client.SelectionChangeEvent; |
59 | 7811b9d1 | Christos Stathis | import com.google.gwt.view.client.SelectionChangeEvent.Handler; |
60 | 7811b9d1 | Christos Stathis | import com.google.gwt.view.client.SingleSelectionModel; |
61 | eee72ed5 | Christos KK Loverdos | import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs; |
62 | cc0120ab | Christos KK Loverdos | import gr.grnet.pithos.web.client.catalog.UserCatalogs; |
63 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.commands.UploadFileCommand; |
64 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.foldertree.*; |
65 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.grouptree.Group; |
66 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.grouptree.GroupTreeView; |
67 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.grouptree.GroupTreeViewModel; |
68 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView; |
69 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeViewModel; |
70 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView; |
71 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeViewModel; |
72 | cdd90acb | Christos KK Loverdos | import gr.grnet.pithos.web.client.rest.*; |
73 | cdd90acb | Christos KK Loverdos | import org.apache.http.HttpStatus; |
74 | cdd90acb | Christos KK Loverdos | |
75 | cdd90acb | Christos KK Loverdos | import java.util.*; |
76 | 6084aa02 | Christos Stathis | |
77 | a57faaf0 | Christos Stathis | /**
|
78 | a57faaf0 | Christos Stathis | * Entry point classes define <code>onModuleLoad()</code>.
|
79 | a57faaf0 | Christos Stathis | */
|
80 | 749068ba | Christos Stathis | public class Pithos implements EntryPoint, ResizeHandler { |
81 | d8e2a280 | Christos KK Loverdos | private static final boolean IsLOGEnabled = false; |
82 | 45c76262 | Christos KK Loverdos | public static final boolean IsDetailedHTTPLOGEnabled = true; |
83 | 10ff638f | Christos KK Loverdos | public static final boolean IsFullResponseBodyLOGEnabled = true; |
84 | 10ff638f | Christos KK Loverdos | |
85 | 59aa2375 | Christos KK Loverdos | public static final Set<String> HTTPHeadersToIgnoreInLOG = new HashSet<String>(); |
86 | 59aa2375 | Christos KK Loverdos | static {
|
87 | 59aa2375 | Christos KK Loverdos | HTTPHeadersToIgnoreInLOG.add(Const.HTTP_HEADER_CONNECTION); |
88 | 59aa2375 | Christos KK Loverdos | HTTPHeadersToIgnoreInLOG.add(Const.HTTP_HEADER_DATE); |
89 | 59aa2375 | Christos KK Loverdos | HTTPHeadersToIgnoreInLOG.add(Const.HTTP_HEADER_KEEP_ALIVE); |
90 | 59aa2375 | Christos KK Loverdos | HTTPHeadersToIgnoreInLOG.add(Const.HTTP_HEADER_SERVER); |
91 | 77a99b26 | Christos KK Loverdos | HTTPHeadersToIgnoreInLOG.add(Const.HTTP_HEADER_VARY); |
92 | 10ff638f | Christos KK Loverdos | HTTPHeadersToIgnoreInLOG.add(Const.IF_MODIFIED_SINCE); |
93 | 59aa2375 | Christos KK Loverdos | } |
94 | e0a0c6ea | Christos KK Loverdos | |
95 | cdd90acb | Christos KK Loverdos | public static final Configuration config = GWT.create(Configuration.class); |
96 | d2b953c5 | Kostas Papadimitriou | public static final String CONFIG_API_PATH = getFromOtherPropertiesOrDefaultString("STORAGE_API_URL", config.apiPath()); |
97 | 28e270f9 | Christos KK Loverdos | static {
|
98 | 28e270f9 | Christos KK Loverdos | LOG("CONFIG_API_PATH = ", CONFIG_API_PATH);
|
99 | 28e270f9 | Christos KK Loverdos | } |
100 | 28e270f9 | Christos KK Loverdos | |
101 | 28e270f9 | Christos KK Loverdos | public static final Dictionary otherProperties = Dictionary.getDictionary(Const.OTHER_PROPERTIES); |
102 | 28e270f9 | Christos KK Loverdos | public static String getFromOtherPropertiesOrNull(String key) { |
103 | 28e270f9 | Christos KK Loverdos | try {
|
104 | 28e270f9 | Christos KK Loverdos | return otherProperties.get(key);
|
105 | 28e270f9 | Christos KK Loverdos | } |
106 | 28e270f9 | Christos KK Loverdos | catch(Exception e) { |
107 | 28e270f9 | Christos KK Loverdos | LOGError(e); |
108 | 28e270f9 | Christos KK Loverdos | return null; |
109 | 28e270f9 | Christos KK Loverdos | } |
110 | 28e270f9 | Christos KK Loverdos | } |
111 | d2b953c5 | Kostas Papadimitriou | public static String getFromOtherPropertiesOrDefaultString(String key, String dflt) { |
112 | d2b953c5 | Kostas Papadimitriou | try {
|
113 | d2b953c5 | Kostas Papadimitriou | return otherProperties.get(key);
|
114 | d2b953c5 | Kostas Papadimitriou | } |
115 | d2b953c5 | Kostas Papadimitriou | catch(Exception e) { |
116 | d2b953c5 | Kostas Papadimitriou | return dflt;
|
117 | d2b953c5 | Kostas Papadimitriou | } |
118 | d2b953c5 | Kostas Papadimitriou | } |
119 | 28e270f9 | Christos KK Loverdos | public static final String OTHERPROPS_STORAGE_API_URL = getFromOtherPropertiesOrNull("STORAGE_API_URL"); |
120 | 28e270f9 | Christos KK Loverdos | public static final String OTHERPROPS_USER_CATALOGS_API_URL = getFromOtherPropertiesOrNull("USER_CATALOGS_API_URL"); |
121 | 28e270f9 | Christos KK Loverdos | static {
|
122 | 28e270f9 | Christos KK Loverdos | LOG("STORAGE_API_URL = ", OTHERPROPS_STORAGE_API_URL);
|
123 | 28e270f9 | Christos KK Loverdos | LOG("USER_CATALOGS_API_URL = ", OTHERPROPS_USER_CATALOGS_API_URL);
|
124 | 28e270f9 | Christos KK Loverdos | } |
125 | 28e270f9 | Christos KK Loverdos | |
126 | 28e270f9 | Christos KK Loverdos | public static final String STORAGE_API_URL; |
127 | 28e270f9 | Christos KK Loverdos | static {
|
128 | 28e270f9 | Christos KK Loverdos | if(OTHERPROPS_STORAGE_API_URL != null) { |
129 | 28e270f9 | Christos KK Loverdos | STORAGE_API_URL = OTHERPROPS_STORAGE_API_URL; |
130 | 28e270f9 | Christos KK Loverdos | } |
131 | 28e270f9 | Christos KK Loverdos | else if(CONFIG_API_PATH != null) { |
132 | 28e270f9 | Christos KK Loverdos | STORAGE_API_URL = CONFIG_API_PATH; |
133 | 28e270f9 | Christos KK Loverdos | } |
134 | 28e270f9 | Christos KK Loverdos | else {
|
135 | 28e270f9 | Christos KK Loverdos | throw new RuntimeException("Unknown STORAGE_API_URL"); |
136 | 28e270f9 | Christos KK Loverdos | } |
137 | 28e270f9 | Christos KK Loverdos | } |
138 | 28e270f9 | Christos KK Loverdos | public static final String USER_CATALOGS_API_URL; |
139 | 28e270f9 | Christos KK Loverdos | static {
|
140 | 28e270f9 | Christos KK Loverdos | if(OTHERPROPS_USER_CATALOGS_API_URL != null) { |
141 | 28e270f9 | Christos KK Loverdos | USER_CATALOGS_API_URL = OTHERPROPS_USER_CATALOGS_API_URL; |
142 | 28e270f9 | Christos KK Loverdos | } |
143 | 28e270f9 | Christos KK Loverdos | else if(OTHERPROPS_STORAGE_API_URL != null) { |
144 | 28e270f9 | Christos KK Loverdos | throw new RuntimeException("STORAGE_API_URL is defined but USER_CATALOGS_API_URL is not"); |
145 | 28e270f9 | Christos KK Loverdos | } |
146 | 28e270f9 | Christos KK Loverdos | else {
|
147 | 28e270f9 | Christos KK Loverdos | // https://server.com/v1/ --> https://server.com
|
148 | 28e270f9 | Christos KK Loverdos | String url = CONFIG_API_PATH;
|
149 | 28e270f9 | Christos KK Loverdos | url = Helpers.stripTrailing(url, "/");
|
150 | 28e270f9 | Christos KK Loverdos | url = Helpers.upToIncludingLastPart(url, "/");
|
151 | 28e270f9 | Christos KK Loverdos | url = Helpers.stripTrailing(url, "/");
|
152 | 28e270f9 | Christos KK Loverdos | url = url + "/user_catalogs";
|
153 | 28e270f9 | Christos KK Loverdos | |
154 | 28e270f9 | Christos KK Loverdos | USER_CATALOGS_API_URL = url; |
155 | 28e270f9 | Christos KK Loverdos | |
156 | 28e270f9 | Christos KK Loverdos | LOG("USER_CATALOGS_API_URL = ", USER_CATALOGS_API_URL);
|
157 | 28e270f9 | Christos KK Loverdos | } |
158 | 28e270f9 | Christos KK Loverdos | } |
159 | cdd90acb | Christos KK Loverdos | |
160 | cdd90acb | Christos KK Loverdos | public interface Style extends CssResource { |
161 | cdd90acb | Christos KK Loverdos | String commandAnchor();
|
162 | cdd90acb | Christos KK Loverdos | |
163 | cdd90acb | Christos KK Loverdos | String statistics();
|
164 | cdd90acb | Christos KK Loverdos | |
165 | cdd90acb | Christos KK Loverdos | @ClassName("gwt-HTML") |
166 | cdd90acb | Christos KK Loverdos | String html();
|
167 | cdd90acb | Christos KK Loverdos | |
168 | cdd90acb | Christos KK Loverdos | String uploadAlert();
|
169 | cdd90acb | Christos KK Loverdos | |
170 | cdd90acb | Christos KK Loverdos | String uploadAlertLink();
|
171 | cdd90acb | Christos KK Loverdos | |
172 | cdd90acb | Christos KK Loverdos | String uploadAlertProgress();
|
173 | cdd90acb | Christos KK Loverdos | |
174 | cdd90acb | Christos KK Loverdos | String uploadAlertPercent();
|
175 | cdd90acb | Christos KK Loverdos | |
176 | cdd90acb | Christos KK Loverdos | String uploadAlertClose();
|
177 | cdd90acb | Christos KK Loverdos | } |
178 | cdd90acb | Christos KK Loverdos | |
179 | cdd90acb | Christos KK Loverdos | public interface Resources extends ClientBundle { |
180 | cdd90acb | Christos KK Loverdos | @Source("Pithos.css") |
181 | cdd90acb | Christos KK Loverdos | Style pithosCss();
|
182 | cdd90acb | Christos KK Loverdos | |
183 | cdd90acb | Christos KK Loverdos | @Source("gr/grnet/pithos/resources/close-popup.png") |
184 | cdd90acb | Christos KK Loverdos | ImageResource closePopup(); |
185 | cdd90acb | Christos KK Loverdos | } |
186 | cdd90acb | Christos KK Loverdos | |
187 | cdd90acb | Christos KK Loverdos | public static Resources resources = GWT.create(Resources.class); |
188 | cdd90acb | Christos KK Loverdos | |
189 | cdd90acb | Christos KK Loverdos | /**
|
190 | cdd90acb | Christos KK Loverdos | * Instantiate an application-level image bundle. This object will provide
|
191 | cdd90acb | Christos KK Loverdos | * programmatic access to all the images needed by widgets.
|
192 | cdd90acb | Christos KK Loverdos | */
|
193 | cdd90acb | Christos KK Loverdos | static Images images = (Images) GWT.create(Images.class);
|
194 | a57faaf0 | Christos Stathis | |
195 | cc0120ab | Christos KK Loverdos | public String getUserID() { |
196 | cc0120ab | Christos KK Loverdos | return userID;
|
197 | 6084aa02 | Christos Stathis | } |
198 | a57faaf0 | Christos Stathis | |
199 | b9a1049a | Christos KK Loverdos | public UserCatalogs getUserCatalogs() {
|
200 | b9a1049a | Christos KK Loverdos | return userCatalogs;
|
201 | b9a1049a | Christos KK Loverdos | } |
202 | b9a1049a | Christos KK Loverdos | |
203 | cde22209 | Christos KK Loverdos | public String getCurrentUserDisplayNameOrID() { |
204 | dc8cc18a | Christos KK Loverdos | final String displayName = userCatalogs.getDisplayName(getUserID()); |
205 | 1bb330dc | Christos KK Loverdos | return displayName == null ? getUserID() : displayName; |
206 | 1bb330dc | Christos KK Loverdos | } |
207 | 1bb330dc | Christos KK Loverdos | |
208 | c8f8690d | Christos KK Loverdos | public boolean hasDisplayNameForUserID(String userID) { |
209 | dc8cc18a | Christos KK Loverdos | return userCatalogs.getDisplayName(userID) != null; |
210 | b9a1049a | Christos KK Loverdos | } |
211 | b9a1049a | Christos KK Loverdos | |
212 | c8f8690d | Christos KK Loverdos | public boolean hasIDForUserDisplayName(String userDisplayName) { |
213 | c8f8690d | Christos KK Loverdos | return userCatalogs.getID(userDisplayName) != null; |
214 | c8f8690d | Christos KK Loverdos | } |
215 | c8f8690d | Christos KK Loverdos | |
216 | c8f8690d | Christos KK Loverdos | public String getDisplayNameForUserID(String userID) { |
217 | dc8cc18a | Christos KK Loverdos | return userCatalogs.getDisplayName(userID);
|
218 | b9a1049a | Christos KK Loverdos | } |
219 | b9a1049a | Christos KK Loverdos | |
220 | c8f8690d | Christos KK Loverdos | public String getIDForUserDisplayName(String userDisplayName) { |
221 | c8f8690d | Christos KK Loverdos | return userCatalogs.getID(userDisplayName);
|
222 | b9a1049a | Christos KK Loverdos | } |
223 | b9a1049a | Christos KK Loverdos | |
224 | c8f8690d | Christos KK Loverdos | public List<String> getDisplayNamesForUserIDs(List<String> userIDs) { |
225 | b9a1049a | Christos KK Loverdos | if(userIDs == null) { |
226 | b9a1049a | Christos KK Loverdos | userIDs = new ArrayList<String>(); |
227 | b9a1049a | Christos KK Loverdos | } |
228 | b9a1049a | Christos KK Loverdos | final List<String> userDisplayNames = new ArrayList<String>(); |
229 | b9a1049a | Christos KK Loverdos | for(String userID : userIDs) { |
230 | c8f8690d | Christos KK Loverdos | final String displayName = getDisplayNameForUserID(userID); |
231 | b9a1049a | Christos KK Loverdos | userDisplayNames.add(displayName); |
232 | b9a1049a | Christos KK Loverdos | } |
233 | b9a1049a | Christos KK Loverdos | |
234 | b9a1049a | Christos KK Loverdos | return userDisplayNames;
|
235 | cde22209 | Christos KK Loverdos | } |
236 | cde22209 | Christos KK Loverdos | |
237 | b9a1049a | Christos KK Loverdos | public List<String> filterUserIDsWithUnknownDisplayName(Collection<String> userIDs) { |
238 | b9a1049a | Christos KK Loverdos | if(userIDs == null) { |
239 | b9a1049a | Christos KK Loverdos | userIDs = new ArrayList<String>(); |
240 | b9a1049a | Christos KK Loverdos | } |
241 | b9a1049a | Christos KK Loverdos | final List<String> filtered = new ArrayList<String>(); |
242 | b9a1049a | Christos KK Loverdos | for(String userID : userIDs) { |
243 | dc8cc18a | Christos KK Loverdos | if(!this.userCatalogs.hasID(userID)) { |
244 | b9a1049a | Christos KK Loverdos | filtered.add(userID); |
245 | b9a1049a | Christos KK Loverdos | } |
246 | b9a1049a | Christos KK Loverdos | } |
247 | b9a1049a | Christos KK Loverdos | return filtered;
|
248 | cde22209 | Christos KK Loverdos | } |
249 | cde22209 | Christos KK Loverdos | |
250 | 8e61880b | Christos Stathis | public void setAccount(AccountResource acct) { |
251 | 8e61880b | Christos Stathis | account = acct; |
252 | 8e61880b | Christos Stathis | } |
253 | 8e61880b | Christos Stathis | |
254 | 8e61880b | Christos Stathis | public AccountResource getAccount() {
|
255 | 8e61880b | Christos Stathis | return account;
|
256 | 8e61880b | Christos Stathis | } |
257 | 8e61880b | Christos Stathis | |
258 | 6acd4df3 | Christos Stathis | public void updateFolder(Folder f, boolean showfiles, Command callback, final boolean openParent) { |
259 | 6acd4df3 | Christos Stathis | folderTreeView.updateFolder(f, showfiles, callback, openParent); |
260 | b651e67f | Christos Stathis | } |
261 | b651e67f | Christos Stathis | |
262 | 4baffab1 | Christos Stathis | public void updateGroupNode(Group group) { |
263 | 4baffab1 | Christos Stathis | groupTreeView.updateGroupNode(group); |
264 | 4baffab1 | Christos Stathis | } |
265 | 4baffab1 | Christos Stathis | |
266 | 3601b114 | Christos Stathis | public void updateMySharedRoot() { |
267 | cdd90acb | Christos KK Loverdos | mysharedTreeView.updateRoot(); |
268 | 3601b114 | Christos Stathis | } |
269 | cdd90acb | Christos KK Loverdos | |
270 | 3586ad5e | Christos Stathis | public void updateSharedFolder(Folder f, boolean showfiles, Command callback) { |
271 | cdd90acb | Christos KK Loverdos | mysharedTreeView.updateFolder(f, showfiles, callback); |
272 | 105b4e49 | Christos Stathis | } |
273 | cdd90acb | Christos KK Loverdos | |
274 | 3586ad5e | Christos Stathis | public void updateSharedFolder(Folder f, boolean showfiles) { |
275 | cdd90acb | Christos KK Loverdos | updateSharedFolder(f, showfiles, null);
|
276 | 3586ad5e | Christos Stathis | } |
277 | 3586ad5e | Christos Stathis | |
278 | 3646552f | Christos Stathis | public void updateOtherSharedFolder(Folder f, boolean showfiles, Command callback) { |
279 | cdd90acb | Christos KK Loverdos | otherSharedTreeView.updateFolder(f, showfiles, callback); |
280 | 6d8e0f58 | Christos Stathis | } |
281 | 6d8e0f58 | Christos Stathis | |
282 | 105b4e49 | Christos Stathis | public MysharedTreeView getMySharedTreeView() {
|
283 | 105b4e49 | Christos Stathis | return mysharedTreeView;
|
284 | 105b4e49 | Christos Stathis | } |
285 | 105b4e49 | Christos Stathis | |
286 | 6084aa02 | Christos Stathis | /**
|
287 | cdd90acb | Christos KK Loverdos | * An aggregate image bundle that pulls together all the images for this
|
288 | cdd90acb | Christos KK Loverdos | * application into a single bundle.
|
289 | cdd90acb | Christos KK Loverdos | */
|
290 | cdd90acb | Christos KK Loverdos | public interface Images extends TopPanel.Images, FileList.Images, ToolsMenu.Images { |
291 | cdd90acb | Christos KK Loverdos | |
292 | cdd90acb | Christos KK Loverdos | @Source("gr/grnet/pithos/resources/document.png") |
293 | cdd90acb | Christos KK Loverdos | ImageResource folders(); |
294 | cdd90acb | Christos KK Loverdos | |
295 | cdd90acb | Christos KK Loverdos | @Source("gr/grnet/pithos/resources/advancedsettings.png") |
296 | cdd90acb | Christos KK Loverdos | @ImageOptions(width = 32, height = 32) |
297 | cdd90acb | Christos KK Loverdos | ImageResource tools(); |
298 | cdd90acb | Christos KK Loverdos | } |
299 | cdd90acb | Christos KK Loverdos | |
300 | cdd90acb | Christos KK Loverdos | private Throwable error; |
301 | cdd90acb | Christos KK Loverdos | |
302 | cdd90acb | Christos KK Loverdos | /**
|
303 | cdd90acb | Christos KK Loverdos | * The Application Clipboard implementation;
|
304 | cdd90acb | Christos KK Loverdos | */
|
305 | cdd90acb | Christos KK Loverdos | private Clipboard clipboard = new Clipboard(); |
306 | cdd90acb | Christos KK Loverdos | |
307 | cdd90acb | Christos KK Loverdos | /**
|
308 | cdd90acb | Christos KK Loverdos | * The top panel that contains the menu bar.
|
309 | cdd90acb | Christos KK Loverdos | */
|
310 | cdd90acb | Christos KK Loverdos | private TopPanel topPanel;
|
311 | cdd90acb | Christos KK Loverdos | |
312 | cdd90acb | Christos KK Loverdos | /**
|
313 | cdd90acb | Christos KK Loverdos | * The panel that contains the various system messages.
|
314 | cdd90acb | Christos KK Loverdos | */
|
315 | cdd90acb | Christos KK Loverdos | private MessagePanel messagePanel = new MessagePanel(this, Pithos.images); |
316 | cdd90acb | Christos KK Loverdos | |
317 | cdd90acb | Christos KK Loverdos | /**
|
318 | cdd90acb | Christos KK Loverdos | * The bottom panel that contains the status bar.
|
319 | cdd90acb | Christos KK Loverdos | */
|
320 | cdd90acb | Christos KK Loverdos | StatusPanel statusPanel = null;
|
321 | cdd90acb | Christos KK Loverdos | |
322 | cdd90acb | Christos KK Loverdos | /**
|
323 | cdd90acb | Christos KK Loverdos | * The file list widget.
|
324 | cdd90acb | Christos KK Loverdos | */
|
325 | cdd90acb | Christos KK Loverdos | private FileList fileList;
|
326 | cdd90acb | Christos KK Loverdos | |
327 | cdd90acb | Christos KK Loverdos | /**
|
328 | cdd90acb | Christos KK Loverdos | * The tab panel that occupies the right side of the screen.
|
329 | cdd90acb | Christos KK Loverdos | */
|
330 | cdd90acb | Christos KK Loverdos | private VerticalPanel inner = new VerticalPanel(); |
331 | cdd90acb | Christos KK Loverdos | |
332 | cdd90acb | Christos KK Loverdos | |
333 | cdd90acb | Christos KK Loverdos | /**
|
334 | cdd90acb | Christos KK Loverdos | * The split panel that will contain the left and right panels.
|
335 | cdd90acb | Christos KK Loverdos | */
|
336 | cdd90acb | Christos KK Loverdos | private HorizontalSplitPanel splitPanel = new HorizontalSplitPanel(); |
337 | cdd90acb | Christos KK Loverdos | |
338 | cdd90acb | Christos KK Loverdos | /**
|
339 | cdd90acb | Christos KK Loverdos | * The currently selected item in the application, for use by the Edit menu
|
340 | cdd90acb | Christos KK Loverdos | * commands. Potential types are Folder, File, User and Group.
|
341 | cdd90acb | Christos KK Loverdos | */
|
342 | cdd90acb | Christos KK Loverdos | private Object currentSelection; |
343 | cdd90acb | Christos KK Loverdos | |
344 | cdd90acb | Christos KK Loverdos | public HashMap<String, String> userFullNameMap = new HashMap<String, String>(); |
345 | a57faaf0 | Christos Stathis | |
346 | cc0120ab | Christos KK Loverdos | /**
|
347 | cc0120ab | Christos KK Loverdos | * The ID that uniquely identifies the user in Pithos+.
|
348 | cc0120ab | Christos KK Loverdos | * Currently this is a UUID. It used to be the user's email.
|
349 | cc0120ab | Christos KK Loverdos | */
|
350 | cc0120ab | Christos KK Loverdos | private String userID = null; |
351 | cc0120ab | Christos KK Loverdos | |
352 | cc0120ab | Christos KK Loverdos | /**
|
353 | 0a85a75b | Christos KK Loverdos | * Holds mappings from user UUIDs to emails and vice-versa.
|
354 | cc0120ab | Christos KK Loverdos | */
|
355 | cc0120ab | Christos KK Loverdos | private UserCatalogs userCatalogs = new UserCatalogs(); |
356 | 6084aa02 | Christos Stathis | |
357 | 6084aa02 | Christos Stathis | /**
|
358 | 6084aa02 | Christos Stathis | * The authentication token of the current user.
|
359 | 6084aa02 | Christos Stathis | */
|
360 | cc0120ab | Christos KK Loverdos | private String userToken; |
361 | 6084aa02 | Christos Stathis | |
362 | 7c54d867 | Christos Stathis | VerticalPanel trees; |
363 | cdd90acb | Christos KK Loverdos | |
364 | f1b24b82 | Christos Stathis | SingleSelectionModel<Folder> folderTreeSelectionModel;
|
365 | f1b24b82 | Christos Stathis | FolderTreeViewModel folderTreeViewModel; |
366 | f1b24b82 | Christos Stathis | FolderTreeView folderTreeView; |
367 | 6084aa02 | Christos Stathis | |
368 | f1b24b82 | Christos Stathis | SingleSelectionModel<Folder> mysharedTreeSelectionModel;
|
369 | 7c54d867 | Christos Stathis | MysharedTreeViewModel mysharedTreeViewModel; |
370 | cdd90acb | Christos KK Loverdos | MysharedTreeView mysharedTreeView = null;
|
371 | 105b4e49 | Christos Stathis | |
372 | 7811b9d1 | Christos Stathis | protected SingleSelectionModel<Folder> otherSharedTreeSelectionModel; |
373 | 7c54d867 | Christos Stathis | OtherSharedTreeViewModel otherSharedTreeViewModel; |
374 | 7c54d867 | Christos Stathis | OtherSharedTreeView otherSharedTreeView = null;
|
375 | a6592a15 | Christos Stathis | |
376 | abd8738f | Christos Stathis | GroupTreeViewModel groupTreeViewModel; |
377 | c46c9e31 | Christos Stathis | GroupTreeView groupTreeView; |
378 | ee9fbc37 | Christos Stathis | |
379 | c4b7a6bb | Christos Stathis | TreeView selectedTree; |
380 | 7811b9d1 | Christos Stathis | protected AccountResource account;
|
381 | cdd90acb | Christos KK Loverdos | |
382 | abd8738f | Christos Stathis | Folder trash; |
383 | cdd90acb | Christos KK Loverdos | |
384 | 0549e173 | Christos Stathis | List<Composite> treeViews = new ArrayList<Composite>(); |
385 | 8e61880b | Christos Stathis | |
386 | cdd90acb | Christos KK Loverdos | @SuppressWarnings("rawtypes") |
387 | cdd90acb | Christos KK Loverdos | List<SingleSelectionModel> selectionModels = new ArrayList<SingleSelectionModel>(); |
388 | cdd90acb | Christos KK Loverdos | |
389 | 1238d28d | Christos Stathis | public Button upload; |
390 | cdd90acb | Christos KK Loverdos | |
391 | a19f758c | Christos Stathis | private HTML numOfFiles; |
392 | cdd90acb | Christos KK Loverdos | |
393 | b75210b5 | Christos Stathis | private Toolbar toolbar;
|
394 | cdd90acb | Christos KK Loverdos | |
395 | 89dddc7d | Christos Stathis | private FileUploadDialog fileUploadDialog = new FileUploadDialog(this); |
396 | 3646552f | Christos Stathis | |
397 | cdd90acb | Christos KK Loverdos | UploadAlert uploadAlert; |
398 | cdd90acb | Christos KK Loverdos | |
399 | cdd90acb | Christos KK Loverdos | Date lastModified;
|
400 | 3646552f | Christos Stathis | |
401 | cdd90acb | Christos KK Loverdos | @Override
|
402 | cdd90acb | Christos KK Loverdos | public void onModuleLoad() { |
403 | cdd90acb | Christos KK Loverdos | if(parseUserCredentials()) {
|
404 | 6084aa02 | Christos Stathis | initialize(); |
405 | cdd90acb | Christos KK Loverdos | } |
406 | cdd90acb | Christos KK Loverdos | } |
407 | a57faaf0 | Christos Stathis | |
408 | f0ff407d | Christos KK Loverdos | static native void __ConsoleLog(String message) /*-{ |
409 | 64800147 | Christos KK Loverdos | try { console.log(message); } catch (e) {}
|
410 | f0ff407d | Christos KK Loverdos | }-*/;
|
411 | f0ff407d | Christos KK Loverdos | |
412 | e0a0c6ea | Christos KK Loverdos | public static void LOGError(Throwable error, StringBuilder sb) { |
413 | 64800147 | Christos KK Loverdos | if(!isLOGEnabled()) { return; } |
414 | e0a0c6ea | Christos KK Loverdos | |
415 | e0a0c6ea | Christos KK Loverdos | sb.append("\nException: [" + error.toString().replace("\n", "\n ") + "]"); |
416 | e0a0c6ea | Christos KK Loverdos | Throwable cause = error.getCause();
|
417 | e0a0c6ea | Christos KK Loverdos | if(cause != null) { |
418 | e0a0c6ea | Christos KK Loverdos | sb.append("\nCauses:\n");
|
419 | e0a0c6ea | Christos KK Loverdos | while(cause != null) { |
420 | e0a0c6ea | Christos KK Loverdos | sb.append(" ");
|
421 | e0a0c6ea | Christos KK Loverdos | sb.append("[" + cause.toString().replace("\n", "\n ") + "]"); |
422 | e0a0c6ea | Christos KK Loverdos | sb.append("\n");
|
423 | e0a0c6ea | Christos KK Loverdos | cause = cause.getCause(); |
424 | 86432004 | Christos KK Loverdos | } |
425 | e0a0c6ea | Christos KK Loverdos | } |
426 | e0a0c6ea | Christos KK Loverdos | else {
|
427 | e0a0c6ea | Christos KK Loverdos | sb.append("\n");
|
428 | e0a0c6ea | Christos KK Loverdos | } |
429 | e0a0c6ea | Christos KK Loverdos | |
430 | e0a0c6ea | Christos KK Loverdos | StackTraceElement[] stackTrace = error.getStackTrace(); |
431 | e0a0c6ea | Christos KK Loverdos | sb.append("Stack trace (" + stackTrace.length + " elements):\n"); |
432 | e0a0c6ea | Christos KK Loverdos | for(int i = 0; i < stackTrace.length; i++) { |
433 | e0a0c6ea | Christos KK Loverdos | StackTraceElement errorElem = stackTrace[i];
|
434 | e0a0c6ea | Christos KK Loverdos | sb.append(" [" + i + "] "); |
435 | e0a0c6ea | Christos KK Loverdos | sb.append(errorElem.toString()); |
436 | e0a0c6ea | Christos KK Loverdos | sb.append("\n");
|
437 | e0a0c6ea | Christos KK Loverdos | } |
438 | e0a0c6ea | Christos KK Loverdos | } |
439 | e0a0c6ea | Christos KK Loverdos | |
440 | e0a0c6ea | Christos KK Loverdos | public static void LOGError(Throwable error) { |
441 | 64800147 | Christos KK Loverdos | if(!isLOGEnabled()) { return; } |
442 | e0a0c6ea | Christos KK Loverdos | |
443 | e0a0c6ea | Christos KK Loverdos | final StringBuilder sb = new StringBuilder(); |
444 | e0a0c6ea | Christos KK Loverdos | LOGError(error, sb); |
445 | e0a0c6ea | Christos KK Loverdos | if(sb.length() > 0) { |
446 | e0a0c6ea | Christos KK Loverdos | __ConsoleLog(sb.toString()); |
447 | e0a0c6ea | Christos KK Loverdos | } |
448 | e0a0c6ea | Christos KK Loverdos | } |
449 | 01337c33 | Christos KK Loverdos | |
450 | 64800147 | Christos KK Loverdos | public static boolean isLOGEnabled() { |
451 | e0a0c6ea | Christos KK Loverdos | return IsLOGEnabled;
|
452 | e0a0c6ea | Christos KK Loverdos | } |
453 | 01337c33 | Christos KK Loverdos | |
454 | e0a0c6ea | Christos KK Loverdos | public static void LOG(Object ...args) { |
455 | 64800147 | Christos KK Loverdos | if(!isLOGEnabled()) { return; } |
456 | e0a0c6ea | Christos KK Loverdos | |
457 | e0a0c6ea | Christos KK Loverdos | final StringBuilder sb = new StringBuilder(); |
458 | e0a0c6ea | Christos KK Loverdos | for(Object arg : args) { |
459 | e0a0c6ea | Christos KK Loverdos | if(arg instanceof Throwable) { |
460 | e0a0c6ea | Christos KK Loverdos | LOGError((Throwable) arg, sb);
|
461 | 86432004 | Christos KK Loverdos | } |
462 | e0a0c6ea | Christos KK Loverdos | else {
|
463 | e0a0c6ea | Christos KK Loverdos | sb.append(arg); |
464 | e0a0c6ea | Christos KK Loverdos | } |
465 | e0a0c6ea | Christos KK Loverdos | } |
466 | e0a0c6ea | Christos KK Loverdos | |
467 | e0a0c6ea | Christos KK Loverdos | if(sb.length() > 0) { |
468 | e0a0c6ea | Christos KK Loverdos | __ConsoleLog(sb.toString()); |
469 | f0ff407d | Christos KK Loverdos | } |
470 | f0ff407d | Christos KK Loverdos | } |
471 | f0ff407d | Christos KK Loverdos | |
472 | 6084aa02 | Christos Stathis | private void initialize() { |
473 | 34cd9aff | Christos KK Loverdos | userCatalogs.updateWithIDAndName("*", "All Pithos users"); |
474 | 34cd9aff | Christos KK Loverdos | |
475 | cdd90acb | Christos KK Loverdos | lastModified = new Date(); //Initialize if-modified-since value with now. |
476 | cdd90acb | Christos KK Loverdos | resources.pithosCss().ensureInjected(); |
477 | cdd90acb | Christos KK Loverdos | boolean bareContent = Window.Location.getParameter("noframe") != null; |
478 | 34cd9aff | Christos KK Loverdos | String contentWidth = bareContent ? Const.PERCENT_100 : Const.PERCENT_75;
|
479 | bbdd34ef | Christos Stathis | |
480 | cdd90acb | Christos KK Loverdos | VerticalPanel outer = new VerticalPanel();
|
481 | fa68c84d | Christos KK Loverdos | outer.setWidth(Const.PERCENT_100); |
482 | cdd90acb | Christos KK Loverdos | if(!bareContent) {
|
483 | cdd90acb | Christos KK Loverdos | outer.addStyleName("pithos-outer");
|
484 | cdd90acb | Christos KK Loverdos | } |
485 | cdd90acb | Christos KK Loverdos | |
486 | cdd90acb | Christos KK Loverdos | if(!bareContent) {
|
487 | cdd90acb | Christos KK Loverdos | topPanel = new TopPanel(this, Pithos.images); |
488 | fa68c84d | Christos KK Loverdos | topPanel.setWidth(Const.PERCENT_100); |
489 | cdd90acb | Christos KK Loverdos | outer.add(topPanel); |
490 | cdd90acb | Christos KK Loverdos | outer.setCellHorizontalAlignment(topPanel, HasHorizontalAlignment.ALIGN_CENTER); |
491 | a7b6e464 | Christos Stathis | } |
492 | cdd90acb | Christos KK Loverdos | |
493 | 6cf258b1 | Christos Stathis | messagePanel.setVisible(false);
|
494 | 6cf258b1 | Christos Stathis | outer.add(messagePanel); |
495 | 6cf258b1 | Christos Stathis | outer.setCellHorizontalAlignment(messagePanel, HasHorizontalAlignment.ALIGN_CENTER); |
496 | 6cf258b1 | Christos Stathis | outer.setCellVerticalAlignment(messagePanel, HasVerticalAlignment.ALIGN_MIDDLE); |
497 | 6cf258b1 | Christos Stathis | |
498 | a7b6e464 | Christos Stathis | HorizontalPanel header = new HorizontalPanel();
|
499 | a7b6e464 | Christos Stathis | header.addStyleName("pithos-header");
|
500 | 2d91458a | Christos Stathis | header.setWidth(contentWidth); |
501 | cdd90acb | Christos KK Loverdos | if(bareContent) {
|
502 | cdd90acb | Christos KK Loverdos | header.addStyleName("pithos-header-noframe");
|
503 | cdd90acb | Christos KK Loverdos | } |
504 | 1a0db4f4 | Christos Stathis | upload = new Button("Upload", new ClickHandler() { |
505 | a7b6e464 | Christos Stathis | @Override
|
506 | ebead1b5 | Christos Stathis | public void onClick(ClickEvent event) { |
507 | cdd90acb | Christos KK Loverdos | if(getSelection() != null) { |
508 | cdd90acb | Christos KK Loverdos | new UploadFileCommand(Pithos.this, null, getSelection()).execute(); |
509 | cdd90acb | Christos KK Loverdos | } |
510 | a7b6e464 | Christos Stathis | } |
511 | a7b6e464 | Christos Stathis | }); |
512 | a7b6e464 | Christos Stathis | upload.addStyleName("pithos-uploadButton");
|
513 | 140f0f6d | Christos Stathis | header.add(upload); |
514 | 140f0f6d | Christos Stathis | header.setCellHorizontalAlignment(upload, HasHorizontalAlignment.ALIGN_LEFT); |
515 | 140f0f6d | Christos Stathis | header.setCellVerticalAlignment(upload, HasVerticalAlignment.ALIGN_MIDDLE); |
516 | 6084aa02 | Christos Stathis | |
517 | b75210b5 | Christos Stathis | toolbar = new Toolbar(this); |
518 | bd187dfb | Christos Stathis | header.add(toolbar); |
519 | bd187dfb | Christos Stathis | header.setCellHorizontalAlignment(toolbar, HasHorizontalAlignment.ALIGN_CENTER); |
520 | bd187dfb | Christos Stathis | header.setCellVerticalAlignment(toolbar, HasVerticalAlignment.ALIGN_MIDDLE); |
521 | cdd90acb | Christos KK Loverdos | |
522 | a19f758c | Christos Stathis | HorizontalPanel folderStatistics = new HorizontalPanel();
|
523 | bbdd34ef | Christos Stathis | folderStatistics.addStyleName("pithos-folderStatistics");
|
524 | a19f758c | Christos Stathis | numOfFiles = new HTML(); |
525 | a19f758c | Christos Stathis | folderStatistics.add(numOfFiles); |
526 | a7b6e464 | Christos Stathis | folderStatistics.setCellVerticalAlignment(numOfFiles, HasVerticalAlignment.ALIGN_MIDDLE); |
527 | a19f758c | Christos Stathis | HTML numOfFilesLabel = new HTML(" Files"); |
528 | a19f758c | Christos Stathis | folderStatistics.add(numOfFilesLabel); |
529 | a7b6e464 | Christos Stathis | folderStatistics.setCellVerticalAlignment(numOfFilesLabel, HasVerticalAlignment.ALIGN_MIDDLE); |
530 | 140f0f6d | Christos Stathis | header.add(folderStatistics); |
531 | 140f0f6d | Christos Stathis | header.setCellHorizontalAlignment(folderStatistics, HasHorizontalAlignment.ALIGN_RIGHT); |
532 | 140f0f6d | Christos Stathis | header.setCellVerticalAlignment(folderStatistics, HasVerticalAlignment.ALIGN_MIDDLE); |
533 | 9fbf5596 | Christos Stathis | header.setCellWidth(folderStatistics, "40px");
|
534 | a7b6e464 | Christos Stathis | outer.add(header); |
535 | a7b6e464 | Christos Stathis | outer.setCellHorizontalAlignment(header, HasHorizontalAlignment.ALIGN_CENTER); |
536 | 89dddc7d | Christos Stathis | // Inner contains the various lists
|
537 | a7b6e464 | Christos Stathis | inner.sinkEvents(Event.ONCONTEXTMENU);
|
538 | fa68c84d | Christos KK Loverdos | inner.setWidth(Const.PERCENT_100); |
539 | 6084aa02 | Christos Stathis | |
540 | 875a0179 | Christos Stathis | folderTreeSelectionModel = new SingleSelectionModel<Folder>(); |
541 | 875a0179 | Christos Stathis | folderTreeSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
542 | 875a0179 | Christos Stathis | @Override
|
543 | ebead1b5 | Christos Stathis | public void onSelectionChange(SelectionChangeEvent event) { |
544 | cdd90acb | Christos KK Loverdos | if(folderTreeSelectionModel.getSelectedObject() != null) { |
545 | f1b24b82 | Christos Stathis | deselectOthers(folderTreeView, folderTreeSelectionModel); |
546 | 3ebb88f4 | Christos Stathis | applyPermissions(folderTreeSelectionModel.getSelectedObject()); |
547 | a845b044 | Christos Stathis | Folder f = folderTreeSelectionModel.getSelectedObject(); |
548 | cdd90acb | Christos KK Loverdos | updateFolder(f, true, new Command() { |
549 | cdd90acb | Christos KK Loverdos | |
550 | cdd90acb | Christos KK Loverdos | @Override
|
551 | cdd90acb | Christos KK Loverdos | public void execute() { |
552 | cdd90acb | Christos KK Loverdos | updateStatistics(); |
553 | cdd90acb | Christos KK Loverdos | } |
554 | cdd90acb | Christos KK Loverdos | }, true);
|
555 | cdd90acb | Christos KK Loverdos | showRelevantToolbarButtons(); |
556 | cdd90acb | Christos KK Loverdos | } |
557 | cdd90acb | Christos KK Loverdos | else {
|
558 | cdd90acb | Christos KK Loverdos | if(getSelectedTree().equals(folderTreeView)) {
|
559 | cdd90acb | Christos KK Loverdos | setSelectedTree(null);
|
560 | cdd90acb | Christos KK Loverdos | } |
561 | cdd90acb | Christos KK Loverdos | if(getSelectedTree() == null) { |
562 | cdd90acb | Christos KK Loverdos | showRelevantToolbarButtons(); |
563 | cdd90acb | Christos KK Loverdos | } |
564 | a845b044 | Christos Stathis | } |
565 | 875a0179 | Christos Stathis | } |
566 | 875a0179 | Christos Stathis | }); |
567 | 105b4e49 | Christos Stathis | selectionModels.add(folderTreeSelectionModel); |
568 | 875a0179 | Christos Stathis | |
569 | a7c43f26 | Christos Stathis | folderTreeViewModel = new FolderTreeViewModel(this, folderTreeSelectionModel); |
570 | 875a0179 | Christos Stathis | folderTreeView = new FolderTreeView(folderTreeViewModel);
|
571 | 0549e173 | Christos Stathis | treeViews.add(folderTreeView); |
572 | cdd90acb | Christos KK Loverdos | |
573 | e2920e8d | Christos Stathis | fileList = new FileList(this, images); |
574 | bbdd34ef | Christos Stathis | inner.add(fileList); |
575 | 875a0179 | Christos Stathis | |
576 | 7c54d867 | Christos Stathis | trees = new VerticalPanel();
|
577 | fa68c84d | Christos KK Loverdos | trees.setWidth(Const.PERCENT_100); |
578 | cdd90acb | Christos KK Loverdos | |
579 | 6084aa02 | Christos Stathis | // Add the left and right panels to the split panel.
|
580 | a6592a15 | Christos Stathis | splitPanel.setLeftWidget(trees); |
581 | 89dddc7d | Christos Stathis | FlowPanel right = new FlowPanel();
|
582 | 89dddc7d | Christos Stathis | right.getElement().setId("rightPanel");
|
583 | 89dddc7d | Christos Stathis | right.add(inner); |
584 | 89dddc7d | Christos Stathis | splitPanel.setRightWidget(right); |
585 | e56be452 | Christos Stathis | splitPanel.setSplitPosition("219px");
|
586 | fa68c84d | Christos KK Loverdos | splitPanel.setSize(Const.PERCENT_100, Const.PERCENT_100); |
587 | 6084aa02 | Christos Stathis | splitPanel.addStyleName("pithos-splitPanel");
|
588 | a7b6e464 | Christos Stathis | splitPanel.setWidth(contentWidth); |
589 | 6084aa02 | Christos Stathis | outer.add(splitPanel); |
590 | a76065b6 | Christos Stathis | outer.setCellHorizontalAlignment(splitPanel, HasHorizontalAlignment.ALIGN_CENTER); |
591 | bbdd34ef | Christos Stathis | |
592 | cdd90acb | Christos KK Loverdos | if(!bareContent) {
|
593 | cdd90acb | Christos KK Loverdos | statusPanel = new StatusPanel();
|
594 | fa68c84d | Christos KK Loverdos | statusPanel.setWidth(Const.PERCENT_100); |
595 | cdd90acb | Christos KK Loverdos | outer.add(statusPanel); |
596 | cdd90acb | Christos KK Loverdos | outer.setCellHorizontalAlignment(statusPanel, HasHorizontalAlignment.ALIGN_CENTER); |
597 | cdd90acb | Christos KK Loverdos | } |
598 | cdd90acb | Christos KK Loverdos | else {
|
599 | cdd90acb | Christos KK Loverdos | splitPanel.addStyleName("pithos-splitPanel-noframe");
|
600 | a7b6e464 | Christos Stathis | } |
601 | 6084aa02 | Christos Stathis | |
602 | 6084aa02 | Christos Stathis | // Hook the window resize event, so that we can adjust the UI.
|
603 | 6084aa02 | Christos Stathis | Window.addResizeHandler(this); |
604 | 6084aa02 | Christos Stathis | // Clear out the window's built-in margin, because we want to take
|
605 | 6084aa02 | Christos Stathis | // advantage of the entire client area.
|
606 | 6084aa02 | Christos Stathis | Window.setMargin("0px"); |
607 | 6084aa02 | Christos Stathis | // Finally, add the outer panel to the RootPanel, so that it will be
|
608 | 6084aa02 | Christos Stathis | // displayed.
|
609 | 6084aa02 | Christos Stathis | RootPanel.get().add(outer); |
610 | 6084aa02 | Christos Stathis | // Call the window resized handler to get the initial sizes setup. Doing
|
611 | 6084aa02 | Christos Stathis | // this in a deferred command causes it to occur after all widgets'
|
612 | 6084aa02 | Christos Stathis | // sizes have been computed by the browser.
|
613 | 34e7d8d5 | Christos Stathis | Scheduler.get().scheduleIncremental(new RepeatingCommand() {
|
614 | cdd90acb | Christos KK Loverdos | |
615 | cdd90acb | Christos KK Loverdos | @Override
|
616 | cdd90acb | Christos KK Loverdos | public boolean execute() { |
617 | cdd90acb | Christos KK Loverdos | if(!isCloudbarReady()) {
|
618 | cdd90acb | Christos KK Loverdos | return true; |
619 | cdd90acb | Christos KK Loverdos | } |
620 | 6084aa02 | Christos Stathis | onWindowResized(Window.getClientHeight());
|
621 | cdd90acb | Christos KK Loverdos | return false; |
622 | cdd90acb | Christos KK Loverdos | } |
623 | cdd90acb | Christos KK Loverdos | }); |
624 | cdd90acb | Christos KK Loverdos | |
625 | 7c818c14 | Christos Stathis | Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
626 | 7c818c14 | Christos Stathis | @Override
|
627 | 7c818c14 | Christos Stathis | public void execute() { |
628 | 86432004 | Christos KK Loverdos | LOG("Pithos::initialize() Calling Pithos::fetchAccount()");
|
629 | 64f42c0b | Christos Stathis | fetchAccount(new Command() {
|
630 | cdd90acb | Christos KK Loverdos | |
631 | cdd90acb | Christos KK Loverdos | @Override
|
632 | cdd90acb | Christos KK Loverdos | public void execute() { |
633 | cdd90acb | Christos KK Loverdos | if(!account.hasHomeContainer()) {
|
634 | cdd90acb | Christos KK Loverdos | createHomeContainer(account, this);
|
635 | cdd90acb | Christos KK Loverdos | } |
636 | cdd90acb | Christos KK Loverdos | else if(!account.hasTrashContainer()) { |
637 | cdd90acb | Christos KK Loverdos | createTrashContainer(this);
|
638 | cdd90acb | Christos KK Loverdos | } |
639 | cdd90acb | Christos KK Loverdos | else {
|
640 | cdd90acb | Christos KK Loverdos | for(Folder f : account.getContainers()) {
|
641 | fa68c84d | Christos KK Loverdos | if(f.getName().equals(Const.TRASH_CONTAINER)) {
|
642 | cdd90acb | Christos KK Loverdos | trash = f; |
643 | cdd90acb | Christos KK Loverdos | break;
|
644 | cdd90acb | Christos KK Loverdos | } |
645 | cdd90acb | Christos KK Loverdos | } |
646 | cdd90acb | Christos KK Loverdos | trees.add(folderTreeView); |
647 | cdd90acb | Christos KK Loverdos | folderTreeViewModel.initialize(account, new Command() {
|
648 | cdd90acb | Christos KK Loverdos | |
649 | cdd90acb | Christos KK Loverdos | @Override
|
650 | cdd90acb | Christos KK Loverdos | public void execute() { |
651 | cdd90acb | Christos KK Loverdos | createMySharedTree(); |
652 | cdd90acb | Christos KK Loverdos | } |
653 | cdd90acb | Christos KK Loverdos | }); |
654 | cdd90acb | Christos KK Loverdos | |
655 | cdd90acb | Christos KK Loverdos | HorizontalPanel separator = new HorizontalPanel();
|
656 | cdd90acb | Christos KK Loverdos | separator.addStyleName("pithos-statisticsSeparator");
|
657 | cdd90acb | Christos KK Loverdos | separator.add(new HTML("")); |
658 | cdd90acb | Christos KK Loverdos | trees.add(separator); |
659 | cdd90acb | Christos KK Loverdos | |
660 | cdd90acb | Christos KK Loverdos | groupTreeViewModel = new GroupTreeViewModel(Pithos.this);
|
661 | cdd90acb | Christos KK Loverdos | groupTreeView = new GroupTreeView(groupTreeViewModel);
|
662 | cdd90acb | Christos KK Loverdos | treeViews.add(groupTreeView); |
663 | cdd90acb | Christos KK Loverdos | trees.add(groupTreeView); |
664 | cdd90acb | Christos KK Loverdos | folderTreeView.showStatistics(account); |
665 | cdd90acb | Christos KK Loverdos | } |
666 | cdd90acb | Christos KK Loverdos | } |
667 | cdd90acb | Christos KK Loverdos | }); |
668 | 7c818c14 | Christos Stathis | } |
669 | 7c818c14 | Christos Stathis | }); |
670 | b1001100 | Christos Stathis | } |
671 | cdd90acb | Christos KK Loverdos | |
672 | b1001100 | Christos Stathis | public void scheduleResfresh() { |
673 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
|
674 | cdd90acb | Christos KK Loverdos | |
675 | cdd90acb | Christos KK Loverdos | @Override
|
676 | cdd90acb | Christos KK Loverdos | public boolean execute() { |
677 | cdd90acb | Christos KK Loverdos | final Folder f = getSelection();
|
678 | cdd90acb | Christos KK Loverdos | if(f == null) { |
679 | cdd90acb | Christos KK Loverdos | return true; |
680 | cdd90acb | Christos KK Loverdos | } |
681 | cdd90acb | Christos KK Loverdos | |
682 | 28e270f9 | Christos KK Loverdos | HeadRequest<Folder> head = new HeadRequest<Folder>(Folder.class, getStorageAPIURL(), f.getOwnerID(), "/" + f.getContainer()) { |
683 | cdd90acb | Christos KK Loverdos | |
684 | cdd90acb | Christos KK Loverdos | @Override
|
685 | cdd90acb | Christos KK Loverdos | public void onSuccess(Folder _result) { |
686 | cdd90acb | Christos KK Loverdos | lastModified = new Date(); |
687 | cdd90acb | Christos KK Loverdos | if(getSelectedTree().equals(folderTreeView)) {
|
688 | cdd90acb | Christos KK Loverdos | updateFolder(f, true, new Command() { |
689 | cdd90acb | Christos KK Loverdos | |
690 | cdd90acb | Christos KK Loverdos | @Override
|
691 | cdd90acb | Christos KK Loverdos | public void execute() { |
692 | cdd90acb | Christos KK Loverdos | scheduleResfresh(); |
693 | cdd90acb | Christos KK Loverdos | } |
694 | cdd90acb | Christos KK Loverdos | |
695 | cdd90acb | Christos KK Loverdos | }, false);
|
696 | cdd90acb | Christos KK Loverdos | } |
697 | cdd90acb | Christos KK Loverdos | else if(getSelectedTree().equals(mysharedTreeView)) { |
698 | cdd90acb | Christos KK Loverdos | updateSharedFolder(f, true, new Command() { |
699 | cdd90acb | Christos KK Loverdos | |
700 | cdd90acb | Christos KK Loverdos | @Override
|
701 | cdd90acb | Christos KK Loverdos | public void execute() { |
702 | cdd90acb | Christos KK Loverdos | scheduleResfresh(); |
703 | cdd90acb | Christos KK Loverdos | } |
704 | cdd90acb | Christos KK Loverdos | }); |
705 | cdd90acb | Christos KK Loverdos | } |
706 | cdd90acb | Christos KK Loverdos | else {
|
707 | cdd90acb | Christos KK Loverdos | scheduleResfresh(); |
708 | cdd90acb | Christos KK Loverdos | } |
709 | cdd90acb | Christos KK Loverdos | } |
710 | cdd90acb | Christos KK Loverdos | |
711 | cdd90acb | Christos KK Loverdos | @Override
|
712 | cdd90acb | Christos KK Loverdos | public void onError(Throwable t) { |
713 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException && ((RestException) t).getHttpStatusCode() == HttpStatus.SC_NOT_MODIFIED) { |
714 | cdd90acb | Christos KK Loverdos | scheduleResfresh(); |
715 | cdd90acb | Christos KK Loverdos | } |
716 | cdd90acb | Christos KK Loverdos | else if(retries >= MAX_RETRIES) { |
717 | 8ddb4627 | Christos KK Loverdos | LOG("Error heading folder. ", t);
|
718 | cdd90acb | Christos KK Loverdos | setError(t); |
719 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
720 | cdd90acb | Christos KK Loverdos | displayError("Error heading folder: " + ((RestException) t).getHttpStatusText());
|
721 | cdd90acb | Christos KK Loverdos | } |
722 | cdd90acb | Christos KK Loverdos | else {
|
723 | cdd90acb | Christos KK Loverdos | displayError("System error heading folder: " + t.getMessage());
|
724 | cdd90acb | Christos KK Loverdos | } |
725 | cdd90acb | Christos KK Loverdos | } |
726 | cdd90acb | Christos KK Loverdos | else {//retry |
727 | 8ddb4627 | Christos KK Loverdos | LOG("Retry ", retries);
|
728 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(this);
|
729 | cdd90acb | Christos KK Loverdos | } |
730 | cdd90acb | Christos KK Loverdos | } |
731 | cdd90acb | Christos KK Loverdos | |
732 | cdd90acb | Christos KK Loverdos | @Override
|
733 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
734 | cdd90acb | Christos KK Loverdos | if(retries >= MAX_RETRIES) {
|
735 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
736 | cdd90acb | Christos KK Loverdos | } |
737 | cdd90acb | Christos KK Loverdos | else //retry |
738 | cdd90acb | Christos KK Loverdos | { |
739 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(this);
|
740 | cdd90acb | Christos KK Loverdos | } |
741 | cdd90acb | Christos KK Loverdos | } |
742 | cdd90acb | Christos KK Loverdos | }; |
743 | 728ff1e4 | Christos KK Loverdos | head.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
744 | fa68c84d | Christos KK Loverdos | head.setHeader(Const.IF_MODIFIED_SINCE, DateTimeFormat.getFormat(Const.DATE_FORMAT_1).format(lastModified, TimeZone.createTimeZone(0)) + " GMT"); |
745 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(head); |
746 | cdd90acb | Christos KK Loverdos | |
747 | cdd90acb | Christos KK Loverdos | return false; |
748 | cdd90acb | Christos KK Loverdos | } |
749 | cdd90acb | Christos KK Loverdos | }, 3000);
|
750 | 6084aa02 | Christos Stathis | } |
751 | a57faaf0 | Christos Stathis | |
752 | 3ebb88f4 | Christos Stathis | public void applyPermissions(Folder f) { |
753 | cdd90acb | Christos KK Loverdos | if(f != null) { |
754 | cdd90acb | Christos KK Loverdos | if(f.isInTrash()) {
|
755 | cdd90acb | Christos KK Loverdos | upload.setEnabled(false);
|
756 | cdd90acb | Christos KK Loverdos | disableUploadArea(); |
757 | cdd90acb | Christos KK Loverdos | } |
758 | cdd90acb | Christos KK Loverdos | else {
|
759 | cc0120ab | Christos KK Loverdos | Boolean[] perms = f.getPermissions().get(userID); |
760 | 4eaecbac | Christos KK Loverdos | if(f.getOwnerID().equals(userID) || (perms != null && perms[1] != null && perms[1])) { |
761 | cdd90acb | Christos KK Loverdos | upload.setEnabled(true);
|
762 | cdd90acb | Christos KK Loverdos | enableUploadArea(); |
763 | cdd90acb | Christos KK Loverdos | } |
764 | cdd90acb | Christos KK Loverdos | else {
|
765 | cdd90acb | Christos KK Loverdos | upload.setEnabled(false);
|
766 | cdd90acb | Christos KK Loverdos | disableUploadArea(); |
767 | cdd90acb | Christos KK Loverdos | } |
768 | cdd90acb | Christos KK Loverdos | } |
769 | cdd90acb | Christos KK Loverdos | } |
770 | cdd90acb | Christos KK Loverdos | else {
|
771 | cdd90acb | Christos KK Loverdos | upload.setEnabled(false);
|
772 | cdd90acb | Christos KK Loverdos | disableUploadArea(); |
773 | cdd90acb | Christos KK Loverdos | } |
774 | cdd90acb | Christos KK Loverdos | } |
775 | cdd90acb | Christos KK Loverdos | |
776 | cdd90acb | Christos KK Loverdos | @SuppressWarnings({"rawtypes", "unchecked"}) |
777 | cdd90acb | Christos KK Loverdos | public void deselectOthers(TreeView _selectedTree, SingleSelectionModel model) { |
778 | cdd90acb | Christos KK Loverdos | selectedTree = _selectedTree; |
779 | cdd90acb | Christos KK Loverdos | |
780 | cdd90acb | Christos KK Loverdos | for(SingleSelectionModel s : selectionModels) { |
781 | cdd90acb | Christos KK Loverdos | if(!s.equals(model) && s.getSelectedObject() != null) { |
782 | 105b4e49 | Christos Stathis | s.setSelected(s.getSelectedObject(), false);
|
783 | cdd90acb | Christos KK Loverdos | } |
784 | cdd90acb | Christos KK Loverdos | } |
785 | 105b4e49 | Christos Stathis | } |
786 | 105b4e49 | Christos Stathis | |
787 | dddb75e2 | Christos Stathis | public void showFiles(final Folder f) { |
788 | 07a1b5fe | Christos Stathis | Set<File> files = f.getFiles(); |
789 | a845b044 | Christos Stathis | showFiles(files); |
790 | a845b044 | Christos Stathis | } |
791 | a845b044 | Christos Stathis | |
792 | a845b044 | Christos Stathis | public void showFiles(Set<File> files) { |
793 | a845b044 | Christos Stathis | fileList.setFiles(new ArrayList<File>(files)); |
794 | 07a1b5fe | Christos Stathis | } |
795 | 07a1b5fe | Christos Stathis | |
796 | 875a0179 | Christos Stathis | /**
|
797 | cdd90acb | Christos KK Loverdos | * Parse and store the user credentials to the appropriate fields.
|
798 | cdd90acb | Christos KK Loverdos | */
|
799 | cdd90acb | Christos KK Loverdos | private boolean parseUserCredentials() { |
800 | 28e270f9 | Christos KK Loverdos | final String cookie = otherProperties.get(Const.AUTH_COOKIE); |
801 | 4ea3c87b | Christos Stathis | String auth = Cookies.getCookie(cookie);
|
802 | cdd90acb | Christos KK Loverdos | if(auth == null) { |
803 | cdd90acb | Christos KK Loverdos | authenticateUser(); |
804 | cdd90acb | Christos KK Loverdos | return false; |
805 | cdd90acb | Christos KK Loverdos | } |
806 | cdd90acb | Christos KK Loverdos | if(auth.startsWith("\"")) { |
807 | cdd90acb | Christos KK Loverdos | auth = auth.substring(1);
|
808 | cdd90acb | Christos KK Loverdos | } |
809 | cdd90acb | Christos KK Loverdos | if(auth.endsWith("\"")) { |
810 | cdd90acb | Christos KK Loverdos | auth = auth.substring(0, auth.length() - 1); |
811 | cdd90acb | Christos KK Loverdos | } |
812 | 28e270f9 | Christos KK Loverdos | String[] authSplit = auth.split("\\" + config.cookieSeparator(), 2); |
813 | cdd90acb | Christos KK Loverdos | if(authSplit.length != 2) { |
814 | 4ea3c87b | Christos Stathis | authenticateUser(); |
815 | 4ea3c87b | Christos Stathis | return false; |
816 | 36dc8e18 | Christos Stathis | } |
817 | 28e270f9 | Christos KK Loverdos | this.userID = authSplit[0]; |
818 | 28e270f9 | Christos KK Loverdos | this.userToken = authSplit[1]; |
819 | 4d869bf1 | Christos Stathis | |
820 | 4d869bf1 | Christos Stathis | String gotoUrl = Window.Location.getParameter("goto"); |
821 | cdd90acb | Christos KK Loverdos | if(gotoUrl != null && gotoUrl.length() > 0) { |
822 | cdd90acb | Christos KK Loverdos | Window.Location.assign(gotoUrl);
|
823 | cdd90acb | Christos KK Loverdos | return false; |
824 | cdd90acb | Christos KK Loverdos | } |
825 | cdd90acb | Christos KK Loverdos | return true; |
826 | 36dc8e18 | Christos Stathis | } |
827 | a57faaf0 | Christos Stathis | |
828 | 6084aa02 | Christos Stathis | /**
|
829 | cdd90acb | Christos KK Loverdos | * Redirect the user to the login page for authentication.
|
830 | cdd90acb | Christos KK Loverdos | */
|
831 | cdd90acb | Christos KK Loverdos | protected void authenticateUser() { |
832 | fa68c84d | Christos KK Loverdos | Dictionary otherProperties = Dictionary.getDictionary(Const.OTHER_PROPERTIES); |
833 | fa68c84d | Christos KK Loverdos | Window.Location.assign(otherProperties.get(Const.LOGIN_URL) + Window.Location.getHref()); |
834 | cdd90acb | Christos KK Loverdos | } |
835 | a57faaf0 | Christos Stathis | |
836 | cdd90acb | Christos KK Loverdos | public void fetchAccount(final Command callback) { |
837 | b51c628b | Christos Stathis | String path = "?format=json"; |
838 | 7c818c14 | Christos Stathis | |
839 | 28e270f9 | Christos KK Loverdos | GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, getStorageAPIURL(), userID, path) {
|
840 | 7c818c14 | Christos Stathis | @Override
|
841 | c8f8690d | Christos KK Loverdos | public void onSuccess(AccountResource accountResource) { |
842 | c8f8690d | Christos KK Loverdos | account = accountResource; |
843 | cdd90acb | Christos KK Loverdos | if(callback != null) { |
844 | cdd90acb | Christos KK Loverdos | callback.execute(); |
845 | cdd90acb | Christos KK Loverdos | } |
846 | c8f8690d | Christos KK Loverdos | |
847 | c8f8690d | Christos KK Loverdos | final List<String> memberIDs = new ArrayList<String>(); |
848 | c8f8690d | Christos KK Loverdos | final List<Group> groups = account.getGroups(); |
849 | c8f8690d | Christos KK Loverdos | for(Group group : groups) { |
850 | f36c8a7d | Christos KK Loverdos | memberIDs.addAll(group.getMemberIDs()); |
851 | c8f8690d | Christos KK Loverdos | } |
852 | f36c8a7d | Christos KK Loverdos | memberIDs.add(Pithos.this.getUserID()); |
853 | c8f8690d | Christos KK Loverdos | |
854 | c8f8690d | Christos KK Loverdos | final List<String> theUnknown = Pithos.this.filterUserIDsWithUnknownDisplayName(memberIDs); |
855 | cc0120ab | Christos KK Loverdos | // Initialize the user catalog
|
856 | f36c8a7d | Christos KK Loverdos | new UpdateUserCatalogs(Pithos.this, theUnknown).scheduleDeferred();
|
857 | c8f8690d | Christos KK Loverdos | LOG("Called new UpdateUserCatalogs(Pithos.this, theUnknown).scheduleDeferred();");
|
858 | 7c818c14 | Christos Stathis | } |
859 | 7c818c14 | Christos Stathis | |
860 | 7c818c14 | Christos Stathis | @Override
|
861 | 7c818c14 | Christos Stathis | public void onError(Throwable t) { |
862 | 8ddb4627 | Christos KK Loverdos | LOG("Error getting account", t);
|
863 | cdd90acb | Christos KK Loverdos | setError(t); |
864 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
865 | a7c43f26 | Christos Stathis | displayError("Error getting account: " + ((RestException) t).getHttpStatusText());
|
866 | cdd90acb | Christos KK Loverdos | } |
867 | cdd90acb | Christos KK Loverdos | else {
|
868 | a7c43f26 | Christos Stathis | displayError("System error fetching user data: " + t.getMessage());
|
869 | cdd90acb | Christos KK Loverdos | } |
870 | 7c818c14 | Christos Stathis | } |
871 | 9539e23d | Christos Stathis | |
872 | cdd90acb | Christos KK Loverdos | @Override
|
873 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
874 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
875 | cdd90acb | Christos KK Loverdos | } |
876 | 7c818c14 | Christos Stathis | }; |
877 | 728ff1e4 | Christos KK Loverdos | getAccount.setHeader(Const.X_AUTH_TOKEN, userToken); |
878 | 7c818c14 | Christos Stathis | Scheduler.get().scheduleDeferred(getAccount); |
879 | 7c818c14 | Christos Stathis | } |
880 | 7c818c14 | Christos Stathis | |
881 | 64f42c0b | Christos Stathis | public void updateStatistics() { |
882 | 28e270f9 | Christos KK Loverdos | HeadRequest<AccountResource> headAccount = new HeadRequest<AccountResource>(AccountResource.class, getStorageAPIURL(), userID, "", account) { |
883 | 64f42c0b | Christos Stathis | |
884 | cdd90acb | Christos KK Loverdos | @Override
|
885 | cdd90acb | Christos KK Loverdos | public void onSuccess(AccountResource _result) { |
886 | cdd90acb | Christos KK Loverdos | folderTreeView.showStatistics(account); |
887 | cdd90acb | Christos KK Loverdos | } |
888 | 64f42c0b | Christos Stathis | |
889 | cdd90acb | Christos KK Loverdos | @Override
|
890 | cdd90acb | Christos KK Loverdos | public void onError(Throwable t) { |
891 | 8ddb4627 | Christos KK Loverdos | LOG("Error getting account", t);
|
892 | cdd90acb | Christos KK Loverdos | setError(t); |
893 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
894 | 64f42c0b | Christos Stathis | displayError("Error getting account: " + ((RestException) t).getHttpStatusText());
|
895 | cdd90acb | Christos KK Loverdos | } |
896 | cdd90acb | Christos KK Loverdos | else {
|
897 | 64f42c0b | Christos Stathis | displayError("System error fetching user data: " + t.getMessage());
|
898 | cdd90acb | Christos KK Loverdos | } |
899 | cdd90acb | Christos KK Loverdos | } |
900 | cdd90acb | Christos KK Loverdos | |
901 | cdd90acb | Christos KK Loverdos | @Override
|
902 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
903 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
904 | cdd90acb | Christos KK Loverdos | } |
905 | cdd90acb | Christos KK Loverdos | }; |
906 | 728ff1e4 | Christos KK Loverdos | headAccount.setHeader(Const.X_AUTH_TOKEN, userToken); |
907 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(headAccount); |
908 | cdd90acb | Christos KK Loverdos | } |
909 | cdd90acb | Christos KK Loverdos | |
910 | cdd90acb | Christos KK Loverdos | protected void createHomeContainer(final AccountResource _account, final Command callback) { |
911 | fa68c84d | Christos KK Loverdos | String path = "/" + Const.HOME_CONTAINER; |
912 | 28e270f9 | Christos KK Loverdos | PutRequest createPithos = new PutRequest(getStorageAPIURL(), getUserID(), path) {
|
913 | b8822fe7 | Christos Stathis | @Override
|
914 | ebead1b5 | Christos Stathis | public void onSuccess(Resource result) { |
915 | cdd90acb | Christos KK Loverdos | if(!_account.hasTrashContainer()) {
|
916 | cdd90acb | Christos KK Loverdos | createTrashContainer(callback); |
917 | cdd90acb | Christos KK Loverdos | } |
918 | cdd90acb | Christos KK Loverdos | else {
|
919 | cdd90acb | Christos KK Loverdos | fetchAccount(callback); |
920 | cdd90acb | Christos KK Loverdos | } |
921 | b8822fe7 | Christos Stathis | } |
922 | b8822fe7 | Christos Stathis | |
923 | b8822fe7 | Christos Stathis | @Override
|
924 | b8822fe7 | Christos Stathis | public void onError(Throwable t) { |
925 | 8ddb4627 | Christos KK Loverdos | LOG("Error creating pithos", t);
|
926 | cdd90acb | Christos KK Loverdos | setError(t); |
927 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
928 | a7c43f26 | Christos Stathis | displayError("Error creating pithos: " + ((RestException) t).getHttpStatusText());
|
929 | cdd90acb | Christos KK Loverdos | } |
930 | cdd90acb | Christos KK Loverdos | else {
|
931 | a7c43f26 | Christos Stathis | displayError("System error Error creating pithos: " + t.getMessage());
|
932 | cdd90acb | Christos KK Loverdos | } |
933 | b8822fe7 | Christos Stathis | } |
934 | 9539e23d | Christos Stathis | |
935 | cdd90acb | Christos KK Loverdos | @Override
|
936 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
937 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
938 | cdd90acb | Christos KK Loverdos | } |
939 | b8822fe7 | Christos Stathis | }; |
940 | 728ff1e4 | Christos KK Loverdos | createPithos.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
941 | b8822fe7 | Christos Stathis | Scheduler.get().scheduleDeferred(createPithos); |
942 | b8822fe7 | Christos Stathis | } |
943 | b8822fe7 | Christos Stathis | |
944 | 64f42c0b | Christos Stathis | protected void createTrashContainer(final Command callback) { |
945 | fa68c84d | Christos KK Loverdos | String path = "/" + Const.TRASH_CONTAINER; |
946 | 28e270f9 | Christos KK Loverdos | PutRequest createPithos = new PutRequest(getStorageAPIURL(), getUserID(), path) {
|
947 | 7b28ae07 | Christos Stathis | @Override
|
948 | ebead1b5 | Christos Stathis | public void onSuccess(Resource result) { |
949 | cdd90acb | Christos KK Loverdos | fetchAccount(callback); |
950 | 7b28ae07 | Christos Stathis | } |
951 | 7b28ae07 | Christos Stathis | |
952 | 7b28ae07 | Christos Stathis | @Override
|
953 | 7b28ae07 | Christos Stathis | public void onError(Throwable t) { |
954 | 8ddb4627 | Christos KK Loverdos | LOG("Error creating pithos", t);
|
955 | cdd90acb | Christos KK Loverdos | setError(t); |
956 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
957 | 7b28ae07 | Christos Stathis | displayError("Error creating pithos: " + ((RestException) t).getHttpStatusText());
|
958 | cdd90acb | Christos KK Loverdos | } |
959 | cdd90acb | Christos KK Loverdos | else {
|
960 | 7b28ae07 | Christos Stathis | displayError("System error Error creating pithos: " + t.getMessage());
|
961 | cdd90acb | Christos KK Loverdos | } |
962 | 7b28ae07 | Christos Stathis | } |
963 | 9539e23d | Christos Stathis | |
964 | cdd90acb | Christos KK Loverdos | @Override
|
965 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
966 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
967 | cdd90acb | Christos KK Loverdos | } |
968 | 7b28ae07 | Christos Stathis | }; |
969 | 728ff1e4 | Christos KK Loverdos | createPithos.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
970 | 7b28ae07 | Christos Stathis | Scheduler.get().scheduleDeferred(createPithos); |
971 | 7b28ae07 | Christos Stathis | } |
972 | 7b28ae07 | Christos Stathis | |
973 | 7b28ae07 | Christos Stathis | /**
|
974 | cdd90acb | Christos KK Loverdos | * Creates an HTML fragment that places an image & caption together, for use
|
975 | cdd90acb | Christos KK Loverdos | * in a group header.
|
976 | cdd90acb | Christos KK Loverdos | *
|
977 | cdd90acb | Christos KK Loverdos | * @param imageProto an image prototype for an image
|
978 | cdd90acb | Christos KK Loverdos | * @param caption the group caption
|
979 | cdd90acb | Christos KK Loverdos | * @return the header HTML fragment
|
980 | cdd90acb | Christos KK Loverdos | */
|
981 | cdd90acb | Christos KK Loverdos | private String createHeaderHTML(AbstractImagePrototype imageProto, String caption) { |
982 | cdd90acb | Christos KK Loverdos | String captionHTML = "<table class='caption' cellpadding='0' " |
983 | cdd90acb | Christos KK Loverdos | + "cellspacing='0'>" + "<tr><td class='lcaption'>" + imageProto.getHTML() |
984 | cdd90acb | Christos KK Loverdos | + "</td><td id =" + caption + " class='rcaption'><b style='white-space:nowrap'> " |
985 | cdd90acb | Christos KK Loverdos | + caption + "</b></td></tr></table>";
|
986 | cdd90acb | Christos KK Loverdos | return captionHTML;
|
987 | cdd90acb | Christos KK Loverdos | } |
988 | cdd90acb | Christos KK Loverdos | |
989 | cdd90acb | Christos KK Loverdos | protected void onWindowResized(int height) { |
990 | cdd90acb | Christos KK Loverdos | // Adjust the split panel to take up the available room in the window.
|
991 | cdd90acb | Christos KK Loverdos | int newHeight = height - splitPanel.getAbsoluteTop() - 153; |
992 | cdd90acb | Christos KK Loverdos | if(newHeight < 1) { |
993 | cdd90acb | Christos KK Loverdos | newHeight = 1;
|
994 | cdd90acb | Christos KK Loverdos | } |
995 | cdd90acb | Christos KK Loverdos | splitPanel.setHeight("" + newHeight);
|
996 | cdd90acb | Christos KK Loverdos | inner.setHeight("" + newHeight);
|
997 | cdd90acb | Christos KK Loverdos | } |
998 | cdd90acb | Christos KK Loverdos | |
999 | cdd90acb | Christos KK Loverdos | native boolean isCloudbarReady()/*-{ |
1000 | cdd90acb | Christos KK Loverdos | if ($wnd.$("div.cloudbar") && $wnd.$("div.cloudbar").height() > 0)
|
1001 | cdd90acb | Christos KK Loverdos | return true;
|
1002 | cdd90acb | Christos KK Loverdos | return false;
|
1003 | cdd90acb | Christos KK Loverdos | }-*/;
|
1004 | cdd90acb | Christos KK Loverdos | |
1005 | cdd90acb | Christos KK Loverdos | @Override
|
1006 | cdd90acb | Christos KK Loverdos | public void onResize(ResizeEvent event) { |
1007 | cdd90acb | Christos KK Loverdos | int height = event.getHeight();
|
1008 | cdd90acb | Christos KK Loverdos | onWindowResized(height); |
1009 | cdd90acb | Christos KK Loverdos | } |
1010 | cdd90acb | Christos KK Loverdos | |
1011 | cdd90acb | Christos KK Loverdos | /**
|
1012 | cdd90acb | Christos KK Loverdos | * Display an error message.
|
1013 | cdd90acb | Christos KK Loverdos | *
|
1014 | cdd90acb | Christos KK Loverdos | * @param msg the message to display
|
1015 | cdd90acb | Christos KK Loverdos | */
|
1016 | cdd90acb | Christos KK Loverdos | public void displayError(String msg) { |
1017 | cdd90acb | Christos KK Loverdos | messagePanel.displayError(msg); |
1018 | cdd90acb | Christos KK Loverdos | onWindowResized(Window.getClientHeight());
|
1019 | cdd90acb | Christos KK Loverdos | } |
1020 | cdd90acb | Christos KK Loverdos | |
1021 | cdd90acb | Christos KK Loverdos | /**
|
1022 | cdd90acb | Christos KK Loverdos | * Display a warning message.
|
1023 | cdd90acb | Christos KK Loverdos | *
|
1024 | cdd90acb | Christos KK Loverdos | * @param msg the message to display
|
1025 | cdd90acb | Christos KK Loverdos | */
|
1026 | cdd90acb | Christos KK Loverdos | public void displayWarning(String msg) { |
1027 | cdd90acb | Christos KK Loverdos | messagePanel.displayWarning(msg); |
1028 | cdd90acb | Christos KK Loverdos | onWindowResized(Window.getClientHeight());
|
1029 | cdd90acb | Christos KK Loverdos | } |
1030 | cdd90acb | Christos KK Loverdos | |
1031 | cdd90acb | Christos KK Loverdos | /**
|
1032 | cdd90acb | Christos KK Loverdos | * Display an informational message.
|
1033 | cdd90acb | Christos KK Loverdos | *
|
1034 | cdd90acb | Christos KK Loverdos | * @param msg the message to display
|
1035 | cdd90acb | Christos KK Loverdos | */
|
1036 | cdd90acb | Christos KK Loverdos | public void displayInformation(String msg) { |
1037 | cdd90acb | Christos KK Loverdos | messagePanel.displayInformation(msg); |
1038 | cdd90acb | Christos KK Loverdos | onWindowResized(Window.getClientHeight());
|
1039 | cdd90acb | Christos KK Loverdos | } |
1040 | cdd90acb | Christos KK Loverdos | |
1041 | cdd90acb | Christos KK Loverdos | /**
|
1042 | cdd90acb | Christos KK Loverdos | * Retrieve the fileList.
|
1043 | cdd90acb | Christos KK Loverdos | *
|
1044 | cdd90acb | Christos KK Loverdos | * @return the fileList
|
1045 | cdd90acb | Christos KK Loverdos | */
|
1046 | cdd90acb | Christos KK Loverdos | public FileList getFileList() {
|
1047 | cdd90acb | Christos KK Loverdos | return fileList;
|
1048 | cdd90acb | Christos KK Loverdos | } |
1049 | cdd90acb | Christos KK Loverdos | |
1050 | cdd90acb | Christos KK Loverdos | /**
|
1051 | cdd90acb | Christos KK Loverdos | * Retrieve the topPanel.
|
1052 | cdd90acb | Christos KK Loverdos | *
|
1053 | cdd90acb | Christos KK Loverdos | * @return the topPanel
|
1054 | cdd90acb | Christos KK Loverdos | */
|
1055 | cdd90acb | Christos KK Loverdos | TopPanel getTopPanel() { |
1056 | cdd90acb | Christos KK Loverdos | return topPanel;
|
1057 | cdd90acb | Christos KK Loverdos | } |
1058 | cdd90acb | Christos KK Loverdos | |
1059 | cdd90acb | Christos KK Loverdos | /**
|
1060 | cdd90acb | Christos KK Loverdos | * Retrieve the clipboard.
|
1061 | cdd90acb | Christos KK Loverdos | *
|
1062 | cdd90acb | Christos KK Loverdos | * @return the clipboard
|
1063 | cdd90acb | Christos KK Loverdos | */
|
1064 | cdd90acb | Christos KK Loverdos | public Clipboard getClipboard() { |
1065 | cdd90acb | Christos KK Loverdos | return clipboard;
|
1066 | cdd90acb | Christos KK Loverdos | } |
1067 | cdd90acb | Christos KK Loverdos | |
1068 | cdd90acb | Christos KK Loverdos | public StatusPanel getStatusPanel() {
|
1069 | cdd90acb | Christos KK Loverdos | return statusPanel;
|
1070 | cdd90acb | Christos KK Loverdos | } |
1071 | cdd90acb | Christos KK Loverdos | |
1072 | cc0120ab | Christos KK Loverdos | public String getUserToken() { |
1073 | cc0120ab | Christos KK Loverdos | return userToken;
|
1074 | cdd90acb | Christos KK Loverdos | } |
1075 | cdd90acb | Christos KK Loverdos | |
1076 | cdd90acb | Christos KK Loverdos | public static native void preventIESelection() /*-{ |
1077 | cdd90acb | Christos KK Loverdos | $doc.body.onselectstart = function () {
|
1078 | cdd90acb | Christos KK Loverdos | return false;
|
1079 | cdd90acb | Christos KK Loverdos | };
|
1080 | cdd90acb | Christos KK Loverdos | }-*/;
|
1081 | cdd90acb | Christos KK Loverdos | |
1082 | cdd90acb | Christos KK Loverdos | public static native void enableIESelection() /*-{ |
1083 | cdd90acb | Christos KK Loverdos | if ($doc.body.onselectstart != null)
|
1084 | cdd90acb | Christos KK Loverdos | $doc.body.onselectstart = null;
|
1085 | cdd90acb | Christos KK Loverdos | }-*/;
|
1086 | cdd90acb | Christos KK Loverdos | |
1087 | 28e270f9 | Christos KK Loverdos | public static String getStorageAPIURL() { |
1088 | 28e270f9 | Christos KK Loverdos | return STORAGE_API_URL;
|
1089 | 28e270f9 | Christos KK Loverdos | } |
1090 | 28e270f9 | Christos KK Loverdos | |
1091 | 28e270f9 | Christos KK Loverdos | public static String getUserCatalogsURL() { |
1092 | 28e270f9 | Christos KK Loverdos | return USER_CATALOGS_API_URL;
|
1093 | cdd90acb | Christos KK Loverdos | } |
1094 | cdd90acb | Christos KK Loverdos | |
1095 | cdd90acb | Christos KK Loverdos | /**
|
1096 | cdd90acb | Christos KK Loverdos | * History support for folder navigation
|
1097 | cdd90acb | Christos KK Loverdos | * adds a new browser history entry
|
1098 | cdd90acb | Christos KK Loverdos | *
|
1099 | cdd90acb | Christos KK Loverdos | * @param key
|
1100 | cdd90acb | Christos KK Loverdos | */
|
1101 | cdd90acb | Christos KK Loverdos | public void updateHistory(String key) { |
1102 | a57faaf0 | Christos Stathis | // Replace any whitespace of the initial string to "+"
|
1103 | a57faaf0 | Christos Stathis | // String result = key.replaceAll("\\s","+");
|
1104 | a57faaf0 | Christos Stathis | // Add a new browser history entry.
|
1105 | a57faaf0 | Christos Stathis | // History.newItem(result);
|
1106 | cdd90acb | Christos KK Loverdos | History.newItem(key); |
1107 | cdd90acb | Christos KK Loverdos | } |
1108 | a57faaf0 | Christos Stathis | |
1109 | 2c801ad7 | Christos Stathis | public void deleteFolder(final Folder folder, final Command callback) { |
1110 | cdd90acb | Christos KK Loverdos | final PleaseWaitPopup pwp = new PleaseWaitPopup(); |
1111 | cdd90acb | Christos KK Loverdos | pwp.center(); |
1112 | f6c9957e | Christos Stathis | String path = "/" + folder.getContainer() + "/" + folder.getPrefix() + "?delimiter=/" + "&t=" + System.currentTimeMillis(); |
1113 | 28e270f9 | Christos KK Loverdos | DeleteRequest deleteFolder = new DeleteRequest(getStorageAPIURL(), folder.getOwnerID(), path) {
|
1114 | cdd90acb | Christos KK Loverdos | |
1115 | cdd90acb | Christos KK Loverdos | @Override
|
1116 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1117 | cdd90acb | Christos KK Loverdos | pwp.hide(); |
1118 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1119 | cdd90acb | Christos KK Loverdos | } |
1120 | cdd90acb | Christos KK Loverdos | |
1121 | cdd90acb | Christos KK Loverdos | @Override
|
1122 | cdd90acb | Christos KK Loverdos | public void onSuccess(Resource result) { |
1123 | f6c9957e | Christos Stathis | updateFolder(folder.getParent(), true, new Command() { |
1124 | cdd90acb | Christos KK Loverdos | |
1125 | cdd90acb | Christos KK Loverdos | @Override
|
1126 | cdd90acb | Christos KK Loverdos | public void execute() { |
1127 | cdd90acb | Christos KK Loverdos | folderTreeSelectionModel.setSelected(folder.getParent(), true);
|
1128 | cdd90acb | Christos KK Loverdos | updateStatistics(); |
1129 | cdd90acb | Christos KK Loverdos | if(callback != null) { |
1130 | cdd90acb | Christos KK Loverdos | callback.execute(); |
1131 | cdd90acb | Christos KK Loverdos | } |
1132 | cdd90acb | Christos KK Loverdos | pwp.hide(); |
1133 | cdd90acb | Christos KK Loverdos | } |
1134 | cdd90acb | Christos KK Loverdos | }, true);
|
1135 | cdd90acb | Christos KK Loverdos | } |
1136 | cdd90acb | Christos KK Loverdos | |
1137 | cdd90acb | Christos KK Loverdos | @Override
|
1138 | cdd90acb | Christos KK Loverdos | public void onError(Throwable t) { |
1139 | 8ddb4627 | Christos KK Loverdos | LOG(t); |
1140 | cdd90acb | Christos KK Loverdos | setError(t); |
1141 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
1142 | cdd90acb | Christos KK Loverdos | if(((RestException) t).getHttpStatusCode() != Response.SC_NOT_FOUND) {
|
1143 | cdd90acb | Christos KK Loverdos | displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText());
|
1144 | cdd90acb | Christos KK Loverdos | } |
1145 | cdd90acb | Christos KK Loverdos | else {
|
1146 | cdd90acb | Christos KK Loverdos | onSuccess(null);
|
1147 | cdd90acb | Christos KK Loverdos | } |
1148 | 602ebeb4 | Christos Stathis | } |
1149 | cdd90acb | Christos KK Loverdos | else {
|
1150 | f6c9957e | Christos Stathis | displayError("System error unable to delete folder: " + t.getMessage());
|
1151 | cdd90acb | Christos KK Loverdos | } |
1152 | cdd90acb | Christos KK Loverdos | pwp.hide(); |
1153 | cdd90acb | Christos KK Loverdos | } |
1154 | cdd90acb | Christos KK Loverdos | }; |
1155 | 728ff1e4 | Christos KK Loverdos | deleteFolder.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1156 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(deleteFolder); |
1157 | 602ebeb4 | Christos Stathis | } |
1158 | fad48f0d | Christos Stathis | |
1159 | fad48f0d | Christos Stathis | public FolderTreeView getFolderTreeView() {
|
1160 | fad48f0d | Christos Stathis | return folderTreeView;
|
1161 | fad48f0d | Christos Stathis | } |
1162 | d6be39da | Christos Stathis | |
1163 | 63ee965c | Christos Stathis | public void copyFiles(final Iterator<File> iter, final String targetUsername, final String targetUri, final Command callback) { |
1164 | cdd90acb | Christos KK Loverdos | if(iter.hasNext()) {
|
1165 | d6be39da | Christos Stathis | File file = iter.next();
|
1166 | b51c628b | Christos Stathis | String path = targetUri + "/" + file.getName(); |
1167 | 28e270f9 | Christos KK Loverdos | PutRequest copyFile = new PutRequest(getStorageAPIURL(), targetUsername, path) {
|
1168 | d6be39da | Christos Stathis | @Override
|
1169 | ebead1b5 | Christos Stathis | public void onSuccess(Resource result) { |
1170 | 63ee965c | Christos Stathis | copyFiles(iter, targetUsername, targetUri, callback); |
1171 | d6be39da | Christos Stathis | } |
1172 | d6be39da | Christos Stathis | |
1173 | d6be39da | Christos Stathis | @Override
|
1174 | d6be39da | Christos Stathis | public void onError(Throwable t) { |
1175 | 8ddb4627 | Christos KK Loverdos | LOG(t); |
1176 | cdd90acb | Christos KK Loverdos | setError(t); |
1177 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
1178 | a7c43f26 | Christos Stathis | displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText());
|
1179 | d6be39da | Christos Stathis | } |
1180 | cdd90acb | Christos KK Loverdos | else {
|
1181 | cdd90acb | Christos KK Loverdos | displayError("System error unable to copy file: " + t.getMessage());
|
1182 | cdd90acb | Christos KK Loverdos | } |
1183 | d6be39da | Christos Stathis | } |
1184 | 9539e23d | Christos Stathis | |
1185 | cdd90acb | Christos KK Loverdos | @Override
|
1186 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1187 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1188 | cdd90acb | Christos KK Loverdos | } |
1189 | d6be39da | Christos Stathis | }; |
1190 | 728ff1e4 | Christos KK Loverdos | copyFile.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1191 | fa68c84d | Christos KK Loverdos | copyFile.setHeader(Const.X_COPY_FROM, URL.encodePathSegment(file.getUri()));
|
1192 | cde22209 | Christos KK Loverdos | if(!file.getOwnerID().equals(targetUsername)) {
|
1193 | fa68c84d | Christos KK Loverdos | copyFile.setHeader(Const.X_SOURCE_ACCOUNT, URL.encodePathSegment(file.getOwnerID()));
|
1194 | cdd90acb | Christos KK Loverdos | } |
1195 | fa68c84d | Christos KK Loverdos | copyFile.setHeader(Const.CONTENT_TYPE, file.getContentType()); |
1196 | d6be39da | Christos Stathis | Scheduler.get().scheduleDeferred(copyFile); |
1197 | d6be39da | Christos Stathis | } |
1198 | cdd90acb | Christos KK Loverdos | else if(callback != null) { |
1199 | d6be39da | Christos Stathis | callback.execute(); |
1200 | d6be39da | Christos Stathis | } |
1201 | d6be39da | Christos Stathis | } |
1202 | d6be39da | Christos Stathis | |
1203 | d58c0da5 | Christos Stathis | public void copyFolder(final Folder f, final String targetUsername, final String targetUri, boolean move, final Command callback) { |
1204 | d58c0da5 | Christos Stathis | String path = targetUri + "?delimiter=/"; |
1205 | 28e270f9 | Christos KK Loverdos | PutRequest copyFolder = new PutRequest(getStorageAPIURL(), targetUsername, path) {
|
1206 | d6be39da | Christos Stathis | @Override
|
1207 | ebead1b5 | Christos Stathis | public void onSuccess(Resource result) { |
1208 | cdd90acb | Christos KK Loverdos | if(callback != null) { |
1209 | cdd90acb | Christos KK Loverdos | callback.execute(); |
1210 | cdd90acb | Christos KK Loverdos | } |
1211 | d6be39da | Christos Stathis | } |
1212 | d6be39da | Christos Stathis | |
1213 | d6be39da | Christos Stathis | @Override
|
1214 | d6be39da | Christos Stathis | public void onError(Throwable t) { |
1215 | 8ddb4627 | Christos KK Loverdos | LOG(t); |
1216 | cdd90acb | Christos KK Loverdos | setError(t); |
1217 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
1218 | ff32989e | Christos Stathis | displayError("Unable to copy folder: " + ((RestException) t).getHttpStatusText());
|
1219 | d6be39da | Christos Stathis | } |
1220 | cdd90acb | Christos KK Loverdos | else {
|
1221 | ff32989e | Christos Stathis | displayError("System error copying folder: " + t.getMessage());
|
1222 | cdd90acb | Christos KK Loverdos | } |
1223 | d6be39da | Christos Stathis | } |
1224 | 9539e23d | Christos Stathis | |
1225 | cdd90acb | Christos KK Loverdos | @Override
|
1226 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1227 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1228 | cdd90acb | Christos KK Loverdos | } |
1229 | d6be39da | Christos Stathis | }; |
1230 | 728ff1e4 | Christos KK Loverdos | copyFolder.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1231 | fa68c84d | Christos KK Loverdos | copyFolder.setHeader(Const.ACCEPT, "*/*");
|
1232 | fa68c84d | Christos KK Loverdos | copyFolder.setHeader(Const.CONTENT_LENGTH, "0");
|
1233 | fa68c84d | Christos KK Loverdos | copyFolder.setHeader(Const.CONTENT_TYPE, "application/directory");
|
1234 | 4eaecbac | Christos KK Loverdos | if(!f.getOwnerID().equals(targetUsername)) {
|
1235 | fa68c84d | Christos KK Loverdos | copyFolder.setHeader(Const.X_SOURCE_ACCOUNT, f.getOwnerID()); |
1236 | cdd90acb | Christos KK Loverdos | } |
1237 | cdd90acb | Christos KK Loverdos | if(move) {
|
1238 | fa68c84d | Christos KK Loverdos | copyFolder.setHeader(Const.X_MOVE_FROM, URL.encodePathSegment(f.getUri()));
|
1239 | cdd90acb | Christos KK Loverdos | } |
1240 | cdd90acb | Christos KK Loverdos | else {
|
1241 | fa68c84d | Christos KK Loverdos | copyFolder.setHeader(Const.X_COPY_FROM, URL.encodePathSegment(f.getUri()));
|
1242 | cdd90acb | Christos KK Loverdos | } |
1243 | ff32989e | Christos Stathis | Scheduler.get().scheduleDeferred(copyFolder); |
1244 | d6be39da | Christos Stathis | } |
1245 | cdd90acb | Christos KK Loverdos | |
1246 | 7811b9d1 | Christos Stathis | public void addSelectionModel(@SuppressWarnings("rawtypes") SingleSelectionModel model) { |
1247 | cdd90acb | Christos KK Loverdos | selectionModels.add(model); |
1248 | cdd90acb | Christos KK Loverdos | } |
1249 | cdd90acb | Christos KK Loverdos | |
1250 | cdd90acb | Christos KK Loverdos | public OtherSharedTreeView getOtherSharedTreeView() {
|
1251 | cdd90acb | Christos KK Loverdos | return otherSharedTreeView;
|
1252 | cdd90acb | Christos KK Loverdos | } |
1253 | cdd90acb | Christos KK Loverdos | |
1254 | cdd90acb | Christos KK Loverdos | public void updateTrash(boolean showFiles, Command callback) { |
1255 | cdd90acb | Christos KK Loverdos | updateFolder(trash, showFiles, callback, true);
|
1256 | cdd90acb | Christos KK Loverdos | } |
1257 | cdd90acb | Christos KK Loverdos | |
1258 | cdd90acb | Christos KK Loverdos | public void updateGroupsNode() { |
1259 | cdd90acb | Christos KK Loverdos | groupTreeView.updateGroupNode(null);
|
1260 | cdd90acb | Christos KK Loverdos | } |
1261 | cdd90acb | Christos KK Loverdos | |
1262 | dc8cc18a | Christos KK Loverdos | public Group addGroup(String groupname) { |
1263 | dc8cc18a | Christos KK Loverdos | Group newGroup = new Group(groupname); |
1264 | dc8cc18a | Christos KK Loverdos | account.addGroup(newGroup); |
1265 | cdd90acb | Christos KK Loverdos | groupTreeView.updateGroupNode(null);
|
1266 | dc8cc18a | Christos KK Loverdos | return newGroup;
|
1267 | cdd90acb | Christos KK Loverdos | } |
1268 | cdd90acb | Christos KK Loverdos | |
1269 | cdd90acb | Christos KK Loverdos | public void removeGroup(Group group) { |
1270 | cdd90acb | Christos KK Loverdos | account.removeGroup(group); |
1271 | cdd90acb | Christos KK Loverdos | updateGroupsNode(); |
1272 | cdd90acb | Christos KK Loverdos | } |
1273 | cdd90acb | Christos KK Loverdos | |
1274 | cdd90acb | Christos KK Loverdos | public TreeView getSelectedTree() {
|
1275 | cdd90acb | Christos KK Loverdos | return selectedTree;
|
1276 | cdd90acb | Christos KK Loverdos | } |
1277 | cdd90acb | Christos KK Loverdos | |
1278 | cdd90acb | Christos KK Loverdos | public void setSelectedTree(TreeView selected) { |
1279 | cdd90acb | Christos KK Loverdos | selectedTree = selected; |
1280 | cdd90acb | Christos KK Loverdos | } |
1281 | cdd90acb | Christos KK Loverdos | |
1282 | cdd90acb | Christos KK Loverdos | public Folder getSelection() {
|
1283 | cdd90acb | Christos KK Loverdos | if(selectedTree != null) { |
1284 | cdd90acb | Christos KK Loverdos | return selectedTree.getSelection();
|
1285 | cdd90acb | Christos KK Loverdos | } |
1286 | cdd90acb | Christos KK Loverdos | return null; |
1287 | cdd90acb | Christos KK Loverdos | } |
1288 | cdd90acb | Christos KK Loverdos | |
1289 | cdd90acb | Christos KK Loverdos | public void showFolderStatistics(int folderFileCount) { |
1290 | cdd90acb | Christos KK Loverdos | numOfFiles.setHTML(String.valueOf(folderFileCount));
|
1291 | cdd90acb | Christos KK Loverdos | } |
1292 | cdd90acb | Christos KK Loverdos | |
1293 | cdd90acb | Christos KK Loverdos | public GroupTreeView getGroupTreeView() {
|
1294 | cdd90acb | Christos KK Loverdos | return groupTreeView;
|
1295 | cdd90acb | Christos KK Loverdos | } |
1296 | cdd90acb | Christos KK Loverdos | |
1297 | cdd90acb | Christos KK Loverdos | public void sessionExpired() { |
1298 | cdd90acb | Christos KK Loverdos | new SessionExpiredDialog(this).center(); |
1299 | cdd90acb | Christos KK Loverdos | } |
1300 | cdd90acb | Christos KK Loverdos | |
1301 | cdd90acb | Christos KK Loverdos | public void updateRootFolder(Command callback) { |
1302 | cdd90acb | Christos KK Loverdos | updateFolder(account.getPithos(), false, callback, true); |
1303 | cdd90acb | Christos KK Loverdos | } |
1304 | cdd90acb | Christos KK Loverdos | |
1305 | cdd90acb | Christos KK Loverdos | void createMySharedTree() {
|
1306 | 86432004 | Christos KK Loverdos | LOG("Pithos::createMySharedTree()");
|
1307 | cdd90acb | Christos KK Loverdos | mysharedTreeSelectionModel = new SingleSelectionModel<Folder>(); |
1308 | cdd90acb | Christos KK Loverdos | mysharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { |
1309 | cdd90acb | Christos KK Loverdos | @Override
|
1310 | cdd90acb | Christos KK Loverdos | public void onSelectionChange(SelectionChangeEvent event) { |
1311 | cdd90acb | Christos KK Loverdos | if(mysharedTreeSelectionModel.getSelectedObject() != null) { |
1312 | cdd90acb | Christos KK Loverdos | deselectOthers(mysharedTreeView, mysharedTreeSelectionModel); |
1313 | cdd90acb | Christos KK Loverdos | upload.setEnabled(false);
|
1314 | cdd90acb | Christos KK Loverdos | disableUploadArea(); |
1315 | cdd90acb | Christos KK Loverdos | updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true);
|
1316 | cdd90acb | Christos KK Loverdos | showRelevantToolbarButtons(); |
1317 | cdd90acb | Christos KK Loverdos | } |
1318 | cdd90acb | Christos KK Loverdos | else {
|
1319 | cdd90acb | Christos KK Loverdos | if(getSelectedTree().equals(mysharedTreeView)) {
|
1320 | cdd90acb | Christos KK Loverdos | setSelectedTree(null);
|
1321 | cdd90acb | Christos KK Loverdos | } |
1322 | cdd90acb | Christos KK Loverdos | if(getSelectedTree() == null) { |
1323 | cdd90acb | Christos KK Loverdos | showRelevantToolbarButtons(); |
1324 | cdd90acb | Christos KK Loverdos | } |
1325 | cdd90acb | Christos KK Loverdos | } |
1326 | cdd90acb | Christos KK Loverdos | } |
1327 | cdd90acb | Christos KK Loverdos | }); |
1328 | cdd90acb | Christos KK Loverdos | selectionModels.add(mysharedTreeSelectionModel); |
1329 | cdd90acb | Christos KK Loverdos | mysharedTreeViewModel = new MysharedTreeViewModel(Pithos.this, mysharedTreeSelectionModel);
|
1330 | cdd90acb | Christos KK Loverdos | mysharedTreeViewModel.initialize(new Command() {
|
1331 | cdd90acb | Christos KK Loverdos | |
1332 | cdd90acb | Christos KK Loverdos | @Override
|
1333 | cdd90acb | Christos KK Loverdos | public void execute() { |
1334 | cdd90acb | Christos KK Loverdos | mysharedTreeView = new MysharedTreeView(mysharedTreeViewModel);
|
1335 | cdd90acb | Christos KK Loverdos | trees.insert(mysharedTreeView, 2);
|
1336 | cdd90acb | Christos KK Loverdos | treeViews.add(mysharedTreeView); |
1337 | cdd90acb | Christos KK Loverdos | createOtherSharedTree(); |
1338 | cdd90acb | Christos KK Loverdos | } |
1339 | cdd90acb | Christos KK Loverdos | }); |
1340 | cdd90acb | Christos KK Loverdos | } |
1341 | cdd90acb | Christos KK Loverdos | |
1342 | cdd90acb | Christos KK Loverdos | void createOtherSharedTree() {
|
1343 | 86432004 | Christos KK Loverdos | LOG("Pithos::createOtherSharedTree()");
|
1344 | cdd90acb | Christos KK Loverdos | otherSharedTreeSelectionModel = new SingleSelectionModel<Folder>(); |
1345 | cdd90acb | Christos KK Loverdos | otherSharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { |
1346 | cdd90acb | Christos KK Loverdos | @Override
|
1347 | cdd90acb | Christos KK Loverdos | public void onSelectionChange(SelectionChangeEvent event) { |
1348 | cdd90acb | Christos KK Loverdos | if(otherSharedTreeSelectionModel.getSelectedObject() != null) { |
1349 | cdd90acb | Christos KK Loverdos | deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel); |
1350 | cdd90acb | Christos KK Loverdos | applyPermissions(otherSharedTreeSelectionModel.getSelectedObject()); |
1351 | cdd90acb | Christos KK Loverdos | updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true, null); |
1352 | cdd90acb | Christos KK Loverdos | showRelevantToolbarButtons(); |
1353 | cdd90acb | Christos KK Loverdos | } |
1354 | cdd90acb | Christos KK Loverdos | else {
|
1355 | cdd90acb | Christos KK Loverdos | if(getSelectedTree().equals(otherSharedTreeView)) {
|
1356 | cdd90acb | Christos KK Loverdos | setSelectedTree(null);
|
1357 | cdd90acb | Christos KK Loverdos | } |
1358 | cdd90acb | Christos KK Loverdos | if(getSelectedTree() == null) { |
1359 | cdd90acb | Christos KK Loverdos | showRelevantToolbarButtons(); |
1360 | cdd90acb | Christos KK Loverdos | } |
1361 | cdd90acb | Christos KK Loverdos | } |
1362 | cdd90acb | Christos KK Loverdos | } |
1363 | cdd90acb | Christos KK Loverdos | }); |
1364 | cdd90acb | Christos KK Loverdos | selectionModels.add(otherSharedTreeSelectionModel); |
1365 | cdd90acb | Christos KK Loverdos | otherSharedTreeViewModel = new OtherSharedTreeViewModel(Pithos.this, otherSharedTreeSelectionModel);
|
1366 | 0a85a75b | Christos KK Loverdos | // #3784 We show it empty...
|
1367 | d4ace10a | Christos KK Loverdos | otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel, true); |
1368 | 0a85a75b | Christos KK Loverdos | trees.insert(otherSharedTreeView, 1);
|
1369 | 0a85a75b | Christos KK Loverdos | |
1370 | 86432004 | Christos KK Loverdos | LOG("Pithos::createOtherSharedTree(), initializing otherSharedTreeViewModel with a callback");
|
1371 | cdd90acb | Christos KK Loverdos | otherSharedTreeViewModel.initialize(new Command() {
|
1372 | cdd90acb | Christos KK Loverdos | @Override
|
1373 | cdd90acb | Christos KK Loverdos | public void execute() { |
1374 | 0a85a75b | Christos KK Loverdos | // #3784 ... then remove the empty stuff and add a new view with the populated model
|
1375 | 0a85a75b | Christos KK Loverdos | trees.remove(otherSharedTreeView); |
1376 | 0a85a75b | Christos KK Loverdos | |
1377 | d4ace10a | Christos KK Loverdos | otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel, false); |
1378 | cdd90acb | Christos KK Loverdos | trees.insert(otherSharedTreeView, 1);
|
1379 | cdd90acb | Christos KK Loverdos | treeViews.add(otherSharedTreeView); |
1380 | cdd90acb | Christos KK Loverdos | scheduleResfresh(); |
1381 | cdd90acb | Christos KK Loverdos | } |
1382 | cdd90acb | Christos KK Loverdos | }); |
1383 | cdd90acb | Christos KK Loverdos | } |
1384 | cdd90acb | Christos KK Loverdos | |
1385 | cdd90acb | Christos KK Loverdos | public String getErrorData() { |
1386 | 86432004 | Christos KK Loverdos | final StringBuilder sb = new StringBuilder(); |
1387 | 86432004 | Christos KK Loverdos | final String NL = Const.NL; |
1388 | 86432004 | Christos KK Loverdos | Throwable t = this.error; |
1389 | 86432004 | Christos KK Loverdos | while(t != null) { |
1390 | 86432004 | Christos KK Loverdos | sb.append(t.toString()); |
1391 | 86432004 | Christos KK Loverdos | sb.append(NL); |
1392 | 86432004 | Christos KK Loverdos | StackTraceElement[] traces = t.getStackTrace(); |
1393 | 86432004 | Christos KK Loverdos | for(StackTraceElement trace : traces) { |
1394 | 86432004 | Christos KK Loverdos | sb.append(" [");
|
1395 | 86432004 | Christos KK Loverdos | sb.append(trace.getClassName()); |
1396 | 86432004 | Christos KK Loverdos | sb.append("::");
|
1397 | 86432004 | Christos KK Loverdos | sb.append(trace.getMethodName()); |
1398 | 86432004 | Christos KK Loverdos | sb.append("() at ");
|
1399 | 86432004 | Christos KK Loverdos | sb.append(trace.getFileName()); |
1400 | 86432004 | Christos KK Loverdos | sb.append(":");
|
1401 | 86432004 | Christos KK Loverdos | sb.append(trace.getLineNumber()); |
1402 | 86432004 | Christos KK Loverdos | sb.append("]");
|
1403 | 86432004 | Christos KK Loverdos | sb.append(NL); |
1404 | 86432004 | Christos KK Loverdos | } |
1405 | 86432004 | Christos KK Loverdos | t = t.getCause(); |
1406 | cdd90acb | Christos KK Loverdos | } |
1407 | 86432004 | Christos KK Loverdos | |
1408 | 86432004 | Christos KK Loverdos | return sb.toString();
|
1409 | cdd90acb | Christos KK Loverdos | } |
1410 | cdd90acb | Christos KK Loverdos | |
1411 | cdd90acb | Christos KK Loverdos | public void setError(Throwable t) { |
1412 | cdd90acb | Christos KK Loverdos | error = t; |
1413 | e0a0c6ea | Christos KK Loverdos | LOG(t); |
1414 | cdd90acb | Christos KK Loverdos | } |
1415 | cdd90acb | Christos KK Loverdos | |
1416 | cdd90acb | Christos KK Loverdos | public void showRelevantToolbarButtons() { |
1417 | cdd90acb | Christos KK Loverdos | toolbar.showRelevantButtons(); |
1418 | cdd90acb | Christos KK Loverdos | } |
1419 | cdd90acb | Christos KK Loverdos | |
1420 | cdd90acb | Christos KK Loverdos | public FileUploadDialog getFileUploadDialog() {
|
1421 | cdd90acb | Christos KK Loverdos | if(fileUploadDialog == null) { |
1422 | cdd90acb | Christos KK Loverdos | fileUploadDialog = new FileUploadDialog(this); |
1423 | cdd90acb | Christos KK Loverdos | } |
1424 | cdd90acb | Christos KK Loverdos | return fileUploadDialog;
|
1425 | cdd90acb | Christos KK Loverdos | } |
1426 | cdd90acb | Christos KK Loverdos | |
1427 | cdd90acb | Christos KK Loverdos | public void hideUploadIndicator() { |
1428 | cdd90acb | Christos KK Loverdos | upload.removeStyleName("pithos-uploadButton-loading");
|
1429 | cdd90acb | Christos KK Loverdos | upload.setTitle("");
|
1430 | cdd90acb | Christos KK Loverdos | } |
1431 | cdd90acb | Christos KK Loverdos | |
1432 | cdd90acb | Christos KK Loverdos | public void showUploadIndicator() { |
1433 | cdd90acb | Christos KK Loverdos | upload.addStyleName("pithos-uploadButton-loading");
|
1434 | cdd90acb | Christos KK Loverdos | upload.setTitle("Upload in progress. Click for details.");
|
1435 | cdd90acb | Christos KK Loverdos | } |
1436 | cdd90acb | Christos KK Loverdos | |
1437 | cdd90acb | Christos KK Loverdos | public void scheduleFolderHeadCommand(final Folder folder, final Command callback) { |
1438 | cdd90acb | Christos KK Loverdos | if(folder == null) { |
1439 | cdd90acb | Christos KK Loverdos | if(callback != null) { |
1440 | cdd90acb | Christos KK Loverdos | callback.execute(); |
1441 | cdd90acb | Christos KK Loverdos | } |
1442 | cdd90acb | Christos KK Loverdos | } |
1443 | cdd90acb | Christos KK Loverdos | else {
|
1444 | 28e270f9 | Christos KK Loverdos | HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, getStorageAPIURL(), folder.getOwnerID(), folder.getUri(), folder) {
|
1445 | cdd90acb | Christos KK Loverdos | |
1446 | cdd90acb | Christos KK Loverdos | @Override
|
1447 | cdd90acb | Christos KK Loverdos | public void onSuccess(Folder _result) { |
1448 | cdd90acb | Christos KK Loverdos | if(callback != null) { |
1449 | cdd90acb | Christos KK Loverdos | callback.execute(); |
1450 | cdd90acb | Christos KK Loverdos | } |
1451 | cdd90acb | Christos KK Loverdos | } |
1452 | cdd90acb | Christos KK Loverdos | |
1453 | cdd90acb | Christos KK Loverdos | @Override
|
1454 | cdd90acb | Christos KK Loverdos | public void onError(Throwable t) { |
1455 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
1456 | cdd90acb | Christos KK Loverdos | if(((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) {
|
1457 | cdd90acb | Christos KK Loverdos | final String path = folder.getUri(); |
1458 | 28e270f9 | Christos KK Loverdos | PutRequest newFolder = new PutRequest(getStorageAPIURL(), folder.getOwnerID(), path) {
|
1459 | cdd90acb | Christos KK Loverdos | @Override
|
1460 | cdd90acb | Christos KK Loverdos | public void onSuccess(Resource _result) { |
1461 | cdd90acb | Christos KK Loverdos | scheduleFolderHeadCommand(folder, callback); |
1462 | cdd90acb | Christos KK Loverdos | } |
1463 | cdd90acb | Christos KK Loverdos | |
1464 | cdd90acb | Christos KK Loverdos | @Override
|
1465 | cdd90acb | Christos KK Loverdos | public void onError(Throwable _t) { |
1466 | cdd90acb | Christos KK Loverdos | setError(_t); |
1467 | cdd90acb | Christos KK Loverdos | if(_t instanceof RestException) { |
1468 | cdd90acb | Christos KK Loverdos | displayError("Unable to create folder: " + ((RestException) _t).getHttpStatusText());
|
1469 | cdd90acb | Christos KK Loverdos | } |
1470 | cdd90acb | Christos KK Loverdos | else {
|
1471 | cdd90acb | Christos KK Loverdos | displayError("System error creating folder: " + _t.getMessage());
|
1472 | cdd90acb | Christos KK Loverdos | } |
1473 | cdd90acb | Christos KK Loverdos | } |
1474 | cdd90acb | Christos KK Loverdos | |
1475 | cdd90acb | Christos KK Loverdos | @Override
|
1476 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1477 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1478 | cdd90acb | Christos KK Loverdos | } |
1479 | cdd90acb | Christos KK Loverdos | }; |
1480 | 728ff1e4 | Christos KK Loverdos | newFolder.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1481 | fa68c84d | Christos KK Loverdos | newFolder.setHeader(Const.CONTENT_TYPE, "application/folder");
|
1482 | fa68c84d | Christos KK Loverdos | newFolder.setHeader(Const.ACCEPT, "*/*");
|
1483 | fa68c84d | Christos KK Loverdos | newFolder.setHeader(Const.CONTENT_LENGTH, "0");
|
1484 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(newFolder); |
1485 | cdd90acb | Christos KK Loverdos | } |
1486 | cdd90acb | Christos KK Loverdos | else if(((RestException) t).getHttpStatusCode() == Response.SC_FORBIDDEN) { |
1487 | cdd90acb | Christos KK Loverdos | onSuccess(folder); |
1488 | cdd90acb | Christos KK Loverdos | } |
1489 | cdd90acb | Christos KK Loverdos | else {
|
1490 | cdd90acb | Christos KK Loverdos | displayError("Error heading folder: " + ((RestException) t).getHttpStatusText());
|
1491 | cdd90acb | Christos KK Loverdos | } |
1492 | cdd90acb | Christos KK Loverdos | } |
1493 | cdd90acb | Christos KK Loverdos | else {
|
1494 | cdd90acb | Christos KK Loverdos | displayError("System error heading folder: " + t.getMessage());
|
1495 | cdd90acb | Christos KK Loverdos | } |
1496 | cdd90acb | Christos KK Loverdos | |
1497 | 8ddb4627 | Christos KK Loverdos | LOG("Error heading folder", t);
|
1498 | cdd90acb | Christos KK Loverdos | setError(t); |
1499 | cdd90acb | Christos KK Loverdos | } |
1500 | cdd90acb | Christos KK Loverdos | |
1501 | cdd90acb | Christos KK Loverdos | @Override
|
1502 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1503 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1504 | cdd90acb | Christos KK Loverdos | } |
1505 | cdd90acb | Christos KK Loverdos | }; |
1506 | 728ff1e4 | Christos KK Loverdos | headFolder.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1507 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(headFolder); |
1508 | cdd90acb | Christos KK Loverdos | } |
1509 | cdd90acb | Christos KK Loverdos | } |
1510 | cdd90acb | Christos KK Loverdos | |
1511 | cdd90acb | Christos KK Loverdos | public void scheduleFileHeadCommand(File f, final Command callback) { |
1512 | 28e270f9 | Christos KK Loverdos | HeadRequest<File> headFile = new HeadRequest<File>(File.class, getStorageAPIURL(), f.getOwnerID(), f.getUri(), f) { |
1513 | cdd90acb | Christos KK Loverdos | |
1514 | cdd90acb | Christos KK Loverdos | @Override
|
1515 | cdd90acb | Christos KK Loverdos | public void onSuccess(File _result) { |
1516 | cdd90acb | Christos KK Loverdos | if(callback != null) { |
1517 | cdd90acb | Christos KK Loverdos | callback.execute(); |
1518 | cdd90acb | Christos KK Loverdos | } |
1519 | cdd90acb | Christos KK Loverdos | } |
1520 | cdd90acb | Christos KK Loverdos | |
1521 | cdd90acb | Christos KK Loverdos | @Override
|
1522 | cdd90acb | Christos KK Loverdos | public void onError(Throwable t) { |
1523 | 8ddb4627 | Christos KK Loverdos | LOG("Error heading file", t);
|
1524 | cdd90acb | Christos KK Loverdos | setError(t); |
1525 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
1526 | cdd90acb | Christos KK Loverdos | displayError("Error heading file: " + ((RestException) t).getHttpStatusText());
|
1527 | cdd90acb | Christos KK Loverdos | } |
1528 | cdd90acb | Christos KK Loverdos | else {
|
1529 | cdd90acb | Christos KK Loverdos | displayError("System error heading file: " + t.getMessage());
|
1530 | cdd90acb | Christos KK Loverdos | } |
1531 | cdd90acb | Christos KK Loverdos | } |
1532 | cdd90acb | Christos KK Loverdos | |
1533 | cdd90acb | Christos KK Loverdos | @Override
|
1534 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1535 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1536 | cdd90acb | Christos KK Loverdos | } |
1537 | cdd90acb | Christos KK Loverdos | }; |
1538 | 728ff1e4 | Christos KK Loverdos | headFile.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1539 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(headFile); |
1540 | cdd90acb | Christos KK Loverdos | } |
1541 | cdd90acb | Christos KK Loverdos | |
1542 | cdd90acb | Christos KK Loverdos | public boolean isMySharedSelected() { |
1543 | cdd90acb | Christos KK Loverdos | return getSelectedTree().equals(getMySharedTreeView());
|
1544 | cdd90acb | Christos KK Loverdos | } |
1545 | cdd90acb | Christos KK Loverdos | |
1546 | cdd90acb | Christos KK Loverdos | private Folder getUploadFolder() {
|
1547 | cdd90acb | Christos KK Loverdos | if(folderTreeView.equals(getSelectedTree()) || otherSharedTreeView.equals(getSelectedTree())) {
|
1548 | cdd90acb | Christos KK Loverdos | return getSelection();
|
1549 | cdd90acb | Christos KK Loverdos | } |
1550 | cdd90acb | Christos KK Loverdos | return null; |
1551 | cdd90acb | Christos KK Loverdos | } |
1552 | cdd90acb | Christos KK Loverdos | |
1553 | cdd90acb | Christos KK Loverdos | private void updateUploadFolder() { |
1554 | cdd90acb | Christos KK Loverdos | updateUploadFolder(null);
|
1555 | cdd90acb | Christos KK Loverdos | } |
1556 | cdd90acb | Christos KK Loverdos | |
1557 | cdd90acb | Christos KK Loverdos | private void updateUploadFolder(final JsArrayString urls) { |
1558 | cdd90acb | Christos KK Loverdos | if(folderTreeView.equals(getSelectedTree()) || otherSharedTreeView.equals(getSelectedTree())) {
|
1559 | cdd90acb | Christos KK Loverdos | Folder f = getSelection(); |
1560 | cdd90acb | Christos KK Loverdos | if(getSelectedTree().equals(getFolderTreeView())) {
|
1561 | cdd90acb | Christos KK Loverdos | updateFolder(f, true, new Command() { |
1562 | cdd90acb | Christos KK Loverdos | |
1563 | cdd90acb | Christos KK Loverdos | @Override
|
1564 | cdd90acb | Christos KK Loverdos | public void execute() { |
1565 | cdd90acb | Christos KK Loverdos | updateStatistics(); |
1566 | cdd90acb | Christos KK Loverdos | if(urls != null) { |
1567 | cdd90acb | Christos KK Loverdos | selectUploadedFiles(urls); |
1568 | cdd90acb | Christos KK Loverdos | } |
1569 | cdd90acb | Christos KK Loverdos | } |
1570 | cdd90acb | Christos KK Loverdos | }, false);
|
1571 | cdd90acb | Christos KK Loverdos | } |
1572 | cdd90acb | Christos KK Loverdos | else {
|
1573 | cdd90acb | Christos KK Loverdos | updateOtherSharedFolder(f, true, null); |
1574 | cdd90acb | Christos KK Loverdos | } |
1575 | cdd90acb | Christos KK Loverdos | } |
1576 | cdd90acb | Christos KK Loverdos | } |
1577 | cdd90acb | Christos KK Loverdos | |
1578 | cdd90acb | Christos KK Loverdos | public native void disableUploadArea() /*-{ |
1579 | cdd90acb | Christos KK Loverdos | var uploader = $wnd.$("#uploader").pluploadQueue();
|
1580 | cdd90acb | Christos KK Loverdos | var dropElm = $wnd.document.getElementById('rightPanel');
|
1581 | cdd90acb | Christos KK Loverdos | $wnd.plupload.removeAllEvents(dropElm, uploader.id);
|
1582 | cdd90acb | Christos KK Loverdos | }-*/;
|
1583 | cdd90acb | Christos KK Loverdos | |
1584 | cdd90acb | Christos KK Loverdos | public native void enableUploadArea() /*-{ |
1585 | cdd90acb | Christos KK Loverdos | var uploader = $wnd.$("#uploader").pluploadQueue();
|
1586 | cdd90acb | Christos KK Loverdos | var dropElm = $wnd.document.getElementById('rightPanel');
|
1587 | cdd90acb | Christos KK Loverdos | $wnd.plupload.removeAllEvents(dropElm, uploader.id);
|
1588 | cdd90acb | Christos KK Loverdos | if (uploader.runtime == 'html5') {
|
1589 | cdd90acb | Christos KK Loverdos | uploader.settings.drop_element = 'rightPanel';
|
1590 | cdd90acb | Christos KK Loverdos | uploader.trigger('PostInit');
|
1591 | cdd90acb | Christos KK Loverdos | }
|
1592 | cdd90acb | Christos KK Loverdos | }-*/;
|
1593 | cdd90acb | Christos KK Loverdos | |
1594 | cdd90acb | Christos KK Loverdos | public void showUploadAlert(int nOfFiles) { |
1595 | cdd90acb | Christos KK Loverdos | if(uploadAlert == null) { |
1596 | cdd90acb | Christos KK Loverdos | uploadAlert = new UploadAlert(this, nOfFiles); |
1597 | cdd90acb | Christos KK Loverdos | } |
1598 | cdd90acb | Christos KK Loverdos | if(!uploadAlert.isShowing()) {
|
1599 | cdd90acb | Christos KK Loverdos | uploadAlert.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
|
1600 | cdd90acb | Christos KK Loverdos | |
1601 | cdd90acb | Christos KK Loverdos | @Override
|
1602 | cdd90acb | Christos KK Loverdos | public void setPosition(int offsetWidth, int offsetHeight) { |
1603 | cdd90acb | Christos KK Loverdos | uploadAlert.setPopupPosition((Window.getClientWidth() - offsetWidth) / 2, statusPanel.getAbsoluteTop() - offsetHeight); |
1604 | cdd90acb | Christos KK Loverdos | } |
1605 | cdd90acb | Christos KK Loverdos | }); |
1606 | cdd90acb | Christos KK Loverdos | } |
1607 | cdd90acb | Christos KK Loverdos | uploadAlert.setNumOfFiles(nOfFiles); |
1608 | cdd90acb | Christos KK Loverdos | } |
1609 | cdd90acb | Christos KK Loverdos | |
1610 | cdd90acb | Christos KK Loverdos | public void hideUploadAlert() { |
1611 | cdd90acb | Christos KK Loverdos | if(uploadAlert != null && uploadAlert.isShowing()) { |
1612 | cdd90acb | Christos KK Loverdos | uploadAlert.hide(); |
1613 | cdd90acb | Christos KK Loverdos | } |
1614 | cdd90acb | Christos KK Loverdos | } |
1615 | cdd90acb | Christos KK Loverdos | |
1616 | cdd90acb | Christos KK Loverdos | public void selectUploadedFiles(JsArrayString urls) { |
1617 | cdd90acb | Christos KK Loverdos | List<String> selectedUrls = new ArrayList<String>(); |
1618 | cdd90acb | Christos KK Loverdos | for(int i = 0; i < urls.length(); i++) { |
1619 | cdd90acb | Christos KK Loverdos | selectedUrls.add(urls.get(i)); |
1620 | cdd90acb | Christos KK Loverdos | } |
1621 | cdd90acb | Christos KK Loverdos | fileList.selectByUrl(selectedUrls); |
1622 | cdd90acb | Christos KK Loverdos | } |
1623 | cdd90acb | Christos KK Loverdos | |
1624 | 8ddb4627 | Christos KK Loverdos | public void purgeContainer(final Folder container) { |
1625 | cdd90acb | Christos KK Loverdos | String path = "/" + container.getName() + "?delimiter=/"; |
1626 | 28e270f9 | Christos KK Loverdos | DeleteRequest delete = new DeleteRequest(getStorageAPIURL(), getUserID(), path) {
|
1627 | cdd90acb | Christos KK Loverdos | |
1628 | cdd90acb | Christos KK Loverdos | @Override
|
1629 | cdd90acb | Christos KK Loverdos | protected void onUnauthorized(Response response) { |
1630 | cdd90acb | Christos KK Loverdos | sessionExpired(); |
1631 | cdd90acb | Christos KK Loverdos | } |
1632 | cdd90acb | Christos KK Loverdos | |
1633 | cdd90acb | Christos KK Loverdos | @Override
|
1634 | cdd90acb | Christos KK Loverdos | public void onSuccess(Resource result) { |
1635 | cdd90acb | Christos KK Loverdos | updateFolder(container, true, null, true); |
1636 | cdd90acb | Christos KK Loverdos | } |
1637 | cdd90acb | Christos KK Loverdos | |
1638 | cdd90acb | Christos KK Loverdos | @Override
|
1639 | cdd90acb | Christos KK Loverdos | public void onError(Throwable t) { |
1640 | 8ddb4627 | Christos KK Loverdos | LOG("Error deleting trash", t);
|
1641 | cdd90acb | Christos KK Loverdos | setError(t); |
1642 | cdd90acb | Christos KK Loverdos | if(t instanceof RestException) { |
1643 | b73a903e | Christos Stathis | displayError("Error deleting trash: " + ((RestException) t).getHttpStatusText());
|
1644 | cdd90acb | Christos KK Loverdos | } |
1645 | cdd90acb | Christos KK Loverdos | else {
|
1646 | b73a903e | Christos Stathis | displayError("System error deleting trash: " + t.getMessage());
|
1647 | cdd90acb | Christos KK Loverdos | } |
1648 | cdd90acb | Christos KK Loverdos | } |
1649 | cdd90acb | Christos KK Loverdos | }; |
1650 | 728ff1e4 | Christos KK Loverdos | delete.setHeader(Const.X_AUTH_TOKEN, getUserToken()); |
1651 | cdd90acb | Christos KK Loverdos | Scheduler.get().scheduleDeferred(delete); |
1652 | cdd90acb | Christos KK Loverdos | } |
1653 | a57faaf0 | Christos Stathis | } |