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() + "&nbsp;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() + "&nbsp;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() + "&nbsp;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() + "&nbsp;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() + "&nbsp;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