36 |
36 |
|
37 |
37 |
import gr.grnet.pithos.web.client.foldertree.File;
|
38 |
38 |
import gr.grnet.pithos.web.client.foldertree.Resource;
|
|
39 |
import gr.grnet.pithos.web.client.rest.HeadRequest;
|
39 |
40 |
import gr.grnet.pithos.web.client.rest.PostRequest;
|
40 |
41 |
|
41 |
42 |
import java.util.Map;
|
42 |
43 |
|
43 |
44 |
import com.google.gwt.core.client.GWT;
|
44 |
45 |
import com.google.gwt.core.client.Scheduler;
|
|
46 |
import com.google.gwt.dom.client.NativeEvent;
|
45 |
47 |
import com.google.gwt.event.dom.client.ClickEvent;
|
46 |
48 |
import com.google.gwt.event.dom.client.ClickHandler;
|
|
49 |
import com.google.gwt.event.dom.client.KeyCodes;
|
47 |
50 |
import com.google.gwt.http.client.Response;
|
48 |
51 |
import com.google.gwt.http.client.URL;
|
49 |
52 |
import com.google.gwt.resources.client.ImageResource;
|
50 |
53 |
import com.google.gwt.user.client.Command;
|
51 |
54 |
import com.google.gwt.user.client.Window;
|
|
55 |
import com.google.gwt.user.client.Event.NativePreviewEvent;
|
52 |
56 |
import com.google.gwt.user.client.ui.Anchor;
|
53 |
57 |
import com.google.gwt.user.client.ui.Button;
|
54 |
58 |
import com.google.gwt.user.client.ui.CheckBox;
|
... | ... | |
68 |
72 |
protected PermissionsList permList;
|
69 |
73 |
|
70 |
74 |
protected CheckBox readForAll;
|
71 |
|
|
|
75 |
|
|
76 |
private HorizontalPanel pathPanel;
|
|
77 |
|
|
78 |
private TextBox path;
|
|
79 |
|
72 |
80 |
/**
|
73 |
81 |
* An image bundle for this widgets images.
|
74 |
82 |
*/
|
... | ... | |
122 |
130 |
|
123 |
131 |
outer.add(inner);
|
124 |
132 |
|
125 |
|
// Create the 'OK' button, along with a listener that hides the dialog
|
126 |
|
// when the button is clicked.
|
127 |
|
final Button ok = new Button("OK", new ClickHandler() {
|
|
133 |
final Button ok = new Button("Close", new ClickHandler() {
|
128 |
134 |
@Override
|
129 |
135 |
public void onClick(ClickEvent event) {
|
130 |
|
accept();
|
131 |
136 |
closeDialog();
|
132 |
137 |
}
|
133 |
138 |
});
|
... | ... | |
178 |
183 |
final Label readForAllNote = new Label("When this option is enabled, the file will be readable" +
|
179 |
184 |
" by everyone. By checking this option, you are certifying that you have the right to " +
|
180 |
185 |
"distribute this file and that it does not violate the Terms of Use.", true);
|
181 |
|
readForAllNote.setVisible(false);
|
182 |
186 |
readForAllNote.setStylePrimaryName("pithos-readForAllNote");
|
183 |
187 |
|
184 |
188 |
readForAll = new CheckBox();
|
... | ... | |
186 |
190 |
readForAll.addClickHandler(new ClickHandler() {
|
187 |
191 |
@Override
|
188 |
192 |
public void onClick(ClickEvent event) {
|
189 |
|
readForAllNote.setVisible(readForAll.getValue());
|
|
193 |
accept();
|
190 |
194 |
}
|
191 |
195 |
});
|
192 |
196 |
|
... | ... | |
201 |
205 |
permPanel.add(permForAll);
|
202 |
206 |
}
|
203 |
207 |
|
204 |
|
if (file.isPublished()) {
|
205 |
|
final HorizontalPanel pathPanel = new HorizontalPanel();
|
206 |
|
pathPanel.setWidth("100%");
|
207 |
|
pathPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
|
208 |
|
pathPanel.add(new Label("Link"));
|
209 |
|
pathPanel.setSpacing(8);
|
210 |
|
pathPanel.addStyleName("pithos-TabPanelBottom");
|
211 |
|
|
212 |
|
TextBox path = new TextBox();
|
213 |
|
path.setWidth("100%");
|
214 |
|
path.addClickHandler(new ClickHandler() {
|
215 |
|
@Override
|
216 |
|
public void onClick(ClickEvent event) {
|
217 |
|
Pithos.enableIESelection();
|
218 |
|
((TextBox) event.getSource()).selectAll();
|
219 |
|
Pithos.preventIESelection();
|
220 |
|
}
|
221 |
|
});
|
222 |
|
path.setText(Window.Location.getHost() + file.getPublicUri());
|
223 |
|
path.setTitle("Use this link for sharing the file via e-mail, IM, etc. (crtl-C/cmd-C to copy to system clipboard)");
|
224 |
|
path.setWidth("100%");
|
225 |
|
path.setReadOnly(true);
|
226 |
|
pathPanel.add(path);
|
227 |
|
permPanel.add(pathPanel);
|
228 |
|
}
|
229 |
|
|
|
208 |
pathPanel = new HorizontalPanel();
|
|
209 |
pathPanel.setVisible(false);
|
|
210 |
pathPanel.setWidth("100%");
|
|
211 |
pathPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
|
|
212 |
pathPanel.add(new Label("Link"));
|
|
213 |
pathPanel.setSpacing(8);
|
|
214 |
pathPanel.addStyleName("pithos-TabPanelBottom");
|
|
215 |
|
|
216 |
path = new TextBox();
|
|
217 |
path.setWidth("100%");
|
|
218 |
path.addClickHandler(new ClickHandler() {
|
|
219 |
@Override
|
|
220 |
public void onClick(ClickEvent event) {
|
|
221 |
Pithos.enableIESelection();
|
|
222 |
((TextBox) event.getSource()).selectAll();
|
|
223 |
Pithos.preventIESelection();
|
|
224 |
}
|
|
225 |
});
|
|
226 |
path.setText(Window.Location.getHost() + file.getPublicUri());
|
|
227 |
path.setTitle("Use this link for sharing the file via e-mail, IM, etc. (crtl-C/cmd-C to copy to system clipboard)");
|
|
228 |
path.setWidth("100%");
|
|
229 |
path.setReadOnly(true);
|
|
230 |
pathPanel.add(path);
|
|
231 |
permPanel.add(pathPanel);
|
|
232 |
|
|
233 |
Scheduler.get().scheduleDeferred(new Command() {
|
|
234 |
|
|
235 |
@Override
|
|
236 |
public void execute() {
|
|
237 |
showLinkIfPublished();
|
|
238 |
}
|
|
239 |
});
|
230 |
240 |
return permPanel;
|
231 |
241 |
}
|
232 |
242 |
|
|
243 |
void showLinkIfPublished() {
|
|
244 |
if (file.isPublished()) {
|
|
245 |
path.setText(Window.Location.getHost() + file.getPublicUri());
|
|
246 |
pathPanel.setVisible(true);
|
|
247 |
}
|
|
248 |
else {
|
|
249 |
pathPanel.setVisible(false);
|
|
250 |
}
|
|
251 |
}
|
233 |
252 |
/**
|
234 |
253 |
* Accepts any change and updates the file
|
235 |
254 |
*
|
... | ... | |
238 |
257 |
protected void accept() {
|
239 |
258 |
final Map<String, Boolean[]> perms = (permList.hasChanges() ? permList.getPermissions() : null);
|
240 |
259 |
|
241 |
|
//only update the read for all perm if the user is the owner
|
242 |
260 |
Boolean published = null;
|
243 |
261 |
if (readForAll.getValue() != file.isPublished())
|
244 |
262 |
if (file.getOwner().equals(app.getUsername()))
|
245 |
263 |
published = readForAll.getValue();
|
246 |
|
final Boolean finalPublished = published;
|
247 |
|
|
248 |
|
updateMetaData(app.getApiPath(), app.getUsername(), file.getUri() + "?update=", finalPublished, perms);
|
|
264 |
updateMetaData(app.getApiPath(), app.getUsername(), file.getUri() + "?update=", published, perms);
|
249 |
265 |
}
|
250 |
266 |
|
251 |
|
protected void updateMetaData(String api, String owner, String path, final Boolean published, final Map<String, Boolean[]> newPermissions) {
|
|
267 |
protected void updateMetaData(String api, String owner, final String path, final Boolean published, final Map<String, Boolean[]> newPermissions) {
|
252 |
268 |
if (published != null || newPermissions != null) {
|
253 |
269 |
PostRequest updateFile = new PostRequest(api, owner, path) {
|
254 |
270 |
@Override
|
255 |
271 |
public void onSuccess(Resource result) {
|
256 |
|
app.updateFolder(file.getParent(), true, new Command() {
|
257 |
|
|
|
272 |
HeadRequest<File> headFile = new HeadRequest<File>(File.class, app.getApiPath(), file.getOwner(), path, file) {
|
|
273 |
|
258 |
274 |
@Override
|
259 |
|
public void execute() {
|
260 |
|
app.updateMySharedRoot();
|
|
275 |
public void onSuccess(File _result) {
|
|
276 |
showLinkIfPublished();
|
|
277 |
app.updateFolder(file.getParent(), true, new Command() {
|
|
278 |
|
|
279 |
@Override
|
|
280 |
public void execute() {
|
|
281 |
app.updateMySharedRoot();
|
|
282 |
}
|
|
283 |
});
|
261 |
284 |
}
|
262 |
|
});
|
|
285 |
|
|
286 |
@Override
|
|
287 |
public void onError(Throwable t) {
|
|
288 |
GWT.log("", t);
|
|
289 |
app.setError(t);
|
|
290 |
app.displayError("System error modifying file:" + t.getMessage());
|
|
291 |
}
|
|
292 |
|
|
293 |
@Override
|
|
294 |
protected void onUnauthorized(Response response) {
|
|
295 |
app.sessionExpired();
|
|
296 |
}
|
|
297 |
};
|
|
298 |
headFile.setHeader("X-Auth-Token", app.getToken());
|
|
299 |
Scheduler.get().scheduleDeferred(headFile);
|
263 |
300 |
}
|
264 |
301 |
|
265 |
302 |
@Override
|
... | ... | |
315 |
352 |
}
|
316 |
353 |
});
|
317 |
354 |
}
|
|
355 |
|
|
356 |
@Override
|
|
357 |
protected void onPreviewNativeEvent(NativePreviewEvent preview) {
|
|
358 |
super.onPreviewNativeEvent(preview);
|
|
359 |
|
|
360 |
NativeEvent evt = preview.getNativeEvent();
|
|
361 |
if (evt.getType().equals("keydown") && evt.getKeyCode() == KeyCodes.KEY_ENTER)
|
|
362 |
closeDialog();
|
|
363 |
}
|
318 |
364 |
}
|