2 * Copyright 2008, 2009 Electronic Business Systems Ltd.
4 * This file is part of GSS.
6 * GSS is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GSS is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GSS. If not, see <http://www.gnu.org/licenses/>.
19 package gr.ebs.gss.client.commands;
21 import gr.ebs.gss.client.FileMenu;
22 import gr.ebs.gss.client.FileMenu.Images;
23 import gr.ebs.gss.client.FilePropertiesDialog;
24 import gr.ebs.gss.client.FilesPropertiesDialog;
25 import gr.ebs.gss.client.FolderPropertiesDialog;
26 import gr.ebs.gss.client.GSS;
27 import gr.ebs.gss.client.rest.GetCommand;
28 import gr.ebs.gss.client.rest.HeadCommand;
29 import gr.ebs.gss.client.rest.MultipleGetCommand;
30 import gr.ebs.gss.client.rest.MultipleGetCommand.Cached;
31 import gr.ebs.gss.client.rest.MultipleHeadCommand;
32 import gr.ebs.gss.client.rest.RestException;
33 import gr.ebs.gss.client.rest.resource.FileResource;
34 import gr.ebs.gss.client.rest.resource.FolderResource;
35 import gr.ebs.gss.client.rest.resource.GroupResource;
36 import gr.ebs.gss.client.rest.resource.GroupsResource;
38 import java.util.ArrayList;
39 import java.util.List;
41 import com.google.gwt.core.client.GWT;
42 import com.google.gwt.user.client.Command;
43 import com.google.gwt.user.client.DeferredCommand;
44 import com.google.gwt.user.client.IncrementalCommand;
45 import com.google.gwt.user.client.ui.PopupPanel;
48 * The command that displays the appropriate Properties dialog, according to the
49 * selected object in the application.
53 public class PropertiesCommand implements Command {
55 final FileMenu.Images newImages;
57 private PopupPanel containerPanel;
59 private List<GroupResource> groups = null;
61 private List<FileResource> versions = null;
63 private int tabToShow = 0;
66 * @param _containerPanel
67 * @param _newImages the images of all the possible delete dialogs
68 * @param _tab the tab to switch to
70 public PropertiesCommand(PopupPanel _containerPanel, final FileMenu.Images _newImages, int _tab) {
71 containerPanel = _containerPanel;
72 newImages = _newImages;
77 public void execute() {
78 containerPanel.hide();
79 if (GSS.get().getCurrentSelection() instanceof FolderResource) {
80 GetCommand<FolderResource> eg = new GetCommand<FolderResource>(FolderResource.class, ((FolderResource) GSS.get().getCurrentSelection()).getUri(),((FolderResource) GSS.get().getCurrentSelection())) {
83 public void onComplete() {
84 GSS.get().setCurrentSelection(getResult());
89 public void onError(Throwable t) {
94 DeferredCommand.addCommand(eg);
96 else if (GSS.get().getCurrentSelection() instanceof FileResource) {
97 final String path = ((FileResource) GSS.get().getCurrentSelection()).getUri();
98 // Needed because firefox caches head requests.
99 HeadCommand<FileResource> eg = new HeadCommand<FileResource>(FileResource.class, path+"?"+Math.random(), null ) {
102 public void onComplete() {
103 FileResource res = getResult();
104 GSS.get().setCurrentSelection(res);
109 public void onError(Throwable t) {
110 if(t instanceof RestException)
111 GSS.get().displayError("Unable to retrieve file details:"+((RestException)t).getHttpStatusText());
115 DeferredCommand.addCommand(eg);
117 else if (GSS.get().getCurrentSelection() instanceof List) {
118 List<String> paths = new ArrayList<String>();
119 for (FileResource fr : (List<FileResource>) GSS.get().getCurrentSelection())
120 paths.add(fr.getUri()+"?"+Math.random());
121 Cached[] cached = new Cached[paths.size()];
123 for (FileResource fr : (List<FileResource>) GSS.get().getCurrentSelection()){
124 Cached c = new Cached();
125 c.uri=fr.getUri()+"?"+Math.random();
130 MultipleHeadCommand<FileResource> gv = new MultipleHeadCommand<FileResource>(FileResource.class, paths.toArray(new String[] {}),cached) {
133 public void onComplete() {
134 List<FileResource> res = getResult();
135 GSS.get().setCurrentSelection(res);
136 FilesPropertiesDialog dlg = new FilesPropertiesDialog(res);
137 dlg.selectTab(tabToShow);
142 public void onError(Throwable t) {
144 GSS.get().displayError("Unable to fetch files details");
148 public void onError(String p, Throwable throwable) {
149 GWT.log("Path:" + p, throwable);
152 DeferredCommand.addCommand(gv);
156 private void initialize(){
159 DeferredCommand.addCommand(new IncrementalCommand() {
162 public boolean execute() {
163 boolean res = canContinue();
165 displayProperties(newImages);
175 private boolean canContinue() {
176 if (groups == null || versions == null)
182 * Display the appropriate Properties dialog, according to the selected
183 * object in the application.
185 * @param propImages the images of all the possible properties dialogs
187 void displayProperties(final Images propImages) {
188 if (GSS.get().getCurrentSelection() instanceof FolderResource) {
189 FolderPropertiesDialog dlg = new FolderPropertiesDialog(propImages, false, groups);
190 dlg.selectTab(tabToShow);
192 } else if (GSS.get().getCurrentSelection() instanceof FileResource) {
193 FilePropertiesDialog dlg = new FilePropertiesDialog(propImages, groups, versions);
194 dlg.selectTab(tabToShow);
199 private void getGroups() {
200 GetCommand<GroupsResource> gg = new GetCommand<GroupsResource>(GroupsResource.class, GSS.get().getCurrentUserResource().getGroupsPath(), null) {
203 public void onComplete() {
204 GroupsResource res = getResult();
205 MultipleGetCommand<GroupResource> ga = new MultipleGetCommand<GroupResource>(GroupResource.class, res.getGroupPaths().toArray(new String[] {}), null) {
208 public void onComplete() {
209 List<GroupResource> groupList = getResult();
214 public void onError(Throwable t) {
216 GSS.get().displayError("Unable to fetch groups");
217 groups = new ArrayList<GroupResource>();
221 public void onError(String p, Throwable throwable) {
222 GWT.log("Path:" + p, throwable);
225 DeferredCommand.addCommand(ga);
229 public void onError(Throwable t) {
231 GSS.get().displayError("Unable to fetch groups");
232 groups = new ArrayList<GroupResource>();
235 DeferredCommand.addCommand(gg);
238 private void getVersions() {
239 if (GSS.get().getCurrentSelection() instanceof FileResource) {
240 FileResource afile = (FileResource) GSS.get().getCurrentSelection();
241 GWT.log("File is versioned:" + afile.isVersioned(), null);
242 if (afile.isVersioned()) {
243 List<String> paths = new ArrayList<String>();
244 for (int i = 1; i <= afile.getVersion(); i++)
245 paths.add(afile.getUri() + "?version=" + i);
246 MultipleHeadCommand<FileResource> gv = new MultipleHeadCommand<FileResource>(FileResource.class, paths.toArray(new String[] {}), null) {
249 public void onComplete() {
250 versions = getResult();
254 public void onError(Throwable t) {
256 GSS.get().displayError("Unable to fetch versions");
257 versions = new ArrayList<FileResource>();
261 public void onError(String p, Throwable throwable) {
262 GWT.log("Path:" + p, throwable);
265 DeferredCommand.addCommand(gv);
267 versions = new ArrayList<FileResource>();
269 versions = new ArrayList<FileResource>();