Revision 1f2a020d

b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java
70 70
            return;
71 71
        int operation = app.getClipboard().getOperation();
72 72
        if (clipboardItem instanceof Folder) {
73
            final Folder tobeCopied = (Folder) clipboardItem;
73 74
            if (operation == Clipboard.COPY) {
74

  
75
                copyFolder(tobeCopied, folder.getUri(), new Command() {
76
                    @Override
77
                    public void execute() {
78
                        app.getClipboard().clear();
79
                        app.updateFolder(folder);
80
                    }
81
                });
75 82
            }
76 83
            else {
77 84

  
......
81 88
            List<File> tobeCopied = (List<File>) clipboardItem;
82 89
            Iterator<File> iter = tobeCopied.iterator();
83 90
            if (operation == Clipboard.COPY) {
84
                copyFiles(iter);
91
                copyFiles(iter, folder.getUri(), new Command() {
92
                    @Override
93
                    public void execute() {
94
                        app.getClipboard().clear();
95
                        app.updateFolder(folder);
96
                    }
97
                });
85 98
            }
86 99
            else {
87
                moveFiles(iter);
100
                moveFiles(iter, new Command() {
101
                    @Override
102
                    public void execute() {
103
                        app.getClipboard().clear();
104
                        app.updateFolder(folder);
105
                    }
106
                });
88 107
            }
89 108
        }
90 109
	}
91 110

  
92
    private void moveFiles(final Iterator<File> iter) {
111
    private void moveFiles(final Iterator<File> iter, final Command callback) {
93 112
        if (iter.hasNext()) {
94 113
            File file = iter.next();
95 114
            String path = app.getApiPath() + app.getUsername() + folder.getUri() + "/" + file.getName();
96 115
            PutRequest copyFile = new PutRequest(path) {
97 116
                @Override
98 117
                public void onSuccess(Resource result) {
99
                    moveFiles(iter);
118
                    moveFiles(iter, callback);
100 119
                }
101 120

  
102 121
                @Override
......
113 132
            copyFile.setHeader("X-Move-From", file.getUri());
114 133
            Scheduler.get().scheduleDeferred(copyFile);
115 134
        }
116
        else {
117
            app.getClipboard().clear();
118
            app.updateFolder(folder);
135
        else if (callback != null) {
136
            callback.execute();
119 137
        }
120 138
    }
121 139

  
122
    private void copyFiles(final Iterator<File> iter) {
140
    private void copyFiles(final Iterator<File> iter, final String targetUri, final Command callback) {
123 141
        if (iter.hasNext()) {
124 142
            File file = iter.next();
125
            String path = app.getApiPath() + app.getUsername() + folder.getUri() + "/" + file.getName();
143
            String path = app.getApiPath() + app.getUsername() + targetUri + "/" + file.getName();
126 144
            PutRequest copyFile = new PutRequest(path) {
127 145
                @Override
128 146
                public void onSuccess(Resource result) {
129
                    copyFiles(iter);
147
                    copyFiles(iter, targetUri, callback);
130 148
                }
131 149

  
132 150
                @Override
......
143 161
            copyFile.setHeader("X-Copy-From", file.getUri());
144 162
            Scheduler.get().scheduleDeferred(copyFile);
145 163
        }
146
        else {
147
            app.getClipboard().clear();
148
            app.updateFolder(folder);
164
        else  if (callback != null) {
165
            callback.execute();
166
        }
167
    }
168

  
169
    private void copyFolder(final Folder f, final String targetUri, final Command callback) {
170
        String path = app.getApiPath() + app.getUsername() + targetUri + "/" + f.getName();
171
        PutRequest createFolder = new PutRequest(path) {
172
            @Override
173
            public void onSuccess(Resource result) {
174
                Iterator<File> iter = f.getFiles().iterator();
175
                copyFiles(iter, targetUri + "/" + f.getName(), new Command() {
176
                    @Override
177
                    public void execute() {
178
                        Iterator<Folder> iterf = f.getSubfolders().iterator();
179
                        copySubfolders(iterf, targetUri + "/" + f.getName(), new Command() {
180
                            @Override
181
                            public void execute() {
182
                                callback.execute();
183
                            }
184
                        });
185
                    }
186
                });
187
            }
188

  
189
            @Override
190
            public void onError(Throwable t) {
191
                GWT.log("", t);
192
                if (t instanceof RestException) {
193
                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
194
                }
195
                else
196
                    app.displayError("System error creating folder:" + t.getMessage());
197
            }
198
        };
199
        createFolder.setHeader("X-Auth-Token", app.getToken());
200
        createFolder.setHeader("Accept", "*/*");
201
        createFolder.setHeader("Content-Length", "0");
202
        createFolder.setHeader("Content-Type", "application/folder");
203
        Scheduler.get().scheduleDeferred(createFolder);
204
    }
205

  
206
    private void copySubfolders(final Iterator<Folder> iter, final String targetUri, final Command callback) {
207
        if (iter.hasNext()) {
208
            final Folder f = iter.next();
209
            copyFolder(f, targetUri, callback);
210
        }
211
        else  if (callback != null) {
212
            callback.execute();
149 213
        }
150 214
    }
151 215
}

Also available in: Unified diff