From 473ad3636b5b22480a045065ca113f390c2d3a11 Mon Sep 17 00:00:00 2001 From: Antony Chazapis Date: Wed, 23 Nov 2011 16:46:58 +0200 Subject: [PATCH] Move web_client to another repository. --- web_client/.gitignore | 11 - web_client/build.xml | 113 -- .../gr/grnet/pithos/resources/advancedsettings.png | Bin 790 -> 0 bytes .../src/gr/grnet/pithos/resources/ajax-loader.gif | Bin 3208 -> 0 bytes web_client/src/gr/grnet/pithos/resources/asc.png | Bin 344 -> 0 bytes web_client/src/gr/grnet/pithos/resources/bell.png | Bin 567 -> 0 bytes web_client/src/gr/grnet/pithos/resources/blank.gif | Bin 48 -> 0 bytes .../gr/grnet/pithos/resources/border_remove.png | Bin 302 -> 0 bytes web_client/src/gr/grnet/pithos/resources/bug.png | Bin 1010 -> 0 bytes .../src/gr/grnet/pithos/resources/db_update.png | Bin 273 -> 0 bytes web_client/src/gr/grnet/pithos/resources/demo.png | Bin 379 -> 0 bytes web_client/src/gr/grnet/pithos/resources/desc.png | Bin 348 -> 0 bytes .../src/gr/grnet/pithos/resources/doc_versions.png | Bin 549 -> 0 bytes .../src/gr/grnet/pithos/resources/document.png | Bin 1014 -> 0 bytes .../src/gr/grnet/pithos/resources/edit_add.png | Bin 502 -> 0 bytes .../gr/grnet/pithos/resources/edit_group_22.png | Bin 1784 -> 0 bytes .../src/gr/grnet/pithos/resources/edit_user.png | Bin 955 -> 0 bytes .../src/gr/grnet/pithos/resources/editcopy.png | Bin 389 -> 0 bytes .../src/gr/grnet/pithos/resources/editcut.png | Bin 727 -> 0 bytes .../src/gr/grnet/pithos/resources/editdelete.png | Bin 840 -> 0 bytes .../src/gr/grnet/pithos/resources/editpaste.png | Bin 490 -> 0 bytes web_client/src/gr/grnet/pithos/resources/exit.png | Bin 2111 -> 0 bytes .../src/gr/grnet/pithos/resources/folder22.png | Bin 860 -> 0 bytes .../src/gr/grnet/pithos/resources/folder_green.png | Bin 592 -> 0 bytes .../src/gr/grnet/pithos/resources/folder_inbox.png | Bin 532 -> 0 bytes .../src/gr/grnet/pithos/resources/folder_new.png | Bin 649 -> 0 bytes .../gr/grnet/pithos/resources/folder_outbox.png | Bin 528 -> 0 bytes .../src/gr/grnet/pithos/resources/folder_user.png | Bin 730 -> 0 bytes .../gr/grnet/pithos/resources/folder_yellow.png | Bin 556 -> 0 bytes .../src/gr/grnet/pithos/resources/groups22.png | Bin 1294 -> 0 bytes .../src/gr/grnet/pithos/resources/home22.png | Bin 898 -> 0 bytes web_client/src/gr/grnet/pithos/resources/info.png | Bin 850 -> 0 bytes .../src/gr/grnet/pithos/resources/internet.png | Bin 902 -> 0 bytes .../src/gr/grnet/pithos/resources/khelpcenter.png | Bin 916 -> 0 bytes .../src/gr/grnet/pithos/resources/linewidth.png | Bin 511 -> 0 bytes web_client/src/gr/grnet/pithos/resources/lock.png | Bin 963 -> 0 bytes .../grnet/pithos/resources/messagebox_critical.png | Bin 1591 -> 0 bytes .../gr/grnet/pithos/resources/messagebox_info.png | Bin 2362 -> 0 bytes .../grnet/pithos/resources/messagebox_warning.png | Bin 1692 -> 0 bytes .../grnet/pithos/resources/mimetypes/acroread.png | Bin 690 -> 0 bytes .../pithos/resources/mimetypes/acroread_shared.png | Bin 851 -> 0 bytes .../gr/grnet/pithos/resources/mimetypes/ark2.png | Bin 1050 -> 0 bytes .../pithos/resources/mimetypes/ark2_shared.png | Bin 934 -> 0 bytes .../grnet/pithos/resources/mimetypes/document.png | Bin 357 -> 0 bytes .../pithos/resources/mimetypes/document_shared.png | Bin 667 -> 0 bytes .../gr/grnet/pithos/resources/mimetypes/html.png | Bin 671 -> 0 bytes .../pithos/resources/mimetypes/html_shared.png | Bin 829 -> 0 bytes .../gr/grnet/pithos/resources/mimetypes/image.png | Bin 651 -> 0 bytes .../pithos/resources/mimetypes/image_shared.png | Bin 808 -> 0 bytes .../pithos/resources/mimetypes/kcmfontinst.png | Bin 621 -> 0 bytes .../resources/mimetypes/kcmfontinst_shared.png | Bin 782 -> 0 bytes .../grnet/pithos/resources/mimetypes/knotify.png | Bin 527 -> 0 bytes .../pithos/resources/mimetypes/knotify_shared.png | Bin 832 -> 0 bytes .../pithos/resources/mimetypes/kpresenter_kpr.png | Bin 657 -> 0 bytes .../resources/mimetypes/kpresenter_kpr_shared.png | Bin 785 -> 0 bytes .../gr/grnet/pithos/resources/mimetypes/log.png | Bin 588 -> 0 bytes .../pithos/resources/mimetypes/log_shared.png | Bin 774 -> 0 bytes .../gr/grnet/pithos/resources/mimetypes/txt.png | Bin 577 -> 0 bytes .../pithos/resources/mimetypes/txt_shared.png | Bin 689 -> 0 bytes .../gr/grnet/pithos/resources/mimetypes/video2.png | Bin 615 -> 0 bytes .../pithos/resources/mimetypes/video2_shared.png | Bin 861 -> 0 bytes .../src/gr/grnet/pithos/resources/myshared22.png | Bin 1034 -> 0 bytes .../src/gr/grnet/pithos/resources/othersshared.png | Bin 1185 -> 0 bytes .../src/gr/grnet/pithos/resources/pithos2-logo.png | Bin 3576 -> 0 bytes .../src/gr/grnet/pithos/resources/refresh.png | Bin 520 -> 0 bytes .../src/gr/grnet/pithos/resources/refresh2.png | Bin 2697 -> 0 bytes .../src/gr/grnet/pithos/resources/search.png | Bin 1169 -> 0 bytes .../src/gr/grnet/pithos/resources/search_16.png | Bin 1023 -> 0 bytes .../src/gr/grnet/pithos/resources/translate.png | Bin 606 -> 0 bytes web_client/src/gr/grnet/pithos/resources/trash.png | Bin 1117 -> 0 bytes .../src/gr/grnet/pithos/resources/view_text.png | Bin 442 -> 0 bytes web_client/src/gr/grnet/pithos/web/Pithos.gwt.xml | 46 - .../web/client/AbstractPropertiesDialog.java | 122 -- .../src/gr/grnet/pithos/web/client/Clipboard.java | 92 -- .../gr/grnet/pithos/web/client/Configuration.java | 82 -- .../pithos/web/client/Configuration.properties | 42 - .../pithos/web/client/ConfirmationDialog.java | 132 --- .../grnet/pithos/web/client/CredentialsDialog.java | 160 --- .../grnet/pithos/web/client/DeleteFileDialog.java | 195 ---- .../pithos/web/client/DeleteFolderDialog.java | 135 --- .../gr/grnet/pithos/web/client/FeedbackDialog.java | 154 --- .../grnet/pithos/web/client/FileContextMenu.java | 255 ----- .../src/gr/grnet/pithos/web/client/FileList.java | 583 ---------- .../pithos/web/client/FilePropertiesDialog.java | 488 -------- .../grnet/pithos/web/client/FileUploadDialog.java | 289 ----- .../pithos/web/client/FilesPropertiesDialog.java | 161 --- .../grnet/pithos/web/client/FolderContextMenu.java | 155 --- .../pithos/web/client/FolderPropertiesDialog.java | 471 -------- .../gr/grnet/pithos/web/client/Invitations.java | 42 - .../grnet/pithos/web/client/InvitationsDialog.java | 174 --- .../gr/grnet/pithos/web/client/MessagePanel.java | 235 ---- .../pithos/web/client/PermissionsAddDialog.java | 182 --- .../grnet/pithos/web/client/PermissionsList.java | 173 --- .../src/gr/grnet/pithos/web/client/Pithos.java | 1189 -------------------- .../gr/grnet/pithos/web/client/PithosCellTable.css | 87 -- .../pithos/web/client/PithosCellTreeBasic.css | 85 -- .../web/client/PithosSelectionEventManager.java | 536 --------- .../pithos/web/client/SessionExpiredDialog.java | 110 -- .../gr/grnet/pithos/web/client/SharingUsers.java | 50 - .../gr/grnet/pithos/web/client/SortableHeader.java | 131 --- .../gr/grnet/pithos/web/client/StatusPanel.java | 81 -- .../src/gr/grnet/pithos/web/client/ToolsMenu.java | 242 ---- .../src/gr/grnet/pithos/web/client/TopPanel.java | 178 --- .../src/gr/grnet/pithos/web/client/TreeView.java | 7 - .../gr/grnet/pithos/web/client/VersionsList.java | 164 --- .../grnet/pithos/web/client/animation/FadeIn.java | 64 -- .../grnet/pithos/web/client/animation/FadeOut.java | 74 -- .../grnet/pithos/web/client/cellTreeClosedItem.png | Bin 208 -> 0 bytes .../pithos/web/client/cellTreeLoadingBasic.gif | Bin 1737 -> 0 bytes .../grnet/pithos/web/client/cellTreeOpenItem.png | Bin 208 -> 0 bytes .../pithos/web/client/commands/AddUserCommand.java | 109 -- .../pithos/web/client/commands/CopyCommand.java | 74 -- .../web/client/commands/CreateGroupCommand.java | 69 -- .../pithos/web/client/commands/CutCommand.java | 76 -- .../pithos/web/client/commands/DeleteCommand.java | 86 -- .../web/client/commands/DeleteGroupCommand.java | 105 -- .../web/client/commands/EmptyTrashCommand.java | 205 ---- .../web/client/commands/NewFolderCommand.java | 81 -- .../pithos/web/client/commands/PasteCommand.java | 168 --- .../web/client/commands/PropertiesCommand.java | 106 -- .../pithos/web/client/commands/RefreshCommand.java | 67 -- .../web/client/commands/RemoveUserCommand.java | 111 -- .../commands/ResreshOthersSharesCommand.java | 55 - .../web/client/commands/RestoreTrashCommand.java | 242 ---- .../pithos/web/client/commands/ToTrashCommand.java | 244 ---- .../web/client/commands/UploadFileCommand.java | 82 -- .../web/client/components/TristateCheckBox.java | 157 --- .../src/gr/grnet/pithos/web/client/downArrow.png | Bin 274 -> 0 bytes .../web/client/foldertree/AccountResource.java | 273 ----- .../grnet/pithos/web/client/foldertree/File.java | 261 ----- .../pithos/web/client/foldertree/FileVersions.java | 56 - .../grnet/pithos/web/client/foldertree/Folder.java | 339 ------ .../web/client/foldertree/FolderTreeView.java | 180 --- .../web/client/foldertree/FolderTreeViewModel.java | 248 ---- .../web/client/foldertree/ObjectResource.java | 39 - .../pithos/web/client/foldertree/Resource.java | 127 --- .../web/client/foldertree/SubDirResource.java | 39 - .../pithos/web/client/foldertree/Version.java | 22 - .../grnet/pithos/web/client/grouptree/Group.java | 65 -- .../web/client/grouptree/GroupContextMenu.java | 85 -- .../pithos/web/client/grouptree/GroupTreeView.java | 153 --- .../web/client/grouptree/GroupTreeViewModel.java | 241 ---- .../gr/grnet/pithos/web/client/grouptree/User.java | 56 - .../web/client/grouptree/UserContextMenu.java | 74 -- .../web/client/mysharedtree/MysharedTreeView.java | 152 --- .../client/mysharedtree/MysharedTreeViewModel.java | 303 ----- .../othersharedtree/OtherSharedTreeView.java | 155 --- .../othersharedtree/OtherSharedTreeViewModel.java | 446 -------- .../pithos/web/client/rest/DeleteRequest.java | 110 -- .../grnet/pithos/web/client/rest/GetRequest.java | 139 --- .../grnet/pithos/web/client/rest/HeadRequest.java | 139 --- .../grnet/pithos/web/client/rest/PostRequest.java | 118 -- .../grnet/pithos/web/client/rest/PutRequest.java | 142 --- .../pithos/web/client/rest/RestException.java | 78 -- .../web/client/rest/RestRequestCallback.java | 91 -- .../gr/grnet/pithos/web/client/tagtree/Tag.java | 155 --- .../pithos/web/client/tagtree/TagTreeView.java | 116 -- .../web/client/tagtree/TagTreeViewModel.java | 184 --- .../src/gr/grnet/pithos/web/client/upArrow.png | Bin 274 -> 0 bytes .../grnet/pithos/web/public/images/background.png | Bin 405 -> 0 bytes .../gr/grnet/pithos/web/public/images/blank.gif | Bin 43 -> 0 bytes .../gr/grnet/pithos/web/public/images/bottom.png | Bin 815 -> 0 bytes .../web/public/images/cellTreeLoadingBasic.gif | Bin 1737 -> 0 bytes .../grnet/pithos/web/public/images/close-popup.png | Bin 276 -> 0 bytes .../grnet/pithos/web/public/images/close_blue.png | Bin 1788 -> 0 bytes .../grnet/pithos/web/public/images/close_gold.png | Bin 1652 -> 0 bytes .../grnet/pithos/web/public/images/close_green.png | Bin 1525 -> 0 bytes .../grnet/pithos/web/public/images/close_grey.png | Bin 1715 -> 0 bytes .../grnet/pithos/web/public/images/close_red.png | Bin 1525 -> 0 bytes .../pithos/web/public/images/down-arrow-light.png | Bin 272 -> 0 bytes .../web/public/images/down-arrow-lighter.png | Bin 268 -> 0 bytes .../gr/grnet/pithos/web/public/images/header.png | Bin 1139 -> 0 bytes .../gr/grnet/pithos/web/public/images/loading.gif | Bin 2767 -> 0 bytes .../grnet/pithos/web/public/images/next_blue.gif | Bin 733 -> 0 bytes .../grnet/pithos/web/public/images/next_gold.gif | Bin 732 -> 0 bytes .../grnet/pithos/web/public/images/next_green.gif | Bin 732 -> 0 bytes .../grnet/pithos/web/public/images/next_grey.gif | Bin 731 -> 0 bytes .../gr/grnet/pithos/web/public/images/next_red.gif | Bin 732 -> 0 bytes .../grnet/pithos/web/public/images/page_shadow.png | Bin 204 -> 0 bytes .../grnet/pithos/web/public/images/pause_blue.png | Bin 1357 -> 0 bytes .../grnet/pithos/web/public/images/pause_gold.png | Bin 1207 -> 0 bytes .../grnet/pithos/web/public/images/pause_green.png | Bin 1149 -> 0 bytes .../grnet/pithos/web/public/images/pause_grey.png | Bin 1282 -> 0 bytes .../grnet/pithos/web/public/images/pause_red.png | Bin 1133 -> 0 bytes .../grnet/pithos/web/public/images/play_blue.png | Bin 1231 -> 0 bytes .../grnet/pithos/web/public/images/play_gold.png | Bin 1141 -> 0 bytes .../grnet/pithos/web/public/images/play_green.png | Bin 1097 -> 0 bytes .../grnet/pithos/web/public/images/play_grey.png | Bin 1178 -> 0 bytes .../gr/grnet/pithos/web/public/images/play_red.png | Bin 1079 -> 0 bytes .../gr/grnet/pithos/web/public/images/popup-bg.png | Bin 287 -> 0 bytes .../pithos/web/public/images/popup-inner-bg.png | Bin 431 -> 0 bytes .../grnet/pithos/web/public/images/prev_blue.gif | Bin 748 -> 0 bytes .../grnet/pithos/web/public/images/prev_gold.gif | Bin 748 -> 0 bytes .../grnet/pithos/web/public/images/prev_green.gif | Bin 748 -> 0 bytes .../grnet/pithos/web/public/images/prev_grey.gif | Bin 748 -> 0 bytes .../gr/grnet/pithos/web/public/images/prev_red.gif | Bin 748 -> 0 bytes .../pithos/web/public/images/service-logo.png | Bin 8062 -> 0 bytes .../pithos/web/public/images/tristate_checked.gif | Bin 959 -> 0 bytes .../web/public/images/tristate_intermediate.gif | Bin 946 -> 0 bytes .../web/public/images/tristate_unchecked.gif | Bin 943 -> 0 bytes .../gr/grnet/pithos/web/public/images/white50.png | Bin 189 -> 0 bytes .../src/gr/grnet/pithos/web/public/index.html | 51 - .../src/gr/grnet/pithos/web/public/lytebox.css | 93 -- .../src/gr/grnet/pithos/web/public/lytebox.js | 843 -------------- .../src/gr/grnet/pithos/web/public/pithos.css | 514 --------- .../gr/grnet/pithos/web/public/suggest/corner.png | Bin 1140 -> 0 bytes .../gr/grnet/pithos/web/public/suggest/hborder.png | Bin 1384 -> 0 bytes .../public/suggest/ie6/corner_dialog_topleft.png | Bin 195 -> 0 bytes .../public/suggest/ie6/corner_dialog_topright.png | Bin 232 -> 0 bytes .../web/public/suggest/ie6/hborder_blue_shadow.png | Bin 150 -> 0 bytes .../web/public/suggest/ie6/hborder_gray_shadow.png | Bin 153 -> 0 bytes .../web/public/suggest/ie6/vborder_blue_shadow.png | Bin 144 -> 0 bytes .../web/public/suggest/ie6/vborder_gray_shadow.png | Bin 148 -> 0 bytes .../gr/grnet/pithos/web/public/suggest/vborder.png | Bin 190 -> 0 bytes 214 files changed, 15614 deletions(-) delete mode 100644 web_client/.gitignore delete mode 100644 web_client/build.xml delete mode 100644 web_client/src/gr/grnet/pithos/resources/advancedsettings.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/ajax-loader.gif delete mode 100644 web_client/src/gr/grnet/pithos/resources/asc.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/bell.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/blank.gif delete mode 100644 web_client/src/gr/grnet/pithos/resources/border_remove.png delete mode 100755 web_client/src/gr/grnet/pithos/resources/bug.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/db_update.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/demo.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/desc.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/doc_versions.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/document.png delete mode 100755 web_client/src/gr/grnet/pithos/resources/edit_add.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/edit_group_22.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/edit_user.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/editcopy.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/editcut.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/editdelete.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/editpaste.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/exit.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder22.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder_green.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder_inbox.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder_new.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder_outbox.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder_user.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/folder_yellow.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/groups22.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/home22.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/info.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/internet.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/khelpcenter.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/linewidth.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/lock.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/messagebox_critical.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/messagebox_info.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/messagebox_warning.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/acroread.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/acroread_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/ark2.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/ark2_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/document.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/document_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/html.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/html_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/image.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/image_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/kcmfontinst.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/kcmfontinst_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/knotify.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/knotify_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/kpresenter_kpr.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/kpresenter_kpr_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/log.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/log_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/txt.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/txt_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/video2.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/mimetypes/video2_shared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/myshared22.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/othersshared.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/pithos2-logo.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/refresh.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/refresh2.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/search.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/search_16.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/translate.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/trash.png delete mode 100644 web_client/src/gr/grnet/pithos/resources/view_text.png delete mode 100644 web_client/src/gr/grnet/pithos/web/Pithos.gwt.xml delete mode 100644 web_client/src/gr/grnet/pithos/web/client/AbstractPropertiesDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/Clipboard.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/Configuration.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/Configuration.properties delete mode 100644 web_client/src/gr/grnet/pithos/web/client/ConfirmationDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/CredentialsDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/DeleteFileDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FeedbackDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FileList.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FileUploadDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FilesPropertiesDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/Invitations.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/InvitationsDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/MessagePanel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/PermissionsList.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/Pithos.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/PithosCellTable.css delete mode 100644 web_client/src/gr/grnet/pithos/web/client/PithosCellTreeBasic.css delete mode 100644 web_client/src/gr/grnet/pithos/web/client/PithosSelectionEventManager.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/SessionExpiredDialog.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/SharingUsers.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/SortableHeader.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/StatusPanel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/ToolsMenu.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/TopPanel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/TreeView.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/VersionsList.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/animation/FadeIn.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/animation/FadeOut.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/cellTreeClosedItem.png delete mode 100644 web_client/src/gr/grnet/pithos/web/client/cellTreeLoadingBasic.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/client/cellTreeOpenItem.png delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/CopyCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/CreateGroupCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/CutCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/DeleteCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/RefreshCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/ResreshOthersSharesCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/commands/UploadFileCommand.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/components/TristateCheckBox.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/downArrow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/File.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/ObjectResource.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/SubDirResource.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/foldertree/Version.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/grouptree/Group.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/grouptree/GroupContextMenu.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeView.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/grouptree/User.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/grouptree/UserContextMenu.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeView.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeView.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/GetRequest.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/HeadRequest.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/PostRequest.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/PutRequest.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/RestException.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/tagtree/Tag.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeView.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java delete mode 100644 web_client/src/gr/grnet/pithos/web/client/upArrow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/background.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/blank.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/bottom.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/cellTreeLoadingBasic.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/close-popup.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/close_blue.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/close_gold.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/close_green.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/close_grey.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/close_red.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/down-arrow-light.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/down-arrow-lighter.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/header.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/loading.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/next_blue.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/next_gold.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/next_green.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/next_grey.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/next_red.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/page_shadow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/pause_blue.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/pause_gold.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/pause_green.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/pause_grey.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/pause_red.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/play_blue.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/play_gold.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/play_green.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/play_grey.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/play_red.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/popup-bg.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/popup-inner-bg.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/prev_blue.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/prev_gold.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/prev_green.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/prev_grey.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/prev_red.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/service-logo.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/tristate_checked.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/tristate_intermediate.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/tristate_unchecked.gif delete mode 100644 web_client/src/gr/grnet/pithos/web/public/images/white50.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/index.html delete mode 100644 web_client/src/gr/grnet/pithos/web/public/lytebox.css delete mode 100644 web_client/src/gr/grnet/pithos/web/public/lytebox.js delete mode 100644 web_client/src/gr/grnet/pithos/web/public/pithos.css delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/corner.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/hborder.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/ie6/corner_dialog_topleft.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/ie6/corner_dialog_topright.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/ie6/hborder_blue_shadow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/ie6/hborder_gray_shadow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/ie6/vborder_blue_shadow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/ie6/vborder_gray_shadow.png delete mode 100644 web_client/src/gr/grnet/pithos/web/public/suggest/vborder.png diff --git a/web_client/.gitignore b/web_client/.gitignore deleted file mode 100644 index 4c0fa12..0000000 --- a/web_client/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -build.properties -.idea -*.iml -bin -dependencies -war -.gwt -.project -.classpath -.settings -.gwt-tmp diff --git a/web_client/build.xml b/web_client/build.xml deleted file mode 100644 index d2ab455..0000000 --- a/web_client/build.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - The Pithos web client project build file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web_client/src/gr/grnet/pithos/resources/advancedsettings.png b/web_client/src/gr/grnet/pithos/resources/advancedsettings.png deleted file mode 100644 index 0c9faff1818d93d862d624a52e3a5347cd4d4bcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmV+x1L^#UP)@Q1DQWJ)WGU*tVQa!S^t1W1_I8tD{+-M7oO7PT z0}lW|B9Y`qM@L`4(FmxiskyJ$>&G-2%|`&i|4mCuN;)PcCVpjQWnDSU-PzgMO9&wp zMg7jq%vAiP{Q;cV)v#MzTXo~(<5mE?z2>yEv>ckIiQDZa)z#JQyL?wy*UO@!q6d4m zzJ-N_FH|bkTL1yOWPW~rB~8=B;cyU>$+ReyN@Yr=vf1PDki5LS+5>efDk^#!8yhtM zSO5?c6C<0SpC>k(jjXJ!5Q?Ig(%!00cBNG|0JJ zE&#ym^@7c2``hhyw6wHzyIigrpTmv@z^|^ZuD_t5AVVg*EM(SPP^sE<%M`U378WKn z8jT}Xt5pqP%kPK)c1m&zH#Rm-NU#3DyRpfI?!G=b+-_>WkhP!S@p$~f!9ne%q@?TH zn;S6McJP^<8Y(<{j{kj3r#&`6AmBu()dM z9*?ilX!QO4ucjDgZCxxDpQ);<>KGjzZTq*zyKURCPk&uwi3$*SihVvkFV|s9bhaDFH5Gc6Az4hEJZ8nqgL7F7w7T-l#S=keYVF<%8 zM5$B`Vc#zt04J&mjk$OO0D`i!v*i+rq!Ix4So1DI;_tDzQ8@tc2c{V* U+|R@i+5i9m07*qoM6N<$g3~8tdjJ3c diff --git a/web_client/src/gr/grnet/pithos/resources/ajax-loader.gif b/web_client/src/gr/grnet/pithos/resources/ajax-loader.gif deleted file mode 100644 index 3288d1035d70bb86517e2c233f1a904e41f06b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3208 zcmc(iX;4#H9>pJdFE7h`I{IF)0|5<6L}(j=N}5%L009EB2nYfyF)E0PvIqo$u!IC; z4PgyY5|S9AEh38G)(9eq4TbH7_UHg@yWrlIJ$6smIADL7s^P;_O;ykRc9soXl`UC*LwQJXkii*0rx|*7rI2=x7WaRkx_~XZqFJ8R3c=2Kg zf@aSAv8+BJ8+^hyay>(QR@t*blbKzsf0}bscEqRc5Hd3o(-N5RyW=zWB*zQw6Zh>* z2CROCDAbu#D`)S|J_o(lL9Yn3l*+8RdiRD_>iNz$#_IAzCna&Wl5 zSF_(rRCDD!wi#i8oAm&jYtn2_@VB%2-H*G%bN#|(6R6N?wM)3u`PiGzwuX7qmTgyF zpE)h0kuoxQ9?=kW7Y!=R@DmhU9)vwT*EZWzJ zrt+=2tqFts72yIp?|gvdLhs8Hfku^Z(){gmN%Y=K#P|%fkvgUj~HfIp3CuXqCtYGtJ#me+n+-LmP( z*XNuk%!aH8bIE@_Bj46>M*dSro|7<6vZ7WUHh5YQzN$>IJFqCb|CT!wj~R2C2%=q{ zpt8rzY$aw?W?=Ustv{jo?Ow@ZRkLe<)NItY>Cyhle*wR59dTdF6(@{5^ zAQBOB*hNtc3bkY-8{Cm$nFS@elbTtSqrt7MB{h_4y+~`!mVa}?c&N>&?P}GqdMuhQ z&@TD5Czd((DcG_Su~dKKV)Pj$-qi1WHM8_vc^O4?^!oY|tmK~i!{fjd&@_1E(T~r7 z_REZy&hMT^ySJB3W7l$4YhR`M(J7S5S~+4Q&3HPa)z%zPpisOp$^ zTEe99ig2$5_qFr!$;7A6CJ}PJmRhli>w?LC}Y`#HLGy6 zMU4EhL~dKCN5Ut;U2jd*83ShBNiu zcJB0l9>1Modc?-oM<R4?}3g}UJ%@K);kriq>)e*rh%hdqM)5Q)*+O8 zXm;SEbs@koiYS!9YXIclSg+5m_s~yrW#kKMdiRszg(gCP5HPmP7L)vCf8@fxUh6qY z@Z#TmkjzAZX{rwE+q|K~F2v5{_@vt%>yT_a#fF03SFt{0RXvDAiaY~K9CgS1O>frXgAjBCS}mEd4mIWZ$=ovd5| zR?GRdU}d6+Q`+JRW)|=v7$)XNkn3yE`!nAiSCvOB1jKT zG<1aK3s<0b0m==egTD#8i(Of=1pGDTOCho0XpIOMQ&P87cVKY1W=C6kIg z9cH=@a&zbm2+`|{(_?YC9fdm?1TY~-pwlBn?>=(~1pDKbco6jloP;0-cqRiwV1A_S zEyV0Dj8Pwy!nekzaN>{)7rgZ&_QLxK{~1yRe865^yx>}+a!ECd>#MMwddow z@CU{l+Rt$xuXuf}?ga{3IAr?Raql^c@a%sI0U5m}HvJ5O1#I%_MMPt#BH>OqUZ{-k zt>4Xzz=%jT*FVW(uYkWyx}9Gw$HdN*qU?Bit#ji(Wi7p-u|_8?h^%szIS^s^fNM}b zgGy>|=cbEufpguY5_6w~&ZLv=Bo06UF9EYIY;Er-1VK)SyF&!|J{axiE1z^(hXwVq zsFS=K-#zC}CcOs^8W{KAt+kK)jYDgDYbCXv{{rwsgqtIU3<910$CJi)s?? z_t8k{>7*0~4l~LLF7$WXT5OSq5QCTbP_l!SN|{R}3D&eWA8~0ltWh1IL+ZBX4rRSt zWF6Om3WDMu4xK^1(BF`2cL}rUCzhHAB`@j5&R-yk_l*t;mPGY|u2^o|myvcOdrg0W z%=lX;f^Vkqfp?u7*4qQq%A3Mpf!xspWBSKS@O%r*TSM}?dl(@*%{0Jm_8;(h{R__M BtAYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxtB=jq}YQgJKk&-n&<1{MKf#!9vZ2Bj4Y3Jn}u3>*qgTntPdtS&N12`LPgWv;jW z&uo{JxV-!fb(yryyvuW3QX(yFS>qDPgNqm#S;7u*T)lhZ!;FWT zhqX2cxvem3U}&1PL1xA7u7_ratrcp{Gi*sr3zJf50U9sp!g%%kne-jZ=3*|>neP@! zt`JgaP~iHPZWMF0pkDj1=z^*S1}5zbf6pIa;4X4wW0770be;s~QC0^AK^_ex=Nd4~ YUv21mz3bj)pwAdQUHx3vIVCg!085Z-dH?_b diff --git a/web_client/src/gr/grnet/pithos/resources/bell.png b/web_client/src/gr/grnet/pithos/resources/bell.png deleted file mode 100644 index 7a3fcae59ac8b7d1329406f9390623a4113de289..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmV-70?7S|P)I=GI^O82dzyFHAba$p~WtWi;7f5kh&2>MN|Zl z;>H&cL^rNf-1rH^MHk%(N`#n&_5zWh zNB`E)Xt#ha%8N;J6;0C#>YCXt(E9S#%Af+Y+QJXJo$D4L{jNAQH}CT4n_J3S?HAnw z#z?Zg&ngu?k${^Bv&Rq6H#Sc8v+2~Z{`mGp_+c{c=}z4=H;##^aHMX{Z=ZT?$3Fo~uw;w#k$gGr-cHz%MG6$q2UN=eGa=002ovPDHLk FV1ff033UJf diff --git a/web_client/src/gr/grnet/pithos/resources/blank.gif b/web_client/src/gr/grnet/pithos/resources/blank.gif deleted file mode 100644 index e8f26b0025725d2c57b4752df4526fe629549610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 wcmZ?wbhEHb2BR0pdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxth;_2cTQgJJ3!`98e`B`|{+Sn4JTwO(dyuG}dG8yaY49=cA$G5DJp_Pq8LBLZG zNU~Y4;NFlZC>S`W$UvNdMc}9&1BU{Wo`B*DrUr&ZH&_`Mk0hjfM@j&tVh&t5ARyJN zrE&2Df3KU_mW-Cf28N^!OAUA!m^vOA0QD{4&e1GlbYKX41JZ0E3o~yA_ldK;42&)t dxfz&v7<3Qp^q4O#nGSR>gQu&X%Q~loCIEZVQ(OQ5 diff --git a/web_client/src/gr/grnet/pithos/resources/bug.png b/web_client/src/gr/grnet/pithos/resources/bug.png deleted file mode 100755 index 719983cb29d55cb1bca0abdc352f7713677999cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1010 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZcyGCk9j-0z|NUyp|L^ze{@=U0=Krb3Z-1q9>^%+&aAZ9I0mOt9w*t;d(-wus1h}3!d*dyidv z{qDE&`vWIlGZ>riV9>JI!?64K`~Tk<)jpg!dGV8FK)h8%)#i;rJ)pG101!Y-KnAyI z+UCV_Hi7obwmf+B`LFCJHcp|REdQSTdw%~J!>1P?8Cd?@`OCl|^5ZLm+{X=j?>^(w z_t9}IJ+K_8R}vtAfG%J&Ve{#Fsb_Ve8Z28MSBff<44 z%Fka6y#JUO{xdN!^8Ma_;K?g?d3$+agRRpU>dK%*6QXA216raftkV@bJ$MU{-kp5I`)zki5Yt z?72uTc6%C^h!6*lCP5J%L|NkAgZ@us$vC)`ko7raLisN$=4KfVU5`duM zJJ+KFN5B6wj>)j#?&sZ;xMAzexeuKVM~WDxoaNzBS;E}RmdtZjh4IUec18xlKhuxu TgTe~DWM4fvHx_v diff --git a/web_client/src/gr/grnet/pithos/resources/demo.png b/web_client/src/gr/grnet/pithos/resources/demo.png deleted file mode 100644 index 4d40262a66e6c5f08617c77903096caa60b0e2ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSpS?+AQ#l*nCXyobQ z7*a7OIYA=hz=;C~4qUiw|Jh!1mKWD$$%k|1{hRr}{_ihmA-8Q4SdU#OpWB(#J#U&y z^S)^+hi`wsFTpo=$N3LWU;DEGL0k9k%Yj!mDipi8vPggclkHZCn730NK3cf%7th_x z{RVsLev2Nq_Ibfnbg4;WmLyO~#g3a2f9{$}Mnpthn3^o5pnbG`VMk+QqoZTk1jm4Y zh7FAC@7EsAI?#Oly=2IgC!Ep+?;lpTMSs7yxa05d^9Kq(z7l3L4D`94C;@c&fekf} zecLvN+Zo!_er$gDW~x8WHML7T<>&kky)vp;vA~_*=!U$^nGI!cqu3k|YO%Gwuw23B z5G;Cc%8JGLC&31Qq-1NouT1gadhqO7-@~U*|DHd4R@QkMAYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxus*q#0uwn)IFy-BnD#jQk@smj zV4}dR&~SiDLb6Lj!Al`XVClaEGY5vowLj+HJN}{Tp{l?>hRN$2F3fKN+V>zQ+O!oJB5We-;ytYh_dPGMl;Sk*95F-a`> zmt@;|p8FD2jbVPXS&e~;AKYWn{5ij_H&N}vyO*0K9!_Iq5l~*ZfQ>_;iIG*nfkhPP ka7R`KMwb9ahXzK5cS5=WJr|0Tfxct#boFyt=akR{09EO0{{R30 diff --git a/web_client/src/gr/grnet/pithos/resources/doc_versions.png b/web_client/src/gr/grnet/pithos/resources/doc_versions.png deleted file mode 100644 index 504572a6634bd2f5e69afb006878d7179db481e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)?d%FTj)|~w^B$l z_j?30DHOMmQtnV`r$9S~Qb;OTVq#l@dcA+nJ#Po&jaMD|!h!dk^YAu11BdRsMo8pPDEGkHaX))44E2(=RI}NXhwUBh_Iq}BpRbC6AeaKO*$n;u zts7gY)oK6?heNvEE{=1?&d#$qgNF$WnG7@<&8vfhH!p!72@8cnfnu>pxm>2x`N(AA zCZk=3ZT_$Ek*&r(b4Ot^LwQfmZg3T20!Cp nsDQ^n5s-N;a1H!jNuH~JgKz^;w~v*I00000NkvXXu0mjfM2Ykc diff --git a/web_client/src/gr/grnet/pithos/resources/document.png b/web_client/src/gr/grnet/pithos/resources/document.png deleted file mode 100644 index 9e455384741ad3c71ed2da61bf0b4b0e74ce202d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZOG--0fo5>S%s|Ef0mOoA$**6( z7>*n{!XO|ZzyNd!!;c?782I`58Q9s`8D6}2!N9`8!obPN38q1~xw*OH&!0d485tQT z0}cC*Y!*NOp%@HQz#t?f#K6J90oDkznTd&s0jQZlR8$nM1|;_F+c&U$UteD*D=RBd zm~j%a;Q#@IVlc=s4Gj$jpm*Vhf&efGz-$l=182^hVR-)hIoNmA)zuxqp!o+hd>T;S zSCBkF0HGKRGVtu#vtaK6UBLhhO9n13E^v^rv9U3H{rVMbp|Y|vgRHD9!=p!!81CP{ z4;HJbsp-0R@7_6}F?&H~0R#|=!5~+GG=W?OG8h!*Ft3AXkdHv(u#}{tq5`%Q#Fv(q zW>8R2uz(p15I`7V42mpR_<~#via2IwX0UHy!Exip4RE-FeDUeiCvZedNlAgk{=&=x z2q280ICbh2*dP!9X#lwp7J=H@+6+8AJYWZa3E!802bDa`(R1IECr^IB_y7UK2vZD9qrtCVzh(yo6``DnO%CW{ k7ND;V0{M?Ye1HH00OtG(Q0{7%P5=M^07*qoM6N<$f+${%Jpcdz diff --git a/web_client/src/gr/grnet/pithos/resources/edit_add.png b/web_client/src/gr/grnet/pithos/resources/edit_add.png deleted file mode 100755 index 269aaa635a1df82b342cac1a22fdfae807979a87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-Y)M2xRCwB?le=nLK@f(&**$x(j4atQ82b&}2ojPq zrNLl`n^f-e1Zm>JprlHdM@XACkR~Pdw~FW|YX6&!0x$`7zU1 z3UJGnrPZ}{yarr-ajDE#3Mh1_SECDpdNLhwYk*1~b9w|kN*?C|+=2O!IOou)#zN>r zeI;$=+9Rr`)<_!*FWpC}A}An;4;f+Pvq zD3JL`5#ZbL5$Df;%D4jq*7UJbU~I(T8ORlCJ*pmSDx{={3y4IlfHmRo2<^@(?at}c zeEWM(5CU)BfBjF0ubKWyE!0*nG5pDImgm)+EdWUEWX7u-t`Xp2b(=Ba@NR&!?k|j) s-+`1J6D{KLZ*U+ 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 diff --git a/web_client/src/gr/grnet/pithos/resources/editcopy.png b/web_client/src/gr/grnet/pithos/resources/editcopy.png deleted file mode 100644 index 8a227f8976be54e7cea4819b04d867e3df6e21a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmV;00eb$4P)1pw7=@o?;XnwKE*=7f-XL<&4Sb3YJw#7XdVn-*ZqOl{ zwDb@fasm?w2y%c9#+KBuUQ>HpsQf0NyA_bG&U!wm@`Nb*uj>8IqJ^IB`) zb)DB*`&2!>if-^e)UkW$*afUt%Na~aLRTANHTY_lxOn8p~B286#b z+)t&6fMI{u+R?)RaLz?gmSsJluIn$Q)XP==3oVz+2p+*_v)OY|6i>ESw^%G5x7+P^ zRaI!)HaZeQz!-~Z=JPp}QeaKf98agyF%Zw^^8)}d#-h`|W-w3&0C}Dx&+~hoO#*)Q j`~5qBk9)A$vFoQE>B(N)_5DRhDh?0nv7IsRSYvA_ViEFi> z)i#3v!4~3Qk+5EFb30QQ5D|i48j~sf1jE3jm}D|Jb8@!133xxaFC2JzKOTPXd(P2L zPf!0X6bgUy3)|e>Gy(ZtqFgR3rIZ>Dhe`;cj*pMk<>lo#7KWkneP7jTH3b;o_Uj{O zI2>Y{CZ$q|^Ye4w-rmqOjW~{}R;z4mY*4G!5@6zo08P^XSX^AhbzN?6Z%LAbR4O$t z{t6kq16Y@f zY&L1NTI6y$q9`Jh$zT`;?RJ}NHcP2gB93E}Qgk{U{hfk#yG^lJWM*cDX0yrt{XJ4j z3WWmK*VjBeJYX0Gwr%4$4z_Loc!|r)%dD@jK?_&j0N`w&f`+aQNW_Nd&Y&MJMd2DTMk2%U)G$KvY{yI51`BNV?2q72@1`Gy+ zu`h&RX=#aiy-v5=MF_#%+?))<(B0eHn~I|7vp$ml?NLhM`#v`}H|V;~GEeDpyxm^m@JT>P!H`FfdK?9Z1)8EXxAGbzP>XrwPLl zDc^rcZDC>I!~XvMCw^j@rUfrAFPVHk@3-6S-vAB|4>Ldq;D7V?Xn=y-X5s(<002ov JPDHLkV1h7WPp1F? diff --git a/web_client/src/gr/grnet/pithos/resources/editdelete.png b/web_client/src/gr/grnet/pithos/resources/editdelete.png deleted file mode 100644 index 64d36513c4ee4b880089e03ec3d1c3f12986573c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 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 myc&o1{(OIbzj#pOd-xCT{6sGOTK~`fhG+?$jVR z8UzoXU!NXVb@}35L%M_0Sd*H`wQG&dP1?7AR^+N z;}}3fV7L8?)b_}O$9aqM7VA?0T-0hzUg5C|ct zVSpY4ZCmHV)*7O7QrRPu4vr2^bpY_*qqU~dXxLt_cd&s&3r6^|_mY{`31+9}$y}FQ zJG}He2sumF#cR!G^YbwP#*xezK6RebHe1Xl^Mn9Sx&T;OY;0`4YBrnC{yBqS zEXC;pS|WbuA8DoEDa9w5Fw>knf0~<*E>TL)9Pxj&106`r3`PolOL(^J*M2OazX|8Y z0|b~fC5*&?LI@<Di zC-d#Jt0yNS9mg?B1EO%==9%gOn97UQ@+e^7DY|^`tQ&nC*5>1Hciyl4SRMx$Cj-Pl e0(1d8`r$93F%-A9z%1wh0000?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx-l>?c6quuhE&{2`t$$4J+mrr$L#~q8Weo|FKs#D`j9j!cfF$mG*)mFg?J) zg(q0of#G4v!F~5N6{;Qc4!&k>U^tX{;Pw3d92u<)4Gc+#o_>FBUuS6Z`yaQ*f0oS~ zTe&$HSOk=dbQ(n7=o&F>-oC$ryNuE2TCkIZkM;Lh2hISXCYOG<35pLHlQ^CmD>Wq@ z{S_{;kx{^*=f)+*69UoYbsjp7zLuLlGhbW5!lB?6!^xS_(PgWCqs6*?-(w$kpbK{> z&SunmY|eVN@`8i&^*x&HAMJIT7@0br{`O~U+px}T!;vnL1^?6kC&zp(6FuCxon7L~ zmoE~z+icQ*M65ho@c3AHTQ`55;Ri|k-}2XZ1NX1m(!~f2iG6kLQomoBGI!Y8Pvd-} zExh2PTEI$E`FLZ4B13}>8O8=RzZpeqI79eTm{|l)m(Muxc{)#L@U4#XuKIBeyv!U5 zSEf{aKzF#ESwGuhGjn)TpeCX3jUH)e;1;!wQr>mdKI;Vst01e{AMF0Q* diff --git a/web_client/src/gr/grnet/pithos/resources/folder_new.png b/web_client/src/gr/grnet/pithos/resources/folder_new.png deleted file mode 100644 index 130e35e09da5b8d96dcb1c6634aa1e84c90bbd0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)9k~E@NOgRjLSNK0_E53uNj8 zu@+R-H6XqSG-NRYV>SaLKmdUaveNj$aP9dwyuQ02Yy@?|8Hm7f6R-AkmzcCECp=-r}aM3G>pk)sbUj#aJ@qeIU>;M4-HRvDMAhr+x7@`8? z7#_U)2{&Zkdu2$t9A6A{!D7rX0`mVeJo^a{Kwz(FNq=Ct^yCWz&o?FpJwpM8zs$@i zE?WCj9ZUza--NRptlu#-92Ekyfi4mO2q3uEV1|7735vi!Cc0mY$qJpTBL zLF4iCKW+Z25341 z1AqVm8)PQ@ilH-F51s@#*jO0Y*_aswc-R@(S(zbhZZ$`Fd={d0wr%@P&y^isN=}q0s(*k0vW^x jHH;MS7TGl*01#jRRNA=DQ8x5i00000NkvXXu0mjf!vFgq diff --git a/web_client/src/gr/grnet/pithos/resources/folder_outbox.png b/web_client/src/gr/grnet/pithos/resources/folder_outbox.png deleted file mode 100644 index 91e3b244d5d556473794580adf1a6fbc978aca73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 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 Eg2R<>-2eap diff --git a/web_client/src/gr/grnet/pithos/resources/home22.png b/web_client/src/gr/grnet/pithos/resources/home22.png deleted file mode 100644 index 1aa6ba511a0e6134838ed31ceb1506e8fec0e32a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmV-|1AY97P)@&f=rODP}K>-E2qaz#?0R4Q3FH#ZF;ssP|YG63EaLewnFdjGY7iHJ{iN)={qtgWq;=jZ2$(s^L_&z)rIhCY?gL0AFxLS*yu7^3F*Dy&6a_~|M^IH2VHm>qeY9FFoS&bg z)9G9g(O0%@e+dAVW!(Vy9Kg&S(!4{aY5oadZrBDzQ5?fCPE=LB9`yUZKkB;fau5XB z1nj?gm{(C0EG{m>vaE4tE)Lrhh9Me_22M^+5ClOi9s?d58$+>J#Oi9|6MmY=jP31h z%+1Z=@bD0h<0J#;ayjhm>|kIak8-*Eb`P{C2{YsP_!!M*6W7<*&@>IjVi7Yl&+jgq&0=qF57lbbZM9keo;JuC z5q&f|I@%E8#SSMT5D_|^4wxCaTn^oCH+F0Q5JI3(DEv!Ap8;qJ+qU1W)oMSzypf1v z1vE{=($W$Z78al=vGLF=P_u2jm^j^r73qCPMn;g&=b`I*V$N#;4=bW53JQe+48!<; zz=LdiHu#^<=b>rZn*rYi+FL#5FKga^$59j^ilP^SQ4}EzL#V2XD2mYScA@J!eBX!X zd0^&#!AvHD!P(vic3t=T{r&y>nM@|ujYLGu%%11r>gr0Ko}R{g7{JBF#gp;z@h1TA YA6RHR(6|o7cmMzZ07*qoM6N<$f{kLPkN^Mx diff --git a/web_client/src/gr/grnet/pithos/resources/info.png b/web_client/src/gr/grnet/pithos/resources/info.png deleted file mode 100644 index de189bd8f1d27929df17df2780d814fe9df19c6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmV-Y1FigtP)8&>#E9BH zy93X2&f@tU!2`M|8Gr4h-EBSRyVgh?w`;-n);xdwT%dYw{r_(DpXuzU&z~4MK5^lN zqc1*_?>(ILOyX3tv9lN7EDSII@cq%Lc<%F0fbfC4&bbdK-?_4w+*q#a!fK#@UAeFC zZZ-Ao^}3#2sp&$op}(Hl)o0(ndK+(W>>wurtkJh7KbXAq@hi{vh#*X;G$IaXEk*`> zdVG_)wFZ@XglDFlKQq*~=8jz~PG9>5_I4%S@sn>%T%I~N+$}1Nn05*Y2Bm5nOKKKN zO*VprSVO&?vKMw38a(3O+A)Wke_sE}$ew!r&5^-=u^B`J5!53=ts`)J7iB7J*Cy1G zAQIF&P-$tRxXtPDmtMx~A61$D{8RNPMH--lfoVu$42H8dLwyeY?UdP4Ogl|T6HOGS zL{W_D$|-UKPpU*nIa6#gkTV$Qwa6M0p%fh<0foc)HXr7-*AFpE4B#Q&HOIFq5QE7t_giUbh(0JqfJ#SOiK~Q zpoM{}By%&1+?jfRf>w1_0_gJWPb>F~al3E$*y!V39LWhD%?O_8v+#XMl;Pr);5U-bo;dSrEUH4$zs(O@aG+km2hzVo cjfa{30tr4@$0SIS761SM07*qoM6N<$f?;f*O#lD@ diff --git a/web_client/src/gr/grnet/pithos/resources/internet.png b/web_client/src/gr/grnet/pithos/resources/internet.png deleted file mode 100644 index 9b67db405f2d35cfe916a65165ce0fc2b989dd55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmV;119|+3P)T2A+w{vIv(=GS%!CEUhH8nAO>9YIJ;6<=gk2C*i*P*vQ z_~_e_}4WR^PfurUDW#M$zHG_g zZl+}aL`Gh|laYNlQu1cpl%A9_k@4ig*G_%`1OQZk?qfY4{`}>~?}Y;Jcgo_|(KKbD zB2*RIl{g-3i5iS2O!BtF8%JK=-#2v6PAA3&6^K09bLztAiK8z>uFa&$+GT{HqbLdh zzJ%@dK{{G1@XL~vS)@8_(0grW<@K(8&k1d7XLnAGM!vqffaR14C=yL5n66;W6<8&x zHWX9=x+Z9;3lmVGv8ky(*xGSO3r6bO6g^DZ^|5n4?;dOI|M@kU4TG03@l#|e<1ko&cjg7D$zgZ^1xNFe3iT!WX<*fm`vJqv{m7G zpxK$UX=s9QNJk3=*;rSB?Rfk+W@4!kqOEn<#WDe@GiK#E{YR3%S%*|k;+V^6QJNpQ zo}FJLQd5O)1gH&^xe_mssiT={#&})Y)94&`=4{5Y&VrsH>cKF^Vin;sa-X$IIPN0oPAX&nDfb z!)?2EhF*O(L{Jxme3#v|D)m7HuUNufvw3Bk!KtAF*Uz23pF01^amuAR_2H6>bH#XU z^45Z~_tt7d-GLo7v{Y*tLZAVLP^i>YKI>m1_R}{Lvu95pm(J<{fU@or?N!gb^!Ap{ z!`)9jwWnp{h7GDBAeT42^up~#eBj*qrIFsxfxjLB>kA%vN73{q)d)oeNY^Q3@k)!p cnf2j+0Zf;AmN@};zW@LL07*qoM6N<$g7&DmD*ylh diff --git a/web_client/src/gr/grnet/pithos/resources/khelpcenter.png b/web_client/src/gr/grnet/pithos/resources/khelpcenter.png deleted file mode 100644 index 12cbcd2c4a2894da46aed18f20b74fc29c5573d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmV;F18e+=P)%IN6 zdwcKwd{DFj{hq(yc{n+T=&69nsFGgH6t@5*0sH}=1OSVRixaeG zkMWrSvMi4QfU>+SNIVaP2>B~lq`&bpfE55K0PuxE<8KnN|KLKQ@S3WsTD4kDsK7?L zw^vONA#(UIRuYNtRp3_uO8{bsM%QumDx`Dg=AqYj(9qD3u2?L7D+t05f*^cTQPrDi zzyG)Ih~iPAcMlPnK6JU9#XullaX5-#Sq*kOFgy&{?QU*hU|^rBs+MxO9OHSuPRH}Q zufySwLPS0f(KZp0;PFhyJRX>d8uk&9!m`zz*_{29=jU_`!&oIrs>-q~OFUo9=JUl< zot^idU?QRsB8emVEPwQ9W%JUdr0Vxa8eFbS%4REYH*Vdkym9)pBo_)YGdkM2D;VrD zWwXEh<^D~}#Ki4}6DNK$==BP#X@;$Qo?%o~;VPFe8 zvxo90Pfk;N`^pZJiCe#a-LLd;hNkp2? zMYQ=2QFqAUc>Bfv{sTModYhQdDy34XT$1HSnfCVSd?rIoIBY>U{Jabp+-~>hlarHc zL^ap+qtCZwHJh_tU0tuYwzeMBG!0s{${LOw*{=9}9o4NZE}hHKC(-D|(UFnaCyuS% z^wiW;jAdDWE|-()>gudK$L-qI>D0%`WJ!rcp5x;2@L(|bajjwg?=xL4*G`MY(p+HK qYRBwsOYhygXUs%j9w3U<_WlGzQrZwpdAWfA0000?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx-l>?mU_B4hE&{2`tkq2J+oep%&c$n^KCeoSp;F%RWj1c@exX?$oY&_;vaFgm1xaoNVh4aLif9z@ZSMx1#)V7=!U4r9~fh zF)1_{@T|C7w&mgF^ZR+&HYp|STi?la`0)BWJk$8(B4QZ@9B#w}yyx92%VxCca{)+w z0M84{f_07ayC*xk2T8b2T)E4FdG;js<~{qY+q4;&IF2@`zqh}d9`!QmYj&ucLRdHh zi$E7+PR<&h(A#~7e`-H3b(HAg;hB7G9@|E#i@ZP=^-Nj%bk>*upEjHSkFWdn>;J#i z{r}h7RDG`hI`Q`Z)DqbZ%e)#G4$ZO=p7z$w@W9q0#d9jWK>uAnxbo*|L74@g{dKbr z%@kr}>JWUxqcR~w^^^ScM?a6>Gg#Ek$Rg0js1P8R`pMqlK=;Gnr^9)=r>#G@Qj!Je z(ADBCM=T^}MBb2)xFIPavLxigQ&qMG24;q*>u+32x_^uZ7+DOSu6{1-oD!M<8rQ_Q diff --git a/web_client/src/gr/grnet/pithos/resources/lock.png b/web_client/src/gr/grnet/pithos/resources/lock.png deleted file mode 100644 index 5294896a37f203c7c9d4026956c1d3812413eaf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmV;!13dhRP)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$00060NklF(6o`@luIZDytNx(%M?A1j#=jXeoiDu@ccz2*e<$C`3;J3YWvX%iZ4I&Wyz* zip^mjykZ{j`p^_&uzVaMtbmxxH299CWcNE0ORs30K5e}c50f5^7<;-t0!>q z5ljN56xTTn0PhMYI-oqboKkHrT>J9z-;T{(C7E7?##_)HT21`-4*{UWf$M-M@_q{j zU1FfyYvNG=RDojH#~%Hp7KD;*m^t8Y6!A|e)oA>QU>iB#f lI0v}@&(RCwBA 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 mBLl!wEn|Wi;^B4(5JDh?K#Y+9NV7>+ufwB9 zmMcOdz-ktj6HJ(xqFx0Yu6|?8p!M{GCoe3fe?iga-i8V$0|O}g{*96f&?8v-WJkjj;qA0B^(nQ&0&IBOpLL)Nj8BR|9$lKDOY= YFZ5~%R(f|Me diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/acroread_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/acroread_shared.png deleted file mode 100644 index c67b8c2e7e398563a590ff81ac41a6ca76c978c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=fT&sm#Iv00PrVL_t(I%YBhuXwzpD#(!`AZ<6MtX)9%ZAT46meVU17hSfrafiR(n zdhHb4jSO!Jo6hTjAWp%{A+j>Oott0Jt|ec?8P(cKP%NSgg*O7u;TFTU1gy1K zYjMtD0iVwk_V>f_;{->KqLgZOrBe8%UvOGujKP?uQ2_|=arr!MV1OH|KVZCXikY+5 zk!FE+t1qxi1yBlY3|4Cp0ul+L6BD>%kzdw*!WV;U`AzI*Wh{nMime~7;Md8SK29Ea zBVe>fTZ>O52uda7sZ(5fX9I(K_weH%C5Xjw4NGrV2G!6U`R?n^_?q?mn>T1QXc&VM zg4nrpaQHA`vB=e}J2`QsMBlm&)+|pm9SUwfon@+K$+W6dYyz4WXvDfafZQ+yus@L82uAjtK!Qm&DR0C=rwgduKvn#jxy^VuwJ`*zv_ zMDMjm7`~002ovPDHLkV1nVkeOv$l diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/ark2.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/ark2.png deleted file mode 100644 index 184f959df006a032a8cf984a1249efde28aa8315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1050 zcmV+#1m*jQP))u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKADC{AXYS2q2cf%-jqNTp|n%U*9t@ytu@` z@cSzR12a1V0}oJ>kOEK~7+NnbFfe?3!ocw7BhXML1_pishQDmQ4FCQ!{RapjpaEP! z#o|Cue`8=^WC1FC&cN^qsQAS>1_tE-pi3SxF#LMMz`(%|#KH^=tQ-sse7p?*KfVDP zz`y_yKtKa{Ahvz`%m5BO#(zLfj6gOJGyeuUA7}xm6htEn&>PIGKo|1^ee|8-|9>V1 zfB<6o#{%>MH_!z}|3m0MKY*I~fSQ3q48I@-v9LnD$H(xW;|s&Te~b(O0mSn6 zKTv=f7zSLQfPsT-08kS!P#L&D1^`{c3N?TQsGf_D;UC*apcfb!00M{wWC}1|AOZOg zn4%bg-eC9xH2~;uu741(v2jAY0K#lQFE9hc0q9kL0AgWdV+95)FHi!gkQ-zhkp2h6 zzk!Bu0uA7Vh6^ju09G~#%^X=+71%2YF+~~}=y>|Nn@XA5S+Kl$d5vNFrsIDO9J%%8%AI!yKmKD_4^+At zh`)h63=lvJ7D~JfT)=Q-1!4hESTci!xg^*bf|Nyh){1knYy|RSfmni_@% diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/ark2_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/ark2_shared.png deleted file mode 100644 index 26496dffd871b4bc03e0a0ad9c7f176d4c75d5f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lluP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=y(|n|cQT00SmTL_t(I%UzR8Xk29&hM#l(Gv}PnoVjK$$y8f4HMPl007LyvRAtoWFxirZnohF%PW|Emq=bZol zT?C}W62S zPa4CYJ|#O3zit|?i*A&W^%AmCMFk2uKLgo3re$C{+pxSGme&T3pme2=7mt5AU*@1?Hi-3T_!1~&w`R})JH~f2kI{Yf4bBZ0X$#pXe=m=BwQ}l<(5medZ2G=!@lZ$HrF*SS20 zj~wHh-wR+nsD|Xgju_3RPfz!8F7;l>SV|dyv-L<7fFXeZf+iOh5?tzApyyDQrH0AS zY>lC*3JEvKJxM_++>x|wJ7hu>ECmq&1xkS*uyQNJjTPu9G&y!4!R2e4j8Cs)3xh+u zqLloQDcYRoJFaMYnREgxng=%qLP8+vpE9VW_mI!UnOv-}7Kx);QjAwjdPigCc8pM3qxt--$DmeRF}gl7wp%;piP7-qA^l-!FlHJP?Bd$JZn7_3VNLkfO7^Zv;@ znrOk39Vzp(m!IyO`}Tu3{fU9k^}8ot(=VKv)&G{2F8fMft!n-DkJoi_|B?6ZXyaXk zTOFQ>#JpEFY7Og#?_ACud}&`gll9hXm6esh&wsSJIy(yRAK9%}kQ#{%IRF3v07*qo IM6N<$g4`phGXMYp diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/document.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/document.png deleted file mode 100644 index bfe1d06e04b156b4506638362c6cd4689a1ca1dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmV-r0h<1aP)ypf?y>Q=J_VgW|>)C*W`y`nBkl6@#YB}b2uEnnOR{aj^nsp*VSp7J_Gn#0KV@( z5s|*MrfJem)99+IJ^e#j^kLYB~VJ8024CB=S3_55pA}x76}0JJj2|tMQeRxul|7$ zVsU43mLLd%U45Hl{MFxuVfexZxiJv|0K+i60{Hv^61=P;AW)P(00000NkvXXu0mjf DVfB-! diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/document_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/document_shared.png deleted file mode 100644 index d59243b3133fb3a681fbcd84c68b0e27e5252953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 667 zcmV;M0%ZM(P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=yVwnkGm900J9HL_t(I%Z-rDOH^SLho5`rHgT?O>@qODsv!^vT$EDk^}=;sJvut7`}_NoK(GwH zk~N#iaU8n4yQA@V{0*@4f53*aEDI?mnM{VBo}MFpeSI&1-CG72hJg@*bUIBcm7=Sw zt1}XboCmN<8?|2ll4vxFloBZ=wryh=hHn*ME2mgi`AAu%lv;D}3Fk~1 zKuTHWVAd%zGOKA#7r4@1!_b7wm+y=CeFmM))yC8kwgpfu7Aeht74(A}tRlB9z~j_B zqBcZDRfrFBE-&8A>G`bld&3``Z1nTitYk7L2sH%h2>SSu)f7|!qk!>q@YN##Y}>vd zrPM+Q?RlQ|JWso>t6kUCckVyYmmZAkkp-o*Lg{Zgt#3a6rR!RcJ_9gTmK_L(!#7lk zg;F;K<*To3I@S@Y-BFoeoLkC|3=HMwXYT=D{{U%a8Hr&Fz4!nC002ovPDHLkV1lj_ BCaeGe diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/html.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/html.png deleted file mode 100644 index 2a0e4b311e1f399288881f7e7326d42584901e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}}#P)7pf@)4uTXyu3W$ z&+|UdBaqSH;9yeIv~Bi~!C(+0k;s>}wzg})VqSv9Vrf-XRp0L<5(zyJ2NKi?d|nlU0tsM$8NxXB}o#hsuGPx@pwFq9UUG0z(D{Z(?Ux;9`E~S z7#^8mVtNy^MM026lItsw3Q~8nnshpi-EOD3x%qB59PXB~E9tt<^A|&uxleHW<^iJ1 z3Dy%TioKHgAJzE0V_dm>29wEzAP6Er4#4M|Ardd)v?9~nKaD{EqiCS2JcX@TW+7HW zFc_w`)}1#*0J@)!;Gf%K;A4oczwUn($I3D8oNzq;6sQ>e~h)Y zBn8I58`m@~AJ9;zAc_J%7gv!@68@PL-VTM3Bm?h9=I{lVXsEOA|AQM>8*!B^Q{g&9 zd^LqA2vn98W3v^KL}cr?pX;qn`G9mf4S>~ZrSpCh&cYC*-y@VCRXBgPic`l+aTr59 zx>t|YYDL%e9Z$|0HBFPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=x^YDdKAY00O;9L_t(I%Y~9lNK{c6$A9-2B9HUlcZEg2}!ruk|#O-!t+cwc?l%}SpbuBF|cYp-|(##6G4a2zg zW8isbH{JbH~1CLIXsM05yJPMGFsQC0JYS$K{gvG7?8s+;n~zrS-vQ zHZIXA3u;W55-33`Tj`7S~rZyrj4N<2s7%BvV@-AnF@avmi# znjcPx*kp1vD}m!UEL&Dd>#1!l(0Wlv-s1D*@g<%{6c$ih?4n}6jL)ax^Xk&)XLm0H zpeV|2+qOkIofej53CpsCX_~?`O>z3%Rk8Q{py)LmF`0J6hqw^OZiR(^$@&{VzcNq~ z3K2cGZq<@v(% zJn+Av0P^{~{Hq|7$*4aHQ&UsVwAP;1e);dwENk5?H@#Y=`mMA+GBSMmcfAvhMp8s(D8+N14*?|z#(@!UchtD%RJ3Hx^0Bi?xM=T;qMNKOjH3*tp7Da)G&3d7Y&Ej{S zzgZ!(Kg`(J*hHyR+HeGjSdff@emO^9-6uY93cEdoS9STY0w41bRA6~+lLreW((w(( zuk|uGIC$F8vbBJ&hxZ8G8f7kWm&6Ifg{!wI#7Eg1gm4Z)qQ@p(Nl;n#Xm@Q==`GI;9Ykw`V??9uJxE(Gz7qqxg|1{AoEVrU{he#{ABcmBQ|OKH z`n|#T1K_6v*S3_~nu4P@c0J?nPU!Az-T4D$DV59Ru4l8^lfLhJzX)T@c9Y1?n;2uZ lIoEYt=I7@h?>coi`~can9$m*|i>v?u002ovPDHLkV1kz;A=dx^ diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/image_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/image_shared.png deleted file mode 100644 index ca874f1471644ea4125bb2c2552ec5461b7e7dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0eCP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=xWInZlU>00O8(J-?pSx>NV}_xAwUmJ-PY z&^=;PlL#UL8jOG#K@5mC_~kfOxx|hwVJ=?0(B0m?n}LCW9^2HxvLUlNL^P!+YDKvS z_1f%;qCmu=FdnD!s>f@TG3LJ^k6u*QtnED2dUW4%nj65aC{7Ii&AqOJkKAYXkEl;dP-6L)i(9w;hz5f`Bq5|+7?MH}L19RXkOmR$!|T}C&2g@G?%emIMWf6$`*`5tJsb|tIp;aA zpozJ;xmatRZ~!dJvdiW2yTQT1%fR|?1-V@Al9bZ?iBS}pQmJH$#o}9_Jtf|J%|V@8 z5r!c{LqlgqM@OFlNA?T+6^`Q|rKD1+Fg!ebc4TB^3Mc@G<_ZHr5KJbCBuUaXw6$d! z8-L32qwQoI2ivwO6bkh9^vYB6#c%Fw4 z!v5z9N^2fHnFV9m41VA^4zBB_YElAP>lEkTFVcVE90FKg_4o4sB_O3_ZS5PUPWIw@ zSw4SVM@mVf(MTJ-8yI7V;|5A89LMIx>jlaio6IkKAZyz!Eq|e2uOo!Ob=|#5tk&+; zYL)Hn8d54gF0InrQ{em7HpdEimX=qEqL`hX`oR-emWAiJBuT>amv895c%J;>P5`#5 zHEtCrsMSKcx;ha;q&-kdA%s9{O;m3%@pP6$?KzZED5dD=$Pw;DB#A_8jWGtLRC)y| zCBDDG^_yc@T61@NigLL^skFlM%qvcx=;6-&Nqm2UMm=pLp63lnDNT|jCXQnh$FYf` zXpdnSrYNN}`F#EwG`}*?+uhxLMYkMz|GiuC0w4&22f*S_kwjDySD)cB00000NkvXX Hu0mjfaI78Z diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/kcmfontinst_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/kcmfontinst_shared.png deleted file mode 100644 index 31216892e94121e4f5ccc3a9d615f6f227dcbb88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 782 zcmV+p1M&QcP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=w^_D83{B00NFlL_t(I%Y~9nNK{c6hM#li&d;^mm==u^m|=fHix!3SLkl5-Feqw~ zD=Dyu7Hz|QK}gghkODC(ivEaxpwJYw5Uea}k!TZH+DxW7Iy&C&+;h)qk;zP1z3}mI z_&(nAy)Um|79AZOu2RZl9vFrZ7#SJqt*x!y2YmTs!M5!^QcC@|avVnw3=HVz=H_QW zG>?3?YyN{wCPQ6a-NvS-rbob%-wFN+(=?G%GB!3weSQ6=#>U3`KnZ}Dm9RUNO5O21 ziRb0p5DtfExpt58(kMaGBoGKtQc^;7b@kz7GI_!LwJ3xj7&Hk6%{+p^PYEvHZsp@hBKh)iA4;jb;fvRO)NJ2O=gT;EpT5If zkiw8NtSu{MUK5p4b0wuDkr?GoJW1>26RfSQq;lmlR#lXLND3{XpABYq8aZ*rvLb{+CXc&%sM)av6|(6ah3?@j z+sY#-Vet0-6rFtAaCVg}0q@O>X41WGBK?^$l#Yo{n`6AghCT|hc$bEP+hS5!!N zT?L)fHVtj#IyIU3I_H6ul4SBLO)a-Dl;YyG`>bEIgq}zNpVJC!uB%Px# M07*qoM6N<$f@BO@w*UYD diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/knotify.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/knotify.png deleted file mode 100644 index c4e85b41f52bb427869719382ba013ae40c84f6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP))OmJ{8I2Z;8 z2PX%22PYRN7#&$mjG8bRO&l~4VkDJ7Dm4KbQE0WTjTBqjzJH&CiE$~d-0|M~JIOt_ zh5suLczbd)SJgCb8Bv~mQTdpQg#VypMYaxQPtU3AQ}KnG9&z5ucrz;A{)pu;Sw Rx3d5M002ovPDHLkV1k|h;ywTX diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/knotify_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/knotify_shared.png deleted file mode 100644 index f6737ca1d57cf91aa58914338c5637a743d3e421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=pZy-GKxE00O{CL_t(I%axN!OcQY!#otV)?LbRAWiNtDTZ*78g2W;{h%sW+7z2sQ zL4kwe;6aHOF~*Y@G^iI7mkSXk22Gk6jRZ7qU;-47uo!__mbO4kfwq(`L+9^7gQr4# z$1g9xyzeDXg#VKikY_5=v&-Ys3s0}PCMTFp%oM<8NK|Qi6SRefoqG&L+51ZK^;vp# zUM5Gkb^FnLQE!e0P?lY4ew&eZ*q~M?i4-z1Xu?AX2M`SNFpn)_VAu^{osI@btgJX$ z@^w5wPt7j;xzIFdS^`3`nD+usXOJMm2crSV(3Fo%IHV9uVh{=Q2zZ?E%#N&hW_m4a z_Wt3Bd+Z}3p6;j}*ql6V`SijPwsj4JT*GEzb>TY@`T<}L!1`8gYmYTf5-@V(R>r6a z7*-5`;sM}XLrb-OSIQYCHeTm;E&Q5sxLQqjYFai;Q2E3`z{D9EADg-fA*6k9UU)y^ zCLM$G0xuA9^>*tA01!n1D2%lYSJ;T)Zn{xd)z&jdR>4p!Ap(7xoKi|DVl2+pNK*1= zHeO&9sl~?fs#=Y1w`SaGUyXz#2+GqAHg(!ajUkD01ZnhH{pg$YfMZouM!b~tPWg{B z0Faz@`0~S7o%cBfu&@GX-2&QsTv!ZJ;(iyQ^tLcA?B~!k6~LIq2Z@M+K^I3k))2!0 zQeDp3dpAcNeuV5iB&-;IBA~P+1vBO~UyMRVyka@^tbZB2N(re94PY7o`8TZ{dFq0r_3a*6 z;`gty?QNh42xN(EuYeF5?oI)ze54An42N&ub5-N1#>;$qBg=rW?x2)p$KN7sI+%JC zl*BR`@O&3tGm$Fb?6Iq$%7L5gHek67XtGcLQ~XQ?0FW=_>6qvs8j9`_6=jjJ&M^`_ z38a)Lr3iw6SS+^N0l-9dg6Y9&{F0AlTL1_I0M}EuIH6skr@Iv?C7$Q)EwLhA{JBW8 z)yzt1g@wWbnI9Pd+N|Sv`B`3%Ez|qpA-Z$43ealf&Tr1M55Un8`}esSacEaB({ zlz=BUTd?%!<)l$@aEYdAGC45Gqo;EiTT2Y~eIXj_t_nAPE8fjLhI$~E+YhM3noRYw z<6dI@Rg%s6&nQLpp+P(z2OynJGc+{RunzzbaT+<3nngRX*uC34g^G3?200000NkvXXu0mjfD+DEy diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/kpresenter_kpr_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/kpresenter_kpr_shared.png deleted file mode 100644 index 0dd8eebdb30e3fc9c969202cc49f4e78d0071441..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmV+s1Md8ZP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FWS01FWTe`H^g00007bV*G`2iXK0 z4=o;A1hJ?900NOoL_t(I%cYY|NK|1IhMzk>*E`)AXVi4W(6T_tMN~*uSQ$iNREr=& zY!gD%B7`=9gt>B8f*3>)wGcvxu%IM0ON+oF%@8HD!k@;;(eY=Tapumw-`7Ia#7)$J zvpes@!wW~LudkQ<$2b7aUpz+4m_=e?i6k*2jH1|xCc+45BBX`p^e{a2dNr7rRz&Y} zu?$FYc#u+%Fc(QtJ*W;hNP*_`Vwh1JHWeW)c4Qs~xh$Nn=K}-FfOLK9Kk2uw0008v z0EG>Oxb5zBM{yCSZeJZ2j$A+pfs_)m*P!tZDewE~c@Wnlz5c~&<-Y2{TMp3SQO+n>5` zBX8-C_R}%m!Hby})NHRoH+8ZcB}Dy2%wcN1Px_&738 zIA-B>DGY^_HGrzBG+u7xr0+C)7k5!rmWektoln#7e!}4JHVvWJ82lEYYiN#) zWvv67ZJE_rTS_9jhnc6U+e_0w1^|8o@F-FvxQei|<&O@#^$btvMXf(1(*6gNY_rBkQs z;!vC%-TMc0F{4`t!9@_Vxd% z1t)4Yn}Jd)WQGjGFnhgTYkhtF5pXcokjv%jQ55O(mhbzz-EQkfqwxVKB;Y5zo^|u2 zJkMieW8>D&&dyt)d=~IuNhyh!U@#o8`)wB`70Ys&)f=k>L4ekpY&MG!!khx+OADB$3BbYc z5nHdf0H`n3S-ZA|ZQIl1O%@-&dpvt*Vx-`D;WL>yjVC=)BMYU}Y=087I%U4>Lma{4 zeMzPy@H}ucJ&s;JK^^Q^`-hljfJ{L=I>LxS8W8>gUqEPq zHpH|CaU26+r&BDtLrkDha=2u=WTQM6at@=5Wrzxd%3wk3(=!PVuDTJ=Z|(zvoLwSt zUl5@w$TaP_5UpdZyvzJVA_>5~yLV2_nT+jhgyX*gFdpb~rBZpUCOXf{T`46127|#X a;Ok$myVj(dA>#f30000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=oNyv!ToY00M?dL_t(I%Y~3jNK|1I$A914>)g3B;|!DKZ4$JXT1d6X=xzI;Olspw z3hc2;qD8fiB5ctjkQPEjxG5;AMJNar2o+-qJGgK!-nm~J18uDSa5(3{ z;dlP$2<9|6IB0vG=dg%;KA$o@J)LN8Z$AV~l?{Z$;WpQG<=?`xEIBqdCVP8(p8=5t z@VPAck4)2~qoZR>PfyQ7VCkQLe@azVT-PO)O3~TbxxKr)`#!L|3@|x4xhOygf#WzN zlSvYZ1g)*D+v4%~egJj;;P7w)!!Q8IWHa3Ua2rqcXi}Tly?HmbZ6l>56bd1PP|5(6 zu@xwa0>IQvfv&q<0JJruQ&<=o5v$l-Hy1@&#o4D#4iGc+Exn&URzOYgoUwhWgcYv^3YV@5s56We%*| z7evKsR4s@|XE0{AbH3{|*B>VlnuceWXs(S=EV^7eccRg#jvrp&AQ)XnMP(3G2R$Ce zSK7$s{?F`ch_T8DlePrU$8-EJU81^>&nC>h3jjqchoac1ekc|4@~ diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/txt.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/txt.png deleted file mode 100644 index 870f1abaa53ecbebadc99c2addf48ca8dd479139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)wo&OKqKgK9w76VrY5I`)rY-DC;WcdG|2}mAWfhs1R3z>&tEtn82|(jh5m40I2vc+yI!Zpr{0ip}PPefG`XIX$A!%Nb|mZ=fExi z8TubbRs#qi6azr<4g!pfAk4_%=x7KJ1CSUtLjVGZ1v$GSr*~ojK!5=N?VlMr20Hfj P00000NkvXXu0mjf`u_8? diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/txt_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/txt_shared.png deleted file mode 100644 index 9d8454cffb9d9e71f46ec8fa3004f1c3aa73c1a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmV;i0#5yjP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=g(f8&s|U00J>dL_t(I%Y~EAOVeQ-$6t?Ma}$3|@!-t}!b2VkG$%$36bW|i&>@Hd z4?$h3YxxHR{Rbl`qDx(hl57*ILr`uwFdC6E&1u`D>390wzT0=t^XXugxn}RnbNPH; z&-?v(K9Ay;lF77ih~n`Slapc9uppUC%YIcVMjWRmxm-~;Hg+VLOiLs(U3W=SBcNp| zEUO92`co1N4sa0Ce6TSZO#q-Z7$c014p6HZ;_=k)nn+|?_Ttn5CME^}Fa~Nh!F8*E zAsimXwjGK^hlPd3|2q)bg;XjYT5D|E!F64Rhfi>5ggpm)G0NpCuIrJ{Z=rP!V}$?C zKxEgx)`n84OnRdTem~+5&_abByWIF0jSki;+3-Gp3=6SRr zo3@j$0~n(b0TH2RCrimc!dlTI(AP<@)8d;gR82doidudD;^AL2(0cb&3Y1dZxOSeS zOV9Y4$`kCe80rwt_9(W$XL&kx@g^%T->Cij-RNVju4kBA&e7D|f}+OhzFwwoPbz?) Xeab~zNqOuo00000NkvXXu0mjfpLsE@ diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/video2.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/video2.png deleted file mode 100644 index 0a26d45073af7d796df6f0393b0c6cc2ad13fa06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmV-t0+{`YP)g9L3MpCBZw~x`G>R1&-RRjl8oK>_G^72olAAq9T;xgG8+t3lyS)66&G$poxff zD;j$UYNnK!NQ=;=5mKzksdpke=hl9lo)YF(tk3iJ^F0R+PzENGsmtwl50`UWgu!6A z5(mW8EHA|xlgXs@R8tcGAeSXtiBACbQ(iVwAl-y>vJn@uJ#)!(ujvMn*^Y`O7!@ z{SWDKxztj%|B2OV4JnF3kH=FqRoMuFa0_MD{taa2Bm1hZT9^O;002ovPDHLkV1j8? BAw2*9 diff --git a/web_client/src/gr/grnet/pithos/resources/mimetypes/video2_shared.png b/web_client/src/gr/grnet/pithos/resources/mimetypes/video2_shared.png deleted file mode 100644 index 704b032615d24ea2c369084e24aa82c01a148b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXK0 z4=gJctVGHH00P}fL_t(I%bnBPOOpW@2Jq+GKAUaBZCV~`sT=9cRt~|+3o8mD2)yYp zh^UB4I$hL)sKB5j6?9RMsF6`ksv(_MT3JdpQ)k+7hSZiWo4Rjq?c4WsA$d_2^$QCJua7vo!vgh6|%Xdg?9T~ z&tKuRv@~a3T`k+6c^Oy8NQ@kdC3)TLrp;!X9HRac*6a1o{rmP+e+`9TpI?gfj10&! z0jOY^T?q4xEK5(1uObu*)vJERI-SnBdDEuq!eTo%Zrz3RwP(@W+Y51ufTW^8qY)r| z7ho_Lm#b8&L%(`wRaF(Qx|=voGCWQOh9z!TzmCtm-HegE($qo#1P}sHD*Tj!AUL&J zZM7sx@V@dR-EXxf5yc1uQH$TU*Vq3b& nG;K^885-)ib9_AH_W{5UY7lG>|8m3300000NkvXXu0mjfT+o8B diff --git a/web_client/src/gr/grnet/pithos/resources/myshared22.png b/web_client/src/gr/grnet/pithos/resources/myshared22.png deleted file mode 100644 index b867b3037fcf0db271fcf0bd1155d870c1744587..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmV+l1oiugP)yU~x)aew1B!7Wv`PPx3L^M}KZ8h{ML=5e)^qIyG7(frPM3d+6=G`Tr$SIGdnwbgKbLg z2ak=7z3Dj4nLT^8jS{8Ym6~r6h*Jj%*=e-4y*u5rBb(2>WkyYkH?C|;)6Gf;5ZIJ5D<&SwAT9b z(b3UtJFwn7M>CmB^7{4b+`fIAdc97w*~IsKf*`;c13(Z2IF6HY9H#_))7G(wywqy7 zocZ~A=H}*DSXf|VV}pD?Pb!td7=wsVC=^I0la5mA`E5B?N@e%%-7CYx!!(;sQmGXA zd>#=2;MT2M)a!Lz*X7!^Yf>(k3+=!PAPmEwmzS5<3WWlLgM;++^xT62ba!_%Ffc%W ze?Lo0OY316{<2|5?@?|AOLF-V?cz~u3gmD)~Hk}uH!gAY|HW0 zt5<&mzCL&EoNuf}e4mclSrQWyBraS)-MK@k6z9*M_mxr;moHx~w*%kXFGP$8U?`m`g(6qPtSP#k+dGF-Oll?#)u>X(Ubi9B6{*Ixcq3=$dIB~}FyvfPQ zNvhTAJ`s6RDK%HC)&4qt`m~D0Vy{_iUl)-#N~O}xwvJP&)Kfcm?i>)2iEK9e$@uvA zXV%&;wbtKa`cI< zYXCm}sexKqSsCo=>Jor>JicXvs~(=_VRcGtUF_`av;azN9rID7jWOwsjg9!!)D&84 z9LK?0i!lakEyZGyk&zLy*(}q4w)kf)Y771S-{9~60AhTK7E0AH@c;k-07*qoM6N<$ Ef>faI`Tzg` diff --git a/web_client/src/gr/grnet/pithos/resources/othersshared.png b/web_client/src/gr/grnet/pithos/resources/othersshared.png deleted file mode 100644 index fb96ffd79290569cc61eab99041327a51c83b7cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1185 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 diff --git a/web_client/src/gr/grnet/pithos/resources/search.png b/web_client/src/gr/grnet/pithos/resources/search.png deleted file mode 100644 index 4f880ab65f706275f70f27574af9a709cb41b6ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1169 zcmV;C1aA9@P)nPbPK-5vETJT>rjaVEOlJVMK(-1O_4jKmakq81v?B zNO;X4-2YKfL4a9Un1P>{k%5JUk>US;28LgM{xh(?dd9%_>edB@Uq2I5QUWdzG8iC$ zzy?p6v^?Pzo9z7GDuxVVB1{aN9E=RCtPneY{rb} zVP0P31AGPp1Q1hu`+S90|M>fVDH}3KNis8ti?J|BOR_LX0cjCIW(H19Mus2XfzAfn zBPGqrz-?$K@arGrd_pb;2q31PKY!-`5LXir7Gz=&;%8=%5N2YK<^^JIMuy)&*D6Z0 zG6)DTgMGos1T;)+M&LFx&c0e0Ro8W{V$dP4rxiS%XolZ<_89W7*IkIh=D=N z!2Rz(g8)CsQYHpI9wr7ZHbw>+6IF(9-+sj7GZ-L%SiUlFD@brMfy0!EnSlX_7+8V$ z)sO!Syg-Avff4u{7z`{RR{$~4E(R$%F_6J{T?`OFEI--!8CZe3fN{g{^37j{_wWBQ zJOEn64D`ALHxmPpV&Gzc7|aYc_%9HD|Nawi7y|?l%iqs$fG&k3D}JC0Ie=aTxlEi3 z=zSpLGmy;*#B4|g{{rG~-@fBD7$AU{zQ4Ht0F%Ks3`LRpE`g5Vt(-8 z{10hS)teulzKW1BHee70CMzaJV0H!u2P-2Y(m>!g(9r(YSq$3R$_$K*j0cY$+j#?* z!2kgSFDo1zk^}gqW#(H%2Mg%fXoJ%1d;2&*)4`sBiBFD!m+377)2C+!Y9c}kdvAT&2vP$O zKx7%b>&BN0Dx6FYU*EYBpy%oWG+c&3fcXsr3(#;W9zlg8_rGie2q0#1gX7TMFBhbl zm>#~obveM;!T*uy)Ve0gA3=GOa3;+Sd$Ur3!Zy-LOlancd jMJtNo{)-|$iZ zGyougSbqLx^nN3t+bE>3!>BCxkAa&5sQCv2!}|}v8QA!^8Q3MwWnO>%IPJsbi+2B+ z7@sjPpc(=YKun*Qc=Om*)EO0||1+qGGco81Ffs5jGcd?Y1HHlfpFvcDnL*M@NBK7s zli&BR-xz-U_=$o60*K`so1n3{7&ikK$3F%kpcC1D{byihWn>WMVr2Ni!^ptK_@9AK zLz>|nD~tQb51(f+v$3JL03d)^{;=_~bFuwn`0(*B!?_>-7`V8Y7^L`^7=RQ57f=D) ze+C8?W+sMTKYsFj{Pcx^l^xXpfB<6o{r>q6MpkCdzrX%6`~&LZ;sm+^=mjRAMq!Wv zK>X|PKZY+KK7RQ0`6~m<&p!-|Kv%&4Kmakly>;p6w|AcyelsvL{QS+p@DCVOKYu`Vp*WKt{y(e@aW#t&EJ8V|9tdJu1q{qg91J=#e`O86ZC3d9 zoAKKBpZ~vo0|xewU;h{Y0suh(zW)RP0s;X3`}v*Gtf|uD%*b;ZBONyh3kU=D>+bO6 z+TX4n9UjUV67*vu|HM)vAr3?K*6%d?{svzE0RQm+00963hy@f7jLghH=D*V)pFN9U z{11!?UT%gD&t5WodiRk*OZ7hk^Ys-H%AxW>I*!o{Y^#_0zB>AT$%~Jy2|%rH00Ic) z1w@npqliaPfPsUPgW>m&9}K^KF)%3ce`4Tyed5-w+wZu=m1He69V{4lKHO5f|M08E ztFO#^00IbM05E2lSXdZ1`FMeOi4_>aUx5Mli$PA5m4WBW&EGFR{M&iz$Srz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-)Ja4^RCwB?le=nEQ51&12|hp`!1QTlh}f%zDeOWr zsECD##x7_jXoLw2iXv!YTJs7CYGq}iwka$Ef);^bE==Z}v(LJ1i!&HQVxifv*}GW( zx9+W+GbcHx04^=O%c6#=q2j12DvqgPs>5rz86k?fv$lM@H8D2Y0IDQ>n7@38oO4Da z5BG=q4cmN_%kV`FQOC&orwBLH=h10flUKs;Fa{GHl^(t}E!WI=Mr<-qTu)0pa5a!-|q9|(yMdC*9Emc{O%8D!Z zS6G_w90H60s0hiNyBEj#xijFwRGY_F&#}9`&$HR{yqKG$*zNQ3;mqG65GoDKgZa)` zDlsfF`+I#V3u+G*yVpqOh{e$eT&1b7`S1;<@2ybm_UYVtg{ULy)as}n2N0oBr<7=l zCeGrcY0_Z8($kww_017&I&>t3&?bf21G7NAF?{{}7D*lRX1JQE%*Oycn4IbU*D|$o s&V2c?$Hvy+pVzX}KHX}abe(?<0B^{ZDO#tZ7ytkO07*qoM6N<$g0F)S%K!iX diff --git a/web_client/src/gr/grnet/pithos/resources/trash.png b/web_client/src/gr/grnet/pithos/resources/trash.png deleted file mode 100644 index f25429c30fd8891f324b357da386f220409aa022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1117 zcmV-j1fu(iP)4%oy8Bq3M*FY3aw@nbPmM zU&n=+p|piA{3UPBn{&?l;rvR08FSqErDzFdmQR zGeuGSp-_mrx;kvzCZErf&*w>{QjX&|OQvbsmSy>>tE)A~aVUgkS=hFXWm$Qk{V6aY z0E7@vCWJuKG?JO5XDBmN<}dZ5D>_x)Dm)$!uIutFiM6?+C{Jy;@W%xXetnQj(MxDs zG&H|Pce0z&*->&Uxo3jcIbN;F*+-n~{tmUw;`aUPT!{Lp4piexm%*t)PVYO7ZQGkV z_N-l8b{2X2^?H2U;pF=tGxd0itAAakYp{zWyN*25?S_sOMWH|0Pg|@F1%(gmKjOrJ zlZ1nZ_>>Z6=4Ti+Mz}F{jT<8+oY?otrjCnw_@yw$qQTU{6n$fTyi?tXSKA7}3#ER} z-~WQ&l9y;7`I(9N^rqnAtL5!HcOKs1-sC+}xfGY|KM}0*tvX&wEqh4O}F9L5=Vl~#(k_bH#h%Y zT3T9DTU)!Uyu4i7y?Zy|aG08!8eG>c`~k&rR@_5he7X3Sq|<5A=`@C6kj-Y@!NI{{ zAgf9#|88k%Y4m!%BoYZ?u^7F*y#SPzl~G?`&#`02icWmyt8{dBFf=rTVHhkdEFh&U zEDK-{@S^~J>FVmTJsuB%K!9K{NH7>gRaH`{6z%QpjE;^L!4ne`^!D~LHa5om{QPQY zK@M<5L?V&flarHu(P$LQvet!d+w}GIEfuP6-n==xQ5USz?MNgNDfDqiJRWC!e7p!N z1i;<9cd>07DJ8L3Y@Nk5x&}|W;-ZxD%Uic@RR)7Wyk0M+X%>%}$z--fqtOLT(-gxn zwmk=$1%3ih3dPOM&7T7;x~}hW9LFz&z%l_~ z?(d%h7xdu4gR0@-;Zp+x13RaurvtfMZu{KaT!m?xej$Vl%<8(H)->&*uIq_FATZF{ j+S(ruhv$J6Kmz;=OPMpIJbpl@00000NkvXXu0mjfnd>1G diff --git a/web_client/src/gr/grnet/pithos/resources/view_text.png b/web_client/src/gr/grnet/pithos/resources/view_text.png deleted file mode 100644 index 8d0d8494ce035d05f80d0098f180c0a92f3bcdca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmV;r0Y(0aP)Y}?qR}$)832ln>2dQlcT}$hq6cGG7 zx~QvE5n{V3Bn?5Z-55j>A - - - - - - - - - - - - diff --git a/web_client/src/gr/grnet/pithos/web/client/AbstractPropertiesDialog.java b/web_client/src/gr/grnet/pithos/web/client/AbstractPropertiesDialog.java deleted file mode 100644 index 1a2262d..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/AbstractPropertiesDialog.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.TabPanel; -import com.google.gwt.user.client.ui.TextBox; - -/** - * Abstract class, parent of all 'File properties' dialog boxes. - * - */ -public abstract class AbstractPropertiesDialog extends DialogBox { - - protected static final String MULTIPLE_VALUES_TEXT = "(Multiple values)"; - - /** - * Text box with the tags associated with the file - */ - protected TextBox tags = new TextBox(); - - protected String initialTagText; - - /** - * A FlowPanel with all user tags - */ - protected FlowPanel allTagsContent; - - - protected TabPanel inner = null; - - protected Pithos app; - - /** - * The widget's constructor. - * - */ - public AbstractPropertiesDialog(Pithos _app) { - app = _app; - // Enable IE selection for the dialog (must disable it upon closing it) - Pithos.enableIESelection(); - - setAnimationEnabled(true); - - } - - /** - * Accepts any change and updates the file - * - */ - protected abstract void accept(); - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - accept(); - //$FALL-THROUGH$ - case KeyCodes.KEY_ESCAPE: - closeDialog(); - break; - } - } - - - - public void selectTab(int _tab) { - inner.selectTab(_tab); - } - - - /** - * Enables IE selection prevention and hides the dialog - * (we disable the prevention on creation of the dialog) - */ - public void closeDialog() { - Pithos.preventIESelection(); - hide(); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/Clipboard.java b/web_client/src/gr/grnet/pithos/web/client/Clipboard.java deleted file mode 100644 index 22275ef..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/Clipboard.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import java.util.List; - -public class Clipboard { - public final static int CUT=1; - public final static int COPY=2; - - private int operation; - - private List files; - - private Folder folder; - - /** - * Retrieve the item. - * - * @return the item - */ - public Object getItem() { - if (folder != null) - return folder; - if (files != null) - return files; - return null; - } - - public void setItem(int _operation, Folder _folder) { - operation = _operation; - folder = _folder; - files = null; - } - - public void setItem(int _operation, List _files) { - operation = _operation; - files = _files; - folder = null; - } - - public int getOperation() { - return operation; - } - - public void clear() { - folder = null; - files = null; - } - - public boolean isEmpty() { - return (files == null || files.isEmpty()) && folder == null; - } - - public boolean hasFiles() { - return files != null && !files.isEmpty(); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/Configuration.java b/web_client/src/gr/grnet/pithos/web/client/Configuration.java deleted file mode 100644 index 085a30e..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/Configuration.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.i18n.client.Constants; - - -/** - * This interface contains bindings for the compile-time configurable - * entities of the application. - * - */ -public interface Configuration extends Constants { - /** - * @return the login URL - */ - @DefaultStringValue("/.") - String loginUrl(); - - /** - * @return the authentication cookie name - */ - @DefaultStringValue("_pithos2_a") - String authCookie(); - - /** - * @return the separator string between username and token in the - * authentication cookie - */ - @DefaultStringValue("|") - String cookieSeparator(); - - /** - * @return the relative path of the API root URL - */ - @DefaultStringValue("/v1/") - String apiPath(); - - /** - * @return the version string - */ - @DefaultStringValue("") - String version(); - - @DefaultStringValue("X-Auth-Token") - String authTokenCookie(); - - @DefaultStringValue("_shibsession_") - String shibSessionCookiePrefix(); -} diff --git a/web_client/src/gr/grnet/pithos/web/client/Configuration.properties b/web_client/src/gr/grnet/pithos/web/client/Configuration.properties deleted file mode 100644 index f21bf3a..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/Configuration.properties +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright 2011 GRNET S.A. All rights reserved. -# -# Redistribution and use in source and binary forms, with or -# without modification, are permitted provided that the following -# conditions are met: -# -# 1. Redistributions of source code must retain the above -# copyright notice, this list of conditions and the following -# disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials -# provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -# The views and conclusions contained in the software and -# documentation are those of the authors and should not be -# interpreted as representing official policies, either expressed -# or implied, of GRNET S.A. -# - -loginUrl=/. -authCookie=_pithos2_a -cookieSeparator=| -apiPath=/v1/ -version=2.0 -authTokenCookie=X-Auth-Token -shibSessionCookiePrefix=_shibsession_ \ No newline at end of file diff --git a/web_client/src/gr/grnet/pithos/web/client/ConfirmationDialog.java b/web_client/src/gr/grnet/pithos/web/client/ConfirmationDialog.java deleted file mode 100644 index 8160371..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/ConfirmationDialog.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.VerticalPanel; - - -/** - * A dialog for requesting confirmation from the user. - */ -public abstract class ConfirmationDialog extends DialogBox { - - /** - * The widget's constructor. - * - * @param message the message to display - * @param buttonLabel the label of the confirmation button - */ - public ConfirmationDialog(String message, String buttonLabel) { - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - // Set the dialog's caption. - setText("Confirmation"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - // Create a VerticalPanel to contain the label and the buttons. - VerticalPanel outer = new VerticalPanel(); - outer.add(close); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - HTML text = new HTML("
" + - AbstractImagePrototype.create(MessagePanel.images.warn()).getHTML() + - "" + message + "
"); - text.setStyleName("pithos-warnMessage"); - inner.add(text); - inner.setCellHorizontalAlignment(text, HasHorizontalAlignment.ALIGN_CENTER); - - // Create the 'Update' button, along with a listener that hides the - // dialog when the button is clicked and renames the file. - Button ok = new Button(buttonLabel, new ClickHandler() { - - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - confirm(); - hide(); - } - }); - ok.addStyleName("button"); - inner.add(ok); - - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - setWidget(outer); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - hide(); - confirm(); - break; - case KeyCodes.KEY_ESCAPE: - hide(); - cancel(); - break; - } - } - - public abstract void confirm(); - - public abstract void cancel(); -} diff --git a/web_client/src/gr/grnet/pithos/web/client/CredentialsDialog.java b/web_client/src/gr/grnet/pithos/web/client/CredentialsDialog.java deleted file mode 100644 index 1900e98..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/CredentialsDialog.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.VerticalPanel; - - -/** - * A dialog box that displays the user credentials for use in other client - * applications. - */ -public class CredentialsDialog extends DialogBox { - - private final String WIDTH_FIELD = "35em"; - private final String WIDTH_TEXT = "42em"; - - /** - * The widget constructor. - */ - public CredentialsDialog(final Pithos app, final MessagePanel.Images images) { - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - // Set the dialog's caption. - setText("User Credentials"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - // A VerticalPanel that contains the 'about' label and the 'OK' button. - VerticalPanel outer = new VerticalPanel(); - outer.add(close); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - // Create the text and set a style name so we can style it with CSS. - HTML text = new HTML("

These are the user credentials that are " + - "required for interacting with Pithos"); - text.setStyleName("pithos-credentialsText"); - text.setWidth(WIDTH_TEXT); - inner.add(text); - FlexTable table = new FlexTable(); - table.setText(0, 0, "Username"); - table.setText(1, 0, "Token"); - TextBox username = new TextBox(); - username.setText(app.getUsername()); - username.setReadOnly(true); - username.setWidth(WIDTH_FIELD); - username.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - Pithos.enableIESelection(); - ((TextBox) event.getSource()).selectAll(); - Pithos.preventIESelection(); - } - - }); - table.setWidget(0, 1, username); - - TextBox tokenBox = new TextBox(); - tokenBox.setText(app.getToken()); - tokenBox.setReadOnly(true); - tokenBox.setWidth(WIDTH_FIELD); - tokenBox.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - Pithos.enableIESelection(); - ((TextBox) event.getSource()).selectAll(); - Pithos.preventIESelection(); - } - - }); - table.setWidget(1, 1, tokenBox); - - table.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); - table.getFlexCellFormatter().setStyleName(0, 1, "props-values"); - table.getFlexCellFormatter().setStyleName(1, 0, "props-labels"); - table.getFlexCellFormatter().setStyleName(1, 1, "props-values"); - inner.add(table); - - // Create the 'OK' button, along with a listener that hides the dialog - // when the button is clicked. - Button confirm = new Button("Close", new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - confirm.addStyleName("button"); - inner.add(confirm); - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - setWidget(outer); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when - // either enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/DeleteFileDialog.java b/web_client/src/gr/grnet/pithos/web/client/DeleteFileDialog.java deleted file mode 100644 index 9b67a53..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/DeleteFileDialog.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.core.client.Scheduler; -import gr.grnet.pithos.web.client.MessagePanel.Images; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.Iterator; -import java.util.List; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.http.client.Response; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.VerticalPanel; - -/** - * The 'delete file' dialog box. - */ -public class DeleteFileDialog extends DialogBox { - - private List files; - - protected Pithos app; - - /** - * The widget's constructor. - * - * @param images the supplied images - */ - public DeleteFileDialog(Pithos _app, Images images, List _files) { - app = _app; - files = _files; - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - // Set the dialog's caption. - setText("Confirmation"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - // Create a VerticalPanel to contain the label and the buttons. - VerticalPanel outer = new VerticalPanel(); - outer.add(close); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - HTML text; - if (files.size() == 1) - text = new HTML("
" + AbstractImagePrototype.create(images.warn()).getHTML() + "" + "Are you sure you want to permanently delete file '" + files.get(0).getName() + "'?
"); - else - text = new HTML("
" + AbstractImagePrototype.create(images.warn()).getHTML() + "" + "Are you sure you want to permanently delete the selected files?
"); - text.setStyleName("pithos-warnMessage"); - inner.add(text); - - // Create the 'Delete' button, along with a listener that hides the dialog - // when the button is clicked and deletes the file. - Button ok = new Button("Delete", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - deleteFiles(); - hide(); - } - }); - ok.addStyleName("button"); - inner.add(ok); - inner.setCellHorizontalAlignment(text, HasHorizontalAlignment.ALIGN_CENTER); - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - setWidget(outer); - } - - /** - * Generate an RPC request to delete a file. - */ - protected void deleteFiles() { - Iterator iter = files.iterator(); - deleteFile(iter); - } - - protected void deleteFile(final Iterator iter) { - if (iter.hasNext()) { - File f = iter.next(); - String path = f.getUri(); - DeleteRequest deleteFile = new DeleteRequest(app.getApiPath(), f.getOwner(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - deleteFile(iter); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to delete file: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to delete file: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - deleteFile.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(deleteFile); - } - else { - app.updateFolder(files.get(0).getParent(), true, new Command() { - - @Override - public void execute() { - app.updateStatistics(); - } - }); - } - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - hide(); - deleteFiles(); - break; - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } - - - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java b/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java deleted file mode 100644 index ae6af28..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.event.dom.client.KeyDownEvent; -import gr.grnet.pithos.web.client.MessagePanel.Images; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.VerticalPanel; - -/** - * The 'delete folder' dialog box. - */ -public class DeleteFolderDialog extends DialogBox { - - protected Pithos app; - protected Folder folder; - - /** - * The widget's constructor. - * @param images the supplied images - */ - public DeleteFolderDialog(Pithos _app, Images images, Folder _folder) { - this.app = _app; - this.folder = _folder; - - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - - // Set the dialog's caption. - setText("Confirmation"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - // Create a VerticalPanel to contain the HTML label and the buttons. - VerticalPanel outer = new VerticalPanel(); - outer.add(close); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - HTML text = new HTML("
" + AbstractImagePrototype.create(images.warn()).getHTML() + - "" + "Are you sure you want to permanently delete folder '" + folder.getName() + - "'?
"); - text.setStyleName("pithos-warnMessage"); - inner.add(text); - inner.setCellHorizontalAlignment(text, HasHorizontalAlignment.ALIGN_CENTER); - - // Create the 'Delete' button, along with a listener that hides the dialog - // when the button is clicked and deletes the folder. - Button ok = new Button("Delete", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - app.deleteFolder(folder); - hide(); - } - }); - ok.addStyleName("button"); - inner.add(ok); - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - setWidget(outer); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals(KeyDownEvent.getType().getName())) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - hide(); - app.deleteFolder(folder); - break; - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/FeedbackDialog.java b/web_client/src/gr/grnet/pithos/web/client/FeedbackDialog.java deleted file mode 100644 index 4dd3d56..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/FeedbackDialog.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.PostRequest; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.http.client.Response; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.TextArea; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.VerticalPanel; - - -/** - * A dialog box that displays info about invitations - */ -public class FeedbackDialog extends DialogBox { - - private final String WIDTH_FIELD = "35em"; - private final String WIDTH_TEXT = "42em"; - - /** - * The widget constructor. - */ - public FeedbackDialog(final Pithos app) { - // Set the dialog's caption. - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - setText("Send feedback"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - VerticalPanel outer = new VerticalPanel(); - outer.add(close); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - // Create the text and set a style name so we can style it with CSS. - HTML text = new HTML("Pithos is currently in alpha test and we would appreciate any
" + "kind of feedback. We welcome any suggestions, questions and
" + " bug reports you may have."); - text.setStyleName("pithos-credentialsText"); - inner.add(text); - FlexTable table = new FlexTable(); - table.setText(0, 0, "Please describe your problem here, provide as many details as possible"); - final TextArea msg = new TextArea(); - msg.setWidth("100%"); - msg.setHeight("100px"); - table.setWidget(1, 0, msg); - - table.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); - table.getFlexCellFormatter().setStyleName(0, 1, "props-values"); - inner.add(table); - - // Create the 'OK' button, along with a listener that hides the dialog - // when the button is clicked. - Button confirm = new Button("Submit feedback", new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - PostRequest sendFeedback = new PostRequest("/tools/", "", "feedback", "feedback-msg=" + msg.getText()) { - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - - @Override - public void onSuccess(Resource result) { - app.displayInformation("Feedback sent"); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - } - }; - sendFeedback.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(sendFeedback); - hide(); - } - }); - confirm.addStyleName("button"); - inner.add(confirm); - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - setWidget(outer); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when - // either enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java b/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java deleted file mode 100644 index 2ad422d..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.commands.CopyCommand; -import gr.grnet.pithos.web.client.commands.CutCommand; -import gr.grnet.pithos.web.client.commands.DeleteCommand; -import gr.grnet.pithos.web.client.commands.PasteCommand; -import gr.grnet.pithos.web.client.commands.PropertiesCommand; -import gr.grnet.pithos.web.client.commands.RestoreTrashCommand; -import gr.grnet.pithos.web.client.commands.ToTrashCommand; -import gr.grnet.pithos.web.client.commands.UploadFileCommand; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import java.util.List; - -import com.google.gwt.resources.client.ClientBundle; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.MenuItem; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * The 'File Context' menu implementation. - */ -public class FileContextMenu extends PopupPanel { - - /** - * The widget's images. - */ - private final Images images; - - private MenuItem cutItem; - - private MenuItem copyItem; - - private MenuItem pasteItem; - - private MenuItem updateItem; - - private MenuItem sharingItem; - - private MenuItem propItem; - - private MenuItem trashItem; - - private MenuItem deleteItem; - - private MenuItem downloadItem; - - private MenuItem saveAsItem; - - /** - * The image bundle for this widget's images that reuses images defined in - * other menus. - */ - public interface Images extends ClientBundle { - - @Source("gr/grnet/pithos/resources/mimetypes/document.png") - ImageResource fileContextMenu(); - - @Source("gr/grnet/pithos/resources/doc_versions.png") - ImageResource versions(); - - @Source("gr/grnet/pithos/resources/groups22.png") - ImageResource sharing(); - - @Source("gr/grnet/pithos/resources/border_remove.png") - ImageResource unselectAll(); - - @Source("gr/grnet/pithos/resources/demo.png") - ImageResource viewImage(); - - @Source("gr/grnet/pithos/resources/folder_new.png") - ImageResource folderNew(); - - @Source("gr/grnet/pithos/resources/folder_outbox.png") - ImageResource fileUpdate(); - - @Source("gr/grnet/pithos/resources/view_text.png") - ImageResource viewText(); - - @Source("gr/grnet/pithos/resources/folder_inbox.png") - ImageResource download(); - - @Source("gr/grnet/pithos/resources/trash.png") - ImageResource emptyTrash(); - - @Source("gr/grnet/pithos/resources/refresh.png") - ImageResource refresh(); - - /** - * Will bundle the file 'editcut.png' residing in the package - * 'gr.grnet.pithos.web.resources'. - * - * @return the image prototype - */ - @Source("gr/grnet/pithos/resources/editcut.png") - ImageResource cut(); - - /** - * Will bundle the file 'editcopy.png' residing in the package - * 'gr.grnet.pithos.web.resources'. - * - * @return the image prototype - */ - @Source("gr/grnet/pithos/resources/editcopy.png") - ImageResource copy(); - - /** - * Will bundle the file 'editpaste.png' residing in the package - * 'gr.grnet.pithos.web.resources'. - * - * @return the image prototype - */ - @Source("gr/grnet/pithos/resources/editpaste.png") - ImageResource paste(); - - /** - * Will bundle the file 'editdelete.png' residing in the package - * 'gr.grnet.pithos.web.resources'. - * - * @return the image prototype - */ - @Source("gr/grnet/pithos/resources/editdelete.png") - ImageResource delete(); - - /** - * Will bundle the file 'translate.png' residing in the package - * 'gr.grnet.pithos.web.resources'. - * - * @return the image prototype - */ - @Source("gr/grnet/pithos/resources/translate.png") - ImageResource selectAll(); - } - - public static native String getDate()/*-{ - return (new Date()).toUTCString(); - }-*/; - - /** - * The widget's constructor. - * - * @param newImages the image bundle passed on by the parent object - */ - public FileContextMenu(final Pithos app, Images newImages, TreeView selectedTree, Folder selectedFolder, final List selectedFiles) { - // The popup's constructor's argument is a boolean specifying that it - // auto-close itself when the user clicks outside of it. - super(true); - setAnimationEnabled(true); - images = newImages; - MenuBar contextMenu = new MenuBar(true); - Boolean[] permissions = null; - boolean canWrite = true; - if (selectedFolder != null) { - permissions = selectedFolder.getPermissions().get(app.getUsername()); - canWrite = selectedFolder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); - } - else { - for (File f : selectedFiles) { - permissions = f.getPermissions().get(app.getUsername()); - canWrite &= (f.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1])); - } - } - boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); - if (selectedFolder != null) { - if (!selectedFolder.isInTrash()) { - if (canWrite && app.getClipboard().hasFiles()) { - List files = (List) app.getClipboard().getItem(); - pasteItem = new MenuItem("" + AbstractImagePrototype.create(images.paste()).getHTML() + " Paste", true, new PasteCommand(app, this, selectedFolder)); - contextMenu.addItem(pasteItem); - } - - if (canWrite) { - MenuItem upload = new MenuItem("" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(app, this, selectedFolder)); - contextMenu.addItem(upload); - } - if (isFolderTreeSelected) { - cutItem = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(app, this, selectedFiles)); - contextMenu.addItem(cutItem); - } - - - if (isFolderTreeSelected) { - trashItem = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(app, this, selectedFiles)); - contextMenu.addItem(trashItem); - } - } - else { - MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(app, this, selectedFiles)); - contextMenu.addItem(restore); - } - } - copyItem = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(app, this, selectedFiles)); - contextMenu.addItem(copyItem); - - if (isFolderTreeSelected) { - deleteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, selectedFiles, MessagePanel.images)); - contextMenu.addItem(deleteItem); - } - - if (selectedFolder != null && !selectedFolder.isInTrash()) { - if (isFolderTreeSelected && selectedFiles.size() == 1) - contextMenu.addItem(new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(app, this, selectedFiles, images, 0))); - - } - contextMenu.addItem(new MenuItem("" + AbstractImagePrototype.create(newImages.download()).getHTML() + " Download", true, new Command() { - - @Override - public void execute() { - for (File f : selectedFiles) - Window.open(app.getApiPath() + f.getOwner() + f.getUri() + "?X-Auth-Token=" + app.getToken(), "_blank", ""); - } - })); - - add(contextMenu); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/FileList.java b/web_client/src/gr/grnet/pithos/web/client/FileList.java deleted file mode 100644 index 2566f24..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/FileList.java +++ /dev/null @@ -1,583 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.FolderTreeView; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - -import com.google.gwt.cell.client.ImageResourceCell; -import com.google.gwt.cell.client.SafeHtmlCell; -import com.google.gwt.cell.client.TextCell; -import com.google.gwt.cell.client.ValueUpdater; -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ContextMenuEvent; -import com.google.gwt.event.dom.client.ContextMenuHandler; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.user.cellview.client.CellTable; -import com.google.gwt.user.cellview.client.Column; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.MultiSelectionModel; -import com.google.gwt.view.client.ProvidesKey; - -/** - * A composite that displays the list of files in a particular folder. - */ -public class FileList extends Composite { - - ListDataProvider provider = new ListDataProvider(); - - /** - * The styles applied to the table. - */ - interface TableStyle extends CellTable.Style { - } - - interface TableResources extends CellTable.Resources { - @Override - @Source({CellTable.Style.DEFAULT_CSS, "PithosCellTable.css"}) - TableStyle cellTableStyle(); - } - - static interface Templates extends SafeHtmlTemplates { - Templates INSTANCE = GWT.create(Templates.class); - - @Template("

") - SafeHtml outerHelper(); - - @Template("{0}") - public SafeHtml filenameSpan(String filename); - - @Template("(view)") - public SafeHtml viewLink(String link, String title); - - @Template("
{0}{1}
{2}
") - public SafeHtml rendelContactCell(String imageHtml, String name, String fileSize); - - @Template("{2}") - public SafeHtml spanWithIdAndClass(String id, String cssClass, String content); - } - - protected final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); - - /** - * Specifies that the images available for this composite will be the ones - * available in FileContextMenu. - */ - public interface Images extends FolderTreeView.Images { - - @Source("gr/grnet/pithos/resources/blank.gif") - ImageResource blank(); - - @Source("gr/grnet/pithos/resources/asc.png") - ImageResource asc(); - - @Source("gr/grnet/pithos/resources/desc.png") - ImageResource desc(); - - @Source("gr/grnet/pithos/resources/mimetypes/document_shared.png") - ImageResource documentShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/kcmfontinst.png") - ImageResource wordprocessor(); - - @Source("gr/grnet/pithos/resources/mimetypes/log.png") - ImageResource spreadsheet(); - - @Source("gr/grnet/pithos/resources/mimetypes/kpresenter_kpr.png") - ImageResource presentation(); - - @Source("gr/grnet/pithos/resources/mimetypes/acroread.png") - ImageResource pdf(); - - @Source("gr/grnet/pithos/resources/mimetypes/image.png") - ImageResource image(); - - @Source("gr/grnet/pithos/resources/mimetypes/video2.png") - ImageResource video(); - - @Source("gr/grnet/pithos/resources/mimetypes/knotify.png") - ImageResource audio(); - - @Source("gr/grnet/pithos/resources/mimetypes/html.png") - ImageResource html(); - - @Source("gr/grnet/pithos/resources/mimetypes/txt.png") - ImageResource txt(); - - @Source("gr/grnet/pithos/resources/mimetypes/ark2.png") - ImageResource zip(); - - @Source("gr/grnet/pithos/resources/mimetypes/kcmfontinst_shared.png") - ImageResource wordprocessorShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/log_shared.png") - ImageResource spreadsheetShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/kpresenter_kpr_shared.png") - ImageResource presentationShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/acroread_shared.png") - ImageResource pdfShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/image_shared.png") - ImageResource imageShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/video2_shared.png") - ImageResource videoShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/knotify_shared.png") - ImageResource audioShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/html_shared.png") - ImageResource htmlShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/txt_shared.png") - ImageResource txtShared(); - - @Source("gr/grnet/pithos/resources/mimetypes/ark2_shared.png") - ImageResource zipShared(); - - } - - /** - * The number of files in this folder. - */ - int folderFileCount; - - /** - * Total folder size - */ - long folderTotalSize; - - /** - * A cache of the files in the list. - */ - private List files; - - /** - * The widget's image bundle. - */ - protected final Images images; - - protected CellTable celltable; - - private final MultiSelectionModel selectionModel; - - protected final List allHeaders = new ArrayList(); - - SortableHeader nameHeader; - - FolderTreeView treeView; - - protected Pithos app; - - /** - * Construct the file list widget. This entails setting up the widget - * layout, fetching the number of files in the current folder from the - * server and filling the local file cache of displayed files with data from - * the server, as well. - * - * @param _images - */ - public FileList(final Pithos _app, Images _images, FolderTreeView _treeView) { - app = _app; - images = _images; - this.treeView = _treeView; - - CellTable.Resources resources = GWT.create(TableResources.class); - - ProvidesKey keyProvider = new ProvidesKey(){ - - @Override - public Object getKey(File item) { - return item.getUri(); - } - }; - - celltable = new CellTable(10, resources, keyProvider); - celltable.setWidth("100%"); - celltable.setStyleName("pithos-List"); - - Column status = new Column(new ImageResourceCell() { - @Override - public boolean handlesSelection() { - return false; - } - }) - { - @Override - public ImageResource getValue(File entity) { - return getFileIcon(entity); - } - }; - celltable.addColumn(status,""); - - final Column nameColumn = new Column(new SafeHtmlCell()) { - - @Override - public SafeHtml getValue(File object) { - SafeHtmlBuilder sb = new SafeHtmlBuilder(); - sb.append(Templates.INSTANCE.filenameSpan(object.getName())); - if (object.getContentType().endsWith("png") || object.getContentType().endsWith("gif") || object.getContentType().endsWith("jpeg")) { - sb.appendHtmlConstant(" ") - .append(Templates.INSTANCE.viewLink(app.getApiPath() + object.getOwner() + object.getUri() + "?X-Auth-Token=" + app.getToken(), object.getName())); - } - - return sb.toSafeHtml(); - } - - }; - celltable.addColumn(nameColumn, nameHeader = new SortableHeader("Name")); - allHeaders.add(nameHeader); - nameHeader.setUpdater(new FileValueUpdater(nameHeader, "name")); - - celltable.redrawHeaders(); - - Column aColumn = new Column(new TextCell()) { - @Override - public String getValue(File object) { - // TODO Auto-generated method stub - return object.getSizeAsString(); - } - }; - SortableHeader aheader = new SortableHeader("Size"); - celltable.addColumn(aColumn, aheader); - allHeaders.add(aheader); - aheader.setUpdater(new FileValueUpdater(aheader, "size")); - - aColumn = new Column(new TextCell()) { - @Override - public String getValue(File object) { - return object.getLastModified() != null ? formatter.format(object.getLastModified()) : ""; - } - }; - aheader = new SortableHeader("Last Modified"); - celltable.addColumn(aColumn, aheader); - allHeaders.add(aheader); - aheader.setUpdater(new FileValueUpdater(aheader, "date")); - - provider.addDataDisplay(celltable); - - VerticalPanel vp = new VerticalPanel(); - vp.setWidth("100%"); - vp.addStyleName("pithos-FileListContainer"); - - vp.add(celltable); - - vp.setCellWidth(celltable, "100%"); - vp.addHandler(new ContextMenuHandler() { - @Override - public void onContextMenu(ContextMenuEvent event) { - TreeView tree = app.getSelectedTree(); - if (tree != null && (tree.equals(app.getFolderTreeView()) || tree.equals(app.getOtherSharedTreeView()))) { - Folder selectedFolder = app.getSelection(); - FileContextMenu contextMenu = new FileContextMenu(app, images, tree, selectedFolder, getSelectedFiles()); - int x = event.getNativeEvent().getClientX(); - int y = event.getNativeEvent().getClientY(); - contextMenu.setPopupPosition(x, y); - contextMenu.show(); - } - } - }, ContextMenuEvent.getType()); - initWidget(vp); - - selectionModel = new MultiSelectionModel(keyProvider); - - celltable.setSelectionModel(selectionModel, PithosSelectionEventManager. createDefaultManager()); -// celltable.setPageSize(Pithos.VISIBLE_FILE_COUNT); - - sinkEvents(Event.ONCONTEXTMENU); -// sinkEvents(Event.ONMOUSEUP); -// sinkEvents(Event.ONMOUSEDOWN); -// sinkEvents(Event.ONCLICK); -// sinkEvents(Event.ONKEYDOWN); - sinkEvents(Event.ONDBLCLICK); - Pithos.preventIESelection(); - } - - public List getSelectedFiles() { - return new ArrayList(selectionModel.getSelectedSet()); - } - - @Override - public void onBrowserEvent(Event event) { - -// if (files == null || files.size() == 0) { -// if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) { -// contextMenu = new FileContextMenu(images, false, true); -// contextMenu.show(); -// event.preventDefault(); -// event.cancelBubble(true); -// } -// return; -// } -// if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() != 0) { -// GWT.log("*****GOING TO SHOW CONTEXT MENU ****", null); -// contextMenu = new FileContextMenu(images, false, false); -// contextMenu = contextMenu.onEvent(event); -// event.cancelBubble(true); -// event.preventDefault(); -// } else if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && getSelectedFiles().size() == 0) { -// contextMenu = new FileContextMenu(images, false, true); -// contextMenu = contextMenu.onEmptyEvent(event); -// event.cancelBubble(true); -// event.preventDefault(); -// } else - if (DOM.eventGetType(event) == Event.ONDBLCLICK) - if (getSelectedFiles().size() == 1) { - File file = getSelectedFiles().get(0); - Window.open(app.getApiPath() + file.getOwner() + file.getUri() + "?X-Auth-Token=" + app.getToken(), "_blank", ""); - event.preventDefault(); - return; - } - super.onBrowserEvent(event); - } - - /** - * Update the display of the file list. - */ - void update(@SuppressWarnings("unused") boolean sort) { - showCellTable(); - } - - /** - * Return the proper icon based on the MIME type of the file. - * - * @param file - * @return the icon - */ - protected ImageResource getFileIcon(File file) { - String mimetype = file.getContentType(); - boolean shared = file.isShared(); - if (mimetype == null) - return shared ? images.documentShared() : images.document(); - mimetype = mimetype.toLowerCase(); - if (mimetype.startsWith("application/pdf")) - return shared ? images.pdfShared() : images.pdf(); - else if (mimetype.endsWith("excel")) - return shared ? images.spreadsheetShared() : images.spreadsheet(); - else if (mimetype.endsWith("msword")) - return shared ? images.wordprocessorShared() : images.wordprocessor(); - else if (mimetype.endsWith("powerpoint")) - return shared ? images.presentationShared() : images.presentation(); - else if (mimetype.startsWith("application/zip") || - mimetype.startsWith("application/gzip") || - mimetype.startsWith("application/x-gzip") || - mimetype.startsWith("application/x-tar") || - mimetype.startsWith("application/x-gtar")) - return shared ? images.zipShared() : images.zip(); - else if (mimetype.startsWith("text/html")) - return shared ? images.htmlShared() : images.html(); - else if (mimetype.startsWith("text/plain")) - return shared ? images.txtShared() : images.txt(); - else if (mimetype.startsWith("image/")) - return shared ? images.imageShared() : images.image(); - else if (mimetype.startsWith("video/")) - return shared ? images.videoShared() : images.video(); - else if (mimetype.startsWith("audio/")) - return shared ? images.audioShared() : images.audio(); - return shared ? images.documentShared() : images.document(); - } - - /** - * Fill the file cache with data. - */ - public void setFiles(final List _files) { - files = new ArrayList(); - for (File fres : _files) - files.add(fres); - Collections.sort(files, new Comparator() { - - @Override - public int compare(File arg0, File arg1) { - return arg0.getName().compareTo(arg1.getName()); - } - - }); - folderFileCount = files.size(); - - nameHeader.setSorted(true); - nameHeader.toggleReverseSort(); - for (SortableHeader otherHeader : allHeaders) { - if (otherHeader != nameHeader) { - otherHeader.setSorted(false); - otherHeader.setReverseSort(true); - } - } - - provider.setList(files); - selectionModel.clear(); - app.showFolderStatistics(folderFileCount); - celltable.setPageSize(folderFileCount); - } - - /** - * Does the list contains the requested filename - * - * @param fileName - * @return true/false - */ - public boolean contains(String fileName) { - for (int i = 0; i < files.size(); i++) - if (files.get(i).getName().equals(fileName)) - return true; - return false; - } - - public void clearSelectedRows() { - Iterator it = selectionModel.getSelectedSet().iterator(); - while(it.hasNext()){ - selectionModel.setSelected(it.next(),false); - } - } - - /** - * - */ - public void selectAllRows() { - Iterator it = provider.getList().iterator(); - while(it.hasNext()){ - selectionModel.setSelected(it.next(),true); - } - } - - protected void sortFiles(final String sortingProperty, final boolean sortingType){ - Collections.sort(files, new Comparator() { - - @Override - public int compare(File arg0, File arg1) { - if (sortingType){ - if (sortingProperty.equals("version")) { - return arg0.getVersion() - arg1.getVersion(); - } else if (sortingProperty.equals("owner")) { - return arg0.getOwner().compareTo(arg1.getOwner()); - } else if (sortingProperty.equals("date")) { - if (arg0.getLastModified() != null && arg1.getLastModified() != null) - return arg0.getLastModified().compareTo(arg1.getLastModified()); - return 0; - } else if (sortingProperty.equals("size")) { - return (int) (arg0.getBytes() - arg1.getBytes()); - } else if (sortingProperty.equals("name")) { - return arg0.getName().compareTo(arg1.getName()); - } else if (sortingProperty.equals("path")) { - return arg0.getUri().compareTo(arg1.getUri()); - } else { - return arg0.getName().compareTo(arg1.getName()); - } - } - else if (sortingProperty.equals("version")) { - - return arg1.getVersion() - arg0.getVersion(); - } else if (sortingProperty.equals("owner")) { - - return arg1.getOwner().compareTo(arg0.getOwner()); - } else if (sortingProperty.equals("date")) { - - return arg1.getLastModified().compareTo(arg0.getLastModified()); - } else if (sortingProperty.equals("size")) { - return (int) (arg1.getBytes() - arg0.getBytes()); - } else if (sortingProperty.equals("name")) { - - return arg1.getName().compareTo(arg0.getName()); - } else if (sortingProperty.equals("path")) { - - return arg1.getUri().compareTo(arg0.getUri()); - } else { - - return arg1.getName().compareTo(arg0.getName()); - } - } - - }); - } - - final class FileValueUpdater implements ValueUpdater{ - private String property; - private SortableHeader header; - /** - * - */ - public FileValueUpdater(SortableHeader header,String property) { - this.property=property; - this.header=header; - } - @Override - public void update(@SuppressWarnings("unused") String value) { - header.setSorted(true); - header.toggleReverseSort(); - - for (SortableHeader otherHeader : allHeaders) { - if (otherHeader != header) { - otherHeader.setSorted(false); - otherHeader.setReverseSort(true); - } - } - celltable.redrawHeaders(); - sortFiles(property, header.getReverseSort()); - FileList.this.update(true); - } - - } - - /** - * Shows the files in the cellTable - */ - private void showCellTable(){ - provider.setList(files); - - provider.refresh(); - - //celltable.redraw(); - celltable.redrawHeaders(); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java b/web_client/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java deleted file mode 100644 index 92de14a..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.FileVersions; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.foldertree.Version; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.PostRequest; -import gr.grnet.pithos.web.client.rest.PutRequest; -import gr.grnet.pithos.web.client.rest.RestException; -import gr.grnet.pithos.web.client.tagtree.Tag; - -import java.util.List; -import java.util.Map; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.DecoratedTabPanel; -import com.google.gwt.user.client.ui.DisclosurePanel; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.FocusPanel; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.VerticalPanel; - -/** - * The 'File properties' dialog box implementation. - * - */ -public class FilePropertiesDialog extends AbstractPropertiesDialog { - - protected PermissionsList permList; - - protected CheckBox readForAll; - - /** - * An image bundle for this widgets images. - */ - public interface Images extends MessagePanel.Images { - - @Source("gr/grnet/pithos/resources/edit_user.png") - ImageResource permUser(); - - @Source("gr/grnet/pithos/resources/groups22.png") - ImageResource permGroup(); - - @Source("gr/grnet/pithos/resources/editdelete.png") - ImageResource delete(); - - @Source("gr/grnet/pithos/resources/db_update.png") - ImageResource restore(); - - @Source("gr/grnet/pithos/resources/folder_inbox.png") - ImageResource download(); - } - - /** - * The widget that holds the name of the file. - */ - private TextBox name = new TextBox(); - - final File file; - - Images images = GWT.create(Images.class); - - /** - * The widget's constructor. - */ - public FilePropertiesDialog(Pithos _app, File _file) { - super(_app); - file = _file; - - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - // Set the dialog's caption. - setText("File properties"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - - // Outer contains inner and buttons. - final VerticalPanel outer = new VerticalPanel(); - outer.add(close); - final FocusPanel focusPanel = new FocusPanel(outer); - // Inner contains generalPanel and permPanel. - inner = new DecoratedTabPanel(); - inner.setAnimationEnabled(true); - inner.addStyleName("inner"); - inner.getDeckPanel().addStyleName("pithos-TabPanelBottom"); - - - inner.add(createGeneralPanel(), "General"); - - inner.add(createSharingPanel(), "Sharing"); - - fetchVersions(); - - inner.selectTab(0); - - outer.add(inner); - - // Create the 'OK' button, along with a listener that hides the dialog - // when the button is clicked. - final Button ok = new Button("OK", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - accept(); - closeDialog(); - } - }); - ok.addStyleName("button"); - - outer.add(ok); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - - focusPanel.setFocus(true); - setWidget(outer); - } - - protected void fetchVersions() { - String path = file.getUri() + "?format=json&version=list"; - GetRequest getVersions = new GetRequest(FileVersions.class, app.getApiPath(), file.getOwner(), path) { - - @Override - public void onSuccess(FileVersions _result) { - inner.add(createVersionPanel(_result.getVersions()), "Versions"); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to fetch versions: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to fetch versions: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getVersions.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getVersions); - } - - private VerticalPanel createGeneralPanel() { - final VerticalPanel generalPanel = new VerticalPanel(); - final FlexTable generalTable = new FlexTable(); - generalTable.setText(0, 0, "Name"); - generalTable.setText(1, 0, "Folder"); - generalTable.setText(2, 0, "Owner"); - generalTable.setText(3, 0, "Last modified"); - generalTable.setText(4, 0, "Tags"); - - name.setWidth("100%"); - name.setText(file.getName()); - generalTable.setWidget(0, 1, name); - if(file.getParent() != null) - generalTable.setText(1, 1, file.getParent().getName()); - else - generalTable.setText(1, 1, "-"); - generalTable.setText(2, 1, file.getOwner()); - - final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); - generalTable.setText(3, 1, file.getLastModified() != null ? formatter.format(file.getLastModified()) : ""); - - StringBuffer tagsBuffer = new StringBuffer(); - for (String t : file.getTags()) - tagsBuffer.append(t).append(", "); - if (tagsBuffer.length() > 1) - tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1); - initialTagText = tagsBuffer.toString(); - tags.setWidth("100%"); - tags.setText(initialTagText); - generalTable.setWidget(4, 1, tags); - - generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); - generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels"); - generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels"); - generalTable.getFlexCellFormatter().setStyleName(3, 0, "props-labels"); - generalTable.getFlexCellFormatter().setStyleName(4, 0, "props-labels"); - generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values"); - generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values"); - generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values"); - generalTable.getFlexCellFormatter().setStyleName(3, 1, "props-values"); - generalTable.getFlexCellFormatter().setStyleName(4, 1, "props-values"); - generalTable.setCellSpacing(4); - - generalPanel.add(generalTable); - - DisclosurePanel allTags = new DisclosurePanel("All tags"); - allTagsContent = new FlowPanel(); - allTagsContent.setWidth("100%"); - for (Tag t : app.getAllTags()) { - final Anchor tagAnchor = new Anchor(t.getName(), false); - tagAnchor.addStyleName("pithos-tag"); - allTagsContent.add(tagAnchor); - Label separator = new Label(", "); - separator.addStyleName("pithos-tag"); - allTagsContent.add(separator); - tagAnchor.addClickHandler(new ClickHandler() { - - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - String existing = tags.getText().trim(); - if (MULTIPLE_VALUES_TEXT.equals(existing)) - existing = ""; - String newTag = tagAnchor.getText().trim(); - // insert the new tag only if it is not in the list - // already - if (existing.indexOf(newTag) == -1) - tags.setText(existing + (existing.length() > 0 ? ", " : "") + newTag); - } - }); - } - allTags.setContent(allTagsContent); - generalPanel.add(allTags); - generalPanel.setSpacing(4); - return generalPanel; - } - - private VerticalPanel createSharingPanel() { - VerticalPanel permPanel = new VerticalPanel(); - - permList = new PermissionsList(images, file.getPermissions(), file.getOwner(), file.getInheritedPermissionsFrom() != null); - permPanel.add(permList); - - if (file.getInheritedPermissionsFrom() == null) { - HorizontalPanel permButtons = new HorizontalPanel(); - Button add = new Button("Add Group", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, false); - dlg.center(); - permList.updatePermissionTable(); - } - }); - add.addStyleName("button"); - permButtons.add(add); - permButtons.setCellHorizontalAlignment(add, HasHorizontalAlignment.ALIGN_CENTER); - - final Button addUser = new Button("Add User", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, true); - dlg.center(); - permList.updatePermissionTable(); - } - }); - addUser.addStyleName("button"); - permButtons.add(addUser); - permButtons.setCellHorizontalAlignment(addUser, HasHorizontalAlignment.ALIGN_CENTER); - - permButtons.setSpacing(8); - permButtons.addStyleName("pithos-TabPanelBottom"); - permPanel.add(permButtons); - } - - final Label readForAllNote = new Label("When this option is enabled, the file will be readable" + - " by everyone. By checking this option, you are certifying that you have the right to " + - "distribute this file and that it does not violate the Terms of Use.", true); - readForAllNote.setVisible(false); - readForAllNote.setStylePrimaryName("pithos-readForAllNote"); - - readForAll = new CheckBox(); - readForAll.setValue(file.isPublished()); - readForAll.addClickHandler(new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - readForAllNote.setVisible(readForAll.getValue()); - } - }); - - // Only show the read for all permission if the user is the owner. - if (file.getOwner().equals(app.getUsername())) { - final HorizontalPanel permForAll = new HorizontalPanel(); - permForAll.add(new Label("Public")); - permForAll.add(readForAll); - permForAll.setSpacing(8); - permForAll.addStyleName("pithos-TabPanelBottom"); - permForAll.add(readForAllNote); - permPanel.add(permForAll); - } - - if (file.isPublished()) { - final HorizontalPanel pathPanel = new HorizontalPanel(); - pathPanel.setWidth("100%"); - pathPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - pathPanel.add(new Label("Link")); - pathPanel.setSpacing(8); - pathPanel.addStyleName("pithos-TabPanelBottom"); - - TextBox path = new TextBox(); - path.setWidth("100%"); - path.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - Pithos.enableIESelection(); - ((TextBox) event.getSource()).selectAll(); - Pithos.preventIESelection(); - } - }); - path.setText(Window.Location.getHost() + file.getPublicUri()); - path.setTitle("Use this link for sharing the file via e-mail, IM, etc. (crtl-C/cmd-C to copy to system clipboard)"); - path.setWidth("100%"); - path.setReadOnly(true); - pathPanel.add(path); - permPanel.add(pathPanel); - } - - return permPanel; - } - - VerticalPanel createVersionPanel(List versions) { - VerticalPanel versionPanel = new VerticalPanel(); - VersionsList verList = new VersionsList(app, this, images, file, versions); - versionPanel.add(verList); - return versionPanel; - } - - /** - * Accepts any change and updates the file - * - */ - @Override - protected void accept() { - String newFilename = null; - - final Map perms = (permList.hasChanges() ? permList.getPermissions() : null); - - if (!name.getText().trim().equals(file.getName())) { - newFilename = name.getText().trim(); - } - - //only update the read for all perm if the user is the owner - Boolean published = null; - if (readForAll.getValue() != file.isPublished()) - if (file.getOwner().equals(app.getUsername())) - published = readForAll.getValue(); - final Boolean finalPublished = published; - - String[] tagset = null; - if (!tags.getText().equals(initialTagText)) - tagset = tags.getText().trim().split(","); - final String[] newTags = tagset; - - if (newFilename != null) { - final String path = file.getParent().getUri() + "/" + newFilename; - PutRequest updateFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - updateMetaData(app.getApiPath(), file.getOwner(), path + "?update=", newTags, finalPublished, perms); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - app.displayError("System error modifying file:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - updateFile.setHeader("X-Auth-Token", app.getToken()); - updateFile.setHeader("X-Move-From", file.getUri()); - updateFile.setHeader("Content-Type", file.getContentType()); - Scheduler.get().scheduleDeferred(updateFile); - } - else - updateMetaData(app.getApiPath(), app.getUsername(), file.getUri() + "?update=", newTags, finalPublished, perms); - } - - protected void updateMetaData(String api, String owner, String path, String[] newTags, Boolean published, Map newPermissions) { - if (newTags != null || published != null || newPermissions != null) { - PostRequest updateFile = new PostRequest(api, owner, path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - app.updateFolder(file.getParent(), true, null); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - app.displayError("System error modifying file:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - updateFile.setHeader("X-Auth-Token", app.getToken()); - for (String t : file.getTags()) { - updateFile.setHeader("X-Object-Meta-" + URL.encodePathSegment(t.trim()), "~"); - } - if (newTags != null) - for (String t : newTags) - if (t.length() > 0) - updateFile.setHeader("X-Object-Meta-" + URL.encodePathSegment(t.trim()), "true"); - if (published != null) - updateFile.setHeader("X-Object-Public", published.toString()); - if (newPermissions != null) { - String readPermHeader = "read="; - String writePermHeader = "write="; - for (String u : newPermissions.keySet()) { - Boolean[] p = newPermissions.get(u); - if (p[0] != null && p[0]) - readPermHeader += u + ","; - if (p[1] != null && p[1]) - writePermHeader += u + ","; - } - if (readPermHeader.endsWith("=")) - readPermHeader = ""; - else if (readPermHeader.endsWith(",")) - readPermHeader = readPermHeader.substring(0, readPermHeader.length() - 1); - if (writePermHeader.endsWith("=")) - writePermHeader = ""; - else if (writePermHeader.endsWith(",")) - writePermHeader = writePermHeader.substring(0, writePermHeader.length() - 1); - String permHeader = readPermHeader + ((readPermHeader.length() > 0 && writePermHeader.length() > 0) ? ";" : "") + writePermHeader; - if (permHeader.length() == 0) - permHeader="~"; - updateFile.setHeader("X-Object-Sharing", permHeader); - } - Scheduler.get().scheduleDeferred(updateFile); - } - else - app.updateFolder(file.getParent(), true, null); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/FileUploadDialog.java b/web_client/src/gr/grnet/pithos/web/client/FileUploadDialog.java deleted file mode 100644 index c7f1259..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/FileUploadDialog.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Cookies; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.FileUpload; -import com.google.gwt.user.client.ui.FormPanel; -import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; -import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler; -import com.google.gwt.user.client.ui.FormPanel.SubmitEvent; -import com.google.gwt.user.client.ui.FormPanel.SubmitHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Grid; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.Hidden; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.VerticalPanel; - -/** - * The 'File upload' dialog box implementation. - */ -public class FileUploadDialog extends DialogBox { - - public static final boolean DONE = true; - - /** - * The Form element that performs the file upload. - */ - protected final FormPanel form = new FormPanel(); - - private final FileUpload upload = new FileUpload(); - - private final Label filenameLabel = new Label(); - - private final Label foldernameLabel = new Label(); - - private Button submit; - - protected Folder folder; - - protected Pithos app; - - /** - * The widget's constructor. - */ - public FileUploadDialog() { - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - // Set the dialog's caption. - setText("File upload"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - // Since we're going to add a FileUpload widget, we'll need to set the - // form to use the POST method, and multipart MIME encoding. - form.setEncoding(FormPanel.ENCODING_MULTIPART); - form.setMethod(FormPanel.METHOD_POST); - - // Create a panel to hold all of the form widgets. - VerticalPanel panel = new VerticalPanel(); - panel.add(close); - form.setWidget(panel); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - final Hidden auth = new Hidden("X-Auth-Token"); - inner.add(auth); - upload.setName("X-Object-Data"); - filenameLabel.setText(""); - filenameLabel.setVisible(false); - filenameLabel.setStyleName("props-labels"); - HorizontalPanel fileUploadPanel = new HorizontalPanel(); - fileUploadPanel.add(filenameLabel); - fileUploadPanel.add(upload); - Grid generalTable = new Grid(2, 2); - generalTable.setText(0, 0, "Folder"); - generalTable.setWidget(0, 1, foldernameLabel); - generalTable.setText(1, 0, "File"); - generalTable.setWidget(1, 1, fileUploadPanel); - generalTable.getCellFormatter().setStyleName(0, 0, "props-labels"); - generalTable.getCellFormatter().setStyleName(0, 1, "props-values"); - generalTable.getCellFormatter().setStyleName(1, 0, "props-labels"); - generalTable.getCellFormatter().setStyleName(1, 1, "props-values"); - generalTable.setCellSpacing(4); - - inner.add(generalTable); - - // Create the 'upload' button, along with a listener that submits the - // form. - submit = new Button("Upload", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - prepareAndSubmit(); - } - }); - submit.addStyleName("button"); - inner.add(submit); - - // Add an event handler to the form. - form.addSubmitHandler(new SubmitHandler() { - - @Override - public void onSubmit(@SuppressWarnings("unused") SubmitEvent event) { - auth.setValue(app.getToken()); //This is done here because the app object is not available in the constructor - Cookies.setCookie("X-Auth-Token", app.getToken(), null, "", "/", false); - } - }); - form.addSubmitCompleteHandler(new SubmitCompleteHandler() { - - @Override - public void onSubmitComplete(SubmitCompleteEvent event) { - // When the form submission is successfully completed, this - // event is fired. Assuming the service returned a response - // of type text/html, we can get the result text here (see - // the FormPanel documentation for further explanation). - String results = event.getResults(); - - // Unfortunately the results are never empty, even in - // the absense of errors, so we have to check for '
'.
-				if (results != null && results.length() > 0 && !results.equalsIgnoreCase("
")) {
-					GWT.log(results, null);
-					app.displayError(results);
-				}
-				if (app.getSelectedTree().equals(app.getFolderTreeView()))
-					app.updateFolder(folder, true, new Command() {
-						
-						@Override
-						public void execute() {
-							app.updateStatistics();
-						}
-					});
-				else
-					app.updateOtherSharedFolder(folder, true);
-				hide();
-			}
-		});
-
-		panel.add(inner);
-		panel.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
-		
-		setWidget(form);
-	}
-
-	@Override
-	protected void onPreviewNativeEvent(NativePreviewEvent preview) {
-		super.onPreviewNativeEvent(preview);
-
-		NativeEvent evt = preview.getNativeEvent();
-		if (evt.getType().equals("keydown"))
-			// Use the popup's key preview hooks to close the dialog when either
-			// enter or escape is pressed.
-			switch (evt.getKeyCode()) {
-				case KeyCodes.KEY_ENTER:
-					prepareAndSubmit();
-					break;
-				case KeyCodes.KEY_ESCAPE:
-					hide();
-					break;
-			}
-	}
-
-	/**
-	 * Make any last minute checks and start the upload.
-	 */
-	protected void prepareAndSubmit() {
-        if (upload.getFilename().length() == 0) {
-            app.displayError("You must select a file!");
-            return;
-        }
-        final String fname = getFilename(upload.getFilename());
-        String apath = app.getApiPath() + folder.getOwner() + folder.getUri() + "/" + fname + "?X-Auth-Token=" + app.getToken();
-        form.setAction(apath);
-        submit.setEnabled(false);
-        upload.setVisible(false);
-        filenameLabel.setText(fname);
-        filenameLabel.setVisible(true);
-
-		if (getFileForName(fname) == null) {
-            form.submit();
-		}
-		else {
-			// We are going to update an existing file, so show a confirmation dialog.
-			ConfirmationDialog confirm = new ConfirmationDialog("Are you sure " +
-					"you want to update " + fname + "?", "Update") {
-
-				@Override
-				public void cancel() {
-					FileUploadDialog.this.hide();
-				}
-
-				@Override
-				public void confirm() {
-					form.submit();
-				}
-
-			};
-			confirm.center();
-		}
-	}
-
-    /**
-	 * Returns the file name from a potential full path argument. Apparently IE
-	 * insists on sending the full path name of a file when uploading, forcing
-	 * us to trim the extra path info. Since this is only observed on Windows we
-	 * get to check for a single path separator value.
-	 *
-	 * @param name the potentially full path name of a file
-	 * @return the file name without extra path information
-	 */
-	protected String getFilename(String name) {
-		int pathSepIndex = name.lastIndexOf("\\");
-		if (pathSepIndex == -1) {
-			pathSepIndex = name.lastIndexOf("/");
-			if (pathSepIndex == -1)
-				return name;
-		}
-		return name.substring(pathSepIndex + 1);
-	}
-
-	protected File getFileForName(String name){
-		for (File f : folder.getFiles())
-			if (f.getName().equals(name))
-				return f;
-		return null;
-	}
-
-    public void setApp(Pithos app) {
-        this.app = app;
-    }
-
-    public void setFolder(Folder folder) {
-        this.folder = folder;
-        foldernameLabel.setText(folder.getName());
-    }
-}
diff --git a/web_client/src/gr/grnet/pithos/web/client/FilesPropertiesDialog.java b/web_client/src/gr/grnet/pithos/web/client/FilesPropertiesDialog.java
deleted file mode 100644
index 00001fd..0000000
--- a/web_client/src/gr/grnet/pithos/web/client/FilesPropertiesDialog.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright 2011 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- */
-package gr.grnet.pithos.web.client;
-
-import gr.grnet.pithos.web.client.foldertree.File;
-import gr.grnet.pithos.web.client.foldertree.Folder;
-
-import java.util.List;
-
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.DecoratedTabPanel;
-import com.google.gwt.user.client.ui.DisclosurePanel;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FocusPanel;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.VerticalPanel;
-
-/**
- * The 'Multiple file properties' dialog box implementation.
- *
- */
-public class FilesPropertiesDialog extends AbstractPropertiesDialog {
-
-//	private final TristateCheckBox versionedCheck;
-
-	private final List files;
-
-	/**
-	 * The widget's constructor.
-	 *
-	 * @param _files
-	 */
-	public FilesPropertiesDialog(Pithos _app, final List _files) {
-		super(_app);
-
-		files = _files;
-
-		// Set the dialog's caption.
-		setText("Files properties");
-
-		// Outer contains inner and buttons.
-		final VerticalPanel outer = new VerticalPanel();
-		final FocusPanel focusPanel = new FocusPanel(outer);
-		// Inner contains generalPanel and permPanel.
-		inner = new DecoratedTabPanel();
-		inner.setAnimationEnabled(true);
-
-		inner.add(createGeneralPanel(), "General");
-
-		inner.selectTab(0);
-        outer.add(inner);
-
-        final HorizontalPanel buttons = new HorizontalPanel();
-		// Create the 'OK' button, along with a listener that hides the dialog
-		// when the button is clicked.
-		final Button ok = new Button("OK", new ClickHandler() {
-			@Override
-			public void onClick(@SuppressWarnings("unused") ClickEvent event) {
-				accept();
-				closeDialog();
-			}
-		});
-		buttons.add(ok);
-		buttons.setCellHorizontalAlignment(ok, HasHorizontalAlignment.ALIGN_CENTER);
-		// Create the 'Cancel' button, along with a listener that hides the
-		// dialog when the button is clicked.
-		final Button cancel = new Button("Cancel", new ClickHandler() {
-			@Override
-			public void onClick(@SuppressWarnings("unused") ClickEvent event) {
-				closeDialog();
-			}
-		});
-		buttons.add(cancel);
-		buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);
-		buttons.setSpacing(8);
-		buttons.addStyleName("pithos-TabPanelBottom");
-		outer.add(buttons);
-		outer.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);
-		outer.addStyleName("pithos-TabPanelBottom");
-
-		focusPanel.setFocus(true);
-		setWidget(outer);
-	}
-
-    private VerticalPanel createGeneralPanel() {
-        VerticalPanel generalPanel = new VerticalPanel();
-
-        final FlexTable generalTable = new FlexTable();
-        generalTable.setText(0, 0, String.valueOf(files.size())+" files selected");
-        generalTable.setText(1, 0, "Folder");
-        generalTable.setText(2, 0, "Tags");
-        Folder parent = files.get(0).getParent();
-        if(parent != null)
-            generalTable.setText(1, 1, parent.getName());
-        else
-            generalTable.setText(1, 1, "-");
-
-		generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
-		generalTable.getFlexCellFormatter().setColSpan(0, 0, 2);
-		generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
-		generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");
-		generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");
-		generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");
-		generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");
-		generalTable.setCellSpacing(4);
-
-        generalPanel.add(generalTable);
-
-		DisclosurePanel allTags = new DisclosurePanel("All tags");
-		allTagsContent = new FlowPanel();
-		allTags.setContent(allTagsContent);
-		generalPanel.add(allTags);
-		generalPanel.setSpacing(4);
-
-        return generalPanel;
-    }
-
-	/**
-	 * Accepts any change and updates the file
-	 *
-	 */
-	@Override
-	protected void accept() {
-	}
-}
diff --git a/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java b/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java
deleted file mode 100644
index 9c59ff6..0000000
--- a/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2011 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- */
-package gr.grnet.pithos.web.client;
-
-import gr.grnet.pithos.web.client.commands.CopyCommand;
-import gr.grnet.pithos.web.client.commands.CutCommand;
-import gr.grnet.pithos.web.client.commands.DeleteCommand;
-import gr.grnet.pithos.web.client.commands.EmptyTrashCommand;
-import gr.grnet.pithos.web.client.commands.NewFolderCommand;
-import gr.grnet.pithos.web.client.commands.PasteCommand;
-import gr.grnet.pithos.web.client.commands.PropertiesCommand;
-import gr.grnet.pithos.web.client.commands.RefreshCommand;
-import gr.grnet.pithos.web.client.commands.RestoreTrashCommand;
-import gr.grnet.pithos.web.client.commands.ToTrashCommand;
-import gr.grnet.pithos.web.client.foldertree.File;
-import gr.grnet.pithos.web.client.foldertree.Folder;
-
-import java.util.List;
-
-import com.google.gwt.user.client.ui.AbstractImagePrototype;
-import com.google.gwt.user.client.ui.MenuBar;
-import com.google.gwt.user.client.ui.MenuItem;
-import com.google.gwt.user.client.ui.PopupPanel;
-
-/**
- * The 'Folder Context' menu implementation.
- */
-public class FolderContextMenu extends PopupPanel {
-
-	/**
-	 * The widget's images.
-	 */
-	private final Images images;
-
-	/**
-	 * The image bundle for this widget's images that reuses images defined in
-	 * other menus.
-	 */
-	public interface Images extends FileContextMenu.Images {
-	}
-
-	private MenuItem pasteItem;
-
-	/**
-	 * The widget's constructor.
-	 *
-	 * @param newImages the image bundle passed on by the parent object
-	 */
-	public FolderContextMenu(Pithos app, final Images newImages, TreeView selectedTree, Folder folder) {
-		// The popup's constructor's argument is a boolean specifying that it
-		// auto-close itself when the user clicks outside of it.
-		super(true);
-		setAnimationEnabled(true);
-		images = newImages;
-        MenuBar contextMenu = new MenuBar(true);
-
-        Boolean[] permissions = folder.getPermissions().get(app.getUsername());
-    	boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
-    	boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView());
-    	boolean otherSharedTreeSelected = selectedTree.equals(app.getOtherSharedTreeView());
-    	
-    	if (isFolderTreeSelected || otherSharedTreeSelected) {
-	    	MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(app, this, folder));
-	        contextMenu.addItem(refresh);
-    	}
-
-        if (!folder.isInTrash()) {
-        	if (canWrite) {
-		        MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(app, this, folder, images));
-		        contextMenu.addItem(newFolder);
-
-		        if (isFolderTreeSelected && !folder.isContainer()) {
-		            MenuItem cut = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(app, this, folder));
-		            contextMenu.addItem(cut);
-		        }
-        	}
-
-	        MenuItem copy = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(app, this, folder));
-	        contextMenu.addItem(copy);
-	
-        	if (canWrite) {
-		        if (!app.getClipboard().isEmpty()) {
-		        	Object item = app.getClipboard().getItem();
-		        	boolean showPaste = true;
-		        	if (item instanceof Folder) {
-		        		Folder f = (Folder) item;
-		        		if (f.contains(folder))
-		        			showPaste = false;
-		        	}
-		        	if (showPaste) {
-			            pasteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.paste()).getHTML() + " Paste", true, new PasteCommand(app, this, folder));
-			            contextMenu.addItem(pasteItem);
-		        	}
-		        }
-
-			    if (isFolderTreeSelected && !folder.isContainer()) {
-			        MenuItem moveToTrash = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(app, this, folder));
-			        contextMenu.addItem(moveToTrash);
-			
-			        MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, folder, MessagePanel.images));
-			        contextMenu.addItem(delete);
-			
-			        MenuItem properties = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(app, this, folder, newImages, 0));
-			        contextMenu.addItem(properties);
-			    }
-        	}
-        }
-        else {
-        	if (!folder.isTrash()) {
-    			MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(app, this, folder));
-    			contextMenu.addItem(restore);
-
-    			MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, folder, MessagePanel.images));
-		        contextMenu.addItem(delete);
-        	}
-        	else {
-    			MenuItem emptyTrash = new MenuItem("" + AbstractImagePrototype.create(images.emptyTrash()).getHTML() + " Empty Trash", true, new EmptyTrashCommand(app, this));
-    			contextMenu.addItem(emptyTrash);
-        	}
-        }
-		add(contextMenu);
-	}
-}
diff --git a/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java b/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java
deleted file mode 100644
index 8035bff..0000000
--- a/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Copyright 2011 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- */
-package gr.grnet.pithos.web.client;
-
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.event.dom.client.KeyDownEvent;
-import com.google.gwt.user.client.Command;
-import gr.grnet.pithos.web.client.foldertree.File;
-import gr.grnet.pithos.web.client.foldertree.Folder;
-import gr.grnet.pithos.web.client.foldertree.Resource;
-import gr.grnet.pithos.web.client.rest.PostRequest;
-import gr.grnet.pithos.web.client.rest.PutRequest;
-import gr.grnet.pithos.web.client.rest.RestException;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.event.dom.client.ChangeEvent;
-import com.google.gwt.event.dom.client.ChangeHandler;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.KeyCodes;
-import com.google.gwt.http.client.Response;
-import com.google.gwt.i18n.client.DateTimeFormat;
-import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.DecoratedTabPanel;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.TabPanel;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * The 'Folder properties' dialog box implementation.
- */
-public class FolderPropertiesDialog extends DialogBox {
-
-    protected Pithos app;
-
-	/**
-	 * The widget that holds the folderName of the folder.
-	 */
-	TextBox folderName = new TextBox();
-
-	/**
-	 * A flag that denotes whether the dialog will be used to create or modify a
-	 * folder.
-	 */
-	private final boolean create;
-
-	protected PermissionsList permList;
-
-	final Folder folder;
-
-	final TabPanel inner;
-
-	/**
-	 * The widget's constructor.
-	 */
-	public FolderPropertiesDialog(final Pithos app, boolean _create,  Folder selected) {
-        this.app = app;
-		Anchor close = new Anchor();
-		close.addStyleName("close");
-		close.addClickHandler(new ClickHandler() {
-			
-			@Override
-			public void onClick(ClickEvent event) {
-				hide();
-			}
-		});
-
-		setAnimationEnabled(true);
-		setGlassEnabled(true);
-		setStyleName("pithos-DialogBox");
-
-		// Enable IE selection for the dialog (must disable it upon closing it)
-		Pithos.enableIESelection();
-
-		create = _create;
-		
-		folder = selected;
-
-		// Use this opportunity to set the dialog's caption.
-		if (create)
-			setText("Create folder");
-		else
-			setText("Folder properties");
-
-		// Outer contains inner and buttons
-		VerticalPanel outer = new VerticalPanel();
-		outer.add(close);
-		// Inner contains generalPanel and permPanel
-		inner = new DecoratedTabPanel();
-		inner.setAnimationEnabled(true);
-		inner.addStyleName("inner");
-		inner.getDeckPanel().addStyleName("pithos-TabPanelBottom");
-
-		VerticalPanel generalPanel = new VerticalPanel();
-        FlexTable generalTable = new FlexTable();
-        generalTable.setText(0, 0, "Name");
-        generalTable.setText(1, 0, "Parent");
-        generalTable.setText(2, 0, "Creator");
-        generalTable.setText(3, 0, "Last modified");
-
-		folderName.setText(create ? "" : folder.getName());
-        folderName.setReadOnly(folder.isContainer() && !create);
-        generalTable.setWidget(0, 1, folderName);
-
-        final Label folderNameNote = new Label("Please note that slashes ('/') are not allowed in folder names.", true);
-		folderNameNote.setVisible(false);
-		folderNameNote.setStylePrimaryName("gss-readForAllNote");
-		generalTable.setWidget(0, 2, folderNameNote);
-		
-        if (create)
-            generalTable.setText(1, 1, folder.getName());
-        else
-            generalTable.setText(1, 1, folder.getPrefix());
-        generalTable.setText(2, 1, "");
-        DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");
-        if(folder.getLastModified() != null)
-            generalTable.setText(3, 1, formatter.format(folder.getLastModified()));
-        generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
-        generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
-        generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");
-        generalTable.getFlexCellFormatter().setStyleName(3, 0, "props-labels");
-        generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");
-        generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");
-        generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");
-        generalTable.getFlexCellFormatter().setStyleName(3, 1, "props-values");
-        generalTable.setCellSpacing(4);
-        generalPanel.add(generalTable);
-        inner.add(generalPanel, "General");
-
-        VerticalPanel permPanel = new VerticalPanel();
-        FilePropertiesDialog.Images images = GWT.create(FilePropertiesDialog.Images.class);
-        boolean permsReadonly = folder.getInheritedPermissionsFrom() != null || folder.existChildrenPermissions();
-        permList = new PermissionsList(images, folder.getPermissions(), folder.getOwner(), permsReadonly);
-        permPanel.add(permList);
-
-        if (!permsReadonly) {
-            HorizontalPanel permButtons = new HorizontalPanel();
-            Button add = new Button("Add Group", new ClickHandler() {
-                @Override
-                public void onClick(@SuppressWarnings("unused") ClickEvent event) {
-                    PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, false);
-                    dlg.center();
-                }
-            });
-            add.addStyleName("button");
-            permButtons.add(add);
-            permButtons.setCellHorizontalAlignment(add, HasHorizontalAlignment.ALIGN_CENTER);
-
-            Button addUser = new Button("Add User", new ClickHandler() {
-                @Override
-                public void onClick(@SuppressWarnings("unused") ClickEvent event) {
-                    PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, true);
-                    dlg.center();
-                }
-            });
-            addUser.addStyleName("button");
-            permButtons.add(addUser);
-            permButtons.setCellHorizontalAlignment(addUser, HasHorizontalAlignment.ALIGN_CENTER);
-            permButtons.setSpacing(8);
-            permPanel.add(permButtons);
-        }
-
-        if (!create)
-            inner.add(permPanel, "Sharing");
-        inner.selectTab(0);
-
-        outer.add(inner);
-
-		// Create the 'Create/Update' button, along with a listener that hides the dialog
-		// when the button is clicked and quits the application.
-		String okLabel;
-		if (create)
-			okLabel = "Create";
-		else
-			okLabel = "Update";
-		final Button ok = new Button(okLabel, new ClickHandler() {
-			@Override
-			public void onClick(@SuppressWarnings("unused") ClickEvent event) {
-				createOrUpdateFolder();
-				closeDialog();
-			}
-		});
-		ok.addStyleName("button");
-		outer.add(ok);
-        outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
-
-        folderName.addChangeHandler(new ChangeHandler() {
-			
-			@Override
-			public void onChange(@SuppressWarnings("unused") ChangeEvent event) {
-				if(folderName.getText().contains("/")) {
-					folderNameNote.setVisible(true);
-					ok.setEnabled(false);
-				}
-				else {
-					folderNameNote.setVisible(false);
-					ok.setEnabled(true);
-				}
-			}
-		});
-
-        setWidget(outer);
-	}
-
-	@Override
-	public void center() {
-		super.center();
-		folderName.setFocus(true);
-	}
-
-	@Override
-	protected void onPreviewNativeEvent(NativePreviewEvent preview) {
-		super.onPreviewNativeEvent(preview);
-
-		NativeEvent evt = preview.getNativeEvent();
-		if (evt.getType().equals(KeyDownEvent.getType().getName()))
-			// Use the popup's key preview hooks to close the dialog when either
-			// enter or escape is pressed.
-			switch (evt.getKeyCode()) {
-				case KeyCodes.KEY_ENTER:
-					createOrUpdateFolder();
-                    closeDialog();
-					break;
-				case KeyCodes.KEY_ESCAPE:
-					closeDialog();
-					break;
-			}
-	}
-
-
-	/**
-	 * Enables IE selection prevention and hides the dialog
-	 * (we disable the prevention on creation of the dialog)
-	 */
-	public void closeDialog() {
-		Pithos.preventIESelection();
-		hide();
-	}
-
-	/**
-	 * Generate an RPC request to create a new folder.
-	 */
-	private void createFolder() {
-		String name = folderName.getText().trim();
-        String path = folder.getUri() + "/" + name;
-        PutRequest createFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path) {
-            @Override
-            public void onSuccess(@SuppressWarnings("unused") Resource result) {
-                app.updateFolder(folder, true, new Command() {
-					
-					@Override
-					public void execute() {
-						app.updateStatistics();
-					}
-				});
-            }
-
-            @Override
-            public void onError(Throwable t) {
-				GWT.log("", t);
-				if (t instanceof RestException) {
-					app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
-				}
-				else
-					app.displayError("System error creating folder:" + t.getMessage());
-            }
-
-			@Override
-			protected void onUnauthorized(Response response) {
-				app.sessionExpired();
-			}
-       };
-        createFolder.setHeader("X-Auth-Token", app.getToken());
-        createFolder.setHeader("Accept", "*/*");
-        createFolder.setHeader("Content-Length", "0");
-        createFolder.setHeader("Content-Type", "application/directory");
-        Scheduler.get().scheduleDeferred(createFolder);
-	}
-
-	/**
-	 * Upon closing the dialog by clicking OK or pressing ENTER this method does
-	 * the actual work of modifying folder properties or creating a new Folder
-	 * depending on the value of the create field
-	 */
-	protected void createOrUpdateFolder() {
-		if (create)
-			createFolder();
-		else
-			updateFolder();
-
-	}
-
-	private void updateFolder() {
-        final Map perms = (permList.hasChanges() ? permList.getPermissions() : null);
-        final String newName = folderName.getText().trim();
-        if (!folder.isContainer() && !folder.getName().equals(newName)) {
-            final String path = folder.getParent().getUri() + "/" + newName;
-            PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getParent().getOwner(), path) {
-                @Override
-                public void onSuccess(@SuppressWarnings("unused") Resource result) {
-                    Iterator iter = folder.getFiles().iterator();
-                    app.copyFiles(iter, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
-                        @Override
-                        public void execute() {
-                            Iterator iterf = folder.getSubfolders().iterator();
-                            app.copySubfolders(iterf, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
-                                @Override
-                                public void execute() {
-                                    app.deleteFolder(folder);
-                                    updateMetadata(path + "?update=", perms);
-                                }
-                            });
-                        }
-                    });
-                }
-
-                @Override
-                public void onError(Throwable t) {
-                    GWT.log("", t);
-                    if(t instanceof RestException){
-                        app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText());
-                    }
-                    else
-                        app.displayError("System error modifying folder: " + t.getMessage());
-                }
-
-				@Override
-				protected void onUnauthorized(Response response) {
-					app.sessionExpired();
-				}
-            };
-            newFolder.setHeader("X-Auth-Token", app.getToken());
-            newFolder.setHeader("Content-Type", "application/folder");
-            newFolder.setHeader("Accept", "*/*");
-            newFolder.setHeader("Content-Length", "0");
-            Scheduler.get().scheduleDeferred(newFolder);
-        }
-        else
-            updateMetadata(folder.getUri() + "?update=", perms);
-	}
-
-	protected void updateMetadata(final String path, final Map newPermissions) {
-        if (newPermissions != null) {
-            PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwner(), path) {
-                @Override
-                public void onSuccess(@SuppressWarnings("unused") Resource result) {
-                    app.updateFolder(folder.getParent(), false, null);
-                }
-
-                @Override
-                public void onError(Throwable t) {
-                    GWT.log("", t);
-                    if (t instanceof RestException) {
-                    	if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { //Probably a virtual folder
-                            final String path1 = folder.getUri();
-                            PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path1) {
-                                @Override
-                                public void onSuccess(@SuppressWarnings("unused") Resource result) {
-                                	updateMetadata(path, newPermissions);
-                                }
-
-                                @Override
-                                public void onError(Throwable _t) {
-                                    GWT.log("", _t);
-                                    if(_t instanceof RestException){
-                                        app.displayError("Unable to update folder: " + ((RestException) _t).getHttpStatusText());
-                                    }
-                                    else
-                                        app.displayError("System error modifying folder: " + _t.getMessage());
-                                }
-
-                				@Override
-                				protected void onUnauthorized(Response response) {
-                					app.sessionExpired();
-                				}
-                            };
-                            newFolder.setHeader("X-Auth-Token", app.getToken());
-                            newFolder.setHeader("Content-Type", "application/folder");
-                            newFolder.setHeader("Accept", "*/*");
-                            newFolder.setHeader("Content-Length", "0");
-                            Scheduler.get().scheduleDeferred(newFolder);
-                    	}
-                    	else if (((RestException) t).getHttpStatusCode() == Response.SC_CONFLICT) {
-                    		app.displayError("Cannot set permissions. Probably subfolders or files already have permissions set");
-                    	}
-                    	else
-                    		app.displayError("Wrror modifying folder: " + t.getMessage());
-                    }
-                    else
-                    	app.displayError("System error modifying folder: " + t.getMessage());
-                }
-
-				@Override
-				protected void onUnauthorized(Response response) {
-					app.sessionExpired();
-				}
-            };
-            updateFolder.setHeader("X-Auth-Token", app.getToken());
-            String readPermHeader = "read=";
-            String writePermHeader = "write=";
-            for (String u : newPermissions.keySet()) {
-                Boolean[] p = newPermissions.get(u);
-                if (p[0] != null && p[0])
-                    readPermHeader += u + ",";
-                if (p[1] != null && p[1])
-                    writePermHeader += u + ",";
-            }
-            if (readPermHeader.endsWith("="))
-                readPermHeader = "";
-            else if (readPermHeader.endsWith(","))
-                readPermHeader = readPermHeader.substring(0, readPermHeader.length() - 1);
-            if (writePermHeader.endsWith("="))
-                writePermHeader = "";
-            else if (writePermHeader.endsWith(","))
-                writePermHeader = writePermHeader.substring(0, writePermHeader.length() - 1);
-            String permHeader = readPermHeader +  ((readPermHeader.length()  > 0 && writePermHeader.length() > 0) ?  ";" : "") + writePermHeader;
-            if (permHeader.length() == 0)
-                permHeader="~";
-            updateFolder.setHeader("X-Object-Sharing", permHeader);
-            Scheduler.get().scheduleDeferred(updateFolder);
-        }
-        else
-            app.updateFolder(folder.getParent(), false, null);
-    }
-
-	public void selectTab(int _tab) {
-		inner.selectTab(_tab);
-	}
-}
diff --git a/web_client/src/gr/grnet/pithos/web/client/Invitations.java b/web_client/src/gr/grnet/pithos/web/client/Invitations.java
deleted file mode 100644
index 1f71f3c..0000000
--- a/web_client/src/gr/grnet/pithos/web/client/Invitations.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package gr.grnet.pithos.web.client;
-
-import java.util.Date;
-
-import com.google.gwt.http.client.Response;
-import com.google.gwt.json.client.JSONObject;
-import com.google.gwt.json.client.JSONParser;
-import com.google.gwt.json.client.JSONValue;
-
-import gr.grnet.pithos.web.client.foldertree.Resource;
-
-public class Invitations extends Resource {
-
-	private int invitationsLeft = 0;
-	
-	@Override
-	public Date getLastModified() {
-		return null;
-	}
-
-	public int getInvitationsLeft() {
-		return invitationsLeft;
-	}
-
-	public void setInvitationsLeft(int invitationsLeft) {
-		this.invitationsLeft = invitationsLeft;
-	}
-
-	public static Invitations createFromResponse(Response response) {
-		Invitations result = new Invitations();
-		result.populate(response);
-		return result;
-	}
-
-	private void populate(Response response) {
-        JSONValue json = JSONParser.parseStrict(response.getText());
-        JSONObject o = json.isObject();
-        if (o != null)
-        	invitationsLeft = unmarshallInt(o, "invitations");
-	}
-
-}
diff --git a/web_client/src/gr/grnet/pithos/web/client/InvitationsDialog.java b/web_client/src/gr/grnet/pithos/web/client/InvitationsDialog.java
deleted file mode 100644
index f72ad3b..0000000
--- a/web_client/src/gr/grnet/pithos/web/client/InvitationsDialog.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright 2011 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- */
-package gr.grnet.pithos.web.client;
-
-import gr.grnet.pithos.web.client.foldertree.Resource;
-import gr.grnet.pithos.web.client.rest.PostRequest;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.KeyCodes;
-import com.google.gwt.http.client.Response;
-import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.VerticalPanel;
-
-
-/**
- * A dialog box that displays info about invitations
- */
-public class InvitationsDialog extends DialogBox {
-
-	private final String WIDTH_FIELD = "35em";
-	private final String WIDTH_TEXT = "42em";
-
-	Pithos app;
-	TextBox name;
-	TextBox emailBox;
-	
-	/**
-	 * The widget constructor.
-	 */
-	public InvitationsDialog(Pithos _app, Invitations inv) {
-		this.app = _app;
-		Anchor close = new Anchor();
-		close.addStyleName("close");
-		close.addClickHandler(new ClickHandler() {
-			
-			@Override
-			public void onClick(ClickEvent event) {
-				hide();
-			}
-		});
-		// Set the dialog's caption.
-		setText("Invite people (" + inv.getInvitationsLeft() + " invitations left)");
-		setAnimationEnabled(true);
-		setGlassEnabled(true);
-		setStyleName("pithos-DialogBox");
-		VerticalPanel outer = new VerticalPanel();
-		outer.add(close);
-
-		VerticalPanel inner = new VerticalPanel();
-		inner.addStyleName("inner");
-		// Create the text and set a style name so we can style it with CSS.
-		HTML text = new HTML("You have " + inv.getInvitationsLeft() + " invitations left in your account.");
-		text.setStyleName("pithos-credentialsText");
-		text.setWidth(WIDTH_TEXT);
-		inner.add(text);
-		FlexTable table = new FlexTable();
-		if (inv.getInvitationsLeft() > 0) {
-			table.setText(0, 0, "Name");
-			table.setText(1, 0, "E-mail");
-		}
-		name = new TextBox();
-		name.setWidth(WIDTH_FIELD);
-		name.setVisible(inv.getInvitationsLeft() > 0);
-		table.setWidget(0, 1, name);
-
-		emailBox = new TextBox();
-		emailBox.setWidth(WIDTH_FIELD);
-		emailBox.setVisible(inv.getInvitationsLeft() > 0);
-		table.setWidget(1, 1, emailBox);
-
-		table.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
-		table.getFlexCellFormatter().setStyleName(0, 1, "props-values");
-		table.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
-		table.getFlexCellFormatter().setStyleName(1, 1, "props-values");
-		inner.add(table);
-
-		Button confirm = new Button("Send", new ClickHandler() {
-			@Override
-			public void onClick(ClickEvent event) {
-				sendInvitation();
-			}
-		});
-		confirm.addStyleName("button");
-		confirm.setVisible(inv.getInvitationsLeft() > 0);
-		inner.add(confirm);
-		outer.add(inner);
-		outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
-		setWidget(outer);
-	}
-
-	@Override
-	protected void onPreviewNativeEvent(NativePreviewEvent preview) {
-		super.onPreviewNativeEvent(preview);
-		NativeEvent evt = preview.getNativeEvent();
-		if (evt.getType().equals("keydown"))
-			// Use the popup's key preview hooks to close the dialog when
-			// either enter or escape is pressed.
-			switch (evt.getKeyCode()) {
-				case KeyCodes.KEY_ENTER:
-					sendInvitation();
-					break;
-				case KeyCodes.KEY_ESCAPE:
-					hide();
-					break;
-			}
-	}
-
-	void sendInvitation() {
-		PostRequest sendInvitation = new PostRequest("/im/", "", "invite", "uniq=" + emailBox.getText().trim() + "&realname=" + name.getText().trim()) {
-			
-			@Override
-			protected void onUnauthorized(Response response) {
-				app.sessionExpired();
-			}
-			
-			@Override
-			public void onSuccess(Resource result) {
-				app.displayInformation("Invitation sent");
-			}
-			
-			@Override
-			public void onError(Throwable t) {
-				GWT.log("", t);
-			}
-		};
-		sendInvitation.setHeader("X-Auth-Token", app.getToken());
-		Scheduler.get().scheduleDeferred(sendInvitation);
-		hide();
-	}
-}
diff --git a/web_client/src/gr/grnet/pithos/web/client/MessagePanel.java b/web_client/src/gr/grnet/pithos/web/client/MessagePanel.java
deleted file mode 100644
index 8ed1c9a..0000000
--- a/web_client/src/gr/grnet/pithos/web/client/MessagePanel.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright 2011 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- */
-package gr.grnet.pithos.web.client;
-
-import gr.grnet.pithos.web.client.animation.FadeIn;
-import gr.grnet.pithos.web.client.animation.FadeOut;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.resources.client.ClientBundle;
-import com.google.gwt.resources.client.ImageResource;
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.AbstractImagePrototype;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.SimplePanel;
-
-/**
- * A panel that displays various system messages.
- */
-public class MessagePanel extends Composite {
-	/**
-	 * An image bundle for this widget's images.
-	 */
-	public interface Images extends ClientBundle {
-		@Source("gr/grnet/pithos/resources/messagebox_info.png")
-		ImageResource info();
-
-		@Source("gr/grnet/pithos/resources/messagebox_warning.png")
-		ImageResource warn();
-
-		@Source("gr/grnet/pithos/resources/messagebox_critical.png")
-		ImageResource error();
-	}
-
-	/**
-	 * The widget's images.
-	 */
-	public static Images images;
-
-	/**
-	 * The system message to be displayed.
-	 */
-	private HTML message = new HTML(" ");
-
-	/**
-	 * A link to clear the displayed message.
-	 */
-	private HTML clearMessageLink = new HTML("Clear");
-
-	/**
-	 * The panel that contains the messages.
-	 */
-	private HorizontalPanel inner = new HorizontalPanel();
-
-	/**
-	 * The panel that enables special effects for this widget.
-	 */
-	protected SimplePanel simplePanel = new SimplePanel();
-
-	/**
-	 * The widget's constructor.
-	 *
-	 * @param newImages a bundle that provides the images for this widget
-	 */
-	public MessagePanel(final Images newImages) {
-		images = newImages;
-		buildPanel();
-		simplePanel.setStyleName("effectPanel");
-		inner.setStyleName("effectPanel-inner");
-		DOM.setStyleAttribute(simplePanel.getElement(), "zoom", "1");
-		simplePanel.add(inner);
-		initWidget(simplePanel);
-	}
-
-	/**
-	 * Build the panel that contains the icon, the message and the 'clear' link.
-	 */
-	private void buildPanel() {
-		inner.clear();
-		inner.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
-		inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
-//		inner.setSpacing(4);
-		inner.add(message);
-		inner.add(clearMessageLink);
-		inner.setCellVerticalAlignment(message, HasVerticalAlignment.ALIGN_MIDDLE);
-		clearMessageLink.addClickHandler(new ClickHandler() {
-
-			@Override
-			public void onClick(@SuppressWarnings("unused") ClickEvent event) {
-				FadeOut anim = new FadeOut(simplePanel){
-					@Override
-					protected void onComplete() {
-						super.onComplete();
-						hideMessage();
-					}
-				};
-				anim.run(500);
-			}
-		});
-	}
-
-	/**
-	 * Display an error message.
-	 *
-	 * @param msg the message to display
-	 */
-	public void displayError(final String msg) {
-		GWT.log(msg, null);
-		message = new HTML("
" + AbstractImagePrototype.create(images.error()).getHTML() + "" + msg + "
"); - message.addClickHandler(new ClickHandler() { - - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - FadeOut anim = new FadeOut(simplePanel){ - - @Override - protected void onComplete() { - super.onComplete(); - hideMessage(); - } - }; - anim.run(500); - } - }); - buildPanel(); - setVisible(true); - FadeIn anim = new FadeIn(simplePanel); - anim.run(500); - } - - /** - * Display a warning message. - * - * @param msg the message to display - */ - public void displayWarning(final String msg) { - message = new HTML("
" + AbstractImagePrototype.create(images.warn()).getHTML() + "" + msg + "
"); - message.addClickHandler(new ClickHandler() { - - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - FadeOut anim = new FadeOut(simplePanel){ - - @Override - protected void onComplete() { - super.onComplete(); - hideMessage(); - } - }; - anim.run(500); - } - }); - - buildPanel(); - setVisible(true); - FadeIn anim = new FadeIn(simplePanel); - anim.run(500); - } - - /** - * Display an informational message. - * - * @param msg the message to display - */ - public void displayInformation(final String msg) { - message = new HTML("
" + AbstractImagePrototype.create(images.info()).getHTML() + "" + msg + "
"); - message.addClickHandler(new ClickHandler() { - - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - FadeOut anim = new FadeOut(simplePanel){ - - @Override - protected void onComplete() { - super.onComplete(); - hideMessage(); - } - }; - anim.run(500); - } - }); - - buildPanel(); - setVisible(true); - FadeIn anim = new FadeIn(simplePanel); - anim.run(500); - } - - /** - * Clear the displayed message and hide the panel. - */ - public void hideMessage() { - inner.clear(); - message = new HTML(" "); - this.setVisible(false); - } - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java b/web_client/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java deleted file mode 100644 index 96f3a80..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.user.client.ui.TextBox; - -import gr.grnet.pithos.web.client.grouptree.Group; - -import java.util.List; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.ListBox; -import com.google.gwt.user.client.ui.VerticalPanel; - -public class PermissionsAddDialog extends DialogBox { - - private TextBox userBox = new TextBox(); - - private ListBox groupBox = new ListBox(); - - private CheckBox read = new CheckBox(); - - private CheckBox write = new CheckBox(); - - private PermissionsList permList; - - boolean userAdd; - - private Pithos app; - - public PermissionsAddDialog(Pithos _app, List _groups, PermissionsList _permList, boolean _userAdd) { - app = _app; - userAdd = _userAdd; - permList = _permList; - - Anchor close = new Anchor(); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - setText("Add permission"); - setStyleName("pithos-DialogBox"); - - final VerticalPanel panel = new VerticalPanel(); - panel.add(close); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - final FlexTable permTable = new FlexTable(); - permTable.setText(0, 0, "Users/Groups"); - permTable.setText(0, 1, "Read"); - permTable.setText(0, 2, "Write"); - permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels"); - permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels"); - permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels"); - - if (userAdd) { - permTable.setWidget(1, 0, userBox); - } - else { - for (Group group : _groups) - groupBox.addItem(group.getName(), group.getName()); - permTable.setWidget(1, 0, groupBox); - } - - permTable.setWidget(1, 1, read); - permTable.setWidget(1, 2, write); - - permTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels"); - permTable.getFlexCellFormatter().setHorizontalAlignment(1, 1, HasHorizontalAlignment.ALIGN_CENTER); - permTable.getFlexCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_CENTER); - inner.add(permTable); - - final Button ok = new Button("OK", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - addPermission(); - hide(); - } - }); - - ok.addStyleName("button"); - inner.add(ok); - - panel.add(inner); - panel.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - - setWidget(panel); - } - - protected void addPermission() { - String selected = null; - if (userAdd) { - selected = userBox.getText(); - } else { - String groupName = groupBox.getValue(groupBox.getSelectedIndex()); - selected = app.getUsername() + ":" + groupName; - } - if (permList.getPermissions().get(selected) != null) { - return; - } - boolean readValue = read.getValue(); - boolean writeValue = write.getValue(); - - permList.addPermission(selected, readValue, writeValue); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - addPermission(); - hide(); - break; - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } - - - @Override - public void center() { - super.center(); - if (userAdd) - userBox.setFocus(true); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/PermissionsList.java b/web_client/src/gr/grnet/pithos/web/client/PermissionsList.java deleted file mode 100644 index 45ab6c7..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/PermissionsList.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import gr.grnet.pithos.web.client.FilePropertiesDialog.Images; - -import java.util.HashMap; -import java.util.Map; - -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.PushButton; -import com.google.gwt.user.client.ui.VerticalPanel; - - -public class PermissionsList extends Composite { - - Map permissions = null; - - final Images images; - - final VerticalPanel permPanel = new VerticalPanel(); - - final FlexTable permTable = new FlexTable(); - - final String owner; - - protected boolean hasChanges = false; - - private boolean readonly = false; - - public PermissionsList(final Images theImages, Map thePermissions, String theOwner, boolean inheritsPermissions){ - images = theImages; - owner = theOwner; - permissions = new HashMap(thePermissions); - readonly = inheritsPermissions; - permTable.setText(0, 0, "Users/Groups"); - permTable.setText(0, 1, "Read"); - permTable.setText(0, 2, "Write"); - permTable.setText(0, 3, ""); - permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels"); - permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels"); - permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels"); - permTable.getFlexCellFormatter().setStyleName(0, 3, "props-toplabels"); - permPanel.add(permTable); - permPanel.addStyleName("pithos-TabPanelBottom"); - initWidget(permPanel); - updatePermissionTable(); - } - - public boolean hasChanges(){ - return hasChanges; - } - - /** - * Retrieve the permissions. - * - * @return the permissions - */ - public Map getPermissions() { - return permissions; - } - - public void addPermission(String user, boolean read, boolean write){ - permissions.put(user, new Boolean[] {Boolean.valueOf(read), Boolean.valueOf(write)}); - hasChanges = true; - updatePermissionTable(); - } - - /** - * Shows the permission table - * - */ - void updatePermissionTable(){ - int i = 1; - for (int j=1; j" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + user + ""); - else - permTable.setHTML(i, 0, "" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " " + user.split(":")[1].trim() + ""); - permTable.getFlexCellFormatter().setStyleName(i, 0, "props-labels"); - - Boolean[] userPerms = permissions.get(user); - Boolean readP = userPerms[0]; - Boolean writeP = userPerms[1]; - - CheckBox read = new CheckBox(); - read.setValue(readP != null ? readP : false); - permTable.setWidget(i, 1, read); - permTable.getFlexCellFormatter().setHorizontalAlignment(i, 1, HasHorizontalAlignment.ALIGN_CENTER); - - CheckBox write = new CheckBox(); - write.setValue(writeP != null ? writeP : false); - permTable.setWidget(i, 2, write); - permTable.getFlexCellFormatter().setHorizontalAlignment(i, 2, HasHorizontalAlignment.ALIGN_CENTER); - - if (!readonly) { - read.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent booleanValueChangeEvent) { - Boolean[] ps = permissions.get(user); - ps[0] = booleanValueChangeEvent.getValue(); - hasChanges = true; - } - }); - write.addValueChangeHandler(new ValueChangeHandler() { - @Override - public void onValueChange(ValueChangeEvent booleanValueChangeEvent) { - Boolean[] ps = permissions.get(user); - ps[1] = booleanValueChangeEvent.getValue(); - hasChanges = true; - } - }); - PushButton removeButton = new PushButton(AbstractImagePrototype.create(images.delete()).createImage(), new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - permissions.remove(user); - updatePermissionTable(); - hasChanges = true; - } - }); - permTable.setWidget(i, 3, removeButton); - permTable.getFlexCellFormatter().setHorizontalAlignment(i, 3, HasHorizontalAlignment.ALIGN_CENTER); - } - else { - read.setEnabled(false); - write.setEnabled(false); - } - i++; - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/Pithos.java b/web_client/src/gr/grnet/pithos/web/client/Pithos.java deleted file mode 100644 index dc5ec4f..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/Pithos.java +++ /dev/null @@ -1,1189 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.commands.UploadFileCommand; -import gr.grnet.pithos.web.client.foldertree.AccountResource; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.FolderTreeView; -import gr.grnet.pithos.web.client.foldertree.FolderTreeViewModel; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.grouptree.Group; -import gr.grnet.pithos.web.client.grouptree.GroupTreeView; -import gr.grnet.pithos.web.client.grouptree.GroupTreeViewModel; -import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView; -import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeViewModel; -import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView; -import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeViewModel; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.HeadRequest; -import gr.grnet.pithos.web.client.rest.PutRequest; -import gr.grnet.pithos.web.client.rest.RestException; -import gr.grnet.pithos.web.client.tagtree.Tag; -import gr.grnet.pithos.web.client.tagtree.TagTreeView; -import gr.grnet.pithos.web.client.tagtree.TagTreeViewModel; - -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import com.google.gwt.core.client.EntryPoint; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ResizeEvent; -import com.google.gwt.event.logical.shared.ResizeHandler; -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestBuilder; -import com.google.gwt.http.client.RequestCallback; -import com.google.gwt.http.client.RequestException; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.json.client.JSONArray; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.json.client.JSONParser; -import com.google.gwt.json.client.JSONString; -import com.google.gwt.json.client.JSONValue; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.resources.client.ImageResource.ImageOptions; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Cookies; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.History; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HasVerticalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.HorizontalSplitPanel; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.RootPanel; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; -import com.google.gwt.view.client.SingleSelectionModel; - -/** - * Entry point classes define onModuleLoad(). - */ -public class Pithos implements EntryPoint, ResizeHandler { - - public static final String HOME_CONTAINER = "pithos"; - - public static final String TRASH_CONTAINER = "trash"; - - /** - * Instantiate an application-level image bundle. This object will provide - * programmatic access to all the images needed by widgets. - */ - static Images images = (Images) GWT.create(Images.class); - - public String getUsername() { - return username; - } - - public void setAccount(AccountResource acct) { - account = acct; - } - - public AccountResource getAccount() { - return account; - } - - public void updateFolder(Folder f, boolean showfiles, Command callback) { - folderTreeView.updateFolder(f, showfiles, callback); - } - - public void updateGroupNode(Group group) { - groupTreeView.updateGroupNode(group); - } - - public void updateSharedFolder(Folder f, boolean showfiles) { - mysharedTreeView.updateFolder(f, showfiles); - } - - public void updateOtherSharedFolder(Folder f, boolean showfiles) { - otherSharedTreeView.updateFolder(f, showfiles); - } - - public List getAllTags() { - List tagList = new ArrayList(); - for (Folder f : account.getContainers()) { - for (String t : f.getTags()) { - tagList.add(new Tag(t)); - } - } - return tagList; - } - - public MysharedTreeView getMySharedTreeView() { - return mysharedTreeView; - } - - /** - * An aggregate image bundle that pulls together all the images for this - * application into a single bundle. - */ - public interface Images extends TopPanel.Images, FileList.Images, ToolsMenu.Images { - - @Source("gr/grnet/pithos/resources/document.png") - ImageResource folders(); - - @Source("gr/grnet/pithos/resources/advancedsettings.png") - @ImageOptions(width=32, height=32) - ImageResource tools(); - } - - /** - * The Application Clipboard implementation; - */ - private Clipboard clipboard = new Clipboard(); - - /** - * The top panel that contains the menu bar. - */ - private TopPanel topPanel; - - /** - * The panel that contains the various system messages. - */ - private MessagePanel messagePanel = new MessagePanel(Pithos.images); - - /** - * The bottom panel that contains the status bar. - */ - private StatusPanel statusPanel = null; - - /** - * The file list widget. - */ - private FileList fileList; - - /** - * The tab panel that occupies the right side of the screen. - */ - private VerticalPanel inner = new VerticalPanel(); - - - /** - * The split panel that will contain the left and right panels. - */ - private HorizontalSplitPanel splitPanel = new HorizontalSplitPanel(); - - /** - * The currently selected item in the application, for use by the Edit menu - * commands. Potential types are Folder, File, User and Group. - */ - private Object currentSelection; - - public HashMap userFullNameMap = new HashMap(); - - private String username = null; - - /** - * The authentication token of the current user. - */ - private String token; - - VerticalPanel trees; - - SingleSelectionModel folderTreeSelectionModel; - FolderTreeViewModel folderTreeViewModel; - FolderTreeView folderTreeView; - - SingleSelectionModel mysharedTreeSelectionModel; - MysharedTreeViewModel mysharedTreeViewModel; - MysharedTreeView mysharedTreeView = null;; - - protected SingleSelectionModel otherSharedTreeSelectionModel; - OtherSharedTreeViewModel otherSharedTreeViewModel; - OtherSharedTreeView otherSharedTreeView = null; - - GroupTreeViewModel groupTreeViewModel; - private GroupTreeView groupTreeView; - - private TreeView selectedTree; - protected AccountResource account; - - Folder trash; - - List treeViews = new ArrayList(); - - @SuppressWarnings("rawtypes") List selectionModels = new ArrayList(); - - Button upload; - - private HTML usedBytes; - - private HTML totalBytes; - - private HTML usedPercent; - - private HTML numOfFiles; - - private Image toolsButton; - - @Override - public void onModuleLoad() { - if (parseUserCredentials()) - initialize(); - } - - private void initialize() { - boolean bareContent = Window.Location.getParameter("noframe") != null; - String contentWidth = bareContent ? "100%" : "75%"; - - VerticalPanel outer = new VerticalPanel(); - outer.setWidth("100%"); - if (!bareContent) { - outer.addStyleName("pithos-outer"); - } - - if (!bareContent) { - topPanel = new TopPanel(this, Pithos.images); - topPanel.setWidth("100%"); - outer.add(topPanel); - outer.setCellHorizontalAlignment(topPanel, HasHorizontalAlignment.ALIGN_CENTER); - } - - HorizontalPanel header = new HorizontalPanel(); - header.addStyleName("pithos-header"); - header.setWidth(contentWidth); - if (bareContent) - header.addStyleName("pithos-header-noframe"); - upload = new Button("Upload File", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - new UploadFileCommand(Pithos.this, null, getSelection()).execute(); - } - }); - upload.addStyleName("pithos-uploadButton"); - header.add(upload); - header.setCellHorizontalAlignment(upload, HasHorizontalAlignment.ALIGN_LEFT); - header.setCellVerticalAlignment(upload, HasVerticalAlignment.ALIGN_MIDDLE); -// header.setCellWidth(upload, "146px"); - - messagePanel.setVisible(false); - header.add(messagePanel); - header.setCellHorizontalAlignment(messagePanel, HasHorizontalAlignment.ALIGN_CENTER); - header.setCellVerticalAlignment(messagePanel, HasVerticalAlignment.ALIGN_MIDDLE); - - toolsButton = new Image(images.tools()); - toolsButton.addStyleName("pithos-toolsButton"); - toolsButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - ToolsMenu menu = new ToolsMenu(Pithos.this, images, getSelectedTree(), getSelectedTree().getSelection(), getFileList().getSelectedFiles()); - if (!menu.isEmpty()) { - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }); - header.add(toolsButton); - header.setCellHorizontalAlignment(toolsButton, HasHorizontalAlignment.ALIGN_CENTER); - header.setCellVerticalAlignment(toolsButton, HasVerticalAlignment.ALIGN_MIDDLE); - header.setCellWidth(toolsButton, "40px"); - - HorizontalPanel folderStatistics = new HorizontalPanel(); - folderStatistics.addStyleName("pithos-folderStatistics"); - numOfFiles = new HTML(); - folderStatistics.add(numOfFiles); - folderStatistics.setCellVerticalAlignment(numOfFiles, HasVerticalAlignment.ALIGN_MIDDLE); - HTML numOfFilesLabel = new HTML(" Files"); - folderStatistics.add(numOfFilesLabel); - folderStatistics.setCellVerticalAlignment(numOfFilesLabel, HasVerticalAlignment.ALIGN_MIDDLE); - header.add(folderStatistics); - header.setCellHorizontalAlignment(folderStatistics, HasHorizontalAlignment.ALIGN_RIGHT); - header.setCellVerticalAlignment(folderStatistics, HasVerticalAlignment.ALIGN_MIDDLE); - header.setCellWidth(folderStatistics, "40px"); - outer.add(header); - outer.setCellHorizontalAlignment(header, HasHorizontalAlignment.ALIGN_CENTER); - // Inner contains the various lists.nner - inner.sinkEvents(Event.ONCONTEXTMENU); - inner.setWidth("100%"); - - folderTreeSelectionModel = new SingleSelectionModel(); - folderTreeSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (folderTreeSelectionModel.getSelectedObject() != null) { - deselectOthers(folderTreeView, folderTreeSelectionModel); - applyPermissions(folderTreeSelectionModel.getSelectedObject()); - Folder f = folderTreeSelectionModel.getSelectedObject(); - showFiles(f); - } - } - }); - selectionModels.add(folderTreeSelectionModel); - - folderTreeViewModel = new FolderTreeViewModel(this, folderTreeSelectionModel); - folderTreeView = new FolderTreeView(folderTreeViewModel); - treeViews.add(folderTreeView); - - fileList = new FileList(this, images, folderTreeView); - inner.add(fileList); - - groupTreeViewModel = new GroupTreeViewModel(this); - groupTreeView = new GroupTreeView(groupTreeViewModel); - treeViews.add(groupTreeView); - - trees = new VerticalPanel(); - trees.setWidth("100%"); - - - HorizontalPanel treeHeader = new HorizontalPanel(); - treeHeader.addStyleName("pithos-treeHeader"); - treeHeader.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); - treeHeader.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); - HorizontalPanel statistics = new HorizontalPanel(); - statistics.addStyleName("pithos-statistics"); - statistics.add(new HTML("Used: ")); - usedBytes = new HTML(); - statistics.add(usedBytes); - statistics.add(new HTML(" of ")); - totalBytes = new HTML(); - statistics.add(totalBytes); - statistics.add(new HTML(" (")); - usedPercent = new HTML(); - statistics.add(usedPercent); - statistics.add(new HTML(")")); - treeHeader.add(statistics); - treeHeader.setCellHorizontalAlignment(statistics, HasHorizontalAlignment.ALIGN_LEFT); - trees.add(treeHeader); - - trees.add(folderTreeView); - trees.add(groupTreeView); - // Add the left and right panels to the split panel. - splitPanel.setLeftWidget(trees); - splitPanel.setRightWidget(inner); - splitPanel.setSplitPosition("35%"); - splitPanel.setSize("100%", "100%"); - splitPanel.addStyleName("pithos-splitPanel"); - splitPanel.setWidth(contentWidth); - outer.add(splitPanel); - outer.setCellHorizontalAlignment(splitPanel, HasHorizontalAlignment.ALIGN_CENTER); - - if (!bareContent) { - statusPanel = new StatusPanel(); - statusPanel.setWidth("100%"); - outer.add(statusPanel); - outer.setCellHorizontalAlignment(statusPanel, HasHorizontalAlignment.ALIGN_CENTER); - } - else - splitPanel.addStyleName("pithos-splitPanel-noframe"); - - // Hook the window resize event, so that we can adjust the UI. - Window.addResizeHandler(this); - // Clear out the window's built-in margin, because we want to take - // advantage of the entire client area. - Window.setMargin("0px"); - // Finally, add the outer panel to the RootPanel, so that it will be - // displayed. - RootPanel.get().add(outer); - // Call the window resized handler to get the initial sizes setup. Doing - // this in a deferred command causes it to occur after all widgets' - // sizes have been computed by the browser. - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - - @Override - public void execute() { - onWindowResized(Window.getClientHeight()); - } - }); - - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - fetchAccount(new Command() { - - @Override - public void execute() { - if (!account.hasHomeContainer()) - createHomeContainer(account, this); - else if (!account.hasTrashContainer()) - createTrashContainer(this); - else { - for (Folder f : account.getContainers()) - if (f.getName().equals(Pithos.TRASH_CONTAINER)) { - trash = f; - break; - } - folderTreeViewModel.initialize(account, new Command() { - - @Override - public void execute() { - createMySharedTree(); - } - }); - groupTreeViewModel.initialize(); - showStatistics(); - } - } - }); - } - }); - -// Scheduler.get().scheduleDeferred(new Command() { -// -// @Override -// public void execute() { -// displayError("lalala"); -// -// } -// }); - } - - public void applyPermissions(Folder f) { - if (f != null) { - if (f.isInTrash()) - upload.setEnabled(false); - else { - Boolean[] perms = f.getPermissions().get(username); - if (f.getOwner().equals(username) || (perms != null && perms[1] != null && perms[1])) { - upload.setEnabled(true); - } - else - upload.setEnabled(false); - } - } - else - upload.setEnabled(false); - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void deselectOthers(TreeView _selectedTree, SingleSelectionModel model) { - selectedTree = _selectedTree; - - for (Composite c : treeViews) - if (c.equals(selectedTree)) - c.addStyleName("cellTreeWidget-selectedTree"); - else - c.removeStyleName("cellTreeWidget-selectedTree"); - - for (SingleSelectionModel s : selectionModels) - if (!s.equals(model)) - s.setSelected(s.getSelectedObject(), false); - } - - public void showFiles(Folder f) { - Set files = f.getFiles(); - showFiles(files); - } - - public void showFiles(Set files) { - //Iterator iter = files.iterator(); - //fetchFile(iter, files); - fileList.setFiles(new ArrayList(files)); - } - - protected void fetchFile(final Iterator iter, final Set files) { - if (iter.hasNext()) { - File file = iter.next(); - String path = file.getUri() + "?format=json"; - GetRequest getFile = new GetRequest(File.class, getApiPath(), username, path, file) { - @Override - public void onSuccess(@SuppressWarnings("unused") File _result) { - fetchFile(iter, files); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting file", t); - if (t instanceof RestException) - displayError("Error getting file: " + ((RestException) t).getHttpStatusText()); - else - displayError("System error fetching file: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - getFile.setHeader("X-Auth-Token", "0000"); - Scheduler.get().scheduleDeferred(getFile); - } - else - fileList.setFiles(new ArrayList(files)); - } - - /** - * Parse and store the user credentials to the appropriate fields. - */ - private boolean parseUserCredentials() { - username = Window.Location.getParameter("user"); - token = Window.Location.getParameter("token"); - Configuration conf = (Configuration) GWT.create(Configuration.class); - if (username == null || username.length() == 0 || token == null || token.length() == 0) { - String cookie = conf.authCookie(); - String auth = Cookies.getCookie(cookie); - if (auth == null) { - authenticateUser(); - return false; - } - if (auth.startsWith("\"")) - auth = auth.substring(1); - if (auth.endsWith("\"")) - auth = auth.substring(0, auth.length() - 1); - String[] authSplit = auth.split("\\" + conf.cookieSeparator(), 2); - if (authSplit.length != 2) { - authenticateUser(); - return false; - } - username = authSplit[0]; - token = authSplit[1]; - return true; - } - - Cookies.setCookie(conf.authCookie(), username + conf.cookieSeparator() + token, null, "", "/", false); - return true; - } - - /** - * Redirect the user to the login page for authentication. - */ - protected void authenticateUser() { - Configuration conf = (Configuration) GWT.create(Configuration.class); - Window.Location.assign(conf.loginUrl() + "?next=" + Window.Location.getHref()); - } - - protected void fetchAccount(final Command callback) { - String path = "?format=json"; - - GetRequest getAccount = new GetRequest(AccountResource.class, getApiPath(), username, path) { - @Override - public void onSuccess(AccountResource _result) { - account = _result; - if (callback != null) - callback.execute(); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting account", t); - if (t instanceof RestException) - displayError("Error getting account: " + ((RestException) t).getHttpStatusText()); - else - displayError("System error fetching user data: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - getAccount.setHeader("X-Auth-Token", token); - Scheduler.get().scheduleDeferred(getAccount); - } - - public void updateStatistics() { - HeadRequest headAccount = new HeadRequest(AccountResource.class, getApiPath(), username, "", account) { - - @Override - public void onSuccess(@SuppressWarnings("unused") AccountResource _result) { - showStatistics(); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting account", t); - if (t instanceof RestException) - displayError("Error getting account: " + ((RestException) t).getHttpStatusText()); - else - displayError("System error fetching user data: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - headAccount.setHeader("X-Auth-Token", token); - Scheduler.get().scheduleDeferred(headAccount); - } - - protected void showStatistics() { - usedBytes.setHTML(String.valueOf(account.getFileSizeAsString())); - totalBytes.setHTML(String.valueOf(account.getQuotaAsString())); - NumberFormat nf = NumberFormat.getPercentFormat(); - usedPercent.setHTML(nf.format(account.getUsedPercentage())); - } - - protected void createHomeContainer(final AccountResource _account, final Command callback) { - String path = "/" + Pithos.HOME_CONTAINER; - PutRequest createPithos = new PutRequest(getApiPath(), getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - if (!_account.hasTrashContainer()) - createTrashContainer(callback); - else - fetchAccount(callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error creating pithos", t); - if (t instanceof RestException) - displayError("Error creating pithos: " + ((RestException) t).getHttpStatusText()); - else - displayError("System error Error creating pithos: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - createPithos.setHeader("X-Auth-Token", getToken()); - Scheduler.get().scheduleDeferred(createPithos); - } - - protected void createTrashContainer(final Command callback) { - String path = "/" + Pithos.TRASH_CONTAINER; - PutRequest createPithos = new PutRequest(getApiPath(), getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - fetchAccount(callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error creating pithos", t); - if (t instanceof RestException) - displayError("Error creating pithos: " + ((RestException) t).getHttpStatusText()); - else - displayError("System error Error creating pithos: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - createPithos.setHeader("X-Auth-Token", getToken()); - Scheduler.get().scheduleDeferred(createPithos); - } - - /** - * Creates an HTML fragment that places an image & caption together, for use - * in a group header. - * - * @param imageProto an image prototype for an image - * @param caption the group caption - * @return the header HTML fragment - */ - private String createHeaderHTML(AbstractImagePrototype imageProto, String caption) { - String captionHTML = "" + "
" + imageProto.getHTML() - + " " - + caption + "
"; - return captionHTML; - } - - protected void onWindowResized(int height) { - // Adjust the split panel to take up the available room in the window. - int newHeight = height - splitPanel.getAbsoluteTop(); - if (newHeight < 1) - newHeight = 1; - splitPanel.setHeight("" + newHeight); - inner.setHeight("" + newHeight); - } - - @Override - public void onResize(ResizeEvent event) { - int height = event.getHeight(); - onWindowResized(height); - } - - /** - * Display an error message. - * - * @param msg the message to display - */ - public void displayError(String msg) { - messagePanel.displayError(msg); - } - - /** - * Display a warning message. - * - * @param msg the message to display - */ - public void displayWarning(String msg) { - messagePanel.displayWarning(msg); - } - - /** - * Display an informational message. - * - * @param msg the message to display - */ - public void displayInformation(String msg) { - messagePanel.displayInformation(msg); - } - - /** - * Retrieve the fileList. - * - * @return the fileList - */ - public FileList getFileList() { - return fileList; - } - - /** - * Retrieve the topPanel. - * - * @return the topPanel - */ - TopPanel getTopPanel() { - return topPanel; - } - - /** - * Retrieve the clipboard. - * - * @return the clipboard - */ - public Clipboard getClipboard() { - return clipboard; - } - - public StatusPanel getStatusPanel() { - return statusPanel; - } - - public String getToken() { - return token; - } - - public static native void preventIESelection() /*-{ - $doc.body.onselectstart = function () { return false; }; - }-*/; - - public static native void enableIESelection() /*-{ - if ($doc.body.onselectstart != null) - $doc.body.onselectstart = null; - }-*/; - - /** - * @return the absolute path of the API root URL - */ - public String getApiPath() { - Configuration conf = (Configuration) GWT.create(Configuration.class); - return conf.apiPath(); - } - - /** - * History support for folder navigation - * adds a new browser history entry - * - * @param key - */ - public void updateHistory(String key){ -// Replace any whitespace of the initial string to "+" -// String result = key.replaceAll("\\s","+"); -// Add a new browser history entry. -// History.newItem(result); - History.newItem(key); - } - - public void deleteFolder(final Folder folder) { - String path = getApiPath() + folder.getOwner() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(folder.getPrefix()) + "&t=" + System.currentTimeMillis(); - RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path); - builder.setHeader("X-Auth-Token", getToken()); - try { - builder.sendRequest("", new RequestCallback() { - @Override - public void onResponseReceived(@SuppressWarnings("unused") Request request, Response response) { - if (response.getStatusCode() == Response.SC_OK) { - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array = json.isArray(); - int i = 0; - if (array != null) { - deleteObject(folder, i, array); - } - } - } - - @Override - public void onError(@SuppressWarnings("unused") Request request, Throwable exception) { - displayError("System error unable to delete folder: " + exception.getMessage()); - } - }); - } - catch (RequestException e) { - } - } - - void deleteObject(final Folder folder, final int i, final JSONArray array) { - if (i < array.size()) { - JSONObject o = array.get(i).isObject(); - if (o != null && !o.containsKey("subdir")) { - JSONString name = o.get("name").isString(); - String path = "/" + folder.getContainer() + "/" + name.stringValue(); - DeleteRequest delete = new DeleteRequest(getApiPath(), folder.getOwner(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - deleteObject(folder, i + 1, array); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - displayError("System error unable to delete folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - delete.setHeader("X-Auth-Token", getToken()); - Scheduler.get().scheduleDeferred(delete); - } - else if (o != null) { - String subdir = o.get("subdir").isString().stringValue(); - subdir = subdir.substring(0, subdir.length() - 1); - String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(subdir) + "&t=" + System.currentTimeMillis(); - RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path); - builder.setHeader("X-Auth-Token", getToken()); - try { - builder.sendRequest("", new RequestCallback() { - @Override - public void onResponseReceived(@SuppressWarnings("unused") Request request, Response response) { - if (response.getStatusCode() == Response.SC_OK) { - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array2 = json.isArray(); - if (array2 != null) { - int l = array.size(); - for (int j=0; j iter, final String targetUsername, final String targetUri, final Command callback) { - if (iter.hasNext()) { - File file = iter.next(); - String path = targetUri + "/" + file.getName(); - PutRequest copyFile = new PutRequest(getApiPath(), targetUsername, path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - copyFiles(iter, targetUsername, targetUri, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); - } - else - displayError("System error unable to copy file: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - copyFile.setHeader("X-Auth-Token", getToken()); - copyFile.setHeader("X-Copy-From", file.getUri()); - if (!file.getOwner().equals(targetUsername)) - copyFile.setHeader("X-Source-Account", file.getOwner()); - copyFile.setHeader("Content-Type", file.getContentType()); - Scheduler.get().scheduleDeferred(copyFile); - } - else if (callback != null) { - callback.execute(); - } - } - - public void copySubfolders(final Iterator iter, final String targetUsername, final String targetUri, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - copyFolder(f, targetUsername, targetUri, new Command() { - - @Override - public void execute() { - copySubfolders(iter, targetUsername, targetUri, callback); - } - }); - } - else if (callback != null) { - callback.execute(); - } - } - - public void copyFolder(final Folder f, final String targetUsername, final String targetUri, final Command callback) { - String path = targetUri + "/" + f.getName(); - PutRequest createFolder = new PutRequest(getApiPath(), targetUsername, path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - GetRequest getFolder = new GetRequest(Folder.class, getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) { - - @Override - public void onSuccess(final Folder _f) { - Iterator iter = _f.getFiles().iterator(); - copyFiles(iter, targetUsername, targetUri + "/" + _f.getName(), new Command() { - @Override - public void execute() { - Iterator iterf = _f.getSubfolders().iterator(); - copySubfolders(iterf, targetUsername, targetUri + "/" + _f.getName(), callback); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText()); - } - else - displayError("System error getting folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - displayError("Unable to create folder: " + ((RestException) t).getHttpStatusText()); - } - else - displayError("System error creating folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - sessionExpired(); - } - }; - createFolder.setHeader("X-Auth-Token", getToken()); - createFolder.setHeader("Accept", "*/*"); - createFolder.setHeader("Content-Length", "0"); - createFolder.setHeader("Content-Type", "application/folder"); - Scheduler.get().scheduleDeferred(createFolder); - } - - public void addSelectionModel(@SuppressWarnings("rawtypes") SingleSelectionModel model) { - selectionModels.add(model); - } - - public OtherSharedTreeView getOtherSharedTreeView() { - return otherSharedTreeView; - } - - public void updateTrash(boolean showFiles, Command callback) { - updateFolder(trash, showFiles, callback); - } - - public void updateGroupsNode() { - groupTreeView.updateGroupNode(null); - } - - public void addGroup(String groupname) { - Group newGroup = new Group(groupname); - account.addGroup(newGroup); - groupTreeView.updateGroupNode(null); - } - - public void removeGroup(Group group) { - account.removeGroup(group); - updateGroupsNode(); - } - - public TreeView getSelectedTree() { - return selectedTree; - } - - public Folder getSelection() { - return selectedTree.getSelection(); - } - - public void showFolderStatistics(int folderFileCount) { - numOfFiles.setHTML(String.valueOf(folderFileCount)); - } - - public GroupTreeView getGroupTreeView() { - return groupTreeView; - } - - public void sessionExpired() { - new SessionExpiredDialog(this).center(); - } - - public void updateRootFolder(Command callback) { - updateFolder(account.getPithos(), false, callback); - } - - void createMySharedTree() { - mysharedTreeSelectionModel = new SingleSelectionModel(); - mysharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (mysharedTreeSelectionModel.getSelectedObject() != null) { - deselectOthers(mysharedTreeView, mysharedTreeSelectionModel); - upload.setEnabled(false); - updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true); - } - } - }); - selectionModels.add(mysharedTreeSelectionModel); - mysharedTreeViewModel = new MysharedTreeViewModel(Pithos.this, mysharedTreeSelectionModel); - mysharedTreeViewModel.initialize(new Command() { - - @Override - public void execute() { - mysharedTreeView = new MysharedTreeView(mysharedTreeViewModel); - trees.insert(mysharedTreeView, 2); - treeViews.add(mysharedTreeView); - createOtherSharedTree(); - } - }); - } - - void createOtherSharedTree() { - otherSharedTreeSelectionModel = new SingleSelectionModel(); - otherSharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (otherSharedTreeSelectionModel.getSelectedObject() != null) { - deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel); - otherSharedTreeView.addStyleName("cellTreeWidget-selectedTree"); - applyPermissions(otherSharedTreeSelectionModel.getSelectedObject()); - updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true); - } - } - }); - selectionModels.add(otherSharedTreeSelectionModel); - otherSharedTreeViewModel = new OtherSharedTreeViewModel(Pithos.this, otherSharedTreeSelectionModel); - otherSharedTreeViewModel.initialize(new Command() { - - @Override - public void execute() { - otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel); - trees.insert(otherSharedTreeView, 3); - treeViews.add(otherSharedTreeView); - } - }); - } - - public void logoff() { - Configuration conf = (Configuration) GWT.create(Configuration.class); - Cookies.removeCookie(conf.authCookie(), "/"); - Cookies.removeCookie(conf.authTokenCookie(), "/"); - for (String s: Cookies.getCookieNames()) - if (s.startsWith(conf.shibSessionCookiePrefix())) - Cookies.removeCookie(s, "/"); - Window.Location.assign(Window.Location.getPath()); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/PithosCellTable.css b/web_client/src/gr/grnet/pithos/web/client/PithosCellTable.css deleted file mode 100644 index fb94c32..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/PithosCellTable.css +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -/* Incremental changes from CellTable.css */ -.cellTableFooter { - padding: 3px 9px; -} - -.cellTableHeader { - border:none; - cursor: pointer; - color: white; - background-color: #74aec9; - height: 25px; - text-shadow: none; - font-size: small; - font-weight: normal; -} - -.cellTableCell { - padding: 4px 9px; - border-width: 0; -} - -.cellTableFirstColumn { - padding: 0px; - padding-left: 5px; -} - -.cellTableLastColumn { - padding: 0px; -} - -.cellTableFirstColumnFooter { - border: 0px; - padding: 0px; -} - -.cellTableFirstColumnHeader { - border: 0px; - padding: 0px; -} - -.cellTableLastColumnFooter { - border: 0px; - padding: 0px; -} - -.cellTableLastColumnHeader { - border: 0px; - padding: 0px; -} - -.cellTableEvenRow { - cursor: hand; - cursor: pointer; - background: none; -} - -.cellTableOddRow { - cursor: hand; - cursor: pointer; - background: none; -} - -.cellTableSelectedRow { - color: #d45500; - height: auto; - overflow: auto; -} - -.cellTableHoveredRow { - background: none; - background-color: #A1C8DB; -} \ No newline at end of file diff --git a/web_client/src/gr/grnet/pithos/web/client/PithosCellTreeBasic.css b/web_client/src/gr/grnet/pithos/web/client/PithosCellTreeBasic.css deleted file mode 100644 index 645fb93..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/PithosCellTreeBasic.css +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -.cellTreeWidget { -} - -.cellTreeEmptyMessage { - padding-left: 16px; - font-style: italic; - background: url(images/cellTreeLoadingBasic.gif) no-repeat; - color: #4085A5; -} - -.cellTreeItem { - padding-top: 4px; - padding-bottom: 4px; - cursor: hand; - cursor: pointer; - zoom: 1; -} - -.cellTreeItemImage { - padding-top: 5px; -} - -.cellTreeItemImageValue { - zoom: 1; -} - -.cellTreeItemValue { - padding-left: 3px; - padding-right: 3px; - outline: none; -} - -.cellTreeItemValue img { - vertical-align: middle; -} - -.cellTreeItem:HOVER { - background-color: #A1C8DA; -} - -.cellTreeOpenItem { -} - -.cellTreeTopItem { - -} - -.cellTreeTopItemImage { - -} - -.cellTreeTopItemImageValue { - -} - -.cellTreeKeyboardSelectedItem { - outline: none; -} - -.cellTreeSelectedItem { - color: #d45500; - background-color: #BCD7E3; - height: auto; - overflow: visible; -} - -.cellTreeShowMoreButton { - padding-left: 16px; - outline: none; -} diff --git a/web_client/src/gr/grnet/pithos/web/client/PithosSelectionEventManager.java b/web_client/src/gr/grnet/pithos/web/client/PithosSelectionEventManager.java deleted file mode 100644 index 3879ea7..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/PithosSelectionEventManager.java +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - - - -import java.util.ArrayList; -import java.util.List; - -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.InputElement; -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.view.client.CellPreviewEvent; -import com.google.gwt.view.client.HasData; -import com.google.gwt.view.client.MultiSelectionModel; -import com.google.gwt.view.client.Range; -import com.google.gwt.view.client.SelectionModel; - -/** - * An implementation of {@link com.google.gwt.view.client.CellPreviewEvent.Handler} that adds selection - * support via the spacebar and mouse clicks and handles the control key. - * - *

- * If the {@link HasData} source of the selection event uses a - * {@link MultiSelectionModel}, this manager additionally provides support for - * shift key to select a range of values. For all other {@link SelectionModel}s, - * only the control key is supported. - *

- * - * @param the data type of records in the list - */ -public class PithosSelectionEventManager implements - CellPreviewEvent.Handler { - - /** - * Implementation of {@link gr.grnet.pithos.web.client.PithosSelectionEventManager.EventTranslator} that only triggers selection when - * any checkbox is selected. - * - * @param the data type - */ - public static class CheckboxEventTranslator implements EventTranslator { - - /** - * The column index of the checkbox. Other columns are ignored. - */ - private final int column; - - /** - * Construct a new {@link gr.grnet.pithos.web.client.PithosSelectionEventManager.CheckboxEventTranslator} that will trigger - * selection when any checkbox in any column is selected. - */ - public CheckboxEventTranslator() { - this(-1); - } - - /** - * Construct a new {@link gr.grnet.pithos.web.client.PithosSelectionEventManager.CheckboxEventTranslator} that will trigger - * selection when a checkbox in the specified column is selected. - * - * @param column the column index, or -1 for all columns - */ - public CheckboxEventTranslator(int column) { - this.column = column; - } - - @Override - public boolean clearCurrentSelection(@SuppressWarnings("unused") CellPreviewEvent event) { - return false; - } - - @Override - public SelectAction translateSelectionEvent(CellPreviewEvent event) { - // Handle the event. - NativeEvent nativeEvent = event.getNativeEvent(); - if ("click".equals(nativeEvent.getType())) { - // Ignore if the event didn't occur in the correct column. - if (column > -1 && column != event.getColumn()) { - return SelectAction.IGNORE; - } - - // Determine if we clicked on a checkbox. - Element target = nativeEvent.getEventTarget().cast(); - if ("input".equals(target.getTagName().toLowerCase())) { - final InputElement input = target.cast(); - if ("checkbox".equals(input.getType().toLowerCase())) { - // Synchronize the checkbox with the current selection state. - input.setChecked(event.getDisplay().getSelectionModel().isSelected( - event.getValue())); - return SelectAction.TOGGLE; - } - } - return SelectAction.IGNORE; - } - - // For keyboard events, do the default action. - return SelectAction.DEFAULT; - } - } - - /** - * Translates {@link CellPreviewEvent}s into {@link SelectAction}s. - */ - public static interface EventTranslator { - /** - * Check whether a user selection event should clear all currently selected - * values. - * - * @param event the {@link CellPreviewEvent} to translate - */ - boolean clearCurrentSelection(CellPreviewEvent event); - - /** - * Translate the user selection event into a {@link SelectAction}. - * - * @param event the {@link CellPreviewEvent} to translate - */ - SelectAction translateSelectionEvent(CellPreviewEvent event); - } - - /** - * The action that controls how selection is handled. - */ - public static enum SelectAction { - DEFAULT, // Perform the default action. - SELECT, // Select the value. - DESELECT, // Deselect the value. - TOGGLE, // Toggle the selected state of the value. - IGNORE; // Ignore the event. - } - - /** - * Construct a new {@link PithosSelectionEventManager} that triggers - * selection when any checkbox in any column is clicked. - * - * @param the data type of the display - * @return a {@link PithosSelectionEventManager} instance - */ - public static PithosSelectionEventManager createCheckboxManager() { - return new PithosSelectionEventManager(new CheckboxEventTranslator()); - } - - /** - * Construct a new {@link PithosSelectionEventManager} that triggers - * selection when a checkbox in the specified column is clicked. - * - * @param the data type of the display - * @param column the column to handle - * @return a {@link PithosSelectionEventManager} instance - */ - public static PithosSelectionEventManager createCheckboxManager( - int column) { - return new PithosSelectionEventManager(new CheckboxEventTranslator( - column)); - } - - /** - * Create a new {@link PithosSelectionEventManager} using the specified - * {@link EventTranslator} to control which {@link SelectAction} to take for - * each event. - * - * @param the data type of the display - * @param translator the {@link EventTranslator} to use - * @return a {@link PithosSelectionEventManager} instance - */ - public static PithosSelectionEventManager createCustomManager( - EventTranslator translator) { - return new PithosSelectionEventManager(translator); - } - - /** - * Create a new {@link PithosSelectionEventManager} that handles selection - * via user interactions. - * - * @param the data type of the display - * @return a new {@link PithosSelectionEventManager} instance - */ - public static PithosSelectionEventManager createDefaultManager() { - return new PithosSelectionEventManager(null); - } - - /** - * The last {@link HasData} that was handled. - */ - private HasData lastDisplay; - - /** - * The last page start. - */ - private int lastPageStart; - - /** - * The last selected row index. - */ - private int lastSelectedIndex = -1; - - /** - * A boolean indicating that the last shift selection was additive. - */ - private boolean shiftAdditive; - - /** - * The last place where the user clicked without holding shift. Multi - * selections that use the shift key are rooted at the anchor. - */ - private int shiftAnchor = -1; - - /** - * The {@link EventTranslator} that controls how selection is handled. - */ - private final EventTranslator translator; - - /** - * Construct a new {@link PithosSelectionEventManager} using the specified - * {@link EventTranslator} to control which {@link SelectAction} to take for - * each event. - * - * @param translator the {@link EventTranslator} to use - */ - protected PithosSelectionEventManager(EventTranslator translator) { - this.translator = translator; - } - - /** - * Update the selection model based on a user selection event. - * - * @param selectionModel the selection model to update - * @param row the selected row index relative to the page start - * @param rowValue the selected row value - * @param action the {@link SelectAction} to apply - * @param selectRange true to select the range from the last selected row - * @param clearOthers true to clear the current selection - */ - public void doMultiSelection(MultiSelectionModel selectionModel, - HasData display, int row, T rowValue, SelectAction action, - boolean selectRange, boolean clearOthers) { - // Determine if we will add or remove selection. - boolean addToSelection = true; - if (action != null) { - switch (action) { - case IGNORE: - // Ignore selection. - return; - case SELECT: - addToSelection = true; - break; - case DESELECT: - addToSelection = false; - break; - case TOGGLE: - addToSelection = !selectionModel.isSelected(rowValue); - break; - case DEFAULT: - break; - } - } - - // Determine which rows will be newly selected. - int pageStart = display.getVisibleRange().getStart(); - if (selectRange && pageStart == lastPageStart && lastSelectedIndex > -1 - && shiftAnchor > -1 && display == lastDisplay) { - /* - * Get the new shift bounds based on the existing shift anchor and the - * selected row. - */ - int start = Math.min(shiftAnchor, row); // Inclusive. - int end = Math.max(shiftAnchor, row); // Inclusive. - - if (lastSelectedIndex < start) { - // Revert previous selection if the user reselects a smaller range. - setRangeSelection(selectionModel, display, new Range(lastSelectedIndex, - start - lastSelectedIndex), !shiftAdditive, false); - } else if (lastSelectedIndex > end) { - // Revert previous selection if the user reselects a smaller range. - setRangeSelection(selectionModel, display, new Range(end + 1, - lastSelectedIndex - end), !shiftAdditive, false); - } else { - // Remember if we are adding or removing rows. - shiftAdditive = addToSelection; - } - - // Update the last selected row, but do not move the shift anchor. - lastSelectedIndex = row; - - // Select the range. - setRangeSelection(selectionModel, display, new Range(start, end - start - + 1), shiftAdditive, clearOthers); - } else { - /* - * If we are not selecting a range, save the last row and set the shift - * anchor. - */ - lastDisplay = display; - lastPageStart = pageStart; - lastSelectedIndex = row; - shiftAnchor = row; - selectOne(selectionModel, rowValue, addToSelection, clearOthers); - } - } - - @Override -public void onCellPreview(CellPreviewEvent event) { - // Early exit if selection is already handled or we are editing. - if (event.isCellEditing() || event.isSelectionHandled()) { - return; - } - - // Early exit if we do not have a SelectionModel. - HasData display = event.getDisplay(); - SelectionModel selectionModel = display.getSelectionModel(); - if (selectionModel == null) { - return; - } - - // Check for user defined actions. - SelectAction action = (translator == null) ? SelectAction.DEFAULT - : translator.translateSelectionEvent(event); - - // Handle the event based on the SelectionModel type. - if (selectionModel instanceof MultiSelectionModel) { - // Add shift key support for MultiSelectionModel. - handleMultiSelectionEvent(event, action, - (MultiSelectionModel) selectionModel); - } else { - // Use the standard handler. - handleSelectionEvent(event, action, selectionModel); - } - } - - /** - * Removes all items from the selection. - * - * @param selectionModel the {@link MultiSelectionModel} to clear - */ - protected void clearSelection(MultiSelectionModel selectionModel) { - selectionModel.clear(); - } - - /** - * Handle an event that could cause a value to be selected for a - * {@link MultiSelectionModel}. This overloaded method adds support for both - * the control and shift keys. If the shift key is held down, all rows between - * the previous selected row and the current row are selected. - * - * @param event the {@link CellPreviewEvent} that triggered selection - * @param action the action to handle - * @param selectionModel the {@link SelectionModel} to update - */ - protected void handleMultiSelectionEvent(CellPreviewEvent event, - SelectAction action, MultiSelectionModel selectionModel) { - NativeEvent nativeEvent = event.getNativeEvent(); - String type = nativeEvent.getType(); - boolean rightclick = "mousedown".equals(type) && nativeEvent.getButton()==NativeEvent.BUTTON_RIGHT; - SelectAction action1 = action; - if(rightclick){ - boolean shift = nativeEvent.getShiftKey(); - boolean ctrlOrMeta = nativeEvent.getCtrlKey() || nativeEvent.getMetaKey(); - boolean clearOthers = (translator == null) ? !ctrlOrMeta - : translator.clearCurrentSelection(event); - if (action == null || action == SelectAction.DEFAULT) { - action1 = ctrlOrMeta ? SelectAction.TOGGLE : SelectAction.SELECT; - } - //if the row is selected then do nothing - if(selectionModel.isSelected(event.getValue())){ - return; - } - doMultiSelection(selectionModel, event.getDisplay(), event.getIndex(), - event.getValue(), action1, shift, clearOthers); - } - else if ("click".equals(type)) { - /* - * Update selection on click. Selection is toggled only if the user - * presses the ctrl key. If the user does not press the control key, - * selection is additive. - */ - boolean shift = nativeEvent.getShiftKey(); - boolean ctrlOrMeta = nativeEvent.getCtrlKey() || nativeEvent.getMetaKey(); - boolean clearOthers = (translator == null) ? !ctrlOrMeta - : translator.clearCurrentSelection(event); - if (action == null || action == SelectAction.DEFAULT) { - action1 = ctrlOrMeta ? SelectAction.TOGGLE : SelectAction.SELECT; - } - doMultiSelection(selectionModel, event.getDisplay(), event.getIndex(), - event.getValue(), action1, shift, clearOthers); - if(ctrlOrMeta){ - event.setCanceled(true); - } - } else if ("keyup".equals(type)) { - int keyCode = nativeEvent.getKeyCode(); - if (keyCode == 32) { - /* - * Update selection when the space bar is pressed. The spacebar always - * toggles selection, regardless of whether the control key is pressed. - */ - boolean shift = nativeEvent.getShiftKey(); - boolean clearOthers = (translator == null) ? false - : translator.clearCurrentSelection(event); - if (action == null || action == SelectAction.DEFAULT) { - action1 = SelectAction.TOGGLE; - } - doMultiSelection(selectionModel, event.getDisplay(), event.getIndex(), - event.getValue(), action1, shift, clearOthers); - } - } - } - - /** - * Handle an event that could cause a value to be selected. This method works - * for any {@link SelectionModel}. Pressing the space bar or ctrl+click will - * toggle the selection state. Clicking selects the row if it is not selected. - * - * @param event the {@link CellPreviewEvent} that triggered selection - * @param action the action to handle - * @param selectionModel the {@link SelectionModel} to update - */ - protected void handleSelectionEvent(CellPreviewEvent event, - SelectAction action, SelectionModel selectionModel) { - // Handle selection overrides. - T value = event.getValue(); - if (action != null) { - switch (action) { - case IGNORE: - return; - case SELECT: - selectionModel.setSelected(value, true); - return; - case DESELECT: - selectionModel.setSelected(value, false); - return; - case TOGGLE: - selectionModel.setSelected(value, !selectionModel.isSelected(value)); - return; - case DEFAULT: - break; - } - } - - // Handle default selection. - NativeEvent nativeEvent = event.getNativeEvent(); - String type = nativeEvent.getType(); - if ("click".equals(type)) { - if (nativeEvent.getCtrlKey() || nativeEvent.getMetaKey()) { - // Toggle selection on ctrl+click. - selectionModel.setSelected(value, !selectionModel.isSelected(value)); - } else { - // Select on click. - selectionModel.setSelected(value, true); - } - } else if ("keyup".equals(type)) { - // Toggle selection on space. - int keyCode = nativeEvent.getKeyCode(); - if (keyCode == 32) { - selectionModel.setSelected(value, !selectionModel.isSelected(value)); - } - } - } - - /** - * Selects the given item, optionally clearing any prior selection. - * - * @param selectionModel the {@link MultiSelectionModel} to update - * @param target the item to select - * @param selected true to select, false to deselect - * @param clearOthers true to clear all other selected items - */ - protected void selectOne(MultiSelectionModel selectionModel, - T target, boolean selected, boolean clearOthers) { - if (clearOthers) { - clearSelection(selectionModel); - } - selectionModel.setSelected(target, selected); - } - - /** - * Select or deselect a range of row indexes, optionally deselecting all other - * values. - * - * @param selectionModel the {@link MultiSelectionModel} to update - * @param display the {@link HasData} source of the selection event - * @param range the {@link Range} of rows to select or deselect - * @param addToSelection true to select, false to deselect the range - * @param clearOthers true to deselect rows not in the range - */ - protected void setRangeSelection( - MultiSelectionModel selectionModel, HasData display, - Range range, boolean addToSelection, boolean clearOthers) { - // Get the list of values to select. - List toUpdate = new ArrayList(); - int start = range.getStart(); - int end = start + range.getLength(); - for (int i = start; i < end ; i++) { - toUpdate.add(display.getVisibleItem(i-display.getVisibleRange().getStart())); - } - // Clear all other values. - if (clearOthers) { - clearSelection(selectionModel); - } - - // Update the state of the values. - for (T value : toUpdate) { - selectionModel.setSelected(value, addToSelection); - } - } -} - diff --git a/web_client/src/gr/grnet/pithos/web/client/SessionExpiredDialog.java b/web_client/src/gr/grnet/pithos/web/client/SessionExpiredDialog.java deleted file mode 100644 index 6eb7c7b..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/SessionExpiredDialog.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.user.client.Event.NativePreviewEvent; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.VerticalPanel; - - -public class SessionExpiredDialog extends DialogBox { - protected Pithos app; - /** - * The widget constructor. - */ - public SessionExpiredDialog(Pithos _app) { - app = _app; - // Set the dialog's caption. - setText("Session Expired"); - setAnimationEnabled(true); - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - - VerticalPanel outer = new VerticalPanel(); - - VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); - - // Create the text and set a style name so we can style it with CSS. - HTML text = new HTML("

Your session has expired. You will have to reauthenticate with your Identity Provider.

"); - text.setStyleName("pithos-sessionExpired"); - inner.add(text); - - // Create the 'OK' button, along with a listener that hides the dialog - // when the button is clicked. - Button confirm = new Button("Proceed", new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - app.authenticateUser(); - hide(); - } - }); - confirm.addStyleName("button"); - inner.add(confirm); - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - outer.setSpacing(8); - setWidget(outer); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - app.authenticateUser(); - hide(); - break; - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } - - - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/SharingUsers.java b/web_client/src/gr/grnet/pithos/web/client/SharingUsers.java deleted file mode 100644 index cf85793..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/SharingUsers.java +++ /dev/null @@ -1,50 +0,0 @@ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.Resource; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.google.gwt.http.client.Response; -import com.google.gwt.json.client.JSONArray; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.json.client.JSONParser; -import com.google.gwt.json.client.JSONValue; - -public class SharingUsers extends Resource { - private List users; - - public static SharingUsers createFromResponse(Response response, SharingUsers result) { - SharingUsers u; - if (result == null) - u = new SharingUsers(); - else - u = result; - u.populate(response); - return u; - } - - private void populate(Response response) { - users = new ArrayList(); - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array = json.isArray(); - if (array != null) { - for (int i=0; i getUsers() { - return users; - } - - @Override - public Date getLastModified() { - return null; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/SortableHeader.java b/web_client/src/gr/grnet/pithos/web/client/SortableHeader.java deleted file mode 100644 index c55cef5..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/SortableHeader.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.cell.client.Cell.Context; -import com.google.gwt.cell.client.ClickableTextCell; -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ClientBundle; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.safehtml.shared.SafeHtmlUtils; -import com.google.gwt.user.cellview.client.Header; -import com.google.gwt.user.client.ui.AbstractImagePrototype; - -/** - * A {@link Header} subclass that maintains sorting state and displays an icon - * to indicate the sort direction. - */ -public class SortableHeader extends Header { - - interface Template extends SafeHtmlTemplates { - @Template("
{1}
{2}
") - SafeHtml sorted(int imageWidth, SafeHtml arrow, String text); - - @Template("
{1}
") - SafeHtml unsorted(int imageWidth, String text); - } - - private static Template template; - - /** - * Image resources. - */ - public static interface Resources extends ClientBundle { - - ImageResource downArrow(); - - ImageResource upArrow(); - } - - private static final Resources RESOURCES = GWT.create(Resources.class); - private static final int IMAGE_WIDTH = 16; - private static final SafeHtml DOWN_ARROW = makeImage(RESOURCES.downArrow()); - private static final SafeHtml UP_ARROW = makeImage(RESOURCES.upArrow()); - - private static SafeHtml makeImage(ImageResource resource) { - AbstractImagePrototype proto = AbstractImagePrototype.create(resource); - String html = proto.getHTML().replace("style='", - "style='position:absolute;right:0px;top:0px;"); - return SafeHtmlUtils.fromTrustedString(html); - } - - private boolean reverseSort = false; - private boolean sorted = false; - private String text; - - SortableHeader(String text) { - super(new ClickableTextCell()); - if (template == null) { - template = GWT.create(Template.class); - } - this.text = text; - } - - public boolean getReverseSort() { - return reverseSort; - } - - @Override - public String getValue() { - return text; - } - - @Override - public void render(@SuppressWarnings("unused") Context context, SafeHtmlBuilder sb) { - if (sorted) { - sb.append(template.sorted(IMAGE_WIDTH, reverseSort ? DOWN_ARROW : UP_ARROW, text)); - } else { - sb.append(template.unsorted(IMAGE_WIDTH, text)); - } - } - - public void setReverseSort(boolean reverseSort) { - this.reverseSort = reverseSort; - } - - public void setSorted(boolean sorted) { - this.sorted = sorted; - } - - public void toggleReverseSort() { - this.reverseSort = !this.reverseSort; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/StatusPanel.java b/web_client/src/gr/grnet/pithos/web/client/StatusPanel.java deleted file mode 100644 index e186608..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/StatusPanel.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.VerticalPanel; - -/** - * The panel that displays a status bar with quota information. - */ -public class StatusPanel extends Composite { - - /** - * The constructor of the status panel. - */ - public StatusPanel() { - HorizontalPanel outer = new HorizontalPanel(); - outer.setWidth("100%"); - outer.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); - - VerticalPanel inner = new VerticalPanel(); - inner.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); - HorizontalPanel firstLine = new HorizontalPanel(); - firstLine.setSpacing(8); -// firstLine.addStyleName("pithos-statusbar"); - firstLine.add(new Anchor("About")); - firstLine.add(new HTML("|")); - firstLine.add(new Anchor("Help")); - firstLine.add(new HTML("|")); - firstLine.add(new Anchor("Contact")); - firstLine.add(new HTML("|")); - firstLine.add(new Anchor("Terms")); - firstLine.add(new HTML("|")); - firstLine.add(new Anchor("Privacy")); - inner.add(firstLine); - - HorizontalPanel secondLine = new HorizontalPanel(); - secondLine.add(new HTML("Copyright (C) 2011 Greek Research and Technology Network")); - inner.add(secondLine); - outer.add(inner); - outer.addStyleName("pithos-statusbar"); - - initWidget(outer); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/ToolsMenu.java b/web_client/src/gr/grnet/pithos/web/client/ToolsMenu.java deleted file mode 100644 index c7a1b2f..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/ToolsMenu.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.commands.AddUserCommand; -import gr.grnet.pithos.web.client.commands.CopyCommand; -import gr.grnet.pithos.web.client.commands.CreateGroupCommand; -import gr.grnet.pithos.web.client.commands.CutCommand; -import gr.grnet.pithos.web.client.commands.DeleteCommand; -import gr.grnet.pithos.web.client.commands.DeleteGroupCommand; -import gr.grnet.pithos.web.client.commands.EmptyTrashCommand; -import gr.grnet.pithos.web.client.commands.NewFolderCommand; -import gr.grnet.pithos.web.client.commands.PasteCommand; -import gr.grnet.pithos.web.client.commands.PropertiesCommand; -import gr.grnet.pithos.web.client.commands.RefreshCommand; -import gr.grnet.pithos.web.client.commands.RemoveUserCommand; -import gr.grnet.pithos.web.client.commands.RestoreTrashCommand; -import gr.grnet.pithos.web.client.commands.ToTrashCommand; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.grouptree.Group; -import gr.grnet.pithos.web.client.grouptree.GroupTreeView; -import gr.grnet.pithos.web.client.grouptree.User; - -import java.util.List; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.MenuItem; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * The 'Folder Context' menu implementation. - */ -public class ToolsMenu extends PopupPanel { - - /** - * The widget's images. - */ - private final Images images; - - /** - * The image bundle for this widget's images that reuses images defined in - * other menus. - */ - public interface Images extends GroupTreeView.Images { - } - - private MenuItem pasteItem; - - private boolean empty = false;; - - /** - * The widget's constructor. - * - * @param newImages the image bundle passed on by the parent object - */ - public ToolsMenu(final Pithos app, Images newImages, TreeView selectedTree, Folder folder, final List files) { - // The popup's constructor's argument is a boolean specifying that it - // auto-close itself when the user clicks outside of it. - super(true); - setAnimationEnabled(true); - images = newImages; - MenuBar contextMenu = new MenuBar(true); - - if (folder != null) { - Boolean[] permissions = folder.getPermissions().get(app.getUsername()); - boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); - boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); - boolean otherSharedTreeSelected = selectedTree.equals(app.getOtherSharedTreeView()); - - if (isFolderTreeSelected || otherSharedTreeSelected) { - MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(app, this, folder)); - contextMenu.addItem(refresh); - } - - if (!folder.isInTrash()) { - if (canWrite) { - MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(app, this, folder, images)); - contextMenu.addItem(newFolder); - - if (isFolderTreeSelected) { - MenuItem cut = null; - if (files != null && !files.isEmpty()) { - cut = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut files", true, new CutCommand(app, this, files)); - } - else if (!folder.isContainer()) { - cut = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut folder", true, new CutCommand(app, this, folder)); - } - if (cut != null) - contextMenu.addItem(cut); - } - } - - MenuItem copy = null; - if (files != null && !files.isEmpty()) - copy = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy files", true, new CopyCommand(app, this, files)); - else - copy = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy folder", true, new CopyCommand(app, this, folder)); - contextMenu.addItem(copy); - - if (canWrite) { - if (!app.getClipboard().isEmpty()) { - Object item = app.getClipboard().getItem(); - boolean showPaste = false; - if (item instanceof List) { - List _files = (List) item; - if (_files.get(0).getOwner().equals(folder.getOwner())) - showPaste = true; - } - else { - Folder f = (Folder) item; - if (f.getOwner().equals(folder.getOwner())) - showPaste = true; - } - if (showPaste) { - pasteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.paste()).getHTML() + " Paste", true, new PasteCommand(app, this, folder)); - contextMenu.addItem(pasteItem); - } - } - - if (isFolderTreeSelected) { - MenuItem moveToTrash = null; - if (files != null && !files.isEmpty()) { - moveToTrash = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move files to Trash", true, new ToTrashCommand(app, this, files)); - } - else if (!folder.isContainer()) { - moveToTrash = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move folder to Trash", true, new ToTrashCommand(app, this, folder)); - } - if (moveToTrash != null) - contextMenu.addItem(moveToTrash); - - MenuItem delete = null; - if (files != null && !files.isEmpty()) { - delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete files", true, new DeleteCommand(app, this, files, MessagePanel.images)); - } - else if (!folder.isContainer()) - delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete folder", true, new DeleteCommand(app, this, folder, MessagePanel.images)); - if (delete != null) - contextMenu.addItem(delete); - - MenuItem properties = null; - if (files != null && files.size() == 1) - properties = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " File properties", true, new PropertiesCommand(app, this, files, images, 0)); - else if (!folder.isContainer()) - properties = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Folder properties", true, new PropertiesCommand(app, this, folder, newImages, 0)); - if (properties != null) - contextMenu.addItem(properties); - } - if (files != null) { - contextMenu.addItem(new MenuItem("" + AbstractImagePrototype.create(newImages.download()).getHTML() + " Download", true, new Command() { - - @Override - public void execute() { - for (File f: files) - Window.open(app.getApiPath() + files.get(0).getOwner() + files.get(0).getUri() + "?X-Auth-Token=" + app.getToken(), "_blank", ""); - } - })); - } - } - } - else { - if (!folder.isTrash()) { - MenuItem restore = null; - if (files != null && !files.isEmpty()) - restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(app, this, files)); - else - restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(app, this, folder)); - contextMenu.addItem(restore); - - MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, folder, MessagePanel.images)); - contextMenu.addItem(delete); - } - else { - MenuItem emptyTrash = new MenuItem("" + AbstractImagePrototype.create(images.emptyTrash()).getHTML() + " Empty Trash", true, new EmptyTrashCommand(app, this)); - contextMenu.addItem(emptyTrash); - } - } - } - else { - Object o = app.getGroupTreeView().getSelected(); - if (o != null) { - if (o instanceof User) { - MenuItem removeUser = new MenuItem("" + AbstractImagePrototype.create(images.delete()).getHTML() + " Remove User", true, new RemoveUserCommand(app, this, (User) o)); - contextMenu.addItem(removeUser); - } - else if (o instanceof Group) { - MenuItem addUser = new MenuItem("" + AbstractImagePrototype.create(images.user()).getHTML() + " Add User", true, new AddUserCommand(app, this, (Group) o)); - contextMenu.addItem(addUser); - - MenuItem deleteGroup = new MenuItem("" + AbstractImagePrototype.create(images.delete()).getHTML() + " Delete Group", true, new DeleteGroupCommand(app, this, (Group) o)); - contextMenu.addItem(deleteGroup); - } - else { - MenuItem createGroup = new MenuItem("" + AbstractImagePrototype.create(images.group()).getHTML() + " Create Group", true, new CreateGroupCommand(app, this)); - contextMenu.addItem(createGroup); - } - } - else - empty = true; - } - add(contextMenu); - } - - public boolean isEmpty() { - return empty; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/TopPanel.java b/web_client/src/gr/grnet/pithos/web/client/TopPanel.java deleted file mode 100644 index 24968cf..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/TopPanel.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.safehtml.shared.SafeHtmlUtils; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Cookies; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.HasVerticalAlignment; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.MenuItem; - -/** - * The top panel, which contains the menu bar icons and the user name. - */ -public class TopPanel extends Composite { - - /** - * A constant that denotes the completion of an IncrementalCommand. - */ - public static final boolean DONE = false; - - Pithos app; - - /** - * An image bundle for this widgets images. - */ - public interface Images extends FilePropertiesDialog.Images { - - @Source("gr/grnet/pithos/resources/pithos2-logo.png") - ImageResource pithosLogo(); - - @Source("gr/grnet/pithos/resources/desc.png") - ImageResource downArrow(); - } - - /** - * The constructor for the top panel. - * - * @param images the supplied images - */ - public TopPanel(Pithos _app, final Images images) { - this.app = _app; - HorizontalPanel outer = new HorizontalPanel(); - outer.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - - outer.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); - outer.setStyleName("pithos-topPanel"); - - HorizontalPanel inner = new HorizontalPanel(); - inner.setWidth("75%"); - inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM); - - HTML logos = new HTML("
" + AbstractImagePrototype.create(images.pithosLogo()).getHTML() + "
"); - logos.addStyleName("pithos-logo"); - inner.add(logos); - - MenuBar username = new MenuBar(); - username.setStyleName("pithos-usernameMenu"); - - MenuBar userItemMenu = new MenuBar(true); - userItemMenu.addStyleName("pithos-userItemMenu"); - userItemMenu.addItem(new MenuItem("invite friends...", new Command() { - - @Override - public void execute() { - GetRequest getInvitations = new GetRequest (Invitations.class, "/im/", "", "invite?format=json") { - - @Override - public void onSuccess(Invitations _result) { - new InvitationsDialog(app, _result).center(); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) - app.displayError("Error getting invitations: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error getting invitations: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getInvitations.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getInvitations); - } - })); - userItemMenu.addItem(new MenuItem("send feedback...", new Command() { - - @Override - public void execute() { - new FeedbackDialog(app).center(); - } - })); - userItemMenu.addItem(new MenuItem("API access", new Command() { - - @Override - public void execute() { - new CredentialsDialog(app, images).center(); - } - })); - userItemMenu.addItem(new MenuItem("logout", new Command() { - - @Override - public void execute() { - app.logoff(); - } - })); - - MenuItem userItem = new MenuItem(_app.getUsername(), userItemMenu); - userItem.addStyleName("pithos-usernameMenuItem"); - username.addItem(userItem); - username.addSeparator(); - - MenuItem langItem = new MenuItem("en", (Command) null); - langItem.addStyleName("pithos-langMenuItem"); - username.addItem(langItem); - - inner.add(username); - inner.setCellHorizontalAlignment(username, HasHorizontalAlignment.ALIGN_RIGHT); - - outer.add(inner); - outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - outer.setCellVerticalAlignment(inner, HasVerticalAlignment.ALIGN_BOTTOM); - initWidget(outer); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/TreeView.java b/web_client/src/gr/grnet/pithos/web/client/TreeView.java deleted file mode 100644 index 0d4bad5..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/TreeView.java +++ /dev/null @@ -1,7 +0,0 @@ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.foldertree.Folder; - -public interface TreeView { - public Folder getSelection(); -} diff --git a/web_client/src/gr/grnet/pithos/web/client/VersionsList.java b/web_client/src/gr/grnet/pithos/web/client/VersionsList.java deleted file mode 100644 index 86a50ef..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/VersionsList.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client; - -import gr.grnet.pithos.web.client.FilePropertiesDialog.Images; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.foldertree.Version; -import gr.grnet.pithos.web.client.rest.PostRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.List; - -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.http.client.Response; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.VerticalPanel; - -public class VersionsList extends Composite { - - Pithos app; - - File file; - - private List versions = null; - - private Images images; - - private VerticalPanel permPanel = new VerticalPanel(); - - private FlexTable permTable = new FlexTable(); - - FilePropertiesDialog container; - - public VersionsList(Pithos _app, FilePropertiesDialog aContainer, final Images theImages, File _file, List theVersions) { - app = _app; - images = theImages; - container = aContainer; - file = _file; - versions = theVersions; - permTable.setText(0, 0, "Version"); - permTable.setText(0, 1, "Date"); - permTable.setText(0, 2, ""); - permTable.setText(0, 3, ""); - permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels"); - permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels"); - permTable.getFlexCellFormatter().setColSpan(0, 1, 2); - permTable.getFlexCellFormatter().setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER); - permTable.getFlexCellFormatter().setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_CENTER); - permPanel.add(permTable); - permPanel.addStyleName("pithos-TabPanelBottom"); - permTable.addStyleName("pithos-permList"); - initWidget(permPanel); - showVersionsTable(); - } - - public void showVersionsTable(){ - DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); - int i = 1; - for (final Version v : versions) { - HTML restoreVersion = new HTML("" + AbstractImagePrototype.create(images.restore()).getHTML() + "
Restore this Version
"); - restoreVersion.addClickHandler(new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - restoreVersion(v.getVersion()); - } - }); - - permTable.setHTML(i, 0, "" + v.getVersion() + ""); - if (v.getDate() != null) - permTable.setHTML(i, 1, "" + formatter.format(v.getDate()) + ""); - else - permTable.setHTML(i, 1, ""); - HTML downloadHtml = new HTML("" + AbstractImagePrototype.create(images.download()).getHTML()+"
View this Version
"); - downloadHtml.addClickHandler(new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - String fileUrl = app.getApiPath() + file.getOwner() + file.getUri() + "?X-Auth-Token=" + app.getToken() + "&version=" + v.getVersion(); - Window.open(fileUrl, "_BLANK", ""); - } - }); - permTable.setWidget(i, 2, downloadHtml); - permTable.setWidget(i, 3, restoreVersion); - permTable.getFlexCellFormatter().setStyleName(i, 0, "props-labels"); - permTable.getFlexCellFormatter().setHorizontalAlignment(i, 0, HasHorizontalAlignment.ALIGN_CENTER); - permTable.getFlexCellFormatter().setHorizontalAlignment(i, 1, HasHorizontalAlignment.ALIGN_CENTER); - permTable.getFlexCellFormatter().setColSpan(i, 1, 2); - i++; - } - } - - void restoreVersion(int version) { - String path = file.getUri() + "?update="; - PostRequest restoreVersion = new PostRequest(app.getApiPath(), file.getOwner(), path) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - container.hide(); - } - - @Override - public void onError(Throwable t) { - if (t instanceof RestException) { - if (((RestException) t).getHttpStatusCode() == Response.SC_NO_CONTENT) - onSuccess(null); - else - app.displayError("Unable to restore version: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to restore versions: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - restoreVersion.setHeader("X-Auth-Token", app.getToken()); - restoreVersion.setHeader("X-Source-Object", file.getUri()); - restoreVersion.setHeader("X-Source-Version", String.valueOf(version)); - restoreVersion.setHeader("Content-Range", "bytes 0-/*"); - Scheduler.get().scheduleDeferred(restoreVersion); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/animation/FadeIn.java b/web_client/src/gr/grnet/pithos/web/client/animation/FadeIn.java deleted file mode 100644 index 92c729b..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/animation/FadeIn.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.animation; - -import com.google.gwt.animation.client.Animation; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; - - -public class FadeIn extends Animation { - Widget widget; - int initialOpacity = 100; - double currOpacity = 100; - - public FadeIn(Widget aWidget){ - widget = aWidget; - } - - @Override - protected void onUpdate(double progress) { - if(currOpacity > 0.0){ - double progress1 = 1.0 - progress; - currOpacity = initialOpacity * progress1; - DOM.setStyleAttribute(widget.getElement(), "opacity", ""+new Double(1d - currOpacity / 100d)); - //required for ie to work - //Disabled because IE has bugs rendering non-opaque objects - //int opacityToSet = new Double(currOpacity).intValue(); - //DOM.setStyleAttribute(widget.getElement(), "filter", "alpha(opacity=" + (initialOpacity - opacityToSet) + ")"); - } - } - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/animation/FadeOut.java b/web_client/src/gr/grnet/pithos/web/client/animation/FadeOut.java deleted file mode 100644 index 3eba2a4..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/animation/FadeOut.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.animation; - -import com.google.gwt.animation.client.Animation; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; - - -public class FadeOut extends Animation { - Widget widget; - - int initialOpacity = 100; - double currOpacity = 100; - - public FadeOut(Widget aWidget){ - widget = aWidget; - } - - @Override - protected void onUpdate(double progress) { - if(currOpacity>0.0){ - double progress1 = 1.0 - progress; - currOpacity = initialOpacity*progress1; - DOM.setStyleAttribute(widget.getElement(), "opacity", ""+new Double(currOpacity/100d)); - //required for ie to work - //Disabled because IE has bugs rendering non-opaque objects - //int opacityToSet = new Double(currOpacity).intValue(); - //DOM.setStyleAttribute(widget.getElement(), "filter", "alpha(opacity="+currOpacity+")"); - } - } - - /* - protected void onComplete() { - super.onComplete(); - hpanel.clear(); - html = new HTML(" "); - hpanel.getParent().setVisible(false); - } - */ - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/cellTreeClosedItem.png b/web_client/src/gr/grnet/pithos/web/client/cellTreeClosedItem.png deleted file mode 100644 index d39dd6a93282d42aa1b87c79123970ce643a5396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VN3FMcVYMs zf(!O8p9~b?EbxddW?wc6x=<11Hv2m#DR*mJzX3_BrYc>D2Q8Z(fj-U!mcm&yDWq^ svI(r6Aebg==gPinvEunv|=^{{3L_~@d?^h_LNa?zD*M4L6`S{K= z@BC)|GmobTH{}O~KnUgmc>44y0R0y){&?WPo!Z(7hhx<3zS7)${lgFMjgSBI(MR_) zGKSUaVV&+0ijLUrqv7!6@#BwIul}~Rb?W~8#fJ|U&zzZk`|Vq0Wmf}%i4!MghKA}%0!`nHj~{4intboQyN!*L$BsS1@hg1(`6EXj9z1v_ zIeCc9K7af6lexL2ojbqp=(sUIzXaipPd<6DxcJM`(l4h@&3yCC4+{%RBO~+O-47o> z{`ta%AE&1mCMJFw7??YEZnm#)W^!_2baZ}p_UEy&`CYrFzxd+O(W8$_O2#TG#;dEZ z)zy9HbdFlBm(QM^ZEycxufKHn?qXKf#eMs3RaITnXfDd--yS-2&+osQm^iq1@6CpW z@AC3SzW(}${{Fd}H=lg@<>NQsoZi3x_WSSOtE?PnnA<+znAba|R9^V_VBH@37jDT3kP&PYqJLA#~7u?3_(iRJNs-O@b!;aNn$ z`STtC$qtH=rLW1MDemfwEG(qdmK|ZPe}M0+J(I|0Ehp@JF0{nFS|!-HNk#)}@+)y0a%wVOQ&GOs z^b z;W!Nnq!lT2F3bH7n6J+(;+f64g|)I_5>r)bs#ATgAi)s%Md8E3{ebQ!0c*u_z&}0* z^7u(x*Z~cT1};u9J0X6hARM7gfz3_jVzH}YtAI-?8~j$fDW^;Z>xGRB5Wc<%YLe_x zUvn7hy}Br&&4KbfLzH@1>KW>&4Y{JInM6_>Pf}*vAnAEI6(fvB9g-_XDThn#a$*)o z?l_I}WUUK|#J^Vm&9R)W>$$E#Ef@OJA|4v#OF5aVHg633eH51NjmU7Db5la8l_XSp z6W#b)i3R3Ysu|!F#6X{h7Zq)N6-FA(Q6%vd*b@1QAzo~S5^G)5_j)n(sO?dIRyxFM zO-g3lN{q~{%~$H6aSm*!kU|zuN!Sc%^PNKqT<}8jik3C25$-bfR1_@140`k&~754&hQQxbQ+`LgyKHz zD@Gj8?q%tsuJ!;F^G-55T4NwuS8$1vZ&<@34FqB!von7e$EQ$SXNKD5Hg2@pWYC=% z`J9CRKe5h{ug(@>2n`6#RPRgWZs*%6v8>iZpk`%CWhF+U4tp-`%nQ{)8}Dp14IqO%%*UJG+w1t34RY9n@te)YuA_h==L|7 zYjQTUCR-USeM_8R;J}rc&n6Eon|SZ@#70|z#comRXkaGXJQn6Ol`AP!oGUf}qu8P@ za&+iyX4;eL6GNlnFjL-$9Yq=F)>!)}gFJM)!;mM3Z0#wAwN?f7S%JQ4jtI))YoxT* zzx!QSy)|cNJtCG=?h2SFZt3q^+v5|$e{cf4F%}28J29*~C-V}>VN3FMcVYMs zf(!O8p9~b?EbxddW?wc6x=<11Hv2m#DR*mJzX3_BrYc>D2Q8Z(Mv7Ji0x85=dy;; sMLVS>>bv~>Ma)+(_V_p-Fm_>PV0+2AMKa)~H&7dcr>mdKI;Vst0LGv>m;e9( diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java deleted file mode 100644 index c82874c..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.grouptree.Group; -import gr.grnet.pithos.web.client.rest.PostRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * Display the 'new folder' dialog for creating a new folder. - * - */ -public class AddUserCommand implements Command { - private PopupPanel containerPanel; - - Group group; - - Pithos app; - - /** - * @param aContainerPanel - */ - public AddUserCommand(Pithos _app, PopupPanel aContainerPanel, Group _group){ - app = _app; - containerPanel = aContainerPanel; - group = _group; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - String username = Window.prompt("Enter username:", ""); - if (username != null && username.length() > 0) { - group.addMember(username); - String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUsername(), path) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - app.updateGroupNode(group); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to update group:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error updating group:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - updateGroup.setHeader("X-Auth-Token", app.getToken()); - String groupMembers = ""; - for (String u : group.getMembers()) - groupMembers += (u + ","); - updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), groupMembers); - Scheduler.get().scheduleDeferred(updateGroup); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/CopyCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/CopyCommand.java deleted file mode 100644 index c76955d..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/CopyCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Clipboard; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import java.util.List; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; -/** - * - * Command for copying a file, folder or user to Pithos Clipboard - * - */ -public class CopyCommand implements Command{ - private Pithos app; - private PopupPanel containerPanel; - private Object resource; - - public CopyCommand(Pithos _app, PopupPanel _containerPanel, Object _resource){ - app = _app; - containerPanel = _containerPanel; - resource = _resource; - } - - @SuppressWarnings("unchecked") - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - - if (resource instanceof Folder) { - app.getClipboard().setItem(Clipboard.COPY, (Folder) resource); - } else if (resource instanceof List) { - app.getClipboard().setItem(Clipboard.COPY, (List) resource); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/CreateGroupCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/CreateGroupCommand.java deleted file mode 100644 index b65b9bc..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/CreateGroupCommand.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Pithos; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * Display the 'new folder' dialog for creating a new folder. - * - */ -public class CreateGroupCommand implements Command { - private PopupPanel containerPanel; - - Pithos app; - - /** - * @param aContainerPanel - */ - public CreateGroupCommand(Pithos _app, PopupPanel aContainerPanel){ - app = _app; - containerPanel = aContainerPanel; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - String groupname = Window.prompt("Enter group name:", ""); - if (groupname != null && groupname.length() > 0) { - app.addGroup(groupname); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/CutCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/CutCommand.java deleted file mode 100644 index ae67da4..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/CutCommand.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Clipboard; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; - -import gr.grnet.pithos.web.client.foldertree.Folder; -import java.util.List; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * Command for cutting a file, folder or user to Pithos Clipboard - * - */ -public class CutCommand implements Command { - private Pithos app; - - private PopupPanel containerPanel; - - private Object resource; - - public CutCommand(Pithos _app, PopupPanel _containerPanel, Object _resource){ - app = _app; - containerPanel = _containerPanel; - resource = _resource; - } - - @SuppressWarnings("unchecked") - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - - if (resource instanceof Folder) { - app.getClipboard().setItem(Clipboard.CUT, (Folder) resource); - } else if (resource instanceof List) { - app.getClipboard().setItem(Clipboard.CUT, (List) resource); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/DeleteCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/DeleteCommand.java deleted file mode 100644 index dcfc719..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/DeleteCommand.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.DeleteFileDialog; -import gr.grnet.pithos.web.client.DeleteFolderDialog; -import gr.grnet.pithos.web.client.MessagePanel.Images; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import java.util.List; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - - -/** - * Delete selected object command - * - */ -public class DeleteCommand implements Command{ - private PopupPanel containerPanel; - final Images newImages; - - private Object resource; - - private Pithos app; - /** - * @param _containerPanel - * @param _newImages the images of all the possible delete dialogs - */ - public DeleteCommand(Pithos _app, PopupPanel _containerPanel, Object resource, final Images _newImages ){ - app = _app; - containerPanel = _containerPanel; - newImages = _newImages; - this.resource = resource; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - - if (resource instanceof Folder) { - DeleteFolderDialog dlg = new DeleteFolderDialog(app, newImages, (Folder) resource); - dlg.center(); - } else if (resource instanceof List) { - @SuppressWarnings("unchecked") - DeleteFileDialog dlg = new DeleteFileDialog(app, newImages, (List) resource); - dlg.center(); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java deleted file mode 100644 index d87b679..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.grouptree.Group; -import gr.grnet.pithos.web.client.rest.PostRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.PopupPanel; - - -/** - * Delete selected object command - * - */ -public class DeleteGroupCommand implements Command { - private PopupPanel containerPanel; - - Group group; - - Pithos app; - - /** - * @param _containerPanel - */ - public DeleteGroupCommand(Pithos _app, PopupPanel _containerPanel, Group _group){ - app = _app; - containerPanel = _containerPanel; - group = _group; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - if (Window.confirm("Are you sure you want to delete group " + group.getName())) { - String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUsername(), path) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - app.removeGroup(group); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to delete group:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error deleting group:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - updateGroup.setHeader("X-Auth-Token", app.getToken()); - updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), "~"); - Scheduler.get().scheduleDeferred(updateGroup); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java deleted file mode 100644 index b519a0f..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import java.util.Iterator; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - - -/** - * Command to empty trash bin. - */ -public class EmptyTrashCommand implements Command{ - private PopupPanel containerPanel; - - Pithos app; - - public EmptyTrashCommand(Pithos _app, PopupPanel _containerPanel){ - app = _app; - containerPanel = _containerPanel; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - - final Folder trash = app.getAccount().getTrash(); - if (trash != null) { - Iterator iter = trash.getFiles().iterator(); - deleteFile(iter, new Command() { - - @Override - public void execute() { - Iterator iter2 = trash.getSubfolders().iterator(); - deleteSubfolder(iter2, new Command() { - - @Override - public void execute() { - app.updateTrash(true, new Command() { - - @Override - public void execute() { - app.updateStatistics(); - } - }); - } - }); - } - }); - } - } - - protected void deleteSubfolder(final Iterator iter2, final Command callback) { - if (iter2.hasNext()) { - final Folder f = iter2.next(); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) { - - @Override - public void onSuccess(final Folder _f) { - Iterator iter3 = _f.getFiles().iterator(); - deleteFile(iter3, new Command() { - - @Override - public void execute() { - Iterator iter4 = _f.getSubfolders().iterator(); - deleteSubfolder(iter4, new Command() { - - @Override - public void execute() { - String path = _f.getUri(); - DeleteRequest deleteF = new DeleteRequest(app.getApiPath(), _f.getOwner(), path) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - deleteSubfolder(iter2, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to delete file:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error deleting file:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - deleteF.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(deleteF); - } - }); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error getting folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - else { - if (callback != null) - callback.execute(); - } - } - - void deleteFile(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - File f = iter.next(); - String path = f.getUri(); - DeleteRequest deleteF = new DeleteRequest(app.getApiPath(), f.getOwner(), path) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - deleteFile(iter, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to delete file:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error deleting file:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - deleteF.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(deleteF); - } - else { - if (callback != null) - callback.execute(); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java deleted file mode 100644 index 2a11afa..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.FileContextMenu.Images; -import gr.grnet.pithos.web.client.FolderPropertiesDialog; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * Display the 'new folder' dialog for creating a new folder. - * - */ -public class NewFolderCommand implements Command{ - private PopupPanel containerPanel; - - private Folder folder; - final Images images; - - private Pithos app; - - /** - * @param aContainerPanel - * @param newImages the images of the new folder dialog - */ - public NewFolderCommand(Pithos _app, PopupPanel aContainerPanel, Folder folder, final Images newImages){ - app = _app; - containerPanel = aContainerPanel; - images=newImages; - this.folder = folder; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - displayNewFolderDialog(); - } - - void displayNewFolderDialog() { - if (folder != null) { - FolderPropertiesDialog dlg = new FolderPropertiesDialog(app, true, folder); - dlg.center(); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java deleted file mode 100644 index a6c8f10..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import com.google.gwt.core.client.Scheduler; -import gr.grnet.pithos.web.client.Clipboard; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.PutRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.Iterator; -import java.util.List; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.http.client.Response; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -public class PasteCommand implements Command { - - protected Pithos app; - private PopupPanel containerPanel; - protected Folder folder; - - public PasteCommand(Pithos _app, PopupPanel _containerPanel, Folder _folder) { - app = _app; - containerPanel = _containerPanel; - folder = _folder; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - - Object clipboardItem = app.getClipboard().getItem(); - if (clipboardItem == null) - return; - int operation = app.getClipboard().getOperation(); - if (clipboardItem instanceof Folder) { - final Folder tobeCopied = (Folder) clipboardItem; - if (operation == Clipboard.COPY) { - app.copyFolder(tobeCopied, folder.getOwner(), folder.getUri(), new Command() { - @Override - public void execute() { - app.getClipboard().clear(); - app.updateFolder(folder, true, new Command() { - - @Override - public void execute() { - app.updateStatistics(); - } - }); - } - }); - } - else { - app.copyFolder(tobeCopied, folder.getOwner(), folder.getUri(), new Command() { - @Override - public void execute() { - app.getClipboard().clear(); - app.deleteFolder(tobeCopied); - app.updateFolder(folder, true, null); - } - }); - } - } - else { - @SuppressWarnings("unchecked") - List tobeCopied = (List) clipboardItem; - Iterator iter = tobeCopied.iterator(); - if (operation == Clipboard.COPY) { - app.copyFiles(iter, folder.getOwner(), folder.getUri(), new Command() { - @Override - public void execute() { - app.getClipboard().clear(); - app.updateFolder(folder, true, new Command() { - - @Override - public void execute() { - app.updateStatistics(); - } - }); - } - }); - } - else { - moveFiles(iter, new Command() { - @Override - public void execute() { - app.getClipboard().clear(); - app.updateFolder(folder, true, null); - } - }); - } - } - } - - protected void moveFiles(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - File file = iter.next(); - String path = folder.getUri() + "/" + file.getName(); - PutRequest copyFile = new PutRequest(app.getApiPath(), folder.getOwner(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - moveFiles(iter, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to copy file: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - copyFile.setHeader("X-Auth-Token", app.getToken()); - copyFile.setHeader("X-Move-From", file.getUri()); - copyFile.setHeader("Content-Type", file.getContentType()); - Scheduler.get().scheduleDeferred(copyFile); - } - else if (callback != null) { - callback.execute(); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java deleted file mode 100644 index be49fc9..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.FileContextMenu; -import gr.grnet.pithos.web.client.FilePropertiesDialog; -import gr.grnet.pithos.web.client.FilesPropertiesDialog; -import gr.grnet.pithos.web.client.FolderPropertiesDialog; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import java.util.List; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * The command that displays the appropriate Properties dialog, according to the - * selected object in the application. - * - */ -public class PropertiesCommand implements Command { - - final FileContextMenu.Images newImages; - - private PopupPanel containerPanel; - - private int tabToShow = 0; - - private Object resource; - - private Pithos app; - - /** - * @param _containerPanel - * @param _newImages the images of all the possible delete dialogs - * @param _tab the tab to switch to - */ - public PropertiesCommand(Pithos _app, PopupPanel _containerPanel, Object _resource, final FileContextMenu.Images _newImages, int _tab) { - containerPanel = _containerPanel; - newImages = _newImages; - tabToShow = _tab; - resource = _resource; - app = _app; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - - if (resource instanceof Folder) { - Folder folder = (Folder) resource; - FolderPropertiesDialog dlg = new FolderPropertiesDialog(app, false, folder); - dlg.selectTab(tabToShow); - dlg.center(); - } - else if (resource instanceof List) { - @SuppressWarnings("unchecked") - List files = (List) resource; - if (files.size() > 1) { - FilesPropertiesDialog dlg = new FilesPropertiesDialog(app, files); - dlg.selectTab(tabToShow); - dlg.center(); - } - else { - FilePropertiesDialog dlg = new FilePropertiesDialog(app, files.get(0)); - dlg.selectTab(tabToShow); - dlg.center(); - } - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/RefreshCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/RefreshCommand.java deleted file mode 100644 index 7403d74..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/RefreshCommand.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - - -public class RefreshCommand implements Command { - - private PopupPanel containerPanel; - - private Pithos app; - - private Folder folder; - - /** - * @param _containerPanel - */ - public RefreshCommand(Pithos _app, PopupPanel _containerPanel, Folder _folder) { - app = _app; - containerPanel = _containerPanel; - folder = _folder; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - app.updateFolder(folder, true, null); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java deleted file mode 100644 index d084938..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.grouptree.Group; -import gr.grnet.pithos.web.client.grouptree.User; -import gr.grnet.pithos.web.client.rest.PostRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * Display the 'new folder' dialog for creating a new folder. - * - */ -public class RemoveUserCommand implements Command { - private PopupPanel containerPanel; - - User user; - - Pithos app; - - /** - * @param aContainerPanel - */ - public RemoveUserCommand(Pithos _app, PopupPanel aContainerPanel, User _user){ - app = _app; - containerPanel = aContainerPanel; - user = _user; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - final Group group = user.getGroup(); - group.removeMember(user.getName()); - String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUsername(), path) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - app.updateGroupNode(group); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to update group:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error updating group:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - updateGroup.setHeader("X-Auth-Token", app.getToken()); - String groupMembers = ""; - if (!group.getMembers().isEmpty()) { - for (String u : group.getMembers()) - groupMembers += (u + ","); - } - else - groupMembers = "~"; - updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), groupMembers); - Scheduler.get().scheduleDeferred(updateGroup); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/ResreshOthersSharesCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/ResreshOthersSharesCommand.java deleted file mode 100644 index 1fc5e36..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/ResreshOthersSharesCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - - -public class ResreshOthersSharesCommand implements Command{ - private PopupPanel containerPanel; - - public ResreshOthersSharesCommand(PopupPanel _containerPanel){ - containerPanel = _containerPanel; - } - - @Override - public void execute() { - containerPanel.hide(); - //TODO:CELLTREE - //app.getFolders().update( app.getFolders().getCurrent()); - } - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java deleted file mode 100644 index a3f220d..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import java.util.Iterator; -import java.util.List; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.PutRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - - -/** - * - * Restore trashed files and folders. - * - */ -public class RestoreTrashCommand implements Command { - private PopupPanel containerPanel; - protected Pithos app; - protected Object resource; - - public RestoreTrashCommand(Pithos _app, PopupPanel _containerPanel, Object _resource){ - containerPanel = _containerPanel; - app = _app; - resource = _resource; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - if (resource instanceof List) { - @SuppressWarnings("unchecked") - Iterator iter = ((List) resource).iterator(); - untrashFiles(iter, new Command() { - @SuppressWarnings("unchecked") - @Override - public void execute() { - app.updateFolder(((List) resource).get(0).getParent(), true, null); - } - }); - } - else if (resource instanceof Folder) { - final Folder toBeUnTrashed = (Folder) resource; - untrashFolder(toBeUnTrashed, new Command() { - @Override - public void execute() { - app.updateFolder(toBeUnTrashed.getParent(), true, null); - } - }); - - } - } - - private void untrashFolder(final Folder f, final Command callback) { - String path = "/" + Pithos.HOME_CONTAINER + "/" + f.getPrefix(); - PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) { - - @Override - public void onSuccess(final Folder _f) { - Iterator iter = _f.getFiles().iterator(); - untrashFiles(iter, new Command() { - @Override - public void execute() { - Iterator iterf = _f.getSubfolders().iterator(); - untrashSubfolders(iterf, new Command() { - - @Override - public void execute() { - DeleteRequest deleteFolder = new DeleteRequest(app.getApiPath(), _f.getOwner(), _f.getUri()) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource _result) { - app.updateRootFolder(callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) - onSuccess(null); - else - app.displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to delete folder: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - deleteFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(deleteFolder); - } - }); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error getting folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error creating folder:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - createFolder.setHeader("X-Auth-Token", app.getToken()); - createFolder.setHeader("Accept", "*/*"); - createFolder.setHeader("Content-Length", "0"); - createFolder.setHeader("Content-Type", "application/folder"); - Scheduler.get().scheduleDeferred(createFolder); - } - - protected void untrashFiles(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - File file = iter.next(); - String path = "/" + Pithos.HOME_CONTAINER + "/" + file.getPath(); - PutRequest untrashFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - untrashFiles(iter, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to copy file: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - untrashFile.setHeader("X-Auth-Token", app.getToken()); - untrashFile.setHeader("X-Move-From", file.getUri()); - Scheduler.get().scheduleDeferred(untrashFile); - } - else if (callback != null) { - callback.execute(); - } - } - - protected void untrashSubfolders(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - untrashFolder(f, new Command() { - - @Override - public void execute() { - untrashSubfolders(iter, callback); - } - }); - } - else { - if (callback != null) - callback.execute(); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java deleted file mode 100644 index 538d48c..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.PutRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.Iterator; -import java.util.List; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * - * Move file or folder to trash. - * - * - */ -public class ToTrashCommand implements Command{ - private PopupPanel containerPanel; - protected Pithos app; - protected Object resource; - - public ToTrashCommand(Pithos _app, PopupPanel _containerPanel, Object _resource){ - containerPanel = _containerPanel; - app = _app; - resource = _resource; - } - - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - if (resource instanceof List) { - @SuppressWarnings("unchecked") - Iterator iter = ((List) resource).iterator(); - trashFiles(iter, new Command() { - @SuppressWarnings("unchecked") - @Override - public void execute() { - app.updateFolder(((List) resource).get(0).getParent(), true, null); - } - }); - } - else if (resource instanceof Folder) { - final Folder toBeTrashed = (Folder) resource; - trashFolder(toBeTrashed, new Command() { - @Override - public void execute() { - app.updateFolder(toBeTrashed.getParent(), true, null); - } - }); - - } - } - - private void trashFolder(final Folder f, final Command callback) { - String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix(); - PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) { - - @Override - public void onSuccess(final Folder _f) { - Iterator iter = _f.getFiles().iterator(); - trashFiles(iter, new Command() { - @Override - public void execute() { - Iterator iterf = _f.getSubfolders().iterator(); - trashSubfolders(iterf, new Command() { - - @Override - public void execute() { - DeleteRequest deleteFolder = new DeleteRequest(app.getApiPath(), _f.getOwner(), _f.getUri()) { - - @Override - public void onSuccess(@SuppressWarnings("unused") Resource _result) { - if (callback != null) - callback.execute(); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) - onSuccess(null); - else - app.displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to delete folder: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - deleteFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(deleteFolder); - } - }); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error getting folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error creating folder:" + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - createFolder.setHeader("X-Auth-Token", app.getToken()); - createFolder.setHeader("Accept", "*/*"); - createFolder.setHeader("Content-Length", "0"); - createFolder.setHeader("Content-Type", "application/folder"); - Scheduler.get().scheduleDeferred(createFolder); - } - - - - protected void trashFiles(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - File file = iter.next(); - String path = "/" + Pithos.TRASH_CONTAINER + "/" + file.getPath(); - PutRequest trashFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { - @Override - public void onSuccess(@SuppressWarnings("unused") Resource result) { - trashFiles(iter, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error unable to copy file: "+t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - trashFile.setHeader("X-Auth-Token", app.getToken()); - trashFile.setHeader("X-Move-From", file.getUri()); - Scheduler.get().scheduleDeferred(trashFile); - } - else if (callback != null) { - callback.execute(); - } - } - - protected void trashSubfolders(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - trashFolder(f, new Command() { - - @Override - public void execute() { - trashSubfolders(iter, callback); - } - }); - } - else { - app.updateTrash(false, callback); - } - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/UploadFileCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/UploadFileCommand.java deleted file mode 100644 index 1c8f1ff..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/commands/UploadFileCommand.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.commands; - -import gr.grnet.pithos.web.client.FileUploadDialog; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * Upload a file command - * - */ -public class UploadFileCommand implements Command { - - private PopupPanel containerPanel; - - private Pithos app; - - /* - * The folder that is the target of the upload - */ - private Folder folder; - - public UploadFileCommand(Pithos _app, PopupPanel _containerPanel, Folder _folder) { - app = _app; - containerPanel = _containerPanel; - folder = _folder; - } - - @Override - public void execute() { - if(containerPanel!=null) - containerPanel.hide(); - displayNewFile(); - } - - /** - * Display the 'new file' dialog for uploading a new file to the system. - */ - private void displayNewFile() { - FileUploadDialog dlg = GWT.create(FileUploadDialog.class); - dlg.setApp(app); - dlg.setFolder(folder); - dlg.center(); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/components/TristateCheckBox.java b/web_client/src/gr/grnet/pithos/web/client/components/TristateCheckBox.java deleted file mode 100644 index 65af3b6..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/components/TristateCheckBox.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.components; - -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeEvent; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.ui.FocusWidget; -import com.google.gwt.user.client.ui.HasValue; - -/** - * Checkbox with three states (checked, unchecked and undefined). - * - */ -public class TristateCheckBox extends FocusWidget implements HasValue { - - private static final String UNCHECKED_IMG = "images/tristate_unchecked.gif"; - - private static final String UNKNOWN_IMG = "images/tristate_intermediate.gif"; - - private static final String CHECKED_IMG = "images/tristate_checked.gif"; - - protected final Element buttonElement = DOM.createElement("input"); - - private boolean valueChangeHandlerInitialized; - - private Boolean value; - - protected Boolean initialValue; - - public TristateCheckBox(final Boolean state) { - DOM.setElementProperty(buttonElement, "type", "image"); - setElement(buttonElement); - setStyleName("tristateCheckbox"); - DOM.setElementAttribute(buttonElement, "src", UNCHECKED_IMG); - - addClickHandler(new ClickHandler() { - - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - final String img = DOM.getElementAttribute(buttonElement, "src"); - String newImg; - if (img.endsWith(UNCHECKED_IMG)) - newImg = CHECKED_IMG; - else if (img.endsWith(UNKNOWN_IMG)) - newImg = UNCHECKED_IMG; - else if (img.endsWith(CHECKED_IMG)) - if (initialValue==null) // Only show unknown choice if there is a reason for it - newImg = UNKNOWN_IMG; - else - newImg = UNCHECKED_IMG; - else - throw new IllegalArgumentException("unknown checkbox state"); - - DOM.setElementAttribute(buttonElement, "src", newImg); - } - - }); - - setState(state); - initialValue = state; - } - - public void setState(final Boolean state) { - DOM.setElementAttribute(buttonElement, "src", state == null ? - UNKNOWN_IMG : state.booleanValue() ? CHECKED_IMG : UNCHECKED_IMG); - } - - public Boolean getState() { - final String img = DOM.getElementAttribute(buttonElement, "src"); - if (img.endsWith(UNCHECKED_IMG)) - return Boolean.FALSE; - else if (img.endsWith(UNKNOWN_IMG)) - return null; - else if (img.endsWith(CHECKED_IMG)) - return Boolean.TRUE; - else - throw new IllegalArgumentException("unknown checkbox state"); - } - - @Override - public Boolean getValue() { - return value; - } - - @Override - public void setValue(final Boolean _value) { - value = _value; - } - - @Override - public HandlerRegistration addValueChangeHandler( - ValueChangeHandler handler) { - // Is this the first value change handler? If so, time to add handlers - if (!valueChangeHandlerInitialized) { - ensureDomEventHandlers(); - valueChangeHandlerInitialized = true; - } - return addHandler(handler, ValueChangeEvent.getType()); - } - - protected void ensureDomEventHandlers() { - addClickHandler(new ClickHandler() { - @Override - public void onClick(@SuppressWarnings("unused") ClickEvent event) { - ValueChangeEvent.fire(TristateCheckBox.this, getValue()); - } - }); - } - - @Override - public void setValue(Boolean _value, boolean fireEvents) { - Boolean oldValue = getValue(); - setValue(_value); - if (_value.equals(oldValue)) - return; - if (fireEvents) - ValueChangeEvent.fire(this, _value); - } - -} \ No newline at end of file diff --git a/web_client/src/gr/grnet/pithos/web/client/downArrow.png b/web_client/src/gr/grnet/pithos/web/client/downArrow.png deleted file mode 100644 index fd4012ce0aa4f2c2e0b3baf66cf0c8a577c33b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^+(69E!3HGn{(JaZG%Q-e|yQz{EjrrH1%E%9`545_#k)9cH1D1fI${rtVt z-W*X^q&u=51-u+zaPH~gj@|iDERR*Qf!A zRYzBtm$2Av+00Yq5)pX((}pR!xwD1ZqYp5-&o-)1Ii0t5x7Fvw=Rq9?0m08YGVi8) z72n+%A+cWeVAXu?)vfEJ^XC+Q3@Mf|>0z2P>wk2?Us2~xl1ZIs88`jEzK@BAq0id< V)-C_%M}Y2S@O1TaS?83{1OOfmXgUA@ diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java deleted file mode 100644 index e6283e1..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.grouptree.Group; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.google.gwt.http.client.Header; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.json.client.JSONArray; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.json.client.JSONParser; -import com.google.gwt.json.client.JSONValue; - -/** - * Created by IntelliJ IDEA. User: chstath Date: 5/19/11 Time: 2:55 PM To change this template use File | Settings | - * File Templates. - */ -public class AccountResource extends Resource { - - private long numberOfContainers = 0; - - private long numberOfObjects = 0; - - private long bytesUsed = 0; - - private long quota = 0; - - private Date lastLogin = null; - - private Date lastModified = null; - - private List containers = new ArrayList(); - - private Date currentLogin = null; - - private List groups = new ArrayList(); - - public long getQuota() { - return quota; - } - - public void setQuota(long quota) { - this.quota = quota; - } - - public long getBytesUsed() { - return bytesUsed; - } - - public void setBytesUsed(long bytesUsed) { - this.bytesUsed = bytesUsed; - } - - public Date getLastLogin() { - return lastLogin; - } - - public void setLastLogin(Date lastLogin) { - this.lastLogin = lastLogin; - } - - @Override - public Date getLastModified() { - return lastModified; - } - - public void setLastModified(Date lastModified) { - this.lastModified = lastModified; - } - - public long getNumberOfContainers() { - return numberOfContainers; - } - - public void setNumberOfContainers(long numberOfContainers) { - this.numberOfContainers = numberOfContainers; - } - - public long getNumberOfObjects() { - return numberOfObjects; - } - - public void setNumberOfObjects(long numberOfObjects) { - this.numberOfObjects = numberOfObjects; - } - - public List getContainers() { - return containers; - } - - public Date getCurrentLogin() { - return currentLogin; - } - - public void setCurrentLogin(Date currentLogin) { - this.currentLogin = currentLogin; - } - - public void populate(String owner, Response response) { - DateTimeFormat df = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822); - for (Header h : response.getHeaders()) { - if (h != null) { - String name = h.getName(); - if (name.startsWith("X-Account-Group-")) { - String groupName = URL.decodePathSegment(name.substring("X-Account-Group-".length())).trim().toLowerCase(); - Group g = new Group(groupName); - String[] members = h.getValue().split(","); - for (String s : members) - g.addMember(s.trim()); - groups.add(g); - } - else if (name.equals("X-Account-Container-Count")) { - numberOfContainers = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Object-Count")) { - numberOfObjects = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Bytes-Used")) { - bytesUsed = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Policy-Quota")) { - quota = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Last-Login")) { - lastLogin = df.parse(h.getValue()); - } - else if (name.equals("Last-Modified")) { - lastModified = df.parse(h.getValue()); - } - } - } - - if (response.getText() != null && response.getText().length() > 0) { - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array = json.isArray(); - if (array != null) { - for (int i=0; i getGroups() { - return groups; - } - - public boolean hasHomeContainer() { - for (Folder f : containers) - if (f.getName().equals(Pithos.HOME_CONTAINER)) - return true; - return false; - } - - public boolean hasTrashContainer() { - for (Folder f : containers) - if (f.getName().equals(Pithos.TRASH_CONTAINER)) - return true; - return false; - } - - public void addGroup(Group newGroup) { - groups.add(newGroup); - } - - public void removeGroup(Group group) { - groups.remove(group); - } - - public Folder getTrash() { - for (Folder c : containers) { - if (c.getName().equals(Pithos.TRASH_CONTAINER)) - return c; - } - return null; - } - - public double getUsedPercentage() { - if (quota == 0) - return 0; - return ((double) bytesUsed) / quota; - } - - public Folder getPithos() { - for (Folder f : containers) - if (f.getName().equals(Pithos.HOME_CONTAINER)) - return f; - return null; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java deleted file mode 100644 index 3a5c8e5..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import com.google.gwt.http.client.Header; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.json.client.JSONObject; - -public class File extends Resource { - private String name; - - private String hash; - - private int version; - - private long bytes; - - private String contentType; - - private Date lastModified; - - private String modifiedBy; - - private Date versionTimestamp; - - private String path; - - private String owner; - - private String container; - - private Folder parent; - - private Set tags = new HashSet(); - - private boolean published; - - private String publicUri; - - private Map permissions = new HashMap(); - - private String inheritedPermissionsFrom; - - public String getContentType() { - return contentType; - } - - public String getHash() { - return hash; - } - - @Override - public Date getLastModified() { - return lastModified; - } - - public String getModifiedBy() { - return modifiedBy; - } - - public String getName() { - return name; - } - - public int getVersion() { - return version; - } - - public Date getVersionTimestamp() { - return versionTimestamp; - } - - public String getUri() { - return "/" + container + "/" + path; - } - - public String getOwner() { - return owner; - } - - public String getPath() { - return path; - } - - public long getBytes() { - return bytes; - } - - public String getSizeAsString() { - NumberFormat nf = NumberFormat.getFormat("######.#"); - if (bytes < 1024) - return String.valueOf(bytes) + " B"; - else if (bytes < 1024 * 1024) - return nf.format(Double.valueOf(bytes)/(1024)) + " KB"; - else if (bytes < 1024 * 1024 * 1024) - return nf.format(Double.valueOf(bytes)/(1024 * 1024)) + " MB"; - return nf.format(Double.valueOf(bytes)/(1024 * 1024 * 1024)) + " GB"; - } - - public boolean isShared() { - return !permissions.isEmpty(); - } - - public void populate(Folder _parent, JSONObject o, String _owner, String _container) { - this.parent = _parent; - path = unmarshallString(o, "name"); - if (path.contains("/")) - name = path.substring(path.lastIndexOf("/") + 1, path.length()); //strip the prefix - else - name = path; - this.owner = _owner; - hash = unmarshallString(o, "hash"); - bytes = unmarshallLong(o, "bytes"); - version = unmarshallInt(o, "version"); - contentType = unmarshallString(o, "content_type"); - lastModified = unmarshallDate(o, "last_modified"); - modifiedBy = unmarshallString(o, "modified_by"); - versionTimestamp = unmarshallDate(o, "version_timestamp"); - published = o.containsKey("x_object_public") ? true : false; - publicUri = unmarshallString(o, "x_object_public"); - this.container = _container; - - inheritedPermissionsFrom = unmarshallString(o, "x_object_shared_by"); - String rawPermissions = unmarshallString(o, "x_object_sharing"); - if (rawPermissions != null) - parsePermissions(rawPermissions); - - for (String key : o.keySet()) - if (key.startsWith("x_object_meta_")) - tags.add(URL.decodePathSegment(key.substring("x_object_meta_".length())).trim().toLowerCase()); - - - } - - private void parsePermissions(String rawPermissions) { - String[] readwrite = rawPermissions.split(";"); - for (String s : readwrite) { - String[] part = s.split("="); - String perm = part[0].trim(); - String[] users = part[1].split(","); - for (String u : users) { - String user = u.trim(); - Boolean[] userPerm = permissions.get(u); - if (userPerm == null) { - userPerm = new Boolean[2]; - permissions.put(user, userPerm); - } - if (perm.equals("read")) { - userPerm[0] = Boolean.TRUE; - } - else if (perm.equals("write")) { - userPerm[1] = Boolean.TRUE; - } - } - } - } - - @Override - public boolean equals(Object other) { - if (other instanceof File) { - File o = (File) other; - return name.equals(o.getName()); - } - return false; - } - - @Override - public int hashCode() { - return name.hashCode(); - } - - public String getContainer() { - return container; - } - - public static File createFromResponse(String owner, Response response, File result) { - result.populate(owner, response); - return result; - } - - private void populate(String _owner, Response response) { - this.owner = _owner; - for (Header h : response.getHeaders()) { - String header = h.getName(); - if (header.startsWith("X-Object-Meta-")) - tags.add(URL.decodePathSegment(header.substring("X-Object-Meta-".length())).trim().toLowerCase()); - else if (header.equals("X-Object-Sharing")) { - String rawPermissions = h.getValue(); - parsePermissions(rawPermissions); - } - else if (header.equals("X-Object-Shared-By")) { - inheritedPermissionsFrom = h.getValue().trim(); - } - } - } - - public Folder getParent() { - return parent; - } - - public Set getTags() { - return tags; - } - - public boolean isPublished() { - return published; - } - - public String getPublicUri() { - return publicUri; - } - - public Map getPermissions() { - return permissions; - } - - public String getInheritedPermissionsFrom() { - return inheritedPermissionsFrom; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java deleted file mode 100644 index 00882da..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java +++ /dev/null @@ -1,56 +0,0 @@ -package gr.grnet.pithos.web.client.foldertree; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.google.gwt.http.client.Response; -import com.google.gwt.json.client.JSONArray; -import com.google.gwt.json.client.JSONNumber; -import com.google.gwt.json.client.JSONParser; -import com.google.gwt.json.client.JSONString; -import com.google.gwt.json.client.JSONValue; - -public class FileVersions extends Resource { - private List versions; - - public List getVersions() { - return versions; - } - - public static FileVersions createFromResponse(Response response) { - FileVersions res = new FileVersions(); - res.populate(response); - return res; - } - - private void populate(Response response) { - versions = new ArrayList(); - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array = json.isObject().get("versions").isArray(); - if (array != null) { - for (int i=0; i subfolders = new LinkedHashSet(); - /* - * The name of the container that this folder belongs to. If this folder is container, this field equals name - */ - private String container = null; - - /* - * This is the full path of the folder (prefix is a misnomer but it was named so because this is used as a prefix= - * parameter in the request that fetches its children). If the folder is a cointainer this is empty string - */ - private String prefix = ""; - - private Set files = new LinkedHashSet(); - - private Set tags = new LinkedHashSet(); - - private String owner; - - private Map permissions = new HashMap(); - - private String inheritedPermissionsFrom; - - public Folder() {}; - - public Folder(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - @Override - public Date getLastModified() { - return lastModified; - } - - public long getBytesUsed() { - return bytesUsed; - } - - public Set getSubfolders() { - return subfolders; - } - - public void setSubfolders(Set subfolders) { - this.subfolders = subfolders; - } - - public String getContainer() { - return container; - } - - public String getPrefix() { - return prefix; - } - - private void parsePermissions(String rawPermissions) { - String[] readwrite = rawPermissions.split(";"); - for (String s : readwrite) { - String[] part = s.split("="); - String perm = part[0].trim(); - String[] users = part[1].split(","); - for (String u : users) { - String user = u.trim(); - Boolean[] userPerm = permissions.get(u); - if (userPerm == null) { - userPerm = new Boolean[2]; - permissions.put(user, userPerm); - } - if (perm.equals("read")) { - userPerm[0] = Boolean.TRUE; - } - else if (perm.equals("write")) { - userPerm[1] = Boolean.TRUE; - } - } - } - } - - public void populate(String _owner, Response response) { - this.owner = _owner; - String header = response.getHeader("Last-Modified"); - if (header != null) - try { - lastModified = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822).parse(header); - } catch (IllegalArgumentException e) { - GWT.log("Last-Modified will be set to null", e); - lastModified = null; - } - - header = response.getHeader("X-Container-Bytes-Used"); - if (header != null && header.length() > 0) - bytesUsed = Long.valueOf(header); - - header = response.getHeader("X-Container-Object-Meta"); - if (header != null && header.length() > 0) { - for (String t : header.split(",")) { - tags.add(URL.decodePathSegment(t.toLowerCase()).trim()); - } - } - - subfolders.clear(); //This is necessary in case we update a pre-existing Folder so that stale subfolders won't show up - files.clear(); - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array = json.isArray(); - if (array != null) { - for (int i=0; i getFiles() { - return files; - } - - public Folder getParent() { - return parent; - } - - public String getUri() { - return "/" + container + (prefix.length() == 0 ? "" : "/" + prefix); - } - - public boolean isContainer() { - return parent == null; - } - - public void setContainer(String container) { - this.container = container; - } - - public Set getTags() { - return tags; - } - - public String getInheritedPermissionsFrom() { - return inheritedPermissionsFrom; - } - - public Map getPermissions() { - return permissions; - } - - public String getOwner() { - return owner; - } - - public boolean existChildrenPermissions() { - for (File f : files) - if (!f.getPermissions().isEmpty() && f.getInheritedPermissionsFrom() == null) - return true; - - for (Folder fo : subfolders) - if ((!fo.getPermissions().isEmpty() && fo.getInheritedPermissionsFrom() == null) || fo.existChildrenPermissions()) - return true; - return false; - } - - public boolean isShared() { - return !permissions.isEmpty(); - } - - /** - * I am THE trash - * - * @return - */ - public boolean isTrash() { - return isContainer() && name.equals(Pithos.TRASH_CONTAINER); - } - - /** - * I am IN THE trash - * - * @return - */ - public boolean isInTrash() { - return container.equals(Pithos.TRASH_CONTAINER); - } - - public boolean isHome() { - return isContainer() && name.equals(Pithos.HOME_CONTAINER); - } - - public boolean contains(Folder folder) { - for (Folder f : subfolders) - if (f.equals(folder) || f.contains(folder)) - return true; - return false; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java deleted file mode 100644 index e7c4eb8..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.TreeView; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.resources.client.ImageResource.ImageOptions; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.cellview.client.CellTree; -import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.cellview.client.TreeNode; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Tree; - -public class FolderTreeView extends Composite implements TreeView { - - public boolean isFolderOpen(Folder folder) { - TreeNode root = ((CellTree) getWidget()).getRootTreeNode(); - return isFolderOpen(root, folder); - } - - private boolean isFolderOpen(TreeNode node, Folder folder) { - for (int i=0; i{0}") - public SafeHtml nameSpan(String name); - - @Template("{0}") - public SafeHtml imageSpan(String name); - } - - private FolderTreeViewModel model; - - public FolderTreeView(FolderTreeViewModel viewModel) { - this.model = viewModel; - /* - * Create the tree using the model. We use null as the default - * value of the root node. The default value will be passed to - * CustomTreeModel#getNodeInfo(); - */ - CellTree.Resources res = GWT.create(BasicResources.class); - CellTree tree = new CellTree(model, null, res); - tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); - - initWidget(tree); - } - - - @Override - public Folder getSelection() { - return model.getSelection(); - } - - public void updateFolder(Folder folder, boolean showfiles, Command callback) { - model.updateFolder(folder, showfiles, callback); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java deleted file mode 100644 index abcc81d..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.FolderTreeView.Templates; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; - -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.Cell; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.ContextMenuEvent; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.UIObject; -import com.google.gwt.view.client.AsyncDataProvider; -import com.google.gwt.view.client.HasData; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SingleSelectionModel; -import com.google.gwt.view.client.TreeViewModel; - -public class FolderTreeViewModel implements TreeViewModel { - - protected Pithos app; - - private Cell folderCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - - @Override - public void render(@SuppressWarnings("unused") Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) { - String html; - SafeHtml name; - if (folder.isHome()) { - html = AbstractImagePrototype.create(FolderTreeView.images.home()).getHTML(); - name = Templates.INSTANCE.nameSpan("Home"); - } - else if (folder.isTrash()) { - html = AbstractImagePrototype.create(FolderTreeView.images.trash()).getHTML(); - name = Templates.INSTANCE.nameSpan("Trash"); - } - else { - html = AbstractImagePrototype.create(FolderTreeView.images.folderYellow()).getHTML(); - name = Templates.INSTANCE.nameSpan(folder.getName()); - } - safeHtmlBuilder.appendHtmlConstant(html).appendHtmlConstant(" "); - safeHtmlBuilder.append(name); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater valueUpdater) { - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - FolderTreeViewModel.this.selectionModel.setSelected(folder, true); - FolderContextMenu menu = new FolderContextMenu(app, FolderTreeView.images, app.getSelectedTree(), folder); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }; - - protected ListDataProvider rootDataProvider = new ListDataProvider(); - - private Map> dataProviderMap = new HashMap>(); - - protected SingleSelectionModel selectionModel; - - public FolderTreeViewModel(Pithos _app, SingleSelectionModel selectionModel) { - app = _app; - this.selectionModel = selectionModel; - } - - @Override - public NodeInfo getNodeInfo(T value) { - if (value == null) { - Folder f = new Folder("Loading ..."); - rootDataProvider.getList().add(f); - return new DefaultNodeInfo(rootDataProvider, folderCell, selectionModel, null); - } - final Folder f = (Folder) value; - if (dataProviderMap.get(f) == null) { - dataProviderMap.put(f, new ListDataProvider()); - } - final ListDataProvider dataProvider = dataProviderMap.get(f); - //This prevents the loading indicator -// dataProvider.getList().clear(); -// dataProvider.getList().addAll(f.getSubfolders()); - fetchFolder(f, dataProvider, false, null); - return new DefaultNodeInfo(dataProvider, folderCell, selectionModel, null); - } - - @Override - public boolean isLeaf(Object o) { - if (o instanceof Folder) { - Folder f = (Folder) o; - return f.getSubfolders().isEmpty(); - } - return false; - } - - protected void fetchFolder(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - - String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), path, f) { - @Override - public void onSuccess(@SuppressWarnings("unused") Folder _result) { - fetchFolder(iter, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - else if (callback != null) - callback.execute(); - } - - public void initialize(final AccountResource account, final Command callback) { - Iterator iter = account.getContainers().iterator(); - fetchFolder(iter, new Command() { - @Override - public void execute() { - rootDataProvider.getList().clear(); - rootDataProvider.getList().addAll(account.getContainers()); - selectionModel.setSelected(rootDataProvider.getList().get(0), true); - if (callback != null) - callback.execute(); - } - }); - } - - public Folder getSelection() { - return selectionModel.getSelectedObject(); - } - - public void updateFolder(final Folder folder, boolean showfiles, final Command callback) { - if (dataProviderMap.get(folder) == null) { - dataProviderMap.put(folder, new ListDataProvider()); - } - final ListDataProvider dataProvider = dataProviderMap.get(folder); - fetchFolder(folder, dataProvider, showfiles, new Command() { - - @Override - public void execute() { - app.getFolderTreeView().openFolder(folder); - if (callback != null) - callback.execute(); - } - }); - } - - public void fetchFolder(final Folder f, final ListDataProvider dataProvider, final boolean showfiles, final Command callback) { - String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), path, f) { - @Override - public void onSuccess(final Folder _result) { - if (showfiles) - app.showFiles(_result); - Iterator iter = _result.getSubfolders().iterator(); - fetchFolder(iter, new Command() { - @Override - public void execute() { - dataProvider.getList().clear(); - dataProvider.getList().addAll(_result.getSubfolders()); -// app.getFolderTreeView().updateChildren(f); - if (callback != null) - callback.execute(); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/ObjectResource.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/ObjectResource.java deleted file mode 100644 index 0c5cd92..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/ObjectResource.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -public class ObjectResource { -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java deleted file mode 100644 index 7e279e6..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.http.client.Response; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; -import com.google.gwt.json.client.JSONNumber; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.json.client.JSONString; - -import gr.grnet.pithos.web.client.Invitations; -import gr.grnet.pithos.web.client.SharingUsers; - -import java.util.Date; - -public abstract class Resource { - - protected static String unmarshallString(JSONObject obj, String key){ - if(obj.get(key) != null) { - JSONString s = obj.get(key).isString(); - if(s != null) - return s.stringValue(); - } - return null; - } - - protected static int unmarshallInt(JSONObject obj, String key){ - if(obj.get(key) != null) - if(obj.get(key).isNumber() != null) - return (int) obj.get(key).isNumber().doubleValue(); - return -1; - } - - protected static long unmarshallLong(JSONObject obj, String key){ - if(obj.get(key) != null) { - JSONNumber value = obj.get(key).isNumber(); - if(value != null) - return (long) value.doubleValue(); - } - return -1; - } - - protected static boolean unmarshallBoolean(JSONObject obj, String key){ - if(obj.get(key) != null) - if(obj.get(key).isBoolean() != null) - return obj.get(key).isBoolean().booleanValue(); - return false; - } - - protected static Date unmarshallDate(JSONObject obj, String key){ - if(obj.get(key) != null) { - JSONString s = obj.get(key).isString(); - if (s != null) - try { - return DateTimeFormat.getFormat(PredefinedFormat.ISO_8601).parse(s.stringValue()); - } catch (IllegalArgumentException e) { - GWT.log("", e); - } - } - return null; - } - - public static native String getDate(Long ms)/*-{ - return (new Date(ms)).toUTCString(); - }-*/; - - @SuppressWarnings("unchecked") - public static T createFromResponse(Class aClass, String owner, Response response, T result) { - T result1 = null; - if (aClass.equals(AccountResource.class)) { - result1 = (T) AccountResource.createFromResponse(owner, response, (AccountResource) result); - } - else if (aClass.equals(Folder.class)) { - result1 = (T) Folder.createFromResponse(owner, response, (Folder) result); - } - else if (aClass.equals(File.class)) { - result1 = (T) File.createFromResponse(owner, response, (File) result); - } - else if (aClass.equals(SharingUsers.class)) { - result1 = (T) SharingUsers.createFromResponse(response, (SharingUsers) result); - } - else if (aClass.equals(FileVersions.class)) { - result1 = (T) FileVersions.createFromResponse(response); - } - else if (aClass.equals(Invitations.class)) { - result1 = (T) Invitations.createFromResponse(response); - } - return result1; - } - - public abstract Date getLastModified(); -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/SubDirResource.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/SubDirResource.java deleted file mode 100644 index cebccda..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/SubDirResource.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.foldertree; - -public class SubDirResource { -} diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/Version.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/Version.java deleted file mode 100644 index 5de719a..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/Version.java +++ /dev/null @@ -1,22 +0,0 @@ -package gr.grnet.pithos.web.client.foldertree; - -import java.util.Date; - -public class Version { - private int version; - - private Date date; - - public Version(int v, Date d) { - version = v; - date = d; - } - - public int getVersion() { - return version; - } - - public Date getDate() { - return date; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/grouptree/Group.java b/web_client/src/gr/grnet/pithos/web/client/grouptree/Group.java deleted file mode 100644 index e3032e4..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/grouptree/Group.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.grouptree; - -import java.util.ArrayList; -import java.util.List; - -public class Group { - private String name; - - private List members = new ArrayList(); - - public Group(String _name) { - name = _name; - } - - public List getMembers() { - return members; - } - - public String getName() { - return name; - } - - public void addMember(String user) { - members.add(user); - } - - public void removeMember(String username) { - members.remove(username); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupContextMenu.java b/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupContextMenu.java deleted file mode 100644 index 188770f..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupContextMenu.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.grouptree; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.commands.AddUserCommand; -import gr.grnet.pithos.web.client.commands.CreateGroupCommand; -import gr.grnet.pithos.web.client.commands.DeleteGroupCommand; -import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Images; - -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.MenuItem; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * The 'Folder Context' menu implementation. - */ -public class GroupContextMenu extends PopupPanel { - - /** - * The widget's images. - */ - private final GroupTreeView.Images images; - - /** - * The widget's constructor. - * - * @param newImages the image bundle passed on by the parent object - */ - public GroupContextMenu(Pithos app, final Images newImages, Group group) { - // The popup's constructor's argument is a boolean specifying that it - // auto-close itself when the user clicks outside of it. - super(true); - setAnimationEnabled(true); - images = newImages; - MenuBar contextMenu = new MenuBar(true); - - if (group != null) { - MenuItem addUser = new MenuItem("" + AbstractImagePrototype.create(images.user()).getHTML() + " Add User", true, new AddUserCommand(app, this, group)); - contextMenu.addItem(addUser); - - MenuItem deleteGroup = new MenuItem("" + AbstractImagePrototype.create(images.delete()).getHTML() + " Delete Group", true, new DeleteGroupCommand(app, this, group)); - contextMenu.addItem(deleteGroup); - } - else { - MenuItem createGroup = new MenuItem("" + AbstractImagePrototype.create(images.group()).getHTML() + " Create Group", true, new CreateGroupCommand(app, this)); - contextMenu.addItem(createGroup); - } - - add(contextMenu); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeView.java b/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeView.java deleted file mode 100644 index cdf37b5..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeView.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.grouptree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.TreeView; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.resources.client.ImageResource.ImageOptions; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.cellview.client.CellTree; -import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.cellview.client.TreeNode; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Tree; - -public class GroupTreeView extends Composite implements TreeView { - - public void updateChildren(Group group) { - TreeNode root = ((CellTree) getWidget()).getRootTreeNode(); - if (group != null) - updateChildren(root, group); - else { - root.setChildOpen(0, false, true); - root.setChildOpen(0, true, true); - } - } - - private void updateChildren(TreeNode node, Group group) { - for (int i=0; i{0}") - public SafeHtml nameSpan(String name); - } - - private GroupTreeViewModel model; - - public GroupTreeView(GroupTreeViewModel viewModel) { - this.model = viewModel; - /* - * Create the tree using the model. We use null as the default - * value of the root node. The default value will be passed to - * CustomTreeModel#getNodeInfo(); - */ - CellTree.Resources res = GWT.create(BasicResources.class); - CellTree tree = new CellTree(model, null, res); - tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); - - initWidget(tree); - } - - public void updateGroupNode(Group group) { - model.updateGroupNode(group); - updateChildren(group); - } - - @Override - public Folder getSelection() { - // TODO Auto-generated method stub - return null; - } - - public Object getSelected() { - return model.getSelectedObject(); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java b/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java deleted file mode 100644 index bf70121..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.grouptree; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.Cell; -import com.google.gwt.event.dom.client.ContextMenuEvent; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SingleSelectionModel; -import com.google.gwt.view.client.TreeViewModel; - -public class GroupTreeViewModel implements TreeViewModel { - - protected Pithos app; - - private ListDataProvider rootDataProvider = new ListDataProvider(); - - private Cell rootCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - - @Override - public void render(@SuppressWarnings("unused") Context context, String value, SafeHtmlBuilder sb) { - String html = AbstractImagePrototype.create(GroupTreeView.images.groups()).getHTML(); - sb.appendHtmlConstant(html).appendHtmlConstant(" "); - sb.append(Templates.INSTANCE.nameSpan(value)); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, String s, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater valueUpdater) { - GroupTreeViewModel.this.rootSelectionModel.setSelected(s, true); - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, null); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }; - - private Cell groupCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - - @Override - public void render(@SuppressWarnings("unused") Context context, Group value, SafeHtmlBuilder sb) { - String html = AbstractImagePrototype.create(GroupTreeView.images.group()).getHTML(); - sb.appendHtmlConstant(html).appendHtmlConstant(" "); - sb.append(Templates.INSTANCE.nameSpan(value.getName())); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, Group group, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater valueUpdater) { - GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true); - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }; - - private Cell userCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - - @Override - public void render(@SuppressWarnings("unused") Context context, User value, SafeHtmlBuilder sb) { - String html = AbstractImagePrototype.create(GroupTreeView.images.user()).getHTML(); - sb.appendHtmlConstant(html).appendHtmlConstant(" "); - sb.append(Templates.INSTANCE.nameSpan(value.getName())); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, User user, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater valueUpdater) { - GroupTreeViewModel.this.userSelectionModel.setSelected(user, true); - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - UserContextMenu menu = new UserContextMenu(app, GroupTreeView.images, user); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }; - - protected ListDataProvider groupsDataProvider = new ListDataProvider(); - - protected Map> userDataProviderMap = new HashMap>(); - - protected Map> sharedFiles = new HashMap>(); - - SingleSelectionModel rootSelectionModel; - SingleSelectionModel groupSelectionModel; - SingleSelectionModel userSelectionModel; - - public GroupTreeViewModel(Pithos _app) { - app = _app; - rootSelectionModel = new SingleSelectionModel(); - app.addSelectionModel(rootSelectionModel); - rootSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - if (rootSelectionModel.getSelectedObject() != null) { - app.deselectOthers(app.getGroupTreeView(), rootSelectionModel); - app.showFiles(new HashSet()); - } - } - }); - - groupSelectionModel = new SingleSelectionModel(); - app.addSelectionModel(groupSelectionModel); - groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - if (groupSelectionModel.getSelectedObject() != null) { - app.deselectOthers(app.getGroupTreeView(), groupSelectionModel); - app.showFiles(new HashSet()); - } - } - }); - - userSelectionModel = new SingleSelectionModel(); - app.addSelectionModel(userSelectionModel); - userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - if (userSelectionModel.getSelectedObject() != null) { - app.deselectOthers(app.getGroupTreeView(), userSelectionModel); - app.showFiles(new HashSet()); - } - } - }); -} - - @Override - public NodeInfo getNodeInfo(T value) { - if (value == null) { - rootDataProvider.getList().add(""); - return new DefaultNodeInfo(rootDataProvider, rootCell, rootSelectionModel, null); - } - else if (value instanceof String) { - groupsDataProvider.getList().clear(); - groupsDataProvider.getList().addAll(app.getAccount().getGroups()); - return new DefaultNodeInfo(groupsDataProvider, groupCell, groupSelectionModel, null); - } - else { //Group - Group g = (Group) value; - if (userDataProviderMap.get(g) == null) { - userDataProviderMap.put(g, new ListDataProvider()); - } - final ListDataProvider dataProvider = userDataProviderMap.get(g); - dataProvider.getList().clear(); - for (String u : g.getMembers()) - dataProvider.getList().add(new User(u, g)); - return new DefaultNodeInfo(dataProvider, userCell, userSelectionModel, null); - } - } - - @Override - public boolean isLeaf(Object o) { - if (o instanceof String) { - return ((String) o).length() == 0 || app.getAccount().getGroups().isEmpty(); - } - else if (o instanceof Group) - return ((Group) o).getMembers().isEmpty(); - else if (o != null) - return true; - return false; - } - - public void initialize() { - rootDataProvider.getList().clear(); - rootDataProvider.getList().add("Groups"); - } - - public void updateGroupNode(Group group) { - if (group == null) { - groupsDataProvider.getList().clear(); - groupsDataProvider.getList().addAll(app.getAccount().getGroups()); - } - else { - if (userDataProviderMap.get(group) == null) { - userDataProviderMap.put(group, new ListDataProvider()); - } - final ListDataProvider dataProvider = userDataProviderMap.get(group); - dataProvider.getList().clear(); - for (String u : group.getMembers()) - dataProvider.getList().add(new User(u, group)); - } - } - - public Object getSelectedObject() { - if (rootSelectionModel.getSelectedObject() != null) - return rootSelectionModel.getSelectedObject(); - if (groupSelectionModel.getSelectedObject() != null) - return groupSelectionModel.getSelectedObject(); - if (userSelectionModel.getSelectedObject() != null) - return userSelectionModel.getSelectedObject(); - return null; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/grouptree/User.java b/web_client/src/gr/grnet/pithos/web/client/grouptree/User.java deleted file mode 100644 index 5d3e853..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/grouptree/User.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.grouptree; - - -public class User { - private String name; - - private Group group; - - public User(String _name, Group _group) { - name = _name; - group = _group; - } - - public String getName() { - return name; - } - - public Group getGroup() { - return group; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/grouptree/UserContextMenu.java b/web_client/src/gr/grnet/pithos/web/client/grouptree/UserContextMenu.java deleted file mode 100644 index 8870109..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/grouptree/UserContextMenu.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.grouptree; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.commands.RemoveUserCommand; -import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Images; - -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.MenuItem; -import com.google.gwt.user.client.ui.PopupPanel; - -/** - * The 'Folder Context' menu implementation. - */ -public class UserContextMenu extends PopupPanel { - - /** - * The widget's images. - */ - private final GroupTreeView.Images images; - - /** - * The widget's constructor. - * - * @param newImages the image bundle passed on by the parent object - */ - public UserContextMenu(Pithos app, final Images newImages, User user) { - // The popup's constructor's argument is a boolean specifying that it - // auto-close itself when the user clicks outside of it. - super(true); - setAnimationEnabled(true); - images = newImages; - MenuBar contextMenu = new MenuBar(true); - - MenuItem removeUser = new MenuItem("" + AbstractImagePrototype.create(images.delete()).getHTML() + " Remove User", true, new RemoveUserCommand(app, this, user)); - contextMenu.addItem(removeUser); - - add(contextMenu); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeView.java b/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeView.java deleted file mode 100644 index 405e7a5..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeView.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.mysharedtree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.TreeView; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.resources.client.ImageResource.ImageOptions; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.cellview.client.CellTree; -import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.cellview.client.TreeNode; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Tree; - -public class MysharedTreeView extends Composite implements TreeView { - - public void updateChildren(Folder folder) { - TreeNode root = ((CellTree) getWidget()).getRootTreeNode(); - updateChildren(root, folder); - } - - private void updateChildren(TreeNode node, Folder folder) { - for (int i=0; i{0}") - public SafeHtml nameSpan(String name); - } - - private MysharedTreeViewModel model; - - public MysharedTreeView(MysharedTreeViewModel viewModel) { - this.model = viewModel; - /* - * Create the tree using the model. We use null as the default - * value of the root node. The default value will be passed to - * CustomTreeModel#getNodeInfo(); - */ - CellTree.Resources res = GWT.create(BasicResources.class); - CellTree tree = new CellTree(model, null, res); - tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); - - initWidget(tree); - } - - - @Override - public Folder getSelection() { - return model.getSelection(); - } - - public void updateFolder(Folder folder, boolean showfiles) { - model.updateFolder(folder, showfiles); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java b/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java deleted file mode 100644 index ca584f9..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.mysharedtree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView.Templates; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.Cell; -import com.google.gwt.cell.client.TextCell; -import com.google.gwt.cell.client.ValueUpdater; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.ContextMenuEvent; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.text.shared.SafeHtmlRenderer; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; -import com.google.gwt.view.client.SingleSelectionModel; -import com.google.gwt.view.client.TreeViewModel; - -public class MysharedTreeViewModel implements TreeViewModel { - - protected Pithos app; - - private Cell folderCell = new AbstractCell() { - - @Override - public void render(@SuppressWarnings("unused") Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) { - String html = AbstractImagePrototype.create(MysharedTreeView.images.folderYellow()).getHTML(); - safeHtmlBuilder.appendHtmlConstant(html).appendHtmlConstant(" "); - safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName())); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") ValueUpdater valueUpdater) { - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - MysharedTreeViewModel.this.selectionModel.setSelected(folder, true); - FolderContextMenu menu = new FolderContextMenu(app, MysharedTreeView.images, app.getSelectedTree(), folder); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }; - - protected ListDataProvider firstLevelDataProvider = new ListDataProvider(); - - private Map> dataProviderMap = new HashMap>(); - - protected Set sharedFiles = new HashSet(); - - protected SingleSelectionModel selectionModel; - - public MysharedTreeViewModel(Pithos _app, SingleSelectionModel selectionModel) { - app = _app; - this.selectionModel = selectionModel; - } - - @Override - public NodeInfo getNodeInfo(T value) { - if (value == null) { - ListDataProvider rootDataProvider = new ListDataProvider(); - rootDataProvider.getList().add("My Shared"); - final SingleSelectionModel selectionModel2 = new SingleSelectionModel(); - selectionModel2.addSelectionChangeHandler(new Handler() { - - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (selectionModel2.getSelectedObject() != null) { - app.deselectOthers(app.getMySharedTreeView(), selectionModel2); - app.applyPermissions(null); - fetchSharedFiles(); - } - } - }); - app.addSelectionModel(selectionModel2); - return new DefaultNodeInfo(rootDataProvider, new TextCell(new SafeHtmlRenderer() { - @Override - public SafeHtml render(String object) { - SafeHtmlBuilder builder = new SafeHtmlBuilder(); - render(object, builder); - return builder.toSafeHtml(); - } - - @Override - public void render(String object, SafeHtmlBuilder builder) { - String html = AbstractImagePrototype.create(MysharedTreeView.images.myShared()).getHTML(); - builder.appendHtmlConstant(html).appendHtmlConstant(" "); - builder.append(MysharedTreeView.Templates.INSTANCE.nameSpan(object)); - } - }), selectionModel2, null); - } - else if (value instanceof String) { - fetchSharedContainers(null); - return new DefaultNodeInfo(firstLevelDataProvider, folderCell, selectionModel, null); - } - else { - final Folder f = (Folder) value; - if (dataProviderMap.get(f) == null) { - dataProviderMap.put(f, new ListDataProvider()); - } - final ListDataProvider dataProvider = dataProviderMap.get(f); - fetchFolder(f, dataProvider, false); - return new DefaultNodeInfo(dataProvider, folderCell, selectionModel, null); - } - } - - protected void fetchSharedFiles() { - final List containers = app.getAccount().getContainers(); - final ListDataProvider tempProvider = new ListDataProvider(); - Iterator iter = containers.iterator(); - fetchFolder(iter, tempProvider, new Command() { - - @Override - public void execute() { - firstLevelDataProvider.getList().clear(); - firstLevelDataProvider.getList().addAll(tempProvider.getList()); - app.showFiles(sharedFiles); - } - }); - } - - private void fetchSharedContainers(final Command callback) { - final List containers = app.getAccount().getContainers(); - final ListDataProvider tempProvider = new ListDataProvider(); - Iterator iter = containers.iterator(); - fetchFolder(iter, tempProvider, new Command() { - - @Override - public void execute() { - firstLevelDataProvider.getList().clear(); - firstLevelDataProvider.getList().addAll(tempProvider.getList()); - if (callback != null) - callback.execute(); - } - }); - } - - @Override - public boolean isLeaf(Object o) { - if (o == null) - return false; - else if (o instanceof Folder) { - Folder f = (Folder) o; - return f.getSubfolders().isEmpty(); - } - else { - return firstLevelDataProvider.getList().isEmpty(); - } - } - - protected void fetchFolder(final Iterator iter, final ListDataProvider dataProvider, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - - String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), path, f) { - @Override - public void onSuccess(Folder _result) { - if (!_result.isShared()) { - for (File file : _result.getFiles()) { - if (file.isShared()) - sharedFiles.add(file); - } - Iterator iter2 = _result.getSubfolders().iterator(); - fetchFolder(iter2, dataProvider, new Command() { - - @Override - public void execute() { - fetchFolder(iter, dataProvider, callback); - } - }); - } - else { - dataProvider.getList().add(_result); - fetchFolder(iter, dataProvider, callback); - } - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - else if (callback != null) - callback.execute(); - } - - public Folder getSelection() { - return selectionModel.getSelectedObject(); - } - - public void updateFolder(Folder folder, boolean showfiles) { - if (dataProviderMap.get(folder) == null) { - dataProviderMap.put(folder, new ListDataProvider()); - } - final ListDataProvider dataProvider = dataProviderMap.get(folder); - fetchFolder(folder, dataProvider, showfiles); - } - - public void fetchFolder(final Folder f, final ListDataProvider dataProvider, final boolean showfiles) { - String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), path, f) { - @Override - public void onSuccess(final Folder _result) { - if (showfiles) - app.showFiles(_result); - Iterator iter = _result.getSubfolders().iterator(); - fetchFolder(iter, dataProvider, new Command() { - @Override - public void execute() { - dataProvider.getList().clear(); - dataProvider.getList().addAll(_result.getSubfolders()); - app.getMySharedTreeView().updateChildren(f); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - - public void initialize(Command callback) { - fetchSharedContainers(callback); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeView.java b/web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeView.java deleted file mode 100644 index 60c6b4e..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeView.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.othersharedtree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.TreeView; -import gr.grnet.pithos.web.client.foldertree.Folder; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.resources.client.ImageResource.ImageOptions; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.cellview.client.CellTree; -import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.cellview.client.TreeNode; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Tree; - -public class OtherSharedTreeView extends Composite implements TreeView { - - public void updateChildren(Folder folder) { - TreeNode root = ((CellTree) getWidget()).getRootTreeNode(); - updateChildren(root, folder); - } - - private void updateChildren(TreeNode node, Folder folder) { - for (int i=0; i{0}") - public SafeHtml nameSpan(String name); - } - - private OtherSharedTreeViewModel model; - - public OtherSharedTreeView(OtherSharedTreeViewModel viewModel) { - this.model = viewModel; - /* - * Create the tree using the model. We use null as the default - * value of the root node. The default value will be passed to - * CustomTreeModel#getNodeInfo(); - */ - CellTree.Resources res = GWT.create(BasicResources.class); - CellTree tree = new CellTree(model, null, res); - tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); - - initWidget(tree); - } - - - @Override - public Folder getSelection() { - return model.getSelection(); - } - - public void updateFolder(Folder folder, boolean showfiles) { - model.updateFolder(folder, showfiles); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java b/web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java deleted file mode 100644 index d71cbe9..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.othersharedtree; - -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.SharingUsers; -import gr.grnet.pithos.web.client.foldertree.AccountResource; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView.Templates; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.Cell; -import com.google.gwt.cell.client.TextCell; -import com.google.gwt.cell.client.ValueUpdater; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.ContextMenuEvent; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.text.shared.SafeHtmlRenderer; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; -import com.google.gwt.view.client.SingleSelectionModel; -import com.google.gwt.view.client.TreeViewModel; - -public class OtherSharedTreeViewModel implements TreeViewModel { - - private static final String treeTitle = "Other 's shared"; - protected Pithos app; - - private Cell folderCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - - @Override - public void render(@SuppressWarnings("unused") Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) { - String html = AbstractImagePrototype.create(OtherSharedTreeView.images.folderYellow()).getHTML(); - safeHtmlBuilder.appendHtmlConstant(html).appendHtmlConstant(" "); - safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName())); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") ValueUpdater valueUpdater) { - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - OtherSharedTreeViewModel.this.selectionModel.setSelected(folder, true); - FolderContextMenu menu = new FolderContextMenu(app, OtherSharedTreeView.images, app.getSelectedTree(), folder); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } - }; - - private ListDataProvider rootDataProvider = new ListDataProvider(); - protected ListDataProvider userLevelDataProvider = new ListDataProvider(); - - protected Map> userDataProviderMap = new HashMap>(); - private Map> dataProviderMap = new HashMap>(); - - protected Map> sharedFiles = new HashMap>(); - - protected SingleSelectionModel selectionModel; - - public OtherSharedTreeViewModel(Pithos _app, SingleSelectionModel selectionModel) { - app = _app; - this.selectionModel = selectionModel; - } - - @Override - public NodeInfo getNodeInfo(T value) { - if (value == null) { - rootDataProvider.getList().add(treeTitle); - final SingleSelectionModel selectionModel2 = new SingleSelectionModel(); - selectionModel2.addSelectionChangeHandler(new Handler() { - - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (selectionModel2.getSelectedObject() != null) { - app.deselectOthers(app.getOtherSharedTreeView(), selectionModel2); - app.applyPermissions(null); - app.showFiles(new HashSet()); - } - } - }); - app.addSelectionModel(selectionModel2); - return new DefaultNodeInfo(rootDataProvider, new TextCell(new SafeHtmlRenderer() { - @Override - public SafeHtml render(String object) { - SafeHtmlBuilder builder = new SafeHtmlBuilder(); - render(object, builder); - return builder.toSafeHtml(); - } - - @Override - public void render(String object, SafeHtmlBuilder builder) { - String html = AbstractImagePrototype.create(OtherSharedTreeView.images.othersShared()).getHTML(); - builder.appendHtmlConstant(html).appendHtmlConstant(" "); - builder.append(OtherSharedTreeView.Templates.INSTANCE.nameSpan(object)); - } - }), selectionModel2, null); - } - else if (value instanceof String) { - if (value.equals(treeTitle)) { - fetchSharingUsers(null); - final SingleSelectionModel selectionModel3 = new SingleSelectionModel(); - selectionModel3.addSelectionChangeHandler(new Handler() { - - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (selectionModel3.getSelectedObject() != null) { - app.deselectOthers(app.getOtherSharedTreeView(), selectionModel3); - app.applyPermissions(null); - String username = selectionModel3.getSelectedObject(); - if (userDataProviderMap.get(username) == null) { - userDataProviderMap.put(username, new ListDataProvider()); - } - fetchSharedFiles(username, userDataProviderMap.get(username)); - } - } - }); - app.addSelectionModel(selectionModel3); - return new DefaultNodeInfo(userLevelDataProvider, new TextCell(new SafeHtmlRenderer() { - - @Override - public SafeHtml render(String object) { - SafeHtmlBuilder builder = new SafeHtmlBuilder(); - render(object, builder); - return builder.toSafeHtml(); - } - - @Override - public void render(String object, SafeHtmlBuilder builder) { - String html = AbstractImagePrototype.create(OtherSharedTreeView.images.user()).getHTML(); - builder.appendHtmlConstant(html).appendHtmlConstant(" "); - builder.append(OtherSharedTreeView.Templates.INSTANCE.nameSpan(object)); - } - }), selectionModel3, null); - } - String username = (String) value; - if (userDataProviderMap.get(username) == null) { - userDataProviderMap.put(username, new ListDataProvider()); - } - final ListDataProvider dataProvider = userDataProviderMap.get(username); - fetchSharedContainers(username, dataProvider, null); - return new DefaultNodeInfo(dataProvider, folderCell, selectionModel, null); - } - else { - final Folder f = (Folder) value; - if (dataProviderMap.get(f) == null) { - dataProviderMap.put(f, new ListDataProvider()); - } - final ListDataProvider dataProvider = dataProviderMap.get(f); - fetchFolder(f, dataProvider, false); - return new DefaultNodeInfo(dataProvider, folderCell, selectionModel, null); - } - } - - private void fetchSharingUsers(final Command callback) { - GetRequest getSharingUsers = new GetRequest(SharingUsers.class, app.getApiPath(), "", "?format=json") { - @Override - public void onSuccess(final SharingUsers _result) { - userLevelDataProvider.getList().clear(); - userLevelDataProvider.getList().addAll(_result.getUsers()); - for (String name : _result.getUsers()) { - sharedFiles.put(name, new HashSet()); - } - Iterator iter = _result.getUsers().iterator(); - fetchSharedContainers(iter, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getSharingUsers.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getSharingUsers); - } - - protected void fetchSharedContainers(final Iterator iter, final Command callback) { - if (iter.hasNext()) { - String username = iter.next(); - if (userDataProviderMap.get(username) == null) { - userDataProviderMap.put(username, new ListDataProvider()); - } - final ListDataProvider dataProvider = userDataProviderMap.get(username); - fetchSharedContainers(username, dataProvider, new Command() { - - @Override - public void execute() { - fetchSharedContainers(iter, callback); - - } - }); - } - else - if (callback != null) - callback.execute(); - } - - @Override - public boolean isLeaf(Object o) { - if (o == null) - return false; - else if (o instanceof Folder) { - Folder f = (Folder) o; - return f.getSubfolders().isEmpty(); - } - else { - if (o.equals(treeTitle)) - return userLevelDataProvider.getList().isEmpty(); - ListDataProvider dp = userDataProviderMap.get(o); - if (dp != null) - return dp.getList().isEmpty(); - return true; - } - } - - private void fetchSharedContainers(final String username, final ListDataProvider dataProvider, final Command callback) { - GetRequest getUserSharedContainers = new GetRequest(AccountResource.class, app.getApiPath(), username, "?format=json") { - - @Override - public void onSuccess(AccountResource _result) { - final ListDataProvider tempProvider = new ListDataProvider(); - Iterator iter = _result.getContainers().iterator(); - fetchFolder(username, iter, tempProvider, new Command() { - - @Override - public void execute() { - dataProvider.getList().clear(); - dataProvider.getList().addAll(tempProvider.getList()); - if (callback != null) - callback.execute(); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting account", t); - if (t instanceof RestException) - app.displayError("Error getting account: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching user data: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getUserSharedContainers.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getUserSharedContainers); - } - - protected void fetchSharedFiles(final String username, final ListDataProvider dataProvider) { - GetRequest getUserSharedContainers = new GetRequest(AccountResource.class, app.getApiPath(), username, "?format=json") { - - @Override - public void onSuccess(AccountResource _result) { - final ListDataProvider tempProvider = new ListDataProvider(); - Iterator iter = _result.getContainers().iterator(); - fetchFolder(username, iter, tempProvider, new Command() { - - @Override - public void execute() { - dataProvider.getList().clear(); - dataProvider.getList().addAll(tempProvider.getList()); - app.showFiles(sharedFiles.get(username)); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting account", t); - if (t instanceof RestException) - app.displayError("Error getting account: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching user data: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getUserSharedContainers.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getUserSharedContainers); - } - - protected void fetchFolder(final String username, final Iterator iter, final ListDataProvider dataProvider, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - - String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), username, path, f) { - @Override - public void onSuccess(Folder _result) { - if (!_result.isShared()) { - for (File file : _result.getFiles()) { - if (file.isShared()) - sharedFiles.get(username).add(file); - } - Iterator iter2 = _result.getSubfolders().iterator(); - fetchFolder(username, iter2, dataProvider, new Command() { - - @Override - public void execute() { - fetchFolder(username, iter, dataProvider, callback); - } - }); - } - else { - dataProvider.getList().add(_result); - fetchFolder(username, iter, dataProvider, callback); - } - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - else if (callback != null) - callback.execute(); - } - - public Folder getSelection() { - return selectionModel.getSelectedObject(); - } - - public void updateFolder(Folder folder, boolean showfiles) { - if (dataProviderMap.get(folder) == null) { - dataProviderMap.put(folder, new ListDataProvider()); - } - final ListDataProvider dataProvider = dataProviderMap.get(folder); - fetchFolder(folder, dataProvider, showfiles); - } - - public void fetchFolder(final Folder f, final ListDataProvider dataProvider, final boolean showfiles) { - String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), path, f) { - @Override - public void onSuccess(final Folder _result) { - if (showfiles) - app.showFiles(_result); - Iterator iter = _result.getSubfolders().iterator(); - fetchFolder(_result.getOwner(), iter, dataProvider, new Command() { - @Override - public void execute() { - dataProvider.getList().clear(); - dataProvider.getList().addAll(_result.getSubfolders()); - app.getOtherSharedTreeView().updateChildren(f); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("Error getting folder", t); - if (t instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + t.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - - public void initialize(Command callback) { - fetchSharingUsers(callback); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java b/web_client/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java deleted file mode 100644 index 168ca5b..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.rest; - -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestBuilder; -import com.google.gwt.http.client.RequestException; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; - -import gr.grnet.pithos.web.client.foldertree.Resource; -import java.util.HashMap; -import java.util.Map; - -/** - * Created by IntelliJ IDEA. User: chstath Date: 7/5/11 Time: 5:29 PM To change this template use File | Settings | File - * Templates. - */ -public abstract class DeleteRequest implements ScheduledCommand { - private String api; - - protected String owner; - - private String path; - - private Map headers = new HashMap(); - - public abstract void onSuccess(Resource result); - - public abstract void onError(Throwable t); - - public DeleteRequest(String api, String owner, String path) { - this.api = api; - this.owner = owner; - this.path = path; - } - - @Override - public void execute() { - RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, api + owner + path); - for (String header : headers.keySet()) { - builder.setHeader(header, headers.get(header)); - } - try { - builder.sendRequest("", new RestRequestCallback(api + owner + path, Response.SC_NO_CONTENT) { - @Override - public void onSuccess(Resource object) { - DeleteRequest.this.onSuccess(object); - } - - @Override - public Resource deserialize(Response response) { - return Resource.createFromResponse(Resource.class, owner, response, null); - } - - @Override - public void onError(@SuppressWarnings("unused") Request request, Throwable throwable) { - DeleteRequest.this.onError(throwable); - } - - @Override - public void onUnauthorized(Response response) { - DeleteRequest.this.onUnauthorized(response); - } - }); - } - catch (RequestException e) { - } - } - - protected abstract void onUnauthorized(Response response); - - public void setHeader(String header, String value) { - headers.put(header, value); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/GetRequest.java b/web_client/src/gr/grnet/pithos/web/client/rest/GetRequest.java deleted file mode 100644 index 990d781..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/GetRequest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.rest; - -import gr.grnet.pithos.web.client.foldertree.Resource; - -import java.util.HashMap; -import java.util.Map; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestBuilder; -import com.google.gwt.http.client.RequestException; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; - -public abstract class GetRequest implements ScheduledCommand { - - protected Class aClass; - - private String api; - - protected String owner; - - private String path; - - private int okCode; - - protected T result; - - private Map headers = new HashMap(); - - public abstract void onSuccess(T _result); - - public abstract void onError(Throwable t); - - public GetRequest(Class aClass, String api, String owner, String path, int okCode, T result) { - this.aClass = aClass; - this.api = api; - this.owner = owner; - this.path = path; - this.okCode = okCode; - this.result = result; - } - - public GetRequest(Class aClass, String api, String owner, String path) { - this(aClass, api, owner, path, -1, null); - } - - public GetRequest(Class aClass, String api, String owner, String path, T result) { - this(aClass, api, owner, path, -1, result); - } - - @Override - public void execute() { - if (path.contains("?")) - path += "&t=" + System.currentTimeMillis(); - else - path += "?t=" + System.currentTimeMillis(); - RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, api + owner + path); - for (String header : headers.keySet()) { - builder.setHeader(header, headers.get(header)); - } - try { - builder.sendRequest("", new RestRequestCallback(api + owner + path, okCode) { - @Override - public void onSuccess(T object) { - GetRequest.this.onSuccess(object); - } - - @Override - public T deserialize(Response response) { - return Resource.createFromResponse(aClass, owner, response, result); - } - - @Override - public void onError(@SuppressWarnings("unused") Request request, Throwable throwable) { - if (throwable instanceof RestException) { - if (((RestException) throwable).getHttpStatusCode() == 304 && result != null){ - GWT.log("Using cache: " + result.toString(), null); - onSuccess(result); - return; - } - } - GetRequest.this.onError(throwable); - } - - @Override - public void onUnauthorized(Response response) { - GetRequest.this.onUnauthorized(response); - } - }); - } - catch (RequestException e) { - } - } - - protected abstract void onUnauthorized(Response response); - - public void setHeader(String header, String value) { - headers.put(header, value); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/HeadRequest.java b/web_client/src/gr/grnet/pithos/web/client/rest/HeadRequest.java deleted file mode 100644 index 0a04cf7..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/HeadRequest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.rest; - -import gr.grnet.pithos.web.client.foldertree.Resource; - -import java.util.HashMap; -import java.util.Map; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestBuilder; -import com.google.gwt.http.client.RequestException; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; - -public abstract class HeadRequest implements ScheduledCommand { - - protected Class aClass; - - private String api; - - protected String owner; - - private String path; - - private int okCode; - - protected T cached; - - protected T result; - - private Map headers = new HashMap(); - - public abstract void onSuccess(T _result); - - public abstract void onError(Throwable t); - - public HeadRequest(Class aClass, String api, String owner, String path, int okCode, T result) { - this.aClass = aClass; - this.api = api; - this.owner = owner; - this.path = path; - this.okCode = okCode; - this.result = result; - } - - public HeadRequest(Class aClass, String api, String owner, String path) { - this(aClass, api, owner, path, Response.SC_NO_CONTENT, null); - } - - public HeadRequest(Class aClass, String api, String owner, String path, T result) { - this(aClass, api, owner, path, Response.SC_NO_CONTENT, result); - } - - @Override - public void execute() { - if (path.contains("?")) - path += "&t=" + System.currentTimeMillis(); - else - path += "?t=" + System.currentTimeMillis(); - RequestBuilder builder = new RequestBuilder(RequestBuilder.HEAD, api + owner + path); - for (String header : headers.keySet()) { - builder.setHeader(header, headers.get(header)); - } - try { - builder.sendRequest("", new RestRequestCallback(api + owner + path, okCode) { - @Override - public void onSuccess(T object) { - HeadRequest.this.onSuccess(object); - } - - @Override - public T deserialize(Response response) { - return Resource.createFromResponse(aClass, owner, response, result); - } - - @Override - public void onError(@SuppressWarnings("unused") Request request, Throwable throwable) { - if (throwable instanceof RestException) { - if (((RestException) throwable).getHttpStatusCode() == 304 && cached != null){ - GWT.log("Using cache: " + cached.toString(), null); - onSuccess(cached); - return; - } - } - HeadRequest.this.onError(throwable); - } - - @Override - public void onUnauthorized(Response response) { - HeadRequest.this.onUnauthorized(response); - } - }); - } - catch (RequestException e) { - } - } - - protected abstract void onUnauthorized(Response response); - - public void setHeader(String header, String value) { - headers.put(header, value); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/PostRequest.java b/web_client/src/gr/grnet/pithos/web/client/rest/PostRequest.java deleted file mode 100644 index a9b6ae7..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/PostRequest.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.rest; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestBuilder; -import com.google.gwt.http.client.RequestException; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; - -import gr.grnet.pithos.web.client.foldertree.Resource; -import java.util.HashMap; -import java.util.Map; - -public abstract class PostRequest implements ScheduledCommand { - - private String api; - - protected String owner; - - private String path; - - String data = ""; - - private Map headers = new HashMap(); - - public abstract void onSuccess(Resource result); - - public abstract void onError(Throwable t); - - public PostRequest(String api, String owner, String path) { - this.api = api; - this.owner = owner; - this.path = path; - } - - public PostRequest(String api, String owner, String path, String data) { - this.api = api; - this.owner = owner; - this.path = path; - this.data = data; - } - - @Override - public void execute() { - RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, api + owner + path); - for (String header : headers.keySet()) { - builder.setHeader(header, headers.get(header)); - } - try { - builder.sendRequest(data, new RestRequestCallback(api + owner + path, Response.SC_ACCEPTED) { - @Override - public void onSuccess(Resource object) { - PostRequest.this.onSuccess(object); - } - - @Override - public Resource deserialize(Response response) { - return Resource.createFromResponse(Resource.class, owner, response, null); - } - - @Override - public void onError(@SuppressWarnings("unused") Request request, Throwable throwable) { - PostRequest.this.onError(throwable); - } - - @Override - public void onUnauthorized(Response response) { - PostRequest.this.onUnauthorized(response); - } - }); - } - catch (RequestException e) { - GWT.log("", e); - } - } - - protected abstract void onUnauthorized(Response response); - - public void setHeader(String header, String value) { - headers.put(header, value); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/PutRequest.java b/web_client/src/gr/grnet/pithos/web/client/rest/PutRequest.java deleted file mode 100644 index 79924c5..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/PutRequest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.rest; - -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestBuilder; -import com.google.gwt.http.client.RequestException; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; - -import gr.grnet.pithos.web.client.foldertree.Resource; -import java.util.HashMap; -import java.util.Map; - -public abstract class PutRequest implements ScheduledCommand { - - private String api; - - protected String owner; - - private String path; - - private Map headers = new HashMap(); - - public abstract void onSuccess(Resource result); - - public abstract void onError(Throwable t); - - public PutRequest(String api, String owner, String path) { - this.api = api; - this.owner = owner; - this.path = path; - } - - @Override - public void execute() { - RequestBuilder builder = new RequestBuilder(RequestBuilder.PUT, api + owner + path); - for (String header : headers.keySet()) { - builder.setHeader(header, headers.get(header)); - } - try { - builder.sendRequest("", new RestRequestCallback(api + owner + path, Response.SC_CREATED) { - @Override - public void onSuccess(Resource object) { - PutRequest.this.onSuccess(object); - } - - @Override - public Resource deserialize(Response response) { - return Resource.createFromResponse(Resource.class, owner, response, null); - } - - @Override - public void onError(@SuppressWarnings("unused") Request request, Throwable throwable) { - PutRequest.this.onError(throwable); - } - - @Override - public void onUnauthorized(Response response) { - PutRequest.this.onUnauthorized(response); - } - }); - } - catch (RequestException e) { - } - } - - protected abstract void onUnauthorized(Response response); - - public void setHeader(String header, String value) { - headers.put(header, value); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/RestException.java b/web_client/src/gr/grnet/pithos/web/client/rest/RestException.java deleted file mode 100644 index 8710a06..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/RestException.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ -package gr.grnet.pithos.web.client.rest; - - -public class RestException extends Throwable { - - private int httpStatusCode; - private String httpStatusText; - private String text; - - public RestException() { - } - - public RestException(String message) { - super(message); - } - - public RestException(Throwable innerException) { - super(innerException); - } - - public RestException(String message, Throwable innerException) { - super(message, innerException); - } - - public RestException(String aPath, int aStatusCode, String aStatusText, String aText) { - super("HTTP error: " + aStatusCode+"\nPath:"+aPath + "\nStatus text:" + aStatusText + "\nText:" + aText); - httpStatusCode = aStatusCode; - httpStatusText = aStatusText; - text = aText; - } - - public int getHttpStatusCode() { - return httpStatusCode; - } - - public String getHttpStatusText() { - return httpStatusText; - } - - public String getText() { - return text; - } - -} diff --git a/web_client/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java b/web_client/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java deleted file mode 100644 index c2a03f9..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.rest; - -import com.google.gwt.http.client.Request; -import com.google.gwt.http.client.RequestCallback; -import com.google.gwt.http.client.Response; -import gr.grnet.pithos.web.client.foldertree.Resource; - -public abstract class RestRequestCallback implements RequestCallback { - - private static final int HTTP_OK = 200; - private int okcode = -1; - private String path; - - public RestRequestCallback(String path, int okCode) { - this.path = path; - this.okcode = okCode; - } - - public RestRequestCallback(String path) { - this(path, -1); - } - - @Override - public void onResponseReceived(Request request, Response response) { - try { - if (response.getStatusCode() == HTTP_OK || (okcode !=-1 && response.getStatusCode() == okcode)) - onSuccess(deserialize(response)); - else if (response.getStatusCode() == Response.SC_UNAUTHORIZED) - onUnauthorized(response); - else { - String statusText = ""; - String text = ""; - // Ignore JavaScript errors caused by non-existent text. - try { - statusText = response.getStatusText(); - } - catch (Exception e) {} - - try { - text = response.getText(); - } - catch (Exception e) {} - - onError(request, new RestException(path, response.getStatusCode(), statusText, text)); - } - } catch (Exception e) { - onError(request, e); - } - } - - public abstract void onSuccess(T result); - - public abstract T deserialize(Response response); - - public abstract void onUnauthorized(Response response); -} diff --git a/web_client/src/gr/grnet/pithos/web/client/tagtree/Tag.java b/web_client/src/gr/grnet/pithos/web/client/tagtree/Tag.java deleted file mode 100644 index 55f066b..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/tagtree/Tag.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.tagtree; - -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; - -import java.util.Date; -import java.util.LinkedHashSet; -import java.util.Set; - -public class Tag extends Resource { - /* - * The name of the tag. - */ - private String name = null; - - private Set files = new LinkedHashSet(); - - public Tag() {}; - - public Tag(String name) { - this.name = name; - } - - public String getName() { - return name; - } - -// public void populate(Response response) { -// String header = response.getHeader("Last-Modified"); -// if (header != null) -// lastModified = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822).parse(header); -// -// header = response.getHeader("X-Container-Bytes-Used"); -// if (header != null) -// bytesUsed = Long.valueOf(header); -// -// subfolders.clear(); //This is necessary in case we update a pre-existing Tag so that stale subfolders won't show up -// files.clear(); -// JSONValue json = JSONParser.parseStrict(response.getText()); -// JSONArray array = json.isArray(); -// if (array != null) { -// for (int i=0; i getFiles() { - return files; - } - - @Override - public Date getLastModified() { - return null; - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeView.java b/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeView.java deleted file mode 100644 index 58e7034..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeView.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.tagtree; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ImageResource; -import com.google.gwt.resources.client.ImageResource.ImageOptions; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.cellview.client.CellTree; -import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Tree; -import gr.grnet.pithos.web.client.FolderContextMenu; - -public class TagTreeView extends Composite { - - static interface BasicResources extends CellTree.Resources { - - @Override - @ImageOptions(flipRtl = true) - @Source("gr/grnet/pithos/web/client/cellTreeClosedItem.png") - ImageResource cellTreeClosedItem(); - - @Override - @ImageOptions(flipRtl = true) - @Source("gr/grnet/pithos/web/client/cellTreeLoadingBasic.gif") - ImageResource cellTreeLoading(); - - @Override - @ImageOptions(flipRtl = true) - @Source("gr/grnet/pithos/web/client/cellTreeOpenItem.png") - ImageResource cellTreeOpenItem(); - - @Override - @Source({"gr/grnet/pithos/web/client/PithosCellTreeBasic.css"}) - CellTree.Style cellTreeStyle(); - } - - static interface Images extends Tree.Resources, FolderContextMenu.Images { - - @Source("gr/grnet/pithos/resources/home22.png") - ImageResource home(); - - @Source("gr/grnet/pithos/resources/info.png") - public ImageResource tag(); - } - - static Images images = GWT.create(Images.class); - - static interface Templates extends SafeHtmlTemplates { - public Templates INSTANCE = GWT.create(Templates.class); - - @Template("{0}") - public SafeHtml nameSpan(String name); - } - - private TagTreeViewModel model; - - public TagTreeView(TagTreeViewModel viewModel) { - this.model = viewModel; - /* - * Create the tree using the model. We use null as the default - * value of the root node. The default value will be passed to - * CustomTreeModel#getNodeInfo(); - */ - CellTree.Resources res = GWT.create(BasicResources.class); - CellTree tree = new CellTree(model, null, res); - - tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); - - initWidget(tree); - } - - - public Tag getSelection() { - return model.getSelection(); - } - - public void updateTag(Tag tag) { - model.updateTag(tag); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java b/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java deleted file mode 100644 index 4cee314..0000000 --- a/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2011 GRNET S.A. All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and - * documentation are those of the authors and should not be - * interpreted as representing official policies, either expressed - * or implied, of GRNET S.A. - */ - -package gr.grnet.pithos.web.client.tagtree; - -import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.AccountResource; -import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; -import gr.grnet.pithos.web.client.tagtree.TagTreeView.Templates; - -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.Cell; -import com.google.gwt.cell.client.TextCell; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.ContextMenuEvent; -import com.google.gwt.http.client.Response; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.text.shared.SafeHtmlRenderer; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SingleSelectionModel; -import com.google.gwt.view.client.TreeViewModel; - -public class TagTreeViewModel implements TreeViewModel { - - private Cell tagCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - - @Override - public void render(@SuppressWarnings("unused") Context context, Tag tag, SafeHtmlBuilder safeHtmlBuilder) { - String html = AbstractImagePrototype.create(TagTreeView.images.tag()).getHTML(); - safeHtmlBuilder.appendHtmlConstant(html); - safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(tag.getName())); - } - - @Override - public void onBrowserEvent(@SuppressWarnings("unused") Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, Tag tag, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater valueUpdater) { - if (event.getType().equals(com.google.gwt.event.dom.client.ContextMenuEvent.getType().getName())) { - TagTreeViewModel.this.selectionModel.setSelected(tag, true); - } - } - }; - - private ListDataProvider rootDataProvider = new ListDataProvider(); - private ListDataProvider tagDataProvider = new ListDataProvider(); - - protected SingleSelectionModel selectionModel; - - protected Pithos app; - - public TagTreeViewModel(Pithos _app, SingleSelectionModel selectionModel) { - app = _app; - this.selectionModel = selectionModel; - } - - @Override - public NodeInfo getNodeInfo(T value) { - if (value == null) { - return new DefaultNodeInfo(rootDataProvider, new TextCell(new SafeHtmlRenderer() { - @Override - public SafeHtml render(String object) { - SafeHtmlBuilder builder = new SafeHtmlBuilder(); - render(object, builder); - return builder.toSafeHtml(); - } - - @Override - public void render(String object, SafeHtmlBuilder builder) { - String html = AbstractImagePrototype.create(TagTreeView.images.tag()).getHTML(); - builder.appendHtmlConstant(html); - builder.append(Templates.INSTANCE.nameSpan(object)); - } - }), null, null); - } - else if (value instanceof String) { - //fetchAllTags(); - return new DefaultNodeInfo(tagDataProvider, tagCell, selectionModel, null); - } - else - return null; - } - - @Override - public boolean isLeaf(Object o) { - if (o == null) - return false; - if (o instanceof String) - return tagDataProvider.getList().isEmpty(); - return true; - } - - public Tag getSelection() { - return selectionModel.getSelectedObject(); - } - - public void updateTag(Tag tag) { - fetchTag(tag); - } - - public void fetchTag(Tag t) { - AccountResource account = app.getAccount(); - Iterator iter = account.getContainers().iterator(); - fetchTag(iter, t, new LinkedHashSet()); - } - - protected void fetchTag(final Iterator iter, final Tag t, final Set files) { - if (iter.hasNext()) { - Folder f = iter.next(); - String path = f.getUri() + "?format=json&meta=" + t.getName(); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), app.getUsername(), path) { - @Override - public void onSuccess(Folder _result) { - files.addAll(_result.getFiles()); - fetchTag(iter, t, files); - } - - @Override - public void onError(Throwable th) { - GWT.log("Error getting folder", th); - if (th instanceof RestException) - app.displayError("Error getting folder: " + ((RestException) th).getHttpStatusText()); - else - app.displayError("System error fetching folder: " + th.getMessage()); - } - - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - getFolder.setHeader("X-Auth-Token", app.getToken()); - Scheduler.get().scheduleDeferred(getFolder); - } - else { - app.showFiles(files); - } - } - - public void initialize(List allTags) { - tagDataProvider.getList().addAll(allTags); - rootDataProvider.getList().add("Tags"); - } -} diff --git a/web_client/src/gr/grnet/pithos/web/client/upArrow.png b/web_client/src/gr/grnet/pithos/web/client/upArrow.png deleted file mode 100644 index a3369472fe88f47d288a5217c03704cb61639962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^+(69E!3HGn{(JaZG%Q-e|yQz{EjrrH1%E%9`545_%4bY}INqysGfmm3-w zTw|2XpWqrP@$bKT=?89PNhI+`VX5|||VQ>00004b3#c}2nYxW zdK~zYI?Nz}M!!QVwGIQtZ9-Yd4xUmfgpOf}if4Jm~5Eewi zKG5WG`3+x^03Pwe4~rIA|Y_HfT`nmDQ543p+B>}H(w1-lV!;R9Q?o0M&04-1=} zPn!0N`q~}_#1(tU{!yb=%l5FoG&03&73|>+O_&FHmgA*?00000NkvXXu0mjfh{UQL diff --git a/web_client/src/gr/grnet/pithos/web/public/images/blank.gif b/web_client/src/gr/grnet/pithos/web/public/images/blank.gif deleted file mode 100644 index 1d11fa9ada9e93505b3d736acb204083f45d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx diff --git a/web_client/src/gr/grnet/pithos/web/public/images/bottom.png b/web_client/src/gr/grnet/pithos/web/public/images/bottom.png deleted file mode 100644 index 986934bbbbbf189f2358b8d4168d5bd924297f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 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 P`xrc3{an^LB{Ts5O0i}O diff --git a/web_client/src/gr/grnet/pithos/web/public/images/close_blue.png b/web_client/src/gr/grnet/pithos/web/public/images/close_blue.png deleted file mode 100644 index 297368c821c5cf9fa2f9ec3294a3ff4410238667..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 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 JPDHLkV1k5(A1eR= diff --git a/web_client/src/gr/grnet/pithos/web/public/images/close_red.png b/web_client/src/gr/grnet/pithos/web/public/images/close_red.png deleted file mode 100644 index 3d835bb305b2ebcf9a876055d53a8a0aef7623b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1525 zcmVWdJZTFEKVRFgFh^6@~x+ z1xiUoK~z|U<(O?~Q&$+rf2ZwMol36wvelO*(_W{Atx*_5o#ck~i!f)(DB-dXjZ_8a z)b8V8!xV*mTzn}qq?nEkdn1fE25u;8yHTCY(XN}=nyAU7wiVITxkPdL>_cy3TGOcL zUg-XCKIHkIbD#74?|J^58zmyb{}@I8_6D9L5*;0n&dUVB4qcaxN=a8sOJ2UKrA0O> zB|CI|RD435fStNdUo6H{5%!rT-I2&BzT2|cXPQhC;kQ_fow}aol*p6!fOK0M0Htm> z#hUh{A3q8oEm}k}7Gnue3iJV2l;WL(2YJcw=NHSO(KMMU!d&1ca29x8*LnZ!*?S&v zqpgkeJ|CS*(Ww+YZZ|{GXf{#IFz8gO;AXCd!*pvJyxRXj{=iEu9 z?#pw-7OX!Q%*Mx#e7Jc0ILUY%2QbwZU;!{gghtcki}mYiG)-oSun?F8OarC>$#|TL zCr(fTa5WmGr@ESAhlAPMwo#&KT#ZJ#m9z0%K&DXf(I`FZ)-k2B5@#?-v8K@<3enfx zOeU3Lu`T8qpO5S9?UZfXmR+apQ}U;sV|HyVr7l-Nu>t02bIl zi3Dk&B+s!eb-73bX}g_X4u`qzaL`^|&9{cZWxM}jSb#Ke%*cir z2han7tN`V;wM@0eoM{*j*x4|8EQ=#eO*k1Ycr0ANk)|f}swx)y{n>cYWS5H!Fxb^q zFhQXfnC^Cy0S59sW3a1>44~z-*VCHDs&JS!ot);$4U@cBpsCqtppuAfSAIj5jPC!kc*m{M8E>BEOd zuSumi847X7;b4wkNN$dqZZ|VL9tM+1;9d(niU;&s7JE#S3K3QSlkNCVKm<4m2=ENB z3UJvX^x7hnlxiBUY~Rjz4Gnzac2gM$a5I(S=Wv)wn#R^dA}c@!Xdly)F2lfS7#N`t zpL)H74TH)+V0d%UC_~94Zyq>6scm-O)Yp?rBybuALx}`u+uM0@?b@sW8K5&9=6sGf z0C@6vL4QXFyG@h1A}r4Ht^;C{S=AdvAGq%O%ZmRCLhe3H+&E91cOX< zx#$Rm_`0D1fQq$isme(@VuB<52wn%Awg_*xw(?bdJ#D*o0Z>+1$y=ci6*&f5q-pdg z5}avhV3NZ@MQtr>LZPexY2ZY2^L@qU6QFG6N*0%w(;JI%9ngT|cJcL=MR`pP3#zKv z<@fWW2(JRyfJ;C{c{yb(SN=U$;eQ%?b)BAgoM(YSrFhS>SeWDX=MEj>W51s=5iS8s z%FB5-78@oX>BjLNMx(CFW~C&abIHj?JQ9)3N=f6GufYi;fQZOIN5>=c6QTtk2NUA| bfXBgK$VQjI^sVWF00000NkvXXu0mjf70kL5 diff --git a/web_client/src/gr/grnet/pithos/web/public/images/down-arrow-light.png b/web_client/src/gr/grnet/pithos/web/public/images/down-arrow-light.png deleted file mode 100644 index e53113ec8b4202a046c4e6ba964423e9cfa70022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^96-#%!3HEZpRM}lR-krMGDI1EpGlQmR0yDlbCYGe8D3oWGWGJ|M`UZqI@`(c#rF*(KhHzYuJ++YcP=JWT#m_=k46CMH znIf9N$irz|!YRa}y}>D#edUAxhQ&;-<_@+z96P?v+i`FH@eYf}Pq%aZRZ`N6Sp1tg zIc*-(DHHvRk3Y=Ze&$Z@>|cWMamy-O8P}fqyKE)*9!7yZQdKvcPnQ9$WbkzLb6Mw< G&;$U(R$00L diff --git a/web_client/src/gr/grnet/pithos/web/public/images/header.png b/web_client/src/gr/grnet/pithos/web/public/images/header.png deleted file mode 100644 index 16b33ef51fe9262bc5af3248ba4d4bdc299625af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 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 XWBrHU7iSEP8X8hQyAJO{V6g1pwSv80 diff --git a/web_client/src/gr/grnet/pithos/web/public/images/next_blue.gif b/web_client/src/gr/grnet/pithos/web/public/images/next_blue.gif deleted file mode 100644 index 4666e44d3555af0c91cf467c1a94d229fd3d5cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 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 NU0ZJID-sJq{|8Ut_>%wt diff --git a/web_client/src/gr/grnet/pithos/web/public/images/page_shadow.png b/web_client/src/gr/grnet/pithos/web/public/images/page_shadow.png deleted file mode 100644 index 35c7470d244f60d2073b027440a9e8508722dfed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 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 VtP^Ja3%URR002ovPDHLkV1gdG9-;sM diff --git a/web_client/src/gr/grnet/pithos/web/public/images/pause_green.png b/web_client/src/gr/grnet/pithos/web/public/images/pause_green.png deleted file mode 100644 index c52f28c1c4e16760ab62c7c356fb6a38dd50b9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 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 Hu0mjf=!*WW diff --git a/web_client/src/gr/grnet/pithos/web/public/images/play_green.png b/web_client/src/gr/grnet/pithos/web/public/images/play_green.png deleted file mode 100644 index 6e832a43872ab925516109007c12cf1de141819e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1097 zcmV-P1h)H$P)w(EZ*psMAUL&X(s%#> z1D;7lK~z|U<(N-s9Ay~Bf3t~+t&JHQK`X=^X#%a4WX;7MG?@j1h?Fd1umNEwGzY;$ zM{f~Ir<6bs7AEyjA=Z2q2_!u@fg)-_XC-QuHgyw7ArNu5P%DV-j3_bV%6QmKvg^7# zllD*-ADGMg=lkCGndg0BM)G~%=YNdIy)NKhqwWb9eQ%W9Pq{nJuX_UKug%l(atG62 zOy5y{-4h^1B=UZqp|^(^ofzGAekcN@W76g$kI5va64*c3n|}42igZj0b)h^alew8G zvpIh_$YV0$bUBf)HDmiXB?+1uHI z|Ib295X2RM>$;dx|+-&r_oPMJ@CPA9r6it&j7K=xLa z^WUB)8A}p-ELQzcsn|s`&;}fU)f=nq8`{U*wYk8WLMx!OLAhBj*z!e#N1y_-zhp@* zr$|1X#C2V)j8ze14w&R_<}fZAXhNek(u(ndQTyNqwg_kjb^%YqTGJZ6BfU(|)n1OF z72y2pV6WJSuLZ`(26&L@N)-Gd6kvXCf(OP+2GN!%=4X|%PIM>ed!i5XQN&f3MHsw+=J%?nu@2&wT_k=o&hXh`vOi{-OimJeyeQ2OJ3xFX z7G2Y1F#O= zN;jrfcx&nbwcH;t0>T!!w_Oxj!Ctmeb}O(B=0y|nhA4|w_p7iDvAr?mopNw(r37ps z4=h0A?~P2InPTwZVAb?+1b84f$(4l+KLU)$b&rPxrweZcp?Rp@!9hlO_*LZydRK+QK&RKST3PL$h|;QZ!*2io&m znM>=}(9h_YGiD_L+fl#<0ZSmQNE}HXVPa$=WHR8_IpQbdKF{LsIJCo`xjeJ&{BR2R z55vc2Pv;)er_;1QRD0h44U+HI_YaW^S1&NwQ+>+^q3#K|Th#sM@ZI8Xz?(2IiNqyh P00000NkvXXu0mjf*|q5% diff --git a/web_client/src/gr/grnet/pithos/web/public/images/play_grey.png b/web_client/src/gr/grnet/pithos/web/public/images/play_grey.png deleted file mode 100644 index 8e18760be80a81e21a4864b48f3452e3de7c4057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 zcmV;L1ZDe)P)w(EZ*psMAUL&X(s%#> z1Mf*hK~z|U<(N$)(QlZgk(CKuHjEvxRyXoueQ_>co&;gPp5f>LnNl6J=Sy}Au?J+Vk!u|a{ z0A8;bNs_|Ov%S5|4r7?RJN) zNwEO3EC;SN8V!;p@%s7-fGo>l1-QGr!|isHpP!G%<6&=a?^8}qO%2!A*UZk&;&3<+ z1R>go!c%|?29IsmV)uR#v^6PA~k$<570 zuh&ylRK)4&DHj(PpYp1!tMPa|L`6kWT3Q;mwvVsC$3qYV-rnARHz|DGrlMUy6h#aM zLtrH~nM^_BvMeKt;+OoDl@;#q?@3Hd#O-#Il$3-hip2gD8q*WMrV# zYQxs%Uj$=fVgj+Zw>S3p_j!JPW?*1|;^N{j`HBRPWto_mm`{!S;q`h$I$&{e5m}a* zo}OlUdO8qaTU*0svk@O3|LJ~SuUAQF0D(0C;Njtc-Q8Uh5)yDY9O(7>kX*$M2-Tq9 z0TUAwL2)U)q4*0JlGc%L^{{FCA=AWSQ`6By= s$mZrI1qB5^=105$e~XC!9R6GU0y=r0;&l5Rga7~l07*qoM6N<$f*p7y@Bjb+ diff --git a/web_client/src/gr/grnet/pithos/web/public/images/play_red.png b/web_client/src/gr/grnet/pithos/web/public/images/play_red.png deleted file mode 100644 index 887d6449648072b7f85bc494c838323cf2c093e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmV-71jze|P)w(EZ*psMAUL&X(s%#> z1B^*TK~z|U<(N-s6lWO5f3v2R{3-c_Sd5zPSd7MkO==Y{qPw)Io`yM5 znAUZkxGwiKtt`Gw2v({pf14)Lx;`JjqbNLaUDj0OS2mCU+JH}hykXGS-i|vt8K<>) z0(bzj%txw9yRNftU;q!e9~S#>F((3(x<1Ft6@pJ_8zjpT37(V>@8RahNs? z?&>q{`_ zfZ}NawgMeNz=?hPIDhb9Rc<6aV9K(%kWO={r-z5O&F2FHtO%_cX9RBOIxTzl&?w8S z&1RXhEdHrjh5(yX71wnsG&i$BQ6g(g@M;7~j|4m`=2ThGb&)qPXYZEIPIiR9+M0^3 z95n)Cx{m9*$g<1>!=PT4@qynojW0@;9zbgSDPNk+n&@azGIU;1^(~u8zZl zgKXTpcTs*U0X!fOVnO3YM2)~`xcr9u`x)-Hq65r|g_TUD5VFj;X|ny$A$FI{y`}36_4F{7%h8$5F6q8f z6h~kga2xm)_;kw_zP@%X7C*KFq6F}OpN}3bi+>6Dj)Mnmu4u9|o8_FMU})L`0ha23 z1YiMUlEhaB4zT;=$(U>)sBsLY)4{h8d{YlKHV5@Lz@$1jwzed~@|GjS=&{ x2*0-f5V>>qEFV|d@=>UH0p1oh|2q7(cnRJ`IfT>Xsm}la002ovPDHLkV1kwi?0EnH diff --git a/web_client/src/gr/grnet/pithos/web/public/images/popup-bg.png b/web_client/src/gr/grnet/pithos/web/public/images/popup-bg.png deleted file mode 100644 index 4bb89b0a5b4fa16c0b19278a8e3f096468140734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^OhCMugAGV7Ryg|wNHG=%xjQkeJ16rJ$YD$Jc6VX; z4}uH!E}sk(;VkfoEM{Qf76xHPhFNnYfP(BLp1!W^w^_y6)sz-}DvAdR&G&S146!)< zcCsU1vjY$F@yL01%D>9jhVIPSq@ma}uc~qKR0}!o#<=(A#ShFluPj%nX%@_(YPe>8 zO9B`Ft&&Z%I8NHM>!}N@s-3dFO-tmw;dw>HH40gql#W}UJ`r#tG`sTC>t4IVzvd+M zePZ|DH|f`$)&Ed6{$tu cpW~14HH)#yJly!_2GFStp00i_>zopr04| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfZFU}RF{y|8#&oq6dBJ6J@J;C z?9lKqW!izpr5$OF6NDot83?lS%4})=ew}Y#yzAi)44Z2*&YcwSnVIjQu|Y`I$eS~f zL&mjg&w|a|x2G;%5TW(SB;9?YsQ%gZNq#~nA{}EGA8vlSBY^i2@2uLp+LNbBzFgfT zJy&PPlW6&_RaMJOdOvP;``{+OH@M66s%)^;W09)Fj~2_k6;#u>6@SLR-fChnEq7Z{YTRbk6hg+>>KlMZ)r<QO6ys5rT+V;_x0pG XeND@jwpr8yLzBVN)z4*}Q$iB}%_FOT diff --git a/web_client/src/gr/grnet/pithos/web/public/images/prev_blue.gif b/web_client/src/gr/grnet/pithos/web/public/images/prev_blue.gif deleted file mode 100644 index beba13ef5e1748d02b4cfb88f2ead310fdf06405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmZ?wbhEHbv}aIYc*el+|Ns9_Uw?o6^83T*Ur%2Dc=-IwjYnUuKm2m_{-?`#KU}>1 z?(~h1r>=iEdF}m)tM86qd3)^go1>RrAG!GI@P$_g&%fMt>eaU6&o>=@y!PPpH3y!p z+V^DT-pBK{KAN@Z-n5O6r>uWCY3=<9tMB%$yxp_>R_F5jT}y9tEWXyZ@Jh@4OEq)v zRL;ItKJ|S5Q%VkrRcOv z{$aPgJytoV9CP;DW*;$5Jz|!!PcQkne&PY6#9dnPN3>)2s6`*pj@qIgxl<{8k6iE$ zg`iDR{##}I){A*>6mnn7=e&y3ei_i$41)tG{$ycfX9!}@0XYX0Ck*WW8yK3JTUy)N zJ371Cf`YpHCrs?`n>2OW^cgc}&7L!N-uwj%7cE}0blLJ1D`z{dvC-jfl3U|wqsiFB zy?HaYiX&Syo1@Ai7fX397Z(-=c^55teHYy(9v6N28}cmd=bBHjFLEeb#1b-)wKX*we5{)Kif`(Nl&&;DK|80{dT{LXSy|4s9wjZkjtkIvnOz(JRQN8GW=bol8hsZ#!Q+&=Eivk2n6i@Lmh%EA$wWAllK@f;Q%0+ zOrD=7&dw62r-_r3#PM-B9uFrHfp|P{baWvViv?ma>hO??Mg!3(6^T&$`_$eZ6%JqM z+TEpgcBri_*Y>t;bJMo5VOw8!g+jJa2wz(>tghlKD|jH#u)J(oTEge&@x{g3*;#yU zuGa6zXJ%v+g?qiY&nKIj!l$P(kEdaB5*r`K+-{lM%^e%VTrSk*LYz))co+r;xdQ_z zNg^Z(eSKV;4YOKhW;157aIIFvY6Y_y?e4}*Cd6cdt}e8*6EPY=uSeV4L8n8Sn?a>Q zluA%2psDF{IQ$2&&QfR$kVDaB%jGA)NGgF)YnrvX7JaK$E^jk*d@+1Be(mlteKT8n zzgungK1V+}F!;kcWZ{pNax#cJqx{kW8j<1gWU%-QHG|J`2ue`4KtKmnz($J&MMS2c z7~MqaX)EgaG>7mZaZAVqrZ9`(35l!&Ew4;n#_Jb9B67v~kT1@I9J{c^&iI?D;2UYr zwE1}zoCR9BFuNcfI!uyZE!VOLX5sB2&77T9KnqqquFLK0d0}kK`9MgKyDvnUt-gph z{W_1aQ0JGYa@ghfButH8uc1pA(nexGNM}oW-!kd5I@XP<`v4=)gDHg{krLG!S)I$& zO5ccvK4`te*aw z)@Dj+S)Ms(YAFjWBvD>65e?}qj4%vWl2SLGn?C3w7XBAKf5G$c7>xSDqg4nP*aC<~ zqtY))`YlO6CFzG0*^WfMMZ_&p+!Vzxq8JgyHIb|nvPQ@!LOv3*O2`L7-V?GyNSKg! zBoq#X-h@K)Az?`n76f5l5atBmtPjs(-;@teV?2fNB*xFM{e>M*VEhE*5sZTv`>}1p zW*fC}!<@a(&iOgii#RWbdJwvekQ*TWIocirr8dt4Svr?2ad&)a?XUT@$12mKEp4G8|hz)*1b@yO^{zh=BB zPsyi^Yl;rW@XE?9jIjFo36nm^L~I9O*rKgzR7p{ts}@{+|E< diff --git a/web_client/src/gr/grnet/pithos/web/public/images/prev_grey.gif b/web_client/src/gr/grnet/pithos/web/public/images/prev_grey.gif deleted file mode 100644 index a7f2260a56877db4e24dae5e09072dbc7e2c75b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmZ?wbhEHbv}aIYc*el+|NsB*-@kwR_U-G}uV21=dH3$!ix)4RKY#x0*|SHF9^Jox z|K7cOckbM|b?erR8#k_Bzkc=V)ytPJU%Ytn!i5W`PMtb&;>6LTM~@sia`^D!0|yT5 z+qZAeo;^Ev?%c6s$JVV|H*MOqVZ(;?>({SYvu5?`)hkx4Sh8fv;>C*>E?hW!_Usum zW=xwlZQ{g<6DCaP?d|RE?(XX9>gecbZ*OmGY^1uCA)8Dl021EiElB zE-or6Dl9C_%gf8j$;r;n&dA6}O-+rDkB^Ry4i66x2?+@d4D|H$bar+IdW~Vw1I3># zjO+}a3_2i}g5rdM{eJ^PQ*%peTYE=mSDUA2cmITm{e6?BPMbbs=B(Ls=FXeHVBw<0 zOO`HMzGCHUqcsL9TuqW|j0_YQo47V_=8`pHZ)P`=U1Y8=tz>S_${=m7B&}ht*2HbD zA$>!dmE&CV364cpT1_HWG7K_SJWaY*O+3%qbj_O0bQjy{GzrXJ4^AvYxk z25+YT7UfiaUPGfLR|I9+JiTNlGBh+yP-0{7sEA&a-?^tLNX9dei<943eS(ib2_q*j vgYX28d3%1yPAXkxlzmUUS=gri)t*dvM%?+;R>#n97H*dAI-@en)dACb&cYAug_j>#K2Riga zIfqp|J*3Y$w3Am253ADj3Wq|U=3!4U=`1S;hD~QO*dx4>&0yvjdDJV%izturC?9WB zgW4F&YmIzt$f?bBsI_$UM}&-?2*X_^0HpbN*ztf(a_j# z=rOdYc;;CAyQ*i5EJ+r)m{`)<(pJz|9;X|hY@!RYmGw*B$mrdfipS;SU*rQR*~uox zvN9PVHz@KeidO>FDW|*6GxDcS^`63m0GG}*N2Fe$)Rnx~(z@Tt7U;UcZjVcfgu;qz z9;t4Ox9EzB&c?*%rg|-LRXH(A*y}ZPjhzeZNZVy8d;jukU{x$W(U6euA6cL2HxF*= M%CbCpl>jII05^pTsQ>@~ diff --git a/web_client/src/gr/grnet/pithos/web/public/images/service-logo.png b/web_client/src/gr/grnet/pithos/web/public/images/service-logo.png deleted file mode 100644 index c5175766e9b2cce63e873768e8ed6d79e2fe8a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8062 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 U+O>nX7alxvM-CPo>?9xnJI;8=g#Z8m diff --git a/web_client/src/gr/grnet/pithos/web/public/images/tristate_unchecked.gif b/web_client/src/gr/grnet/pithos/web/public/images/tristate_unchecked.gif deleted file mode 100644 index 8b19c76dc4553fe52018c5399015d867e99e8058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmV;g15o@&Nk%w1VGaNe0Owi&000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui01f~S000P-0FMY9NN^yNBgCpfgI28}wr=3cVG~$QoJDct)U|6T zPoFx0(7<);Ca#=1b@1TTD+f{>xN#;o!kecL9Y}H|Pr{QouU<`xc)dOof8yDG4pKA&LM%B}YlT{(2< RWTu2i?#RJ{fSm*c06W0F$(H~C diff --git a/web_client/src/gr/grnet/pithos/web/public/images/white50.png b/web_client/src/gr/grnet/pithos/web/public/images/white50.png deleted file mode 100644 index 98c1a3fb7308bc9d23aa7d981dc228874d9bc272..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VN3FMcVYMs zf(!O8p9~b?EbxddW?hT|;+&tG zo0?a`;9QiNSdyBeP@Y+mq2TW68xY>eCk|93;pyTSB5^tS&;S4Rw# - - - - Pithos+ - - - - - - - - - diff --git a/web_client/src/gr/grnet/pithos/web/public/lytebox.css b/web_client/src/gr/grnet/pithos/web/public/lytebox.css deleted file mode 100644 index 5303fac..0000000 --- a/web_client/src/gr/grnet/pithos/web/public/lytebox.css +++ /dev/null @@ -1,93 +0,0 @@ -#lbOverlay { position: fixed; top: 0; left: 0; z-index: 99998; width: 100%; height: 500px; } - #lbOverlay.grey { background-color: #000000; } - #lbOverlay.red { background-color: #330000; } - #lbOverlay.green { background-color: #003300; } - #lbOverlay.blue { background-color: #011D50; } - #lbOverlay.gold { background-color: #666600; } - -#lbMain { position: absolute; left: 0; width: 100%; z-index: 99999; text-align: center; line-height: 0; } -#lbMain a img { border: none; } - -#lbOuterContainer { position: relative; background-color: #fff; width: 200px; height: 200px; margin: 0 auto; } - #lbOuterContainer.grey { border: 3px solid #888888; } - #lbOuterContainer.red { border: 3px solid #DD0000; } - #lbOuterContainer.green { border: 3px solid #00B000; } - #lbOuterContainer.blue { border: 3px solid #5F89D8; } - #lbOuterContainer.gold { border: 3px solid #B0B000; } - -#lbDetailsContainer { font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; width: 100%; line-height: 1.4em; overflow: auto; margin: 0 auto; } - #lbDetailsContainer.grey { border: 3px solid #888888; border-top: none; } - #lbDetailsContainer.red { border: 3px solid #DD0000; border-top: none; } - #lbDetailsContainer.green { border: 3px solid #00B000; border-top: none; } - #lbDetailsContainer.blue { border: 3px solid #5F89D8; border-top: none; } - #lbDetailsContainer.gold { border: 3px solid #B0B000; border-top: none; } - -#lbImageContainer, #lbIframeContainer { padding: 10px; } -#lbLoading { - position: absolute; top: 45%; left: 0%; height: 32px; width: 100%; text-align: center; line-height: 0; background: url(images/loading.gif) center no-repeat; -} - -#lbHoverNav { position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; } -#lbImageContainer>#lbHoverNav { left: 0; } -#lbHoverNav a { outline: none; } - -#lbPrev { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; left: 0; float: left; } - #lbPrev.grey:hover, #lbPrev.grey:visited:hover { background: url(images/prev_grey.gif) left 15% no-repeat; } - #lbPrev.red:hover, #lbPrev.red:visited:hover { background: url(images/prev_red.gif) left 15% no-repeat; } - #lbPrev.green:hover, #lbPrev.green:visited:hover { background: url(images/prev_green.gif) left 15% no-repeat; } - #lbPrev.blue:hover, #lbPrev.blue:visited:hover { background: url(images/prev_blue.gif) left 15% no-repeat; } - #lbPrev.gold:hover, #lbPrev.gold:visited:hover { background: url(images/prev_gold.gif) left 15% no-repeat; } - -#lbNext { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; right: 0; float: right; } - #lbNext.grey:hover, #lbNext.grey:visited:hover { background: url(images/next_grey.gif) right 15% no-repeat; } - #lbNext.red:hover, #lbNext.red:visited:hover { background: url(images/next_red.gif) right 15% no-repeat; } - #lbNext.green:hover, #lbNext.green:visited:hover { background: url(images/next_green.gif) right 15% no-repeat; } - #lbNext.blue:hover, #lbNext.blue:visited:hover { background: url(images/next_blue.gif) right 15% no-repeat; } - #lbNext.gold:hover, #lbNext.gold:visited:hover { background: url(images/next_gold.gif) right 15% no-repeat; } - -#lbPrev2, #lbNext2 { text-decoration: none; font-weight: bold; } - #lbPrev2.grey, #lbNext2.grey, #lbSpacer.grey { color: #333333; } - #lbPrev2.red, #lbNext2.red, #lbSpacer.red { color: #620000; } - #lbPrev2.green, #lbNext2.green, #lbSpacer.green { color: #003300; } - #lbPrev2.blue, #lbNext2.blue, #lbSpacer.blue { color: #01379E; } - #lbPrev2.gold, #lbNext2.gold, #lbSpacer.gold { color: #666600; } - -#lbPrev2_Off, #lbNext2_Off { font-weight: bold; } - #lbPrev2_Off.grey, #lbNext2_Off.grey { color: #CCCCCC; } - #lbPrev2_Off.red, #lbNext2_Off.red { color: #FFCCCC; } - #lbPrev2_Off.green, #lbNext2_Off.green { color: #82FF82; } - #lbPrev2_Off.blue, #lbNext2_Off.blue { color: #B7CAEE; } - #lbPrev2_Off.gold, #lbNext2_Off.gold { color: #E1E100; } - -#lbDetailsData { padding: 0 10px; } - #lbDetailsData.grey { color: #333333; } - #lbDetailsData.red { color: #620000; } - #lbDetailsData.green { color: #003300; } - #lbDetailsData.blue { color: #01379E; } - #lbDetailsData.gold { color: #666600; } - -#lbDetails { width: 60%; float: left; text-align: left; } -#lbCaption { display: block; font-weight: bold; } -#lbNumberDisplay { float: left; display: block; padding-bottom: 1.0em; } -#lbNavDisplay { float: left; display: block; padding-bottom: 1.0em; } - -#lbClose { width: 64px; height: 28px; float: right; margin-bottom: 1px; } - #lbClose.grey { background: url(images/close_grey.png) no-repeat; } - #lbClose.red { background: url(images/close_red.png) no-repeat; } - #lbClose.green { background: url(images/close_green.png) no-repeat; } - #lbClose.blue { background: url(images/close_blue.png) no-repeat; } - #lbClose.gold { background: url(images/close_gold.png) no-repeat; } - -#lbPlay { width: 64px; height: 28px; float: right; margin-bottom: 1px; } - #lbPlay.grey { background: url(images/play_grey.png) no-repeat; } - #lbPlay.red { background: url(images/play_red.png) no-repeat; } - #lbPlay.green { background: url(images/play_green.png) no-repeat; } - #lbPlay.blue { background: url(images/play_blue.png) no-repeat; } - #lbPlay.gold { background: url(images/play_gold.png) no-repeat; } - -#lbPause { width: 64px; height: 28px; float: right; margin-bottom: 1px; } - #lbPause.grey { background: url(images/pause_grey.png) no-repeat; } - #lbPause.red { background: url(images/pause_red.png) no-repeat; } - #lbPause.green { background: url(images/pause_green.png) no-repeat; } - #lbPause.blue { background: url(images/pause_blue.png) no-repeat; } - #lbPause.gold { background: url(images/pause_gold.png) no-repeat; } \ No newline at end of file diff --git a/web_client/src/gr/grnet/pithos/web/public/lytebox.js b/web_client/src/gr/grnet/pithos/web/public/lytebox.js deleted file mode 100644 index 1cf7210..0000000 --- a/web_client/src/gr/grnet/pithos/web/public/lytebox.js +++ /dev/null @@ -1,843 +0,0 @@ -//***********************************************************************************************************************************/ -// LyteBox v3.22 -// -// Author: Markus F. Hay -// Website: http://www.dolem.com/lytebox -// Date: October 2, 2007 -// License: Creative Commons Attribution 3.0 License (http://creativecommons.org/licenses/by/3.0/) -// Browsers: Tested successfully on WinXP with the following browsers (using no DOCTYPE and Strict/Transitional/Loose DOCTYPES): -// * Firefox: 2.0.0.7, 1.5.0.12 -// * Internet Explorer: 7.0, 6.0 SP2, 5.5 SP2 -// * Opera: 9.23 -// -// Releases: For up-to-date and complete release information, visit http://www.dolem.com/forum/showthread.php?tid=62 -// * v3.22 (10/02/07) -// * v3.21 (09/30/07) -// * v3.20 (07/12/07) -// * v3.10 (05/28/07) -// * v3.00 (05/15/07) -// * v2.02 (11/13/06) -// -// Credit: LyteBox was originally derived from the Lightbox class (v2.02) that was written by Lokesh Dhakar. For more -// information please visit http://huddletogether.com/projects/lightbox2/ -//***********************************************************************************************************************************/ -Array.prototype.removeDuplicates = function () { for (var i = 1; i < this.length; i++) { if (this[i][0] == this[i-1][0]) { this.splice(i,1); } } } -Array.prototype.empty = function () { for (var i = 0; i <= this.length; i++) { this.shift(); } } -String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); } - -function LyteBox() { - /*** Start Global Configuration ***/ - this.theme = 'grey'; // themes: grey (default), red, green, blue, gold - this.hideFlash = true; // controls whether or not Flash objects should be hidden - this.outerBorder = true; // controls whether to show the outer grey (or theme) border - this.resizeSpeed = 8; // controls the speed of the image resizing (1=slowest and 10=fastest) - this.maxOpacity = 80; // higher opacity = darker overlay, lower opacity = lighter overlay - this.navType = 1; // 1 = "Prev/Next" buttons on top left and left (default), 2 = "<< prev | next >>" links next to image number - this.autoResize = true; // controls whether or not images should be resized if larger than the browser window dimensions - this.doAnimations = true; // controls whether or not "animate" Lytebox, i.e. resize transition between images, fade in/out effects, etc. - - this.borderSize = 12; // if you adjust the padding in the CSS, you will need to update this variable -- otherwise, leave this alone... - /*** End Global Configuration ***/ - - /*** Configure Slideshow Options ***/ - this.slideInterval = 4000; // Change value (milliseconds) to increase/decrease the time between "slides" (10000 = 10 seconds) - this.showNavigation = true; // true to display Next/Prev buttons/text during slideshow, false to hide - this.showClose = true; // true to display the Close button, false to hide - this.showDetails = true; // true to display image details (caption, count), false to hide - this.showPlayPause = true; // true to display pause/play buttons next to close button, false to hide - this.autoEnd = true; // true to automatically close Lytebox after the last image is reached, false to keep open - this.pauseOnNextClick = false; // true to pause the slideshow when the "Next" button is clicked - this.pauseOnPrevClick = true; // true to pause the slideshow when the "Prev" button is clicked - /*** End Slideshow Configuration ***/ - - if(this.resizeSpeed > 10) { this.resizeSpeed = 10; } - if(this.resizeSpeed < 1) { resizeSpeed = 1; } - this.resizeDuration = (11 - this.resizeSpeed) * 0.15; - this.resizeWTimerArray = new Array(); - this.resizeWTimerCount = 0; - this.resizeHTimerArray = new Array(); - this.resizeHTimerCount = 0; - this.showContentTimerArray = new Array(); - this.showContentTimerCount = 0; - this.overlayTimerArray = new Array(); - this.overlayTimerCount = 0; - this.imageTimerArray = new Array(); - this.imageTimerCount = 0; - this.timerIDArray = new Array(); - this.timerIDCount = 0; - this.slideshowIDArray = new Array(); - this.slideshowIDCount = 0; - this.imageArray = new Array(); - this.activeImage = null; - this.slideArray = new Array(); - this.activeSlide = null; - this.frameArray = new Array(); - this.activeFrame = null; - this.checkFrame(); - this.isSlideshow = false; - this.isLyteframe = false; - /*@cc_on - /*@if (@_jscript) - this.ie = (document.all && !window.opera) ? true : false; - /*@else @*/ - this.ie = false; - /*@end - @*/ - this.ie7 = (this.ie && window.XMLHttpRequest); - this.initialize(); -} -LyteBox.prototype.initialize = function() { - this.updateLyteboxItems(); - var objBody = this.doc.getElementsByTagName("body").item(0); - if (this.doc.getElementById('lbOverlay')) { - objBody.removeChild(this.doc.getElementById("lbOverlay")); - objBody.removeChild(this.doc.getElementById("lbMain")); - } - var objOverlay = this.doc.createElement("div"); - objOverlay.setAttribute('id','lbOverlay'); - objOverlay.setAttribute((this.ie ? 'className' : 'class'), this.theme); - if ((this.ie && !this.ie7) || (this.ie7 && this.doc.compatMode == 'BackCompat')) { - objOverlay.style.position = 'absolute'; - } - objOverlay.style.display = 'none'; - objBody.appendChild(objOverlay); - var objLytebox = this.doc.createElement("div"); - objLytebox.setAttribute('id','lbMain'); - objLytebox.style.display = 'none'; - objBody.appendChild(objLytebox); - var objOuterContainer = this.doc.createElement("div"); - objOuterContainer.setAttribute('id','lbOuterContainer'); - objOuterContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objLytebox.appendChild(objOuterContainer); - var objIframeContainer = this.doc.createElement("div"); - objIframeContainer.setAttribute('id','lbIframeContainer'); - objIframeContainer.style.display = 'none'; - objOuterContainer.appendChild(objIframeContainer); - var objIframe = this.doc.createElement("iframe"); - objIframe.setAttribute('id','lbIframe'); - objIframe.setAttribute('name','lbIframe'); - objIframe.style.display = 'none'; - objIframeContainer.appendChild(objIframe); - var objImageContainer = this.doc.createElement("div"); - objImageContainer.setAttribute('id','lbImageContainer'); - objOuterContainer.appendChild(objImageContainer); - var objLyteboxImage = this.doc.createElement("img"); - objLyteboxImage.setAttribute('id','lbImage'); - objImageContainer.appendChild(objLyteboxImage); - var objLoading = this.doc.createElement("div"); - objLoading.setAttribute('id','lbLoading'); - objOuterContainer.appendChild(objLoading); - var objDetailsContainer = this.doc.createElement("div"); - objDetailsContainer.setAttribute('id','lbDetailsContainer'); - objDetailsContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objLytebox.appendChild(objDetailsContainer); - var objDetailsData =this.doc.createElement("div"); - objDetailsData.setAttribute('id','lbDetailsData'); - objDetailsData.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objDetailsContainer.appendChild(objDetailsData); - var objDetails = this.doc.createElement("div"); - objDetails.setAttribute('id','lbDetails'); - objDetailsData.appendChild(objDetails); - var objCaption = this.doc.createElement("span"); - objCaption.setAttribute('id','lbCaption'); - objDetails.appendChild(objCaption); - var objHoverNav = this.doc.createElement("div"); - objHoverNav.setAttribute('id','lbHoverNav'); - objImageContainer.appendChild(objHoverNav); - var objBottomNav = this.doc.createElement("div"); - objBottomNav.setAttribute('id','lbBottomNav'); - objDetailsData.appendChild(objBottomNav); - var objPrev = this.doc.createElement("a"); - objPrev.setAttribute('id','lbPrev'); - objPrev.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objPrev.setAttribute('href','#'); - objHoverNav.appendChild(objPrev); - var objNext = this.doc.createElement("a"); - objNext.setAttribute('id','lbNext'); - objNext.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objNext.setAttribute('href','#'); - objHoverNav.appendChild(objNext); - var objNumberDisplay = this.doc.createElement("span"); - objNumberDisplay.setAttribute('id','lbNumberDisplay'); - objDetails.appendChild(objNumberDisplay); - var objNavDisplay = this.doc.createElement("span"); - objNavDisplay.setAttribute('id','lbNavDisplay'); - objNavDisplay.style.display = 'none'; - objDetails.appendChild(objNavDisplay); - var objClose = this.doc.createElement("a"); - objClose.setAttribute('id','lbClose'); - objClose.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objClose.setAttribute('href','#'); - objBottomNav.appendChild(objClose); - var objPause = this.doc.createElement("a"); - objPause.setAttribute('id','lbPause'); - objPause.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objPause.setAttribute('href','#'); - objPause.style.display = 'none'; - objBottomNav.appendChild(objPause); - var objPlay = this.doc.createElement("a"); - objPlay.setAttribute('id','lbPlay'); - objPlay.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objPlay.setAttribute('href','#'); - objPlay.style.display = 'none'; - objBottomNav.appendChild(objPlay); -}; -LyteBox.prototype.updateLyteboxItems = function() { - var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a'); - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - var relAttribute = String(anchor.getAttribute('rel')); - if (anchor.getAttribute('href')) { - if (relAttribute.toLowerCase().match('lytebox')) { - anchor.onclick = function () { myLytebox.start(this, false, false); return false; } - } else if (relAttribute.toLowerCase().match('lyteshow')) { - anchor.onclick = function () { myLytebox.start(this, true, false); return false; } - } else if (relAttribute.toLowerCase().match('lyteframe')) { - anchor.onclick = function () { myLytebox.start(this, false, true); return false; } - } - } - } -}; -LyteBox.prototype.start = function(imageLink, doSlide, doFrame) { - if (this.ie && !this.ie7) { this.toggleSelects('hide'); } - if (this.hideFlash) { this.toggleFlash('hide'); } - this.isLyteframe = (doFrame ? true : false); - var pageSize = this.getPageSize(); - var objOverlay = this.doc.getElementById('lbOverlay'); - var objBody = this.doc.getElementsByTagName("body").item(0); - objOverlay.style.height = pageSize[1] + "px"; - objOverlay.style.display = ''; - this.appear('lbOverlay', (this.doAnimations ? 0 : this.maxOpacity)); - var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a'); - if (this.isLyteframe) { - this.frameArray = []; - this.frameNum = 0; - if ((imageLink.getAttribute('rel') == 'lyteframe')) { - var rev = imageLink.getAttribute('rev'); - this.frameArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev))); - } else { - if (imageLink.getAttribute('rel').indexOf('lyteframe') != -1) { - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { - var rev = anchor.getAttribute('rev'); - this.frameArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev))); - } - } - this.frameArray.removeDuplicates(); - while(this.frameArray[this.frameNum][0] != imageLink.getAttribute('href')) { this.frameNum++; } - } - } - } else { - this.imageArray = []; - this.imageNum = 0; - this.slideArray = []; - this.slideNum = 0; - if ((imageLink.getAttribute('rel') == 'lytebox')) { - this.imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'))); - } else { - if (imageLink.getAttribute('rel').indexOf('lytebox') != -1) { - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { - this.imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); - } - } - this.imageArray.removeDuplicates(); - while(this.imageArray[this.imageNum][0] != imageLink.getAttribute('href')) { this.imageNum++; } - } - if (imageLink.getAttribute('rel').indexOf('lyteshow') != -1) { - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { - this.slideArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); - } - } - this.slideArray.removeDuplicates(); - while(this.slideArray[this.slideNum][0] != imageLink.getAttribute('href')) { this.slideNum++; } - } - } - } - var object = this.doc.getElementById('lbMain'); - object.style.top = (this.getPageScroll() + (pageSize[3] / 15)) + "px"; - object.style.display = ''; - if (!this.outerBorder) { - this.doc.getElementById('lbOuterContainer').style.border = 'none'; - this.doc.getElementById('lbDetailsContainer').style.border = 'none'; - } else { - this.doc.getElementById('lbOuterContainer').style.borderBottom = ''; - this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme); - } - this.doc.getElementById('lbOverlay').onclick = function() { myLytebox.end(); return false; } - this.doc.getElementById('lbMain').onclick = function(e) { - var e = e; - if (!e) { - if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) { - e = window.parent.window.event; - } else { - e = window.event; - } - } - var id = (e.target ? e.target.id : e.srcElement.id); - if (id == 'lbMain') { myLytebox.end(); return false; } - } - this.doc.getElementById('lbClose').onclick = function() { myLytebox.end(); return false; } - this.doc.getElementById('lbPause').onclick = function() { myLytebox.togglePlayPause("lbPause", "lbPlay"); return false; } - this.doc.getElementById('lbPlay').onclick = function() { myLytebox.togglePlayPause("lbPlay", "lbPause"); return false; } - this.isSlideshow = doSlide; - this.isPaused = (this.slideNum != 0 ? true : false); - if (this.isSlideshow && this.showPlayPause && this.isPaused) { - this.doc.getElementById('lbPlay').style.display = ''; - this.doc.getElementById('lbPause').style.display = 'none'; - } - if (this.isLyteframe) { - this.changeContent(this.frameNum); - } else { - if (this.isSlideshow) { - this.changeContent(this.slideNum); - } else { - this.changeContent(this.imageNum); - } - } -}; -LyteBox.prototype.changeContent = function(imageNum) { - if (this.isSlideshow) { - for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } - } - this.activeImage = this.activeSlide = this.activeFrame = imageNum; - if (!this.outerBorder) { - this.doc.getElementById('lbOuterContainer').style.border = 'none'; - this.doc.getElementById('lbDetailsContainer').style.border = 'none'; - } else { - this.doc.getElementById('lbOuterContainer').style.borderBottom = ''; - this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme); - } - this.doc.getElementById('lbLoading').style.display = ''; - this.doc.getElementById('lbImage').style.display = 'none'; - this.doc.getElementById('lbIframe').style.display = 'none'; - this.doc.getElementById('lbPrev').style.display = 'none'; - this.doc.getElementById('lbNext').style.display = 'none'; - this.doc.getElementById('lbIframeContainer').style.display = 'none'; - this.doc.getElementById('lbDetailsContainer').style.display = 'none'; - this.doc.getElementById('lbNumberDisplay').style.display = 'none'; - if (this.navType == 2 || this.isLyteframe) { - object = this.doc.getElementById('lbNavDisplay'); - object.innerHTML = '    || '; - object.style.display = 'none'; - } - if (this.isLyteframe) { - var iframe = myLytebox.doc.getElementById('lbIframe'); - var styles = this.frameArray[this.activeFrame][2]; - var aStyles = styles.split(';'); - for (var i = 0; i < aStyles.length; i++) { - if (aStyles[i].indexOf('width:') >= 0) { - var w = aStyles[i].replace('width:', ''); - iframe.width = w.trim(); - } else if (aStyles[i].indexOf('height:') >= 0) { - var h = aStyles[i].replace('height:', ''); - iframe.height = h.trim(); - } else if (aStyles[i].indexOf('scrolling:') >= 0) { - var s = aStyles[i].replace('scrolling:', ''); - iframe.scrolling = s.trim(); - } else if (aStyles[i].indexOf('border:') >= 0) { - // Not implemented yet, as there are cross-platform issues with setting the border (from a GUI standpoint) - //var b = aStyles[i].replace('border:', ''); - //iframe.style.border = b.trim(); - } - } - this.resizeContainer(parseInt(iframe.width), parseInt(iframe.height)); - } else { - imgPreloader = new Image(); - imgPreloader.onload = function() { - var imageWidth = imgPreloader.width; - var imageHeight = imgPreloader.height; - if (myLytebox.autoResize) { - var pagesize = myLytebox.getPageSize(); - var x = pagesize[2] - 150; - var y = pagesize[3] - 150; - if (imageWidth > x) { - imageHeight = Math.round(imageHeight * (x / imageWidth)); - imageWidth = x; - if (imageHeight > y) { - imageWidth = Math.round(imageWidth * (y / imageHeight)); - imageHeight = y; - } - } else if (imageHeight > y) { - imageWidth = Math.round(imageWidth * (y / imageHeight)); - imageHeight = y; - if (imageWidth > x) { - imageHeight = Math.round(imageHeight * (x / imageWidth)); - imageWidth = x; - } - } - } - var lbImage = myLytebox.doc.getElementById('lbImage') - lbImage.src = (myLytebox.isSlideshow ? myLytebox.slideArray[myLytebox.activeSlide][0] : myLytebox.imageArray[myLytebox.activeImage][0]); - lbImage.width = imageWidth; - lbImage.height = imageHeight; - myLytebox.resizeContainer(imageWidth, imageHeight); - imgPreloader.onload = function() {}; - } - imgPreloader.src = (this.isSlideshow ? this.slideArray[this.activeSlide][0] : this.imageArray[this.activeImage][0]); - } -}; -LyteBox.prototype.resizeContainer = function(imgWidth, imgHeight) { - this.wCur = this.doc.getElementById('lbOuterContainer').offsetWidth; - this.hCur = this.doc.getElementById('lbOuterContainer').offsetHeight; - this.xScale = ((imgWidth + (this.borderSize * 2)) / this.wCur) * 100; - this.yScale = ((imgHeight + (this.borderSize * 2)) / this.hCur) * 100; - var wDiff = (this.wCur - this.borderSize * 2) - imgWidth; - var hDiff = (this.hCur - this.borderSize * 2) - imgHeight; - if (!(hDiff == 0)) { - this.hDone = false; - this.resizeH('lbOuterContainer', this.hCur, imgHeight + this.borderSize*2, this.getPixelRate(this.hCur, imgHeight)); - } else { - this.hDone = true; - } - if (!(wDiff == 0)) { - this.wDone = false; - this.resizeW('lbOuterContainer', this.wCur, imgWidth + this.borderSize*2, this.getPixelRate(this.wCur, imgWidth)); - } else { - this.wDone = true; - } - if ((hDiff == 0) && (wDiff == 0)) { - if (this.ie){ this.pause(250); } else { this.pause(100); } - } - this.doc.getElementById('lbPrev').style.height = imgHeight + "px"; - this.doc.getElementById('lbNext').style.height = imgHeight + "px"; - this.doc.getElementById('lbDetailsContainer').style.width = (imgWidth + (this.borderSize * 2) + (this.ie && this.doc.compatMode == "BackCompat" && this.outerBorder ? 2 : 0)) + "px"; - this.showContent(); -}; -LyteBox.prototype.showContent = function() { - if (this.wDone && this.hDone) { - for (var i = 0; i < this.showContentTimerCount; i++) { window.clearTimeout(this.showContentTimerArray[i]); } - if (this.outerBorder) { - this.doc.getElementById('lbOuterContainer').style.borderBottom = 'none'; - } - this.doc.getElementById('lbLoading').style.display = 'none'; - if (this.isLyteframe) { - this.doc.getElementById('lbIframe').style.display = ''; - this.appear('lbIframe', (this.doAnimations ? 0 : 100)); - } else { - this.doc.getElementById('lbImage').style.display = ''; - this.appear('lbImage', (this.doAnimations ? 0 : 100)); - this.preloadNeighborImages(); - } - if (this.isSlideshow) { - if(this.activeSlide == (this.slideArray.length - 1)) { - if (this.autoEnd) { - this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.end('slideshow')", this.slideInterval); - } - } else { - if (!this.isPaused) { - this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.changeContent("+(this.activeSlide+1)+")", this.slideInterval); - } - } - this.doc.getElementById('lbHoverNav').style.display = (this.showNavigation && this.navType == 1 ? '' : 'none'); - this.doc.getElementById('lbClose').style.display = (this.showClose ? '' : 'none'); - this.doc.getElementById('lbDetails').style.display = (this.showDetails ? '' : 'none'); - this.doc.getElementById('lbPause').style.display = (this.showPlayPause && !this.isPaused ? '' : 'none'); - this.doc.getElementById('lbPlay').style.display = (this.showPlayPause && !this.isPaused ? 'none' : ''); - this.doc.getElementById('lbNavDisplay').style.display = (this.showNavigation && this.navType == 2 ? '' : 'none'); - } else { - this.doc.getElementById('lbHoverNav').style.display = (this.navType == 1 && !this.isLyteframe ? '' : 'none'); - if ((this.navType == 2 && !this.isLyteframe && this.imageArray.length > 1) || (this.frameArray.length > 1 && this.isLyteframe)) { - this.doc.getElementById('lbNavDisplay').style.display = ''; - } else { - this.doc.getElementById('lbNavDisplay').style.display = 'none'; - } - this.doc.getElementById('lbClose').style.display = ''; - this.doc.getElementById('lbDetails').style.display = ''; - this.doc.getElementById('lbPause').style.display = 'none'; - this.doc.getElementById('lbPlay').style.display = 'none'; - } - this.doc.getElementById('lbImageContainer').style.display = (this.isLyteframe ? 'none' : ''); - this.doc.getElementById('lbIframeContainer').style.display = (this.isLyteframe ? '' : 'none'); - try { - this.doc.getElementById('lbIframe').src = this.frameArray[this.activeFrame][0]; - } catch(e) { } - } else { - this.showContentTimerArray[this.showContentTimerCount++] = setTimeout("myLytebox.showContent()", 200); - } -}; -LyteBox.prototype.updateDetails = function() { - var object = this.doc.getElementById('lbCaption'); - var sTitle = (this.isSlideshow ? this.slideArray[this.activeSlide][1] : (this.isLyteframe ? this.frameArray[this.activeFrame][1] : this.imageArray[this.activeImage][1])); - object.style.display = ''; - object.innerHTML = (sTitle == null ? '' : sTitle); - this.updateNav(); - this.doc.getElementById('lbDetailsContainer').style.display = ''; - object = this.doc.getElementById('lbNumberDisplay'); - if (this.isSlideshow && this.slideArray.length > 1) { - object.style.display = ''; - object.innerHTML = "Image " + eval(this.activeSlide + 1) + " of " + this.slideArray.length; - this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 && this.showNavigation ? '' : 'none'); - } else if (this.imageArray.length > 1 && !this.isLyteframe) { - object.style.display = ''; - object.innerHTML = "Image " + eval(this.activeImage + 1) + " of " + this.imageArray.length; - this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 ? '' : 'none'); - } else if (this.frameArray.length > 1 && this.isLyteframe) { - object.style.display = ''; - object.innerHTML = "Page " + eval(this.activeFrame + 1) + " of " + this.frameArray.length; - this.doc.getElementById('lbNavDisplay').style.display = ''; - } else { - this.doc.getElementById('lbNavDisplay').style.display = 'none'; - } - this.appear('lbDetailsContainer', (this.doAnimations ? 0 : 100)); -}; -LyteBox.prototype.updateNav = function() { - if (this.isSlideshow) { - if (this.activeSlide != 0) { - var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev')); - object.style.display = ''; - object.onclick = function() { - if (myLytebox.pauseOnPrevClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); } - myLytebox.changeContent(myLytebox.activeSlide - 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; } - } - if (this.activeSlide != (this.slideArray.length - 1)) { - var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext')); - object.style.display = ''; - object.onclick = function() { - if (myLytebox.pauseOnNextClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); } - myLytebox.changeContent(myLytebox.activeSlide + 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; } - } - } else if (this.isLyteframe) { - if(this.activeFrame != 0) { - var object = this.doc.getElementById('lbPrev2'); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeFrame - 1); return false; - } - } else { - this.doc.getElementById('lbPrev2_Off').style.display = ''; - } - if(this.activeFrame != (this.frameArray.length - 1)) { - var object = this.doc.getElementById('lbNext2'); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeFrame + 1); return false; - } - } else { - this.doc.getElementById('lbNext2_Off').style.display = ''; - } - } else { - if(this.activeImage != 0) { - var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev')); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeImage - 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; } - } - if(this.activeImage != (this.imageArray.length - 1)) { - var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext')); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeImage + 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; } - } - } - this.enableKeyboardNav(); -}; -LyteBox.prototype.enableKeyboardNav = function() { document.onkeydown = this.keyboardAction; }; -LyteBox.prototype.disableKeyboardNav = function() { document.onkeydown = ''; }; -LyteBox.prototype.keyboardAction = function(e) { - var keycode = key = escape = null; - keycode = (e == null) ? event.keyCode : e.which; - key = String.fromCharCode(keycode).toLowerCase(); - escape = (e == null) ? 27 : e.DOM_VK_ESCAPE; - if ((key == 'x') || (key == 'c') || (keycode == escape)) { - myLytebox.end(); - } else if ((key == 'p') || (keycode == 37)) { - if (myLytebox.isSlideshow) { - if(myLytebox.activeSlide != 0) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeSlide - 1); - } - } else if (myLytebox.isLyteframe) { - if(myLytebox.activeFrame != 0) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeFrame - 1); - } - } else { - if(myLytebox.activeImage != 0) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeImage - 1); - } - } - } else if ((key == 'n') || (keycode == 39)) { - if (myLytebox.isSlideshow) { - if(myLytebox.activeSlide != (myLytebox.slideArray.length - 1)) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeSlide + 1); - } - } else if (myLytebox.isLyteframe) { - if(myLytebox.activeFrame != (myLytebox.frameArray.length - 1)) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeFrame + 1); - } - } else { - if(myLytebox.activeImage != (myLytebox.imageArray.length - 1)) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeImage + 1); - } - } - } -}; -LyteBox.prototype.preloadNeighborImages = function() { - if (this.isSlideshow) { - if ((this.slideArray.length - 1) > this.activeSlide) { - preloadNextImage = new Image(); - preloadNextImage.src = this.slideArray[this.activeSlide + 1][0]; - } - if(this.activeSlide > 0) { - preloadPrevImage = new Image(); - preloadPrevImage.src = this.slideArray[this.activeSlide - 1][0]; - } - } else { - if ((this.imageArray.length - 1) > this.activeImage) { - preloadNextImage = new Image(); - preloadNextImage.src = this.imageArray[this.activeImage + 1][0]; - } - if(this.activeImage > 0) { - preloadPrevImage = new Image(); - preloadPrevImage.src = this.imageArray[this.activeImage - 1][0]; - } - } -}; -LyteBox.prototype.togglePlayPause = function(hideID, showID) { - if (this.isSlideshow && hideID == "lbPause") { - for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } - } - this.doc.getElementById(hideID).style.display = 'none'; - this.doc.getElementById(showID).style.display = ''; - if (hideID == "lbPlay") { - this.isPaused = false; - if (this.activeSlide == (this.slideArray.length - 1)) { - this.end(); - } else { - this.changeContent(this.activeSlide + 1); - } - } else { - this.isPaused = true; - } -}; -LyteBox.prototype.end = function(caller) { - var closeClick = (caller == 'slideshow' ? false : true); - if (this.isSlideshow && this.isPaused && !closeClick) { return; } - this.disableKeyboardNav(); - this.doc.getElementById('lbMain').style.display = 'none'; - this.fade('lbOverlay', (this.doAnimations ? this.maxOpacity : 0)); - this.toggleSelects('visible'); - if (this.hideFlash) { this.toggleFlash('visible'); } - if (this.isSlideshow) { - for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } - } - if (this.isLyteframe) { - this.initialize(); - } -}; -LyteBox.prototype.checkFrame = function() { - if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) { - this.isFrame = true; - this.lytebox = "window.parent." + window.name + ".myLytebox"; - this.doc = parent.document; - } else { - this.isFrame = false; - this.lytebox = "myLytebox"; - this.doc = document; - } -}; -LyteBox.prototype.getPixelRate = function(cur, img) { - var diff = (img > cur) ? img - cur : cur - img; - if (diff >= 0 && diff <= 100) { return 10; } - if (diff > 100 && diff <= 200) { return 15; } - if (diff > 200 && diff <= 300) { return 20; } - if (diff > 300 && diff <= 400) { return 25; } - if (diff > 400 && diff <= 500) { return 30; } - if (diff > 500 && diff <= 600) { return 35; } - if (diff > 600 && diff <= 700) { return 40; } - if (diff > 700) { return 45; } -}; -LyteBox.prototype.appear = function(id, opacity) { - var object = this.doc.getElementById(id).style; - object.opacity = (opacity / 100); - object.MozOpacity = (opacity / 100); - object.KhtmlOpacity = (opacity / 100); - object.filter = "alpha(opacity=" + (opacity + 10) + ")"; - if (opacity == 100 && (id == 'lbImage' || id == 'lbIframe')) { - try { object.removeAttribute("filter"); } catch(e) {} /* Fix added for IE Alpha Opacity Filter bug. */ - this.updateDetails(); - } else if (opacity >= this.maxOpacity && id == 'lbOverlay') { - for (var i = 0; i < this.overlayTimerCount; i++) { window.clearTimeout(this.overlayTimerArray[i]); } - return; - } else if (opacity >= 100 && id == 'lbDetailsContainer') { - try { object.removeAttribute("filter"); } catch(e) {} /* Fix added for IE Alpha Opacity Filter bug. */ - for (var i = 0; i < this.imageTimerCount; i++) { window.clearTimeout(this.imageTimerArray[i]); } - this.doc.getElementById('lbOverlay').style.height = this.getPageSize()[1] + "px"; - } else { - if (id == 'lbOverlay') { - this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+20) + ")", 1); - } else { - this.imageTimerArray[this.imageTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+10) + ")", 1); - } - } -}; -LyteBox.prototype.fade = function(id, opacity) { - var object = this.doc.getElementById(id).style; - object.opacity = (opacity / 100); - object.MozOpacity = (opacity / 100); - object.KhtmlOpacity = (opacity / 100); - object.filter = "alpha(opacity=" + opacity + ")"; - if (opacity <= 0) { - try { - object.display = 'none'; - } catch(err) { } - } else if (id == 'lbOverlay') { - this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-20) + ")", 1); - } else { - this.timerIDArray[this.timerIDCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-10) + ")", 1); - } -}; -LyteBox.prototype.resizeW = function(id, curW, maxW, pixelrate, speed) { - if (!this.hDone) { - this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + curW + ", " + maxW + ", " + pixelrate + ")", 100); - return; - } - var object = this.doc.getElementById(id); - var timer = speed ? speed : (this.resizeDuration/2); - var newW = (this.doAnimations ? curW : maxW); - object.style.width = (newW) + "px"; - if (newW < maxW) { - newW += (newW + pixelrate >= maxW) ? (maxW - newW) : pixelrate; - } else if (newW > maxW) { - newW -= (newW - pixelrate <= maxW) ? (newW - maxW) : pixelrate; - } - this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + newW + ", " + maxW + ", " + pixelrate + ", " + (timer+0.02) + ")", timer+0.02); - if (parseInt(object.style.width) == maxW) { - this.wDone = true; - for (var i = 0; i < this.resizeWTimerCount; i++) { window.clearTimeout(this.resizeWTimerArray[i]); } - } -}; -LyteBox.prototype.resizeH = function(id, curH, maxH, pixelrate, speed) { - var timer = speed ? speed : (this.resizeDuration/2); - var object = this.doc.getElementById(id); - var newH = (this.doAnimations ? curH : maxH); - object.style.height = (newH) + "px"; - if (newH < maxH) { - newH += (newH + pixelrate >= maxH) ? (maxH - newH) : pixelrate; - } else if (newH > maxH) { - newH -= (newH - pixelrate <= maxH) ? (newH - maxH) : pixelrate; - } - this.resizeHTimerArray[this.resizeHTimerCount++] = setTimeout("myLytebox.resizeH('" + id + "', " + newH + ", " + maxH + ", " + pixelrate + ", " + (timer+.02) + ")", timer+.02); - if (parseInt(object.style.height) == maxH) { - this.hDone = true; - for (var i = 0; i < this.resizeHTimerCount; i++) { window.clearTimeout(this.resizeHTimerArray[i]); } - } -}; -LyteBox.prototype.getPageScroll = function() { - if (self.pageYOffset) { - return this.isFrame ? parent.pageYOffset : self.pageYOffset; - } else if (this.doc.documentElement && this.doc.documentElement.scrollTop){ - return this.doc.documentElement.scrollTop; - } else if (document.body) { - return this.doc.body.scrollTop; - } -}; -LyteBox.prototype.getPageSize = function() { - var xScroll, yScroll, windowWidth, windowHeight; - if (window.innerHeight && window.scrollMaxY) { - xScroll = this.doc.scrollWidth; - yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY); - } else if (this.doc.body.scrollHeight > this.doc.body.offsetHeight){ - xScroll = this.doc.body.scrollWidth; - yScroll = this.doc.body.scrollHeight; - } else { - xScroll = this.doc.getElementsByTagName("html").item(0).offsetWidth; - yScroll = this.doc.getElementsByTagName("html").item(0).offsetHeight; - xScroll = (xScroll < this.doc.body.offsetWidth) ? this.doc.body.offsetWidth : xScroll; - yScroll = (yScroll < this.doc.body.offsetHeight) ? this.doc.body.offsetHeight : yScroll; - } - if (self.innerHeight) { - windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth; - windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight; - } else if (document.documentElement && document.documentElement.clientHeight) { - windowWidth = this.doc.documentElement.clientWidth; - windowHeight = this.doc.documentElement.clientHeight; - } else if (document.body) { - windowWidth = this.doc.getElementsByTagName("html").item(0).clientWidth; - windowHeight = this.doc.getElementsByTagName("html").item(0).clientHeight; - windowWidth = (windowWidth == 0) ? this.doc.body.clientWidth : windowWidth; - windowHeight = (windowHeight == 0) ? this.doc.body.clientHeight : windowHeight; - } - var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll; - var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll; - return new Array(pageWidth, pageHeight, windowWidth, windowHeight); -}; -LyteBox.prototype.toggleFlash = function(state) { - var objects = this.doc.getElementsByTagName("object"); - for (var i = 0; i < objects.length; i++) { - objects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - var embeds = this.doc.getElementsByTagName("embed"); - for (var i = 0; i < embeds.length; i++) { - embeds[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - if (this.isFrame) { - for (var i = 0; i < parent.frames.length; i++) { - try { - objects = parent.frames[i].window.document.getElementsByTagName("object"); - for (var j = 0; j < objects.length; j++) { - objects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - } catch(e) { } - try { - embeds = parent.frames[i].window.document.getElementsByTagName("embed"); - for (var j = 0; j < embeds.length; j++) { - embeds[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - } catch(e) { } - } - } -}; -LyteBox.prototype.toggleSelects = function(state) { - var selects = this.doc.getElementsByTagName("select"); - for (var i = 0; i < selects.length; i++ ) { - selects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - if (this.isFrame) { - for (var i = 0; i < parent.frames.length; i++) { - try { - selects = parent.frames[i].window.document.getElementsByTagName("select"); - for (var j = 0; j < selects.length; j++) { - selects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - } catch(e) { } - } - } -}; -LyteBox.prototype.pause = function(numberMillis) { - var now = new Date(); - var exitTime = now.getTime() + numberMillis; - while (true) { - now = new Date(); - if (now.getTime() > exitTime) { return; } - } -}; -if (window.addEventListener) { - window.addEventListener("load",initLytebox,false); -} else if (window.attachEvent) { - window.attachEvent("onload",initLytebox); -} else { - window.onload = function() {initLytebox();} -} -function initLytebox() { myLytebox = new LyteBox(); } \ No newline at end of file diff --git a/web_client/src/gr/grnet/pithos/web/public/pithos.css b/web_client/src/gr/grnet/pithos/web/public/pithos.css deleted file mode 100644 index 7b7e057..0000000 --- a/web_client/src/gr/grnet/pithos/web/public/pithos.css +++ /dev/null @@ -1,514 +0,0 @@ -body { - color: black; - font-family: Verdana, 'PT Sans', sans-serif; - font-size: 16px; - margin: 8px; - margin-top: 3px; - background-color: transparent; -} - -table td { - font-family: Verdana, 'PT Sans', sans-serif; -} - -.pithos-outer { - background: url(images/background.png) repeat-x; -} - -a { - color: white; - text-decoration: none; -} - -a:hover { - color: white; -} - -a:visited { - color: white; -} - -a.info { - position: relative; /*this is the key*/ - z-index: 24; - color: black; - text-decoration: none -} - -a.info:hover { - z-index: 25; - background-color: yellow; -} - -a.info div { - display: none -} - -a.info:hover span { - cursor: pointer; -} - -/* The span will only display on :hover state. */ -a.info:hover div { - display: block; - position: absolute; - bottom: 2em; - right: 1em; - width: 10em; - border: 1px solid lightblue; - background-color: #D0E4F6; - color: black; - text-align: center -} - -.pithos-DialogBox .inner form { - margin: 0px; -} - -.pithos-dialogbox .inner form input, -.pithos-dialogbox .inner form textarea -{ - border: 1px solid #aaa; - padding:4px; -} - -.pithos-DialogBox .button { - background: none; - background-color: #4085A5; - color: white; - padding: 5px 6px; - white-space: nowrap; - -} - -.pithos-DialogBox .Caption { - color: white; - background-color: #4085a5; - padding: 20px; - border-bottom: 1px solid white; -} - -.pithos-DialogBox .close { - background: url(images/close-popup.png) no-repeat; - cursor: pointer; - position: absolute; - width: 13px; - height: 13px; - top: 12px; - right: 7px; -} - -.pithos-DialogBox .dialogMiddleCenter { - background: url(images/popup-bg.png) repeat-x; - background-color: white; - padding: 3px; -} - -.pithos-DialogBox .dialogBottomCenter { - border-bottom: 5px solid #4085A5; -} - -.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft { - background-position: 0px -55px; -} -.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight { - background-position: -6px -55px; -} -.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter { - background: #D0E4F6; -} -.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft, -.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter, -.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight { - background: #D0E4F6; - color:#d45500; -} -.pithos-TabPanelBottom { - border: none; -} - -table.pithos-permList { - border-spacing: 3px; - border-collapse: collapse; - -} - -table.pithos-permList td { - padding: 5px 5px 5px 5px; - font-size:80%; -} - -table.pithos-permList.props-labels { - font-weight: bold; -} - -.props-labels { - font-size: 80%; - font-weight: bold; -} - -.props-toplabels { - font-size: 80%; - font-weight: bold; - font-style: italic; -} - -.props-values { - font-size: 80%; -} - -.hidden-link { - text-decoration: none !important; - color: black !important; -} - -.hidden-link:visited { - text-decoration: none !important; - color: black !important; -} - -.pithos-topPanel { - background-color: #4085a5; - font-size: 75%; - height: 59px; - border-bottom: 1px solid white; -} - -.pithos-usernameMenu { - cursor: pointer; -} - -.pithos-usernameMenuItem { - background: url(images/down-arrow-light.png) no-repeat scroll right 8px transparent; - padding-right: 13px; - cursor: pointer; - color: white; -} - -.pithos-usernameMenuItem:HOVER { - background: url(images/down-arrow-lighter.png) no-repeat scroll right 8px transparent; - background-color: #599EBD; -} - -.pithos-usernameMenuItem:ACTIVE { - background: url(images/down-arrow-lighter.png) no-repeat scroll right 8px transparent; - background-color: #BED5E0; -} - -.pithos-langMenuItem { - cursor: pointer; - color: #72ADC8; -} - -.gwt-MenuBar-vertical { - background: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupTopLeft { - background: none; - background-color: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupTopCenter { - background: none; - background-color: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupTopRight { - background: none; - background-color: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupMiddleLeft { - background: none; - background-color: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupMiddleRight { - background: none; - background-color: #D0E3ED; -} - -.pithos-userItemMenu { - background-color: #D0E3ED; -} - -.gwt-popuppanel { - border: 3px solid #D0E3ED; - padding: 3px; - background: #D0E3ED; - border-image: initial; -} - -.gwt-MenuBar .gwt-MenuItem { - border-bottom: 1px solid #EFEFEF; -} - -.gwt-MenuBar .gwt-MenuItem-selected { - background-color: #E1EFF6; -} - -.gwt-MenuBarPopup .menuPopupBottomLeft { - background: none; - background-color: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupBottomCenter { - background: none; - background-color: #D0E3ED; -} - -.gwt-MenuBarPopup .menuPopupBottomRight { - background: none; - background-color: #D0E3ED; -} - -.pithos-sessionExpired { - width: 24em; - /* Restore the padding we remove when overriding the gwt-DialogBox style */ - padding: 3px; -} - -.pithos-statusbar { - background-color: #4085a5; - border: none; - font-size: 90%; - vertical-align: middle; - font-weight: normal; - height:119px; - color: white; -} - -.pithos-FileListContainer { - padding-left: 10px; -} - -.pithos-List { - cursor: default; - border-collapse: collapse; - /* prevents selecting text in table with shift and ctrl*/ - -moz-user-select: none; -} - -.pithos-errorMessage { - font-size: 90%; - background-color: #880000; - color: #fff; - cursor: pointer; -} - -.pithos-errorMessage td { - font-size: 90%; -} - -.pithos-warnMessage { - font-size: 90%; - background-color: #eeee99; - cursor: pointer; -} - -.pithos-infoMessage { - font-size: 90%; - background-color: #ccffcc; - cursor: pointer; -} - -.pithos-clearMessage { - font-size: 90%; - font-weight: bold; - text-decoration: none; - color: black; -} - -.pithos-clearMessage:visited { - font-size: 90%; - font-weight: bold; - text-decoration: none; - color: black; -} - -.pithos-readForAllNote { - width: 240px; - text-align: justify; - font-style: italic; - font-size: 12px; - padding-left: 4; -} - -.pithos-treeHeader { - background-color: #74aec9; - height: 25px; - width: 100%; -} - -.pithos-statistics { - color: white; - padding: 5px; -} - -.pithos-splitPanel { - background: url(images/white50.png) transparent; - margin-bottom: 34px; -} - -.pithos-splitPanel-noframe { - margin-bottom: 0; -} - -/* Use the background color for the splitter. */ -.gwt-HorizontalSplitPanel .hsplitter { - cursor: move; - border: 0px; - background: url(images/background.png) repeat-x; -} - -.pithos-tag { - display:inline; -} - -.pithos-uploadButton { - background: none; - background-color: #ff7f2a; - font-size: 120%; - text-align: center; - height: auto; - padding: 8px; - width: 146px; - border: none; -} - -.pithos-uploadButton:HOVER { - background-color: #f95; -} - -.pithos-rightSide { - vertical-align: middle; - width: 100%; - padding-left: 7px; -} -.pithos-parentButton { - background: none; - background-color: #a1c8da; -} - -.pithos-folderStatistics { - background-color: #a1c8da; - text-align: center; - color: white; - height: 32px; - padding: 5px 15px; - margin-right: 10px; -} - -.grnet-sign { - color: #72ADC8; -} - -.pithos-logo { - position: absolute; - top: 25; -} - -.pithos-header { - background: url(images/white50.png); - margin-top: 34; - height: 60px; -} - -.pithos-header-noframe { - margin-top: 0; -} - -/*.cellTreeWidget-selectedTree { - background-color: #BCD7E3; -}*/ - -.pithos-list thead th img { - top: 5px !important; -} - -.effectPanel-inner { - background-color: #4085A5; - margin: 10px; -} - -.pithos-toolsButton { - background-color: #FF7F2A !important; - background-position: 9px 7px !important; -} - -.pithos-toolsButton:hover { - background-color: #F95 !important; -} - -/*move background from inner to centerinner to wrap action buttons too*/ -.dialogMiddleCenterInner.dialogContent { - background: url(https://pithos.dev.grnet.gr/ui/images/white50.png); - margin: 7px; - padding: 15px; - /*border: 1px solid #aaa;*/ - -moz-box-shadow: 0 0 1px 1px #888; - -webkit-box-shadow: 0 0 1px 1px #888; - box-shadow: 0 0 1px 1px #888; -} - -/*remove background/padding from .inner*/ -.pithos-dialogbox .inner { - background: none; - padding:0; - width: auto !important; -} - -/*button styles*/ -.pithos-dalogbox .button { -} - -/*button position within the overlay content*/ -.dialogMiddleCenterInner .button { - margin-left: 2px; - border: none; - padding: 7px 20px; - margin-top: 10px; - float: right; - margin-right: 4px; -} - -/* fix placement of overlay paragraphs */ -.pithos-credentialstext { - padding: 0 0 10px 0; -} - -/* overlay styles */ -.pithos-dialogbox { - background-color: white; - border: 2px solid #444; - text-align: left; - -moz-box-shadow: 0 0 90px 5px #000; - -webkit-box-shadow: 0 0 90px 5px #000; - box-shadow: 0 0 90px 5px #000; -} - -/* hide overlay dialogue unneeded side elements */ -.dialogMiddleRight, .dialogBottomRight, .dialogTopRight, -.dialogMiddleLeft, .dialogBottomLeft, .dialogTopLeft, -.dialogBottomCenter { - display: none; -} - -/* fix dialogbox caption padding and font-size */ -.pithos-dialogbox .caption { - padding: 10px !important; - font-size: 1.1em; -} - - -/* form input styling */ -.dialogMiddleCenterInner input { - border: 1px solid #aaa; - padding: 4px; -} - -/* fix tag color */ -a.pithos-tag { - color: #4085a5; -} \ No newline at end of file diff --git a/web_client/src/gr/grnet/pithos/web/public/suggest/corner.png b/web_client/src/gr/grnet/pithos/web/public/suggest/corner.png deleted file mode 100644 index 51aa4582aa3bd35c0178c337f83bf75e6b9024cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmV-)1dIELP)1^@s6g3A^000006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru*aQy_83lf>^63Bo1OZ7z zK~z}7?U-LkTUQ*%KQ{@%rp3AFVzOB>N!AdZOd49-N|hEfRv*mEUYzVP%%{EXvA8#1 z_f+QNuzMH`?qDr)9mNb?rzm2G(#`BUI`U>KmY#qqk2 zfZP^MuTMqu10xv?P2UMnfOf#6>*Enn9}w0*%pxMmhv;=17}{K%Af1KuQ81%#faqcE zzz?!4NA;ixr4<2qzBIw}r3rwK3qbU+i-2F2<)Pdtbe93j_cWK$=Zt_M%ks7bWAaq! zdCwxUtCXfODT_$qQj)6y8V5#-ct(WBlx%<|9=2L+!B!(80AB28+tiHa6xS?jMsvQ{ z&$i`vcy<1!;fSQvp*G%l)-tHSVYf=njc28ssYC7k`Z{SS7gaiIFrsIB+0ptsX|Rx? zzD^o^wwE0RE^oVUkj@wzMax@fq);i7@Oy z8Be!-D4lC;cIA>o&1i|eRO*l2wOOBd3oigq07KE)Vo8<$tDpRwn7RM%?&G*0&?m58 z92bCHU|$@KW!=5y1NyJs8cWRFj~4K)iens@HC5~GEg#T+?beuhsJ<p-viElyZ|Kd7absSQs#3kn)kZ_F;jAlH3b5eanOe>JWUEa?CpL7api_`(**4}C zsiUKVcs#Du7Szzo#$)gvRp{D*0Q%b;Bxa5)bZtOEbxvDf1c$>>)VN~5bX-)u@U5YU z`uh5cnkFYFt21=v$h$M8JNpk8)rwyey4U(?3Hra)x@xVHlAv%nEQ#HXTxOj}dM}(5 zXtm~`NF;)yC^vvBK&!aC4m=Ep!=HUKwS(!Rswm1B5CB5H4+0LC%MHNR)@Ez+&qvLQ zqQp?=9UVj7oI;`nV@b8U$7lcC@X*DQ z>emGz`M{v?8lI!pGP5ZJw0_y!U>Fpvz#lZbj>?tcb@UGgBT0GyAom*p0000YhW{YAVDIwDKoQOY zkH}&M25w;xW@MN(M*=9wUgGKN%6@}YhF{;{KEI470|U!fPZ!6Kid%1Q9L!`k6k!Q? zyUy?3|0!XQ#Dszz3|KBX9MDmT_@$Z5Q+2yRZt=zGZ{9xsy+-WMH?e;};~q8q`}(b_ zmnkayedd95k%FBuag!R>u8MK%KHvEI>nzqe&oc#d?K<8)pYJ%uw(aKZ1zY9f?CYh! z&AQ3+YmG%h8>2Gsij7rFnFnUP)SdB?<=89EGbK#QcAS@^1Cqa<*7zg$Q48e95dkv( zmhIM^cVOS!!~+xA-XtC8Qf7q|cGwi+f;y+$Fehr%TX#9EX);*Wb}@M%00-ou{L$lmF>qNQ$z#zM~>zr=pb z7Z|SLv*7=?H4FQ>)IZEfJTPNx1yg?sQ}UX54SW`D{et(Iju(79ePS}taP>S1{!-w( zv1-+%22is3@XLR~ffzeR*$#DsQU~@Dh4~FaS_}Df<{hxtZRME1bo(qTkinj=elF{r G5}E+scDM)t diff --git a/web_client/src/gr/grnet/pithos/web/public/suggest/ie6/corner_dialog_topleft.png b/web_client/src/gr/grnet/pithos/web/public/suggest/ie6/corner_dialog_topleft.png deleted file mode 100644 index e1da98ee6bee03a5b3b4b752fff093f3f55049e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^tU&C{!3HEl^3G2IQfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#1`9vGCb#>fW-XvlfTxRNh{fr*rw;NuIEXkL+^8Mc zw8D|m>cVWkFN;`1R~$N8G%07xgZ+=6nEozoGMg$Y{OjAUmqj-Xk{Yf&-E@V4vzS-^ ko88j)Ul$z!0{chIhqAfrfAmW{2Aa*_>FVdQ&MBb@0Q(R`g8%>k diff --git a/web_client/src/gr/grnet/pithos/web/public/suggest/ie6/corner_dialog_topright.png b/web_client/src/gr/grnet/pithos/web/public/suggest/ie6/corner_dialog_topright.png deleted file mode 100644 index a786ccc12eb32e00bf90d7eb942cacc35bcc202a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^96;>M!3HE3PH<5HQfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#1`9vGhGMHx^wx9-T^_S^E?i)>@Z7~H^JDFOfl2ocGJH(#7rSBm@<1aqJD-fjkNOQv YzjlZ{E-#*>4|D*7r>mdKI;Vst05#ZASO5S3 diff --git a/web_client/src/gr/grnet/pithos/web/public/suggest/ie6/hborder_blue_shadow.png b/web_client/src/gr/grnet/pithos/web/public/suggest/ie6/hborder_blue_shadow.png deleted file mode 100644 index 7b52b8e43e2b748aaaa09c583db5b77f1757da11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr6!3HEPq^3FoDYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oVGw3ym^DWND9B#o>FdgVgN2`8Mf{oVLJgphvZsq<2*>s09Uq?Du2*9Nf|5rM nZ{Dq*At51g&d|`n;0`0h_Ck*KwxH0HK;;acu6{1-oD!MFdgVgHc{g+GKjyt}>vInx~6n2*-8bBZh(u3Op{XE)7O>#1`9vGiroB%l085nSx*{XE)7O>#2BW-~H1COiqdK6FqNj^v2*>s0KmY&#uV+))kbYjS nE&u+$w}}Y}7RL`9C}3we#=%|XpVhb%sF=ai)z4*}Q$iB}JFF^) diff --git a/web_client/src/gr/grnet/pithos/web/public/suggest/vborder.png b/web_client/src/gr/grnet/pithos/web/public/suggest/vborder.png deleted file mode 100644 index 435b816c3aab92b9679fbe5c90c2af5997d8d6f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^qCl*`!3HG%E->x@Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#2CEFe0o&d8?S4QZZ%-G;5Rc=@dp|3k*F{R#`7rEL_~yhr|%#VP)7F WEVyG