Revision 33b61be6 web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java

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