Implemented multiple files properties general dialog
[pithos] / web_client / src / gr / grnet / pithos / web / client / FilesPropertiesDialog.java
index 006cd13..80954f6 100644 (file)
@@ -1,24 +1,42 @@
 /*\r
- * Copyright 2007, 2008, 2009 Electronic Business Systems Ltd.\r
+ * Copyright 2011 GRNET S.A. All rights reserved.\r
  *\r
- * This file is part of GSS.\r
+ * Redistribution and use in source and binary forms, with or\r
+ * without modification, are permitted provided that the following\r
+ * conditions are met:\r
  *\r
- * GSS is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
+ *   1. Redistributions of source code must retain the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer.\r
  *\r
- * GSS is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
+ *   2. Redistributions in binary form must reproduce the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer in the documentation and/or other materials\r
+ *      provided with the distribution.\r
  *\r
- * You should have received a copy of the GNU General Public License\r
- * along with GSS.  If not, see <http://www.gnu.org/licenses/>.\r
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR\r
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\r
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * The views and conclusions contained in the software and\r
+ * documentation are those of the authors and should not be\r
+ * interpreted as representing official policies, either expressed\r
+ * or implied, of GRNET S.A.\r
  */\r
 package gr.grnet.pithos.web.client;\r
 \r
 import gr.grnet.pithos.web.client.components.TristateCheckBox;\r
+import gr.grnet.pithos.web.client.foldertree.File;\r
+import gr.grnet.pithos.web.client.foldertree.Folder;\r
 import gr.grnet.pithos.web.client.rest.MultiplePostCommand;\r
 import gr.grnet.pithos.web.client.rest.RestException;\r
 import gr.grnet.pithos.web.client.rest.resource.FileResource;\r
