Revision 33b61be6
b/web_client/src/gr/grnet/pithos/web/client/FileMenu.java | ||
---|---|---|
131 | 131 |
// contextMenu.addItem(sharingItem) |
132 | 132 |
// .setVisible(propertiesVisible); |
133 | 133 |
// |
134 |
if (selectedFiles.size() > 0) { |
|
135 |
MenuItem propertiesItem = new MenuItem("<span>" + AbstractImagePrototype.create(images.viewText()).getHTML() + " Properties</span>", true, new PropertiesCommand(GSS.get(), null, selectedFiles, images, 0)); |
|
134 |
if (selectedFiles.size() > 0 || selectedFolder != null) {
|
|
135 |
MenuItem propertiesItem = new MenuItem("<span>" + AbstractImagePrototype.create(images.viewText()).getHTML() + " Properties</span>", true, new PropertiesCommand(GSS.get(), null, selectedFiles.size() > 0 ? selectedFiles : selectedFolder, images, 0));
|
|
136 | 136 |
addItem(propertiesItem); |
137 | 137 |
} |
138 | 138 |
} |
b/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java | ||
---|---|---|
125 | 125 |
// MenuItem sharing = new MenuItem("<span id = 'folderContextMenu.sharing'>" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + " Sharing</span>", true, new PropertiesCommand(this, newImages, 1)); |
126 | 126 |
// contextMenu.addItem(sharing); |
127 | 127 |
|
128 |
// MenuItem properties = new MenuItem("<span id = 'folderContextMenu.properties'>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties</span>", true, new PropertiesCommand(this, newImages, 0));
|
|
129 |
// contextMenu.addItem(properties);
|
|
128 |
MenuItem properties = new MenuItem("<span id = 'folderContextMenu.properties'>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties</span>", true, new PropertiesCommand(GSS.get(), this, folder, newImages, 0));
|
|
129 |
contextMenu.addItem(properties); |
|
130 | 130 |
|
131 | 131 |
add(contextMenu); |
132 | 132 |
} |
b/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java | ||
---|---|---|
36 | 36 |
|
37 | 37 |
import com.google.gwt.core.client.Scheduler; |
38 | 38 |
import com.google.gwt.event.dom.client.KeyDownEvent; |
39 |
import com.google.gwt.user.client.Command; |
|
39 | 40 |
import com.google.gwt.user.client.Event; |
41 |
import gr.grnet.pithos.web.client.foldertree.File; |
|
40 | 42 |
import gr.grnet.pithos.web.client.foldertree.Folder; |
41 | 43 |
import gr.grnet.pithos.web.client.foldertree.Resource; |
42 | 44 |
import gr.grnet.pithos.web.client.rest.PostCommand; |
... | ... | |
64 | 66 |
import com.google.gwt.user.client.ui.TabPanel; |
65 | 67 |
import com.google.gwt.user.client.ui.TextBox; |
66 | 68 |
import com.google.gwt.user.client.ui.VerticalPanel; |
69 |
import java.util.Iterator; |
|
67 | 70 |
|
68 | 71 |
/** |
69 | 72 |
* The 'Folder properties' dialog box implementation. |
... | ... | |
132 | 135 |
generalTable.setText(2, 0, "Creator"); |
133 | 136 |
generalTable.setText(3, 0, "Last modified"); |
134 | 137 |
folderName.setText(create ? "" : folder.getName()); |
138 |
folderName.setReadOnly(folder.isContainer()); |
|
135 | 139 |
generalTable.setWidget(0, 1, folderName); |
136 | 140 |
|
137 | 141 |
if (create) |
... | ... | |
354 | 358 |
// } |
355 | 359 |
// }; |
356 | 360 |
// DeferredCommand.addCommand(ep); |
361 |
final String newName = folderName.getText(); |
|
362 |
if (!folder.isContainer() && !folder.getName().equals(newName)) { |
|
363 |
final String path = app.getApiPath() + app.getUsername() + folder.getParent().getUri() + "/" + newName; |
|
364 |
PutRequest newFolder = new PutRequest(path) { |
|
365 |
@Override |
|
366 |
public void onSuccess(Resource result) { |
|
367 |
Iterator<File> iter = folder.getFiles().iterator(); |
|
368 |
app.copyFiles(iter, folder.getParent().getUri() + "/" + newName, new Command() { |
|
369 |
@Override |
|
370 |
public void execute() { |
|
371 |
Iterator<Folder> iterf = folder.getSubfolders().iterator(); |
|
372 |
app.copySubfolders(iterf, folder.getParent().getUri() + "/" + newName, new Command() { |
|
373 |
@Override |
|
374 |
public void execute() { |
|
375 |
app.deleteFolder(folder); |
|
376 |
app.updateFolder(folder.getParent()); |
|
377 |
} |
|
378 |
}); |
|
379 |
} |
|
380 |
}); |
|
381 |
} |
|
382 |
|
|
383 |
@Override |
|
384 |
public void onError(Throwable t) { |
|
385 |
GWT.log("", t); |
|
386 |
if(t instanceof RestException){ |
|
387 |
app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText()); |
|
388 |
} |
|
389 |
else |
|
390 |
app.displayError("System error modifying folder: " + t.getMessage()); |
|
391 |
} |
|
392 |
}; |
|
393 |
newFolder.setHeader("X-Auth-Token", app.getToken()); |
|
394 |
newFolder.setHeader("Content-Type", "application/folder"); |
|
395 |
newFolder.setHeader("Accept", "*/*"); |
|
396 |
newFolder.setHeader("Content-Length", "0"); |
|
397 |
Scheduler.get().scheduleDeferred(newFolder); |
|
398 |
} |
|
357 | 399 |
} |
358 | 400 |
|
359 | 401 |
public void selectTab(int _tab) { |
b/web_client/src/gr/grnet/pithos/web/client/GSS.java | ||
---|---|---|
46 | 46 |
import com.google.gwt.json.client.JSONParser; |
47 | 47 |
import com.google.gwt.json.client.JSONString; |
48 | 48 |
import com.google.gwt.json.client.JSONValue; |
49 |
import com.google.gwt.user.client.Command; |
|
49 | 50 |
import com.google.gwt.view.client.SelectionChangeEvent; |
50 | 51 |
import com.google.gwt.view.client.SingleSelectionModel; |
51 | 52 |
import gr.grnet.pithos.web.client.commands.GetUserCommand; |
... | ... | |
57 | 58 |
import gr.grnet.pithos.web.client.foldertree.Resource; |
58 | 59 |
import gr.grnet.pithos.web.client.rest.DeleteRequest; |
59 | 60 |
import gr.grnet.pithos.web.client.rest.GetRequest; |
61 |
import gr.grnet.pithos.web.client.rest.PutRequest; |
|
60 | 62 |
import gr.grnet.pithos.web.client.rest.RestException; |
61 | 63 |
import gr.grnet.pithos.web.client.rest.resource.FileResource; |
62 | 64 |
import gr.grnet.pithos.web.client.rest.resource.OtherUserResource; |
... | ... | |
918 | 920 |
public FolderTreeView getFolderTreeView() { |
919 | 921 |
return folderTreeView; |
920 | 922 |
} |
923 |
|
|
924 |
public void copyFiles(final Iterator<File> iter, final String targetUri, final Command callback) { |
|
925 |
if (iter.hasNext()) { |
|
926 |
File file = iter.next(); |
|
927 |
String path = getApiPath() + getUsername() + targetUri + "/" + file.getName(); |
|
928 |
PutRequest copyFile = new PutRequest(path) { |
|
929 |
@Override |
|
930 |
public void onSuccess(Resource result) { |
|
931 |
copyFiles(iter, targetUri, callback); |
|
932 |
} |
|
933 |
|
|
934 |
@Override |
|
935 |
public void onError(Throwable t) { |
|
936 |
GWT.log("", t); |
|
937 |
if (t instanceof RestException) { |
|
938 |
GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); |
|
939 |
} |
|
940 |
else |
|
941 |
GSS.get().displayError("System error unable to copy file: "+t.getMessage()); |
|
942 |
} |
|
943 |
}; |
|
944 |
copyFile.setHeader("X-Auth-Token", getToken()); |
|
945 |
copyFile.setHeader("X-Copy-From", file.getUri()); |
|
946 |
Scheduler.get().scheduleDeferred(copyFile); |
|
947 |
} |
|
948 |
else if (callback != null) { |
|
949 |
callback.execute(); |
|
950 |
} |
|
951 |
} |
|
952 |
|
|
953 |
public void copySubfolders(final Iterator<Folder> iter, final String targetUri, final Command callback) { |
|
954 |
if (iter.hasNext()) { |
|
955 |
final Folder f = iter.next(); |
|
956 |
copyFolder(f, targetUri, callback); |
|
957 |
} |
|
958 |
else if (callback != null) { |
|
959 |
callback.execute(); |
|
960 |
} |
|
961 |
} |
|
962 |
|
|
963 |
public void copyFolder(final Folder f, final String targetUri, final Command callback) { |
|
964 |
String path = getApiPath() + getUsername() + targetUri + "/" + f.getName(); |
|
965 |
PutRequest createFolder = new PutRequest(path) { |
|
966 |
@Override |
|
967 |
public void onSuccess(Resource result) { |
|
968 |
Iterator<File> iter = f.getFiles().iterator(); |
|
969 |
copyFiles(iter, targetUri + "/" + f.getName(), new Command() { |
|
970 |
@Override |
|
971 |
public void execute() { |
|
972 |
Iterator<Folder> iterf = f.getSubfolders().iterator(); |
|
973 |
copySubfolders(iterf, targetUri + "/" + f.getName(), new Command() { |
|
974 |
@Override |
|
975 |
public void execute() { |
|
976 |
callback.execute(); |
|
977 |
} |
|
978 |
}); |
|
979 |
} |
|
980 |
}); |
|
981 |
} |
|
982 |
|
|
983 |
@Override |
|
984 |
public void onError(Throwable t) { |
|
985 |
GWT.log("", t); |
|
986 |
if (t instanceof RestException) { |
|
987 |
displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText()); |
|
988 |
} |
|
989 |
else |
|
990 |
displayError("System error creating folder:" + t.getMessage()); |
|
991 |
} |
|
992 |
}; |
|
993 |
createFolder.setHeader("X-Auth-Token", getToken()); |
|
994 |
createFolder.setHeader("Accept", "*/*"); |
|
995 |
createFolder.setHeader("Content-Length", "0"); |
|
996 |
createFolder.setHeader("Content-Type", "application/folder"); |
|
997 |
Scheduler.get().scheduleDeferred(createFolder); |
|
998 |
} |
|
921 | 999 |
} |
b/web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java | ||
---|---|---|
74 | 74 |
if (clipboardItem instanceof Folder) { |
75 | 75 |
final Folder tobeCopied = (Folder) clipboardItem; |
76 | 76 |
if (operation == Clipboard.COPY) { |
77 |
copyFolder(tobeCopied, folder.getUri(), new Command() { |
|
77 |
app.copyFolder(tobeCopied, folder.getUri(), new Command() {
|
|
78 | 78 |
@Override |
79 | 79 |
public void execute() { |
80 | 80 |
app.getClipboard().clear(); |
... | ... | |
83 | 83 |
}); |
84 | 84 |
} |
85 | 85 |
else { |
86 |
copyFolder(tobeCopied, folder.getUri(), new Command() { |
|
86 |
app.copyFolder(tobeCopied, folder.getUri(), new Command() {
|
|
87 | 87 |
@Override |
88 | 88 |
public void execute() { |
89 | 89 |
app.getClipboard().clear(); |
... | ... | |
91 | 91 |
app.updateFolder(folder); |
92 | 92 |
} |
93 | 93 |
}); |
94 |
|
|
95 | 94 |
} |
96 | 95 |
} |
97 | 96 |
else { |
98 | 97 |
List<File> tobeCopied = (List<File>) clipboardItem; |
99 | 98 |
Iterator<File> iter = tobeCopied.iterator(); |
100 | 99 |
if (operation == Clipboard.COPY) { |
101 |
copyFiles(iter, folder.getUri(), new Command() { |
|
100 |
app.copyFiles(iter, folder.getUri(), new Command() {
|
|
102 | 101 |
@Override |
103 | 102 |
public void execute() { |
104 | 103 |
app.getClipboard().clear(); |
... | ... | |
146 | 145 |
callback.execute(); |
147 | 146 |
} |
148 | 147 |
} |
149 |
|
|
150 |
private void copyFiles(final Iterator<File> iter, final String targetUri, final Command callback) { |
|
151 |
if (iter.hasNext()) { |
|
152 |
File file = iter.next(); |
|
153 |
String path = app.getApiPath() + app.getUsername() + targetUri + "/" + file.getName(); |
|
154 |
PutRequest copyFile = new PutRequest(path) { |
|
155 |
@Override |
|
156 |
public void onSuccess(Resource result) { |
|
157 |
copyFiles(iter, targetUri, callback); |
|
158 |
} |
|
159 |
|
|
160 |
@Override |
|
161 |
public void onError(Throwable t) { |
|
162 |
GWT.log("", t); |
|
163 |
if (t instanceof RestException) { |
|
164 |
GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); |
|
165 |
} |
|
166 |
else |
|
167 |
GSS.get().displayError("System error unable to copy file: "+t.getMessage()); |
|
168 |
} |
|
169 |
}; |
|
170 |
copyFile.setHeader("X-Auth-Token", app.getToken()); |
|
171 |
copyFile.setHeader("X-Copy-From", file.getUri()); |
|
172 |
Scheduler.get().scheduleDeferred(copyFile); |
|
173 |
} |
|
174 |
else if (callback != null) { |
|
175 |
callback.execute(); |
|
176 |
} |
|
177 |
} |
|
178 |
|
|
179 |
private void copyFolder(final Folder f, final String targetUri, final Command callback) { |
|
180 |
String path = app.getApiPath() + app.getUsername() + targetUri + "/" + f.getName(); |
|
181 |
PutRequest createFolder = new PutRequest(path) { |
|
182 |
@Override |
|
183 |
public void onSuccess(Resource result) { |
|
184 |
Iterator<File> iter = f.getFiles().iterator(); |
|
185 |
copyFiles(iter, targetUri + "/" + f.getName(), new Command() { |
|
186 |
@Override |
|
187 |
public void execute() { |
|
188 |
Iterator<Folder> iterf = f.getSubfolders().iterator(); |
|
189 |
copySubfolders(iterf, targetUri + "/" + f.getName(), new Command() { |
|
190 |
@Override |
|
191 |
public void execute() { |
|
192 |
callback.execute(); |
|
193 |
} |
|
194 |
}); |
|
195 |
} |
|
196 |
}); |
|
197 |
} |
|
198 |
|
|
199 |
@Override |
|
200 |
public void onError(Throwable t) { |
|
201 |
GWT.log("", t); |
|
202 |
if (t instanceof RestException) { |
|
203 |
app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText()); |
|
204 |
} |
|
205 |
else |
|
206 |
app.displayError("System error creating folder:" + t.getMessage()); |
|
207 |
} |
|
208 |
}; |
|
209 |
createFolder.setHeader("X-Auth-Token", app.getToken()); |
|
210 |
createFolder.setHeader("Accept", "*/*"); |
|
211 |
createFolder.setHeader("Content-Length", "0"); |
|
212 |
createFolder.setHeader("Content-Type", "application/folder"); |
|
213 |
Scheduler.get().scheduleDeferred(createFolder); |
|
214 |
} |
|
215 |
|
|
216 |
private void copySubfolders(final Iterator<Folder> iter, final String targetUri, final Command callback) { |
|
217 |
if (iter.hasNext()) { |
|
218 |
final Folder f = iter.next(); |
|
219 |
copyFolder(f, targetUri, callback); |
|
220 |
} |
|
221 |
else if (callback != null) { |
|
222 |
callback.execute(); |
|
223 |
} |
|
224 |
} |
|
225 | 148 |
} |
Also available in: Unified diff