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.FilePropertiesDialog;
23 import gr.ebs.gss.client.FilesPropertiesDialog;
24 import gr.ebs.gss.client.FolderPropertiesDialog;
25 import gr.ebs.gss.client.GSS;
26 import gr.ebs.gss.client.FileMenu.Images;
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.MultipleHeadCommand;
31 import gr.ebs.gss.client.rest.RestException;
32 import gr.ebs.gss.client.rest.MultipleGetCommand.Cached;
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;
76 public void execute() {
77 containerPanel.hide();
78 if (GSS.get().getCurrentSelection() instanceof FolderResource) {
79 GetCommand<FolderResource> eg = new GetCommand<FolderResource>(FolderResource.class, ((FolderResource) GSS.get().getCurrentSelection()).getUri(),((FolderResource) GSS.get().getCurrentSelection())) {
82 public void onComplete() {
83 GSS.get().setCurrentSelection(getResult());
88 public void onError(Throwable t) {
93 DeferredCommand.addCommand(eg);
95 else if (GSS.get().getCurrentSelection() instanceof FileResource) {
96 final String path = ((FileResource) GSS.get().getCurrentSelection()).getUri();
97 // Needed because firefox caches head requests.
98 HeadCommand<FileResource> eg = new HeadCommand<FileResource>(FileResource.class, path+"?"+Math.random(), null ) {
101 public void onComplete() {
102 FileResource res = getResult();
103 GSS.get().setCurrentSelection(res);
108 public void onError(Throwable t) {
109 if(t instanceof RestException)
110 GSS.get().displayError("Unable to retrieve file details:"+((RestException)t).getHttpStatusText());
114 DeferredCommand.addCommand(eg);
116 else if (GSS.get().getCurrentSelection() instanceof List) {
117 List<String> paths = new ArrayList<String>();
118 for (FileResource fr : (List<FileResource>) GSS.get().getCurrentSelection())
119 paths.add(fr.getUri()+"?"+Math.random());
120 Cached[] cached = new Cached[paths.size()];
122 for (FileResource fr : (List<FileResource>) GSS.get().getCurrentSelection()){
123 Cached c = new Cached();
124 c.uri=fr.getUri()+"?"+Math.random();
129 MultipleHeadCommand<FileResource> gv = new MultipleHeadCommand<FileResource>(FileResource.class, paths.toArray(new String[] {}),cached) {
132 public void onComplete() {
133 List<FileResource> res = getResult();
134 GSS.get().setCurrentSelection(res);
135 FilesPropertiesDialog dlg = new FilesPropertiesDialog(res);
136 dlg.selectTab(tabToShow);
141 public void onError(Throwable t) {
143 GSS.get().displayError("Unable to fetch files details");
147 public void onError(String p, Throwable throwable) {
148 GWT.log("Path:" + p, throwable);
151 DeferredCommand.addCommand(gv);
155 private void initialize(){
158 DeferredCommand.addCommand(new IncrementalCommand() {
160 public boolean execute() {
161 boolean res = canContinue();
163 displayProperties(newImages);
173 private boolean canContinue() {
174 if (groups == null || versions == null)
180 * Display the appropriate Properties dialog, according to the selected
181 * object in the application.
183 * @param propImages the images of all the possible properties dialogs
185 void displayProperties(final Images propImages) {
186 if (GSS.get().getCurrentSelection() instanceof FolderResource) {
187 FolderPropertiesDialog dlg = new FolderPropertiesDialog(propImages, false, groups);
188 dlg.selectTab(tabToShow);
190 } else if (GSS.get().getCurrentSelection() instanceof FileResource) {
191 FilePropertiesDialog dlg = new FilePropertiesDialog(propImages, groups, versions);
192 dlg.selectTab(tabToShow);
197 private void getGroups() {
198 GetCommand<GroupsResource> gg = new GetCommand<GroupsResource>(GroupsResource.class, GSS.get().getCurrentUserResource().getGroupsPath(), null) {
201 public void onComplete() {
202 GroupsResource res = getResult();
203 MultipleGetCommand<GroupResource> ga = new MultipleGetCommand<GroupResource>(GroupResource.class, res.getGroupPaths().toArray(new String[] {}), null) {
206 public void onComplete() {
207 List<GroupResource> groupList = getResult();
212 public void onError(Throwable t) {
214 GSS.get().displayError("Unable to fetch groups");
215 groups = new ArrayList<GroupResource>();
219 public void onError(String p, Throwable throwable) {
220 GWT.log("Path:" + p, throwable);
223 DeferredCommand.addCommand(ga);
227 public void onError(Throwable t) {
229 GSS.get().displayError("Unable to fetch groups");
230 groups = new ArrayList<GroupResource>();
233 DeferredCommand.addCommand(gg);
236 private void getVersions() {
237 if (GSS.get().getCurrentSelection() instanceof FileResource) {
238 FileResource afile = (FileResource) GSS.get().getCurrentSelection();
239 GWT.log("File is versioned:" + afile.isVersioned(), null);
240 if (afile.isVersioned()) {
241 List<String> paths = new ArrayList<String>();
242 for (int i = 1; i <= afile.getVersion(); i++)
243 paths.add(afile.getUri() + "?version=" + i);
244 MultipleHeadCommand<FileResource> gv = new MultipleHeadCommand<FileResource>(FileResource.class, paths.toArray(new String[] {}), null) {
247 public void onComplete() {
248 versions = getResult();
252 public void onError(Throwable t) {
254 GSS.get().displayError("Unable to fetch versions");
255 versions = new ArrayList<FileResource>();
259 public void onError(String p, Throwable throwable) {
260 GWT.log("Path:" + p, throwable);
263 DeferredCommand.addCommand(gv);
265 versions = new ArrayList<FileResource>();
267 versions = new ArrayList<FileResource>();