@@ -52,13 +70,12 @@ import com.google.gwt.user.client.ui.VerticalPanel;
 /**\r
  * The 'Multiple file properties' dialog box implementation.\r
  *\r
- * @author droutsis\r
  */\r
 public class FilesPropertiesDialog extends AbstractPropertiesDialog {\r
 \r
-       private final TristateCheckBox versionedCheck;\r
+//     private final TristateCheckBox versionedCheck;\r
 \r
-       private final List<FileResource> files;\r
+       private final List<File> files;\r
 \r
        private Boolean initialVersioned;\r
 \r
@@ -68,18 +85,21 @@ public class FilesPropertiesDialog extends AbstractPropertiesDialog {
         *\r
         * @param _files\r
         */\r
-       public FilesPropertiesDialog(final List<FileResource> _files) {\r
+       public FilesPropertiesDialog(GSS _app, final List<File> _files) {\r
                super();\r
 \r
                files = _files;\r
-               int versionedNum = 0;\r
-               for (FileResource fr : files)\r
-                       if (fr.isVersioned()) versionedNum++;\r
-               Boolean versioned = null;\r
-               if (versionedNum==0) versioned = false;\r
-               if (versionedNum==files.size()) versioned = true;\r
-               initialVersioned = versioned;\r
-               versionedCheck = new TristateCheckBox(versioned);\r
+//             int versionedNum = 0;\r
+//             for (File fr : files)\r
+//                     if (fr.isVersioned()) versionedNum++;\r
+//             Boolean versioned = null;\r
+//             if (versionedNum == 0)\r
+//            versioned = false;\r
+//             if (versionedNum == files.size())\r
+//            versioned = true;\r
+\r
+//             initialVersioned = versioned;\r
+//             versionedCheck = new TristateCheckBox(versioned);\r
 \r
                // Set the dialog's caption.\r
                setText("Files properties");\r
@@ -90,69 +110,24 @@ public class FilesPropertiesDialog extends AbstractPropertiesDialog {
                // Inner contains generalPanel and permPanel.\r
                inner = new DecoratedTabPanel();\r
                inner.setAnimationEnabled(true);\r
-               final VerticalPanel generalPanel = new VerticalPanel();\r
-               final HorizontalPanel buttons = new HorizontalPanel();\r
-               final VerticalPanel verPanel = new VerticalPanel();\r
-               final HorizontalPanel vPanel = new HorizontalPanel();\r
 \r
-               inner.add(generalPanel, "General");\r
-               inner.add(verPanel, "Versions");\r
-               inner.selectTab(0);\r
+               inner.add(createGeneralPanel(), "General");\r
 \r
-               final FlexTable generalTable = new FlexTable();\r
-               generalTable.setText(0, 0, String.valueOf(files.size())+" files selected");\r
-               generalTable.setText(1, 0, "Folder");\r
-               generalTable.setText(2, 0, "Tags");\r
-               FileResource firstFile = files.get(0);\r
-               if(firstFile.getFolderName() != null)\r
-                       generalTable.setText(1, 1, firstFile.getFolderName());\r
-               else\r
-                       generalTable.setText(1, 1, "-");\r
+        final VerticalPanel verPanel = new VerticalPanel();\r
 \r
-               // Find if tags are identical\r
-               List<String> tagsList = files.get(0).getTags();\r
-               List<String> tagss;\r
-               for (int i=1; i<files.size(); i++) {\r
-                       tagss = files.get(i).getTags();\r
-                       if (tagsList.size() != tagss.size() || !tagsList.containsAll(tagss)) {\r
-                               tagsList = null;\r
-                               break;\r
-                       }\r
-               }\r
-               // Get the tags.\r
-               StringBuffer tagsBuffer = new StringBuffer();\r
-               if (tagsList==null)\r
-                       tagsBuffer.append(MULTIPLE_VALUES_TEXT);\r
-               else {\r
-                       Iterator i = tagsList.iterator();\r
-                       while (i.hasNext()) {\r
-                               String tag = (String) i.next();\r
-                               tagsBuffer.append(tag).append(", ");\r
-                       }\r
-                       if (tagsBuffer.length() > 1)\r
-                               tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1);\r
-               }\r
-               initialTagText = tagsBuffer.toString();\r
-               tags.setText(initialTagText);\r
-               tags.addFocusHandler(new FocusHandler() {\r
-                       @Override\r
-                       public void onFocus(FocusEvent event) {\r
-                               if (MULTIPLE_VALUES_TEXT.equals(tags.getText()))\r
-                                       tags.setText("");\r
-                       }\r
-               }\r
-               );\r
+//        final HorizontalPanel vPanel = new HorizontalPanel();\r
+//        vPanel.setSpacing(8);\r
+//        vPanel.addStyleName("pithos-TabPanelBottom");\r
+//        vPanel.add(new Label("Versioned"));\r
+//        vPanel.add(versionedCheck);\r
+//\r
+//        verPanel.add(vPanel);\r
 \r
-               generalTable.setWidget(2, 1, tags);\r
-               generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");\r
-               generalTable.getFlexCellFormatter().setColSpan(0, 0, 2);\r
-               generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");\r
-               generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");\r
-               generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");\r
-               generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");\r
-               generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");\r
-               generalTable.setCellSpacing(4);\r
+               inner.add(verPanel, "Versions");\r
+               inner.selectTab(0);\r
+        outer.add(inner);\r
 \r
+        final HorizontalPanel buttons = new HorizontalPanel();\r
                // Create the 'OK' button, along with a listener that hides the dialog\r
                // when the button is clicked.\r
                final Button ok = new Button("OK", new ClickHandler() {\r
@@ -176,17 +151,81 @@ public class FilesPropertiesDialog extends AbstractPropertiesDialog {
                buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);\r
                buttons.setSpacing(8);\r
                buttons.addStyleName("pithos-TabPanelBottom");\r
+               outer.add(buttons);\r
+               outer.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);\r
+               outer.addStyleName("pithos-TabPanelBottom");\r
 \r
-               generalPanel.add(generalTable);\r
+               focusPanel.setFocus(true);\r
+               setWidget(outer);\r
+       }\r
 \r
-               // Asynchronously retrieve the tags defined by this user.\r
-               DeferredCommand.addCommand(new Command() {\r
+    private VerticalPanel createGeneralPanel() {\r
+        VerticalPanel generalPanel = new VerticalPanel();\r
 \r
-                       @Override\r
-                       public void execute() {\r
-                               updateTags();\r
-                       }\r
-               });\r
+        final FlexTable generalTable = new FlexTable();\r
+        generalTable.setText(0, 0, String.valueOf(files.size())+" files selected");\r
+        generalTable.setText(1, 0, "Folder");\r
+        generalTable.setText(2, 0, "Tags");\r
+        Folder parent = files.get(0).getParent();\r
+        if(parent != null)\r
+            generalTable.setText(1, 1, parent.getName());\r
+        else\r
+            generalTable.setText(1, 1, "-");\r
+\r
+               // Find if tags are identical\r
+//             List<String> tagsList = files.get(0).getTags();\r
+//             List<String> tagss;\r
+//             for (int i=1; i<files.size(); i++) {\r
+//                     tagss = files.get(i).getTags();\r
+//                     if (tagsList.size() != tagss.size() || !tagsList.containsAll(tagss)) {\r
+//                             tagsList = null;\r
+//                             break;\r
+//                     }\r
+//             }\r
+//             // Get the tags.\r
+//             StringBuffer tagsBuffer = new StringBuffer();\r
+//             if (tagsList==null)\r
+//                     tagsBuffer.append(MULTIPLE_VALUES_TEXT);\r
+//             else {\r
+//                     Iterator i = tagsList.iterator();\r
+//                     while (i.hasNext()) {\r
+//                             String tag = (String) i.next();\r
+//                             tagsBuffer.append(tag).append(", ");\r
+//                     }\r
+//                     if (tagsBuffer.length() > 1)\r
+//                             tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1);\r
+//             }\r
+//             initialTagText = tagsBuffer.toString();\r
+//             tags.setText(initialTagText);\r
+//             tags.addFocusHandler(new FocusHandler() {\r
+//                     @Override\r
+//                     public void onFocus(FocusEvent event) {\r
+//                             if (MULTIPLE_VALUES_TEXT.equals(tags.getText()))\r
+//                                     tags.setText("");\r
+//                     }\r
+//             }\r
+//             );\r
+//\r
+//             generalTable.setWidget(2, 1, tags);\r
+               generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");\r
+               generalTable.getFlexCellFormatter().setColSpan(0, 0, 2);\r
+               generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");\r
+               generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");\r
+               generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");\r
+               generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");\r
+               generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");\r
+               generalTable.setCellSpacing(4);\r
+\r
+        generalPanel.add(generalTable);\r
+\r
+               // Asynchronously retrieve the tags defined by this user.\r
+//             DeferredCommand.addCommand(new Command() {\r
+//\r
+//                     @Override\r
+//                     public void execute() {\r
+//                             updateTags();\r
+//                     }\r
+//             });\r
 \r
                DisclosurePanel allTags = new DisclosurePanel("All tags");\r
                allTagsContent = new FlowPanel();\r
@@ -194,23 +233,8 @@ public class FilesPropertiesDialog extends AbstractPropertiesDialog {
                generalPanel.add(allTags);\r
                generalPanel.setSpacing(4);\r
 \r
-\r
-               vPanel.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);\r
-               vPanel.setSpacing(8);\r
-               vPanel.addStyleName("pithos-TabPanelBottom");\r
-               vPanel.add(new Label("Versioned"));\r
-\r
-               vPanel.add(versionedCheck);\r
-               verPanel.add(vPanel);\r
-               outer.add(inner);\r
-               outer.add(buttons);\r
-               outer.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);\r
-               outer.addStyleName("pithos-TabPanelBottom");\r
-\r
-               focusPanel.setFocus(true);\r
-               setWidget(outer);\r
-       }\r
-\r
+        return generalPanel;\r
+    }\r
 \r
        /**\r
         * Accepts any change and updates the file\r
@@ -218,59 +242,57 @@ public class FilesPropertiesDialog extends AbstractPropertiesDialog {
         */\r
        @Override\r
        protected void accept() {\r
-               JSONObject json = new JSONObject();\r
-               if ( versionedCheck.getState()!=null && !versionedCheck.getState().equals(initialVersioned) )\r
-                               json.put("versioned", JSONBoolean.getInstance(versionedCheck.getState()));\r
-\r
-               JSONArray taga = new JSONArray();\r
-               int i = 0;\r
-               String tagText = tags.getText();\r
-               if (!MULTIPLE_VALUES_TEXT.equals(tagText) && !initialTagText.equals(tagText)) {\r
-                       String[] tagset = tagText.split(",");\r
-                       for (String t : tagset) {\r
-                               JSONString to = new JSONString(t);\r
-                               taga.set(i, to);\r
-                               i++;\r
-                       }\r
-                       json.put("tags", taga);\r
-               }\r
-               String jsonString = json.toString();\r
-               if(jsonString.equals("{}")){\r
-                       GWT.log("NO CHANGES", null);\r
-                       return;\r
-               }\r
-               final List<String> fileIds = new ArrayList<String>();\r
-               for(FileResource f : files)\r
-                       fileIds.add(f.getUri()+"?update=");\r
-               MultiplePostCommand rt = new MultiplePostCommand(fileIds.toArray(new String[0]), jsonString, 200){\r
-\r
-                       @Override\r
-                       public void onComplete() {\r
-                               GSS.get().getTreeView().refreshCurrentNode(false);\r
-                       }\r
-\r
-                       @Override\r
-                       public void onError(String p, Throwable t) {\r
-                               GWT.log("", t);\r
-                               if(t instanceof RestException){\r
-                                       int statusCode = ((RestException)t).getHttpStatusCode();\r
-                                       if(statusCode == 405)\r
-                                               GSS.get().displayError("You don't have the necessary permissions");\r
-                                       else if(statusCode == 404)\r
-                                               GSS.get().displayError("File does not exist");\r
-                                       else if(statusCode == 409)\r
-                                               GSS.get().displayError("A file with the same name already exists");\r
-                                       else if(statusCode == 413)\r
-                                               GSS.get().displayError("Your quota has been exceeded");\r
-                                       else\r
-                                               GSS.get().displayError("Unable to modify file::"+((RestException)t).getHttpStatusText());\r
-                               }\r
-                               else\r
-                                       GSS.get().displayError("System error modifying file:"+t.getMessage());\r
-                       }\r
-               };\r
-               DeferredCommand.addCommand(rt);\r
+//             JSONObject json = new JSONObject();\r
+//             if ( versionedCheck.getState()!=null && !versionedCheck.getState().equals(initialVersioned) )\r
+//                             json.put("versioned", JSONBoolean.getInstance(versionedCheck.getState()));\r
+//\r
+//             JSONArray taga = new JSONArray();\r
+//             int i = 0;\r
+//             String tagText = tags.getText();\r
+//             if (!MULTIPLE_VALUES_TEXT.equals(tagText) && !initialTagText.equals(tagText)) {\r
+//                     String[] tagset = tagText.split(",");\r
+//                     for (String t : tagset) {\r
+//                             JSONString to = new JSONString(t);\r
+//                             taga.set(i, to);\r
+//                             i++;\r
+//                     }\r
+//                     json.put("tags", taga);\r
+//             }\r
+//             String jsonString = json.toString();\r
+//             if(jsonString.equals("{}")){\r
+//                     GWT.log("NO CHANGES", null);\r
+//                     return;\r
+//             }\r
+//             final List<String> fileIds = new ArrayList<String>();\r
+//             for(FileResource f : files)\r
+//                     fileIds.add(f.getUri()+"?update=");\r
+//             MultiplePostCommand rt = new MultiplePostCommand(fileIds.toArray(new String[0]), jsonString, 200){\r
+//\r
+//                     @Override\r
+//                     public void onComplete() {\r
+//                             GSS.get().getTreeView().refreshCurrentNode(false);\r
+//                     }\r
+//\r
+//                     @Override\r
+//                     public void onError(String p, Throwable t) {\r
+//                             GWT.log("", t);\r
+//                             if(t instanceof RestException){\r
+//                                     int statusCode = ((RestException)t).getHttpStatusCode();\r
+//                                     if(statusCode == 405)\r
+//                                             GSS.get().displayError("You don't have the necessary permissions");\r
+//                                     else if(statusCode == 404)\r
+//                                             GSS.get().displayError("File does not exist");\r
+//                                     else if(statusCode == 409)\r
+//                                             GSS.get().displayError("A file with the same name already exists");\r
+//                                     else if(statusCode == 413)\r
+//                                             GSS.get().displayError("Your quota has been exceeded");\r
+//                                     else\r
+//                                             GSS.get().displayError("Unable to modify file::"+((RestException)t).getHttpStatusText());\r
+//                             }\r
+//                             else\r
+//                                     GSS.get().displayError("System error modifying file:"+t.getMessage());\r
+//                     }\r
+//             };\r
+//             DeferredCommand.addCommand(rt);\r
        }\r
-\r
-\r
 }\r