Revision 4d3dcdf6

b/web_client/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java
42 42
import gr.grnet.pithos.web.client.rest.MultiplePostCommand;
43 43
import gr.grnet.pithos.web.client.rest.PostCommand;
44 44
import gr.grnet.pithos.web.client.rest.PostRequest;
45
import gr.grnet.pithos.web.client.rest.PutRequest;
45 46
import gr.grnet.pithos.web.client.rest.RestException;
46 47
import gr.grnet.pithos.web.client.rest.resource.FileResource;
47 48
import gr.grnet.pithos.web.client.rest.resource.FolderResource;
......
79 80
		containerPanel.hide();
80 81
        if (resource instanceof List) {
81 82
            Iterator<File> iter = ((List<File>) resource).iterator();
82
            deleteFiles(iter);
83
            trashFiles(iter, new Command() {
84
                @Override
85
                public void execute() {
86
                    app.get().updateFolder(((List<File>) resource).get(0).getParent());
87
                }
88
            });
83 89
        }
84 90
        else if (resource instanceof Folder) {
91
            final Folder toBeTrashed = (Folder) resource;
92
            trashFolder(toBeTrashed, new Command() {
93
                @Override
94
                public void execute() {
95
                    app.updateFolder(toBeTrashed.getParent());
96
                }
97
            });
85 98

  
86 99
        }
87 100
	}
88 101

  
89
    private void deleteFiles(final Iterator<File> iter) {
102
    private void trashFolder(final Folder f, final Command callback) {
103
        String path = app.getApiPath() + app.getUsername() + f.getUri() + "?update=";
104
        PostRequest trashFolder = new PostRequest(path) {
105
            @Override
106
            public void onSuccess(Resource result) {
107
                Iterator<File> iter = f.getFiles().iterator();
108
                trashFiles(iter, new Command() {
109
                    @Override
110
                    public void execute() {
111
                        Iterator<Folder> iterf = f.getSubfolders().iterator();
112
                        trashSubfolders(iterf, new Command() {
113
                            @Override
114
                            public void execute() {
115
                                callback.execute();
116
                            }
117
                        });
118
                    }
119
                });
120
            }
121

  
122
            @Override
123
            public void onError(Throwable t) {
124
                GWT.log("", t);
125
                if (t instanceof RestException) {
126
                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
127
                }
128
                else
129
                    app.displayError("System error creating folder:" + t.getMessage());
130
            }
131
        };
132
        trashFolder.setHeader("X-Auth-Token", app.getToken());
133
        trashFolder.setHeader("X-Object-Meta-Trash", "true");
134
        Scheduler.get().scheduleDeferred(trashFolder);
135
    }
136

  
137
    private void trashFiles(final Iterator<File> iter, final Command callback) {
90 138
        if (iter.hasNext()) {
91 139
            File file = iter.next();
92 140
            String path = app.getApiPath() + app.getUsername() + file.getUri() + "?update=";
93 141
            PostRequest trashFile = new PostRequest(path) {
94 142
                @Override
95 143
                public void onSuccess(Resource result) {
96
                    deleteFiles(iter);
144
                    trashFiles(iter, callback);
97 145
                }
98 146

  
99 147
                @Override
100 148
                public void onError(Throwable t) {
101 149
                    GWT.log("", t);
102 150
                    if (t instanceof RestException) {
103
                        GSS.get().displayError("Unable to move file to trash: " + ((RestException) t).getHttpStatusText());
151
                        GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText());
104 152
                    }
105 153
                    else
106
                        GSS.get().displayError("System error unable to move file to trash: "+t.getMessage());
154
                        GSS.get().displayError("System error unable to copy file: "+t.getMessage());
107 155
                }
108 156
            };
109 157
            trashFile.setHeader("X-Auth-Token", app.getToken());
110 158
            trashFile.setHeader("X-Object-Meta-Trash", "true");
111 159
            Scheduler.get().scheduleDeferred(trashFile);
112 160
        }
113
        else {
114
            app.get().updateFolder(((List<File>) resource).get(0).getParent());
161
        else  if (callback != null) {
162
            callback.execute();
163
        }
164
    }
165

  
166
    private void trashSubfolders(final Iterator<Folder> iter, final Command callback) {
167
        if (iter.hasNext()) {
168
            final Folder f = iter.next();
169
            trashFolder(f, callback);
170
        }
171
        else  if (callback != null) {
172
            callback.execute();
115 173
        }
116 174
    }
117 175
}
b/web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java
44 44
import com.google.gwt.json.client.JSONValue;
45 45
import java.util.ArrayList;
46 46
import java.util.Date;
47
import java.util.Iterator;
47 48
import java.util.LinkedHashSet;
48 49
import java.util.List;
49 50
import java.util.Set;
......
75 76

  
76 77
    private Set<File> files = new LinkedHashSet<File>();
77 78

  
79
    private boolean inTrash = false;
80

  
78 81
    public Folder() {};
79 82

  
80 83
    public Folder(String name) {
......
126 129
        if (header != null)
127 130
            bytesUsed = Long.valueOf(header);
128 131

  
132
        header = response.getHeader("X-Object-Meta-Trash");
133
        if (header != null && header.equals("true"))
134
            inTrash = true;
135

  
129 136
        subfolders.clear(); //This is necessary in case we update a pre-existing Folder so that stale subfolders won't show up
130 137
        files.clear();
131 138
        JSONValue json = JSONParser.parseStrict(response.getText());
......
147 154
                    }
148 155
                }
149 156
            }
157
            Iterator<Folder> iter = subfolders.iterator();
158
            while (iter.hasNext()) {
159
                Folder f = iter.next();
160
                if (f.isInTrash())
161
                    iter.remove();
162
            }
163
            Iterator<File> it = files.iterator();
164
            while (it.hasNext()) {
165
                File f = it.next();
166
                if (f.isInTrash())
167
                    it.remove();
168
            }
150 169
        }
151 170
    }
152 171

  
......
174 193
            container = name;
175 194
            prefix = "";
176 195
        }
196
        if (o.containsKey("x_object_meta_trash") && o.get("x_object_meta_trash").isString().stringValue().equals("true"))
197
            inTrash = true;
177 198
    }
178 199

  
179 200
    public static Folder createFromResponse(Response response, Folder result) {
......
212 233
    public String getUri() {
213 234
        return "/" + container + (prefix.length() == 0 ? "" : "/" + prefix);
214 235
    }
236

  
237
    public boolean isInTrash() {
238
        return inTrash;
239
    }
215 240
}

Also available in: Unified diff