Implement the /user_catalogs API
[pithos-web-client] / src / gr / grnet / pithos / web / client / commands / PropertiesCommand.java
1 /*
2  * Copyright 2011-2012 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above
13  *      copyright notice, this list of conditions and the following
14  *      disclaimer in the documentation and/or other materials
15  *      provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and
31  * documentation are those of the authors and should not be
32  * interpreted as representing official policies, either expressed
33  * or implied, of GRNET S.A.
34  */
35 package gr.grnet.pithos.web.client.commands;
36
37 import gr.grnet.pithos.web.client.FilePermissionsDialog;
38 import gr.grnet.pithos.web.client.FilePropertiesDialog;
39 import gr.grnet.pithos.web.client.FilePublishDialog;
40 import gr.grnet.pithos.web.client.FileVersionsDialog;
41 import gr.grnet.pithos.web.client.FilesPropertiesDialog;
42 import gr.grnet.pithos.web.client.FolderPermissionsDialog;
43 import gr.grnet.pithos.web.client.FolderPropertiesDialog;
44 import gr.grnet.pithos.web.client.Pithos;
45 import gr.grnet.pithos.web.client.foldertree.File;
46 import gr.grnet.pithos.web.client.foldertree.Folder;
47
48 import java.util.List;
49
50 import com.google.gwt.user.client.Command;
51 import com.google.gwt.user.client.ui.PopupPanel;
52
53 /**
54  * The command that displays the appropriate Properties dialog, according to the
55  * selected object in the application.
56  *
57  */
58 public class PropertiesCommand implements Command {
59
60         public static final int PROPERTIES = 0;
61         public static final int PERMISSIONS = 1;
62         public static final int VERSIONS = 2;
63         public static final int PUBLISH = 3;
64
65         private PopupPanel containerPanel;
66
67         private int tabToShow = 0;
68
69     private Object resource;
70
71     Pithos app;
72
73         /**
74          * @param _containerPanel
75          * @param _tab the tab to switch to
76          */
77         public PropertiesCommand(Pithos _app, PopupPanel _containerPanel, Object _resource, int _tab) {
78                 containerPanel = _containerPanel;
79                 tabToShow = _tab;
80         resource = _resource;
81         app = _app;
82         }
83
84         @Override
85         public void execute() {
86         if (containerPanel != null)
87                     containerPanel.hide();
88
89         if (resource instanceof Folder) {
90             final Folder folder = (Folder) resource;
91             switch (tabToShow) {
92                                 case PROPERTIES:
93                                         FolderPropertiesDialog dlg = new FolderPropertiesDialog(app, false, folder);
94                                         dlg.center();
95                                         break;
96                                 case PERMISSIONS:
97                                         app.scheduleFolderHeadCommand(folder, new Command() {
98                                                 
99                                                 @Override
100                                                 public void execute() {
101                                                         FolderPermissionsDialog dlg1 = new FolderPermissionsDialog(app, folder);
102                                                         dlg1.center();
103                                                 }
104                                         });
105                                         break;
106                                 default:
107                                         break;
108                         }
109         }
110         else if (resource instanceof List) {
111             @SuppressWarnings("unchecked")
112                         List<File> files = (List<File>) resource;
113             if (files.size() > 1) {
114                 FilesPropertiesDialog dlg = new FilesPropertiesDialog(app, files);
115                 dlg.center();
116             }
117             else {
118                                 final File f = files.get(0);
119                 switch (tabToShow) {
120                                         case PROPERTIES:
121                                 app.scheduleFileHeadCommand(f, new Command() {
122                                                         
123                                                         @Override
124                                                         public void execute() {
125                                                                 FilePropertiesDialog dlg = new FilePropertiesDialog(app, f);
126                                                 dlg.center();
127                                                         }
128                                                 });
129                                                 break;
130                                         case PERMISSIONS:
131                                 app.scheduleFileHeadCommand(f, new Command() {
132                                                         
133                                                         @Override
134                                                         public void execute() {
135                                                                 FilePermissionsDialog dlg = new FilePermissionsDialog(app, f);
136                                                                 dlg.center();
137                                                         }
138                                                 });
139                                                 break;
140                                         case VERSIONS:
141                                 FileVersionsDialog dlg2 = new FileVersionsDialog(app, files.get(0));
142                                 dlg2.center();
143                                                 break;
144                                         case PUBLISH:
145                                 app.scheduleFileHeadCommand(f, new Command() {
146                                                         
147                                                         @Override
148                                                         public void execute() {
149                                                                 FilePublishDialog dlg = new FilePublishDialog(app, f);
150                                                                 dlg.center();
151                                                         }
152                                                 });
153                                                 break;
154                                         default:
155                                                 break;
156                                 }
157             }
158         }
159         }
160 }