Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / commands / ToTrashCommand.java @ f6cd2099

History | View | Annotate | Download (6.5 kB)

1 a57faaf0 Christos Stathis
/*
2 63366925 Christos Stathis
 * Copyright 2011 GRNET S.A. All rights reserved.
3 63366925 Christos Stathis
 *
4 63366925 Christos Stathis
 * Redistribution and use in source and binary forms, with or
5 63366925 Christos Stathis
 * without modification, are permitted provided that the following
6 63366925 Christos Stathis
 * conditions are met:
7 63366925 Christos Stathis
 *
8 63366925 Christos Stathis
 *   1. Redistributions of source code must retain the above
9 63366925 Christos Stathis
 *      copyright notice, this list of conditions and the following
10 63366925 Christos Stathis
 *      disclaimer.
11 63366925 Christos Stathis
 *
12 63366925 Christos Stathis
 *   2. Redistributions in binary form must reproduce the above
13 63366925 Christos Stathis
 *      copyright notice, this list of conditions and the following
14 63366925 Christos Stathis
 *      disclaimer in the documentation and/or other materials
15 63366925 Christos Stathis
 *      provided with the distribution.
16 63366925 Christos Stathis
 *
17 63366925 Christos Stathis
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 63366925 Christos Stathis
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 63366925 Christos Stathis
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 63366925 Christos Stathis
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 63366925 Christos Stathis
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 63366925 Christos Stathis
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 63366925 Christos Stathis
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 63366925 Christos Stathis
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 63366925 Christos Stathis
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 63366925 Christos Stathis
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 63366925 Christos Stathis
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 63366925 Christos Stathis
 * POSSIBILITY OF SUCH DAMAGE.
29 63366925 Christos Stathis
 *
30 63366925 Christos Stathis
 * The views and conclusions contained in the software and
31 63366925 Christos Stathis
 * documentation are those of the authors and should not be
32 63366925 Christos Stathis
 * interpreted as representing official policies, either expressed
33 63366925 Christos Stathis
 * or implied, of GRNET S.A.
34 a57faaf0 Christos Stathis
 */
35 a57faaf0 Christos Stathis
package gr.grnet.pithos.web.client.commands;
36 a57faaf0 Christos Stathis
37 81918908 Christos Stathis
import com.google.gwt.core.client.Scheduler;
38 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.GSS;
39 81918908 Christos Stathis
import gr.grnet.pithos.web.client.foldertree.File;
40 81918908 Christos Stathis
import gr.grnet.pithos.web.client.foldertree.Folder;
41 81918908 Christos Stathis
import gr.grnet.pithos.web.client.foldertree.Resource;
42 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.MultiplePostCommand;
43 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.PostCommand;
44 81918908 Christos Stathis
import gr.grnet.pithos.web.client.rest.PostRequest;
45 2637c9cd Christos Stathis
import gr.grnet.pithos.web.client.rest.PutRequest;
46 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.RestException;
47 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.resource.FileResource;
48 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.resource.FolderResource;
49 a57faaf0 Christos Stathis
import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper;
50 a57faaf0 Christos Stathis
51 a57faaf0 Christos Stathis
import java.util.ArrayList;
52 81918908 Christos Stathis
import java.util.Iterator;
53 a57faaf0 Christos Stathis
import java.util.List;
54 a57faaf0 Christos Stathis
55 a57faaf0 Christos Stathis
56 a57faaf0 Christos Stathis
import com.google.gwt.core.client.GWT;
57 a57faaf0 Christos Stathis
import com.google.gwt.user.client.Command;
58 a57faaf0 Christos Stathis
import com.google.gwt.user.client.DeferredCommand;
59 a57faaf0 Christos Stathis
import com.google.gwt.user.client.ui.PopupPanel;
60 a57faaf0 Christos Stathis
61 a57faaf0 Christos Stathis
/**
62 a57faaf0 Christos Stathis
 *
63 a57faaf0 Christos Stathis
 * Move file or folder to trash.
64 a57faaf0 Christos Stathis
 *
65 a57faaf0 Christos Stathis
 *
66 a57faaf0 Christos Stathis
 */
