Show display name in FolderPropertiesDialog
[pithos-web-client] / src / gr / grnet / pithos / web / client / Toolbar.java
1 /*
2  * Copyright 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
36 package gr.grnet.pithos.web.client;
37
38 import gr.grnet.pithos.web.client.commands.NewFolderCommand;
39 import gr.grnet.pithos.web.client.commands.PropertiesCommand;
40 import gr.grnet.pithos.web.client.foldertree.Folder;
41
42 import com.google.gwt.dom.client.Style.Display;
43 import com.google.gwt.event.dom.client.ClickEvent;
44 import com.google.gwt.event.dom.client.ClickHandler;
45 import com.google.gwt.user.client.Command;
46 import com.google.gwt.user.client.ui.Anchor;
47 import com.google.gwt.user.client.ui.Composite;
48 import com.google.gwt.user.client.ui.FlowPanel;
49
50 public class Toolbar extends Composite {
51
52         Pithos app;
53         
54         Anchor newFolderButton;
55         
56         Anchor shareFolderButton;
57         
58         Anchor refreshButton;
59         
60         private Anchor toolsButton;
61         
62         ToolsMenu menu;
63         
64         public Toolbar(final Pithos _app) {
65                 app = _app;
66         FlowPanel toolbar = new FlowPanel();
67         toolbar.getElement().setId("toolbar");
68         toolbar.addStyleName("clearfix");
69         toolbar.getElement().getStyle().setDisplay(Display.BLOCK);
70
71         newFolderButton = new Anchor("<span class='ico'></span><span class='title'>New folder</span>", true);
72         newFolderButton.getElement().setId("newfolder-button");
73         newFolderButton.addStyleName("pithos-toolbarItem");
74         newFolderButton.setVisible(false);
75         newFolderButton.addClickHandler(new ClickHandler() {
76                         
77                         @Override
78                         public void onClick(ClickEvent event) {
79                                 Folder folder = app.getSelectedTree().getSelection();
80                                 if (folder != null) {
81                                 Boolean[] permissions = folder.getPermissions().get(app.getUserID());
82                                 boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
83                                 
84                                 if (!folder.isInTrash() && canWrite)
85                                         new NewFolderCommand(app, null, folder).execute();
86                                 }
87                         }
88                 });
89         toolbar.add(newFolderButton);
90
91         shareFolderButton = new Anchor("<span class='ico'></span><span class='title'>Share folder</span>", true);
92         shareFolderButton.getElement().setId("sharefolder-button");
93         shareFolderButton.addStyleName("pithos-toolbarItem");
94         shareFolderButton.setVisible(false);
95         shareFolderButton.addClickHandler(new ClickHandler() {
96                         
97                         @Override
98                         public void onClick(ClickEvent event) {
99                                 Folder folder = app.getSelectedTree().getSelection();
100                                 if (folder != null) {
101                                 Boolean[] permissions = folder.getPermissions().get(app.getUserID());
102                                 boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
103                                 boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
104                                 
105                                 if (!folder.isInTrash() && canWrite && isFolderTreeSelected && !folder.isContainer())
106                                         new PropertiesCommand(app, null, folder, PropertiesCommand.PERMISSIONS).execute();
107                                 }
108                         }
109                 });
110         toolbar.add(shareFolderButton);
111
112         refreshButton = new Anchor("<span class='ico'></span><span class='title'>Refresh</span>", true);
113         refreshButton.getElement().setId("refresh-button");
114         refreshButton.addStyleName("pithos-toolbarItem");
115         refreshButton.setVisible(false);
116         refreshButton.addClickHandler(new ClickHandler() {
117                         
118                         @Override
119                         public void onClick(ClickEvent event) {
120                         boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
121                         boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
122                         Folder folder = app.getSelectedTree().getSelection();
123                         
124                         if (folder != null) {
125                                 if (!app.isMySharedSelected()) {
126                                         app.updateFolder(folder, true, new Command() {
127                                                 
128                                                 @Override
129                                                 public void execute() {
130                                                         app.updateStatistics();
131                                                 }
132                                         }, true);
133                                 }
134                                 else
135                                         app.updateSharedFolder(folder, true);
136                                         
137                         }
138                         }
139         });
140         toolbar.add(refreshButton);
141
142         toolsButton = new Anchor("<span class='ico'></span><span class='title'>More...</span>", true);
143         toolsButton.getElement().setId("tools-button");
144         toolsButton.addStyleName("pithos-toolbarItem");
145         toolsButton.setVisible(false);
146         toolsButton.addClickHandler(new ClickHandler() {
147                         
148                         @Override
149                         public void onClick(ClickEvent event) {
150                 if (!menu.isEmpty()) {
151                             menu.setPopupPosition(event.getClientX(), event.getClientY());
152                             menu.show();
153                 }
154                         }
155                 });
156         toolbar.add(toolsButton);
157         
158         initWidget(toolbar);
159         }
160         
161         public void showRelevantButtons() {
162                 TreeView selectedTree = app.getSelectedTree();
163                 if (selectedTree != null) {
164                         final Folder folder = app.getSelectedTree().getSelection();
165                         if (folder != null) {
166                                 app.scheduleFolderHeadCommand(folder, new Command() {
167                                         
168                                         @Override
169                                         public void execute() {
170                                         Boolean[] permissions = folder.getPermissions().get(app.getUserID());
171                                         boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
172                                         boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
173                                         boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
174                                         
175                                         refreshButton.setVisible(true);
176                                         
177                                         if (!folder.isInTrash() && canWrite) {
178                                                 if (isFolderTreeSelected || otherSharedTreeSelected)
179                                                         newFolderButton.setVisible(true);
180                                                 else
181                                                         newFolderButton.setVisible(false);
182                                                 if (isFolderTreeSelected && !folder.isContainer())
183                                                         shareFolderButton.setVisible(true);
184                                                 else
185                                                         shareFolderButton.setVisible(false);
186                                         }
187                                         else {
188                                                 newFolderButton.setVisible(false);
189                                                 shareFolderButton.setVisible(false);
190                                         }
191                                         }
192                                 });
193                         }
194                         else {
195                                 newFolderButton.setVisible(false);
196                                 shareFolderButton.setVisible(false);
197                                 refreshButton.setVisible(false);
198                         }
199                 }
200                 else {
201                         newFolderButton.setVisible(false);
202                         shareFolderButton.setVisible(false);
203                         refreshButton.setVisible(false);
204                 }
205
206                 if (selectedTree != null) {
207                 menu = new ToolsMenu(app, Pithos.images, selectedTree, selectedTree.getSelection(), app.getFileList().getSelectedFiles());
208                 if (!menu.isEmpty())
209                         toolsButton.setVisible(true);
210                 else
211                         toolsButton.setVisible(false);
212                 }
213     }
214 }