67 a57faaf0 Christos Stathis
public class ToTrashCommand implements Command{
68 a57faaf0 Christos Stathis
        private PopupPanel containerPanel;
69 81918908 Christos Stathis
    private GSS app;
70 81918908 Christos Stathis
    private Object resource;
71 a57faaf0 Christos Stathis
72 81918908 Christos Stathis
        public ToTrashCommand(GSS _app, PopupPanel _containerPanel, Object _resource){
73 a57faaf0 Christos Stathis
                containerPanel = _containerPanel;
74 81918908 Christos Stathis
        app = _app;
75 81918908 Christos Stathis
        resource = _resource;
76 a57faaf0 Christos Stathis
        }
77 a57faaf0 Christos Stathis
78 a57faaf0 Christos Stathis
        @Override
79 a57faaf0 Christos Stathis
        public void execute() {
80 031f1fe0 Christos Stathis
        if (containerPanel != null)
81 031f1fe0 Christos Stathis
                    containerPanel.hide();
82 81918908 Christos Stathis
        if (resource instanceof List) {
83 81918908 Christos Stathis
            Iterator<File> iter = ((List<File>) resource).iterator();
84 2637c9cd Christos Stathis
            trashFiles(iter, new Command() {
85 2637c9cd Christos Stathis
                @Override
86 2637c9cd Christos Stathis
                public void execute() {
87 2637c9cd Christos Stathis
                    app.get().updateFolder(((List<File>) resource).get(0).getParent());
88 2637c9cd Christos Stathis
                }
89 2637c9cd Christos Stathis
            });
90 81918908 Christos Stathis
        }
91 81918908 Christos Stathis
        else if (resource instanceof Folder) {
92 2637c9cd Christos Stathis
            final Folder toBeTrashed = (Folder) resource;
93 2637c9cd Christos Stathis
            trashFolder(toBeTrashed, new Command() {
94 2637c9cd Christos Stathis
                @Override
95 2637c9cd Christos Stathis
                public void execute() {
96 2637c9cd Christos Stathis
                    app.updateFolder(toBeTrashed.getParent());
97 2637c9cd Christos Stathis
                }
98 2637c9cd Christos Stathis
            });
99 a57faaf0 Christos Stathis
100 81918908 Christos Stathis
        }
101 a57faaf0 Christos Stathis
        }
102 a57faaf0 Christos Stathis
103 2637c9cd Christos Stathis
    private void trashFolder(final Folder f, final Command callback) {
104 2637c9cd Christos Stathis
        String path = app.getApiPath() + app.getUsername() + f.getUri() + "?update=";
105 2637c9cd Christos Stathis
        PostRequest trashFolder = new PostRequest(path) {
106 2637c9cd Christos Stathis
            @Override
107 2637c9cd Christos Stathis
            public void onSuccess(Resource result) {
108 2637c9cd Christos Stathis
                Iterator<File> iter = f.getFiles().iterator();
109 2637c9cd Christos Stathis
                trashFiles(iter, new Command() {
110 2637c9cd Christos Stathis
                    @Override
111 2637c9cd Christos Stathis
                    public void execute() {
112 2637c9cd Christos Stathis
                        Iterator<Folder> iterf = f.getSubfolders().iterator();
113 2637c9cd Christos Stathis
                        trashSubfolders(iterf, new Command() {
114 2637c9cd Christos Stathis
                            @Override
115 2637c9cd Christos Stathis
                            public void execute() {
116 2637c9cd Christos Stathis
                                callback.execute();
117 2637c9cd Christos Stathis
                            }
118 2637c9cd Christos Stathis
                        });
119 2637c9cd Christos Stathis
                    }
120 2637c9cd Christos Stathis
                });
121 2637c9cd Christos Stathis
            }
122 2637c9cd Christos Stathis
123 2637c9cd Christos Stathis
            @Override
124 2637c9cd Christos Stathis
            public void onError(Throwable t) {
125 2637c9cd Christos Stathis
                GWT.log("", t);
126 2637c9cd Christos Stathis
                if (t instanceof RestException) {
127 2637c9cd Christos Stathis
                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
128 2637c9cd Christos Stathis
                }
129 2637c9cd Christos Stathis
                else
130 2637c9cd Christos Stathis
                    app.displayError("System error creating folder:" + t.getMessage());
131 2637c9cd Christos Stathis
            }
132 2637c9cd Christos Stathis
        };
133 2637c9cd Christos Stathis
        trashFolder.setHeader("X-Auth-Token", app.getToken());
134 2637c9cd Christos Stathis
        trashFolder.setHeader("X-Object-Meta-Trash", "true");
135 2637c9cd Christos Stathis
        Scheduler.get().scheduleDeferred(trashFolder);
136 2637c9cd Christos Stathis
    }
137 2637c9cd Christos Stathis
138 2637c9cd Christos Stathis
    private void trashFiles(final Iterator<File> iter, final Command callback) {
139 81918908 Christos Stathis
        if (iter.hasNext()) {
140 81918908 Christos Stathis
            File file = iter.next();
141 81918908 Christos Stathis
            String path = app.getApiPath() + app.getUsername() + file.getUri() + "?update=";
142 81918908 Christos Stathis
            PostRequest trashFile = new PostRequest(path) {
143 81918908 Christos Stathis
                @Override
144 81918908 Christos Stathis
                public void onSuccess(Resource result) {
145 2637c9cd Christos Stathis
                    trashFiles(iter, callback);
146 81918908 Christos Stathis
                }
147 81918908 Christos Stathis
148 81918908 Christos Stathis
                @Override
149 81918908 Christos Stathis
                public void onError(Throwable t) {
150 81918908 Christos Stathis
                    GWT.log("", t);
151 81918908 Christos Stathis
                    if (t instanceof RestException) {
152 2637c9cd Christos Stathis
                        GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText());
153 81918908 Christos Stathis
                    }
154 81918908 Christos Stathis
                    else
155 2637c9cd Christos Stathis
                        GSS.get().displayError("System error unable to copy file: "+t.getMessage());
156 81918908 Christos Stathis
                }
157 81918908 Christos Stathis
            };
158 81918908 Christos Stathis
            trashFile.setHeader("X-Auth-Token", app.getToken());
159 81918908 Christos Stathis
            trashFile.setHeader("X-Object-Meta-Trash", "true");
160 81918908 Christos Stathis
            Scheduler.get().scheduleDeferred(trashFile);
161 81918908 Christos Stathis
        }
162 2637c9cd Christos Stathis
        else  if (callback != null) {
163 2637c9cd Christos Stathis
            callback.execute();
164 2637c9cd Christos Stathis
        }
165 2637c9cd Christos Stathis
    }
166 2637c9cd Christos Stathis
167 2637c9cd Christos Stathis
    private void trashSubfolders(final Iterator<Folder> iter, final Command callback) {
168 2637c9cd Christos Stathis
        if (iter.hasNext()) {
169 2637c9cd Christos Stathis
            final Folder f = iter.next();
170 2637c9cd Christos Stathis
            trashFolder(f, callback);
171 2637c9cd Christos Stathis
        }
172 2637c9cd Christos Stathis
        else  if (callback != null) {
173 2637c9cd Christos Stathis
            callback.execute();
174 81918908 Christos Stathis
        }
175 81918908 Christos Stathis
    }
176 a57faaf0 Christos Stathis
}