summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LICENSE.txt28
-rw-r--r--idrop-lite/release_notes.txt15
-rw-r--r--idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java2
-rw-r--r--idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.form136
-rw-r--r--idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.java641
-rw-r--r--idrop-lite/src/main/resources/org/irods/jargon/idrop/lite/Bundle.properties6
-rw-r--r--idrop-swing/pom.xml36
-rw-r--r--idrop-swing/release_notes.txt18
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.form14
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java42
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.form174
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.java1
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java4
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java2
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/IdropConfig.java11
-rw-r--r--idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java2
-rw-r--r--idrop-swing/src/main/resources/idrop.properties6
-rw-r--r--idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties2
-rw-r--r--idrop-web-selenium/login_and_basic_name127
-rw-r--r--idrop-web/COPYING1
-rwxr-xr-x[-rw-r--r--]idrop-web/LICENSE.txt28
-rw-r--r--idrop-web/README19
-rwxr-xr-x[-rw-r--r--]idrop-web/README.txt0
-rw-r--r--idrop-web/application.properties10
-rw-r--r--idrop-web/build.sh217
-rwxr-xr-x[-rw-r--r--]idrop-web/designnotes.txt5
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/BootStrap.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/BuildConfig.groovy14
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/Config.groovy15
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/DataSource.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/SecurityFilters.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/UrlMappings.groovy2
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/spring/resources.groovy10
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/spring/resources.xml2
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/conf/testing.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/AuditController.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/BrowseController.groovy424
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/FileController.groovy69
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/HomeController.groovy112
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/IdropLiteController.groovy20
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/ImageController.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/LoginController.groovy90
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy4
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/ProfileController.groovy172
-rw-r--r--idrop-web/grails-app/controllers/org/irods/mydrop/controller/QuickUploadController.groovy97
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/SearchController.groovy5
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/SharingController.groovy183
-rwxr-xr-xidrop-web/grails-app/controllers/org/irods/mydrop/controller/ShoppingCartController.groovy137
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/TagsController.groovy8
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketAccessController.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketController.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/controllers/org/irods/mydrop/controller/UserController.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages.properties88
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_da.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_de.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_es.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_fr.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_it.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_ja.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_nl.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_pt_BR.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_pt_PT.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_ru.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_th.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/i18n/messages_zh_CN.properties0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/services/org/irods/mydrop/service/I18NMessagingService.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/services/org/irods/mydrop/service/ProfileService.groovy0
-rw-r--r--idrop-web/grails-app/services/org/irods/mydrop/service/SharingService.groovy180
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/services/org/irods/mydrop/service/ShoppingCartSessionService.groovy11
-rw-r--r--idrop-web/grails-app/services/org/irods/mydrop/service/StarringService.groovy66
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/services/org/irods/mydrop/service/ThumbnailGeneratorService.groovy0
-rw-r--r--idrop-web/grails-app/services/org/irods/mydrop/service/ViewStateService.groovy84
-rw-r--r--idrop-web/grails-app/taglib/idrop/web2/AuthUserTagTagLib.groovy13
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/taglib/org/irods/mydrop/taglib/AuthTagLib.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/taglib/org/irods/mydrop/taglib/ImageTagLib.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/audit/auditDetails.gsp14
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/audit/auditInfo.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/audit/auditNoAccess.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/audit/auditTable.gsp0
-rwxr-xr-xidrop-web/grails-app/views/browse/_browseDetailsToolbar.gsp10
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/_browseTabContent.gsp26
-rwxr-xr-xidrop-web/grails-app/views/browse/_collectionInfoToolbar.gsp193
-rwxr-xr-xidrop-web/grails-app/views/browse/_dataObjectInfoToolbar.gsp135
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/browseDetails.gsp76
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/collectionInfo.gsp149
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/collectionInfoMini.gsp12
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/dataObjectInfo.gsp146
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/dataObjectInfoMini.gsp55
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/galleryView.gsp1
-rwxr-xr-xidrop-web/grails-app/views/browse/index.gsp49
-rw-r--r--idrop-web/grails-app/views/browse/listCart.gsp34
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/loginInfo.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/newFolderDialog.gsp51
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/noInfo.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/publicLinkDialog.gsp38
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/browse/renameDialog.gsp42
-rwxr-xr-xidrop-web/grails-app/views/browse/starDialog.gsp40
-rwxr-xr-xidrop-web/grails-app/views/common/_browseLegend.gsp11
-rwxr-xr-xidrop-web/grails-app/views/common/_cssAndJs.gsp41
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/common/_footer.gsp7
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/common/_messages.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/common/_secondarymain.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/common/_topToolbar.gsp213
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/common/_topbar.gsp125
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/error.gsp2
-rwxr-xr-xidrop-web/grails-app/views/file/deleteResult.gsp1
-rwxr-xr-xidrop-web/grails-app/views/file/quickUploadDialog.gsp45
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/file/uploadDialog.gsp56
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/home/index.gsp187
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/home/link.gsp0
-rwxr-xr-xidrop-web/grails-app/views/home/noInfo.gsp3
-rw-r--r--idrop-web/grails-app/views/home/quickViewList.gsp46
-rw-r--r--idrop-web/grails-app/views/home/shareQuickViewList.gsp45
-rw-r--r--idrop-web/grails-app/views/home/shareWithMeQuickViewList.gsp48
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/idropLite/appletLoader.gsp4
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/layouts/basic.gsp72
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/layouts/main.gsp95
-rwxr-xr-xidrop-web/grails-app/views/layouts/mainNoSidebar.gsp54
-rw-r--r--idrop-web/grails-app/views/login/defaultStorageResource.gsp50
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/login/login.gsp0
-rwxr-xr-xidrop-web/grails-app/views/login/passwordChange.gsp45
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/metadata/metadataDetails.gsp52
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/metadata/metadataDialog.gsp13
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/metadata/metadataTable.gsp0
-rw-r--r--idrop-web/grails-app/views/profile/_profileTabContent.gsp19
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/profile/_profileToolbar.gsp0
-rw-r--r--idrop-web/grails-app/views/profile/changePasswordDialog.gsp37
-rwxr-xr-xidrop-web/grails-app/views/profile/index.gsp185
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/profile/noProfileData.gsp0
-rw-r--r--idrop-web/grails-app/views/profile/profileData.gsp28
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/search/searchResult.gsp86
-rw-r--r--idrop-web/grails-app/views/sharing/_sharingPanel.gsp41
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/sharing/aclDetails.gsp40
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/sharing/aclDialog.gsp20
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/sharing/aclTable.gsp0
-rwxr-xr-xidrop-web/grails-app/views/sharing/addShareDialog.gsp40
-rw-r--r--idrop-web/grails-app/views/sharing/sharingPanelWrapper.gsp3
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/sharing/userPanel.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/shoppingCart/cartDetails.gsp (renamed from idrop-web/grails-app/views/browse/cartDetails.gsp)0
-rwxr-xr-xidrop-web/grails-app/views/shoppingCart/index.gsp45
-rwxr-xr-xidrop-web/grails-app/views/tags/index.gsp64
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/tags/tagCloud.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/ticket/ticketDetails.gsp23
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/ticket/ticketPulldown.gsp31
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/ticket/ticketTable.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/ticketAccess/ticketAccessCollection.gsp1
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/ticketAccess/ticketAccessDataObject.gsp3
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/ticketAccess/uploadToTicketCollection.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/user/index.gsp4
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/user/userInfoDialog.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/grails-app/views/user/userList.gsp6
-rwxr-xr-x[-rw-r--r--]idrop-web/idrop-web-config2.groovy (renamed from idrop-web/idrop-web-config.groovy)9
-rw-r--r--idrop-web/idrop-web.list.template328
-rw-r--r--idrop-web/pom.xml416
-rwxr-xr-x[-rw-r--r--]idrop-web/release_notes.txt37
-rw-r--r--idrop-web/site/resources/css/site.css10
-rw-r--r--idrop-web/site/resources/eclipse.xml251
-rw-r--r--idrop-web/site/site.xml20
-rw-r--r--idrop-web/site/xdoc/build.xml9
-rw-r--r--idrop-web/site/xdoc/codeFormat.xml10
-rw-r--r--idrop-web/site/xdoc/index.xml9
-rwxr-xr-x[-rw-r--r--]idrop-web/src/groovy/org/irods/mydrop/config/ServerProperties.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/groovy/org/irods/mydrop/config/ServerPropertiesCache.groovy0
-rw-r--r--idrop-web/src/groovy/org/irods/mydrop/config/ViewState.groovy18
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/Controller.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/DomainClass.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/Filters.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/ScaffoldingController.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/Script.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/Service.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/TagLib.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/Tests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/WebTest.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/artifacts/hibernate.cfg.xml0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/Controller.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/Test.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/_form.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/create.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/edit.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/list.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/renderEditor.template0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/scaffolding/show.gsp0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/Controller.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/DomainClass.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/Filters.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/Generic.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/Service.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/TagLib.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/testing/UnitTest.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/src/templates/war/web.xml0
-rw-r--r--idrop-web/test/unit/idrop/web2/AuthUserTagTagLibTests.groovy17
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/AuditControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/BrowseControllerTests.groovy8
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/FileControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/HomeControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/IdropLiteControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/ImageControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/MetadataControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/ProfileControllerTests.groovy0
-rw-r--r--idrop-web/test/unit/org/irods/mydrop/controller/QuickUploadControllerTests.groovy17
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/SearchControllerTests.groovy6
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/SharingControllerTests.groovy0
-rwxr-xr-xidrop-web/test/unit/org/irods/mydrop/controller/ShoppingCartControllerTests.groovy19
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/TagsControllerTests.groovy10
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/TicketAccessControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/TicketControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/UserControllerTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/controller/UserTagServiceTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/service/I18NMessagingServiceTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/service/ProfileServiceTests.groovy0
-rw-r--r--idrop-web/test/unit/org/irods/mydrop/service/SharingServiceTests.groovy17
-rw-r--r--idrop-web/test/unit/org/irods/mydrop/service/StarringServiceTests.groovy17
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/service/ThumbnailServiceTests.groovy0
-rw-r--r--idrop-web/test/unit/org/irods/mydrop/service/ViewStateServiceTests.groovy17
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/taglib/AuthTagLibTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/test/unit/org/irods/mydrop/taglib/ImageTagLibTests.groovy0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/applicationContext.xml0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/sitemesh.xml0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/tld/c.tld0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/tld/fmt.tld0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/tld/grails.tld0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/tld/spring.tld0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/WEB-INF/web.xml0
-rw-r--r--idrop-web/web-app/css/base.css79
-rw-r--r--idrop-web/web-app/css/bootstrap-responsive.min.css9
-rwxr-xr-xidrop-web/web-app/css/bootstrap.css5837
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/errors.css0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/jqcloud.css22
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/jquery.gritter.css1
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/layout-default-latest.css0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/loader.gifbin4782 -> 4782 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/loaderWhite.gifbin10294 -> 10294 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/main.css1032
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/mobile.css0
-rw-r--r--idrop-web/web-app/css/nextPageArrow.gifbin79 -> 0 bytes
-rw-r--r--idrop-web/web-app/css/nextPageArrowWhite.gifbin79 -> 0 bytes
-rwxr-xr-xidrop-web/web-app/css/overcast/images/ui-bg_flat_55_c0402a_40x100.pngbin213 -> 182 bytes
-rwxr-xr-xidrop-web/web-app/css/overcast/images/ui-icons_3383bb_256x240.pngbin5355 -> 4369 bytes
-rwxr-xr-xidrop-web/web-app/css/overcast/images/ui-icons_454545_256x240.pngbin5355 -> 4369 bytes
-rwxr-xr-xidrop-web/web-app/css/overcast/images/ui-icons_fbc856_256x240.pngbin4369 -> 5355 bytes
-rwxr-xr-xidrop-web/web-app/css/overcast/jquery-ui-1.9.0.custom.css (renamed from idrop-web/web-app/css/overcast/jquery-ui-1.8.7.custom.css)524
-rwxr-xr-xidrop-web/web-app/css/overcast/jquery-ui-1.9.0.custom.min.css5
-rw-r--r--idrop-web/web-app/css/prevPageArrow.gifbin78 -> 0 bytes
-rw-r--r--idrop-web/web-app/css/prevPageArrowWhite.gifbin78 -> 0 bytes
-rw-r--r--idrop-web/web-app/css/reset-fonts-grids.css407
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_flat_55_999999_40x100.pngbin180 -> 180 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_flat_75_aaaaaa_40x100.pngbin180 -> 180 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_glass_45_0078ae_1x400.pngbin136 -> 136 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_glass_55_f8da4e_1x400.pngbin131 -> 131 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_glass_75_79c9ec_1x400.pngbin132 -> 132 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.pngbin3649 -> 3649 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.pngbin4882 -> 4882 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_gloss-wave_75_2191c0_500x100.pngbin3457 -> 3457 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.pngbin88 -> 88 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_0078ae_256x240.pngbin4369 -> 4369 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_056b93_256x240.pngbin5355 -> 5355 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_d8e7f3_256x240.pngbin4369 -> 4369 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_e0fdff_256x240.pngbin5355 -> 5355 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_f5e175_256x240.pngbin4369 -> 4369 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_f7a50d_256x240.pngbin4369 -> 4369 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/images/ui-icons_fcd113_256x240.pngbin5355 -> 5355 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/start/jquery-ui-1.8.18.custom.css0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/style.css76
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/css/superfish.css0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/Lifetime-Library.pngbin11858 -> 11858 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/Sorting icons.psdbin27490 -> 27490 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/ad_next.pngbin355 -> 355 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/ajax-loader-bar.gifbin10819 -> 10819 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/ajax-loader.gifbin2947 -> 2947 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/apple-touch-icon-retina.pngbin14986 -> 14986 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/apple-touch-icon.pngbin5434 -> 5434 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/arrow-refresh.pngbin1192 -> 1192 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/arrows-ffffff.pngbin244 -> 244 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/back_disabled.jpgbin612 -> 612 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/back_enabled.jpgbin807 -> 807 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/configure-4.pngbin1109 -> 1109 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/configure-5.pngbin1308 -> 1308 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/dialog-accept.pngbin1197 -> 1197 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/edit-4.pngbin1159 -> 1159 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/edit-copy-3.pngbin631 -> 631 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/favicon.icobin894 -> 894 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/file.pngbin1990 -> 1990 bytes
-rwxr-xr-xidrop-web/web-app/images/file_icon.pngbin0 -> 13041 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/folder.pngbin2143 -> 2143 bytes
-rwxr-xr-xidrop-web/web-app/images/folder_icon.pngbin0 -> 4130 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/forward_disabled.jpgbin635 -> 635 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/forward_enabled.jpgbin852 -> 852 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/go-home-4.pngbin932 -> 932 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/go-jump.pngbin1379 -> 1379 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/go-parent-folder.pngbin1137 -> 1137 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/grails_logo.jpgbin8065 -> 8065 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/grails_logo.pngbin10172 -> 10172 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/gritter-light.pngbin4899 -> 4899 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/gritter-long.pngbin6299 -> 6299 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/gritter.pngbin4880 -> 4880 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/help-contents.pngbin1270 -> 1270 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/iDropbin68184 -> 68184 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/iDropLogo.pngbin21715 -> 21715 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/ie-spacer.gifbin43 -> 43 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/im-user.pngbin1205 -> 1205 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/leftnav_btm.pngbin3859 -> 3859 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/leftnav_midstretch.pngbin2883 -> 2883 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/leftnav_top.pngbin3317 -> 3317 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/loader.gifbin4782 -> 4782 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/shadow.pngbin1698 -> 1698 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/database_add.pngbin658 -> 658 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/database_delete.pngbin659 -> 659 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/database_edit.pngbin767 -> 767 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/database_save.pngbin755 -> 755 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/database_table.pngbin726 -> 726 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/exclamation.pngbin701 -> 701 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/house.pngbin806 -> 806 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/information.pngbin778 -> 778 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/shadow.jpgbin300 -> 300 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/sorted_asc.gifbin835 -> 835 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/skin/sorted_desc.gifbin834 -> 834 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/sort_asc.pngbin263 -> 263 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/sort_asc_disabled.pngbin252 -> 252 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/sort_both.pngbin282 -> 282 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/sort_desc.pngbin260 -> 260 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/sort_desc_disabled.pngbin251 -> 251 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/spinner.gifbin2037 -> 2037 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/images/springsource.pngbin9109 -> 9109 bytes
-rwxr-xr-xidrop-web/web-app/images/upload.pngbin0 -> 11502 bytes
-rwxr-xr-xidrop-web/web-app/img/glyphicons-halflings-white.pngbin0 -> 8777 bytes
-rwxr-xr-xidrop-web/web-app/img/glyphicons-halflings.pngbin0 -> 12799 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/application.js0
-rwxr-xr-xidrop-web/web-app/js/bootstrap.min.js7
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/bundles/messages.properties9
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/galleria-1.2.6.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jqcloud-0.1.5.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jqcloud-0.1.6.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery-1.7.1.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery-1.7.2.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery-1.8.0.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery-ui-13.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.ba-bbq.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.blockUI.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.dataTables.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.gchart.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.gritter.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.hotkeys.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.i18n.properties-min-1.0.9.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.jeditable.mini.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.jstree.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.layout-latest.min.js0
-rw-r--r--idrop-web/web-app/js/jquery.layout.min-1.3.0.js142
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.media.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.opacityrollover.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jquery.tools.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.checkbox.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.contextmenu.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.core.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.dnd.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.hotkeys.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.html.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.json.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.sort.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.state.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.themes.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.ui.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.unique.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/jstree.xml.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/audit.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/home.js1335
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/lingo_common.js40
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/main.js138
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/metadata.js14
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/profile.js86
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/search.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/shopping_cart.js29
-rw-r--r--idrop-web/web-app/js/mydrop/tag.js92
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/ticket.js10
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/mydrop/user.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/splitter.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/superfish.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/themes/classic/classic-demo.html0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/themes/classic/classic-loader.gifbin1849 -> 1849 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/themes/classic/classic-map.pngbin1840 -> 1840 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/themes/classic/galleria.classic.css0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/themes/classic/galleria.classic.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/themes/classic/galleria.classic.min.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/js/vakata.js0
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/loader.gifbin4782 -> 4782 bytes
-rwxr-xr-x[-rw-r--r--]idrop-web/web-app/mediaplayer.swfbin34574 -> 34574 bytes
-rw-r--r--pom.xml2
-rw-r--r--release_notes.txt8
387 files changed, 13373 insertions, 4091 deletions
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..caca18c
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,28 @@
+iRODS license terms and copyright info from the irods site at: https://www.irods.org/index.php/License
+
+License
+iRODS Copyright and Licensing
+
+iRODS is open source software released under a BSD License, see license text in "iRODS License Terms and Conditions" below.
+The BSD license has been described in very general terms as allowing you to do whatever you want to with the software and
+source code as long as you acknowledge who wrote it and that, as with any open source software, there is no warranty and you're using the code "as is."
+In the spirit of collaborative open source software, the iRODS community encourages you to communicate with us, letting us know what features you like,
+features that would be useful, problems, bugs, suggestions, etc., and to perhaps contribute source code.
+The iRODS community has formed the Data Intensive Cyberinfrastructure Foundation, a 501(c)(3) nonprofit corporation established to serve
+ as the home of the iRODS open source community over the long term. If you choose to contribute new code, you'll receive full acknowledgment. All you do is complete the Contributor's Agreement, under which you retain copyright ownership
+ in your code but give a free license to the iRODS nonprofit foundation, allowing your code to be integrated into iRODS and in turn released under the BSD license.
+Note: The above text is an educational overview of iRODS open source licensing, and not intended as legal advice nor is it part of the iRODS license agreement, which is below. As always, for legal advice consult an attorney.
+
+iRODS License Terms and Conditions Notice
+
+Copyright (c) 2005-2011, Regents of the University of California, the University of North Carolina, and the Data Intensive Cyberinfrastructure Foundation
+All rights reserved.
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+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.
+Neither the name of the University of California, San Diego (UCSD) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT
+OWNER 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. \ No newline at end of file
diff --git a/idrop-lite/release_notes.txt b/idrop-lite/release_notes.txt
index 213702e..b2bf9d4 100644
--- a/idrop-lite/release_notes.txt
+++ b/idrop-lite/release_notes.txt
@@ -1,11 +1,9 @@
-
*'''Project''': iDrop-lite transfer applet
-*'''Date''': 10/23/2012
-*'''Release Version''': 1.0.2-beta1
-*'''git tag''': 1.0.2-beta1
-*'''download jar with dependencies (run java -jar jarname)''': https://code.renci.org/gf/project/irodsidrop/frs/?action=FrsReleaseBrowse&frs_package_id=4
+*'''Date''': 11/28/2012
+*'''Release Version''': 1.0.2
+*'''git tag''': 1.0.2
-NOTE: the release notes were not yet in place for this project, going forward bugs and features addressed will be reflected here
+iDrop lite is an embedded transfer applet
==News==
@@ -28,7 +26,10 @@ Note that the following bug and feature requests are logged in GForge with relat
==Features==
-[#1023] Update Version class to include build time and POM version
+*[#1023] Update Version class to include build time and POM version
+
+*[#1062] 1.0.2 release activities
+**Added default storage resource to iDrop lite panel
==Outstanding Issues==
diff --git a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java
index 5e76f48..d08df52 100644
--- a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java
+++ b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/Version.java
@@ -1,5 +1,5 @@
package org.irods.jargon.idrop.lite;
public final class Version {
public static String VERSION="2.0.0-SNAPSHOT";
- public static String BUILD_TIME="20130205-0851";
+ public static String BUILD_TIME="20130207-1818";
}
diff --git a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.form b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.form
index eac08ea..b03593f 100644
--- a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.form
+++ b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.form
@@ -36,10 +36,7 @@
</Constraint>
</Constraints>
- <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
- <Property name="columns" type="int" value="1"/>
- <Property name="rows" type="int" value="1"/>
- </Layout>
+ <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="testCardPanel">
<Properties>
@@ -47,6 +44,11 @@
<Dimension value="[710, 490]"/>
</Property>
</Properties>
+ <Constraints>
+ <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+ <BorderConstraints direction="Center"/>
+ </Constraint>
+ </Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignCardLayout"/>
<SubComponents>
@@ -494,7 +496,7 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="84" max="-2" attributes="0"/>
<Component id="jLabel5" min="-2" max="-2" attributes="0"/>
- <EmptySpace pref="168" max="32767" attributes="0"/>
+ <EmptySpace pref="117" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@@ -2055,6 +2057,130 @@
</Container>
</SubComponents>
</Container>
+ <Container class="javax.swing.JPanel" name="pnlBottomGutter">
+ <Properties>
+ <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+ <Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
+ <BevelBorder bevelType="1"/>
+ </Border>
+ </Property>
+ <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[2147483647, 10]"/>
+ </Property>
+ </Properties>
+ <Constraints>
+ <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+ <BorderConstraints direction="South"/>
+ </Constraint>
+ </Constraints>
+
+ <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
+ <SubComponents>
+ <Container class="javax.swing.JPanel" name="pnlHostInfo">
+
+ <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
+ <SubComponents>
+ <Component class="javax.swing.JLabel" name="lblUserNameLabel">
+ <Properties>
+ <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+ <Font name="Lucida Grande" size="13" style="1"/>
+ </Property>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/lite/Bundle.properties" key="iDropLiteApplet.lblUserNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="userNameLabel">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/lite/Bundle.properties" key="iDropLiteApplet.userNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="null"/>
+ </Property>
+ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="null"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.Box$Filler" name="filler1">
+ <Properties>
+ <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[10, 32767]"/>
+ </Property>
+ <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[10, 0]"/>
+ </Property>
+ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[10, 0]"/>
+ </Property>
+ </Properties>
+ <AuxValues>
+ <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+ </AuxValues>
+ </Component>
+ <Component class="javax.swing.JLabel" name="lblZoneLabel">
+ <Properties>
+ <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+ <Font name="Lucida Grande" size="13" style="1"/>
+ </Property>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/lite/Bundle.properties" key="iDropLiteApplet.lblZoneLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="lblZone">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/lite/Bundle.properties" key="iDropLiteApplet.lblZone.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.Box$Filler" name="filler2">
+ <Properties>
+ <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[10, 32767]"/>
+ </Property>
+ <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[10, 0]"/>
+ </Property>
+ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[10, 0]"/>
+ </Property>
+ </Properties>
+ <AuxValues>
+ <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.HorizontalStrut"/>
+ </AuxValues>
+ </Component>
+ <Component class="javax.swing.JLabel" name="lblDefaultResource">
+ <Properties>
+ <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+ <Font name="Lucida Grande" size="13" style="1"/>
+ </Property>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/lite/Bundle.properties" key="iDropLiteApplet.lblDefaultResource.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ <AccessibilityProperties>
+ <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/lite/Bundle.properties" key="iDropLiteApplet.lblDefaultResource.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ </AccessibilityProperties>
+ </Component>
+ <Component class="javax.swing.JComboBox" name="comboDefaultResource">
+ <Properties>
+ <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+ <StringArray count="0"/>
+ </Property>
+ </Properties>
+ <Events>
+ <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="comboDefaultResourceActionPerformed"/>
+ </Events>
+ </Component>
+ </SubComponents>
+ </Container>
+ </SubComponents>
+ </Container>
</SubComponents>
</Container>
</SubComponents>
diff --git a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.java b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.java
index bdec5f2..643acb3 100644
--- a/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.java
+++ b/idrop-lite/src/main/java/org/irods/jargon/idrop/lite/iDropLiteApplet.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.DropMode;
@@ -45,6 +46,7 @@ import org.irods.jargon.core.exception.JargonException;
import org.irods.jargon.core.pub.DataTransferOperations;
import org.irods.jargon.core.pub.EnvironmentalInfoAO;
import org.irods.jargon.core.pub.IRODSFileSystem;
+import org.irods.jargon.core.pub.ResourceAO;
import org.irods.jargon.core.pub.UserAO;
import org.irods.jargon.core.pub.io.IRODSFile;
import org.irods.jargon.core.query.CollectionAndDataObjectListingEntry;
@@ -68,7 +70,7 @@ import org.slf4j.LoggerFactory;
* @author lisa
*/
public class iDropLiteApplet extends javax.swing.JApplet implements TransferStatusCallbackListener, TableModelListener, ComponentListener {
-
+
private static final org.slf4j.Logger log = LoggerFactory.getLogger(iDropLiteApplet.class);
private iDropLiteApplet applet;
private final Integer defaultLoginMode = -1;
@@ -103,12 +105,13 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
static final int uploadFolder = 2;
static final int uploadURL = 3;
- /** Initializes the applet NewJApplet */
+ /**
+ * Initializes the applet NewJApplet
+ */
public void init() {
this.applet = this;
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
-
public void run() {
log.info("iDropLiteApplet version is:{}", Version.VERSION);
getAppletParams();
@@ -122,9 +125,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
ex.printStackTrace();
}
}
-
+
protected void getAppletParams() {
-
+
try {
this.mode = Integer.parseInt(getParameter("mode"));
} catch (Exception ex) {
@@ -140,7 +143,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
} catch (Exception ex) {
this.uploadDest = "";
}
-
+
try {
this.host = getParameter("host");
this.port = Integer.parseInt(getParameter("port"));
@@ -148,14 +151,13 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
this.zone = getParameter("zone");
this.tempPswd = getParameter("password");
- if(getParameter("absPath") == null) {
- this.absPath = "/" + this.zone + "/" + this.user;
- log.info("no absPath parameter provided, set to default: {}", this.absPath);
- }
- else {
- this.absPath = getParameter("absPath");
+ if (getParameter("absPath") == null) {
+ this.absPath = "/" + this.zone + "/" + this.user;
+ log.info("no absPath parameter provided, set to default: {}", this.absPath);
+ } else {
+ this.absPath = getParameter("absPath");
}
-
+
if (getParameter("displayMode") == null) {
this.displayMode = 0;
log.info("normal (all modes) display mode");
@@ -172,7 +174,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
log.info("shopping cart key IS set");
this.key = getParameter("key");
}
-
+
log.debug("creating account with applet params");
log.info("mode:{}", mode);
log.info("host:{}", host);
@@ -186,12 +188,12 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
Logger.getLogger(iDropLiteApplet.class.getName()).log(Level.SEVERE, null, ex);
showIdropException(ex);
}
-
+
}
-
+
private boolean retrievePermAccount() {
String pswd = null;
-
+
DataCacheServiceImpl dataCache = new DataCacheServiceImpl();
try {
dataCache.setIrodsAccessObjectFactory(irodsFileSystem.getIRODSAccessObjectFactory());
@@ -201,7 +203,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
log.info("creating temporary irods account...");
IRODSAccount tmpAccount = new IRODSAccount(host, port, user, tempPswd, absPath, zone, defaultStorageResource);
dataCache.setIrodsAccount(tmpAccount);
-
+
try {
log.info("sending user name and key user:{}", user);
pswd = dataCache.retrieveStringValueFromCache(user, tempPswd);
@@ -211,16 +213,16 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
Logger.getLogger(iDropLiteApplet.class.getName()).log(Level.SEVERE, null, e2);
return false;
}
-
+
return true;
}
-
+
private boolean createPermAccount() {
this.irodsAccount = new IRODSAccount(host, port, user, tempPswd, absPath, zone, defaultStorageResource);
-
+
return true;
}
-
+
private boolean processLogin() {
// do different logins depending on which mode is used
@@ -229,7 +231,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// 2 - Temporary password only mode
switch (this.mode) {
-
+
case 1:
showMessageFromOperation("Connection mode - 1 is not currently supported. Please configure another connection mode.");
return false;
@@ -247,10 +249,10 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
return false;
}
break;
-
+
case 2:
log.info("processLogin: using temp-only with cache");
-
+
if (!tempOnlyAccount()) {
showMessageFromOperation("Permanent Password Mode: login error - unable to log in, or invalid user id");
return false;
@@ -259,12 +261,12 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
default:
showMessageFromOperation("Unsupported Login Mode");
return false;
-
+
}
-
-
+
+
try {
-
+
final UserAO userAO = irodsFileSystem.getIRODSAccessObjectFactory().getUserAO(irodsAccount);
iDropCore.setIrodsAccount(irodsAccount);
iDropCore.setIrodsFileSystem(irodsFileSystem);
@@ -298,11 +300,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
return true;
}
-
+
protected boolean doStartup() {
-
+
log.info("initiating startup sequence...");
-
+
log.info("creating irods file system instance...");
try {
irodsFileSystem = IRODSFileSystem.instance();
@@ -315,11 +317,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
log.info("creating idropCore...");
iDropCore = new iDropLiteCore();
-
+
if (!processLogin()) {
return false;
}
-
+
// set Look and Feel
//String lookAndFeel = iDropCore.setLookAndFeel();
//log.info("setting look and feel: {}", lookAndFeel);
@@ -327,31 +329,49 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
if (this.displayMode != 3) {
buildTargetTree();
}
-
+
setUpLocalFileSelectTree();
setUpUploadLocalFileSelectTree();
-
+
try {
-
+
DataTransferOperations dataTransferOperations = irodsFileSystem.getIRODSAccessObjectFactory().getDataTransferOperations(irodsAccount);
iDropCore.setTransferManager(dataTransferOperations);
} catch (JargonException ex) {
Logger.getLogger(iDropLiteApplet.class.getName()).log(Level.SEVERE, null, ex);
}
-
+
try {
iDropCore.setTransferControlBlock(DefaultTransferControlBlock.instance());
} catch (JargonException ex) {
Logger.getLogger(iDropLiteApplet.class.getName()).log(Level.SEVERE, null, ex);
}
-
+
return true;
}
-
+
private void doPostInitWork() {
- CardLayout cl = (CardLayout) (testCardPanel.getLayout());
+ // get the available storage resorces to populate the drop-down
+
+ try {
+ ResourceAO resourceAO = this.getiDropCore().getIRODSAccessObjectFactory().getResourceAO(this.getIrodsAccount());
+ log.info("getting a list of all resources in the zone");
+ List<String> resources = new ArrayList<String>();
+ resources.add("");
+ resources.addAll(resourceAO.listResourceAndResourceGroupNames());
+ comboDefaultResource.setModel(new DefaultComboBoxModel(resources.toArray()));
+ comboDefaultResource.setSelectedItem(this.getIrodsAccount().getDefaultStorageResource());
+ } catch (JargonException ex) {
+ log.error("error getting resource list", ex);
+ throw new IdropRuntimeException("error getting resource list", ex);
+ }
+
+ userNameLabel.setText(this.getIrodsAccount().getUserName());
+ lblZone.setText(this.getIrodsAccount().getZone());
+ CardLayout cl = (CardLayout) (testCardPanel.getLayout());
+
switch (displayMode) {
case 1:
log.info(">>>>>>>>> local/irods display mode 1");
@@ -370,6 +390,10 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
break;
case 3:
log.info(">>>>>>>>>shopping cart display mode 3");
+ lblZone.setVisible(false);
+ lblZoneLabel.setVisible(false);
+ lblUserNameLabel.setVisible(false);
+ userNameLabel.setVisible(false);
// need to make download destination text box background invisible here since
// Netbeans GUI builder will not preserve correct setting
txtDownloadTarget.setBackground(new Color(0, 0, 0, 0));
@@ -380,25 +404,25 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
setupProgressTable();
populateDownloadTableWithCartContents();
setupForIdropWebMode();
+
break;
default:
log.info(">>>>>>>>> no display mode, show local/rods display mode 1");
this.displayMode = 1;
cl.show(testCardPanel, "card2");
}
-
+
}
-
+
public void buildTargetTree() {
log.info("building tree to look at staging resource");
final iDropLiteApplet gui = this;
-
+
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
gui.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
+
IRODSOutlineModel mdl = null;
log.info("building new iRODS tree");
try {
@@ -419,7 +443,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
/**
- * A tree has not been previosly loaded, establish the root (strict ACLs? Login preset?)
+ * A tree has not been previosly loaded, establish the root (strict ACLs? Login preset?)
*/
private void loadNewTree() throws JargonException, IdropException {
IRODSOutlineModel mdl;
@@ -441,7 +465,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
root.setPathOrName(basePath);
root.setObjectType(CollectionAndDataObjectListingEntry.ObjectType.COLLECTION);
}
-
+
irodsTree = new IRODSTree(gui);
IRODSNode rootNode = new IRODSNode(root,
getIrodsAccount(), getiDropCore().getIrodsFileSystem(), irodsTree);
@@ -464,7 +488,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
TreePath rootPath = TreeUtils.getPath(currentRoot);
TreePath[] currentPaths = irodsTree.getOutlineModel().getTreePathSupport().getExpandedDescendants(rootPath);
log.info("expanded paths:{}", currentPaths);
- gui.scrIrodsTreeView.getViewport().removeAll();
+ gui.scrIrodsTreeView.getViewport().removeAll();
irodsTree = null;
irodsTree = new IRODSTree(gui);
CollectionAndDataObjectListingEntry currentEntry = (CollectionAndDataObjectListingEntry) currentRoot.getUserObject();
@@ -476,9 +500,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
IRODSOutlineModel mdl = new IRODSOutlineModel(gui,
irodsFileSystemModel, new IRODSRowModel(), true,
"File System");
-
+
irodsTree.setModel(mdl);
- gui.scrIrodsTreeView.setViewportView(irodsTree);
+ gui.scrIrodsTreeView.setViewportView(irodsTree);
if (currentPaths != null) {
IRODSNode irodsNode = null;
TreePath pathOfExpandingNode = null;
@@ -497,11 +521,12 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
});
}
-
- /**
+
+ /**
* Establish base path (checking if strict acl's are in place
+ *
* @return <code>String</code> with the base path for the tree
- * @throws JargonException
+ * @throws JargonException
*/
private synchronized String getBasePath() throws JargonException {
String myBase = this.getiDropCore().getBasePath();
@@ -517,9 +542,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
myBase = "/";
}
}
-
+
return myBase;
-
+
}
// NEED TO REFACTOR ALL OF THE FOLLOWING DUPLICATION!!!!!!!!
@@ -531,36 +556,34 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
* display an additional panel listing the other roots, and build the
* tree for the first drive encountered.
*/
-
+
if (fileTree != null) {
log.info("file tree already initialized");
return;
}
-
+
log.info("building tree to look at local file system");
final iDropLiteApplet gui = this;
-
+
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
-
+
initializeLocalFileTreeModel(null);
fileTree = new LocalFileTree(localFileModel, gui);
lstLocalDrives.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
-
@Override
public void valueChanged(final ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
-
+
log.debug("new local file system model");
log.debug("selection event:{}", e);
Object selectedItem = lstLocalDrives.getSelectedValue();
initializeLocalFileTreeModelWhenDriveIsSelected(selectedItem);
-
+
}
});
scrollLocalFileTree.setViewportView(fileTree);
@@ -569,9 +592,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlLocalTree.setVisible(false);
}
});
-
+
}
-
+
private void setUpUploadLocalFileSelectTree() {
/*
@@ -580,36 +603,34 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
* display an additional panel listing the other roots, and build the
* tree for the first drive encountered.
*/
-
+
if (fileUploadTree != null) {
log.info("file upload tree already initialized");
return;
}
-
+
log.info("building upload tree to look at local file system");
final iDropLiteApplet gui = this;
-
+
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
-
+
initializeUploadLocalFileTreeModel(null);
fileUploadTree = new LocalFileTree(localUploadFileModel, gui);
lstUploadLocalDrives.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
-
@Override
public void valueChanged(final ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
-
+
log.debug("new uload local file system model");
log.debug("uload selection event:{}", e);
Object selectedItem = lstUploadLocalDrives.getSelectedValue();
initializeUploadLocalFileTreeModelWhenDriveIsSelected(selectedItem);
-
+
}
});
scrollUploadLocalTree.setViewportView(fileUploadTree);
@@ -618,18 +639,18 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlUploadLocalTree.setVisible(true);
}
});
-
+
}
-
+
private void initializeLocalFileTreeModelWhenDriveIsSelected(
final Object selectedDrive) {
if (selectedDrive == null) {
log.debug("selected drive is null, use the first one");
lstLocalDrives.setSelectedIndex(0);
-
+
localFileModel = new LocalFileSystemModel(new LocalFileNode(
new File((String) lstLocalDrives.getSelectedValue())));
-
+
fileTree.setModel(localFileModel);
} else {
log.debug(
@@ -639,15 +660,15 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
localFileModel = new LocalFileSystemModel(new LocalFileNode(
new File((String) selectedDrive)));
fileTree.setModel(localFileModel);
-
+
}
-
+
scrollLocalDrives.setVisible(true);
}
-
+
private void initializeLocalFileTreeModel(final Object selectedDrive) {
List<String> roots = LocalFileUtils.listFileRootsForSystem();
-
+
if (roots.isEmpty()) {
IdropException ie = new IdropException(
"unable to find any roots on the local file system");
@@ -659,28 +680,28 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlLocalRoots.setPreferredSize(new java.awt.Dimension(295, 39));
localFileModel = new LocalFileSystemModel(new LocalFileNode(
new File(roots.get(0))));
-
+
} else {
DefaultListModel listModel = new DefaultListModel();
for (String root : roots) {
listModel.addElement(root);
}
-
+
lstLocalDrives.setModel(listModel);
-
+
scrollLocalDrives.setVisible(true);
}
}
-
+
private void initializeUploadLocalFileTreeModelWhenDriveIsSelected(
final Object selectedDrive) {
if (selectedDrive == null) {
log.debug("selected drive is null, use the first one");
lstUploadLocalDrives.setSelectedIndex(0);
-
+
localUploadFileModel = new LocalFileSystemModel(new LocalFileNode(
new File((String) lstUploadLocalDrives.getSelectedValue())));
-
+
fileUploadTree.setModel(localUploadFileModel);
} else {
log.debug(
@@ -690,15 +711,15 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
localUploadFileModel = new LocalFileSystemModel(new LocalFileNode(
new File((String) selectedDrive)));
fileUploadTree.setModel(localUploadFileModel);
-
+
}
-
+
scrollUploadLocalDrives.setVisible(true);
}
-
+
private void initializeUploadLocalFileTreeModel(final Object selectedDrive) {
List<String> roots = LocalFileUtils.listFileRootsForSystem();
-
+
if (roots.isEmpty()) {
IdropException ie = new IdropException(
"unable to find any roots on the local file system");
@@ -710,31 +731,31 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlUploadRoots.setPreferredSize(new java.awt.Dimension(295, 54));
localUploadFileModel = new LocalFileSystemModel(new LocalFileNode(
new File(roots.get(0))));
-
+
} else {
DefaultListModel listModel = new DefaultListModel();
for (String root : roots) {
listModel.addElement(root);
}
-
+
lstUploadLocalDrives.setModel(listModel);
-
+
scrollUploadLocalDrives.setVisible(true);
}
}
-
+
private void populateUploadDestination() {
if ((uploadDest != null) && (uploadDest.length() > 0)) {
txtIRODSUploadDest.setText(uploadDest);
btnUploadBeginImport.setEnabled(true);
}
}
-
+
private void setupProgressTable() {
// load table cancel icon
java.net.URL imgURL = getClass().getResource("/cancel.gif");
-
+
if (imgURL != null) {
cancelIcon = new ImageIcon(imgURL, "image used to denote cancel or remove table entry");
} else {
@@ -747,7 +768,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
tblUploadTable1.setShowVerticalLines(false);
tblUploadTable1.getColumnModel().getColumn(3).setPreferredWidth(6);
tblUploadTable1.setRowHeight(24);
-
+
tblUploadTable1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
if (displayMode == 2) { // do some special stuff for Upload Mode
tblUploadTable1.setDropMode(DropMode.INSERT_ROWS);
@@ -768,7 +789,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
tblUploadTable1.getColumnModel().getColumn(4).setMinWidth(0);
tblUploadTable1.getColumnModel().getColumn(4).setMaxWidth(0);
tblUploadTable1.getColumnModel().getColumn(4).setPreferredWidth(0);
-
+
tblUploadTable1.getModel().addTableModelListener(applet);
// add renderer for file name in first column
@@ -781,22 +802,21 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// save Table Model for later use
this.iDropCore.setUploadTableModel((DefaultTableModel) tblUploadTable1.getModel());
}
-
+
public IRODSAccount getIrodsAccount() {
synchronized (this) {
return this.iDropCore.getIrodsAccount();
}
}
-
+
public void showIdropException(Exception idropException) {
JOptionPane.showMessageDialog(this, idropException.getMessage(), "iDROP Exception", JOptionPane.WARNING_MESSAGE);
}
-
+
public void showMessageFromOperation(final String messageFromOperation) {
-
+
final iDropLiteApplet thisIdropGui = this;
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
JOptionPane.showMessageDialog(iDropCore.findAppletParentFrame(thisIdropGui), messageFromOperation, "iDROP Message",
@@ -804,13 +824,12 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
});
}
-
+
@Override
public void statusCallback(final TransferStatus ts) {
log.info("transfer status callback to iDropLiteApplet:{}", ts);
final iDropLiteApplet idrop = this;
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
log.info("in statusCallback thread");
@@ -820,7 +839,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
if (currentUploadFile != null) {
tableRow = getUploadTableProgressRow(currentUploadFile);
}
-
+
if (ts.getTransferState() == TransferStatus.TransferState.FAILURE) {
// an error occurs, stop the transfer
log.error("error occurred in transfer: {}", ts);
@@ -854,7 +873,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
TransferProgressInfo tpi = new TransferProgressInfo(ts.getTotalSize(), ts.getBytesTransfered(), 0, 0, true);
tblUploadTable1.getModel().setValueAt(tpi, tableRow, 2);
}
-
+
} else if (ts.getTransferState() == TransferStatus.TransferState.IN_PROGRESS_START_FILE) {
// start of a file operation
@@ -876,9 +895,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
tblUploadTable1.getModel().setValueAt(tpi, tableRow, 2);
}
}
-
+
} else if (ts.getTransferState() == TransferStatus.TransferState.IN_PROGRESS_COMPLETE_FILE) {
-
+
progressIntraFile.setMinimum(0);
progressIntraFile.setMaximum(10);
progressIntraFile.setValue(10);
@@ -903,9 +922,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
ts.getTotalFilesToTransfer(), ts.getTotalFilesTransferredSoFar());
tblUploadTable1.getModel().setValueAt(tpi, tableRow, 2);
}
-
+
} else {
-
+
transferStatusProgressBar.setMaximum(ts.getTotalFilesToTransfer());
transferStatusProgressBar.setValue(ts.getTotalFilesTransferredSoFar());
pbIdropWebModeDownloadProgress.setMaximum(ts.getTotalFilesToTransfer());
@@ -916,27 +935,26 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
lblTransferByteCounts.setText("Current File (kb):"
+ (ts.getBytesTransfered() / 1024) + " / "
+ (ts.getTotalSize() / 1024));
-
+
lblCurrentFile.setText(abbreviateFileName(ts.getSourceFileAbsolutePath()));
}
}
});
}
-
+
@Override
public void overallStatusCallback(final TransferStatus ts) {
// final IRODSOutlineModel irodsTreeModel = (IRODSOutlineModel) irodsTree.getModel();
final iDropLiteApplet idropGui = this;
idropGui.setTransferInProgress(true);
-
+
log.info("transfer OVERALL status callback to iDropLiteApplet:{}", ts);
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
log.info("in overallStatusCallback thread");
-
+
int tableRow = -1;
if (currentUploadFile != null) {
tableRow = getUploadTableProgressRow(currentUploadFile);
@@ -952,7 +970,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
&& idropGui.displayMode == 1) {
try {
((LocalFileSystemModel) idropGui.getFileTree().getModel()).notifyCompletionOfOperation(idropGui.getFileTree(), ts);
-
+
} catch (IdropException ex) {
log.error("error on tree notify after operation", ex);
throw new IdropRuntimeException("error processing overall status callback", ex);
@@ -972,7 +990,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
}
}
-
+
}
/*
@@ -995,16 +1013,16 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pbIdropWebModeDownloadProgress.setMinimum(0);
pbIdropWebModeDownloadProgress.setMaximum(ts.getTotalFilesToTransfer());
pbIdropWebModeDownloadProgress.setValue(0);
-
+
if ((tableRow >= 0)) {
TransferProgressInfo tpi = new TransferProgressInfo();
tblUploadTable1.getModel().setValueAt(tpi, tableRow, 2);
}
-
+
currentUploadFile = ts.getSourceFileAbsolutePath();
enableUploadButtons(false);
}
-
+
if (ts.getTransferState() == TransferStatus.TransferState.OVERALL_COMPLETION) {
if (tableRow >= 0) {
//tblUploadTable.getModel().setValueAt(false, tableRow, 2);
@@ -1042,29 +1060,29 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
}
});
-
+
}
-
+
private void clearProgressBar() {
lblTransferType.setText("");
lblTransferFilesCounts.setText("Files: / ");
-
+
lblTransferByteCounts.setText("Bytes (kb): / ");
-
+
lblCurrentFile.setText("");
transferStatusProgressBar.setMinimum(0);
transferStatusProgressBar.setMaximum(100);
transferStatusProgressBar.setValue(0);
-
+
pbIdropWebModeDownloadProgress.setMinimum(0);
pbIdropWebModeDownloadProgress.setMaximum(100);
pbIdropWebModeDownloadProgress.setValue(0);
}
-
+
public void setTransferInProgress(Boolean state) {
this.transferInProgress = state;
}
-
+
public Boolean isTransferInProgress() {
return this.transferInProgress;
}
@@ -1074,14 +1092,13 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
public void setTransferCancelled(Boolean state) {
this.transferCancelled = state;
}
-
+
public Boolean isTransferCancelled() {
return this.transferCancelled;
}
-
+
public void cancelTransfer() {
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
iDropCore.getTransferControlBlock().setCancelled(true);
@@ -1095,11 +1112,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// not needed? end
private final String abbreviateFileName(final String fileName) {
-
+
if (fileName == null) {
throw new IllegalArgumentException("null fileName");
}
-
+
StringBuilder sb = new StringBuilder();
if (fileName.length() < 100) {
sb.append(fileName);
@@ -1109,11 +1126,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
sb.append(" ... ");
sb.append(fileName.substring(fileName.length() - 50));
}
-
+
return sb.toString();
-
+
}
-
+
private int getUploadTableProgressRow(String filename) {
int row = -1;
int numRows = tblUploadTable1.getModel().getRowCount();
@@ -1125,10 +1142,10 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
break;
}
}
-
+
return row;
}
-
+
private void enableUploadButtons(Boolean state) {
btnUploadBeginImport.setEnabled(state);
btnUploadCancel.setEnabled(state);
@@ -1136,10 +1153,10 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
btnBrowseIRODSUploadDest.setEnabled(state);
btnUploadUrl.setEnabled(state);
}
-
+
public void setTotalFileUpload(int total) {
String phrase = "Total Files To Upload: ";
-
+
if (total > 0) {
Integer itotal = new Integer(total);
lblUploadTotalFiles.setText(phrase.concat(itotal.toString()));
@@ -1147,7 +1164,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
lblUploadTotalFiles.setText(phrase);
}
}
-
+
public void setTotalSizeUpload(long total) {
String phrase = "Total File Size: ";
String postfix = " (kb)";
@@ -1158,17 +1175,17 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
lblUploadTotalSize.setText(phrase);
}
}
-
+
public void updateFileStats(DefaultTableModel tm) {
-
+
int numRows = tm.getRowCount();
long totalSize = 0;
int totalFiles = 0;
URL url = null;
URLConnection connection = null;
-
+
for (int i = 0; i < numRows; i++) {
-
+
String fileName = (String) tm.getValueAt(i, 0);
if (fileName != null) {
@@ -1206,14 +1223,14 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
setTotalFileUpload(totalFiles);
setTotalSizeUpload(totalSize);
}
-
+
@Override
public void tableChanged(TableModelEvent tme) {
int type = tme.getType();
int row = tme.getFirstRow();
int column = tme.getColumn();
DefaultTableModel tm = (DefaultTableModel) tblUploadTable1.getModel();
-
+
if (type == TableModelEvent.UPDATE && column == 3) {
//log.info("canceling or removing??");
if (isTransferInProgress()) {
@@ -1226,23 +1243,23 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
updateFileStats(tm);
}
}
-
+
public IRODSTree getIrodsTree() {
return irodsTree;
}
-
+
public iDropLiteCore getiDropCore() {
return iDropCore;
}
-
+
public LocalFileTree getFileTree() {
return fileTree;
}
-
+
public Outline getTreeStagingResource() {
return irodsTree;
}
-
+
private void collectDownloadTarget() {
int ret = dlgLocalFileChooser.showOpenDialog(iDropCore.findAppletParentFrame(this));
//int ret = dlgLocalFileChooser.showSaveDialog(this.applet); // update this so you can create a folder???
@@ -1254,10 +1271,10 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
}
}
-
+
private boolean tempOnlyAccount() {
String pswd = null;
-
+
try {
log.info("creating a shared (cached) temp account connection");
this.irodsAccount = new IRODSAccount(host, port, user, tempPswd, absPath, zone, defaultStorageResource);
@@ -1265,21 +1282,21 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
irodsAccount);
irodsFileSystem = new IRODSFileSystem(manager);
log.info("irodsFileSystem updated to utilize cache");
-
+
} catch (JargonException e2) {
Logger.getLogger(iDropLiteApplet.class.getName()).log(Level.SEVERE, null, e2);
return false;
}
-
+
return true;
}
-
+
private List<String> getCartFiles() {
List<String> cartContents = new ArrayList<String>();
FileShoppingCart cart = null;
-
+
log.info("retrieving cart shopping cart contents");
-
+
DataCacheServiceFactory dataCacheServiceFactory;
try {
dataCacheServiceFactory = new DataCacheServiceFactoryImpl(
@@ -1289,10 +1306,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
dataCacheServiceFactory);
log.info("getting cart as logged in user, key: {}", this.key);
if ((this.mode == 2) && (this.key != null) && (!this.key.isEmpty()) && (this.key != "undefined")) {
- cart = shoppingCartService.retreiveShoppingCartAsLoggedInUser(this.key);
- }
- else {
- log.error("could not create shopping cart");
+ cart = shoppingCartService.retreiveShoppingCartAsLoggedInUser(this.key);
+ } else {
+ log.error("could not create shopping cart");
showMessageFromOperation("Cannot retrieve files from shopping cart");
return cartContents;
}
@@ -1307,21 +1323,21 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
Logger.getLogger(iDropLiteApplet.class.getName()).log(Level.SEVERE, null, e);
showMessageFromOperation("Cannot retrieve files from shopping cart");
}
-
+
if (cart.hasItems()) {
cartContents = cart.getShoppingCartFileList();
}
-
+
log.info("returning contents of shopping cart {}", cartContents);
return cartContents;
}
-
+
private void populateDownloadTableWithCartContents() {
long fileSize = 0;
int fileType = iDropLiteApplet.uploadFile;
-
+
List<String> cartFiles = getCartFiles();
-
+
for (String cf : cartFiles) {
DefaultTableModel tm = (DefaultTableModel) tblUploadTable1.getModel();
Object[] rowData = new Object[5];
@@ -1345,19 +1361,19 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
tm.addRow(rowData);
}
}
-
+
private void setupForIdropWebMode() {
// set up listener to capture resize of applet - so if it gets really small it will switch to
// iDrop Web mode for shopping cart mode
this.addComponentListener(this);
checkForIdropWebMode();
}
-
+
private void checkForIdropWebMode() {
int width = this.getWidth();
int height = this.getHeight();
CardLayout cl = (CardLayout) (testCardPanel.getLayout());
-
+
if (width < 350 && height < 250) {
String target = txtDownloadTarget.getText();
if (target.length() > 0) {
@@ -1372,27 +1388,27 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
cl.show(testCardPanel, "card4"); // regular shopping cart mode
}
}
-
+
@Override
public void componentHidden(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
-
+
@Override
public void componentMoved(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
-
+
@Override
public void componentResized(ComponentEvent arg0) {
checkForIdropWebMode();
}
-
+
@Override
public void componentShown(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
-
+
private void executeDownload() {
GetTransferRunner currentTransferRunner = null;
final List<File> sourceFiles = new ArrayList<File>();
@@ -1400,7 +1416,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// make sure local destination is legal
final String targetPath = txtDownloadTarget.getText();
log.info("download destination is: {}", targetPath);
-
+
try {
if (!new File(targetPath).exists()) {
JOptionPane.showMessageDialog(this, "Please enter a valid local destination for download.");
@@ -1413,7 +1429,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// now go through and process selected import files from table
if (!isTransferInProgress()) {
-
+
IRODSFileService irodsFS = null;
try {
irodsFS = new IRODSFileService(iDropCore.getIrodsAccount(), iDropCore.getIrodsFileSystem());
@@ -1454,10 +1470,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
}
- /** This method is called from within the init() method to
- * initialize the form.
- * WARNING: Do NOT modify this code. The content of this method is
- * always regenerated by the Form Editor.
+ /**
+ * This method is called from within the init() method to initialize the form. WARNING: Do NOT
+ * modify this code. The content of this method is always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
@@ -1571,12 +1586,22 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
btnIdropWebModeBeginDownload = new javax.swing.JButton();
pnlRestart = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
+ pnlBottomGutter = new javax.swing.JPanel();
+ pnlHostInfo = new javax.swing.JPanel();
+ lblUserNameLabel = new javax.swing.JLabel();
+ userNameLabel = new javax.swing.JLabel();
+ filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(10, 0), new java.awt.Dimension(10, 0), new java.awt.Dimension(10, 32767));
+ lblZoneLabel = new javax.swing.JLabel();
+ lblZone = new javax.swing.JLabel();
+ filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(10, 0), new java.awt.Dimension(10, 0), new java.awt.Dimension(10, 32767));
+ lblDefaultResource = new javax.swing.JLabel();
+ comboDefaultResource = new javax.swing.JComboBox();
setMinimumSize(new java.awt.Dimension(250, 200));
setPreferredSize(new java.awt.Dimension(700, 490));
pnllSeems2BneededForCorrectResizing.setPreferredSize(new java.awt.Dimension(720, 490));
- pnllSeems2BneededForCorrectResizing.setLayout(new java.awt.GridLayout(1, 1));
+ pnllSeems2BneededForCorrectResizing.setLayout(new java.awt.BorderLayout());
testCardPanel.setPreferredSize(new java.awt.Dimension(710, 490));
testCardPanel.setLayout(new java.awt.CardLayout());
@@ -1596,7 +1621,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlLocalToggleSizer.setPreferredSize(new java.awt.Dimension(150, 50));
- btnToggleLocalView.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ btnToggleLocalView.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
btnToggleLocalView.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnToggleLocalView.text")); // NOI18N
btnToggleLocalView.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -1611,7 +1636,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
.add(pnlLocalToggleSizerLayout.createSequentialGroup()
.addContainerGap()
.add(btnToggleLocalView)
- .addContainerGap(11, Short.MAX_VALUE))
+ .addContainerGap(12, Short.MAX_VALUE))
);
pnlLocalToggleSizerLayout.setVerticalGroup(
pnlLocalToggleSizerLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
@@ -1675,7 +1700,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlLocalRefreshButton.setPreferredSize(new java.awt.Dimension(0, 34));
pnlLocalRefreshButton.setRequestFocusEnabled(false);
- btnLocalRefresh.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ btnLocalRefresh.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
btnLocalRefresh.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnLocalRefresh.text")); // NOI18N
pnlLocalRefreshButton.add(btnLocalRefresh);
@@ -1721,11 +1746,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlIrodsTree.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
- tabIrodsViews.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ tabIrodsViews.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
pnlIrodsTreeView.setLayout(new java.awt.BorderLayout());
- btnIrodsTreeRefresh.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ btnIrodsTreeRefresh.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
btnIrodsTreeRefresh.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnIrodsTreeRefresh.text")); // NOI18N
btnIrodsTreeRefresh.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -1755,7 +1780,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
.add(pnlIrodsSearchLayout.createSequentialGroup()
.add(84, 84, 84)
.add(jLabel5)
- .addContainerGap(168, Short.MAX_VALUE))
+ .addContainerGap(117, Short.MAX_VALUE))
);
tabIrodsViews.addTab(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.pnlIrodsSearch.TabConstraints.tabTitle"), pnlIrodsSearch); // NOI18N
@@ -1764,11 +1789,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlIrodsTree.setLayout(pnlIrodsTreeLayout);
pnlIrodsTreeLayout.setHorizontalGroup(
pnlIrodsTreeLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabIrodsViews, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE)
+ .add(tabIrodsViews)
);
pnlIrodsTreeLayout.setVerticalGroup(
pnlIrodsTreeLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabIrodsViews, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE)
+ .add(tabIrodsViews)
);
pnlSplitPaneLocalRemote.setRightComponent(pnlIrodsTree);
@@ -1788,11 +1813,11 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
lblTransferStatusMessage.setForeground(new java.awt.Color(0, 0, 255));
pnlTransferStatus.add(lblTransferStatusMessage, new java.awt.GridBagConstraints());
- lblTransferTypeLabel.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblTransferTypeLabel.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblTransferTypeLabel.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblTransferTypeLabel.text")); // NOI18N
pnlTransferType.add(lblTransferTypeLabel);
- lblTransferType.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblTransferType.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblTransferType.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblTransferType.text")); // NOI18N
pnlTransferType.add(lblTransferType);
@@ -1801,7 +1826,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
gridBagConstraints.gridy = 1;
pnlTransferStatus.add(pnlTransferType, gridBagConstraints);
- lblTransferFilesCounts.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblTransferFilesCounts.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblTransferFilesCounts.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblTransferFilesCounts.text")); // NOI18N
pnlTransferFileCounts.add(lblTransferFilesCounts);
@@ -1812,13 +1837,13 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlTransferByteCounts.setLayout(new java.awt.GridBagLayout());
- lblTransferByteCounts.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblTransferByteCounts.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblTransferByteCounts.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblTransferByteCounts.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
pnlTransferByteCounts.add(lblTransferByteCounts, gridBagConstraints);
- progressIntraFile.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ progressIntraFile.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0);
@@ -1833,7 +1858,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlTransferFileInfo.setLayout(new java.awt.GridBagLayout());
- lblCurrentFileLabel.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblCurrentFileLabel.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblCurrentFileLabel.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblCurrentFileLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
@@ -1854,7 +1879,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
pnlIdropBottom.add(pnlTransferOverview, gridBagConstraints);
- transferStatusProgressBar.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ transferStatusProgressBar.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
transferStatusProgressBar.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
transferStatusProgressBar.setStringPainted(true);
gridBagConstraints = new java.awt.GridBagConstraints();
@@ -1880,7 +1905,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jPanel8.setPreferredSize(new java.awt.Dimension(285, 20));
jPanel8.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
- jLabel6.setFont(new java.awt.Font("Lucida Grande", 1, 13));
+ jLabel6.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
jLabel6.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.jLabel6.text")); // NOI18N
jLabel6.setPreferredSize(new java.awt.Dimension(150, 17));
jPanel8.add(jLabel6);
@@ -1921,7 +1946,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jPanel10.setPreferredSize(new java.awt.Dimension(310, 20));
jPanel10.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
- jLabel7.setFont(new java.awt.Font("Lucida Grande", 1, 13));
+ jLabel7.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
jLabel7.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.jLabel7.text")); // NOI18N
jPanel10.add(jLabel7);
@@ -1967,7 +1992,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlUploadRefreshButton.setRequestFocusEnabled(false);
pnlUploadRefreshButton.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 2, 6));
- btnUploadLocalRefresh.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ btnUploadLocalRefresh.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
btnUploadLocalRefresh.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon_idroplite_refresh.png"))); // NOI18N
btnUploadLocalRefresh.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnUploadLocalRefresh.text")); // NOI18N
btnUploadLocalRefresh.setMaximumSize(new java.awt.Dimension(94, 34));
@@ -1980,7 +2005,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
});
pnlUploadRefreshButton.add(btnUploadLocalRefresh);
- btnUploadMove.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ btnUploadMove.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
btnUploadMove.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon_idroplite_addtoqueue.png"))); // NOI18N
btnUploadMove.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnUploadMove.text")); // NOI18N
btnUploadMove.setMargin(new java.awt.Insets(0, 0, 0, 0));
@@ -1994,7 +2019,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
});
pnlUploadRefreshButton.add(btnUploadMove);
- btnUploadUrl.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ btnUploadUrl.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
btnUploadUrl.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnUploadUrl.text")); // NOI18N
btnUploadUrl.setEnabled(false);
btnUploadUrl.setMaximumSize(new java.awt.Dimension(0, 0));
@@ -2069,7 +2094,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jPanel13.setLayout(jPanel13Layout);
jPanel13Layout.setHorizontalGroup(
jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ .add(0, 80, Short.MAX_VALUE)
);
jPanel13Layout.setVerticalGroup(
jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
@@ -2139,7 +2164,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlUploadToolStatus.setRequestFocusEnabled(false);
pnlUploadToolStatus.setLayout(new java.awt.BorderLayout());
- lblUploadTotalFiles.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblUploadTotalFiles.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblUploadTotalFiles.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblUploadTotalFiles.text")); // NOI18N
lblUploadTotalFiles.setBorder(javax.swing.BorderFactory.createEmptyBorder(4, 0, 0, 0));
lblUploadTotalFiles.setMaximumSize(new java.awt.Dimension(122, 24));
@@ -2147,7 +2172,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
lblUploadTotalFiles.setPreferredSize(new java.awt.Dimension(122, 30));
pnlUploadToolStatus.add(lblUploadTotalFiles, java.awt.BorderLayout.NORTH);
- lblUploadTotalSize.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ lblUploadTotalSize.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
lblUploadTotalSize.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblUploadTotalSize.text")); // NOI18N
lblUploadTotalSize.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 6, 0));
lblUploadTotalSize.setPreferredSize(new java.awt.Dimension(83, 30));
@@ -2159,7 +2184,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jPanel17.setPreferredSize(new java.awt.Dimension(240, 40));
jPanel17.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 4, 12));
- btnUploadCancel.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ btnUploadCancel.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
btnUploadCancel.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnUploadCancel.text")); // NOI18N
btnUploadCancel.setMaximumSize(new java.awt.Dimension(116, 34));
btnUploadCancel.setMinimumSize(new java.awt.Dimension(116, 34));
@@ -2173,7 +2198,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
});
jPanel17.add(btnUploadCancel);
- btnUploadBeginImport.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ btnUploadBeginImport.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
btnUploadBeginImport.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnUploadBeginImport.text")); // NOI18N
btnUploadBeginImport.setEnabled(false);
btnUploadBeginImport.setMaximumSize(new java.awt.Dimension(92, 34));
@@ -2194,7 +2219,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlIRODSUploadBrowse.setPreferredSize(new java.awt.Dimension(215, 54));
pnlIRODSUploadBrowse.setLayout(new java.awt.BorderLayout());
- jLabel8.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ jLabel8.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
jLabel8.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.jLabel8.text")); // NOI18N
jLabel8.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
@@ -2203,7 +2228,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jLabel8.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
pnlIRODSUploadBrowse.add(jLabel8, java.awt.BorderLayout.WEST);
- btnBrowseIRODSUploadDest.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ btnBrowseIRODSUploadDest.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
btnBrowseIRODSUploadDest.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnBrowseIRODSUploadDest.text")); // NOI18N
btnBrowseIRODSUploadDest.setMaximumSize(new java.awt.Dimension(155, 30));
btnBrowseIRODSUploadDest.setMinimumSize(new java.awt.Dimension(155, 30));
@@ -2216,7 +2241,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlIRODSUploadBrowse.add(btnBrowseIRODSUploadDest, java.awt.BorderLayout.EAST);
txtIRODSUploadDest.setEditable(false);
- txtIRODSUploadDest.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ txtIRODSUploadDest.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
txtIRODSUploadDest.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.txtIRODSUploadDest.text")); // NOI18N
txtIRODSUploadDest.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 5, 0, 0));
txtIRODSUploadDest.setDragEnabled(false);
@@ -2272,18 +2297,18 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jPanel1.setPreferredSize(new java.awt.Dimension(450, 38));
jPanel1.setLayout(new java.awt.BorderLayout());
- jLabel2.setFont(new java.awt.Font("Lucida Grande", 0, 12));
+ jLabel2.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N
jLabel2.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.jLabel2.text")); // NOI18N
jPanel1.add(jLabel2, java.awt.BorderLayout.WEST);
txtDownloadTarget.setEditable(false);
- txtDownloadTarget.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ txtDownloadTarget.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
txtDownloadTarget.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.txtDownloadTarget.text")); // NOI18N
txtDownloadTarget.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
txtDownloadTarget.setPreferredSize(new java.awt.Dimension(20, 28));
jPanel1.add(txtDownloadTarget, java.awt.BorderLayout.CENTER);
- btnBrowseDownloadTarget.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ btnBrowseDownloadTarget.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
btnBrowseDownloadTarget.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.btnBrowseDownloadTarget.text")); // NOI18N
btnBrowseDownloadTarget.setPreferredSize(new java.awt.Dimension(140, 30));
btnBrowseDownloadTarget.addActionListener(new java.awt.event.ActionListener() {
@@ -2323,7 +2348,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
jPanel4.setPreferredSize(new java.awt.Dimension(160, 40));
jPanel4.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
- bntBeginDownload.setFont(new java.awt.Font("Lucida Grande", 0, 11));
+ bntBeginDownload.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N
bntBeginDownload.setLabel(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.bntBeginDownload.label")); // NOI18N
bntBeginDownload.setMaximumSize(new java.awt.Dimension(101, 30));
bntBeginDownload.setMinimumSize(new java.awt.Dimension(101, 30));
@@ -2353,7 +2378,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
pnlIdropWebModeText.setPreferredSize(new java.awt.Dimension(682, 30));
pnlIdropWebModeText.setLayout(new java.awt.BorderLayout());
- jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 10));
+ jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.jLabel1.text")); // NOI18N
jLabel1.setMinimumSize(new java.awt.Dimension(57, 18));
@@ -2443,14 +2468,50 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
testCardPanel.add(pnlRestart, "card6");
- pnllSeems2BneededForCorrectResizing.add(testCardPanel);
+ pnllSeems2BneededForCorrectResizing.add(testCardPanel, java.awt.BorderLayout.CENTER);
+
+ pnlBottomGutter.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+ pnlBottomGutter.setMaximumSize(new java.awt.Dimension(2147483647, 10));
+
+ lblUserNameLabel.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
+ lblUserNameLabel.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblUserNameLabel.text")); // NOI18N
+ pnlHostInfo.add(lblUserNameLabel);
+
+ userNameLabel.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.userNameLabel.text")); // NOI18N
+ userNameLabel.setMinimumSize(null);
+ userNameLabel.setPreferredSize(null);
+ pnlHostInfo.add(userNameLabel);
+ pnlHostInfo.add(filler1);
+
+ lblZoneLabel.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
+ lblZoneLabel.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblZoneLabel.text")); // NOI18N
+ pnlHostInfo.add(lblZoneLabel);
+
+ lblZone.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblZone.text")); // NOI18N
+ pnlHostInfo.add(lblZone);
+ pnlHostInfo.add(filler2);
+
+ lblDefaultResource.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
+ lblDefaultResource.setText(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblDefaultResource.text")); // NOI18N
+ pnlHostInfo.add(lblDefaultResource);
+ lblDefaultResource.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(iDropLiteApplet.class, "iDropLiteApplet.lblDefaultResource.AccessibleContext.accessibleName")); // NOI18N
+
+ comboDefaultResource.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ comboDefaultResourceActionPerformed(evt);
+ }
+ });
+ pnlHostInfo.add(comboDefaultResource);
+
+ pnlBottomGutter.add(pnlHostInfo);
+
+ pnllSeems2BneededForCorrectResizing.add(pnlBottomGutter, java.awt.BorderLayout.SOUTH);
getContentPane().add(pnllSeems2BneededForCorrectResizing, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
private void btnToggleLocalViewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnToggleLocalViewActionPerformed
java.awt.EventQueue.invokeLater(new Runnable() {
-
@Override
public void run() {
pnlLocalTree.setVisible(btnToggleLocalView.isSelected());
@@ -2460,17 +2521,17 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
});
}//GEN-LAST:event_btnToggleLocalViewActionPerformed
-
+
private void btnIrodsTreeRefreshActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnIrodsTreeRefreshActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_btnIrodsTreeRefreshActionPerformed
-
+
private void btnUploadLocalRefreshActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUploadLocalRefreshActionPerformed
setUpUploadLocalFileSelectTree();
}//GEN-LAST:event_btnUploadLocalRefreshActionPerformed
-
+
private void btnUploadMoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUploadMoveActionPerformed
-
+
int fileType = iDropLiteApplet.uploadFile;
TreePath[] paths = fileUploadTree.getSelectionPaths();
Object selectedDrive = lstUploadLocalDrives.getSelectedValue();
@@ -2493,9 +2554,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
tm.addRow(rowData);
}
}
-
+
}//GEN-LAST:event_btnUploadMoveActionPerformed
-
+
private void btnUploadCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUploadCancelActionPerformed
DefaultTableModel tm = (DefaultTableModel) tblUploadTable1.getModel();
int numRows = tm.getRowCount();
@@ -2505,7 +2566,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
tm.fireTableRowsDeleted(0, numRows - 1);
}
}//GEN-LAST:event_btnUploadCancelActionPerformed
-
+
private void btnBrowseIRODSUploadDestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseIRODSUploadDestActionPerformed
IRODSFinderDialog finderDialog = new IRODSFinderDialog(true, iDropCore);
// get current size of applet
@@ -2527,20 +2588,20 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
finderDialog.dispose();
}//GEN-LAST:event_btnBrowseIRODSUploadDestActionPerformed
-
+
private void txtIRODSUploadDestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtIRODSUploadDestActionPerformed
btnUploadBeginImport.setEnabled(txtIRODSUploadDest.getText().length() > 0);
}//GEN-LAST:event_txtIRODSUploadDestActionPerformed
-
+
private void btnUploadBeginImportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUploadBeginImportActionPerformed
-
+
PutTransferRunner currentTransferRunner = null;
final List<UploadDataObj> sourceFiles = new ArrayList<UploadDataObj>();
// make sure IRODS destination is legal
final String targetPath = txtIRODSUploadDest.getText();
log.info("upload destination is: {}", targetPath);
-
+
try {
IRODSFileService irodsFS = new IRODSFileService(iDropCore.getIrodsAccount(), iDropCore.getIrodsFileSystem());
IRODSFile ifile = irodsFS.getIRODSFileForPath(targetPath);
@@ -2563,44 +2624,44 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
//this.filesInTable = rows; // reset to 0 in overall status callback when all files have been transferred
this.filesInTable = 0; // #833 ignore items in table that have already been uploaded
for (int row = 0; row < rows; row++) {
- // first check to see if the file has already been 100% uploaded, and if so ignore
- TransferProgressInfo progressInfo = (TransferProgressInfo)tblUploadTable1.getValueAt(row, 2);
- if (progressInfo.getPercentDone() < 100) {
- this.filesInTable++; // now set count of files to be uploaded
- if ((Integer) tblUploadTable1.getValueAt(row, 4) == iDropLiteApplet.uploadURL) { // this is an URL
- sourceFiles.add(new UploadDataObj((String) tblUploadTable1.getValueAt(row, 0), Boolean.TRUE));
- } else { // this is just a regular file or folder
- sourceFiles.add(new UploadDataObj(new File((String) tblUploadTable1.getValueAt(row, 0))));
- }
- }
+ // first check to see if the file has already been 100% uploaded, and if so ignore
+ TransferProgressInfo progressInfo = (TransferProgressInfo) tblUploadTable1.getValueAt(row, 2);
+ if (progressInfo.getPercentDone() < 100) {
+ this.filesInTable++; // now set count of files to be uploaded
+ if ((Integer) tblUploadTable1.getValueAt(row, 4) == iDropLiteApplet.uploadURL) { // this is an URL
+ sourceFiles.add(new UploadDataObj((String) tblUploadTable1.getValueAt(row, 0), Boolean.TRUE));
+ } else { // this is just a regular file or folder
+ sourceFiles.add(new UploadDataObj(new File((String) tblUploadTable1.getValueAt(row, 0))));
+ }
+ }
}
// set Upload button test to Cancel
// make sure there is stuff to upload
- if ( sourceFiles.size() > 0) {
- try {
- currentTransferRunner = new PutTransferRunner(applet, targetPath, sourceFiles);
- final Thread transferThread = new Thread(currentTransferRunner);
- log.info("launching transfer thread");
- // close so that transfer thread can grab account
- irodsFileSystem.closeAndEatExceptions();
- transferThread.start();
- //transferThread.join();
- } catch (Exception e) {
- log.error("exception choosings iRODS file");
- throw new IdropRuntimeException("exception choosing irods file", e);
- } finally {
- iDropCore.getIrodsFileSystem().closeAndEatExceptions();
- }
+ if (sourceFiles.size() > 0) {
+ try {
+ currentTransferRunner = new PutTransferRunner(applet, targetPath, sourceFiles);
+ final Thread transferThread = new Thread(currentTransferRunner);
+ log.info("launching transfer thread");
+ // close so that transfer thread can grab account
+ irodsFileSystem.closeAndEatExceptions();
+ transferThread.start();
+ //transferThread.join();
+ } catch (Exception e) {
+ log.error("exception choosings iRODS file");
+ throw new IdropRuntimeException("exception choosing irods file", e);
+ } finally {
+ iDropCore.getIrodsFileSystem().closeAndEatExceptions();
+ }
}
}
-
+
}//GEN-LAST:event_btnUploadBeginImportActionPerformed
-
+
private void btnBrowseDownloadTargetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseDownloadTargetActionPerformed
collectDownloadTarget();
}//GEN-LAST:event_btnBrowseDownloadTargetActionPerformed
-
+
private void bntBeginDownloadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bntBeginDownloadActionPerformed
GetTransferRunner currentTransferRunner = null;
final List<File> sourceFiles = new ArrayList<File>();
@@ -2608,7 +2669,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// make sure local destination is legal
final String targetPath = txtDownloadTarget.getText();
log.info("download destination is: {}", targetPath);
-
+
try {
if (!new File(targetPath).exists()) {
JOptionPane.showMessageDialog(this, "Please enter a valid local destination for download.");
@@ -2621,7 +2682,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
// now go through and process selected import files from table
if (!isTransferInProgress()) {
-
+
IRODSFileService irodsFS = null;
try {
irodsFS = new IRODSFileService(iDropCore.getIrodsAccount(), iDropCore.getIrodsFileSystem());
@@ -2661,21 +2722,27 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
}
}
}//GEN-LAST:event_bntBeginDownloadActionPerformed
-
+
private void btnUploadUrlActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUploadUrlActionPerformed
UploadFromURLDialog dlgUploadFromURL = new UploadFromURLDialog(this, true);
dlgUploadFromURL.setSize(495, 200);
dlgUploadFromURL.setLocationRelativeTo(iDropCore.findAppletParentFrame(this));
dlgUploadFromURL.setVisible(true);
}//GEN-LAST:event_btnUploadUrlActionPerformed
-
+
private void btnIdropWebModeTargetBrowseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnIdropWebModeTargetBrowseActionPerformed
collectDownloadTarget();
}//GEN-LAST:event_btnIdropWebModeTargetBrowseActionPerformed
-
+
private void btnIdropWebModeBeginDownloadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnIdropWebModeBeginDownloadActionPerformed
executeDownload();
}//GEN-LAST:event_btnIdropWebModeBeginDownloadActionPerformed
+
+ private void comboDefaultResourceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboDefaultResourceActionPerformed
+
+ String newResource = (String) comboDefaultResource.getSelectedItem();
+ this.getiDropCore().getIrodsAccount().setDefaultStorageResource(newResource);
+ }//GEN-LAST:event_comboDefaultResourceActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bntBeginDownload;
private javax.swing.JButton btnBrowseDownloadTarget;
@@ -2690,6 +2757,9 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
private javax.swing.JButton btnUploadLocalRefresh;
private javax.swing.JButton btnUploadMove;
private javax.swing.JButton btnUploadUrl;
+ private javax.swing.JComboBox comboDefaultResource;
+ private javax.swing.Box.Filler filler1;
+ private javax.swing.Box.Filler filler2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
@@ -2714,6 +2784,7 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
private javax.swing.JScrollPane jScrollPane5;
private javax.swing.JLabel lblCurrentFile;
private javax.swing.JLabel lblCurrentFileLabel;
+ private javax.swing.JLabel lblDefaultResource;
private javax.swing.JLabel lblTransferByteCounts;
private javax.swing.JLabel lblTransferFilesCounts;
private javax.swing.JLabel lblTransferStatusMessage;
@@ -2721,13 +2792,18 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
private javax.swing.JLabel lblTransferTypeLabel;
private javax.swing.JLabel lblUploadTotalFiles;
private javax.swing.JLabel lblUploadTotalSize;
+ private javax.swing.JLabel lblUserNameLabel;
+ private javax.swing.JLabel lblZone;
+ private javax.swing.JLabel lblZoneLabel;
private javax.swing.JList lstLocalDrives;
private javax.swing.JList lstUploadLocalDrives;
private javax.swing.JProgressBar pbIdropWebModeDownloadProgress;
+ private javax.swing.JPanel pnlBottomGutter;
private javax.swing.JPanel pnlDownloadButtons;
private javax.swing.JPanel pnlDownloadModeTarget;
private javax.swing.JPanel pnlDownloadProgressTable;
private javax.swing.JPanel pnlDrivesFiller;
+ private javax.swing.JPanel pnlHostInfo;
private javax.swing.JPanel pnlIRODSUploadBrowse;
private javax.swing.JPanel pnlIdropBottom;
private javax.swing.JPanel pnlIdropWebMode;
@@ -2784,36 +2860,37 @@ public class iDropLiteApplet extends javax.swing.JApplet implements TransferStat
private javax.swing.JTextField txtDownloadTarget;
private javax.swing.JTextField txtIRODSUploadDest;
private javax.swing.JTextField txtIdropWebModeDownloadTarget;
+ private javax.swing.JLabel userNameLabel;
// End of variables declaration//GEN-END:variables
@Override
public CallbackResponse transferAsksWhetherToForceOperation(String irodsAbsolutePath, boolean isCollection) {
-
- CallbackResponse response = CallbackResponse.YES_FOR_ALL;;
+
+ CallbackResponse response = CallbackResponse.YES_FOR_ALL;;
StringBuilder msg = new StringBuilder(isCollection ? "Collection '" : "Data Object '");
msg.append(irodsAbsolutePath);
msg.append("' already exists. Do you wish to overwrite?");
-
+
// create OptionsPane dialog and set default to YES_FOR_ALL
Object[] options = {"No to All", "No", "Yes to All", "Yes"};
- int answer = JOptionPane.showOptionDialog(this, msg, "Confirm Transfer Overwrite",
- JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
+ int answer = JOptionPane.showOptionDialog(this, msg, "Confirm Transfer Overwrite",
+ JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
javax.swing.UIManager.getIcon("OptionPane.questionIcon"), options, options[2]);
// return correct response for button selection
- switch(answer) {
- case 0:
- response = CallbackResponse.NO_FOR_ALL;
- break;
- case 1:
- response = CallbackResponse.NO_THIS_FILE;
- break;
- case 2:
- response = CallbackResponse.YES_FOR_ALL;
- break;
- case 3:
- response = CallbackResponse.YES_THIS_FILE;
- break;
+ switch (answer) {
+ case 0:
+ response = CallbackResponse.NO_FOR_ALL;
+ break;
+ case 1:
+ response = CallbackResponse.NO_THIS_FILE;
+ break;
+ case 2:
+ response = CallbackResponse.YES_FOR_ALL;
+ break;
+ case 3:
+ response = CallbackResponse.YES_THIS_FILE;
+ break;
}
return response;
diff --git a/idrop-lite/src/main/resources/org/irods/jargon/idrop/lite/Bundle.properties b/idrop-lite/src/main/resources/org/irods/jargon/idrop/lite/Bundle.properties
index 06840c3..127bb51 100644
--- a/idrop-lite/src/main/resources/org/irods/jargon/idrop/lite/Bundle.properties
+++ b/idrop-lite/src/main/resources/org/irods/jargon/idrop/lite/Bundle.properties
@@ -43,3 +43,9 @@ iDropLiteApplet.jLabel1.text=<html><p>Select a download location then click Begi
iDropLiteApplet.jLabel2.text=Destination:
iDropLiteApplet.bntBeginDownload.label=Download
iDropLiteApplet.jLabel3.text=Applet has been disconnected. Please reload.
+iDropLiteApplet.lblUserNameLabel.text=User Name:
+iDropLiteApplet.lblDefaultResource.text=Resource:
+iDropLiteApplet.lblZone.text=this is the zone
+iDropLiteApplet.lblZoneLabel.text=Zone:
+iDropLiteApplet.userNameLabel.text=usernamelabel
+iDropLiteApplet.lblDefaultResource.AccessibleContext.accessibleName=Resource:
diff --git a/idrop-swing/pom.xml b/idrop-swing/pom.xml
index ea9c12c..20d88eb 100644
--- a/idrop-swing/pom.xml
+++ b/idrop-swing/pom.xml
@@ -1,4 +1,3 @@
-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.irods</groupId>
@@ -233,5 +232,40 @@
</plugin>
</plugins>
+ <pluginManagement>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-antrun-plugin
+ </artifactId>
+ <versionRange>
+ [1.3,)
+ </versionRange>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore />
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
</build>
</project>
diff --git a/idrop-swing/release_notes.txt b/idrop-swing/release_notes.txt
index a7a90b1..1b53861 100644
--- a/idrop-swing/release_notes.txt
+++ b/idrop-swing/release_notes.txt
@@ -1,11 +1,13 @@
*'''Project''': iDrop-swing- Desktop iRODS transfer manager
-*'''Date''': 10/23/2012
-*'''Release Version''': 1.0.2-beta1
-*'''git tag''': 1.0.2-beta1
+*'''Date''': xx/xx/xx
+*'''Release Version''': 1.0.X
+*'''git tag''': 1.0.X
==News==
+post 1.0.2 release snapshot (work in progress)
+
This is the iDrop desktop transfer manager client. iDrop runs in the system tray of your favorite operating system, and can manage transfers between your computer and iRODS, and manage data once in iRODS.
iDrop also automates synchronization between your desktop and iRODS. There is an initial local -> iRODS backup capability, with automatic version of files within iRODS. Other modes are in development
@@ -22,15 +24,13 @@ iDrop-swing uses Maven for dependency management. See the pom.xml file for refe
Note that the following bug and feature requests are logged in GForge with related commit information [[https://code.renci.org/gf/project/irodsidrop/tracker/]]
==Features==
+*[#1092] add reconnect option to iDrop
+**Added preferences panel option and idrop.properties to set reconnect to 'true'. Emulates -T option for put/get
-*[#870] jargon support for PAM
-** added support for PAM logins
-
-*[#1011] add a dedicated doAuthentication method to irodsAccessObjectFactory
==Bug Fixes==
-
-
+* [#1093] Broken pipe error did not propogate in parallel transfer
+**Minor fixes to better propogate errors to queue manager
==Outstanding Issues==
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.form
index bbe7b36..0fe055a 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.form
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.form
@@ -425,6 +425,20 @@
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="checkAllowReroutingItemStateChanged"/>
</Events>
</Component>
+ <Component class="javax.swing.JCheckBox" name="checkConnectionRestart">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/desktop/systraygui/Bundle.properties" key="IDROPConfigurationPanel.checkConnectionRestart.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/irods/jargon/idrop/desktop/systraygui/Bundle.properties" key="IDROPConfigurationPanel.checkConnectionRestart.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ <Events>
+ <EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="checkConnectionRestartItemStateChanged"/>
+ <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="checkConnectionRestartActionPerformed"/>
+ </Events>
+ </Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="plnPipelineConfiguration">
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java
index 51f8b8b..e395fb6 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/IDROPConfigurationPanel.java
@@ -168,6 +168,7 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog {
checkLogSuccessfulTransfer = new javax.swing.JCheckBox();
checkVerifyChecksumOnTransfer = new javax.swing.JCheckBox();
checkAllowRerouting = new javax.swing.JCheckBox();
+ checkConnectionRestart = new javax.swing.JCheckBox();
plnPipelineConfiguration = new javax.swing.JPanel();
lblIrodsSocketTimeout = new javax.swing.JLabel();
spinnerIrodsSocketTimeout = new javax.swing.JSpinner();
@@ -457,6 +458,20 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog {
});
pnlTransferManagement.add(checkAllowRerouting);
+ checkConnectionRestart.setText(org.openide.util.NbBundle.getMessage(IDROPConfigurationPanel.class, "IDROPConfigurationPanel.checkConnectionRestart.text")); // NOI18N
+ checkConnectionRestart.setToolTipText(org.openide.util.NbBundle.getMessage(IDROPConfigurationPanel.class, "IDROPConfigurationPanel.checkConnectionRestart.toolTipText")); // NOI18N
+ checkConnectionRestart.addItemListener(new java.awt.event.ItemListener() {
+ public void itemStateChanged(java.awt.event.ItemEvent evt) {
+ checkConnectionRestartItemStateChanged(evt);
+ }
+ });
+ checkConnectionRestart.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ checkConnectionRestartActionPerformed(evt);
+ }
+ });
+ pnlTransferManagement.add(checkConnectionRestart);
+
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
@@ -1270,6 +1285,29 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog {
idropGui.reinitializeForChangedIRODSAccount();
}//GEN-LAST:event_comboPrefsDefaultResourceActionPerformed
+ private void checkConnectionRestartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkConnectionRestartActionPerformed
+
+
+
+
+
+ }//GEN-LAST:event_checkConnectionRestartActionPerformed
+
+ private void checkConnectionRestartItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_checkConnectionRestartItemStateChanged
+ boolean isSelected = false;
+ if (evt.getStateChange() == ItemEvent.SELECTED) {
+ isSelected = true;
+ }
+ log.info("updating connection restart to:{}", isSelected);
+ try {
+ idropCore.getIdropConfigurationService().updateConfig(IdropConfigurationService.IRODS_CONNECTION_RESTART, Boolean.toString(isSelected));
+ idropCore.getIdropConfigurationService().updateJargonPropertiesBasedOnIDROPConfig();
+ } catch (Exception ex) {
+ log.error("error setting property", ex);
+ throw new IdropRuntimeException(ex);
+ }
+ }//GEN-LAST:event_checkConnectionRestartItemStateChanged
+
private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}
@@ -1690,6 +1728,7 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog {
private javax.swing.ButtonGroup buttonGroupSynchMode;
private javax.swing.JCheckBox checkAllowParallelTransfers;
private javax.swing.JCheckBox checkAllowRerouting;
+ private javax.swing.JCheckBox checkConnectionRestart;
private javax.swing.JCheckBox checkLogSuccessfulTransfer;
private javax.swing.JCheckBox checkShowFileProgress;
private javax.swing.JCheckBox checkShowGUI;
@@ -1783,6 +1822,7 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog {
spinnerIrodsParallelSocketTimeout.setValue(idropConfig.getIrodsParallelConnectionTimeout());
spinnerIrodsMaxParallelThreads.setValue(idropConfig.getIrodsParallelTransferMaxThreads());
checkAllowParallelTransfers.setSelected(idropConfig.isUseParallelTransfers());
+ checkConnectionRestart.setSelected(idropConfig.isConnectionRestart());
checkUseNIOForParallelTransfers.setSelected(idropConfig.isUseNIOForParallelTransfers());
txtInternalInputBufferSize.setText(String.valueOf(idropConfig.getInternalInputStreamBufferSize()));
txtInternalOutputBufferSize.setText(String.valueOf(idropConfig.getInternalOutputStreamBufferSize()));
@@ -1843,7 +1883,7 @@ public class IDROPConfigurationPanel extends javax.swing.JDialog {
throw new IdropRuntimeException("error getting resource list", ex);
}
}
- // check to see if defualt resource editing is allowed
+ // check to see if default resource editing is allowed
String allowEdit = idropCore.getIdropConfig().getPropertyForKey(IdropConfigurationService.IDROP_ENABLE_RESC_EDIT);
if (allowEdit != null && allowEdit.equals("false")) {
comboPrefsDefaultResource.setEnabled(false);
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.form b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.form
index 58eeb13..dd75723 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.form
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.form
@@ -1,4 +1,4 @@
-<?xml version="1.1" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.6" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
<NonVisualComponents>
@@ -79,9 +79,6 @@
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
</Properties>
<SubComponents>
<Menu class="javax.swing.JMenu" name="jMenu1">
@@ -171,11 +168,6 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlCenter">
- <Properties>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
@@ -191,18 +183,12 @@
<Properties>
<Property name="dividerLocation" type="int" value="300"/>
<Property name="orientation" type="int" value="0"/>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlTop">
<Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 0]"/>
</Property>
@@ -216,14 +202,6 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlToolbar">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="North"/>
@@ -252,12 +230,6 @@
<Properties>
<Property name="floatable" type="boolean" value="false"/>
<Property name="rollover" type="boolean" value="true"/>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="requestFocusEnabled" type="boolean" value="false"/>
</Properties>
<Constraints>
@@ -276,15 +248,6 @@
<Property name="toolTipText" type="java.lang.String" value="Purge all complete and enqueued transfers"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -297,15 +260,6 @@
<Property name="toolTipText" type="java.lang.String" value="Purge all completed, successful transfers"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -320,15 +274,6 @@
<Property name="toolTipText" type="java.lang.String" value="Delete the selected transfer"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -341,15 +286,6 @@
<Property name="toolTipText" type="java.lang.String" value="Cancel the selected transfer"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -362,15 +298,6 @@
<Property name="toolTipText" type="java.lang.String" value="Restart the selected transfer from the current checkpoint"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -383,15 +310,6 @@
<Property name="toolTipText" type="java.lang.String" value="Resubmit the selected transfer with no restart"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -405,15 +323,6 @@
<Property name="text" type="java.lang.String" value="Refresh View"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -425,15 +334,6 @@
<Property name="text" type="java.lang.String" value="Auto Refresh View"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
- <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
@@ -449,9 +349,6 @@
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="requestFocusEnabled" type="boolean" value="false"/>
</Properties>
<AuxValues>
@@ -496,9 +393,6 @@
</Container>
<Container class="javax.swing.JTabbedPane" name="tabDetails">
<Properties>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="requestFocusEnabled" type="boolean" value="false"/>
</Properties>
<Constraints>
@@ -533,9 +427,6 @@
<BevelBorder/>
</Border>
</Property>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="requestFocusEnabled" type="boolean" value="false"/>
</Properties>
<Constraints>
@@ -547,14 +438,6 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlTransferOverview">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
@@ -564,14 +447,6 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlTransferStatus">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
@@ -581,14 +456,6 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlTransferType">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
@@ -617,14 +484,6 @@
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="pnlTransferFileCounts">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
@@ -651,9 +510,6 @@
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[0, 0]"/>
</Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
@@ -683,11 +539,6 @@
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="jPanel1">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="South"/>
@@ -731,12 +582,6 @@
<Container class="javax.swing.JPanel" name="pnlTransferInfoBasicStats">
<Properties>
<Property name="focusable" type="boolean" value="false"/>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
@@ -1108,12 +953,6 @@
</Container>
<Container class="javax.swing.JPanel" name="pnlTransferDetailsTable">
<Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="requestFocusEnabled" type="boolean" value="false"/>
</Properties>
<Constraints>
@@ -1127,14 +966,6 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlViewRadio">
- <Properties>
- <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
- </Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="North"/>
@@ -1187,9 +1018,6 @@
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="null"/>
</Property>
- <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
- <Dimension value="null"/>
- </Property>
<Property name="requestFocusEnabled" type="boolean" value="false"/>
</Properties>
<Constraints>
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.java
index 2c69f7d..fc72904 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.java
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/QueueManagerDialog.java
@@ -1385,7 +1385,6 @@ public class QueueManagerDialog extends javax.swing.JDialog implements ListSelec
lblTransferType1.setText(localIRODSTransfer.getTransferType().toString());
-
lblCountSoFar.setText(String.valueOf(localIRODSTransfer.getTotalFilesTransferredSoFar()));
lblCountOutOf.setText(String.valueOf(localIRODSTransfer.getTotalFilesCount()));
lblTransferFilesCounts.setText("Files: " + localIRODSTransfer.getTotalFilesTransferredSoFar() + " / " + localIRODSTransfer.getTotalFilesCount());
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java
index a90599e..4d1ed76 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationService.java
@@ -55,8 +55,8 @@ public interface IdropConfigurationService {
public static final String IRODS_IO_LOCAL_OUTPUT_STREAM_BUFFER_SIZE = "jargon.io.local.output.stream.buffer.size";
public static final String IRODS_IO_PUT_BUFFER_SIZE = "jargon.put.buffer.size";
public static final String IRODS_IO_GET_BUFFER_SIZE = "jargon.get.buffer.size";
- public static final String IDROP_ENABLE_RESC_EDIT = "idrop.settings.enable_default_resc_edit";
-
+ public static final String IRODS_CONNECTION_RESTART = "transfer.reconnect";
+ public static final String IDROP_ENABLE_RESC_EDIT = "idrop.settings.enable_default_resc_edit";
Properties bootstrapConfigurationAndMergePropertiesFromLocalAndClasspath() throws IdropException;
/**
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java
index 4242ad2..fe525da 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/services/IdropConfigurationServiceImpl.java
@@ -325,6 +325,7 @@ public class IdropConfigurationServiceImpl implements IdropConfigurationService
idropConfig.setProperty(IdropConfigurationService.IRODS_PARALLEL_USE_NIO, String.valueOf(jargonProperties.isUseNIOForParallelTransfers()));
idropConfig.setProperty(IdropConfigurationService.IRODS_PARALLEL_USE_PARALLEL, String.valueOf(jargonProperties.isUseParallelTransfer()));
idropConfig.setProperty(IdropConfigurationService.IRODS_PARALLEL_USE_POOL, String.valueOf(jargonProperties.isUseTransferThreadsPool()));
+ idropConfig.setProperty(IdropConfigurationService.IRODS_CONNECTION_RESTART, String.valueOf(jargonProperties.isReconnect()));
}
}
@@ -352,6 +353,7 @@ public class IdropConfigurationServiceImpl implements IdropConfigurationService
newProps.setSendInputStreamBufferSize(idropCore.getIdropConfig().getSendInputStreamBufferSize());
newProps.setUseParallelTransfer(idropCore.getIdropConfig().isUseParallelTransfers());
newProps.setUseNIOForParallelTransfers(idropCore.getIdropConfig().isUseNIOForParallelTransfers());
+ newProps.setReconnect(idropCore.getIdropConfig().isConnectionRestart());
idropCore.getIrodsFileSystem().getIrodsSession().setJargonProperties(newProps);
}
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/IdropConfig.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/IdropConfig.java
index 7ffc9d3..5371e3d 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/IdropConfig.java
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/IdropConfig.java
@@ -475,4 +475,15 @@ public class IdropConfig {
return propInt;
}
+
+ public boolean isConnectionRestart() {
+ boolean propBoolean = false;
+ String propString = idropProperties.getProperty(IdropConfigurationService.IRODS_CONNECTION_RESTART);
+
+ if (propString != null && propString.equals("true")) {
+ propBoolean = true;
+ }
+
+ return propBoolean;
+ }
}
diff --git a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java
index 237dd59..3547cc8 100644
--- a/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java
+++ b/idrop-swing/src/main/java/org/irods/jargon/idrop/desktop/systraygui/utils/Version.java
@@ -1,5 +1,5 @@
package org.irods.jargon.idrop.desktop.systraygui.utils;
public final class Version {
public static String VERSION="2.0.0-SNAPSHOT";
- public static String BUILD_TIME="20130205-1549";
+ public static String BUILD_TIME="20130207-1818";
}
diff --git a/idrop-swing/src/main/resources/idrop.properties b/idrop-swing/src/main/resources/idrop.properties
index 1bf7055..5719802 100644
--- a/idrop-swing/src/main/resources/idrop.properties
+++ b/idrop-swing/src/main/resources/idrop.properties
@@ -65,7 +65,6 @@ jargon.io.local.input.stream.buffer.size=16384
jargon.put.buffer.size=4194304
# size of buffer used in get operations (file segment size per call to DataObjInp)
jargon.get.buffer.size=4194304
-
#allow resource redirects (redirect transfers to resource server containing file)
transfer.allow.redirects=false
#compute a checksum for every file put to iRODS (does not do a verification/comparison)
@@ -73,10 +72,13 @@ transfer.compute.checksum=false
#compute a checksum for every file put/get to iRODS and verify
transfer.computeandvalidate.checksum=false
#send within-file status call-backs on transfers (slight performance penalty, but allows monitoring of file progress if 'true'
-transfer.intra.file.callbacks=false
+transfer.intra.file.callbacks=true
#do not allow parallel trasfers at all
transfer.use.parallel=true
#use NIO variant for parallel transfers (use java nio transferTo between the local file system and iRODS) - EXPERIMENTAL
transfer.use.nio.for.parallel=false
#thread cap for parallel transfers, can interact with pool settings above, set to 0 for no max, transfer.use.parallel overrides this
transfer.max.parallel.threads=4
+#transfer reconnect setting for puts/gets will renew socket connections as in the -T icommand option
+transfer.reconnect=true
+
diff --git a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties
index 7318e94..0d8eaa9 100644
--- a/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties
+++ b/idrop-swing/src/main/resources/org/irods/jargon/idrop/desktop/systraygui/Bundle.properties
@@ -115,6 +115,8 @@ IDROPConfigurationPanel.lblZone.AccessibleContext.accessibleDescription=Zone of
IDROPConfigurationPanel.lblResource.AccessibleContext.accessibleDescription=Current default resource
IDROPConfigurationPanel.lblUserName.AccessibleContext.accessibleName=User name of currently logged in grid
IDROPConfigurationPanel.lblResource.text=resource
+IDROPConfigurationPanel.checkConnectionRestart.text=Connection Restart
+IDROPConfigurationPanel.checkConnectionRestart.toolTipText=Periodically restart the connection, equivalent to the -T option
iDrop.btnMainToolbarRefresh.text=Refresh
iDrop.btnMainToolbarDownload.text=Download
iDrop.btnMainToolbarUpload.text=Upload
diff --git a/idrop-web-selenium/login_and_basic_name b/idrop-web-selenium/login_and_basic_name
new file mode 100644
index 0000000..aba5f15
--- /dev/null
+++ b/idrop-web-selenium/login_and_basic_name
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8080/" />
+<title>login_and_basic_name</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">login_and_basic_name</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/idrop-web2/login/login</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>id=host</td>
+ <td>localhost</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>id=zone</td>
+ <td>test1</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>id=user</td>
+ <td>test1</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>id=password</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>id=login</td>
+ <td></td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>link=Browse</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td></td>
+ <td>5000</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>xpath=(//a[contains(text(),'test1')])</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td></td>
+ <td>5000</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>xpath=(//a[contains(text(),'home')])</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>xpath=(//a[contains(text(),'test1')])</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>id=menuInfoView</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td></td>
+ <td>5000</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>id=metadataTab</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>id=permissionTab</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>id=ticketTab</td>
+ <td></td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>link=Profile</td>
+ <td></td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>id=shoppingCartToolbarLabel</td>
+ <td></td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>link=Home</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Account ( test1:test1 )</td>
+ <td></td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>id=logoutButton</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/idrop-web/COPYING b/idrop-web/COPYING
new file mode 100644
index 0000000..6c55f07
--- /dev/null
+++ b/idrop-web/COPYING
@@ -0,0 +1 @@
+Licensing stuff here.
diff --git a/idrop-web/LICENSE.txt b/idrop-web/LICENSE.txt
index 219cabb..b61d6a7 100644..100755
--- a/idrop-web/LICENSE.txt
+++ b/idrop-web/LICENSE.txt
@@ -1,3 +1,31 @@
+License
+iRODS Copyright and Licensing
+
+iRODS is open source software released under a BSD License, see license text in "iRODS License Terms and Conditions" below.
+The BSD license has been described in very general terms as allowing you to do whatever you want to with the software and
+source code as long as you acknowledge who wrote it and that, as with any open source software, there is no warranty and you're using the code "as is."
+In the spirit of collaborative open source software, the iRODS community encourages you to communicate with us, letting us know what features you like,
+features that would be useful, problems, bugs, suggestions, etc., and to perhaps contribute source code.
+The iRODS community has formed the Data Intensive Cyberinfrastructure Foundation, a 501(c)(3) nonprofit corporation established to serve
+ as the home of the iRODS open source community over the long term. If you choose to contribute new code, you'll receive full acknowledgment. All you do is complete the Contributor's Agreement, under which you retain copyright ownership
+ in your code but give a free license to the iRODS nonprofit foundation, allowing your code to be integrated into iRODS and in turn released under the BSD license.
+Note: The above text is an educational overview of iRODS open source licensing, and not intended as legal advice nor is it part of the iRODS license agreement, which is below. As always, for legal advice consult an attorney.
+
+iRODS License Terms and Conditions Notice
+
+Copyright (c) 2005-2011, Regents of the University of California, the University of North Carolina, and the Data Intensive Cyberinfrastructure Foundation
+All rights reserved.
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+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.
+Neither the name of the University of California, San Diego (UCSD) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT
+OWNER 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.
+
+
JQuery License info
========================
Copyright (c) 2011 Luca Ongaro
diff --git a/idrop-web/README b/idrop-web/README
new file mode 100644
index 0000000..c3ee491
--- /dev/null
+++ b/idrop-web/README
@@ -0,0 +1,19 @@
+
+To run iDrop from the command line & after a Maven build, run the following
+
+ cd idrop-swing
+ mvn clean install
+ mvn exec:java -Dexec.mainClass=org.irods.jargon.idrop.desktop.systraygui.IDROPDesktop
+
+
+To skip tests when building:
+
+ cd idrop-swing
+ mvn clean install -Dmaven.test.skip=true
+ mvn exec:java -Dexec.mainClass=org.irods.jargon.idrop.desktop.systraygui.IDROPDesktop
+
+
+To generate a single distributable jar of the iDROP swing binaries:
+
+ cd idrop-swing
+ mvn assembly:assembly -Dmaven.test.skip=true
diff --git a/idrop-web/README.txt b/idrop-web/README.txt
index 4d2a498..4d2a498 100644..100755
--- a/idrop-web/README.txt
+++ b/idrop-web/README.txt
diff --git a/idrop-web/application.properties b/idrop-web/application.properties
index 11609d6..5a64f1f 100644
--- a/idrop-web/application.properties
+++ b/idrop-web/application.properties
@@ -1,6 +1,8 @@
#Grails Metadata file
-#Fri Oct 12 13:48:14 EDT 2012
-app.grails.version=2.1.0
-app.name=idrop-web
+
+app.grails.version=2.1.1
+app.name=idrop-web2
app.servlet.version=2.5
-app.version=1.0.2
+app.version=2.0.0
+plugins.hibernate=2.1.1
+plugins.tomcat=2.1.1
diff --git a/idrop-web/build.sh b/idrop-web/build.sh
new file mode 100644
index 0000000..8845935
--- /dev/null
+++ b/idrop-web/build.sh
@@ -0,0 +1,217 @@
+#!/bin/bash
+#requirements:
+# Jargon
+# Java SDK 1.6+
+# Maven 3+
+# Grails
+# EPM packager
+
+SCRIPTNAME=`basename $0`
+
+# define which idrop-lite applet to use
+IDROP_LITE_APPLET=idrop-lite-1.0.2-SNAPSHOT-jar-with-dependencies.jar
+
+# in case we need to download maven
+MAVENVER=3.0.4
+MAVENFILE=apache-maven-$MAVENVER
+MAVENDOWNLOAD=http://apache.cs.utah.edu/maven/maven-3/$MAVENVER/binaries/$MAVENFILE-bin.zip
+
+# in case we need to download grails
+GRAILSVER=2.1.0
+GRAILSFILE=grails-$GRAILSVER
+GRAILSDOWNLOAD=http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/$GRAILSFILE.zip
+
+
+# define usage
+USAGE="
+
+Usage: $SCRIPTNAME [<proxy hostname> <proxy portnum>]
+
+Example:
+$SCRIPTNAME www.myhost.com 80
+"
+
+# check for correct num of args
+if [[ $# -gt 0 && $# -lt 2 || $# -gt 2 ]]; then
+ echo $USAGE
+ exit 1
+fi
+PROXYHOST=$1
+PROXYPORT=$2
+
+# setup MAVEN settings file
+UGLYSETTINGSFILESTRING='
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
+ http://maven.apache.org/xsd/settings-1.0.0.xsd">
+ <proxies>
+ <proxy>
+ <active>true</active>
+ <protocol>http</protocol>
+ <host>'$PROXYHOST'</host>
+ <port>'$PROXYPORT'</port>
+ </proxy>
+ </proxies>
+</settings>'
+
+
+# get into the correct directory
+BUILDDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+cd $BUILDDIR
+
+
+# check to make sure mvn, grails, and epm commands are in path
+MAVEN=`which mvn`
+if [[ "$?" != "0" || `echo $MAVEN | awk '{print $1}'` == "no" ]] ; then
+ echo "Apache Maven required to build project - downloading from $MAVENDOWNLOAD"
+
+ # clean up any old one first
+ rm -rf $MAVENFILE*
+
+ # download maven
+ wget $MAVENDOWNLOAD
+
+ # install and setup environment
+ unzip $MAVENFILE-bin.zip
+ export M2_HOME=$BUILDDIR/$MAVENFILE
+ export M2=$M2_HOME/bin
+ export PATH=$M2:$PATH
+
+ # create the .m2 dir
+ mvn --version > /dev/null 2>&1
+
+ # if proxy specified set it up in settings.xml
+ if [[ $PROXYHOST ]]; then
+ # save old maven settings file if one exists
+ mv ~/.m2/settings.xml save_settings.xml > /dev/null 2>&1
+ echo $UGLYSETTINGSFILESTRING > ~/.m2/settings.xml
+ fi
+else
+ MAVENVERSION=`mvn --version`
+ echo "Detected maven [$MAVEN] version[$MAVENVERSION]"
+fi
+
+GRAILS=`which grails`
+if [[ "$?" != "0" || `echo $GRAILS | awk '{print $1}'` == "no" ]] ; then
+ echo "GRAILS required to build project - downloading from $GRAILSDOWNLOAD"
+
+ # clean up any old one first
+ rm -rf $GRAILSFILE*
+
+ # download grails
+ wget $GRAILSDOWNLOAD
+
+ # install and setup environment
+ unzip $GRAILSFILE.zip
+ export GRAILS_HOME=$BUILDDIR/$GRAILSFILE
+ export PATH=$GRAILS_HOME/bin:$PATH
+
+ # setup proxy if needed
+ if [[ $PROXYHOST ]]; then
+ grails add-proxy idrop_proxy --host=$PROXYHOST --port=$PROXYPORT
+ grails set-proxy idrop_proxy
+ fi
+else
+ GRAILSVERSION=`grails --version`
+ echo "Detected grails [$GRAILS] version[$GRAILSVERSION]"
+fi
+
+# now get our version of EPM
+RENCIEPM="epm42-renci.tar.gz"
+rm -rf epm
+rm -f $RENCIEPM
+wget ftp://ftp.renci.org/pub/e-irods/build/$RENCIEPM
+tar -xf $RENCIEPM
+cd $BUILDDIR/epm
+echo "Configuring EPM"
+./configure > /dev/null
+if [ "$?" != "0" ]; then
+ exit 1
+fi
+echo "Building EPM"
+if [ "$?" != "0" ]; then
+ exit 1
+fi
+make > /dev/null
+
+cd $BUILDDIR
+
+# build idrop swing first
+echo "Building iDrop Swing ..."
+cd ../idrop-swing
+#mvn assembly:assembly -Dmaven.test.skip=true
+# TODO: jar (JNLP) created is signed and expire is 6 months????
+mvn clean package webstart:jnlp-inline -Dmaven.test.skip=true
+RETVAL=$?
+if [ $RETVAL -eq 1 ]; then
+ echo "iDrop Swing Build Failed - Exiting"
+ echo "Packaging Failed"
+ exit 1
+fi
+
+# now build idrop-lite
+echo "Building iDrop Lite ..."
+cd ../idrop-lite
+mvn clean assembly:assembly -Dmaven.test.skip=true
+RETVAL=$?
+if [ $RETVAL -eq 1 ]; then
+ echo "iDrop Lite Build Failed - Exiting"
+ echo "Packaging Failed"
+ exit 1
+fi
+
+# now build grails war file
+echo "Building iDrop Web ..."
+cd ../idrop-web
+grails war idrop-web.war
+RETVAL=$?
+if [ $RETVAL -eq 1 ]; then
+ echo "iDrop Web Build Failed - Exiting"
+ echo "Packaging Failed"
+ exit 1
+fi
+
+#create EPM .list file
+# available from: http://fossies.org/unix/privat/epm-4.2-source.tar.gz
+# md5sum 3805b1377f910699c4914ef96b273943
+
+echo "Creating Package ..."
+cd ../packaging
+if [ -d idrop-web ]; then
+ rm -rf idrop-web
+fi
+
+if [ -f idrop-web.list ]; then
+ rm idrop-web.list
+fi
+
+mkdir idrop-web
+cd idrop-web
+cp ../../idrop-web/idrop-web.war .
+unzip idrop-web.war
+mkdir idrop-web-extras
+# get idrop-lite applet
+cp ../../idrop-lite/target/$IDROP_LITE_APPLET idrop-web-extras
+# get idrop-swing app
+cp -r ../../idrop-swing/target/jnlp/* idrop-web-extras
+rm -f idrop-web.war
+cd ..
+
+mkepmlist -u idropweb -g idropweb --prefix /var/lib/idrop-web idrop-web > idrop-web.list
+sed 's/\$/$$/g' idrop-web.list > tmp.list
+cat idrop-web.list.template tmp.list > idrop-web.list
+rm tmp.list
+
+if [ -f "/etc/redhat-release" ]; then # CentOS and RHEL and Fedora
+ echo "Running EPM :: Generating RPM"
+ ./epm/epm -f rpm idrop-web RPM=true idrop-web.list
+elif [ -f "/etc/SuSE-release" ]; then # SuSE
+ echo "Running EPM :: Generating RPM"
+ ./epm/epm -f rpm idrop-web RPM=true idrop-web.list
+elif [ -f "/etc/lsb-release" ]; then # Ubuntu
+ echo "Running EPM :: Generating DEB"
+ ./epm/epm -a amd64 -f deb idrop-web DEB=true idrop-web.list
+elif [ -f "/usr/bin/sw_vers" ]; then # MacOSX
+ echo "TODO: generate package for MacOSX"
+fi
diff --git a/idrop-web/designnotes.txt b/idrop-web/designnotes.txt
index 74c36a8..143a6ed 100644..100755
--- a/idrop-web/designnotes.txt
+++ b/idrop-web/designnotes.txt
@@ -1,3 +1,8 @@
+http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html
+
+
+
+
http://codebrewery.blogspot.com/2011/01/memu-simple-css-javascript-jquery-menu.html
http://coffeescripter.com/code/ad-gallery/
http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html
diff --git a/idrop-web/grails-app/conf/BootStrap.groovy b/idrop-web/grails-app/conf/BootStrap.groovy
index 2d18878..2d18878 100644..100755
--- a/idrop-web/grails-app/conf/BootStrap.groovy
+++ b/idrop-web/grails-app/conf/BootStrap.groovy
diff --git a/idrop-web/grails-app/conf/BuildConfig.groovy b/idrop-web/grails-app/conf/BuildConfig.groovy
index d4dfed3..7a45764 100644..100755
--- a/idrop-web/grails-app/conf/BuildConfig.groovy
+++ b/idrop-web/grails-app/conf/BuildConfig.groovy
@@ -29,16 +29,12 @@ grails.project.dependency.resolution = {
test 'org.mockito:mockito-all:1.8.1'
compile 'commons-io:commons-io:2.1'
provided 'junit:junit:4.8.1'
- compile ('org.irods.jargon:jargon-core:3.2.1-SNAPSHOT') { excludes ([group:'org.jglobus'])}
+ compile ('org.irods.jargon:jargon-core:3.3.0-SNAPSHOT') { excludes ([group:'org.jglobus'])}
//compile 'org.irods.jargon:jargon-security:3.2.0-SNAPSHOT'
- compile ('org.irods.jargon:jargon-data-utils:3.2.1-SNAPSHOT') { excludes ([group:'org.jglobus'])}
- compile ('org.irods.jargon:jargon-ticket:3.2.1-SNAPSHOT') { excludes ([group:'org.jglobus'])}
- compile ('org.irods.jargon:jargon-user-profile:3.2.1-SNAPSHOT') { excludes ([group:'org.jglobus'])}
- compile ('org.irods.jargon:jargon-user-tagging:3.2.1-SNAPSHOT') { excludes ([group:'org.jglobus'])}
- /*compile 'org.springframework.security:spring-security-core:3.0.5.RELEASE'
- compile 'org.springframework.security:spring-security-web:3.0.5.RELEASE'
- compile 'org.springframework.security:spring-security-config:3.0.5.RELEASE'
- compile 'org.springframework:spring-web:3.0.5.RELEASE'*/
+ compile ('org.irods.jargon:jargon-data-utils:3.3.0-SNAPSHOT') { excludes ([group:'org.jglobus'])}
+ compile ('org.irods.jargon:jargon-ticket:3.3.0-SNAPSHOT') { excludes ([group:'org.jglobus'])}
+ compile ('org.irods.jargon:jargon-user-profile:3.3.0-SNAPSHOT') { excludes ([group:'org.jglobus'])}
+ compile ('org.irods.jargon:jargon-user-tagging:3.3.0-SNAPSHOT') { excludes ([group:'org.jglobus'])}
provided 'javax.servlet:servlet-api:2.5'
compile 'org.jsoup:jsoup:0.2.2'
diff --git a/idrop-web/grails-app/conf/Config.groovy b/idrop-web/grails-app/conf/Config.groovy
index 8683c5b..71545df 100644..100755
--- a/idrop-web/grails-app/conf/Config.groovy
+++ b/idrop-web/grails-app/conf/Config.groovy
@@ -1,6 +1,5 @@
-
grails.config.locations = [
- "file:/etc/idrop-web/idrop-web-config.groovy"
+ "file:/etc/idrop-web/idrop-web-config2.groovy"
]
/*
@@ -19,7 +18,8 @@ environments {
production { grails.serverURL = "http://iren-web.renci.org:8080/${appName}" }
production { grails.serverURL = "http://srbbrick15.ucsd.edu:1525//${appName}" }
production { grails.serverURL = "http://www.irods.org" } */2
- production { grails.serverURL = "http://edit.your.server.info.in.your.etc.file.or.update.the.groovy.config" }
+ production {
+ grails.serverURL = "http://iren-web.renci.org:8080/${appName}" }
development { grails.serverURL = "http://localhost:8080/${appName}" }
test { grails.serverURL = "http://localhost:8080/${appName}" }
}
@@ -72,7 +72,9 @@ idrop.config.idrop.jnlp="http://iren-web.renci.org/idrop-release/idrop.jnlp"
// do I support tickets? This determies whether the ticket feature is available via the interface, it also requires ticket support in iRODS itself (version 3.1+)
idrop.config.use.tickets=true
idrop.config.max.thumbnail.size.mb=20
-idrop.config.use.userprofile=false
+idrop.config.use.userprofile=true
+// do I support sharing? Requires target server to have specific query support and sharing queries loaded from jargon-user-tagging
+idrop.config.use.sharing=true
/*
* Some properties may be set in an external configuration file, as configured below
@@ -180,11 +182,12 @@ log4j = {
'org.hibernate',
'net.sf.ehcache.hibernate'
- warn 'org.irods.mydrop'
+ //info 'org.irods.mydrop'
info 'org.irods.jargon'
+
warn 'org.irods.jargon.spring.security'
warn 'org.springframework'
- info 'grails.app'
+ debug 'grails.app'
warn 'org.mortbay.log',
'grails.app.controller',
diff --git a/idrop-web/grails-app/conf/DataSource.groovy b/idrop-web/grails-app/conf/DataSource.groovy
index 89a94e5..89a94e5 100644..100755
--- a/idrop-web/grails-app/conf/DataSource.groovy
+++ b/idrop-web/grails-app/conf/DataSource.groovy
diff --git a/idrop-web/grails-app/conf/SecurityFilters.groovy b/idrop-web/grails-app/conf/SecurityFilters.groovy
index bc2a561..bc2a561 100644..100755
--- a/idrop-web/grails-app/conf/SecurityFilters.groovy
+++ b/idrop-web/grails-app/conf/SecurityFilters.groovy
diff --git a/idrop-web/grails-app/conf/UrlMappings.groovy b/idrop-web/grails-app/conf/UrlMappings.groovy
index 51875b7..dfb67f0 100644..100755
--- a/idrop-web/grails-app/conf/UrlMappings.groovy
+++ b/idrop-web/grails-app/conf/UrlMappings.groovy
@@ -11,7 +11,7 @@ class UrlMappings {
"/$controller/$action?/$id?"{ constraints {
// apply constraints here
} }
-
+
"/file/**" (controller:"file", action:"index"){
name = { request.requestURI }
}
diff --git a/idrop-web/grails-app/conf/spring/resources.groovy b/idrop-web/grails-app/conf/spring/resources.groovy
index a6561c1..ba4e9b7 100644..100755
--- a/idrop-web/grails-app/conf/spring/resources.groovy
+++ b/idrop-web/grails-app/conf/spring/resources.groovy
@@ -3,9 +3,15 @@ beans = {
profileService(org.irods.mydrop.service.ProfileService) { irodsAccessObjectFactory = ref("irodsAccessObjectFactory") }
+ starringService(org.irods.mydrop.service.StarringService) { irodsAccessObjectFactory = ref("irodsAccessObjectFactory") }
+
+ sharingService(org.irods.mydrop.service.SharingService) { irodsAccessObjectFactory = ref("irodsAccessObjectFactory") }
+
+
browseController(org.irods.mydrop.controller.BrowseController) {
irodsAccessObjectFactory = ref("irodsAccessObjectFactory")
taggingServiceFactory = ref("taggingServiceFactory")
+ starringService = ref("starringService")
}
tagsController(org.irods.mydrop.controller.TagsController) {
@@ -38,6 +44,10 @@ beans = {
auditController(org.irods.mydrop.controller.AuditController) { irodsAccessObjectFactory = ref("irodsAccessObjectFactory") }
profileController(org.irods.mydrop.controller.ProfileController) { irodsAccessObjectFactory = ref("irodsAccessObjectFactory") }
+
+ shoppingCartController(org.irods.mydrop.controller.ShoppingCartController) {
+ irodsAccessObjectFactory = ref("irodsAccessObjectFactory")
+ }
}
diff --git a/idrop-web/grails-app/conf/spring/resources.xml b/idrop-web/grails-app/conf/spring/resources.xml
index fee14ee..4a6634f 100644..100755
--- a/idrop-web/grails-app/conf/spring/resources.xml
+++ b/idrop-web/grails-app/conf/spring/resources.xml
@@ -22,7 +22,7 @@
</beans:bean>
<beans:bean id="taggingServiceFactory"
- class="org.irods.jargon.usertagging.TaggingServiceFactoryImpl">
+ class="org.irods.jargon.usertagging.tags.TaggingServiceFactoryImpl">
<beans:constructor-arg ref="irodsAccessObjectFactory"></beans:constructor-arg>
</beans:bean>
diff --git a/idrop-web/grails-app/conf/testing.properties b/idrop-web/grails-app/conf/testing.properties
index 2da094d..2da094d 100644..100755
--- a/idrop-web/grails-app/conf/testing.properties
+++ b/idrop-web/grails-app/conf/testing.properties
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/AuditController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/AuditController.groovy
index e5e0cc9..e5e0cc9 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/AuditController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/AuditController.groovy
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/BrowseController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/BrowseController.groovy
index b2578b5..1c03ac4 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/BrowseController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/BrowseController.groovy
@@ -11,12 +11,17 @@ import org.irods.jargon.core.pub.io.IRODSFile
import org.irods.jargon.core.utils.IRODSUriUtils
import org.irods.jargon.core.utils.LocalFileUtils
import org.irods.jargon.datautils.image.MediaHandlingUtils
+import org.irods.jargon.datautils.pagination.PagingActions
+import org.irods.jargon.datautils.pagination.PagingAnalyser
import org.irods.jargon.datautils.sharing.*
import org.irods.jargon.ticket.TicketDistributionContext
-import org.irods.jargon.usertagging.FreeTaggingService
-import org.irods.jargon.usertagging.IRODSTaggingService
-import org.irods.jargon.usertagging.TaggingServiceFactory
-import org.irods.mydrop.service.ShoppingCartSessionService
+import org.irods.jargon.usertagging.domain.IRODSStarredFileOrCollection
+import org.irods.jargon.usertagging.tags.FreeTaggingService
+import org.irods.jargon.usertagging.tags.IRODSTaggingService
+import org.irods.jargon.usertagging.tags.TaggingServiceFactory
+import org.irods.mydrop.config.ViewState
+import org.irods.mydrop.service.StarringService
+import org.irods.mydrop.service.ViewStateService
/**
* Controller for browser functionality
@@ -27,8 +32,10 @@ class BrowseController {
IRODSAccessObjectFactory irodsAccessObjectFactory
TaggingServiceFactory taggingServiceFactory
+ StarringService starringService
+ ViewStateService viewStateService
IRODSAccount irodsAccount
- ShoppingCartSessionService shoppingCartSessionService
+
def grailsApplication
/**
@@ -48,6 +55,36 @@ class BrowseController {
log.debug("closing the session")
irodsAccessObjectFactory.closeSession()
}
+
+
+ def index = {
+ log.info ("in index action")
+ def mode = params['mode']
+ def absPath = params['absPath']
+
+ ViewState viewState = viewStateService.getViewStateFromSessionAndCreateIfNotThere()
+ log.info("viewState:${viewState}")
+
+ if (mode != null) {
+ if (mode == "path") {
+ log.info("mode is path, should have an abspath to preset to")
+ if (absPath == null) {
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ return
+ } else {
+ log.info("path is ${absPath}")
+ }
+ }
+ }
+
+ render(view: "index", model:[mode:mode,path:absPath,viewState:viewState])
+ }
+
+ def showBrowseToolbar = {
+ log.info("showBrowseToolbar")
+ render(view:"browseToolbar")
+ }
/**
* Set the parent dir based on the possibility of 'strict ACL' being set
@@ -140,34 +177,64 @@ class BrowseController {
// look at the type to decide how to set the root path
if (pathType == "detect") {
- log.info("no parent parm set, detect display as either root or home")
-
- if (irodsAccount.userName == "anonymous") {
- log.info("user is anonymous, default to view the public directory")
-
- parent = "/" + irodsAccount.zone + "/home/public"
-
+
+ /*
+ * Detect modes means I am being asked to decide what to show, based on things like whether
+ * strict acl's are enforced.
+ *
+ * If I have a preserved view state, initialize to that
+ */
+
+ String rootPath = viewStateService.retrieveRootPath()
+
+ if (rootPath) {
+
+ parent = rootPath
+
+ icon = "folder"
+ state = "closed"
+ type = "folder"
+
+ def attrBuf = ["id":parent, "rel":type, "absPath":parent]
+
+ jsonBuff.add(
+ ["data": parent,"attr":attrBuf, "state":state,"icon":icon, "type":type]
+ )
+
} else {
-
- def isStrict = environmentalInfoAO.isStrictACLs()
- log.info "is strict?:{isStrict}"
- if (isStrict) {
- parent = "/" + irodsAccount.zone + "/home/" + irodsAccount.userName
+
+
+ log.info("no parent parm set, detect display as either root or home")
+
+ if (irodsAccount.userName == "anonymous") {
+ log.info("user is anonymous, default to view the public directory")
+
+ parent = "/" + irodsAccount.zone + "/home/public"
+
} else {
- parent = "/"
+
+ def isStrict = environmentalInfoAO.isStrictACLs()
+ log.info "is strict?:{isStrict}"
+ if (isStrict) {
+ parent = "/" + irodsAccount.zone + "/home/" + irodsAccount.userName
+ } else {
+ parent = "/"
+ }
}
+
+ viewStateService.saveRootPath(parent)
+
+ icon = "folder"
+ state = "closed"
+ type = "folder"
+
+ def attrBuf = ["id":parent, "rel":type, "absPath":parent]
+
+ jsonBuff.add(
+ ["data": parent,"attr":attrBuf, "state":state,"icon":icon, "type":type]
+ )
}
- icon = "folder"
- state = "closed"
- type = "folder"
-
- def attrBuf = ["id":parent, "rel":type, "absPath":parent]
-
- jsonBuff.add(
- ["data": parent,"attr":attrBuf, "state":state,"icon":icon, "type":type]
- )
-
} else if (pathType == "root") {
log.info("display the root node")
@@ -177,6 +244,8 @@ class BrowseController {
icon = "folder"
state = "closed"
type = "folder"
+
+ viewStateService.saveRootPath(parent)
def attrBuf = ["id":parent, "rel":type, "absPath":parent]
@@ -199,13 +268,14 @@ class BrowseController {
log.info("setting to home directory:${parent}")
- // display a root node
- // display a root node
+ // display home node
icon = "folder"
state = "closed"
type = "folder"
+ viewStateService.saveRootPath(parent)
+
def attrBuf = ["id":parent, "rel":type, "absPath":parent]
jsonBuff.add(
@@ -219,11 +289,14 @@ class BrowseController {
if (parent == "") {
parent = "/"
}
+
// display a root node
icon = "folder"
state = "closed"
type = "folder"
+
+ viewStateService.saveRootPath(parent)
def attrBuf = ["id":parent, "rel":type, "absPath":parent]
@@ -233,6 +306,18 @@ class BrowseController {
} else if (pathType == "list") {
log.info("parent dir for listing provided as:${parent}")
+
+ def pagingOffset = params['partialStart']
+ def splitMode = params['splitMode']
+
+ if (pagingOffset == null) {
+ throw new JargonException("missing the partialStart")
+ }
+
+ if (splitMode == null) {
+ throw new JargonException("missing the splitMode")
+ }
+
def collectionAndDataObjectListAndSearchAO = irodsAccessObjectFactory.getCollectionAndDataObjectListAndSearchAO(irodsAccount)
def collectionAndDataObjectList = collectionAndDataObjectListAndSearchAO.listDataObjectsAndCollectionsUnderPath(parent)
log.debug("retrieved collectionAndDataObjectList: ${collectionAndDataObjectList}")
@@ -268,6 +353,9 @@ class BrowseController {
throw new JargonException("no absolute path passed to the method")
}
+ ViewState viewState = viewStateService.getViewStateFromSessionAndCreateIfNotThere()
+ viewState.browseView = "browse"
+
log.info "displayBrowseGridDetails for absPath: ${absPath}"
try {
CollectionAndDataObjectListAndSearchAO collectionAndDataObjectListAndSearchAO = irodsAccessObjectFactory.getCollectionAndDataObjectListAndSearchAO(irodsAccount)
@@ -283,8 +371,12 @@ class BrowseController {
}
def entries = collectionAndDataObjectListAndSearchAO.listDataObjectsAndCollectionsUnderPath(absPath)
+ int pageSize = irodsAccessObjectFactory.jargonProperties.maxFilesAndDirsQueryMax
+ PagingActions pagingActions = PagingAnalyser.buildPagingActionsFromListOfIRODSDomainObjects(entries, pageSize)
log.debug("retrieved collectionAndDataObjectList: ${entries}")
- render(view:"browseDetails", model:[collection:entries, parent:retObj, showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")])
+ log.debug("pagingActions:${pagingActions}")
+
+ render(view:"browseDetails", model:[collection:entries, parent:retObj, showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0"), viewState:viewState, pagingActions:pagingActions])
} catch (FileNotFoundException fnf) {
log.info("file not found looking for data, show stand-in page", fnf)
render(view:"noInfo")
@@ -313,85 +405,13 @@ class BrowseController {
if (absPath == null) {
throw new JargonException("no absolute path passed to the method")
}
+
+ viewStateService.saveViewMode("info")
ViewNameAndModelValues mav = handleInfoLookup(absPath)
render(view:mav.view, model:mav.model)
return
- log.info "fileInfo for absPath: ${absPath}"
- CollectionAndDataObjectListAndSearchAO collectionAndDataObjectListAndSearchAO = irodsAccessObjectFactory.getCollectionAndDataObjectListAndSearchAO(irodsAccount)
- def retObj = null
- // If I cant find any data just put a message up in the display area
- try {
- retObj = collectionAndDataObjectListAndSearchAO.getFullObjectForType(absPath)
-
- if (!retObj) {
- log.error "no data found for path ${absPath}"
- render(view:"noInfo")
- return
- }
- } catch (DataNotFoundException) {
- render(view:"noInfo")
- return
- }
-
- def isDataObject = retObj instanceof DataObject
- def getThumbnail = false
- def renderMedia = false
-
- log.info "is this a data object? ${isDataObject}"
-
- FreeTaggingService freeTaggingService = taggingServiceFactory.instanceFreeTaggingService(irodsAccount)
- IRODSTaggingService irodsTaggingService = taggingServiceFactory.instanceIrodsTaggingService(irodsAccount)
- if (isDataObject) {
- long maxSize
- String maxSizeParm = grailsApplication.config.idrop.config.max.thumbnail.size.mb
- if (maxSizeParm != null) {
- try {
- maxSize = Long.valueOf(maxSizeParm) * 1024 * 1024
- } catch (Exception e) {
- maxSize = 32 * 1024 * 1024
- }
- }
-
- log.info("data size: ${retObj.dataSize}, max size: ${maxSize}")
-
- if (retObj.dataSize > maxSize) {
- log.info("do not render media")
- renderMedia = false
- }
-
- getThumbnail = MediaHandlingUtils.isImageFile(absPath)
- log.info("getThumbnail? ${getThumbnail}")
-
- if (!getThumbnail) {
- renderMedia = MediaHandlingUtils.isMediaFile(absPath)
- log.info("renderMedia? ${renderMedia}")
- }
-
- log.info("getting free tags for data object")
- def freeTags = freeTaggingService.getTagsForDataObjectInFreeTagForm(absPath)
- log.info("rendering as data object: ${retObj}")
- def commentTag = irodsTaggingService.getDescriptionOnDataObjectForLoggedInUser(absPath)
-
- def comment = ""
- if (commentTag) {
- comment = commentTag.getTagData()
- }
-
- render(view:"dataObjectInfo", model:[dataObject:retObj,tags:freeTags,comment:comment,getThumbnail:getThumbnail,renderMedia:renderMedia,isDataObject:isDataObject,showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")])
- } else {
- log.info("getting free tags for collection")
- def freeTags = freeTaggingService.getTagsForCollectionInFreeTagForm(absPath)
- def commentTag = irodsTaggingService.getDescriptionOnCollectionForLoggedInUser(absPath)
-
- def comment = ""
- if (commentTag) {
- comment = commentTag.getTagData()
- }
- log.info("rendering as collection: ${retObj}")
- render(view:"collectionInfo", model:[collection:retObj,comment:comment,tags:freeTags, isDataObject:isDataObject, showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")])
- }
}
/**
@@ -474,6 +494,7 @@ class BrowseController {
*/
IRODSFile targetFile = irodsAccessObjectFactory.getIRODSFileFactory(irodsAccount).instanceIRODSFile(absPath)
+ String parentPath = targetFile.parent
log.info("target file obtained")
if (!targetFile.exists()) {
@@ -485,7 +506,7 @@ class BrowseController {
log.info("target file exists")
String fileName = targetFile.name
- render(view:"renameDialog", model:[fileName:fileName, absPath:absPath])
+ render(view:"renameDialog", model:[fileName:fileName, absPath:absPath, parentPath:parentPath])
}
@@ -532,125 +553,27 @@ class BrowseController {
String fileName = targetFile.name
render(view:"newFolderDialog", model:[absPath:absPath])
}
-
- def addFileToCart = {
- log.info ("addFileToCart")
- String fileName = params['absPath']
- if (!fileName) {
- log.error "no file name in request"
- def message = message(code:"error.no.path.provided")
- response.sendError(500,message)
- }
-
- log.info("adding ${fileName} to the shopping cart")
-
- shoppingCartSessionService.addToCart(fileName)
-
- log.info("shopping cart: ${session.shoppingCart}")
-
- log.info("file added")
- render fileName
- }
-
- /**
- * Display the contents of the 'file cart tab'. This is a cascading operation, such that the loading of the tab will call the process
- * to load the cart contents table.
- */
- def showCartTab = {
- log.info("showCartTab")
- render(view:"listCart")
- }
-
- /**
- * Build the JTable entries for the contents of the shopping cart
- */
- def listCart = {
- log.info("listCart")
- List<String> cart = shoppingCartSessionService.listCart()
- render(view:"cartDetails", model:[cart:cart])
- }
-
- /**
- * Clear the contents of the shopping cart
- */
- def clearCart = {
- log.info("clearCart")
- shoppingCartSessionService.clearCart()
- render "OK"
- }
-
- /**
- * Delete the given files from the shopping cart
- */
- def deleteFromCart = {
- log.info("deleteFromCart")
- log.info("params: ${params}")
-
- def filesToDelete = params['selectCart']
-
- // if nothing selected, just jump out and return a message
- if (!filesToDelete) {
- log.info("no files to delete")
- render "OK"
- return
- }
-
- log.info("filesToDelete: ${filesToDelete}")
-
- if (filesToDelete instanceof Object[]) {
- log.debug "is array"
- filesToDelete.each{
- log.info "filesToDelete: ${it}"
- shoppingCartSessionService.deleteFromCart(it)
- }
-
- } else {
- log.debug "not array"
- log.info "deleting: ${filesToDelete}"
- shoppingCartSessionService.deleteFromCart(filesToDelete)
- }
-
- render "OK"
- }
-
-
+
/**
- * Process a bulk add to cart action based on data input from the browse details form
+ * Prepare the 'new folder' dialog
*/
- def addToCartBulkAction = {
- log.info("addToCartBulkAction")
+ def prepareStarDialog = {
+ log.info("prepareStarDialog()")
- log.info("params: ${params}")
-
- def filesToAdd = params['selectDetail']
-
- // if nothing selected, just jump out and return a message
- if (!filesToAdd) {
- log.info("no files to add")
- render "OK"
- return
+ def absPath = params['absPath']
+ if (absPath == null) {
+ log.error "no absPath in request"
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
}
- log.info("filesToAdd: ${filesToAdd}")
-
-
- if (filesToAdd instanceof Object[]) {
- log.debug "is array"
- filesToAdd.each{
- log.info "filesToAdd: ${it}"
- shoppingCartSessionService.addToCart(it)
-
- }
-
- } else {
- log.debug "not array"
- log.info "adding: ${filesToAdd}"
- shoppingCartSessionService.addToCart(filesToAdd)
- }
+ log.info("abs path:${absPath}")
- render "OK"
+
+ render(view:"starDialog", model:[absPath:absPath])
}
+
/**
* Show gallery view for given directory
*/
@@ -681,6 +604,56 @@ class BrowseController {
render(view:"noInfo")
}
}
+
+ /**
+ * Set a folder to starred
+ */
+ def starFile = {
+ log.info("starFile()")
+ def absPath = params['absPath']
+ if (absPath == null) {
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ }
+
+ def description = params['description']
+ if (description == null) {
+ def message = message(code:"error.no.description.provided")
+ response.sendError(500,message)
+ }
+
+ try {
+ log.info "starring absPath: ${absPath}"
+ starringService.star(irodsAccount, absPath, description)
+ log.info("star successful")
+ render "OK"
+ } catch (org.irods.jargon.core.exception.FileNotFoundException fnf) {
+ def message = message(code:"error.file.not.found")
+ response.sendError(500,message)
+ }
+ }
+
+ /**
+ * Set a folder to not starred
+ */
+ def unstarFile = {
+ log.info("unstarFile()")
+ def absPath = params['absPath']
+ if (absPath == null) {
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ }
+
+ try {
+ log.info "unstarring absPath: ${absPath}"
+ starringService.unStar(irodsAccount, absPath)
+ log.info("unstar successful")
+ render "OK"
+ } catch (org.irods.jargon.core.exception.FileNotFoundException fnf) {
+ def message = message(code:"error.file.not.found")
+ response.sendError(500,message)
+ }
+ }
private ViewNameAndModelValues handleInfoLookup(String absPath) {
@@ -712,6 +685,11 @@ class BrowseController {
FreeTaggingService freeTaggingService = taggingServiceFactory.instanceFreeTaggingService(irodsAccount)
IRODSTaggingService irodsTaggingService = taggingServiceFactory.instanceIrodsTaggingService(irodsAccount)
+
+ log.info("seeing if this is starred")
+ IRODSStarredFileOrCollection irodsStarredFileOrCollection = starringService.findStarred(irodsAccount, absPath)
+ log.info "starring info:${irodsStarredFileOrCollection}"
+
if (isDataObject) {
long maxSize
String maxSizeParm = grailsApplication.config.idrop.config.max.thumbnail.size.mb
@@ -749,7 +727,7 @@ class BrowseController {
}
mav.view = "dataObjectInfo"
- mav.model = [dataObject:retObj,tags:freeTags,comment:comment,getThumbnail:getThumbnail,renderMedia:renderMedia,isDataObject:isDataObject,showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")]
+ mav.model = [dataObject:retObj,tags:freeTags,comment:comment,getThumbnail:getThumbnail,renderMedia:renderMedia,isDataObject:isDataObject,irodsStarredFileOrCollection:irodsStarredFileOrCollection,showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")]
return mav
} else {
log.info("getting free tags for collection")
@@ -762,7 +740,7 @@ class BrowseController {
}
log.info("rendering as collection: ${retObj}")
mav.view = "collectionInfo"
- mav.model = [collection:retObj,comment:comment,tags:freeTags, isDataObject:isDataObject, showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")]
+ mav.model = [collection:retObj,comment:comment,tags:freeTags, isDataObject:isDataObject, irodsStarredFileOrCollection:irodsStarredFileOrCollection,showLite:collectionAndDataObjectListAndSearchAO.getIRODSServerProperties().isTheIrodsServerAtLeastAtTheGivenReleaseVersion("rods3.0")]
return mav
}
@@ -776,7 +754,12 @@ class BrowseController {
ResourceAO resourceAO = irodsAccessObjectFactory.getResourceAO(irodsAccount)
List<String> resources = new ArrayList<String>()
resources.add("")
- resources.addAll(resourceAO.listResourceAndResourceGroupNames())
+
+ try {
+ resources.addAll(resourceAO.listResourceAndResourceGroupNames())
+ } catch (Exception e) {
+ log.error("error listing resorces...error is muted",e)
+ }
render(view:"loginInfo", model:[irodsAccount:irodsAccount, resources:resources])
}
@@ -792,6 +775,7 @@ class BrowseController {
response.sendError(500,message)
}
irodsAccount.setDefaultStorageResource(resource)
+ session["SPRING_SECURITY_CONTEXT"] = irodsAccount
render "OK"
}
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/FileController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/FileController.groovy
index 8e672e1..021c093 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/FileController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/FileController.groovy
@@ -6,6 +6,7 @@ import grails.converters.*
import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.exception.DataNotFoundException
import org.irods.jargon.core.exception.JargonException
+import org.irods.jargon.core.exception.NoResourceDefinedException
import org.irods.jargon.core.pub.CollectionAndDataObjectListAndSearchAO
import org.irods.jargon.core.pub.DataTransferOperations
import org.irods.jargon.core.pub.IRODSAccessObjectFactory
@@ -14,6 +15,8 @@ import org.irods.jargon.core.pub.domain.DataObject
import org.irods.jargon.core.pub.io.IRODSFile
import org.irods.jargon.core.pub.io.IRODSFileFactory
import org.irods.jargon.core.pub.io.IRODSFileInputStream
+import org.irods.jargon.datautils.uploads.UploadsService
+import org.irods.jargon.datautils.uploads.UploadsServiceImpl
import org.springframework.web.multipart.MultipartFile
@@ -118,6 +121,25 @@ class FileController {
render(view:"uploadDialog", model:[irodsTargetCollection:irodsTargetCollection])
}
+
+ /**
+ * Prepare a quick upload dialog to upload a file to the default location using the quick upload service
+ *
+ */
+ def prepareQuickUploadDialog = {
+ log.info("prepareQuickUploadDialog")
+
+ log.info("checking if uploads default directory needs to be created")
+
+ /* here we could do any processing on irods, such as provisioning of metadata fields based on target
+ * for now, derive info about the target and normalize to a collection (could be a data object)
+ */
+
+ UploadsService uploadsService = new UploadsServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ IRODSFile uploadsDir = uploadsService.getUploadsDirectory();
+
+ render(view:"quickUploadDialog", model:[irodsTargetCollection:uploadsDir.absolutePath])
+ }
/**
* Process an actual call to upload data to iRODS as a multi-part file
@@ -167,9 +189,12 @@ class FileController {
targetFile.setResource(irodsAccount.defaultStorageResource)
Stream2StreamAO stream2Stream = irodsAccessObjectFactory.getStream2StreamAO(irodsAccount)
stream2Stream.transferStreamToFileUsingIOStreams(fis, targetFile, f.size, 0)
+ } catch (NoResourceDefinedException nrd) {
+ log.error("no resource defined exception", nrd)
+ response.sendError(500, message(code:"message.no.resource"))
} catch (Exception e) {
log.error("exception in upload transfer", e)
- response.sendError(500,e.message)
+ response.sendError(500, message(code:"message.error.in.upload"))
} finally {
// stream2Stream will close input and output streams
}
@@ -195,9 +220,16 @@ class FileController {
IRODSFileFactory irodsFileFactory = irodsAccessObjectFactory.getIRODSFileFactory(irodsAccount)
IRODSFile targetFile = irodsFileFactory.instanceIRODSFile(absPath)
- targetFile.delete()
- log.info("file deleted")
- render targetFile.getParent()
+ try {
+ targetFile.delete()
+ log.info("file deleted")
+ render(view:"deleteResult", model:[absPath:targetFile.parent])
+ //render targetFile.getParent()
+ } catch (JargonException je) {
+ log.error("exception on delete", je)
+ response.sendError(500,je.message)
+ return
+ }
}
/**
@@ -344,9 +376,16 @@ class FileController {
response.sendError(500,message)
}
- DataTransferOperations dataTransferOperations = irodsAccessObjectFactory.getDataTransferOperations(irodsAccount)
- log.info("moving ${sourceAbsPath} to ${targetAbsPath}")
- dataTransferOperations.move(sourceAbsPath, targetAbsPath)
+ try {
+ DataTransferOperations dataTransferOperations = irodsAccessObjectFactory.getDataTransferOperations(irodsAccount)
+ log.info("moving ${sourceAbsPath} to ${targetAbsPath}")
+ dataTransferOperations.move(sourceAbsPath, targetAbsPath)
+ } catch (NoResourceDefinedException nrd) {
+ log.error "no default resource found for move operation"
+ def message = message(code:"message.no.resource")
+ response.sendError(500,message)
+ }
+
render targetAbsPath
}
@@ -369,10 +408,20 @@ class FileController {
def message = message(code:"error.no.path.provided")
response.sendError(500,message)
}
+
+ String defaultResource = irodsAccount.defaultStorageResource
+ log.info("defaultResource:${defaultResource}")
+
+ try {
+ DataTransferOperations dataTransferOperations = irodsAccessObjectFactory.getDataTransferOperations(irodsAccount)
+ log.info("copy ${sourceAbsPath} to ${targetAbsPath}")
+ dataTransferOperations.copy(sourceAbsPath,defaultResource, targetAbsPath,null, null)
+ } catch (NoResourceDefinedException nrd) {
+ log.error "no default resource found for copy operation"
+ def message = message(code:"message.no.resource")
+ response.sendError(500,message)
+ }
- DataTransferOperations dataTransferOperations = irodsAccessObjectFactory.getDataTransferOperations(irodsAccount)
- log.info("copy ${sourceAbsPath} to ${targetAbsPath}")
- dataTransferOperations.copy(sourceAbsPath,"", targetAbsPath,null, false, null) //TODO: resource here?
render targetAbsPath
}
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/HomeController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/HomeController.groovy
index 30fb20e..3bda859 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/HomeController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/HomeController.groovy
@@ -2,10 +2,14 @@ package org.irods.mydrop.controller
import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.utils.MiscIRODSUtils
+import org.irods.mydrop.service.SharingService
+import org.irods.mydrop.service.StarringService;
class HomeController {
-
+ StarringService starringService
+ SharingService sharingService
+
/**
* Interceptor grabs IRODSAccount from the SecurityContextHolder
*/
@@ -22,31 +26,10 @@ class HomeController {
def afterInterceptor = { log.debug("closing the session") }
-
- def index = {
- log.info ("in home controller index action")
- def mode = params['mode']
- def absPath = params['absPath']
-
- if (mode != null) {
- if (mode == "path") {
- log.info("mode is path, should have an abspath to preset to")
- if (absPath == null) {
- def message = message(code:"error.no.path.provided")
- response.sendError(500,message)
- return
- } else {
- log.info("path is ${absPath}")
- }
- }
- }
-
- render(view: "index", model:[mode:mode,path:absPath])
- }
-
- def showBrowseToolbar = {
- log.info("showBrowseToolbar")
- render(view:"browseToolbar")
+ def index() {
+ log.info("index")
+ boolean shareSupported = sharingService.isSharingSupported(irodsAccount)
+ render(view:"index", model:[shareSupported:shareSupported])
}
/**
@@ -83,6 +66,83 @@ class HomeController {
render(view:"link", model:[absPath:filePath])
}
+
+ def starredCollections() {
+ log.info "starredCollections()"
+
+ def listing = starringService.listStarredCollections(irodsAccount, 0)
+
+ if (listing.isEmpty()) {
+ render(view:"noInfo")
+ } else {
+ render(view:"quickViewList",model:[listing:listing])
+ }
+ }
+
+ def starredDataObjects() {
+ log.info "starredDataObjects()"
+ def listing = starringService.listStarredDataObjects(irodsAccount, 0)
+ if (listing.isEmpty()) {
+ render(view:"noInfo")
+ } else {
+ render(view:"quickViewList",model:[listing:listing])
+ }
+ }
+
+ /**
+ * Listing of collections shared by me with others
+ * @return
+ */
+ def sharedCollectionsByMe() {
+ log.info "sharedCollectionsByMe"
+
+ boolean sharing = sharingService.isSharingSupported(irodsAccount)
+ if (!sharing) {
+ log.info("no sharing support on this grid")
+ render(view:"noInfo")
+ return
+ }
+
+ /*
+ * is sharing configured?
+ */
+ if (!sharing) {
+ log.info("no sharing support on this grid")
+ render(view:"noInfo")
+ return
+ }
+
+ def listing = sharingService.listCollectionsSharedByMe(irodsAccount);
+ if (listing.isEmpty()) {
+ render(view:"noInfo")
+ } else {
+ render(view:"shareQuickViewList",model:[listing:listing])
+ }
+ }
+
+ /**
+ * Listing of collections shared by me with others
+ * @return
+ */
+ def sharedCollectionsWithMe() {
+ log.info "sharedCollectionsByMe"
+
+ boolean sharing = sharingService.isSharingSupported(irodsAccount)
+ if (!sharing) {
+ log.info("no sharing support on this grid")
+ render(view:"noInfo")
+ return
+ }
+
+ def listing = sharingService.listCollectionsSharedWithMe(irodsAccount)
+
+ if (listing.isEmpty()) {
+ render(view:"noInfo")
+ } else {
+ render(view:"shareWithMeQuickViewList",model:[listing:listing])
+ }
+ }
+
// FIXME: refactor into jargon-core
private IRODSAccount anonymousIrodsAccountForURIString(String uriString) {
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/IdropLiteController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/IdropLiteController.groovy
index 59ae46a..a8bdfed 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/IdropLiteController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/IdropLiteController.groovy
@@ -4,6 +4,7 @@ import grails.converters.*
import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.exception.JargonException
+import org.irods.jargon.core.exception.NoResourceDefinedException
import org.irods.jargon.core.pub.IRODSAccessObjectFactory
import org.irods.jargon.core.pub.UserAO
import org.irods.jargon.datautils.datacache.DataCacheServiceFactory
@@ -56,8 +57,23 @@ class IdropLiteController {
if (fileShoppingCart) {
key = String.valueOf(System.currentTimeMillis())
log.info("key:${key}")
- String shoppingCartFile = shoppingCartService
- .serializeShoppingCartAsLoggedInUser(fileShoppingCart, key)
+ String shoppingCartFile = ""
+
+ try {
+ shoppingCartFile = shoppingCartService.serializeShoppingCartAsLoggedInUser(fileShoppingCart, key)
+ } catch (Exception e) {
+ if (e.message.indexOf("error creating") > -1) {
+ log.error "no default resource found for copy operation"
+ def message = message(code:"message.no.resource")
+ response.sendError(500,message)
+ return
+ } else {
+ log.error "error serializing shopping cart"
+ def message = message(e.message)
+ response.sendError(500,e.message)
+ return
+ }
+ }
log.info("cart serialized to file:${shoppingCartFile}")
}
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ImageController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ImageController.groovy
index 8163eb2..8163eb2 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ImageController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ImageController.groovy
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/LoginController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/LoginController.groovy
index 7eff1f0..8a01a42 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/LoginController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/LoginController.groovy
@@ -4,11 +4,15 @@ import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.connection.auth.AuthResponse
import org.irods.jargon.core.exception.JargonException
import org.irods.jargon.core.pub.IRODSAccessObjectFactory
+import org.irods.jargon.core.pub.ResourceAO
+import org.irods.jargon.core.pub.UserAO
+import org.irods.mydrop.service.ViewStateService
class LoginController {
IRODSAccessObjectFactory irodsAccessObjectFactory
IRODSAccount irodsAccount
+ ViewStateService viewStateService
//static allowedMethods = [authenticate:'POST']
@@ -66,7 +70,7 @@ class LoginController {
log.info("preset auth scheme is:${presetAuthScheme}")
loginCommand.authMethod = presetAuthScheme
}
-
+
render(view:"login", model:[loginCommand:loginCommand])
}
@@ -148,6 +152,7 @@ class LoginController {
AuthResponse authResponse
try {
authResponse = irodsAccessObjectFactory.authenticateIRODSAccount(irodsAccount)
+ viewStateService.clearViewState()
} catch (JargonException e) {
log.error("unable to authenticate, JargonException", e)
@@ -190,6 +195,73 @@ class LoginController {
session["SPRING_SECURITY_CONTEXT"] = null
redirect(action:"login")
}
+
+
+ /**
+ * FIXME: deprecated
+ * Show information about the current user/host
+ */
+ def showLoginBar = {
+ log.info("showLoginBar()")
+ ResourceAO resourceAO = irodsAccessObjectFactory.getResourceAO(irodsAccount)
+ List<String> resources = new ArrayList<String>()
+ resources.add("")
+ resources.addAll(resourceAO.listResourceAndResourceGroupNames())
+ render(view:"defaultStorageResource", model:[irodsAccount:irodsAccount, resources:resources])
+ }
+
+ /**
+ * Show a dialog to set the default storage resource
+ */
+ def defaultResource = {
+ log.info("showLoginBar()")
+ ResourceAO resourceAO = irodsAccessObjectFactory.getResourceAO(irodsAccount)
+ List<String> resources = new ArrayList<String>()
+ resources.add("")
+ resources.addAll(resourceAO.listResourceAndResourceGroupNames())
+ render(view:"defaultStorageResource", model:[irodsAccount:irodsAccount, resources:resources])
+ }
+
+ /**
+ * Show the password change dialog
+ * @return
+ */
+ def changePasswordForm() {
+ PasswordCommand cmd = new PasswordCommand()
+ render (view:"passwordChange", model:[irodsAccount:irodsAccount, password:cmd])
+ }
+
+ /**
+ * process a password change
+ * @return
+ */
+ def changePassword(PasswordCommand cmd) {
+ log.info "passwordChange()"
+ log.info "cmd: ${cmd}"
+
+ /**
+ * If there is an error send back the view for redisplay with error messages
+ */
+ if (!cmd.validate()) {
+ log.info("errors in page, returning with error info:${cmd}")
+ flash.error = message(code:"error.data.error")
+ render (view:"passwordChange", model:[irodsAccount:irodsAccount, password:cmd])
+ return
+ }
+
+ log.info("edits pass")
+
+ UserAO userAO = irodsAccessObjectFactory.getUserAO(irodsAccount)
+ userAO.changeAUserPasswordByThatUser(irodsAccount.userName, irodsAccount.password, cmd.password)
+ irodsAccount.password = cmd.password
+ log.info("password changed, fixed account in session")
+ flash.message = message(code:"message.password.updated")
+
+ render (view:"passwordChange", model:[irodsAccount:irodsAccount, password:cmd])
+
+ }
+
+
}
class LoginCommand {
boolean useGuestLogin
@@ -209,3 +281,19 @@ class LoginCommand {
authMethod(blank:false)
}
}
+
+class PasswordCommand {
+
+ String password
+ String confirmPassword
+
+ static constraints = {
+ password(blank:false)
+ confirmPassword validator: {
+ val, obj ->
+ if (!val) return ['error.confirm.password.missing']
+ if (val != obj.password) return['error.passwords.dont.match']
+ }
+ }
+ }
+
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy
index 097e48f..5608092 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/MetadataController.groovy
@@ -106,6 +106,10 @@ class MetadataController {
CollectionAO collectionAO = irodsAccessObjectFactory.getCollectionAO(irodsAccount)
metadata = collectionAO.findMetadataValuesForCollection(retObj.collectionName, 0)
}
+
+ log.info("metadata:${metadata}")
+
+
} catch (DataNotFoundException dnf) {
log.warn "cannot find data for path"
flash.message="error.no.data.found"
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ProfileController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ProfileController.groovy
index e14d571..2bb2aef 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ProfileController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ProfileController.groovy
@@ -38,115 +38,139 @@ class ProfileController {
*/
def index() {
log.info "index()"
-
if (irodsAccount.userName == IRODSAccount.PUBLIC_USERNAME) {
render(view:"noProfileData")
} else {
try {
UserProfile userProfile = profileService.retrieveProfile(irodsAccount)
- render(view:"profileData", model:[userProfile:userProfile])
+ ProfileCommand profileCommand = new ProfileCommand()
+ profileCommand.userName = Jsoup.clean(userProfile.userName,Whitelist.basic())
+ profileCommand.nickName = Jsoup.clean(userProfile.userProfilePublicFields.nickName,Whitelist.basic())
+ profileCommand.givenName = Jsoup.clean(userProfile.userProfilePublicFields.givenName,Whitelist.basic())
+ profileCommand.lastName = Jsoup.clean(userProfile.userProfilePublicFields.sn,Whitelist.basic())
+ profileCommand.city= Jsoup.clean(userProfile.userProfilePublicFields.localityName,Whitelist.basic())
+ profileCommand.state= Jsoup.clean(userProfile.userProfilePublicFields.st,Whitelist.basic())
+ profileCommand.email = Jsoup.clean(userProfile.userProfileProtectedFields.mail,Whitelist.basic())
+ profileCommand.description = Jsoup.clean(userProfile.userProfilePublicFields.description,Whitelist.basic())
+ profileCommand.labeledURL = Jsoup.clean(userProfile.userProfilePublicFields.labeledURL,Whitelist.basic())
+ profileCommand.postalAddress = Jsoup.clean(userProfile.userProfilePublicFields.postalAddress,Whitelist.basic())
+ profileCommand.postalCode = Jsoup.clean(userProfile.userProfilePublicFields.postalCode,Whitelist.basic())
+ profileCommand.postOfficeBox = Jsoup.clean(userProfile.userProfilePublicFields.postOfficeBox,Whitelist.basic())
+ profileCommand.telephoneNumber = Jsoup.clean(userProfile.userProfilePublicFields.telephoneNumber,Whitelist.basic())
+ profileCommand.title = Jsoup.clean(userProfile.userProfilePublicFields.title,Whitelist.basic())
+
+ render(view:"index", model:[userProfile:profileCommand])
} catch (Exception e) {
response.sendError(500,e.message)
}
}
+
}
+
/**
* Update the profile
* @return
*/
- def updateProfile() {
+ def updateProfile(ProfileCommand profileCommand) {
log.info("updateProfile")
+ log.info "profileCommand: ${profileCommand}"
+
+ /**
+ * If there is an error send back the view for redisplay with error messages
+ */
+ if (!profileCommand.validate()) {
+ log.info("errors in page, returning with error info")
+ flash.error = message(code:"error.data.error")
+ render(view:"index", model:[userProfile:profileCommand])
+ return
+ }
+
+ log.info("edits pass")
+
/*
* Massage the params into the user profile
*/
+
- UserProfile userProfile = profileService.retrieveProfile(irodsAccount)
-
- if (params['nickName'] == null) {
- def message = message(code:"default.null.message", args: ['nickName', 'parms'])
- response.sendError(500,message)
- }
-
- def nickName = Jsoup.clean(params['nickName'], Whitelist.basic())
-
- if ( params['description'] == null) {
- def message = message(code:"default.null.message", args: ['description', 'parms'])
- response.sendError(500,message)
- }
- def description = Jsoup.clean(params['description'], Whitelist.basic())
-
- if (params['email'] == null) {
- def message = message(code:"default.null.message", args: ['email', 'parms'])
- response.sendError(500,message)
+ UserProfile userProfile
+ try {
+ userProfile = profileService.retrieveProfile(irodsAccount)
+ } catch (Exception e) {
+ log.error("error retrieving user profile", e)
+ def message = message("message.cannot.create.profile")
+ response.sendError(500, message)
+ return
}
- def email = Jsoup.clean(params['email'], Whitelist.basic())
- userProfile.userProfilePublicFields.nickName = nickName
- userProfile.userProfilePublicFields.description = description
- userProfile.userProfileProtectedFields.mail = email
+ userProfile.userName = irodsAccount.userName
+ userProfile.userProfilePublicFields.nickName = Jsoup.clean(profileCommand.nickName,Whitelist.basic())
+ userProfile.userProfilePublicFields.description = Jsoup.clean(profileCommand.description,Whitelist.basic())
+ userProfile.userProfileProtectedFields.mail = Jsoup.clean(profileCommand.email,Whitelist.basic())
+ userProfile.userProfilePublicFields.givenName = Jsoup.clean(profileCommand.givenName,Whitelist.basic())
+ userProfile.userProfilePublicFields.sn = Jsoup.clean(profileCommand.lastName,Whitelist.basic())
+ userProfile.userProfilePublicFields.localityName = Jsoup.clean(profileCommand.city,Whitelist.basic())
+ userProfile.userProfilePublicFields.st = Jsoup.clean(profileCommand.state,Whitelist.basic())
+ userProfile.userProfilePublicFields.description = Jsoup.clean(profileCommand.description,Whitelist.basic())
+ userProfile.userProfilePublicFields.labeledURL = Jsoup.clean(profileCommand.labeledURL,Whitelist.basic())
+ userProfile.userProfilePublicFields.postalAddress = Jsoup.clean(profileCommand.postalAddress,Whitelist.basic())
+ userProfile.userProfilePublicFields.postalCode = Jsoup.clean(profileCommand.postalCode,Whitelist.basic())
+ userProfile.userProfilePublicFields.postOfficeBox = Jsoup.clean(profileCommand.postOfficeBox,Whitelist.basic())
+ userProfile.userProfilePublicFields.telephoneNumber = Jsoup.clean(profileCommand.telephoneNumber,Whitelist.basic())
+ userProfile.userProfilePublicFields.title = Jsoup.clean(profileCommand.title,Whitelist.basic())
log.info "updating profile...."
- profileService.updateProfile(irodsAccount, userProfile)
+ try {
+ profileService.updateProfile(irodsAccount, userProfile)
+ } catch (Exception e) {
+ log.error("error updating user profile", e)
+ def message = message("message.cannot.create.profile")
+ response.sendError(500, message)
+ return
+ }
log.info "updated"
+ flash.message = message(code:"message.update.successful")
- render(view:"profileData", model:[userProfile:userProfile])
+ redirect(view:"index", model:[userProfile:profileCommand])
}
- /**
- * Show the password change dialog
- * @return
- */
- def showPasswordChangeDialog() {
- PasswordCommand cmd = new PasswordCommand()
- render (view:"changePasswordDialog", model:[password:cmd])
- }
- /**
- * process a password change
- * @return
- */
- def changePassword(PasswordCommand cmd) {
- log.info "changePassword()"
- log.info "cmd: ${cmd}"
-
- /**
- * If there is an error send back the view for redisplay with error messages
- */
- if (!cmd.validate()) {
- log.info("errors in page, returning with error info:${cmd}")
- flash.error = message(code:"error.data.error")
- render (view:"changePasswordDialog", model:[password:cmd])
- return
- }
-
- log.info("edits pass")
-
- UserAO userAO = irodsAccessObjectFactory.getUserAO(irodsAccount)
- userAO.changeAUserPasswordByThatUser(irodsAccount.userName, irodsAccount.password, cmd.password)
- irodsAccount.password = cmd.password
- log.info("password changed, fix account in session")
- flash.message = message(code:"message.update.successful")
- render (view:"changePasswordDialog", model:[password:cmd])
-
- }
}
-class PasswordCommand {
-
- String password
- String confirmPassword
-
+class ProfileCommand {
+ String userName
+ String nickName
+ String givenName
+ String lastName
+ String city
+ String state
+ String email
+ String description
+ String labeledURL
+ String postalAddress
+ String postalCode
+ String postOfficeBox
+ String telephoneNumber
+ String title
+
static constraints = {
- password(blank:false)
- confirmPassword validator: {
- val, obj ->
- if (!val) return ['error.confirm.password.missing']
- if (val != obj.password) return['error.passwords.dont.match']
- }
+ nickName(null:false)
+ givenName( null:false)
+ lastName(null:false)
+ city(null:false)
+ state(null:false)
+ email(null:false)
+ description(null:false)
+ labeledURL(null:false)
+ postalAddress(null:false)
+ postalCode(null:false)
+ postOfficeBox(null:false)
+ telephoneNumber(null:false)
+ title(null:false)
}
}
+
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/QuickUploadController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/QuickUploadController.groovy
new file mode 100644
index 0000000..851b230
--- /dev/null
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/QuickUploadController.groovy
@@ -0,0 +1,97 @@
+package org.irods.mydrop.controller
+
+import org.irods.jargon.core.connection.IRODSAccount
+import org.irods.jargon.core.exception.JargonException
+import org.irods.jargon.core.exception.NoResourceDefinedException
+import org.irods.jargon.core.pub.IRODSAccessObjectFactory
+import org.irods.jargon.core.pub.Stream2StreamAO
+import org.irods.jargon.core.pub.io.IRODSFile
+import org.irods.jargon.core.pub.io.IRODSFileFactory
+import org.springframework.web.multipart.MultipartFile
+
+class QuickUploadController {
+ IRODSAccessObjectFactory irodsAccessObjectFactory
+ IRODSAccount irodsAccount
+ static long MAX_UPLOAD = 3221225472 // shooting for 3GB max, make parm?
+
+ /**
+ * Interceptor grabs IRODSAccount from the SecurityContextHolder
+ */
+ def beforeInterceptor = [action:this.&auth]
+
+ def auth() {
+ if(!session["SPRING_SECURITY_CONTEXT"]) {
+ redirect(controller:"login", action:"login")
+ return false
+ }
+ irodsAccount = session["SPRING_SECURITY_CONTEXT"]
+ }
+
+ def afterInterceptor = {
+ log.debug("closing the session")
+ irodsAccessObjectFactory.closeSession()
+ }
+
+
+ /**
+ * Process an actual call to upload data to iRODS as a multi-part file
+ */
+ def upload = {
+ log.info("upload action in file controller")
+ MultipartFile f = request.getFile('file')
+ def name = f.getOriginalFilename()
+
+ log.info("f is ${f}")
+ log.info("length of f is ${f.size}")
+ log.info("max upload size is ${MAX_UPLOAD}")
+
+ if (f.size > MAX_UPLOAD) {
+ log.error("file size is too large, send error message to use bulk upload")
+ def message = message(code:"error.use.bulk.upload")
+ response.sendError(500,message)
+ return
+ } else if (f.size == 0) {
+ log.error("file is zero length")
+ def message = message(code:"error.zero.length.upload")
+ response.sendError(500,message)
+ return
+ }
+
+ log.info("name is : ${name}")
+ def irodsCollectionPath = params.collectionParentName
+
+ if (f == null || f.empty) {
+ log.error("no file to upload")
+ throw new JargonException("No file to upload")
+ }
+
+ if (irodsCollectionPath == null || irodsCollectionPath.empty) {
+ log.error("no target iRODS collection given in upload request")
+ throw new JargonException("No iRODS target collection given for upload")
+ }
+
+ InputStream fis = null
+ log.info("building irodsFile for file name: ${name}")
+
+
+ try {
+ fis = new BufferedInputStream(f.getInputStream())
+ IRODSFileFactory irodsFileFactory = irodsAccessObjectFactory.getIRODSFileFactory(irodsAccount)
+ IRODSFile targetFile = irodsFileFactory.instanceIRODSFile(irodsCollectionPath, name)
+ targetFile.setResource(irodsAccount.defaultStorageResource)
+ Stream2StreamAO stream2Stream = irodsAccessObjectFactory.getStream2StreamAO(irodsAccount)
+ stream2Stream.transferStreamToFileUsingIOStreams(fis, targetFile, f.size, 0)
+ } catch (NoResourceDefinedException nrd) {
+ log.error("no resource defined exception", nrd)
+ response.sendError(500, message(code:"message.no.resource"))
+ } catch (Exception e) {
+ log.error("exception in upload transfer", e)
+ response.sendError(500, message(code:"message.error.in.upload"))
+ } finally {
+ // stream2Stream will close input and output streams
+ }
+
+ render "{\"name\":\"${name}\",\"type\":\"image/jpeg\",\"size\":\"1000\"}"
+ }
+
+}
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SearchController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SearchController.groovy
index e2bf914..069153b 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SearchController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SearchController.groovy
@@ -3,10 +3,9 @@ package org.irods.mydrop.controller
import org.irods.jargon.core.connection.*
import org.irods.jargon.core.exception.*
import org.irods.jargon.core.pub.*
-import org.irods.jargon.usertagging.FreeTaggingService
-import org.irods.jargon.usertagging.TaggingServiceFactory
import org.irods.jargon.usertagging.domain.TagQuerySearchResult
-import org.irods.jargon.core.pub.IRODSAccessObjectFactory
+import org.irods.jargon.usertagging.tags.FreeTaggingService
+import org.irods.jargon.usertagging.tags.TaggingServiceFactory
class SearchController {
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SharingController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SharingController.groovy
index 75584d5..f03e988 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SharingController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/SharingController.groovy
@@ -4,6 +4,7 @@ package org.irods.mydrop.controller
import grails.converters.JSON
import org.irods.jargon.core.connection.IRODSAccount
+import org.irods.jargon.core.exception.DataNotFoundException
import org.irods.jargon.core.exception.JargonException
import org.irods.jargon.core.protovalues.FilePermissionEnum
import org.irods.jargon.core.pub.CollectionAO
@@ -14,11 +15,15 @@ import org.irods.jargon.core.pub.UserAO
import org.irods.jargon.core.pub.domain.DataObject
import org.irods.jargon.core.utils.LocalFileUtils
import org.irods.jargon.core.utils.MiscIRODSUtils
+import org.irods.jargon.usertagging.domain.IRODSSharedFileOrCollection
+import org.irods.mydrop.service.SharingService
class SharingController {
IRODSAccessObjectFactory irodsAccessObjectFactory
IRODSAccount irodsAccount
+ SharingService sharingService
+ def grailsApplication
/**
* Interceptor grabs IRODSAccount from the SecurityContextHolder
@@ -38,6 +43,34 @@ class SharingController {
log.debug("closing the session")
irodsAccessObjectFactory.closeSession()
}
+
+ def getSharingDialogInfo = {
+ def absPath = params['absPath']
+ if (absPath == null) {
+ log.error "no absPath in request for showAclDetails()"
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ }
+
+ log.info("showAclDetails for absPath: ${absPath}")
+
+
+ boolean sharing = sharingService.isSharingSupported(irodsAccount)
+ log.info("sharing supported:${sharing}")
+
+ IRODSSharedFileOrCollection irodsSharedFileOrCollection
+ if (sharing) {
+ try {
+ irodsSharedFileOrCollection = sharingService.findShareForPath(absPath, irodsAccount)
+ } catch (JargonException je) {
+ log.warn("sharing does not seem to be supported, probably due to specific query not supported, treat as if sharing is off", je)
+ }
+ }
+
+ render(view:"sharingPanelWrapper",model:[absPath:absPath, irodsSharedFileOrCollection:irodsSharedFileOrCollection])
+
+
+ }
/**
* Load the acl details area, this will show the main form, and subsequently, the table will be loaded via AJAX
@@ -52,6 +85,19 @@ class SharingController {
}
log.info("showAclDetails for absPath: ${absPath}")
+
+
+ boolean sharing = sharingService.isSharingSupported(irodsAccount)
+ log.info("sharing supported:${sharing}")
+
+ IRODSSharedFileOrCollection irodsSharedFileOrCollection
+ if (sharing) {
+ try {
+ irodsSharedFileOrCollection = sharingService.findShareForPath(absPath, irodsAccount)
+ } catch (JargonException je) {
+ log.warn("sharing does not seem to be supported, probably due to specific query not supported, treat as if sharing is off", je)
+ }
+ }
try {
CollectionAndDataObjectListAndSearchAO collectionAndDataObjectListAndSearchAO = irodsAccessObjectFactory.getCollectionAndDataObjectListAndSearchAO(irodsAccount)
@@ -67,8 +113,7 @@ class SharingController {
getThumbnail = true
}
}
-
- render(view:"aclDetails",model:[retObj:retObj, isDataObject:isDataObject, absPath:absPath, getThumbnail:getThumbnail])
+ render(view:"aclDetails",model:[retObj:retObj, isDataObject:isDataObject, absPath:absPath, getThumbnail:getThumbnail, irodsSharedFileOrCollection:irodsSharedFileOrCollection])
} catch (org.irods.jargon.core.exception.FileNotFoundException fnf) {
log.info("file not found looking for data, show stand-in page", fnf)
render(view:"/browse/noInfo")
@@ -137,6 +182,135 @@ class SharingController {
render(view:"aclDialog", model:[absPath:absPath, userName:userName, userPermissionEnum:FilePermissionEnum.listAllValues(), isCreate:isCreate])
}
+
+ /**
+ * Create a dialog element for adding a share
+ */
+ def prepareAddShareDialog = {
+ log.info("prepareAddShareDialog")
+ log.info(params)
+ def absPath = params['absPath']
+ def formAction = "add"
+
+ if (!absPath) {
+ log.error "no absPath in request for prepareAclDialog()"
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ return
+ }
+
+ log.info("absPath:${absPath}")
+
+ def shareName = ""
+ render(view:"addShareDialog", model:[absPath:absPath, shareName:shareName, formAction:formAction])
+
+ }
+
+ /**
+ * SHow a dialog that can edit the share
+ */
+ def prepareEditShareDialog = {
+ log.info("prepareExistingShareDialog")
+ log.info(params)
+ def absPath = params['absPath']
+ def formAction = "update"
+
+ if (!absPath) {
+ log.error "no absPath in request for prepareExistingShareDialog()"
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ return
+ }
+
+ log.info("absPath:${absPath}")
+
+ boolean sharing = sharingService.isSharingSupported(irodsAccount)
+ log.info("sharing supported:${sharing}")
+
+ IRODSSharedFileOrCollection irodsSharedFileOrCollection
+ if (sharing) {
+ try {
+ irodsSharedFileOrCollection = sharingService.findShareForPath(absPath, irodsAccount)
+ } catch (JargonException je) {
+ log.warn("sharing does not seem to be supported, probably due to specific query not supported, treat as if sharing is off", je)
+ }
+ }
+
+ render(view:"addShareDialog", model:[absPath:absPath, shareName:irodsSharedFileOrCollection.shareName, formAction:formAction])
+ }
+
+ def processUpdateShareDialog = {
+
+ log.info("processUpdateShareDialog")
+ log.info(params)
+ def absPath = params['absPath']
+ def shareName = params['shareName']
+ String formAction = params['formAction']
+
+ if (!absPath) {
+ log.error "no absPath in request for prepareAclDialog()"
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ return
+ }
+
+ if (!formAction) {
+ log.error "no action in request for prepareAclDialog()"
+ def message = message(code:"error.no.action")
+ response.sendError(500,message)
+ return
+ }
+
+ if (!shareName) {
+ flash.message = message(code:"error.no.share.name")
+ render(view:"addShareDialog", model:[absPath:absPath, formAction:formAction, shareName:shareName])
+ return
+ }
+
+ log.info("checking action to see if add or update, current action is ${formAction}")
+ IRODSSharedFileOrCollection irodsSharedFileOrCollection
+ if (formAction == "add") {
+ log.info("adding share:${shareName}")
+ try {
+ irodsSharedFileOrCollection = sharingService.createShare(absPath, shareName, irodsAccount)
+ log.info("rendering new share:${irodsSharedFileOrCollection}")
+ } catch(DataNotFoundException e) {
+ def message = message(code:"error.duplicate.share")
+ response.sendError(500,message)
+ return
+ }
+
+ } else {
+ irodsSharedFileOrCollection = sharingService.updateShare(absPath, shareName, irodsAccount)
+ log.info("updated share to:${irodsSharedFileOrCollection}")
+ }
+
+ flash.message = message(code:"message.share.update.successful")
+ render(view:"sharingPanelWrapper", model:[absPath:absPath, irodsSharedFileOrCollection:irodsSharedFileOrCollection, formAction:formAction])
+
+ }
+
+ /**
+ * Remove a share at a given absolute path
+ */
+ def removeShare = {
+
+ log.info("removeShare")
+ log.info(params)
+ def absPath = params['absPath']
+
+ if (!absPath) {
+ log.error "no absPath in request for removeShare()"
+ def message = message(code:"error.no.path.provided")
+ response.sendError(500,message)
+ return
+ }
+
+ flash.message = message(code:"message.share.delete.successful")
+ sharingService.deleteShare(absPath, irodsAccount)
+ redirect(action: "getSharingDialogInfo", params: [absPath: absPath])
+ }
+
def processAddAclDialog = {
log.info("processAddAclDialog")
@@ -405,7 +579,8 @@ class SharingController {
render jsonBuff as JSON
}
-
+
+
def deleteAcl = {
log.info("deleteAcl")
log.info(params)
@@ -514,6 +689,8 @@ class SharingController {
}
+
+
class AclCommand {
String absPath
String acl
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ShoppingCartController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ShoppingCartController.groovy
new file mode 100755
index 0000000..203e7d1
--- /dev/null
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/ShoppingCartController.groovy
@@ -0,0 +1,137 @@
+package org.irods.mydrop.controller
+
+import org.irods.jargon.core.connection.IRODSAccount;
+import org.irods.jargon.core.pub.IRODSAccessObjectFactory;
+import org.irods.mydrop.service.ShoppingCartSessionService;
+
+/**
+* Controller for shopping cart functionality
+* @author Mike Conway - DICE (www.irods.org)
+*/
+
+class ShoppingCartController {
+
+ IRODSAccessObjectFactory irodsAccessObjectFactory
+ IRODSAccount irodsAccount
+ ShoppingCartSessionService shoppingCartSessionService
+ def grailsApplication
+
+ /**
+ * Interceptor grabs IRODSAccount from the SecurityContextHolder
+ */
+ def beforeInterceptor = [action:this.&auth]
+
+ def auth() {
+ if(!session["SPRING_SECURITY_CONTEXT"]) {
+ redirect(controller:"login", action:"login")
+ return false
+ }
+ irodsAccount = session["SPRING_SECURITY_CONTEXT"]
+ }
+
+ def afterInterceptor = {
+ log.debug("closing the session")
+ irodsAccessObjectFactory.closeSession()
+ }
+
+
+ /**
+ * Show the cart main view
+ */
+ def index = {
+ log.info("index")
+ render(view:"index")
+ }
+
+
+ /**
+ * Build the JTable entries for the contents of the shopping cart
+ */
+ def listCart = {
+ log.info("listCart")
+ List<String> cart = shoppingCartSessionService.listCart()
+ render(view:"cartDetails", model:[cart:cart])
+ }
+
+ /**
+ * Clear the contents of the shopping cart
+ */
+ def clearCart = {
+ log.info("clearCart")
+ shoppingCartSessionService.clearCart()
+ render "OK"
+ }
+
+ /**
+ * Delete the given files from the shopping cart
+ */
+ def deleteFromCart = {
+ log.info("deleteFromCart")
+ log.info("params: ${params}")
+
+ def filesToDelete = params['selectCart']
+
+ // if nothing selected, just jump out and return a message
+ if (!filesToDelete) {
+ log.info("no files to delete")
+ render "OK"
+ return
+ }
+
+ log.info("filesToDelete: ${filesToDelete}")
+
+ if (filesToDelete instanceof Object[]) {
+ log.debug "is array"
+ filesToDelete.each{
+ log.info "filesToDelete: ${it}"
+ shoppingCartSessionService.deleteFromCart(it)
+ }
+
+ } else {
+ log.debug "not array"
+ log.info "deleting: ${filesToDelete}"
+ shoppingCartSessionService.deleteFromCart(filesToDelete)
+ }
+
+ render "OK"
+ }
+
+
+ /**
+ * Process a bulk add to cart action based on data input from the browse details form
+ */
+ def addToCartBulkAction = {
+ log.info("addToCartBulkAction")
+
+ log.info("params: ${params}")
+
+ def filesToAdd = params['selectDetail']
+
+ // if nothing selected, just jump out and return a message
+ if (!filesToAdd) {
+ log.info("no files to add")
+ render "OK"
+ return
+ }
+
+ log.info("filesToAdd: ${filesToAdd}")
+
+
+ if (filesToAdd instanceof Object[]) {
+ log.debug "is array"
+ filesToAdd.each{
+ log.info "filesToAdd: ${it}"
+ shoppingCartSessionService.addToCart(it)
+
+ }
+
+ } else {
+ log.debug "not array"
+ log.info "adding: ${filesToAdd}"
+ shoppingCartSessionService.addToCart(filesToAdd)
+ }
+
+ render "OK"
+ }
+
+}
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TagsController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TagsController.groovy
index 5cdc4f9..3295e96 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TagsController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TagsController.groovy
@@ -6,12 +6,12 @@ import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.exception.JargonException
import org.irods.jargon.core.pub.IRODSAccessObjectFactory
import org.irods.jargon.core.pub.io.IRODSFile
-import org.irods.jargon.usertagging.FreeTaggingService
-import org.irods.jargon.usertagging.IRODSTaggingService
-import org.irods.jargon.usertagging.TaggingServiceFactory
-import org.irods.jargon.usertagging.UserTagCloudService
import org.irods.jargon.usertagging.domain.IRODSTagValue
import org.irods.jargon.usertagging.domain.UserTagCloudView
+import org.irods.jargon.usertagging.tags.FreeTaggingService
+import org.irods.jargon.usertagging.tags.IRODSTaggingService
+import org.irods.jargon.usertagging.tags.TaggingServiceFactory
+import org.irods.jargon.usertagging.tags.UserTagCloudService
import org.jsoup.Jsoup
import org.jsoup.safety.Whitelist
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketAccessController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketAccessController.groovy
index 3ae8548..3ae8548 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketAccessController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketAccessController.groovy
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketController.groovy
index f7cec50..f7cec50 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/TicketController.groovy
diff --git a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/UserController.groovy b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/UserController.groovy
index ca176db..ca176db 100644..100755
--- a/idrop-web/grails-app/controllers/org/irods/mydrop/controller/UserController.groovy
+++ b/idrop-web/grails-app/controllers/org/irods/mydrop/controller/UserController.groovy
diff --git a/idrop-web/grails-app/i18n/messages.properties b/idrop-web/grails-app/i18n/messages.properties
index 3b82c4a..c3ccc1e 100644..100755
--- a/idrop-web/grails-app/i18n/messages.properties
+++ b/idrop-web/grails-app/i18n/messages.properties
@@ -1,8 +1,11 @@
# button and heading messages
+text.account=Account
text.actions=Actions
text.add.metadata=Add Metadata
text.add.all.to.cart=Add all selected items to the cart
+text.add.share=Add a share
text.add.to.cart=Add to Cart
+text.address=Address
text.apply.to.all=Apply an action to all selected items
text.attribute=Attribute
text.audit=Audit
@@ -13,57 +16,96 @@ text.browse=Browse
text.bulk.action=Bulk Action
text.bulk.upload=Bulk Upload
text.cancel=Cancel
-text.changePassword=Change Password
+text.change.password=Change Password
text.change.password.header=Enter new password and enter again to confirm, then press Update
+text.checksum=Checksum
text.check.out=Check Out Cart
+text.city=City
+text.created=Created
text.create.ticket=Create Ticket
+text.comment=Comment
text.confirm.password=Confirm Password
text.content=Content
text.create.public.link=Create public link
+text.data.path=Data Path
+text.delete=Delete
text.delete.all=Delete all selected items
text.delete.metadata=Delete Metadata
text.description=Description
text.display.option=Display Option
text.download=Download
text.edit=Edit
+text.edit.share=Edit Share
text.email=Email
text.file=File
+text.file.name=File Name
+text.first.name=First Name
text.forward=Page Forward
text.find.path.in.tree=Open the path in the tree
+text.folders.shared.with.me=Folders shared with me
+text.folders.shared.by.me=Folders shared by me
text.gallery=Gallery
text.grant=Grant public access
text.guest.login=Use a guest login
+text.action.help=Action help
text.home=Home
text.host=Host
text.id=ID
text.info=Info
text.idrop.lite=Idrop Lite
text.irods.uri=iRODS URI
+text.last.name=Last Name
+text.length=Size
text.login=Login
text.logout=Logout
text.metadata=Metadata
+text.modified=Modified
text.name=Name
text.new.folder=New Folder
+text.object.path=Object Path
+text.optional=(Optional)
+text.owner=Owner
+text.owner.zone=Owner Zone
+text.parent=Parent Collection
text.path=Path
text.password=Password
text.permissions=Permissions
text.personal.blurb=Personal Blurb
text.port=Port
+text.postal.code=Postal Code
+text.post.office.box=Post Office Box
text.profile=Profile
text.profile.header=Profile - Manage personal profile information and settings
-text.quick.transfers=Quick Transfer
+text.quick.upload=Quick Upload
text.refresh=Refresh
+text.remove.share=Remove Share
+text.replica.number=Replica Number
+text.replication.status=Replication Status
text.rename=Rename
text.resource=Resource
+text.resource.group=Resource Group
text.search=Search
+text.set.as.root=Set this as the root of the tree
+text.set.default.resource=Set default resource
text.share=Share
+text.share.name=Share Name
text.share.type=Share Permission
-text.sharing=Permissions
+text.sharing=Sharing
+text.shopping.cart=Shopping Cart
text.show.in.tree=Show in File Tree
text.show.menu=Show/Hide Side Bar
text.show.shared.by=Shared By
text.show.shared.with=Shared With
text.share.with.selected.users=Share with selected users
+text.star=Star Collection
+text.starred=Starred
+text.star.file=Star File
+text.starred.files=Starred Files
+text.starred.folders=Starred Folders
+text.state=State
+text.status=Status
+text.tags=Tags
+text.telephone.number=Telephone Number
text.tickets=Tickets
text.ticket.email=Create and Email a Ticket
text.ticket.expire.time=Expire Time
@@ -74,7 +116,6 @@ text.ticket.user=Ticket Owner
text.ticket.owner.zone=Owner Zone
text.ticket.type=Ticket Type
text.ticket.object.type=Object Type
-text.optional=(Optional)
text.ticket.uses.count=Uses Count
text.ticket.uses.limit=Uses Limit
text.ticket.byte.count=Write Bytes Count
@@ -83,15 +124,20 @@ text.ticket.file.count=Write File Count
text.ticket.file.limit=Write File Limit
text.ticket.url=Ticket URL
text.ticket.url.landing=Show landing page
+text.title=Title
text.tags=Tags
text.timestamp=Timestamp
text.type=Type
text.tools=Tools
text.unit=Unit
text.update=Update
+text.updated=Updated
text.upload=Upload
text.upload.and.download=Upload and Download
+text.url=URL
text.user=User Name
+text.unstar=Unstar
+text.version=Version
text.nickname=Nick Name
text.value=Value
text.view=View
@@ -103,17 +149,26 @@ text.new.folder=New Folder
heading.anonymous.access.set=The link below gives the recipient anonymous access to the file or collection through iDrop-web. Anonymous access is enabled for the file.
heading.anonymous.access.enable=Anonymous access is not yet enabled for this file. Selecting allow will enable anonymous access to the file or collection, and a link will be displayed.
+heading.add.share=Add a Share - Add a top level share visible to users you give access rights to
heading.audit=Audit - view audit trail information
heading.browsing=Browsing - view data in collections
+heading.info=Basic information, including update of tags and a description
heading.loading.for.link=Loading page for link
heading.sharing=Sharing - set access permissions
-heading.metadata=Metadata - view and edit AVU metadata
-heading.info=Info - details about files and collections
+heading.tickets=Tickets are tokens to iRODS files and collections that may be shared. Anyone with a ticket may access your data, so you can email them, share them on social media sites, and the like.<p/>Tickets can be limited on number of uses, and on things like total bytes, expiration date, and the like. Open a ticket to see details and to get a link that may be copied and shared.
+heading.metadata=View and edit AVU metadata.<p/>These Attribute, Value, Unit elements can be used to describe your data. You may add, or select items to delete. You may also click on the AVUs in the table to modify them.
+heading.metadata.details=Add an AVU metadata element by entering attribute, value, and unit (optional) and pressing Update
+heading.permissions=Modify and manage iRODS ACL (Access Control List) file permissions. <p/>This allows you to see who has different access to your files and collections, and to change that access. Note that you may select items using the check box to delete them, and you may also click on the permissions in the table to update them.
+heading.rename.dialog=Rename a file or collection
+heading.shopping.cart=File shopping cart, this shows files and collections that have been selected from iDrop. Checking out will bring up a download tool, where you can specify the local file directoy you would like to download the selected files
+heading.star.dialog=Star a file or collection
heading.user.search=Search for a user based on selected search type
heading.user.information=User Information
heading.enter.user.or.search=Enter a complete or partial search term to bring up a user list, then select the desired permission and press 'Save'
heading.no.search.yet=No seach results to display. Use the search toolbar above to search for files and folders
heading.new.folder.dialog=Enter a name for the new folder and press Update to create
+heading.set.resource=Set the default resource. <p/>This sets the place where files are stored and retrieved, leaving it blank will use the default for the grid.
+heading.upload.dialog=Upload a file using the browser upload tool
heading.upload.ticket.collection=Select a local file to upload to the ticket collection in iRODS
@@ -123,11 +178,14 @@ browse.page.prompt=Select a directory or file to see info and tags based on the
# messages
error.confirm.password.missing=Confirmation password is null or blank
error.nothing.selected=Nothing was selected for the action
+error.no.action=No action found
error.no.audit.access=This user does not have permission to view audit data
error.no.data.found=No data found
+error.no.share.name=No share name was provided, please enter a share name
error.no.ticket.found=No ticket was found
error.data.error=Invalid data entered
error.unable.to.find.acl=Unable to find ACL data
+error.no.description.provided=No description provided
error.no.path.provided=No file path provided in request
error.no.timestamp.provided=No timestamp provided in request
error.no.user.name.provided=No user name provided in request
@@ -137,6 +195,8 @@ error.no.uri.provided=No iRODS URI provided in request
error.duplicate.acl=User already has an ACL
error.duplicate.file=File already exists
error.duplicate.metadata=Metadata entry already exists
+error.dupicate.share=Duplicate share data, reload and try again
+error.file.not.found=The file was not found, please reload
error.no.resource=No resource name provided
error.passwords.dont.match=Confirm password not equal to password
error.rename.to.self=File cannot be renamed to same name, ignored
@@ -149,9 +209,19 @@ error.unable.to.add.anonymous.access=Unable to set anonymous access for this fil
error.auth.invalid.host=Invalid host
error.auth.invalid.user=User or password is invalid
error.unable.to.authenticate=Unable to authenticate
+error.some.error.occurred=An error occurred processing your request, please inform the system administrator
message.update.successful=Update successful
-
+message.no.resource=A default resource needs to be selected from the combo box in the upper right-hand corner. Select a resource and try your request again
+message.error.in.upload=An error occurred in uploading this file. If the problem persists, contact the service administrator
+message.password.updated=The password was successfully updated
+message.resource.updated=Default storage resource updated successfully
+message.update.successful=Update successful
+message.no.starred=No starred files or folders to display
+message.cannot.create.profile=A profile cannot be created for this user, this may be a mis-configuration
+message.no.files.to.display=No files to display
+message.share.delete.successful=Delete of share successful, note that permissions still remain as defined before
+message.update.share.successful=Update of share successful
# validation errors
org.irods.mydrop.controller.AddMetadataCommand.attribute.blank.error.attribute=Attribute must be entered
org.irods.mydrop.controller.AddMetadataCommand.value.blank.error.value=Value must be entered
@@ -169,9 +239,9 @@ default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}]
default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
-default.blank.message=Property [{0}] of class [{1}] cannot be blank
+default.blank.message={0} cannot be blank
default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}]
-default.null.message=Property [{0}] of class [{1}] cannot be null
+default.null.message={0} cannot be null
default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique
default.paginate.prev=Previous
diff --git a/idrop-web/grails-app/i18n/messages_da.properties b/idrop-web/grails-app/i18n/messages_da.properties
index fe680ae..fe680ae 100644..100755
--- a/idrop-web/grails-app/i18n/messages_da.properties
+++ b/idrop-web/grails-app/i18n/messages_da.properties
diff --git a/idrop-web/grails-app/i18n/messages_de.properties b/idrop-web/grails-app/i18n/messages_de.properties
index a942358..a942358 100644..100755
--- a/idrop-web/grails-app/i18n/messages_de.properties
+++ b/idrop-web/grails-app/i18n/messages_de.properties
diff --git a/idrop-web/grails-app/i18n/messages_es.properties b/idrop-web/grails-app/i18n/messages_es.properties
index 6295b77..6295b77 100644..100755
--- a/idrop-web/grails-app/i18n/messages_es.properties
+++ b/idrop-web/grails-app/i18n/messages_es.properties
diff --git a/idrop-web/grails-app/i18n/messages_fr.properties b/idrop-web/grails-app/i18n/messages_fr.properties
index b1d665c..b1d665c 100644..100755
--- a/idrop-web/grails-app/i18n/messages_fr.properties
+++ b/idrop-web/grails-app/i18n/messages_fr.properties
diff --git a/idrop-web/grails-app/i18n/messages_it.properties b/idrop-web/grails-app/i18n/messages_it.properties
index ea83b92..ea83b92 100644..100755
--- a/idrop-web/grails-app/i18n/messages_it.properties
+++ b/idrop-web/grails-app/i18n/messages_it.properties
diff --git a/idrop-web/grails-app/i18n/messages_ja.properties b/idrop-web/grails-app/i18n/messages_ja.properties
index 9f49249..9f49249 100644..100755
--- a/idrop-web/grails-app/i18n/messages_ja.properties
+++ b/idrop-web/grails-app/i18n/messages_ja.properties
diff --git a/idrop-web/grails-app/i18n/messages_nl.properties b/idrop-web/grails-app/i18n/messages_nl.properties
index cd5cc94..cd5cc94 100644..100755
--- a/idrop-web/grails-app/i18n/messages_nl.properties
+++ b/idrop-web/grails-app/i18n/messages_nl.properties
diff --git a/idrop-web/grails-app/i18n/messages_pt_BR.properties b/idrop-web/grails-app/i18n/messages_pt_BR.properties
index 2a92707..2a92707 100644..100755
--- a/idrop-web/grails-app/i18n/messages_pt_BR.properties
+++ b/idrop-web/grails-app/i18n/messages_pt_BR.properties
diff --git a/idrop-web/grails-app/i18n/messages_pt_PT.properties b/idrop-web/grails-app/i18n/messages_pt_PT.properties
index 43a6416..43a6416 100644..100755
--- a/idrop-web/grails-app/i18n/messages_pt_PT.properties
+++ b/idrop-web/grails-app/i18n/messages_pt_PT.properties
diff --git a/idrop-web/grails-app/i18n/messages_ru.properties b/idrop-web/grails-app/i18n/messages_ru.properties
index 02239db..02239db 100644..100755
--- a/idrop-web/grails-app/i18n/messages_ru.properties
+++ b/idrop-web/grails-app/i18n/messages_ru.properties
diff --git a/idrop-web/grails-app/i18n/messages_th.properties b/idrop-web/grails-app/i18n/messages_th.properties
index 24163ad..24163ad 100644..100755
--- a/idrop-web/grails-app/i18n/messages_th.properties
+++ b/idrop-web/grails-app/i18n/messages_th.properties
diff --git a/idrop-web/grails-app/i18n/messages_zh_CN.properties b/idrop-web/grails-app/i18n/messages_zh_CN.properties
index 782580b..782580b 100644..100755
--- a/idrop-web/grails-app/i18n/messages_zh_CN.properties
+++ b/idrop-web/grails-app/i18n/messages_zh_CN.properties
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/I18NMessagingService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/I18NMessagingService.groovy
index 782cb3b..782cb3b 100644..100755
--- a/idrop-web/grails-app/services/org/irods/mydrop/service/I18NMessagingService.groovy
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/I18NMessagingService.groovy
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/ProfileService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/ProfileService.groovy
index 0892289..0892289 100644..100755
--- a/idrop-web/grails-app/services/org/irods/mydrop/service/ProfileService.groovy
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/ProfileService.groovy
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/SharingService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/SharingService.groovy
new file mode 100644
index 0000000..ab13cd6
--- /dev/null
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/SharingService.groovy
@@ -0,0 +1,180 @@
+package org.irods.mydrop.service
+
+import org.codehaus.groovy.grails.commons.ApplicationHolder
+import org.irods.jargon.core.connection.IRODSAccount
+import org.irods.jargon.core.exception.JargonException
+import org.irods.jargon.core.pub.IRODSAccessObjectFactory
+import org.irods.jargon.usertagging.domain.IRODSSharedFileOrCollection
+import org.irods.jargon.usertagging.sharing.IRODSSharingService
+import org.irods.jargon.usertagging.sharing.IRODSSharingServiceImpl
+
+/**
+ * Service to manage shares, which are treated like first class objects, managing marking as a share and updating ACLs via the jargon-user-tagging
+ * share services.
+ *
+ * @author Mike Conway - DICE (www.irods.org).
+ *
+ */
+@SuppressWarnings("deprecation")
+class SharingService {
+
+ static transactional = false
+ IRODSAccessObjectFactory irodsAccessObjectFactory
+
+ /**
+ * Check to see if sharing is enabled, either by the idrop config setting (idrop.config.use.sharing), or because
+ * a previous request indicated that sharing was not supported for this grid
+ *
+ * @param irodsAccount
+ * @return <code>boolean</code> that will be <code>false</code> if I should not bother with the sharing feature
+ * @throws JargonException
+ */
+ boolean isSharingSupported(IRODSAccount irodsAccount) throws JargonException {
+
+ boolean sharing = ApplicationHolder.application.config.idrop.config.use.sharing
+ log.info("sharing supported in config:${sharing}")
+
+ if (sharing) {
+ log.info("supported in config, see if specific query is set up for sharing...")
+ def prop = irodsAccessObjectFactory.discoveredServerPropertiesCache.retrieveValue(irodsAccount.getHost(), irodsAccount.getZone(), IRODSSharingService.SHARING_DISABLED_PROPERTY)
+ if (prop) {
+ log.info("sharing is disabled, no specific query support is enabled")
+ sharing = false;
+ }
+ }
+
+ return sharing
+
+ }
+
+ /**
+ * List all shares owned by the given user (Shared by me with others)
+ * @param irodsAccount
+ * @return
+ * @throws JargonException
+ */
+ List<IRODSSharedFileOrCollection> listCollectionsSharedByMe(IRODSAccount irodsAccount) throws JargonException {
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSSharingService irodsSharingService = new IRODSSharingServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ return irodsSharingService.listSharedCollectionsOwnedByAUser(irodsAccount.getUserName(), irodsAccount.getZone())
+ }
+
+ /**
+ * List all shares with the given user (shared by others with me)
+ * @param irodsAccount
+ * @return
+ * @throws JargonException
+ */
+ List<IRODSSharedFileOrCollection> listCollectionsSharedWithMe(IRODSAccount irodsAccount) throws JargonException {
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSSharingService irodsSharingService = new IRODSSharingServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ return irodsSharingService.listSharedCollectionsSharedWithUser(irodsAccount.getUserName(), irodsAccount.getZone())
+ }
+
+ /**
+ * Find a share if it exists, otherwise null will be returned
+ * @param irodsAbsolutePath
+ * @return
+ * @throws JargonException
+ */
+ IRODSSharedFileOrCollection findShareForPath(String irodsAbsolutePath, IRODSAccount irodsAccount) throws JargonException {
+
+ if (irodsAbsolutePath == null || irodsAbsolutePath.isEmpty()) {
+ throw new IllegalArgumentException("null or empty irodsAbsolutePath")
+ }
+
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSSharingService irodsSharingService = new IRODSSharingServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ return irodsSharingService.findShareByAbsolutePath(irodsAbsolutePath)
+
+ }
+
+ /**
+ * Create a share with a short-hand method that does not list users, these can be set by setting ACLs as normal
+ * @param irodsAbsolutePath
+ * @param shareName
+ * @param irodsAccount
+ * @throws JargonException
+ */
+ IRODSSharedFileOrCollection createShare(String irodsAbsolutePath, String shareName, IRODSAccount irodsAccount) throws JargonException {
+
+ if (irodsAbsolutePath == null || irodsAbsolutePath.isEmpty()) {
+ throw new IllegalArgumentException("null or empty irodsAbsolutePath")
+ }
+
+ if (shareName == null || shareName.isEmpty()) {
+ throw new IllegalArgumentException("null or empty shareName")
+ }
+
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSSharingService irodsSharingService = new IRODSSharingServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ irodsSharingService.createShare(irodsAbsolutePath, shareName);
+ return irodsSharingService.findShareByAbsolutePath(irodsAbsolutePath)
+ }
+
+ /**
+ * Update the given share to the new share name
+ * @param irodsAbsolutePath
+ * @param newShareName
+ * @param irodsAccount
+ * @return
+ * @throws JargonException
+ */
+ IRODSSharedFileOrCollection updateShare(String irodsAbsolutePath, String newShareName, IRODSAccount irodsAccount) throws JargonException {
+ if (irodsAbsolutePath == null || irodsAbsolutePath.isEmpty()) {
+ throw new IllegalArgumentException("null or empty irodsAbsolutePath")
+ }
+
+ if (newShareName == null || newShareName.isEmpty()) {
+ throw new IllegalArgumentException("null or empty newShareName")
+ }
+
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSSharingService irodsSharingService = new IRODSSharingServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ irodsSharingService.updateShareName(irodsAbsolutePath, newShareName)
+ return irodsSharingService.findShareByAbsolutePath(irodsAbsolutePath)
+ }
+
+ /**
+ * Delete the share at the given path
+ * @param irodsAbsolutePath
+ * @param irodsAccount
+ * @return
+ * @throws JargonException
+ */
+ void deleteShare(String irodsAbsolutePath, IRODSAccount irodsAccount) throws JargonException {
+
+ log.info("deleteShare()")
+ if (irodsAbsolutePath == null || irodsAbsolutePath.isEmpty()) {
+ throw new IllegalArgumentException("null or empty irodsAbsolutePath")
+ }
+
+
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+
+ log.info("share to delete:${irodsAbsolutePath}")
+ IRODSSharingService irodsSharingService = new IRODSSharingServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ irodsSharingService.removeShare(irodsAbsolutePath)
+ log.info("share removed")
+ }
+
+
+}
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/ShoppingCartSessionService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/ShoppingCartSessionService.groovy
index d2e7aa1..1bd0caa 100644..100755
--- a/idrop-web/grails-app/services/org/irods/mydrop/service/ShoppingCartSessionService.groovy
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/ShoppingCartSessionService.groovy
@@ -21,6 +21,17 @@ class ShoppingCartSessionService {
FileShoppingCart fileShoppingCart = getCartFromSessionAndCreateIfNotThere()
fileShoppingCart.addAnItem(new ShoppingCartEntry(irodsFileAbsolutePath))
}
+
+ /**
+ * Get a count of items in the cart (right now high level items, trying to cut down on queries)
+ * @return <code>int</code> with count of entries in the cart
+ */
+ public int getCartItemsCount() {
+ FileShoppingCart fileShoppingCart = getCartFromSession()
+ return fileShoppingCart.shoppingCartEntries.size()
+
+ }
+
/**
* List the contents of the cart as a list of file names
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/StarringService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/StarringService.groovy
new file mode 100644
index 0000000..c6e55d7
--- /dev/null
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/StarringService.groovy
@@ -0,0 +1,66 @@
+package org.irods.mydrop.service
+
+import org.irods.jargon.core.connection.IRODSAccount
+import org.irods.jargon.core.exception.JargonException
+import org.irods.jargon.core.pub.IRODSAccessObjectFactory
+import org.irods.jargon.usertagging.domain.IRODSStarredFileOrCollection
+import org.irods.jargon.usertagging.starring.IRODSStarringService
+import org.irods.jargon.usertagging.starring.IRODSStarringServiceImpl
+
+/**
+ * Service to 'star' or favorite folders and files
+ * @author Mike Conway - DICE (www.irods.org)
+ *
+ */
+class StarringService {
+
+ static transactional = false
+ IRODSAccessObjectFactory irodsAccessObjectFactory
+
+
+ IRODSStarredFileOrCollection findStarred(IRODSAccount irodsAccount, String irodsAbsolutePath) throws FileNotFoundException, JargonException {
+
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSStarringService irodsStarringService = new IRODSStarringServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ return irodsStarringService.findStarredForAbsolutePath(irodsAbsolutePath)
+ }
+
+ void star(IRODSAccount irodsAccount, String irodsAbsolutePath, String description) throws FileNotFoundException, JargonException {
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSStarringService irodsStarringService = new IRODSStarringServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ irodsStarringService.starFileOrCollection(irodsAbsolutePath, description)
+ }
+
+ void unStar(IRODSAccount irodsAccount, String irodsAbsolutePath) throws FileNotFoundException, JargonException {
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSStarringService irodsStarringService = new IRODSStarringServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ irodsStarringService.unstarFileOrCollection(irodsAbsolutePath)
+ }
+
+ List<IRODSStarredFileOrCollection> listStarredCollections(IRODSAccount irodsAccount, int pagingOffset) throws JargonException {
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSStarringService irodsStarringService = new IRODSStarringServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ return irodsStarringService.listStarredCollections(pagingOffset)
+ }
+
+ List<IRODSStarredFileOrCollection> listStarredDataObjects(IRODSAccount irodsAccount, int pagingOffset) throws JargonException {
+ if (irodsAccount == null) {
+ throw new IllegalArgumentException("null irodsAccount");
+ }
+
+ IRODSStarringService irodsStarringService = new IRODSStarringServiceImpl(irodsAccessObjectFactory, irodsAccount)
+ return irodsStarringService.listStarredDataObjects(pagingOffset)
+ }
+}
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/ThumbnailGeneratorService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/ThumbnailGeneratorService.groovy
index 37c19a7..37c19a7 100644..100755
--- a/idrop-web/grails-app/services/org/irods/mydrop/service/ThumbnailGeneratorService.groovy
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/ThumbnailGeneratorService.groovy
diff --git a/idrop-web/grails-app/services/org/irods/mydrop/service/ViewStateService.groovy b/idrop-web/grails-app/services/org/irods/mydrop/service/ViewStateService.groovy
new file mode 100644
index 0000000..baabfcb
--- /dev/null
+++ b/idrop-web/grails-app/services/org/irods/mydrop/service/ViewStateService.groovy
@@ -0,0 +1,84 @@
+package org.irods.mydrop.service
+
+import javax.servlet.http.HttpSession
+
+import org.irods.mydrop.config.ViewState
+import org.springframework.web.context.request.RequestContextHolder
+
+class ViewStateService {
+
+ static transactional = false
+ //static scope = "session"
+
+ /**
+ * Get the stored root path
+ * @return
+ */
+ public String retrieveRootPath() {
+ ViewState viewState = getViewStateFromSessionAndCreateIfNotThere()
+ return viewState.rootPath
+ }
+
+ /**
+ * clear the view state
+
+ */
+ public void clearViewState() {
+ getSession().viewState = null
+
+ }
+
+ /**
+ * Store the root Path
+ * @param path
+ * @return
+ */
+ public void saveRootPath(String path) {
+ if (path == null) {
+ throw new IllegalArgumentException("null path")
+ }
+
+ ViewState viewState = getViewStateFromSessionAndCreateIfNotThere()
+ viewState.rootPath = path
+
+ }
+
+ /**
+ * Returnt the view mode associated with the browser
+ * @return
+ */
+ public String retrieveViewMode() {
+ ViewState viewState = getViewStateFromSessionAndCreateIfNotThere()
+ return viewState.browseView
+ }
+
+ public void saveViewMode(String viewMode) {
+ if (viewMode == null) {
+ throw new IllegalArgumentException("null viewMode")
+ }
+ ViewState viewState = getViewStateFromSessionAndCreateIfNotThere()
+ viewState.browseView = viewMode
+ }
+
+
+ private ViewState getStateFromSession() {
+ ViewState viewState = getSession().viewState
+ return viewState
+ }
+
+ public ViewState getViewStateFromSessionAndCreateIfNotThere() {
+ ViewState viewState = getStateFromSession()
+ if (!viewState) {
+ log.info("no viewStat, create one")
+ viewState = new ViewState()
+ getSession().viewState = viewState
+ }
+ return viewState
+
+ }
+
+ private HttpSession getSession() {
+ return RequestContextHolder.currentRequestAttributes().getSession()
+ }
+
+}
diff --git a/idrop-web/grails-app/taglib/idrop/web2/AuthUserTagTagLib.groovy b/idrop-web/grails-app/taglib/idrop/web2/AuthUserTagTagLib.groovy
new file mode 100644
index 0000000..f5c4cee
--- /dev/null
+++ b/idrop-web/grails-app/taglib/idrop/web2/AuthUserTagTagLib.groovy
@@ -0,0 +1,13 @@
+package idrop.web2
+
+import org.irods.jargon.core.connection.IRODSAccount;
+
+class AuthUserTagTagLib {
+ def accountInfo = {attrs, body ->
+ IRODSAccount irodsAccount = (IRODSAccount) session["SPRING_SECURITY_CONTEXT"]
+ if (irodsAccount != null) {
+ out << irodsAccount.userName + ":" + irodsAccount.zone
+ }
+ }
+
+}
diff --git a/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/AuthTagLib.groovy b/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/AuthTagLib.groovy
index 10cc81f..10cc81f 100644..100755
--- a/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/AuthTagLib.groovy
+++ b/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/AuthTagLib.groovy
diff --git a/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/ImageTagLib.groovy b/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/ImageTagLib.groovy
index 026faf0..026faf0 100644..100755
--- a/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/ImageTagLib.groovy
+++ b/idrop-web/grails-app/taglib/org/irods/mydrop/taglib/ImageTagLib.groovy
diff --git a/idrop-web/grails-app/views/audit/auditDetails.gsp b/idrop-web/grails-app/views/audit/auditDetails.gsp
index 75686b5..941e129 100644..100755
--- a/idrop-web/grails-app/views/audit/auditDetails.gsp
+++ b/idrop-web/grails-app/views/audit/auditDetails.gsp
@@ -1,22 +1,20 @@
<g:javascript library="mydrop/audit" />
-<h2>
- <g:message code="heading.audit" />
-</h2>
-<div id="detailsTopSection" class="box">
+<h3><a ><g:message code="text.audit" /></a></h3>
+<div id="detailsTopSection">
- <div id="detailsToolbar" class="fg-toolbar ui-widget-header">
+ <div id="detailsToolbar" >
<button type="button" id="reloadAuditButton"
- class="ui-state-default ui-corner-all" value="reloadAudit"
+ value="reloadAudit"
onclick="callReloadForAudit()")>
<g:message code="default.button.reload.label" />
</button>
<span id="backwardAuditButton"><button type="button" id="backwardAuditButton"
- class="ui-state-default ui-corner-all" value="backwardAudit"
+ value="backwardAudit"
onclick="backwardAudit()")>
<g:message code="text.backwards" />
</button></span>
<span id="forwardAuditButton"><button type="button" id="forwardAuditButton"
- class="ui-state-default ui-corner-all" value="forwardAudit"
+ value="forwardAudit"
onclick="forwardAudit()")>
<g:message code="text.forward" />
</button></span>
diff --git a/idrop-web/grails-app/views/audit/auditInfo.gsp b/idrop-web/grails-app/views/audit/auditInfo.gsp
index 0eb9335..0eb9335 100644..100755
--- a/idrop-web/grails-app/views/audit/auditInfo.gsp
+++ b/idrop-web/grails-app/views/audit/auditInfo.gsp
diff --git a/idrop-web/grails-app/views/audit/auditNoAccess.gsp b/idrop-web/grails-app/views/audit/auditNoAccess.gsp
index 4fb2d85..4fb2d85 100644..100755
--- a/idrop-web/grails-app/views/audit/auditNoAccess.gsp
+++ b/idrop-web/grails-app/views/audit/auditNoAccess.gsp
diff --git a/idrop-web/grails-app/views/audit/auditTable.gsp b/idrop-web/grails-app/views/audit/auditTable.gsp
index e0e7672..e0e7672 100644..100755
--- a/idrop-web/grails-app/views/audit/auditTable.gsp
+++ b/idrop-web/grails-app/views/audit/auditTable.gsp
diff --git a/idrop-web/grails-app/views/browse/_browseDetailsToolbar.gsp b/idrop-web/grails-app/views/browse/_browseDetailsToolbar.gsp
new file mode 100755
index 0000000..6de106f
--- /dev/null
+++ b/idrop-web/grails-app/views/browse/_browseDetailsToolbar.gsp
@@ -0,0 +1,10 @@
+<div id="browseDetailsToolbar" >
+<!-- <div class="pagination">
+ <ul>
+ <g:each in="${pagingActions.pagingIndexEntries}">
+ <li><a href="#">${it.representation}</a></li>
+ </g:each>
+ </ul>
+</div> -->
+</div>
+ \ No newline at end of file
diff --git a/idrop-web/grails-app/views/browse/_browseTabContent.gsp b/idrop-web/grails-app/views/browse/_browseTabContent.gsp
index de09171..a4e775e 100644..100755
--- a/idrop-web/grails-app/views/browse/_browseTabContent.gsp
+++ b/idrop-web/grails-app/views/browse/_browseTabContent.gsp
@@ -14,28 +14,28 @@
<div id="browseDialogArea"><!-- general area to spawn jquery dialogs --></div>
- <div id="browser" class="wrapper" style="height:85%;width:100%;clear:both;">
+ <div id="browser" class="wrapper" style="height:85%;width:100%;clear:both;overflow:hidden;">
<div id="dataTreeView" style="width: 100%; height: 700px; overflow: hidden;">
- <div id="dataTreeDivWrapper" class="ui-layout-west" style="width: 25%; height: 100%; position:relative;">
- <div id="dataTreeToolbar" style="width:100%; height:3%;display:block;" class="fg-toolbar">
+ <div id="dataTreeDivWrapper" class="ui-layout-west" style="width: 25%; height: 100%; overflow:hidden;">
+ <div id="dataTreeToolbar" style="width:100%; height:4%;display:block; margin:5px;" class="fg-toolbar">
+
- <div id="dataTreeMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left; clear : both; display:block; overflow:hidden;">
+ <div id="dataTreeMenu">
<button type="button" id="refreshTreeButton"
- class="ui-state-default ui-corner-left" value="refreshTreeButton"
+ value="refreshTreeButton"
onclick="refreshTree()")>
- <g:img dir="images" file="arrow-refresh.png" width="16" height="16"/>
+ <img class="icon-refresh"/>
</button>
<button type="button" id="homeTreeButton"
- class="ui-state-default" value="homeTreeButton"
+
onclick="setTreeToUserHome()")>
- <g:img dir="images" file="go-home-4.png" width="16" height="16"/>
+ <img class="icon-home"/>
</button>
<button type="button" id="rootTreeButton"
- class="ui-state-default ui-corner-right" value="rootTreeButton"
+ value="rootTreeButton"
onclick="setTreeToRoot()")>
- <g:img dir="images" file="go-parent-folder.png" width="16" height="16"/>
+ <img class="icon-arrow-up"/>
</button>
</div> <!-- dataTreeMenu -->
@@ -53,3 +53,7 @@
</div> <!-- infoDivOuter -->
</div> <!-- data tree view -->
</div> <!-- browser -->
+ <script>
+
+
+ </script>
diff --git a/idrop-web/grails-app/views/browse/_collectionInfoToolbar.gsp b/idrop-web/grails-app/views/browse/_collectionInfoToolbar.gsp
new file mode 100755
index 0000000..759543d
--- /dev/null
+++ b/idrop-web/grails-app/views/browse/_collectionInfoToolbar.gsp
@@ -0,0 +1,193 @@
+<div id="collectionInfoToolbar" >
+
+ <div id="collectionInfoToolbarMenu" class="btn-toolbar">
+
+ <div id="collectionInfoButtonGroup1" class="btn-group">
+ <button id="setCollectionAsRoot" onclick="cibSetCollectionAsRoot()"><img class="icon-hand-left"/><g:message
+ code="text.set.as.root" /></button>
+
+
+ <g:if test="${irodsStarredFileOrCollection}">
+ <button id="unstarCollection" onclick="cibUnstarCollection()"><img class="icon-star"/><g:message
+ code="text.unstar" /></button>
+ </g:if>
+ <g:else>
+ <button id="starCollection" onclick="cibStarCollection()"><img class="icon-star-empty"/><g:message
+ code="text.star" /></button>
+ </g:else>
+
+ </div>
+
+ <div id="collectionInfoButtonGroup2" class="btn-group">
+ <button id="addCollectionToCart" onclick="cibAddToCart()"><img class="icon-shopping-cart"/><g:message
+ code="text.add.to.cart" /></button>
+ <button id="uploadViaBrowser" onclick="cibUploadViaBrowser()"><img class="icon-upload"/><g:message
+ code="text.upload" /></button>
+ <button id="bulkUploadViaBrowser" onclick="cibBulkUploadViaBrowser()"><img class="icon-upload"/><g:message
+ code="text.bulk.upload" /></button>
+
+ </div>
+ <div id="collectionInfoButtonGroup3" class="btn-group">
+ <button id="newCollection" onclick="cibNewFolder()"><img class="icon-plus-sign"/><g:message
+ code="text.new.folder" /></button>
+ <button id="renameCollection" onclick="cibRenameCollection()"><img class="icon-pencil"/><g:message
+ code="text.rename" /></button>
+ <button id="deleteCollection" onclick="cibDeleteCollection()"><img class="icon-trash"/><g:message
+ code="text.delete" /></button>
+ </div>
+</div>
+
+
+<script type="text/javascript">
+
+ function cibSetCollectionAsRoot() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ setTreeToGivenPath(path);
+
+
+ }
+
+ /**
+ * Show the uplaod dialog using the hidden path in the info view
+ */
+ function cibUploadViaBrowser() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ showUploadDialogUsingPath(path);
+
+
+ }
+
+ /**
+ * Launch iDrop lite for bulk uplaod mode
+ */
+ function cibBulkUploadViaBrowser() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ showIdropLiteGivenPath(path, 2);
+ }
+
+ /**
+ * Create a new folder underneath the current directory
+ **/
+ function cibNewFolder() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+ newFolderViaToolbarGivenPath(path);
+ }
+
+ /**
+ * Delete the collection currently displayed in the info view
+ */
+ function cibRenameCollection() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ renameViaToolbarGivenPath(path);
+ }
+
+
+ /**
+ * call delete using the path in the info panel
+ */
+ function cibDeleteCollection() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ deleteViaToolbarGivenPath(path);
+ }
+
+ /**
+ * favorite, or 'star' the collection currently displayed in the info view
+ */
+ function cibStarCollection() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ if (path == null) {
+ setErrorMessage("No path was selected, use the tree to select an iRODS collection or file to star"); // FIXME:
+ // i18n
+ return;
+ }
+
+ lcShowBusyIconInDiv("#infoDialogArea");
+ var url = "/browse/prepareStarDialog";
+
+ var params = {
+ absPath : path
+ }
+
+ lcSendValueWithParamsAndPlugHtmlInDiv(url, params, "#infoDialogArea", null);
+ }
+
+ /**
+ * unfavorite favorite, or 'star' the collection currently displayed in the info view
+ */
+ function cibUnstarCollection() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ if (path == null) {
+ setErrorMessage("No path was selected, use the tree to select an iRODS collection or file to unstar"); // FIXME:
+ // i18n
+ return;
+ }
+
+ lcShowBusyIconInDiv("#infoDialogArea");
+ var url = "/browse/unstarFile";
+
+ var params = {
+ absPath : path
+ }
+
+ showBlockingPanel();
+
+ var jqxhr = $.post(context + url, params,
+ function(data, status, xhr) {
+ }, "html").success(
+ function(returnedData, status, xhr) {
+ var continueReq = checkForSessionTimeout(returnedData, xhr);
+ if (!continueReq) {
+ return false;
+ }
+ setMessage(jQuery.i18n.prop('msg_file_unstarred'));
+ updateBrowseDetailsForPathBasedOnCurrentModel(selectedPath);
+ closeStarDialog();
+ unblockPanel();
+ }).error(function(xhr, status, error) {
+ setErrorMessage(xhr.responseText);
+ closeStarDialog();
+ unblockPanel();
+ });
+
+ }
+
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/browse/_dataObjectInfoToolbar.gsp b/idrop-web/grails-app/views/browse/_dataObjectInfoToolbar.gsp
new file mode 100755
index 0000000..e0a673e
--- /dev/null
+++ b/idrop-web/grails-app/views/browse/_dataObjectInfoToolbar.gsp
@@ -0,0 +1,135 @@
+<div id="dataObjectInfoToolbar" >
+
+ <div id="dataObjectInfoToolbarMenu" class="btn-toolbar">
+
+ <div id="dataObjectInfoButtonGroup1" class="btn-group">
+ <g:if test="${irodsStarredFileOrCollection}">
+ <button id="unstarDataObject" onclick="dibUnstarFile()"><img class="icon-star"/><g:message
+ code="text.unstar" /></button>
+ </g:if>
+ <g:else>
+ <button id="starDataobject" onclick="dibStarFile()"><img class="icon-star-empty"/><g:message
+ code="text.star.file" /></button>
+ </g:else>
+ <button id="downloadFile" onclick="dibDownloadFile()"><img class="icon-download"/><g:message
+ code="text.download" /></button>
+ <button id="addToCart" onclick="dibAddToCart()"><img class="icon-shopping-cart"/><g:message
+ code="text.add.to.cart" /></button>
+ </div>
+ <div id="dataObjectInfoButtonGroup2" class="btn-group">
+ <button id="renameDataObject" onclick="dibRenameFile()"><img class="icon-pencil"/><g:message
+ code="text.rename" /></button>
+ <button id="deleteDataObject" onclick="dibDeleteFile()"><img class="icon-trash"/><g:message
+ code="text.delete" /></button>
+ </div>
+</div>
+
+<script type="text/javascript">
+
+function dibDownloadFile() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ downloadViaToolbarGivenPath(path);
+}
+
+/**
+* Delete the file currently displayed in the info view
+*/
+function dibRenameFile() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ renameViaToolbarGivenPath(path);
+}
+
+/**
+* call delete using the path in the info panel
+*/
+function dibDeleteFile() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ deleteViaToolbarGivenPath(path);
+}
+
+/**
+* favorite, or 'star' the data object currently displayed in the info view
+*/
+function dibStarFile() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ if (path == null) {
+ setErrorMessage("No path was selected, use the tree to select an iRODS collection or file to star"); // FIXME:
+ // i18n
+ return;
+ }
+
+ lcShowBusyIconInDiv("#infoDialogArea");
+ var url = "/browse/prepareStarDialog";
+
+ var params = {
+ absPath : path
+ }
+
+ lcSendValueWithParamsAndPlugHtmlInDiv(url, params, "#infoDialogArea", null);
+}
+
+/**
+* unfavorite favorite, or 'star' the collection currently displayed in the info view
+*/
+function dibUnstarFile() {
+ var path = $("#infoAbsPath").val();
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ if (path == null) {
+ setErrorMessage("No path was selected, use the tree to select an iRODS collection or file to unstar"); // FIXME:
+ // i18n
+ return;
+ }
+
+ showBlockingPanel();
+ var url = "/browse/unstarFile";
+
+ var params = {
+ absPath : path
+ }
+
+ var jqxhr = $.post(context + url, params,
+ function(data, status, xhr) {
+ }, "html").success(
+ function(returnedData, status, xhr) {
+ var continueReq = checkForSessionTimeout(returnedData, xhr);
+ if (!continueReq) {
+ return false;
+ }
+ setMessage(jQuery.i18n.prop('msg_file_unstarred'));
+ updateBrowseDetailsForPathBasedOnCurrentModel(selectedPath);
+ closeStarDialog();
+ unblockPanel();
+ }).error(function(xhr, status, error) {
+ setErrorMessage(xhr.responseText);
+ closeStarDialog();
+ unblockPanel();
+ });
+}
+
+
+
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/browse/browseDetails.gsp b/idrop-web/grails-app/views/browse/browseDetails.gsp
index a869d99..24a7a1e 100644..100755
--- a/idrop-web/grails-app/views/browse/browseDetails.gsp
+++ b/idrop-web/grails-app/views/browse/browseDetails.gsp
@@ -1,8 +1,4 @@
-
-
<div id="browseDetailsMessageArea"></div>
-<div id="infoDialogArea" style="height:0px; "></div>
-
<div id=browseDetailsDialogArea" style-"height:0px;></div>
<g:hiddenField id="browseDetailsAbsPath" name="absolutePath"
value="${parent.collectionName}" />
@@ -15,18 +11,34 @@
<div id="infoDialogArea">
<!-- no empty divs -->
</div>
+ <!-- render the paging controls if needed -->
+ <g:if test="${pagingActions.paging}">
+ <g:render template="/browse/browseDetailsToolbar" />
+ </g:if>
+
<div id="detailsTopSection" >
<form id="browseDetailsForm" name="browseDetailsForm">
- <table cellspacing="0" cellpadding="0" border="0"
+ <table class="table table-striped table-hover" cellspacing="0" cellpadding="0" border="0"
id="browseDataDetailsTable">
<thead>
<tr>
<th></th>
- <th></th>
- <th>Name</th>
- <th>Type</th>
- <th>Modified date</th>
- <th>Length</th>
+ <th>
+
+ <div class="btn-group">
+ <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">Action<span class="caret"></span></a>
+ <ul class="dropdown-menu">
+ <li id="menuAddToCartDetails"><a href="#addAllToCartDetails" onclick="addSelectedToCart()"><g:message code="text.add.all.to.cart" /></a></li>
+ <li id="menuDeleteDetails"><a href="#deleteAllDetails" onclick="deleteSelected()"><g:message code="text.delete.all" /></a></li>
+ <!-- dropdown menu links -->
+ </ul>
+ </div>
+
+ </th>
+ <th><g:message code="text.name" /></th>
+ <th><g:message code="text.type" /></th>
+ <th><g:message code="text.modified" /></th>
+ <th><g:message code="text.length" /></th>
</tr>
</thead>
<tbody>
@@ -38,16 +50,17 @@
</td>
<td><g:checkBox name="selectDetail"
value="${entry.formattedAbsolutePath}" checked="false" />
+ <g:if test="${entry.objectType.toString() == 'COLLECTION'}"><img class="icon-info-sign" onclick="infoHere('${entry.formattedAbsolutePath}')"/></g:if> <g:else><img class="icon-info-sign" onclick="infoHere('${entry.formattedAbsolutePath}')"/></g:else>
</td>
- <td class="draggableFile"><g:if
+ <td><g:if
test="${entry.objectType.toString() == 'COLLECTION'}">
<a href="#" id="${entry.formattedAbsolutePath}" onclick="clickOnPathInBrowseDetails(this.id)">${entry.nodeLabelDisplayValue}</a>
</g:if> <g:else>
-
+ ${entry.nodeLabelDisplayValue}
- <g:link url="${'file/download' + entry.formattedAbsolutePath}">
-${entry.nodeLabelDisplayValue}
+ <!-- <g:link url="${'file/download' + entry.formattedAbsolutePath}">
+${entry.nodeLabelDisplayValue} -->
</g:link>
</g:else></td>
<td>
@@ -87,20 +100,49 @@ ${entry.displayDataSize}
"bLengthChange": false,
"bFilter": false,
"iDisplayLength" : 500,
+ "sDom": "<'row'<'span10'l><'span8'f>r>t<'row'<'span10'i><'span10'p>>",
+ "aoColumns" : [
+ {'sWidth': '20px', 'bSortable':false},
+ {'sWidth': '20px', 'bSortable':false},
+ { 'sWidth': '120px' },
+ { 'sWidth': '30px' },
+ { 'sWidth': '40px' },
+ { 'sWidth': '40px' }
+
+ ],
+
"fnInitComplete": function() {
- //this.fnAdjustColumnSizing(true);
+ this.fnAdjustColumnSizing(true);
}
-
}
$(function() {
//alert("building table ");
dataTable = lcBuildTableInPlace("#browseDataDetailsTable", browseDetailsClick, ".browse_detail_icon", tableParams);
$("#infoDiv").resize();
- $("#menuDownload").hide();
+ $.extend( $.fn.dataTableExt.oStdClasses, {
+ "sSortAsc": "header headerSortDown",
+ "sSortDesc": "header headerSortUp",
+ "sSortable": "header"
+ } );
});
+ function showLegend() {
+ $("#legend").show("slow");
+ }
+
+ function hideLegend() {
+ $("#legend").hide("slow");
+ }
+
+
+ function infoHere(path) {
+ setDefaultView("info");
+ selectTreePathFromIrodsPath(path);
+ }
+
+
diff --git a/idrop-web/grails-app/views/browse/collectionInfo.gsp b/idrop-web/grails-app/views/browse/collectionInfo.gsp
index d38867b..6308786 100644..100755
--- a/idrop-web/grails-app/views/browse/collectionInfo.gsp
+++ b/idrop-web/grails-app/views/browse/collectionInfo.gsp
@@ -6,146 +6,151 @@
<div id="idropLiteArea">
<!-- area to show idrop lite applet -->
- </div>
- <div id="toggleHtmlArea">
- <div id="infoDialogArea"><!-- no empty divs --></div>
+</div>
+<div id="toggleHtmlArea">
+ <g:render template="/browse/collectionInfoToolbar" />
+ <div id="infoDialogArea"><!-- no empty divs --></div>
<!-- display area lays out info in a main and side column -->
<div id="infoDisplayLayout" style="width:100%;height:100%;">
- <div class="roundedContainer">
+ <div class="well">
<image style="float:left;margin-right:10px;" src="<g:resource dir="images" file="folder.png" alt="folder icon" />"/>
<h3>${collection.collectionName}</h3>
- </div>
-
-</div><!-- table -->
+ </div>
+</div>
-<div id="infoAccordion" style="width:98%;margin:10px;">
- <h3 id="infoAccordionBasicInfo"><a href="#infoAccordionBasicInfo"><g:message code="text.info" /></a></h3>
- <div>
+<ul class="nav nav-tabs" id="infoTabs">
+ <li class="active"><a href="#info" id="infoTab"><g:message code="text.info" /></a></li>
+ <li><a href="#metadata" id="metadataTab"><g:message code="text.metadata" /></a></li>
+ <li><a href="#permissions" id="permissionTab"><g:message code="text.sharing" /></a></li>
+ <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
+ <li><a href="#tickets" id="ticketTab"><g:message code="text.tickets" /></a></li>
+ </g:if>
+ <li><a href="#audit" id="auditTab"><g:message code="text.audit" /></a></li>
+</ul>
+
+<div class="tab-content">
+ <div class="tab-pane active" id="info">
+
+ <h4><g:message code="text.info" /></h4>
+ <div class="alert alert-info">
+ <g:message code="heading.info" />
+ </div>
<div id="container" style="height:100%;width:100%;">
<div>
- <div style="width:15%;"><label>Created At:</label></div>
+ <div style="width:15%;"><label><g:message code="text.created" />:</label></div>
<div>${collection.createdAt}</div>
</div>
<div>
- <div><label>Updated At:</label></div>
+ <div><label><g:message code="text.updated" />:</label></div>
<div>${collection.modifiedAt}</div>
</div>
<div>
- <div><label>Owner:</label></div>
+ <div><label><g:message code="text.owner" />:</label></div>
<div>${collection.collectionOwnerName}</div>
</div>
<div>
- <div><label>Owner Zone:</label></div>
+ <div><label><g:message code="text.owner.zone" />:</label></div>
<div>${collection.collectionOwnerZone}</div>
</div>
<div>
- <div><label>Collection Type:</label></div>
+ <div><label><g:message code="text.type" />:</label></div>
<div>${collection.specColType}</div>
</div>
<div>
- <div><label>Object path:</label></div>
+ <div><label><g:message code="text.object.path" />:</label></div>
<div>${collection.objectPath}</div>
</div>
<div>
- <div><label>Description:</label></div>
+ <div><label><g:message code="text.description" />:</label></div>
<div>${collection.comments}</div>
</div>
<div>
- <div><label>Info1:</label></div>
+ <div><label><g:message code="text.info" />1:</label></div>
<div>${collection.info1}</div>
</div>
<div>
- <div><label>Info2:</label></div>
+ <div><label><g:message code="text.info" />2:</label></div>
<div>${collection.info2}</div>
</div>
</div>
- </div>
-
- <h3 id="infoAccordionTags"><a href="#infoAccordionTags"><g:message code="text.tags" /></a></h3>
- <div >
<div id="container" style="height:100%;width:100%;">
<div>
- <div><label>Tags:</label></div>
+ <div><label><g:message code="text.tags" />:</label></div>
<div><g:textField id="infoTags" name="tags"
value="${tags.spaceDelimitedTagsForDomain}" /></div>
</div>
<div>
- <div><label>Comment:</label></div>
+ <div><label><g:message code="text.comment" />:</label></div>
<div><g:textArea id="infoComment" name="comment" rows="5" cols="80"
value="${comment}" /></div>
</div>
<div>
<div></div>
- <div><button type="button" class="ui-state-default ui-corner-all" id="updateTags" value="updateTags" onclick="callUpdateTags()">Update Tags</button></div>
+ <div><button type="button" id="updateTags" value="updateTags" onclick="updateTags()">Update Tags</button></div>
</div>
</div>
+
+ </div>
+ <div class="tab-pane" id="metadata">
+ <div id="infoAccordionMetadataInner"></div>
+ </div>
+ <div class="tab-pane" id="permissions">
+ <div id="infoAccordionACLInner"></div>
+ </div>
+ <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
+ <div class="tab-pane" id="tickets">
+ <div id="infoAccordionTicketsInner">
+ </div>
</div>
- <h3 id="infoAccordionMetadata"><a href="#infoAccordionMetadata" ><g:message code="text.metadata" /></a></h3>
- <div id="infoAccordionMetadataInner">
- </div>
- <h3 id="infoAccordionACL"><a href="#infoAccordionACL" ><g:message code="text.permissions" /></a></h3>
- <div id="infoAccordionACLInner">
- </div>
- <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
- <h3 id="infoAccordionTickets"><a href="#infoAccordionTickets" ><g:message code="text.tickets" /></a></h3>
- <div id="infoAccordionTicketsInner">
- </div>
- </g:if>
- <h3 id="infoAccordionAudit"><a href="#infoAccordionAudit"><g:message code="text.audit" /></a></h3>
- <div >
- <div id="infoAccordionAuditInner">
- </div>
+ </g:if>
+ <div class="tab-pane" id="audit">
+ <div id="infoAccordionAuditInner"></div>
+ </div>
</div>
-
</div><!-- toggle html area -->
<script>
$(function() {
-
+
$(".idropLiteBulkUpload").show();
$("#menuDownload").hide();
$("#menuUpload").show();
$("#menuBulkUpload").show();
- $("#infoAccordion").accordion({
- clearStyle: true,
- autoHeight: false
- }).bind("accordionchange", function(event, ui) {
-
- var infoSection = ui.newHeader[0].id;
- updateInfoSection(infoSection);
- });
- });
- function callUpdateTags() {
- updateTags();
- }
-
-
- /**
- Update the info for a section in the info accordion based on the provided section id
- */
- function updateInfoSection(sectionToUpdate) {
- //alert("sectionToUpdate:" + sectionToUpdate);
- if (sectionToUpdate=="infoAccordionMetadata") {
+ $('#infoTabs a').click(function (e) {
+ e.preventDefault();
+ $(this).tab('show');
+ });
+
+ $('#infoTab').on('shown', function (e) {
+ //e.target // activated tab
+ //e.relatedTarget // previous tab
showMetadataView(selectedPath, "#infoAccordionMetadataInner");
- } else if (sectionToUpdate=="infoAccordionACL") {
+ });
+
+ $('#metadataTab').on('shown', function (e) {
+ showMetadataView(selectedPath, "#infoAccordionMetadataInner");
+ });
+
+ $('#permissionTab').on('shown', function (e) {
showSharingView(selectedPath, "#infoAccordionACLInner");
- } else if (sectionToUpdate=="infoAccordionTickets") {
- showTicketView(selectedPath, "#infoAccordionTicketsInner");
- } else if (sectionToUpdate=="infoAccordionAudit") {
- showAuditView(selectedPath, "#infoAccordionAuditInner");
- } else {
- }
- }
+ });
+ $('#ticketTab').on('shown', function (e) {
+ showTicketView(selectedPath, "#infoAccordionTicketsInner");
+ });
+ $('#auditTab').on('shown', function (e) {
+ showAuditView(selectedPath, "#infoAccordionAuditInner");
+ });
+
+ });
-
</script>
diff --git a/idrop-web/grails-app/views/browse/collectionInfoMini.gsp b/idrop-web/grails-app/views/browse/collectionInfoMini.gsp
index 2a3c93d..5405266 100644..100755
--- a/idrop-web/grails-app/views/browse/collectionInfoMini.gsp
+++ b/idrop-web/grails-app/views/browse/collectionInfoMini.gsp
@@ -42,7 +42,9 @@
</div>
<div>
<div></div>
- <div><button type="button" class="ui-state-default ui-corner-all" id="updateTags" value="updateTags" onclick="callUpdateTags()">Update Tags</button></div>
+
+ <div><button type="button" id="updateTags" value="updateTags" onclick="updateTagsFromCollectionInfoMini()">Update Tags</button></div>
+
</div>
<div>
<div><label>Created At:</label></div>
@@ -94,8 +96,12 @@
<script>
-function callUpdateTags() {
- updateTags();
+function updateTagsFromCollectionInfoMini() {
+ var infoTagsVal = $("#infoTags").val();
+ var infoCommentVal = $("#infoComment").val();
+ var absPathVal = $("#infoAbsPath").val();
+
+ updateTagsAtPath(absPathVal, infoTagsVal, infoCommentVal);
}
</script>
diff --git a/idrop-web/grails-app/views/browse/dataObjectInfo.gsp b/idrop-web/grails-app/views/browse/dataObjectInfo.gsp
index 0cf620a..ca993a4 100644..100755
--- a/idrop-web/grails-app/views/browse/dataObjectInfo.gsp
+++ b/idrop-web/grails-app/views/browse/dataObjectInfo.gsp
@@ -8,21 +8,21 @@
<!-- area to show idrop lite applet -->
</div>
<div id="toggleHtmlArea">
- <div id="displayArea" style="position:relative;width:100%;height:95%;display:block;">
-
+ <div id="displayArea">
+ <g:render template="/browse/dataObjectInfoToolbar" />
<div id="infoDialogArea"><!-- no empty divs --></div>
- <div class="roundedContainer">
+ <div class="well">
<image style="float:left;margin-right:10px;" src="<g:resource dir="images" file="file.png" alt="file icon" />"/>
<div id="container" style="height:100%;width:100%;">
<div >
- <div><label>File Name:</label></div>
+ <div><label><g:message code="text.file.name" />:</label></div>
<div style="overflow:auto;"><g:link url="${'file/download' + dataObject.absolutePath}">${dataObject.dataName}</g:link></div>
</div>
<div>
- <div style="width:20%;"><label>Parent Collection:</label></div>
+ <div style="width:20%;"><label><g:message code="text.parent" />:</label></div>
<div style="overflow:auto;">${dataObject.collectionName}</div>
</div>
</div>
@@ -37,116 +37,159 @@
</div>
</div>
-
-<div id="infoAccordion" style="width:98%;margin:10px;">
- <h3 id="infoAccordionBasicInfo"><a href="#infoAccordionBasicInfo"><g:message code="text.info" /></a></h3>
-
- <div id="container" style="height:100%;width:100%;">
+ <ul class="nav nav-tabs" id="infoTabs">
+ <li class="active"><a href="#info" id="infoTab"><g:message code="text.info" /></a></li>
+ <li><a href="#metadata" id="metadataTab"><g:message code="text.metadata" /></a></li>
+ <li><a href="#permissions" id="permissionTab"><g:message code="text.permissions" /></a></li>
+ <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
+ <li><a href="#tickets" id="ticketTab"><g:message code="text.tickets" /></a></li>
+ </g:if>
+ <li><a href="#audit" id="auditTab"><g:message code="text.audit" /></a></li>
+ </ul>
+
+ <div class="tab-content">
+ <div class="tab-pane active" id="info">
+ <div id="container" style="height:100%;width:100%;">
<div >
- <div style="width:20%;"><label>Size:</label></div>
+ <div style="width:20%;"><label><g:message code="text.length" />:</label></div>
<div>${dataObject.displayDataSize}</div>
</div>
<div>
- <div><label>Created At:</label></div>
+ <div><label><g:message code="text.created" />:</label></div>
<div>${dataObject.createdAt}</div>
</div>
<div>
- <div><label>Updated At:</label></div>
+ <div><label><g:message code="text.modified" />:</label></div>
<div>${dataObject.updatedAt}</div>
</div>
<div>
- <div><label>Owner:</label></div>
+ <div><label><g:message code="text.owner" />:</label></div>
<div>${dataObject.dataOwnerName}</div>
</div>
<div>
- <div><label>Owner Zone:</label></div>
+ <div><label><g:message code="text.owner.zone" />:</label></div>
<div>${dataObject.dataOwnerZone}</div>
</div>
<div>
- <div><label>Data Path:</label></div>
+ <div><label><g:message code="text.data.path" />:</label></div>
<div style="overflow:auto;"><span class="longText">${dataObject.dataPath}</span></div>
</div>
<div>
- <div><label>Resource Group:</label></div>
+ <div><label><g:message code="text.resource.group" />:</label></div>
<div>${dataObject.resourceGroupName}</div>
</div>
<div>
- <div><label>Checksum:</label></div>
+ <div><label><g:message code="text.checksum" />:</label></div>
<div>${dataObject.checksum}</div>
</div>
<div>
- <div><label>Resource:</label></div>
+ <div><label><g:message code="text.resource" />:</label></div>
<div>${dataObject.resourceName}</div>
</div>
<div>
- <div><label>Replica Number:</label></div>
+ <div><label><g:message code="text.replica.number" />:</label></div>
<div>${dataObject.dataReplicationNumber}</div>
</div>
<div>
- <div><label>Replication Status:</label></div>
+ <div><label><g:message code="text.replication.status" />:</label></div>
<div>${dataObject.replicationStatus}</div>
</div>
<div>
- <div><label>Status:</label></div>
+ <div><label><g:message code="text.status" />:</label></div>
<div>${dataObject.dataStatus}</div>
</div>
<div>
- <div><label>Type:</label></div>
+ <div><label><g:message code="text.type" />:</label></div>
<div>${dataObject.dataTypeName}</div>
</div>
<div>
- <div><label>Version:</label></div>
+ <div><label><g:message code="text.version" />:</label></div>
<div>${dataObject.dataVersion}</div>
</div>
</div>
-
- <h3 id="infoAccordionTags"><a href="#infoAccordionTags"><g:message code="text.tags" /></a></h3>
-
- <div id="container" style="height:100%;width:100%;">
+ <div id="container" style="height:100%;width:100%;">
<div>
- <div><label>Tags:</label></div>
+ <div><label><g:message code="text.tags" />:</label></div>
<div><g:textField id="infoTags" name="tags"
value="${tags.spaceDelimitedTagsForDomain}" /></div>
</div>
<div>
- <div><label>Comment:</label></div>
+ <div><label><g:message code="text.comment" />:</label></div>
<div><g:textArea id="infoComment" name="comment" rows="5" cols="80"
value="${comment}" /></div>
</div>
<div>
<div></div>
- <div><button type="button" class="ui-state-default ui-corner-all" id="updateTags" value="updateTags" onclick="callUpdateTags()">Update Tags</button></div>
+ <div><button type="button" id="updateTags" value="updateTags" onclick="updateTags()">Update Tags</button></div>
</div>
- </div>
-
- <h3 id="infoAccordionMetadata"><a href="#infoAccordionMetadata" ><g:message code="text.metadata" /></a></h3>
- <div id="infoAccordionMetadataInner"></div>
- <h3 id="infoAccordionACL"><a href="#infoAccordionACL" ><g:message code="text.permissions" /></a></h3>
- <div id="infoAccordionACLInner">
- </div>
-
- <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
- <h3 id="infoAccordionTickets"><a href="#infoAccordionTickets" ><g:message code="text.tickets" /></a></h3>
- <div id="infoAccordionTicketsInner"></div>
- </g:if>
- <h3 id="infoAccordionAudit"><a href="#infoAccordionAudit"><g:message code="text.audit" /></a></h3>
- <div id="infoAccordionAuditInner">
- </div>
- <div >
- </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="metadata">
+ <div id="infoAccordionMetadataInner"></div>
+ </div>
+ <div class="tab-pane" id="permissions">
+ <div id="infoAccordionACLInner"></div>
+ </div>
+ <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
+ <div class="tab-pane" id="tickets">
+ <div id="infoAccordionTicketsInner">
+ </div>
+ </div>
+ </g:if>
+ <div class="tab-pane" id="audit">
+ <div id="infoAccordionAuditInner"></div>
+ </div>
</div>
-
+
+</div><!-- toggle html area -->
+
<script>
$(function() {
- showDetailsToolbar();
$(".idropLiteBulkUpload").hide();
$("#menuDownload").show();
$("#menuUpload").hide();
$("#menuBulkUpload").hide();
+
+ $('#infoTabs a').click(function (e) {
+ e.preventDefault();
+ $(this).tab('show');
+ });
+
+ $('#infoTab').on('shown', function (e) {
+ //e.target // activated tab
+ //e.relatedTarget // previous tab
+ showMetadataView(selectedPath, "#infoAccordionMetadataInner");
+ });
+
+ $('#metadataTab').on('shown', function (e) {
+ showMetadataView(selectedPath, "#infoAccordionMetadataInner");
+ });
+
+ $('#permissionTab').on('shown', function (e) {
+ showSharingView(selectedPath, "#infoAccordionACLInner");
+ });
+
+ $('#ticketTab').on('shown', function (e) {
+ showTicketView(selectedPath, "#infoAccordionTicketsInner");
+ });
+
+ $('#auditTab').on('shown', function (e) {
+ showAuditView(selectedPath, "#infoAccordionAuditInner");
+ });
+
+ });
+
+ function callUpdateTags() {
+ updateTags();
+ }
+
+ /*
+
+
$("#infoAccordion").accordion({
clearStyle : true,
autoHeight : false
@@ -154,8 +197,7 @@
var infoSection = ui.newHeader[0].id;
updateDataObjectInfoSection(infoSection);
});
-
- });
+ */
/**
Update the info for a section in the info accordion based on the provided section id
diff --git a/idrop-web/grails-app/views/browse/dataObjectInfoMini.gsp b/idrop-web/grails-app/views/browse/dataObjectInfoMini.gsp
index a1a936a..906429f 100644..100755
--- a/idrop-web/grails-app/views/browse/dataObjectInfoMini.gsp
+++ b/idrop-web/grails-app/views/browse/dataObjectInfoMini.gsp
@@ -8,13 +8,12 @@
<!-- area to show idrop lite applet -->
</div>
<div id="toggleHtmlArea">
- <div id="displayArea" style="position:relative;width:100%;height:95%;display:block;">
-
+ <div id="displayArea" >
<div id="infoDialogArea"><!-- no empty divs --></div>
<!-- display area lays out info in a main and side column -->
- <div id="infoDisplayLayout" style="display:table;width:100%;height:100%;">
+ <div id="infoDisplayLayout">
@@ -28,11 +27,11 @@
<div >
- <div><label>File Name:</label></div>
+ <div><label><g:message code="text.file.name" />:</label></div>
<div style="overflow:auto;"><g:link url="${'file/download' + dataObject.absolutePath}">${dataObject.dataName}</g:link></div>
</div>
<div>
- <div style="width:20%;"><label>Parent Collection:</label></div>
+ <div style="width:20%;"><label><g:message code="text.parent" />:</label></div>
<div style="overflow:auto;">${dataObject.collectionName}</div>
</div>
</div>
@@ -60,73 +59,73 @@
<div id="container" style="height:100%;width:100%;">
<div >
- <div style="width:20%;"><label>Size:</label></div>
+ <div style="width:20%;"><label><g:message code="text.length" />:</label></div>
<div>${dataObject.displayDataSize}</div>
</div>
<div>
- <div><label>Tags:</label></div>
+ <div><label><g:message code="text.tags" />:</label></div>
<div><g:textField id="infoTags" name="tags"
value="${tags.spaceDelimitedTagsForDomain}" /></div>
</div>
<div>
- <div><label>Comment:</label></div>
+ <div><label><g:message code="text.comment" />:</label></div>
<div><g:textArea id="infoComment" name="comment" rows="5" cols="80"
value="${comment}" /></div>
</div>
<div>
<div></div>
- <div><button type="button" class="ui-state-default ui-corner-all" id="updateTags" value="updateTags" onclick="callUpdateTags()">Update Tags</button></div>
+ <div><button type="button" id="updateTags" value="updateTags" onclick="updateTagsFromDataObjectInfoMini()">Update Tags</button></div>
</div>
<div>
- <div><label>Created At:</label></div>
+ <div><label><g:message code="text.created" />:</label></div>
<div>${dataObject.createdAt}</div>
</div>
<div>
- <div><label>Updated At:</label></div>
+ <div><label><g:message code="text.modified" />:</label></div>
<div>${dataObject.updatedAt}</div>
</div>
<div>
- <div><label>Owner:</label></div>
+ <div><label><g:message code="text.owner" />:</label></div>
<div>${dataObject.dataOwnerName}</div>
</div>
<div>
- <div><label>Owner Zone:</label></div>
+ <div><label><g:message code="text.owner.zone" />:</label></div>
<div>${dataObject.dataOwnerZone}</div>
</div>
<div>
- <div><label>Data Path:</label></div>
+ <div><label><g:message code="text.data.path" />:</label></div>
<div style="overflow:auto;"><span class="longText">${dataObject.dataPath}</span></div>
</div>
<div>
- <div><label>Resource Group:</label></div>
+ <div><label><g:message code="text.resource.group" />:</label></div>
<div>${dataObject.resourceGroupName}</div>
</div>
<div>
- <div><label>Checksum:</label></div>
+ <div><label><g:message code="text.checksum" />:</label></div>
<div>${dataObject.checksum}</div>
</div>
<div>
- <div><label>Resource:</label></div>
+ <div><label><g:message code="text.resource" />:</label></div>
<div>${dataObject.resourceName}</div>
</div>
<div>
- <div><label>Replica Number:</label></div>
+ <div><label><g:message code="text.replica.number" />:</label></div>
<div>${dataObject.dataReplicationNumber}</div>
</div>
<div>
- <div><label>Replication Status:</label></div>
+ <div><label><g:message code="text.replication.status" />:</label></div>
<div>${dataObject.replicationStatus}</div>
</div>
<div>
- <div><label>Status:</label></div>
+ <div><label><g:message code="text.status" />:</label></div>
<div>${dataObject.dataStatus}</div>
</div>
<div>
- <div><label>Type:</label></div>
+ <div><label><g:message code="text.type" />:</label></div>
<div>${dataObject.dataTypeName}</div>
</div>
<div>
- <div><label>Version:</label></div>
+ <div><label><g:message code="text.version" />:</label></div>
<div>${dataObject.dataVersion}</div>
</div>
</div>
@@ -138,15 +137,15 @@
</div><!-- toggle html area -->
<script>
-$(function() {
-
-});
-function callUpdateTags() {
- updateTags();
+function updateTagsFromDataObjectInfoMini() {
+ var infoTagsVal = $("#infoTags").val();
+ var infoCommentVal = $("#infoComment").val();
+ var absPathVal = $("#infoAbsPath").val();
+
+ updateTagsAtPath(absPathVal, infoTagsVal, infoCommentVal);
}
-</script>
<g:if test="${getThumbnail}">
<script>
diff --git a/idrop-web/grails-app/views/browse/galleryView.gsp b/idrop-web/grails-app/views/browse/galleryView.gsp
index e69f03a..8ffd167 100644..100755
--- a/idrop-web/grails-app/views/browse/galleryView.gsp
+++ b/idrop-web/grails-app/views/browse/galleryView.gsp
@@ -19,7 +19,6 @@
<script type="text/javascript">
jQuery(document).ready(function($) {
- hideAllToolbars();
Galleria.loadTheme(context + '/js/themes/classic/galleria.classic.min.js');
$("#gallery").galleria({
width: 800,
diff --git a/idrop-web/grails-app/views/browse/index.gsp b/idrop-web/grails-app/views/browse/index.gsp
new file mode 100755
index 0000000..c69296e
--- /dev/null
+++ b/idrop-web/grails-app/views/browse/index.gsp
@@ -0,0 +1,49 @@
+<head>
+ <meta name="layout" content="mainNoSidebar" />
+ <g:javascript library="mydrop/home" />
+ <g:javascript library="mydrop/metadata" />
+</head>
+<div class="wrapper clearfix"
+ style="height: 820px; overflow:hidden;">
+ <g:hiddenField name="mode" id="mode" value="${mode}"/>
+ <g:hiddenField name="presetPath" id="presetPath" value="${path}"/>
+ <g:render template="/browse/browseTabContent" />
+
+</div>
+<script type="text/javascript">
+ var dataLayout;
+ var tabs;
+ $(document).ready(function() {
+
+ $("#topbarBrowser").addClass("active");
+
+ $.ajaxSetup({
+ cache : false
+ });
+
+ $("#infoDiv").resize();
+
+ dataLayout = $("#dataTreeView").layout({
+ applyDefaultStyles : false,
+ size : "auto",
+ west__minSize : 150,
+ west__resizable : true
+ });
+
+ var mode = $("#mode").val();
+ var startPath = $("#presetPath").val();
+
+ if (mode == null || mode=="") {
+ retrieveBrowserFirstView("detect","");
+ } else {
+ retrieveBrowserFirstView(mode, startPath);
+ }
+
+ $(window).bind( 'hashchange', function(e) {
+
+ processStateChange( $.bbq.getState());
+
+ });
+
+ });
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/browse/listCart.gsp b/idrop-web/grails-app/views/browse/listCart.gsp
deleted file mode 100644
index 590ccf5..0000000
--- a/idrop-web/grails-app/views/browse/listCart.gsp
+++ /dev/null
@@ -1,34 +0,0 @@
-<div id="cartTopSection" class="box" style="width:100%;height:100%;">
-
-<div id="cartToggleDiv" style="width:100%;height:100%;">
-<div id="cartToolbar" class="fg-toolbar ui-widget-header" style="height:10%;">
- <div id="cartMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left, clear: both;">
- <button type="button" id="clearCartButton"
- class="ui-state-default ui-corner-all" value="clearCart"
- onclick="clearCart()")><g:message code="default.button.clear.label" /></button>
- <button type="button" id="deleteFromCartButton"
- class="ui-state-default ui-corner-all" value="deleteFromCart"
- onclick="deleteFromCart()")><g:message code="default.button.delete.label" /></button>
- <button type="button" id="reloadCartButton"
- class="ui-state-default ui-corner-all" value="reloadCart"
- onclick="refreshCartFiles()")><g:message code="default.button.reload.label" /></button>
- <button type="button" id="checkout"
- class="ui-state-default ui-corner-all" value="checkout"
- onclick="checkOut()")><g:message code="text.check.out" /></button>
- </div>
-</div>
-<div id="cartTableDiv" style="overflow:auto;height:90%;">
-<!-- cart table -->
-</div>
-</div>
-<div id="cartAppletDiv">
-<!-- empty div --></div>
-</div>
-<script type="text/javascript">
-
- $(function() {
- refreshCartFiles();
- });
-
- </script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/browse/loginInfo.gsp b/idrop-web/grails-app/views/browse/loginInfo.gsp
index 3696156..3696156 100644..100755
--- a/idrop-web/grails-app/views/browse/loginInfo.gsp
+++ b/idrop-web/grails-app/views/browse/loginInfo.gsp
diff --git a/idrop-web/grails-app/views/browse/newFolderDialog.gsp b/idrop-web/grails-app/views/browse/newFolderDialog.gsp
index e1f3d08..55cea87 100644..100755
--- a/idrop-web/grails-app/views/browse/newFolderDialog.gsp
+++ b/idrop-web/grails-app/views/browse/newFolderDialog.gsp
@@ -1,33 +1,34 @@
-<div id="newFolderDialog" class="roundedContainer">
- <h2><g:message code="heading.new.folder.dialog"/></h2>
- <div id="newFolderDialogMessageArea" style="width:90%;">
- <!-- no empty divs -->
- </div>
+<div id="newFolderDialog">
+
+ <div class="modal-header">
+ <h3><g:message code="heading.new.folder.dialog"/></h3>
+ </div>
+
+ <div class="modal-body">
+ <label for="fileName"><g:message code="text.new.folder" />:<g:textArea name="fileName" id="fileName" value="${fileName}" /></label>
+ <g:hiddenField name="absPath" id="newFolderDialogAbsPath" value = "${absPath }" />
+ </div>
+
+ <div class="modal-footer">
+ <button type="button" id="updateNewFolderButton"
+ value="update"
+ onclick="submitNewFolderDialog()")><g:message code="default.button.update.label" /></button>
+ <button type="button" id="cancelRenameButton"
+ value="cancelAdd"
+ onclick="closeNewFolderDialog()")><g:message code="text.cancel" /></button>
+ </div>
- <fieldset id="verticalForm">
-
- <label for="fileName"><g:message code="text.new.folder" />:</label>
- <g:textArea name="fileName" id="fileName" value="${fileName}" />
- <g:hiddenField name="absPath" id="newFolderDialogAbsPath" value = "${absPath }" />
- <br />
- <div id="newFolderDialogToolbar" class="fg-toolbar ui-widget-header">
- <div id="newFolderDialogMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left, clear : both; width: 90%;">
- <button type="button" id="updateNewFolderButton"
- class="ui-state-default ui-corner-all" value="update"
- onclick="submitNewFolderDialog()")><g:message code="default.button.update.label" /></button>
- <button type="button" id="cancelRenameButton"
- class="ui-state-default ui-corner-all" value="cancelAdd"
- onclick="closeNewFolderDialog()")><g:message code="text.cancel" /></button>
- </div>
- </div>
- </fieldset>
- </div>
+</div>
<script>
$(function() {
- $("#newFolderDialog").dialog({width:500, modal:true});
+ $("#newFolderDialog").dialog(
+ {
+ "modal":true,
+ "width":"500px"
+ }
+ );
});
diff --git a/idrop-web/grails-app/views/browse/noInfo.gsp b/idrop-web/grails-app/views/browse/noInfo.gsp
index 64ec299..64ec299 100644..100755
--- a/idrop-web/grails-app/views/browse/noInfo.gsp
+++ b/idrop-web/grails-app/views/browse/noInfo.gsp
diff --git a/idrop-web/grails-app/views/browse/publicLinkDialog.gsp b/idrop-web/grails-app/views/browse/publicLinkDialog.gsp
index 5dd4da4..50d3efd 100644..100755
--- a/idrop-web/grails-app/views/browse/publicLinkDialog.gsp
+++ b/idrop-web/grails-app/views/browse/publicLinkDialog.gsp
@@ -1,42 +1,42 @@
-<div class="roundedContainer" id="publicLinkDialog">
- <g:hiddenField name="publicLinkDialogAbsPath" id="publicLinkDialogAbsPath" value = "${absPath}" />
- <div style="clear: both;">
+<div class="well" id="publicLinkDialog">
+ <g:hiddenField name="publicLinkDialogAbsPath" id="publicLinkDialogAbsPath" value = "${absPath}" />
+ <div>
<g:if test="${accessSet == true}">
- <h1><g:message code="heading.anonymous.access.set" /></h1>
- <fieldset id="verticalForm">
+ <div class="alert alert-info">
+ <g:message code="heading.anonymous.access.set" />
+ </div>
+ <fieldset>
<g:textArea name="url" rows="4" columns="200" value="${accessUrlString}"/>
<br />
- <div id="publicLinkDialogMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: right; clear : both; width: 90%;">
+ <div id="publicLinkDialogMenu"
+ class="pull-right">
<button type="button" id="cancelPublicLinkButton"
- class="ui-state-default ui-corner-all" value="cancelPublicLink"
+ value="cancelPublicLink"
onclick="closePublicLinkDialog()")><g:message code="text.cancel" /></button>
</div>
</fieldset>
</g:if>
<g:else>
- <h1><g:message code="heading.anonymous.access.enable" /></h1>
- <fieldset id="verticalForm">
+ <div class="alert alert-info">
+ <g:message code="heading.anonymous.access.enable" />
+ </div>
+
+ <fieldset>
<br />
<div id="publicLinkDialogToolbar" >
- <div id="publicLinkDialogMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: right; clear : both; width: 90%;">
+ <div id="publicLinkDialogMenu"
+ class="pull-right">
<button type="button" id="grantLinkButton"
- class="ui-state-default ui-corner-all" value="grant"
+ value="grant"
onclick="grantPublicLink()")><g:message code="text.grant" /></button>
<button type="button" id="cancelPublicLinkButton"
- class="ui-state-default ui-corner-all" value="cancelPublicLink"
+ value="cancelPublicLink"
onclick="closePublicLinkDialog()")><g:message code="text.cancel" /></button>
</div>
</div>
-
-
-
-
-
</fieldset>
</g:else>
diff --git a/idrop-web/grails-app/views/browse/renameDialog.gsp b/idrop-web/grails-app/views/browse/renameDialog.gsp
index 1bfecce..3c7c78a 100644..100755
--- a/idrop-web/grails-app/views/browse/renameDialog.gsp
+++ b/idrop-web/grails-app/views/browse/renameDialog.gsp
@@ -1,30 +1,32 @@
-<div id="renameDialog" class="roundedContainer">
+<div id="renameDialog">
- <div style="clear: both;">
+ <div class="modal-header">
+ <h3><g:message code="heading.rename.dialog"/></h3>
+ </div>
- <div id="renameDialogMessageArea" style="width:90%;">
- <!-- no empty divs -->
- </div>
+ <div class="modal-body">
<fieldset id="verticalForm">
-
<label for="fileName"><g:message code="text.name" />:</label>
<g:textArea name="fileName" id="fileName" value="${fileName}" />
- <g:hiddenField name="absPath" id="renameDialogAbsPath" value = "${absPath }" />
- <br />
- <div id="renameDialogToolbar" class="fg-toolbar ui-widget-header">
- <div id="renameDialogMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left, clear : both; width: 90%;">
- <button type="button" id="updateRenameButton"
- class="ui-state-default ui-corner-all" value="update"
- onclick="submitRenameDialog()")><g:message code="default.button.update.label" /></button>
- <button type="button" id="cancelRenameButton"
- class="ui-state-default ui-corner-all" value="cancelAdd"
- onclick="closeRenameDialog()")><g:message code="text.cancel" /></button>
- </div>
- </div>
+ <g:hiddenField name="absPath" id="renameDialogAbsPath" value = "${absPath}" />
+ <g:hiddenField name="parentPath" id="renameDialogParentPath" value = "${parentPath}" />
</fieldset>
- </div>
+ </div>
+
+ <div class="modal-footer">
+ <div id="renameDialogToolbar">
+ <div id="renameDialogMenu" class="pull-right">
+ <button type="button" id="updateRenameButton"
+ value="update"
+ onclick="submitRenameDialog()")><g:message code="default.button.update.label" /></button>
+ <button type="button" id="cancelRenameButton"
+ value="cancelAdd"
+ onclick="closeRenameDialog()")><g:message code="text.cancel" /></button>
+ </div>
+ </div>
+ </div>
+ </div>
</div>
<script>
diff --git a/idrop-web/grails-app/views/browse/starDialog.gsp b/idrop-web/grails-app/views/browse/starDialog.gsp
new file mode 100755
index 0000000..ee6932a
--- /dev/null
+++ b/idrop-web/grails-app/views/browse/starDialog.gsp
@@ -0,0 +1,40 @@
+<div id="starDialog">
+
+ <div class="modal-header">
+ <h3><g:message code="heading.star.dialog"/></h3>
+ </div>
+
+ <div class="modal-body">
+
+ <fieldset id="verticalForm">
+ <label for="fileName"><g:message code="text.name" />:</label>
+ ${absPath}
+
+ <label for="description"><g:message code="text.description" />:</label>
+ <g:textArea name="description" value="" rows="5" cols="50"/>
+
+ <g:hiddenField name="absPath" id="absPath" value = "${absPath}" />
+ </fieldset>
+ </div>
+
+ <div class="modal-footer">
+ <div id="starDialogToolbar">
+ <div id="starDialogMenu" class="pull-right">
+ <button type="button" id="starFileButton"
+ value="update"
+ onclick="submitStarDialog()")><g:message code="default.button.update.label" /></button>
+ <button type="button" id="cancelStarButton"
+ value="cancelStar"
+ onclick="closeStarDialog()")><g:message code="text.cancel" /></button>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script>
+
+ $(function() {
+ $("#starDialog").dialog({width:500, modal:true});
+ });
+
+</script>
diff --git a/idrop-web/grails-app/views/common/_browseLegend.gsp b/idrop-web/grails-app/views/common/_browseLegend.gsp
new file mode 100755
index 0000000..fbcdc59
--- /dev/null
+++ b/idrop-web/grails-app/views/common/_browseLegend.gsp
@@ -0,0 +1,11 @@
+<div class='row-fluid well'>
+ <div class='span1 offset2'>
+ <i class="icon-folder-open"></i> Open folder in browse view
+ </div>
+ <div class='span1'>
+ <i class='icon-upload'></i> Quick upload
+ </div>
+ <div class='span1'>
+ <i class='icon-download'></i> Quick download
+ </div>
+</div> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/common/_cssAndJs.gsp b/idrop-web/grails-app/views/common/_cssAndJs.gsp
new file mode 100755
index 0000000..a516319
--- /dev/null
+++ b/idrop-web/grails-app/views/common/_cssAndJs.gsp
@@ -0,0 +1,41 @@
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title><g:layoutTitle default="iDrop-web - iRODS Cloud Browser" /></title>
+ <link rel="stylesheet" href="${resource(dir:'css',file:'style.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap-responsive.min.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'jqcloud.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'layout-default-latest.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.fileupload-ui.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'superfish.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.gritter.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'overcast/jquery-ui-1.9.0.custom.css')}" />
+ <link rel="shortcut icon"
+ href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
+ <g:layoutHead />
+ <g:javascript library="jquery-1.7.2.min" />
+ <g:javascript library="jquery-ui-1.8.7.custom.min" />
+ <g:javascript library="bootstrap.min" />
+ <g:javascript library="jquery.hotkeys" />
+ <g:javascript library="jquery.jstree" />
+ <g:javascript library="jquery.jeditable.mini" />
+ <g:javascript library="jquery.dataTables.min" />
+ <g:javascript library="mydrop/ticket" />
+ <g:javascript library="jquery.i18n.properties-min-1.0.9" />
+ <g:javascript library="jqcloud-0.1.6" />
+ <g:javascript library="jquery.fileupload-ui" />
+ <g:javascript library="jquery.fileupload" />
+ <g:javascript library="jquery.media" />
+ <g:javascript library="mydrop/lingo_common" />
+ <g:javascript library="mydrop/main" />
+ <g:javascript library="jquery-ui-13" />
+ <g:javascript library="jquery.blockUI" />
+ <g:javascript library="jquery.ba-bbq.min" />
+ <g:javascript library="jquery.layout-latest.min" />
+ <g:javascript library="jquery-ui-13" />
+ <g:javascript library="jquery.tools.min" />
+ <g:javascript library="mydrop/shopping_cart" />
+ <g:javascript library="mydrop/user" />
+ <g:javascript library="galleria-1.2.6" />
+ <g:javascript library="jquery.gritter.min" />
+ <g:javascript library="jquery.opacityrollover" />
+ <g:javascript library="superfish" /> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/common/_footer.gsp b/idrop-web/grails-app/views/common/_footer.gsp
index 2d0ce51..9df765a 100644..100755
--- a/idrop-web/grails-app/views/common/_footer.gsp
+++ b/idrop-web/grails-app/views/common/_footer.gsp
@@ -1 +1,6 @@
-<h3>iDrop-web developed by the DICE Group, developers of the <a href="http://www.irods.org">iRODS Data Grid</a> -- iDrop Project Page available <a href="https://code.renci.org/jargon">here</a> - version: ${grailsApplication.metadata.'app.version'} jargon:${org.irods.jargon.core.utils.JargonVersion.VERSION }</h3> \ No newline at end of file
+<div class="container-fluid">
+ <div class="span12">
+ <center>iDrop-web developed by the DICE Group, developers of the <a href="http://www.irods.org">iRODS Data Grid</a> -- iDrop Project Page available <a href="https://code.renci.org/gf/project/irodsidrop">here</a> - version: ${grailsApplication.metadata.'app.version'} jargon:${org.irods.jargon.core.utils.JargonVersion.VERSION }</center>
+ </div>
+ </div>
+</div>
diff --git a/idrop-web/grails-app/views/common/_messages.gsp b/idrop-web/grails-app/views/common/_messages.gsp
index 9476c55..9476c55 100644..100755
--- a/idrop-web/grails-app/views/common/_messages.gsp
+++ b/idrop-web/grails-app/views/common/_messages.gsp
diff --git a/idrop-web/grails-app/views/common/_secondarymain.gsp b/idrop-web/grails-app/views/common/_secondarymain.gsp
index 79023bb..79023bb 100644..100755
--- a/idrop-web/grails-app/views/common/_secondarymain.gsp
+++ b/idrop-web/grails-app/views/common/_secondarymain.gsp
diff --git a/idrop-web/grails-app/views/common/_topToolbar.gsp b/idrop-web/grails-app/views/common/_topToolbar.gsp
index ab598a8..251c8e6 100644..100755
--- a/idrop-web/grails-app/views/common/_topToolbar.gsp
+++ b/idrop-web/grails-app/views/common/_topToolbar.gsp
@@ -1,129 +1,26 @@
-<div id="topToolbar"
- style="height: 100%; overflow: visible; margin-left: auto; margin-right: auto;">
+<div id="topToolbar" >
- <ul id="topToolbarMenu" class="sf-menu">
+ <div id="topToolbarMenu" class="btn-toolbar">
- <li id="menuFileDetails" class="detailsToolbarMenuItem"><a
- href="#file"><g:message code="text.file" /></a>
- <ul>
- <li id="menuRefresh"><a href="#refresh" onclick="refreshTree()"><g:message
- code="text.refresh" /></a></li>
- <li id="menuNewFolderDetails"><a href="#newFolderDetails"
- onclick="newFolderViaBrowseDetailsToolbar()"><g:message
- code="text.new.folder" /></a></li>
- <!-- <li id="menuRenameDetails"><a href="#renameDetails"
- onclick="renameViaBrowseDetailsToolbar()"><g:message
- code="text.rename" /></a></li>
- <li id="menuDeleteDetails"><a href="#deleteDetails"
- onclick="deleteViaBrowseDetailsToolbar()"><g:message
- code="default.button.delete.label" /></a></li>-->
-
- </ul></li>
- <li id="menuFile" class="toolbarMenuItem"><a href="#file"><g:message
- code="text.file" /></a>
- <ul>
- <li id="menuRefresh"><a href="#refresh" onclick="refreshTree()"><g:message
- code="text.refresh" /></a></li>
- <li id="menuNewFolder"><a href="#newFolder"
- onclick="newFolderViaToolbar()"><g:message
- code="text.new.folder" /></a></li>
- <li id="menuRename"><a href="#rename"
- onclick="renameViaToolbar()"><g:message code="text.rename" /></a></li>
- <li id="menuDelete"><a href="#delete"
- onclick="deleteViaToolbar()"><g:message
- code="default.button.delete.label" /></a></li>
- </ul></li>
-
- <li id="menuView"><a href="#view"><g:message code="text.view" /></a>
- <ul>
- <li id="menuBrowseView"><a href="#browseView"
- onclick="browseView()"><g:message
- code="text.browse" /></a></li>
- <li id="menuInfoView"><a href="#infoView" onclick="infoView()"> <g:message code="text.info" /></a></li>
- <li id="menuSharingView"><a href="#sharingView"
- onclick="sharingView()"><g:message
- code="text.sharing" /></a></li>
- <li id="menuMetadataView"><a href="#metadataView"
- onclick="metadataView()"><g:message
- code="text.metadata" /></a></li>
- <li id="menuGalleryView"><a href="#galleryView"
- onclick="galleryView()"><g:message
- code="text.gallery" /></a></li>
- <li id="menuAuditView"><a href="#auditView"
- onclick="auditView()"><g:message
- code="text.audit" /></a></li>
- <g:if test="${grailsApplication.config.idrop.config.use.tickets==true}">
- <li id="menuTicketView"><a href="#ticketView"
- onclick="ticketView()"><g:message
- code="text.tickets" /></a></li>
- </g:if>
- </ul></li>
-
- <!-- details toolbar -->
-
- <li id="menuUploadDownloadDetails" class="detailsToolbarMenuItem"><a
- href="#uploadDownloadDetails"><g:message
- code="text.upload.and.download" /></a>
- <ul>
- <li id="menuUploadDetails"><a href="#uploadDetails"
- onclick="showBrowseDetailsUploadDialog()"><g:message
- code="text.upload" /></a></li>
-
- <li id="menuBulkUploadDetails" class="idropLiteBulkUpload"><a href="#bulkuploadDetails"
- onclick="showBrowseDetailsIdropLite()"><g:message
- code="text.bulk.upload" /></a></li>
-
- <li id="menuAddToCartDetails"><a href="#addToCartDetails"
- onclick="addToCartViaBrowseDetailsToolbar()"><g:message
- code="text.add.to.cart" /></a></li>
-
-
- </ul></li>
-
- <li id="menuToolsDetails" class="detailsToolbarMenuItem"><a href="#menuToolsDetails"><g:message code="text.tools"/></a>
- <ul>
- <li id="menuToolsDetailsMakePublicLink"><a href="#makePublicLinkDetails" onclick="makePublicLinkAtPath()"><g:message code="text.create.public.link" /></a></li>
- </ul>
- </li>
-
-
- <li id="menuBulkActionDetails" class="detailsToolbarMenuItem"><a href="#applyActionToAllDetails"><g:message code="text.apply.to.all"/></a>
- <ul>
-
- <li id="menuAddToCartDetails"><a href="#addAllToCartDetails" onclick="addSelectedToCart()"><g:message code="text.add.all.to.cart" /></a></li>
- <li id="menuDeleteDetails"><a href="#deleteAllDetails" onclick="deleteSelected()"><g:message code="text.delete.all" /></a></li>
- </ul>
- </li>
-
-
-
-
- <!-- info toolbar -->
-
- <li id="menuTools" class="toolbarMenuItem"><a href="#menuToolsD"><g:message code="text.tools"/></a>
- <ul>
- <li id="menuToolsMakePublicLink"><a href="#makePublicLink" onclick="makePublicLinkAtPath()"><g:message code="text.create.public.link" /></a></li>
- </ul>
- </li>
-
- <li id="menuUploadDownload" class="toolbarMenuItem"><a
- href="#uploadDownload"><g:message code="text.upload.and.download" /></a>
- <ul>
- <li id="menuUpload"><a href="#upload"
- onclick="showUploadDialogFromInfoToolbar()"><g:message
- code="text.upload" /></a></li>
- <li id="menuDownload"><a href="#download"
- onclick="downloadAction()"><g:message code="text.download" /></a></li>
- <li id="menuBulkUpload" class="idropLiteBulkUpload"><a href="#bulkupload"
- onclick="showIdropLite()"><g:message code="text.bulk.upload" /></a></li>
-
- <li id="menuAddToCart"><a href="#addToCart"
- onclick="addToCartViaToolbar()"><g:message
- code="text.add.to.cart" /></a></li>
+ <div id="menuFileDetails" class="btn-group">
+ <button id="menuRefresh" onclick="refreshTree()"><img class="icon-refresh"/><g:message
+ code="text.refresh" /></button>
+ <button id="menuNewFolderDetails"
+ onclick="newFolderViaBrowseDetailsToolbar()"><img class="icon-plus-sign"/><g:message
+ code="text.new.folder" /></button>
+
+ </div>
-
- </ul></li>
- </ul>
+ <div id="menuView" class="btn-group">
+
+ <button id="menuBrowseView"
+ onclick="browseView()"><img class="icon-list"/><g:message
+ code="text.browse" /></button>
+ <button id="menuInfoView" onclick="infoView()"><img class="icon-info-sign"/> <g:message code="text.info" /></button>
+ <button id="menuGalleryView"
+ onclick="galleryView()"><img class="icon-picture"/><g:message
+ code="text.gallery" /></button>
+ </div>
</div>
@@ -133,7 +30,7 @@
$(function() {
$(".toolbarMenuItem").hide();
$(".detailsToolbarMenuItem").hide();
- $("ul.sf-menu").superfish();
+ //$("ul.sf-menu").superfish();
});
function setDefaultView(view) {
@@ -143,19 +40,10 @@
browseOptionVal = view;
- var state = {};
+ //var state = {};
- state["browseOptionVal"] = browseOptionVal;
- $.bbq.pushState(state);
-
- }
-
- /**
- * audit view selected
- */
- function auditView() {
- setDefaultView("audit");
- showAuditView(selectedPath);
+ //state["browseOptionVal"] = browseOptionVal;
+ //$.bbq.pushState(state);
}
@@ -177,30 +65,6 @@
}
/**
- * Show the sharing (ACL) view
- */
- function sharingView() {
- setDefaultView("sharing");
- showSharingView(selectedPath);
- }
-
- /**
- * Show the metadata (AVU) view
- */
- function metadataView() {
- setDefaultView("metadata");
- showMetadataView(selectedPath);
- }
-
- /**
- * Show the ticket view
- */
- function ticketView() {
- setDefaultView("ticket");
- showTicketView(selectedPath);
- }
-
- /**
* Show the gallery (photo) view
*/
function galleryView() {
@@ -257,35 +121,6 @@
downloadViaToolbar(path);
}
- function showBulkShareDialogFromToolbar() {
- var path = $("#infoAbsPath").val();
- showBulkShareDialog(path);
- }
-
- function showIdropLiteFromToolbar() {
- var path = $("#infoAbsPath").val();
- showBulkShareDialog(path);
- }
-
- /**
- * Show the dialog to allow upload of data using the abs path in the info pane
- */
- function showUploadDialogFromInfoToolbar() {
- var uploadPath = $("#infoAbsPath").val();
- if (uploadPath == null) {
- showErrorMessage("No path was found to upload, application error occurred");
- return;
- }
-
- showUploadDialogUsingPath(uploadPath);
-
- }
-
- function sharingSelectedFromToolbar() {
- var path = $("#infoAbsPath").val();
- showSharingView(path);
- }
-
/*
* Cause a dialog to appear that has a link for a public path for the current path
*/
diff --git a/idrop-web/grails-app/views/common/_topbar.gsp b/idrop-web/grails-app/views/common/_topbar.gsp
index ce1c402..b1184f2 100644..100755
--- a/idrop-web/grails-app/views/common/_topbar.gsp
+++ b/idrop-web/grails-app/views/common/_topbar.gsp
@@ -1,72 +1,67 @@
-<g:ifAuthenticated>
- <div id="headerSearchBox" class="box">
-
- <div id="searchMenu" class="fg-buttonset fg-buttonset-multi" style="float:left">
- <input id="searchTerm" type="text"
- name="searchTerm" />
-
- <button type="button" id="search"
- class="ui-state-default ui-corner-all" value="search"
- onclick="search()")><g:message code="text.search" /></button><span>as a<g:select name="searchType" id="searchType" from="${['file', 'tag']}" /></span>
-
- <span> or </span><button type="button" id="selectTreePath"
- class="ui-state-default ui-corner-all" value="search"
- onclick="selectTreePath()")><g:message code="text.find.path.in.tree" /></button>
- </div>
-
- <div id="toggleMenu" style="float:right">
+<div class="navbar navbar-fixed-top navbar-inverse">
+<div class="navbar-inner">
+ <a class="brand" href="#">iDrop</a>
+
+ <ul class="nav">
+ <g:ifAuthenticated>
+
+ <!-- menu items shown if user has been authenticated -->
+
+ <li id="topbarHome" class="topbarItem"><g:link controller="home" action="index"><g:message code="text.home" /></g:link></li>
+ <li id="topbarBrowser" class="topbarItem"><g:link controller="browse" action="index"><g:message code="text.browse" /></g:link></li>
+ <g:if test="${grailsApplication.config.idrop.config.use.userprofile==true}">
+ <li id="topbarPreferences" class="topbarItem"><g:link controller="profile" action="index">Profile</g:link></li>
+ </g:if>
+ <li id="topbarSearch" class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+ <g:message code="text.search" /><b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="#" id="searchFileName" onclick="xxx()")>Search By File Name</a></li>
+ <li><a href="#" id="searchTag"><g:link controller="tags" action="index"><g:message code="text.tags" /></g:link></li>
+ <li><a href="#" id="searchMetadata" onclick="xxx()")>Search By Metadata</a></li>
+ </ul>
+ </li>
+ <li id="topbarTools" class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+ <g:message code="text.tools" /><b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="${grailsApplication.config.idrop.config.idrop.jnlp}" id="idropDesktop")>iDrop Desktop</a></li>
+ </ul>
+ </li>
+
+ </g:ifAuthenticated>
- <span id="topBarLoginInfo" ><!-- login bar goes here --></span>
-
- <button type="button" id="logoutButton"
- class="ui-state-default ui-corner-all" value="logout"
- onclick="logout()")><g:message code="text.logout" /></button>
-
-
- <button type="button" id="toggleMenuButton"
- class="ui-state-default ui-corner-all" value="showMenu"
- onclick="showMenu()")><g:message code="text.show.menu" /></button>
-
-
+ <li id="topbarAccount" class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+ <g:message code="text.account" /> ( <span id="accountZoneAndUserDisplay"><g:accountInfo /></span> )<b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <g:ifAuthenticated>
+ <li><a href="#" id="logoutButton" onclick="logout()")><g:message code="text.logout" /></a></li>
+ <li><a href="#" id="changePasswordButton"><g:link controller="login" action="changePasswordForm"><g:message code="text.change.password" /></g:link></a></li>
+ <li><a href="#" id="setDefaultResourceButton"><g:link controller="login" action="defaultResource"><g:message code="text.set.default.resource" /></g:link></a></li>
+ </g:ifAuthenticated>
+
+ </ul>
+ </li>
- </div>
-
- </div>
-</g:ifAuthenticated>
-
-<script type="text/javascript">
-var menuShown = true;
-function showMenu() {
-
- if (menuShown) {
- $("#secondaryDiv").hide('slow');
- $("#secondaryDiv").width="0%";
- menuShown = false;
- $("#mainDiv").width="100%";
- $("#mainDivCol1").width="100%";
- $("#mainDivCol1").removeClass();
- dataLayout.resizeAll();
- } else {
- $("#secondaryDiv").show('slow');
- $("#mainDiv").width="80%";
- $("#mainDivCol1").width="80%";
- $("#secondaryDiv").width="20%";
- $("#mainDivCol1").addClass("yui-u first");
- refreshTagCloud();
- dataLayout.resizeAll();
- menuShown = true;
- }
-}
-
-$(function() {
- var url = "/browse/showLoginBar";
- lcSendValueAndCallbackHtmlAfterErrorCheck(url, "#topBarLoginInfo",
- "#topBarLoginInfo", null);
-});
-
+ <g:ifAuthenticated>
+ <li id="topbarShoppingCart" class="topbarItem"><g:link class="pull-right" controller="shoppingCart" action="index"><span id="shoppingCartToolbarLabel"><g:message code="text.shopping.cart" /></span></g:link></li>
+ </g:ifAuthenticated>
+
+ </ul>
+ </div>
+</div>
+ <g:ifAuthenticated>
+<script>
+ var currentZone = "${irodsAccount?.zone}";
+ var currentUser = "${irodsAccount?.userName}";
+ //$(function() {
+ //$("#accountZoneAndUserDisplay").html(currentZone + ":" + currentUser);
+// });
+ </g:ifAuthenticated>
+</script>
-</script>
diff --git a/idrop-web/grails-app/views/error.gsp b/idrop-web/grails-app/views/error.gsp
index 95af453..9d65afe 100644..100755
--- a/idrop-web/grails-app/views/error.gsp
+++ b/idrop-web/grails-app/views/error.gsp
@@ -1 +1 @@
-${request.'javax.servlet.error.message'} \ No newline at end of file
+${request.'javax.servlet.error.message'}
diff --git a/idrop-web/grails-app/views/file/deleteResult.gsp b/idrop-web/grails-app/views/file/deleteResult.gsp
new file mode 100755
index 0000000..b851396
--- /dev/null
+++ b/idrop-web/grails-app/views/file/deleteResult.gsp
@@ -0,0 +1 @@
+${absPath} \ No newline at end of file
diff --git a/idrop-web/grails-app/views/file/quickUploadDialog.gsp b/idrop-web/grails-app/views/file/quickUploadDialog.gsp
new file mode 100755
index 0000000..9afe18c
--- /dev/null
+++ b/idrop-web/grails-app/views/file/quickUploadDialog.gsp
@@ -0,0 +1,45 @@
+<div id="uploadDialogDiv">
+
+
+ <div class="modal-header">
+ <h3><g:message code="heading.upload.dialog"/></h3>
+ </div>
+
+ <div class="modal-body">
+ <g:form controller="quickUpload" action="upload" method="post"
+ name="uploadForm" enctype="multipart/form-data"
+ target="upload_target">
+
+ <label><g:message
+ code="text.parent" />
+ ${irodsTargetCollection}</label>
+ <g:hiddenField id="collectionParentName" name="collectionParentName" value="${irodsTargetCollection}"/>
+ <br />
+ <div id="file_upload_container">
+ <input type="file" name="file">
+ <button type="button" id="upload" value="upload"
+ onclick="upload()")>Upload</button>
+ </div>
+ <div id="upload_message_area">
+ </div>
+ <table id="files"></table>
+
+ </g:form>
+ </div>
+
+ <div class="modal-footer">
+ <button type="button" id="cancelUpload"
+ value="cancelUpload"
+ onclick="closeUploadDialog()")><g:message code="text.cancel" /></button>
+ </div>
+
+</div>
+
+<script>
+function closeUploadDialog() {
+ $("#uploadDialog").dialog('close');
+ $("#uploadDialog").remove();
+}
+
+</script>
+
diff --git a/idrop-web/grails-app/views/file/uploadDialog.gsp b/idrop-web/grails-app/views/file/uploadDialog.gsp
index c4aa285..c07c463 100644..100755
--- a/idrop-web/grails-app/views/file/uploadDialog.gsp
+++ b/idrop-web/grails-app/views/file/uploadDialog.gsp
@@ -1,25 +1,45 @@
<div id="uploadDialogDiv">
- <g:form controller="file" action="upload" method="post"
- name="uploadForm" enctype="multipart/form-data"
- target="upload_target">
-
- <b>Parent Collection:</b>
- ${irodsTargetCollection}
- <g:hiddenField id="collectionParentName" name="collectionParentName" value="${irodsTargetCollection}"/>
- <br />
- <div id="file_upload_container">
- <input type="file" name="file">
- <button type="button" id="upload" value="upload"
- onclick="upload()")>Upload</button>
- </div>
- <div id="upload_message_area">
- </div>
- <table id="files"></table>
-
- </g:form>
+ <div class="modal-header">
+ <h3><g:message code="heading.upload.dialog"/></h3>
+ </div>
+
+ <div class="modal-body">
+ <g:form controller="file" action="upload" method="post"
+ name="uploadForm" enctype="multipart/form-data"
+ target="upload_target">
+
+ <label><g:message
+ code="text.parent" />
+ ${irodsTargetCollection}</label>
+ <g:hiddenField id="collectionParentName" name="collectionParentName" value="${irodsTargetCollection}"/>
+ <br />
+ <div id="file_upload_container">
+ <input type="file" name="file">
+ <button type="button" id="upload" value="upload"
+ onclick="upload()")>Upload</button>
+ </div>
+ <div id="upload_message_area">
+ </div>
+ <table id="files"></table>
+
+ </g:form>
+ </div>
+
+ <div class="modal-footer">
+ <button type="button" id="cancelRenameButton"
+ value="cancelAdd"
+ onclick="closeUploadDialog()")><g:message code="text.cancel" /></button>
+ </div>
+
</div>
+<script>
+function closeUploadDialog() {
+ $("#uploadDialog").dialog('close');
+ $("#uploadDialog").remove();
+}
+</script>
diff --git a/idrop-web/grails-app/views/home/index.gsp b/idrop-web/grails-app/views/home/index.gsp
index 70e8fde..40fd5b4 100644..100755
--- a/idrop-web/grails-app/views/home/index.gsp
+++ b/idrop-web/grails-app/views/home/index.gsp
@@ -1,97 +1,92 @@
-<head>
-<meta name="layout" content="main" />
-<g:javascript library="mydrop/home" />
-<g:javascript library="mydrop/search" />
-<g:javascript library="mydrop/metadata" />
-<g:javascript library="mydrop/profile" />
-</head>
-<div id="tabs" class="wrapper clearfix"
- style="height: 820px; overflow:hidden;">
-
- <g:hiddenField name="mode" id="mode" value="${mode}"/>
- <g:hiddenField name="presetPath" id="presetPath" value="${path}"/>
-
- <ul>
- <li><a href="#browseTab"><g:message code="text.browse" /> </a></li>
- <li><a href="#searchTab"><g:message code="text.search" /> </a></li>
- <g:if test="${grailsApplication.config.idrop.config.use.userprofile==true}">
- <li><a href="#profileTab"><g:message code="text.profile" /> </a></li>
- </g:if>
- </ul>
-
-
- <div id="browseTab" style="height:100%;">
- <g:render template="/browse/browseTabContent" />
- </div><!-- browse tab -->
-
- <div id="searchTab">
-
- <div id="searchDivOuter"
- style="display: block; width: 95%; height: 90%; position: relative; overflow: hidden;"
- class="ui-layout-center">
- <!-- this will be filled in with the search results table -->
- <div id="searchTableDiv"
- style="width: 100%; height: 100%; overflow: auto;">
- <h2>
- <g:message code="heading.no.search.yet" />
- </h2>
- </div> <!-- searchTableDiv -->
- </div> <!-- searchDivOuter -->
- </div> <!-- search tab -->
-
- <g:if test="${grailsApplication.config.idrop.config.use.userprofile==true}">
- <div id="profileTab" style="height:100%;overflow:hidden;">
- <g:render template="/profile/profileTabContent" />
- </div><!-- profile tab -->
- </g:if>
-
-
-</div> <!-- tabs -->
-<script type="text/javascript">
- var dataLayout;
- var tabs;
- var globalMessageArea = "#javascript_message_area";
- $(document).ready(function() {
-
- $.ajaxSetup({
- cache : false
- });
-
- menuShown = false;
- $("#secondaryDiv").hide('slow');
- $("#secondaryDiv").width = "0%";
- menuShown = false;
- $("#mainDiv").width = "100%";
- $("#mainDivCol1").width = "100%";
- $("#mainDivCol1").removeClass();
- $("#infoDiv").resize();
-
- dataLayout = $("#dataTreeView").layout({
- applyDefaultStyles : false,
- size : "auto",
- west__minSize : 150,
- west__resizable : true
- });
-
- var mode = $("#mode").val();
- var startPath = $("#presetPath").val();
-
- if (mode == null || mode=="") {
- retrieveBrowserFirstView("detect","");
- } else {
- retrieveBrowserFirstView(mode, startPath);
- }
- tabs = $("#tabs").tabs({});
-
- tabs.bind("tabsselect", function(event, ui) {
-
- var state = {};
- // Get the id of this tab widget.
- //alert(ui.tab.hash);
- state["#tabs"] = ui.tab.hash;
- $.bbq.pushState(state);
-
- });
-
- });
+<head>
+<meta name="layout" content="mainNoSidebar" />
+<g:javascript library="mydrop/home" />
+</head>
+<div>
+
+ <div id="uploadDialog">
+ <!-- target div for creating upload dialogs -->
+ </div>
+ <div class="row-fluid">
+ <div class="span2">
+ <!-- nav for table -->
+ <ul class="nav nav-list">
+ <li class="nav-header"><g:message code="text.tools" /></li>
+ <li id="quickUpload" class="quicknav"><a href="#" onclick="quickUploadFromHome()"><g:message code="text.quick.upload" /></a></li>
+ <li class="nav-header"><g:message code="text.starred" /></li>
+ <li id="quickStarredFiles" class="quicknav"><a href="#" onclick="quickViewShowStarredFiles()"><g:message code="text.starred.files" /></a></li>
+ <li id="quickStarredFolders" class="quicknav"><a href="#" onclick="quickViewShowStarredFolders()"> <g:message code="text.starred.folders" /></a></li>
+ <g:if test="${shareSupported}">
+ <li class="nav-header">Shared</li>
+ <li id="quickSharedByMeFolders" class="quicknav"><a href="#" onclick="quickViewShowFoldersSharedByMe()"><g:message code="text.folders.shared.by.me" /></a></li>
+ <li id="quickSharedWithMeFolders" class="quicknav"><a href="#" onclick="quickViewShowFoldersSharedWithMe()"><g:message code="text.folders.shared.with.me" /></a></li>
+ </g:if>
+ </ul>
+ </div>
+ <div id="quickViewListContainer" class="span8"></div>
+ </div>
+</div>
+<script type="text/javascript">
+ $(document).ready(function() {
+
+ $.ajaxSetup({
+ cache : false
+ });
+ $("#topbarHome").addClass("active");
+ quickViewShowStarredFiles();
+
+ });
+
+ function quickViewShowStarredFolders() {
+ resetQuicknav();
+ $("#quickStarredFolders").addClass("active");
+ var url = "/home/starredCollections";
+ var params = {
+
+ }
+ lcSendValueWithParamsAndPlugHtmlInDiv(url, params, "#quickViewListContainer", null);
+ }
+
+ function quickViewShowStarredFiles() {
+ resetQuicknav();
+ $("#quickStarredFiles").addClass("active");
+ var url = "/home/starredDataObjects";
+ var params = {
+
+ }
+ lcSendValueWithParamsAndPlugHtmlInDiv(url, params, "#quickViewListContainer", null);
+ }
+
+ function quickViewShowFoldersSharedByMe() {
+ resetQuicknav();
+ $("#quickSharedByMeFolders").addClass("active");
+ var url = "/home/sharedCollectionsByMe";
+ var params = {
+
+ }
+ lcSendValueWithParamsAndPlugHtmlInDiv(url, params, "#quickViewListContainer", null);
+ }
+
+ function quickViewShowFoldersSharedWithMe() {
+ resetQuicknav();
+ $("#quickSharedWithMeFolders").addClass("active");
+ var url = "/home/sharedCollectionsWithMe";
+ var params = {
+
+ }
+ lcSendValueWithParamsAndPlugHtmlInDiv(url, params, "#quickViewListContainer", null);
+ }
+
+ function resetQuicknav() {
+ $(".quicknav").removeClass("active");
+ }
+
+ function quickUploadFromHome() {
+
+ showQuickUploadDialog();
+
+
+ }
+
+
</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/home/link.gsp b/idrop-web/grails-app/views/home/link.gsp
index f1e7e87..f1e7e87 100644..100755
--- a/idrop-web/grails-app/views/home/link.gsp
+++ b/idrop-web/grails-app/views/home/link.gsp
diff --git a/idrop-web/grails-app/views/home/noInfo.gsp b/idrop-web/grails-app/views/home/noInfo.gsp
new file mode 100755
index 0000000..2651776
--- /dev/null
+++ b/idrop-web/grails-app/views/home/noInfo.gsp
@@ -0,0 +1,3 @@
+<div>
+<h2><g:message code="message.no.files.to.display" /></h2>
+</div> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/home/quickViewList.gsp b/idrop-web/grails-app/views/home/quickViewList.gsp
new file mode 100644
index 0000000..57077df
--- /dev/null
+++ b/idrop-web/grails-app/views/home/quickViewList.gsp
@@ -0,0 +1,46 @@
+ <%@page import="org.irods.jargon.core.query.MetaDataAndDomainData" %>
+ <%@page import="org.irods.jargon.usertagging.domain.IRODSSharedFileOrCollection" %>
+<table class="table table-striped table-hover">
+ <thead>
+ <tr>
+ <th></th>
+ <th><g:message code="text.actions" /></th>
+ <th><g:message code="text.name" /></th>
+ <th><g:message code="text.description" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <g:each in="${listing}" var="entry">
+ <tr>
+ <g:if test="${entry.metadataDomain == MetaDataAndDomainData.MetadataDomain.COLLECTION}">
+ <td></td>
+ <td><span class="setPaddingLeftAndRight"><g:link controller="browse" action="index" params="[mode: 'path', absPath: entry.domainUniqueName]"><i class="icon-folder-open "></i></g:link></span>
+ <span class="setPaddingLeftAndRight"><i class="icon-upload " onclick="quickviewUpload('${entry.domainUniqueName}')"></i></span></td>
+ <td>${entry.domainUniqueName}</td> <td>${entry.description}</td>
+ </g:if>
+ <g:else>
+ <td></td>
+ <td><span class="setPaddingLeftAndRight"><g:link controller="browse" action="index" params="[mode: 'path', absPath: entry.domainUniqueName]"><i class="icon-folder-open "></i></g:link></span><span class="setPaddingLeftAndRight"><g:link url="${'file/download' + entry.domainUniqueName}"><i class="icon-download "></i></g:link></span></td>
+ <td>${entry.domainUniqueName}</td> <td>${entry.description}</td>
+ </g:else>
+ </tr>
+ </g:each>
+ </tbody>
+
+</table>
+<script>
+
+/**
+* Show the uplaod dialog using the hidden path in the info view
+*/
+function quickviewUpload(path) {
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ showUploadDialogUsingPath(path);
+
+
+}
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/home/shareQuickViewList.gsp b/idrop-web/grails-app/views/home/shareQuickViewList.gsp
new file mode 100644
index 0000000..7c96fb8
--- /dev/null
+++ b/idrop-web/grails-app/views/home/shareQuickViewList.gsp
@@ -0,0 +1,45 @@
+ <%@page import="org.irods.jargon.core.query.MetaDataAndDomainData" %>
+ <%@page import="org.irods.jargon.usertagging.domain.IRODSSharedFileOrCollection" %>
+<table class="table table-striped table-hover">
+ <thead>
+ <tr>
+ <th></th>
+ <th><g:message code="text.actions" /></th>
+ <th><g:message code="text.name" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <g:each in="${listing}" var="entry">
+ <tr>
+ <g:if test="${entry.metadataDomain == MetaDataAndDomainData.MetadataDomain.COLLECTION}">
+ <td></td>
+ <td><span class="setPaddingLeftAndRight"><g:link controller="browse" action="index" params="[mode: 'path', absPath: entry.domainUniqueName]"><i class="icon-folder-open "></i></g:link></span>
+ <span class="setPaddingLeftAndRight"><i class="icon-upload " onclick="quickviewUpload('${entry.domainUniqueName}')"></i></span></td>
+ <td>${entry.shareName}</td>
+ </g:if>
+ <g:else>
+ <td></td>
+ <td><span class="setPaddingLeftAndRight"><g:link controller="browse" action="index" params="[mode: 'path', absPath: entry.domainUniqueName]"><i class="icon-folder-open "></i></g:link></span><span class="setPaddingLeftAndRight"><g:link url="${'file/download' + entry.domainUniqueName}"><i class="icon-download "></i></g:link></span></td>
+ <td>${entry.shareName}</td>
+ </g:else>
+ </tr>
+ </g:each>
+ </tbody>
+
+</table>
+<script>
+
+/**
+* Show the uplaod dialog using the hidden path in the info view
+*/
+function quickviewUpload(path) {
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ showUploadDialogUsingPath(path);
+
+
+}
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/home/shareWithMeQuickViewList.gsp b/idrop-web/grails-app/views/home/shareWithMeQuickViewList.gsp
new file mode 100644
index 0000000..d6d82a6
--- /dev/null
+++ b/idrop-web/grails-app/views/home/shareWithMeQuickViewList.gsp
@@ -0,0 +1,48 @@
+ <%@page import="org.irods.jargon.core.query.MetaDataAndDomainData" %>
+ <%@page import="org.irods.jargon.usertagging.domain.IRODSSharedFileOrCollection" %>
+<table class="table table-striped table-hover">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Action</th>
+ <th>Name</th>
+ <th>By User</th>
+ </tr>
+ </thead>
+ <tbody>
+ <g:each in="${listing}" var="entry">
+ <tr>
+ <g:if test="${entry.metadataDomain == MetaDataAndDomainData.MetadataDomain.COLLECTION}">
+ <td></td>
+ <td><span class="setPaddingLeftAndRight"><g:link controller="browse" action="index" params="[mode: 'path', absPath: entry.domainUniqueName]"><i class="icon-folder-open "></i></g:link></span>
+ <span class="setPaddingLeftAndRight"><i class="icon-upload " onclick="quickviewUpload('${entry.domainUniqueName}')"></i></span></td>
+ <td>${entry.shareName}</td>
+ <td>${entry.shareOwner}#${entry.shareOwnerZone}</td>
+ </g:if>
+ <g:else>
+ <td></td>
+ <td><span class="setPaddingLeftAndRight"><g:link controller="browse" action="index" params="[mode: 'path', absPath: entry.domainUniqueName]"><i class="icon-folder-open "></i></g:link></span><span class="setPaddingLeftAndRight"><g:link url="${'file/download' + entry.domainUniqueName}"><i class="icon-download "></i></g:link></span></td>
+ <td>${entry.shareName}</td>
+ <td>${entry.shareOwner}#${entry.shareOwnerZone}</td>
+ </g:else>
+ </tr>
+ </g:each>
+ </tbody>
+
+</table>
+<script>
+
+/**
+* Show the uplaod dialog using the hidden path in the info view
+*/
+function quickviewUpload(path) {
+ if (path == null) {
+ showErrorMessage(jQuery.i18n.prop('msg.path.missing'));
+ return false;
+ }
+
+ showUploadDialogUsingPath(path);
+
+
+}
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/idropLite/appletLoader.gsp b/idrop-web/grails-app/views/idropLite/appletLoader.gsp
index 9745ef5..297e853 100644..100755
--- a/idrop-web/grails-app/views/idropLite/appletLoader.gsp
+++ b/idrop-web/grails-app/views/idropLite/appletLoader.gsp
@@ -1,6 +1,6 @@
-<div id="appletMenu" class="fg-buttonset fg-buttonset-single" style="float:right">
+<div id="appletMenu" class="pull-right">
<button type="button" id="toggleMenuButton"
- class="ui-state-default ui-corner-all" value="closeIdropApplet"
+ value="closeIdropApplet"
onclick="closeApplet()")>Close iDrop Lite</button>
</div>
<div id="appletLoadDiv">
diff --git a/idrop-web/grails-app/views/layouts/basic.gsp b/idrop-web/grails-app/views/layouts/basic.gsp
index 707e79d..c5e105b 100644..100755
--- a/idrop-web/grails-app/views/layouts/basic.gsp
+++ b/idrop-web/grails-app/views/layouts/basic.gsp
@@ -1,47 +1,33 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN">
-<html>
+<!DOCTYPE html>
+<html lang="en">
<head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><g:layoutTitle default="iDrop-web - iRODS Cloud Browser" /></title>
-<link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'base.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'style.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'layout-default-latest.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'jquery.fileupload-ui.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'superfish.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'jquery.gritter.css')}" />
-<link rel="stylesheet"
- href="${resource(dir:'css',file:'reset-fonts-grids.css')}" />
-<link rel="stylesheet" href="${resource(dir:'css',file:'start/jquery-ui-1.8.18.custom.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'bootstrap.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'jqcloud.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'layout-default-latest.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.fileupload-ui.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'superfish.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.gritter.css')}" />
+ <link rel="stylesheet" href="${resource(dir:'css',file:'overcast/jquery-ui-1.9.0.custom.css')}" />
-<link rel="shortcut icon"
- href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
-<g:layoutHead />
-<g:javascript library="jquery-1.7.1.min" />
-<g:javascript library="jquery-ui-1.8.7.custom.min" />
- <g:javascript library="jquery.hotkeys" />
- <g:javascript library="jquery.jstree" />
-<g:javascript library="jquery.jeditable.mini" />
-<g:javascript library="jquery.dataTables.min" />
-<g:javascript library="mydrop/ticket" />
-<g:javascript library="jquery.i18n.properties-min-1.0.9" />
-<g:javascript library="jqcloud-0.1.6" />
-<g:javascript library="jquery.fileupload-ui" />
-<g:javascript library="jquery.fileupload" />
-<g:javascript library="jquery.media" />
-<g:javascript library="mydrop/lingo_common" />
-<g:javascript library="mydrop/main" />
-<g:javascript library="jquery-ui-13" />
-<g:javascript library="jquery.blockUI" />
-<g:javascript library="jquery.ba-bbq.min" />
-<g:javascript library="jquery.layout.min-1.3.0" />
-<g:javascript library="jquery-ui-13" />
-<g:javascript library="jquery.tools.min" />
-<g:javascript library="mydrop/shopping_cart" />
-<g:javascript library="mydrop/user" />
-<g:javascript library="galleria-1.2.6" />
-<g:javascript library="jquery.gritter.min" />
-<g:javascript library="jquery.opacityrollover" />
-<g:javascript library="superfish" />
+ <link rel="shortcut icon"
+ href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
+ <g:layoutHead />
+ <g:javascript library="jquery-1.7.2.min" />
+ <g:javascript library="jquery-ui-1.8.7.custom.min" />
+ <g:javascript library="bootstrap.min" />
+
+ <g:javascript library="jquery.i18n.properties-min-1.0.9" />
+ <g:javascript library="mydrop/lingo_common" />
+ <g:javascript library="mydrop/main" />
+ <g:javascript library="jquery-ui-13" />
+ <g:javascript library="jquery.blockUI" />
+ <g:javascript library="jquery.ba-bbq.min" />
+ <g:javascript library="jquery-ui-13" />
+ <g:javascript library="jquery.tools.min" />
+ <g:javascript library="jquery.gritter.min" />
+ <g:javascript library="jquery.opacityrollover" />
<!-- preserve the application context as a js variable for use in AJAX callbacks -->
<script type="text/javascript">
context = "${request.contextPath}";
@@ -85,12 +71,10 @@
</script>
</head>
-<body style="height:100%;">
-<div id="hd"><!-- PUT MASTHEAD CODE HERE -->
+<body>
<div id="bannercontainer">
<!-- image banner -->
</div>
-</div>
<div id="bd" style="height:100%;">
<div id="defaultDialogDiv"><!-- default for general jquery dialogs --></div>
<div id="yui-main" style="height:100%;">
diff --git a/idrop-web/grails-app/views/layouts/main.gsp b/idrop-web/grails-app/views/layouts/main.gsp
index 3be6a05..2cc23ca 100644..100755
--- a/idrop-web/grails-app/views/layouts/main.gsp
+++ b/idrop-web/grails-app/views/layouts/main.gsp
@@ -1,48 +1,7 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN">
-<html>
+<!DOCTYPE html>
+<html lang="en">
<head>
- <title><g:layoutTitle default="iDrop-web - iRODS Cloud Browser" /></title>
- <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'base.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'style.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'jqcloud.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'layout-default-latest.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.fileupload-ui.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'superfish.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'jquery.gritter.css')}" />
- <link rel="stylesheet"
- href="${resource(dir:'css',file:'reset-fonts-grids.css')}" />
- <link rel="stylesheet" href="${resource(dir:'css',file:'start/jquery-ui-1.8.18.custom.css')}" />
-
- <link rel="shortcut icon"
- href="${resource(dir:'images',file:'favicon.ico')}" type="image/x-icon" />
- <g:layoutHead />
- <g:javascript library="jquery-1.7.2.min" />
- <g:javascript library="jquery-ui-1.8.7.custom.min" />
- <g:javascript library="jquery.hotkeys" />
- <g:javascript library="jquery.jstree" />
- <g:javascript library="jquery.jeditable.mini" />
- <g:javascript library="jquery.dataTables.min" />
- <g:javascript library="mydrop/ticket" />
- <g:javascript library="jquery.i18n.properties-min-1.0.9" />
- <g:javascript library="jqcloud-0.1.6" />
- <g:javascript library="jquery.fileupload-ui" />
- <g:javascript library="jquery.fileupload" />
- <g:javascript library="jquery.media" />
- <g:javascript library="mydrop/lingo_common" />
- <g:javascript library="mydrop/main" />
- <g:javascript library="jquery-ui-13" />
- <g:javascript library="jquery.blockUI" />
- <g:javascript library="jquery.ba-bbq.min" />
- <g:javascript library="jquery.layout-latest.min" />
- <g:javascript library="jquery-ui-13" />
- <g:javascript library="jquery.tools.min" />
- <g:javascript library="mydrop/shopping_cart" />
- <g:javascript library="mydrop/user" />
- <g:javascript library="galleria-1.2.6" />
- <g:javascript library="jquery.gritter.min" />
- <g:javascript library="jquery.opacityrollover" />
- <g:javascript library="superfish" />
+ <g:render template="/common/cssAndJs"/>
<!-- preserve the application context as a js variable for use in AJAX callbacks -->
<script type="text/javascript">
context = "${request.contextPath}";
@@ -80,31 +39,29 @@
</script>
</head>
<body style="height:100%;overflow:visible;">
- <div id="hd"><!-- PUT MASTHEAD CODE HERE -->
- <g:render template="/common/topbar"/>
- <g:render template="/common/messages"/>
- </div>
- <div id="bd" style="height:100%;">
- <div id="defaultDialogDiv"><!-- default for general jquery dialogs --></div>
- <div id="yui-main" style="height:100%;">
- <div class="yui-b" style="height:100%;">
- <div id="mainDiv" class="yui-ge" style="height:100%;">
- <div id="mainDivCol1" class="yui-u first" style="height:100%;"><!-- PUT MAIN COLUMN 1 CODE HERE -->
- <g:layoutBody />
- </div>
- <div id="secondaryDiv" class="yui-u" style="height:100%;"><!-- PUT MAIN COLUMN 2 CODE HERE -->
- <g:ifAuthenticated>
- <g:render template="/common/secondarymain"/>
- </g:ifAuthenticated>
-
- </div>
- </div>
- </div>
- </div>
+
+ <g:render template="/common/topbar"/>
+ <div id="defaultDialogDiv"><!-- default for general jquery dialogs --></div>
+ <div class="container-fluid">
+
+ <div class="row-fluid">
+ <div id="mainDivCol1" class="span10"><!-- PUT MAIN COLUMN 1 CODE HERE -->
+ <g:layoutBody />
+ </div>
+ <div id="secondaryDiv" class="span2"><!-- PUT MAIN COLUMN 2 CODE HERE -->
+ <g:ifAuthenticated>
+ <g:render template="/common/secondarymain"/>
+ </g:ifAuthenticated>
+ </div>
+ </div>
- </div>
- <div id="ft"><!-- PUT FOOTER CODE HERE -->
- <g:render template="/common/footer" />
- </div>
+ <div class="row-fluid"><!-- PUT FOOTER CODE HERE -->
+ <div class="span12">
+ <g:render template="/common/footer" />
+ </div>
+ </div>
+
+ </div>
+
</body>
</html> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/layouts/mainNoSidebar.gsp b/idrop-web/grails-app/views/layouts/mainNoSidebar.gsp
new file mode 100755
index 0000000..f3bd869
--- /dev/null
+++ b/idrop-web/grails-app/views/layouts/mainNoSidebar.gsp
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <g:render template="/common/cssAndJs"/>
+ <!-- preserve the application context as a js variable for use in AJAX callbacks -->
+ <script type="text/javascript">
+ context = "${request.contextPath}";
+ context = context.replace("/null", "");
+ scheme = "${request.scheme}";
+ host = "${request.localName}";
+ port = "${request.localPort}";
+
+ $(function(){
+ // Keep a mapping of url-to-container for caching purposes.
+ /* var cache = {
+ // If url is '' (no fragment), display this div's content.
+ '': $('.bbq-default')
+ };*/
+
+
+ // Bind an event to window.onhashchange that, when the history state changes,
+ // gets the url from the hash and displays either our cached content or fetches
+ // new content to be displayed.
+ /* $(window).bind( 'hashchange', function(e) {
+
+ processStateChange( $.bbq.getState());
+
+ });*/
+
+ jQuery.i18n.properties({
+ name:'messages',
+ path:'js/bundles/',
+ mode:'both'
+ });
+
+
+ });
+
+ </script>
+</head>
+<body style="height:100%;padding-top: 60px;">
+ <div id="wrap">
+ <g:render template="/common/topbar"/>
+ <div id="defaultDialogDiv"><!-- default for general jquery dialogs --></div>
+ <div class="container-fluid">
+ <g:layoutBody />
+
+ </div>
+ <div id="push"><!-- for sticky footers --></div>
+ </div>
+ <footer id="footer"><g:render template="/common/footer" /></footer>
+
+</body>
+</html> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/login/defaultStorageResource.gsp b/idrop-web/grails-app/views/login/defaultStorageResource.gsp
new file mode 100644
index 0000000..ba33ace
--- /dev/null
+++ b/idrop-web/grails-app/views/login/defaultStorageResource.gsp
@@ -0,0 +1,50 @@
+<head>
+<meta name="layout" content="mainNoSidebar" />
+<g:javascript library="mydrop/home" />
+</head>
+<div class="row-fluid">
+ <div class="span5 offset2">
+ <h4><g:message code="heading.set.resource"/></h4>
+ </div>
+</div>
+<div class="row-fluid">
+ <div class="span5 offset2">
+ <form class="form-horizontal">
+ <fieldset>
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.user" /></label>
+ <div class="controls">${irodsAccount.userName}</div>
+ </div>
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.zone" /></label>
+ <div class="controls">${irodsAccount.zone}</div>
+ </div>
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.resource" /></label>
+ <div class="controls"><g:select name="defaultStorageResource" id="defaultStorageResource" from="${resources}" value="${irodsAccount.defaultStorageResource}"
+ onchange="topBarDefaultResourceChanged()"/></div>
+ </div>
+
+ </fieldset>
+ </form>
+ </div>
+</div>
+<script>
+
+
+function topBarDefaultResourceChanged() {
+ //showBlockingPanel();
+ try {
+ var resource = $("#defaultStorageResource").val();
+ if (resource == null) {
+ return false;
+ }
+ setDefaultStorageResource(resource);
+ //setMessage(jQuery.i18n.prop('msg_resource_changed'));
+ } finally {
+ //unblockPanel();
+ }
+
+}
+
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/login/login.gsp b/idrop-web/grails-app/views/login/login.gsp
index 36f6dfc..36f6dfc 100644..100755
--- a/idrop-web/grails-app/views/login/login.gsp
+++ b/idrop-web/grails-app/views/login/login.gsp
diff --git a/idrop-web/grails-app/views/login/passwordChange.gsp b/idrop-web/grails-app/views/login/passwordChange.gsp
new file mode 100755
index 0000000..ac52199
--- /dev/null
+++ b/idrop-web/grails-app/views/login/passwordChange.gsp
@@ -0,0 +1,45 @@
+<head>
+<meta name="layout" content="mainNoSidebar" />
+<g:javascript library="mydrop/profile" />
+</head>
+<div class="row-fluid">
+ <div class="span5 offset2">
+ <h4><g:message code="text.change.password.header" /></h4>
+ </div>
+</div>
+<div class="row-fluid">
+ <div class="span5 offset2">
+ <g:form class="form-horizontal" controller="login" action="changePassword">
+
+ <g:if test="${flash.message}">
+ <div class="alert alert-success" >${flash.message}</div>
+ </g:if>
+
+
+ <g:hasErrors bean="${password}">
+ <div class="alert alert-error">
+ <ul>
+ <g:eachError var="err" bean="${password}">
+ <li><g:message error="${err}" /></li>
+ </g:eachError>
+ </ul>
+ </div>
+ </g:hasErrors>
+ <div id="container">
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.password"/></label>
+ <div class="controls"><g:passwordField name="password" value="${password.password}" /></div>
+ </div>
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.confirm.password"/></label>
+ <div class="controls"><g:passwordField name="confirmPassword" value="${password.confirmPassword}" /></div>
+ </div>
+ <div class="control-group">
+ <div></div>
+ <div><button id="changePassword" value="changePassword" type="submit" ><g:message code="text.update"/></button>
+ </div>
+ </div>
+ </div>
+ </g:form>
+ </div>
+</div> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/metadata/metadataDetails.gsp b/idrop-web/grails-app/views/metadata/metadataDetails.gsp
index c9e7c01..e7e1aa2 100644..100755
--- a/idrop-web/grails-app/views/metadata/metadataDetails.gsp
+++ b/idrop-web/grails-app/views/metadata/metadataDetails.gsp
@@ -1,41 +1,47 @@
-<h2>
- <g:message code="heading.metadata" />
-</h2>
-<div id="detailsTopSection" class="box">
+<h4><g:message code="text.metadata" /></h4>
- <div id="detailsToolbar" class="fg-toolbar ui-widget-header">
- <div id="detailsMenu" class="fg-buttonset fg-buttonset-multi"
+<g:hiddenField name='metadataDetailsAbsPath' id='metadataDetailsAbsPath' value='${absPath}'/>
+
+ <!-- div for metadata table -->
+</div>
+
+
+<div id="metadataMessageArea">
+ <!-- -->
+</div>
+
+<div id="metadataDialogArea">
+ <!-- area for generating dialogs -->
+</div>
+
+<div id="metadataDetailsArea">
+
+ <div class="alert alert-info">
+ <g:message code="heading.metadata" />
+ </div>
+
+
+ <div id="detailsToolbar" class="well">
+ <div id="detailsMenu"
style="float: left, clear : both;">
<button type="button" id="addMetadataButton"
- class="ui-state-default ui-corner-all" value="addMetadata"
+ value="addMetadata"
onclick="prepareMetadataDialog()")>
<g:message code="default.button.create.label" />
</button>
<button type="button" id="deleteMetadataButton"
- class="ui-state-default ui-corner-all" value="deleteMetadata"
+ value="deleteMetadata"
onclick="deleteMetadata()")>
<g:message code="default.button.delete.label" />
</button>
<button type="button" id="reloadAclButton"
- class="ui-state-default ui-corner-all" value="reloadMetadata"
+ value="reloadMetadata"
onclick="reloadMetadataDetailsTable()")>
<g:message code="default.button.reload.label" />
</button>
</div>
</div>
- <g:hiddenField name='metadataDetailsAbsPath' id='metadataDetailsAbsPath' value='${absPath}'/>
-
- <div id="metadataMessageArea">
- <!-- -->
- </div>
-
- <div id="metadataDialogArea">
- <!-- area for generating dialogs -->
- </div>
-
- <div id="metadataTableDiv">
- <!-- div for metadata table -->
- </div>
+ <div id="metadataTableDiv"><!-- table goes here --></div>
</div>
<script type="text/javascript">
@@ -46,7 +52,7 @@
if (path == null) {
path = baseAbsPath;
}
- reloadAclTable(path);
+
$(function() {
diff --git a/idrop-web/grails-app/views/metadata/metadataDialog.gsp b/idrop-web/grails-app/views/metadata/metadataDialog.gsp
index 17db110..86fa644 100644..100755
--- a/idrop-web/grails-app/views/metadata/metadataDialog.gsp
+++ b/idrop-web/grails-app/views/metadata/metadataDialog.gsp
@@ -1,4 +1,7 @@
-<div id="metadataDialogDiv" class="roundedContainer">
+ <div class="alert alert-info">
+ <g:message code="heading.metadata.details" />
+</div>
+<div id="metadataDialogDiv" >
<div id="metadataDialogMessageArea" style="width:90%;">
<g:renderErrors bean="${cmd}" />
</div>
@@ -15,14 +18,14 @@
<label for="unit"><g:message code="text.unit" />:</label>
<g:textField name="unit" value="${unit}"/>
<br />
- <div id="detailsDialogToolbar" class="fg-toolbar ui-widget-header">
- <div id="detailsDialogMenu" class="fg-buttonset fg-buttonset-multi"
+ <div id="detailsDialogToolbar" class="well">
+ <div id="detailsDialogMenu"
style="float: left, clear : both; width: 90%;">
<button type="button" id="updateMetadataDetailButton"
- class="ui-state-default ui-corner-all" value="addMetadata"
+ value="addMetadata"
onclick="submitMetadataDialog()")><g:message code="default.button.update.label" /></button>
<button type="button" id="cancelAddMetadataButton"
- class="ui-state-default ui-corner-all" value="cancelAdd"
+ value="cancelAdd"
onclick="closeMetadataDialog()")><g:message code="text.cancel" /></button>
</div>
</div>
diff --git a/idrop-web/grails-app/views/metadata/metadataTable.gsp b/idrop-web/grails-app/views/metadata/metadataTable.gsp
index 47df3c5..47df3c5 100644..100755
--- a/idrop-web/grails-app/views/metadata/metadataTable.gsp
+++ b/idrop-web/grails-app/views/metadata/metadataTable.gsp
diff --git a/idrop-web/grails-app/views/profile/_profileTabContent.gsp b/idrop-web/grails-app/views/profile/_profileTabContent.gsp
deleted file mode 100644
index 32d6fab..0000000
--- a/idrop-web/grails-app/views/profile/_profileTabContent.gsp
+++ /dev/null
@@ -1,19 +0,0 @@
-<div id="profileTabContent" class="clearfix" style="display:block;width:100%;height:98%;">
- <h1><g:message code="text.profile.header"/></h1>
- <div id="profileToolbar" style="display:block;">
- <g:render template="/profile/profileToolbar" />
- </div> <!-- profileToolbar -->
- <div id="profileDialogArea"><!-- div for optional profile dialogs -->
- </div>
- <div id="profileDataArea" style="clear:both;">
- <!-- area for profile data -->
- </div>
-</div>
-<script>
-
-$(function() {
- loadProfileData();
-});
-
-
-</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/profile/_profileToolbar.gsp b/idrop-web/grails-app/views/profile/_profileToolbar.gsp
index 154ae95..154ae95 100644..100755
--- a/idrop-web/grails-app/views/profile/_profileToolbar.gsp
+++ b/idrop-web/grails-app/views/profile/_profileToolbar.gsp
diff --git a/idrop-web/grails-app/views/profile/changePasswordDialog.gsp b/idrop-web/grails-app/views/profile/changePasswordDialog.gsp
deleted file mode 100644
index 29564c3..0000000
--- a/idrop-web/grails-app/views/profile/changePasswordDialog.gsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<div id="changePasswordDialog" class="roundedContainer">
- <h1><g:message code="text.change.password.header" /></h1>
- <g:form name="changePasswordForm" id="changePasswordForm">
-
- <g:if test="${flash.error}">
- <script>
- $(function() { setErrorMessage("${flash.error}"); });
- </script>
- </g:if>
-
- <g:hasErrors bean="${password}">
- <div class="errors">
- <ul>
- <g:eachError var="err" bean="${password}">
- <li><g:message error="${err}" /></li>
- </g:eachError>
- </ul>
- </div>
- </g:hasErrors>
- <div id="container" style="height:100%;width:100%;">
- <div>
- <div style="width:15%;"><label><g:message code="text.password"/></label></div>
- <div><g:passwordField name="password" value="${password.password}" /></div>
- </div>
- <div>
- <div style="width:15%;"><label><g:message code="text.confirm.password"/></label></div>
- <div><g:passwordField name="confirmPassword" value="${password.confirmPassword}" /></div>
- </div>
- <div>
- <div></div>
- <div><button type="button" class="ui-state-default ui-corner-all" id="changePassword" value="changePassword" onclick="submitChangePassword()"><g:message code="text.update"/></button>
- <button type="button" class="ui-state-default ui-corner-all" id="cancelChangePassword" value="cancelChangePassword" onclick="closePasswordDialog()"><g:message code="text.cancel"/></button>
- </div>
- </div>
- </div>
- </g:form>
-</div>
diff --git a/idrop-web/grails-app/views/profile/index.gsp b/idrop-web/grails-app/views/profile/index.gsp
new file mode 100755
index 0000000..7892991
--- /dev/null
+++ b/idrop-web/grails-app/views/profile/index.gsp
@@ -0,0 +1,185 @@
+<head>
+<meta name="layout" content="mainNoSidebar" />
+<g:javascript library="mydrop/profile" />
+</head>
+
+<g:if test="${flash.error}">
+ <script>
+ $(function() { setMessage("${flash.error}"); });
+ </script>
+</g:if>
+
+<g:if test="${flash.message}">
+ <script>
+ $(function() { setMessage("${flash.message}");
+ });
+ </script>
+</g:if>
+
+<div id="profileFormDiv">
+
+
+ <g:hasErrors bean="${userProfile}">
+ <div class="alert">
+ <ul>
+ <g:eachError var="err" bean="${userProfile}">
+ <li><g:message error="${err}" /></li>
+ </g:eachError>
+ </ul>
+ </div>
+ </g:hasErrors>
+
+
+
+ <div class="row-fluid">
+ <div class="span12">
+ <g:form name="userProfileForm" class="form-horizontal" controller="profile"
+ action="updateProfile">
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.user" /></label>
+ <div class="controls">
+ ${userProfile.userName}
+ <g:hiddenField name="userName" value="${userProfile.userName}"/>
+ </div>
+ </div>
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.nickname" /></label>
+ <div class="controls">
+ <g:textField id="nickName" name="nickName"
+ value="${userProfile.nickName}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.title" /></label>
+ <div class="controls">
+ <g:textField id="title" name="title" value="${userProfile.title}" />
+ </div>
+ </div>
+
+
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.url" /></label>
+ <div class="controls">
+ <g:textField id="labeledURL" name="labeledURL" value="${userProfile.labeledURL}" />
+ </div>
+ </div>
+
+
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.description" /></label>
+ <div class="controls">
+ <g:textField id="description" name="description"
+ value="${userProfile.description}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.first.name" /></label>
+ <div class="controls">
+ <g:textField id="givenName" name="givenName"
+ value="${userProfile.givenName}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.last.name" /></label>
+ <div class="controls">
+ <g:textField id="lastName" name="lastName"
+ value="${userProfile.lastName}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.address" /></label>
+ <div class="controls">
+ <g:textField id="postalAddress" name="postalAddress"
+ value="${userProfile.postalAddress}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.post.office.box" /></label>
+ <div class="controls">
+ <g:textField id="postOfficeBox" name="postOfficeBox"
+ value="${userProfile.postOfficeBox}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.city" /></label>
+ <div class="controls">
+ <g:textField id="city" name="city" value="${userProfile.city}" />
+ </div>
+ </div>
+
+
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.state" /></label>
+ <div class="controls">
+ <g:textField id="state" name="state" value="${userProfile.state}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.postal.code" /></label>
+ <div class="controls">
+ <g:textField id="postalCode" name="postalCode"
+ value="${userProfile.postalCode}" />
+ </div>
+ </div>
+
+ <div class="control-group">
+ <label class="control-label"><g:message
+ code="text.telephone.number" /></label>
+ <div class="controls">
+ <g:textField id="telephoneNumber" name="telephoneNumber"
+ value="${userProfile.telephoneNumber}" />
+ </div>
+ </div>
+
+
+
+ <div class="control-group">
+ <label class="control-label"><g:message code="text.email" /></label>
+ <div class="controls">
+ <g:textField id="email" name="email" value="${userProfile.email}" />
+ </div>
+ </div>
+
+
+
+ <div class="control-group">
+ <div class="controls">
+ <button type="button" id="updateProfile" value="updateProfile"
+ onclick="updateUserProfile()">
+ <g:message code="text.update" />
+ </button>
+ <button type="button" id="reloadProfile" value="reloadProfile"
+ onclick="loadProfileData()">
+ <g:message code="text.cancel" />
+ </button>
+ </div>
+ </div>
+ </div>
+ </g:form>
+ </div>
+</div>
+</dov>
+<script>
+$(document).ready(function() {
+
+ $.ajaxSetup({
+ cache : false
+ });
+ $("#topbarPreferences").addClass("active");
+ quickViewShowStarredFiles();
+
+ });
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/profile/noProfileData.gsp b/idrop-web/grails-app/views/profile/noProfileData.gsp
index c525713..c525713 100644..100755
--- a/idrop-web/grails-app/views/profile/noProfileData.gsp
+++ b/idrop-web/grails-app/views/profile/noProfileData.gsp
diff --git a/idrop-web/grails-app/views/profile/profileData.gsp b/idrop-web/grails-app/views/profile/profileData.gsp
deleted file mode 100644
index 77e957b..0000000
--- a/idrop-web/grails-app/views/profile/profileData.gsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<div id="container" style="height:100%;width:100%;">
- <div>
- <div style="width:15%;"><label><g:message code="text.user"/></label></div>
- <div>${userProfile.userName}</div>
- </div>
- <div>
- <div style="width:15%;"><label><g:message code="text.nickname"/></label></div>
- <div><g:textField id="nickName" name="nickName"
- value="${userProfile.userProfilePublicFields.nickName}" />
- </div>
- </div>
- <div>
- <div style="width:15%;"><label><g:message code="text.personal.blurb"/></label></div>
- <div><g:textArea id="description" name="description" rows="3" cols="40"
- value="${userProfile.userProfilePublicFields.description}" /></div>
- </div>
- <div>
- <div style="width:15%;"><label><g:message code="text.email"/></label></div>
- <div><g:textField id="email" name="email"
- value="${userProfile.userProfileProtectedFields.mail}" /></div>
- </div>
- <div>
- <div></div>
- <div><button type="button" class="ui-state-default ui-corner-all" id="updateProfile" value="updateProfile" onclick="updateProfile()"><g:message code="text.update"/></button>
- <button type="button" class="ui-state-default ui-corner-all" id="reloadProfile" value="reloadProfile" onclick="loadProfileData()"><g:message code="text.cancel"/></button>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/search/searchResult.gsp b/idrop-web/grails-app/views/search/searchResult.gsp
index a5de405..7c69443 100644..100755
--- a/idrop-web/grails-app/views/search/searchResult.gsp
+++ b/idrop-web/grails-app/views/search/searchResult.gsp
@@ -1,25 +1,55 @@
-<table cellspacing="0" cellpadding="0" border="0" id="searchResultTable"
- class="display" style="width: 90%;height:90%;overflow:auto;">
- <thead>
- <tr>
- <th></th>
- <th>Name</th>
- <th>Absolute path <i>Click to see in tree</i></th>
- <th>Type</th>
- <th>Modified date</th>
- <th>Length</th>
- </tr>
+<table class="table table-striped table-hover" cellspacing="0"
+ cellpadding="0" border="0">
+ <tr>
+ <th></th>
+ <th>
+
+ <div class="btn-group">
+ <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">Action<span
+ class="caret"></span></a>
+ <ul class="dropdown-menu">
+ <li id="menuAddToCartDetails"><a href="#addAllToCartDetails"
+ onclick="addSelectedToCart()"><g:message
+ code="text.add.all.to.cart" /></a></li>
+ <li id="menuDeleteDetails"><a href="#deleteAllDetails"
+ onclick="deleteSelected()"><g:message code="text.delete.all" /></a></li>
+ <!-- dropdown menu links -->
+ </ul>
+ </div>
+
+ </th>
+ <th><g:message code="text.name" /></th>
+ <th><g:message code="text.type" /></th>
+ <th><g:message code="text.modified" /></th>
+ <th><g:message code="text.length" /></th>
+ </tr>
</thead>
<tbody>
<g:each in="${results}" var="entry">
+
<tr id="${entry.formattedAbsolutePath}">
- <td><div class="ui-icon-circle-plus search-detail-icon ui-icon " /></td>
- <td><g:if test="${entry.objectType.toString() == 'COLLECTION'}">${entry.nodeLabelDisplayValue}</g:if><g:else><g:link url="${'file/download' + entry.formattedAbsolutePath}">${entry.nodeLabelDisplayValue}</g:link>
- </g:else></td>
- <td><a href="#" id="${entry.formattedAbsolutePath}" onclick="clickOnPathInSearchResult(this.id)">${entry.formattedAbsolutePath}</a></td>
- <td>${entry.objectType}</td>
- <td>${entry.modifiedAt}</td>
- <td>${entry.dataSize}</td>
+
+ <td><span
+ class="ui-icon-circle-plus search-detail-icon ui-icon"></span></td>
+ <td><g:checkBox name="selectDetail"
+ value="${entry.formattedAbsolutePath}" checked="false" /> <span
+ class="setPaddingLeftAndRight"><g:link target="_blank"
+ controller="browse" action="index"
+ params="[mode: 'path', absPath: entry.formattedAbsolutePath]">
+ <i class="icon-folder-open "></i>
+ </g:link></span></td>
+ <td>
+ ${entry.nodeLabelDisplayValue}
+ </td>
+ <td>
+ ${entry.objectType}
+ </td>
+ <td>
+ ${entry.modifiedAt}
+ </td>
+ <td>
+ ${entry.displayDataSize}
+ </td>
</tr>
</g:each>
@@ -38,20 +68,12 @@
</table>
<script type="text/javascript">
-function clickOnPathInSearchResult(data) {
- if (data == null) {
- throw new Exception("no absolute path provided");
- }
- // show main browse tab
- $(tabs).tabs('select', 0); // switch to home tab
- splitPathAndPerformOperationAtGivenTreePath(data, null,
- null, function(path, dataTree, currentNode){
-
- $.jstree._reference(dataTree).open_node(currentNode);
- $.jstree._reference(dataTree).select_node(currentNode, true);
- // updateBrowseDetailsForPathBasedOnCurrentModel(data);
+ function clickOnPathInSearchResult(data) {
- });
-}
+ }
+ function infoHere(path) {
+ setDefaultView("info");
+ selectTreePathFromIrodsPath(path);
+ }
</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/sharing/_sharingPanel.gsp b/idrop-web/grails-app/views/sharing/_sharingPanel.gsp
new file mode 100644
index 0000000..6a3a4e5
--- /dev/null
+++ b/idrop-web/grails-app/views/sharing/_sharingPanel.gsp
@@ -0,0 +1,41 @@
+<div id="aclSharingPanel">
+ <div id="aclSharingPanelTopSection">
+ <div id="sharingToolbar" class="well btn-toolbar">
+ <g:if
+ test="${grailsApplication.config.idrop.config.use.sharing==true && irodsSharedFileOrCollection != null}">
+ <div>
+
+ <h4>This file is marked as a share, and appears with the name:
+ <strong>${irodsSharedFileOrCollection.shareName}</strong> for users with access rights</h4>
+
+ </div>
+ </g:if>
+ <div id="sharingMenu">
+
+ <div class="btn-group">
+ <g:if
+ test="${grailsApplication.config.idrop.config.use.sharing==true && irodsSharedFileOrCollection != null}">
+ <button onclick="editShareAtPath()">
+ <g:message code="text.edit.share" />
+ </button>
+ <button onclick="removeShareAtPath()">
+ <g:message code="text.remove.share" />
+ </button>
+ </g:if>
+ <g:if
+ test="${grailsApplication.config.idrop.config.use.sharing==true && irodsSharedFileOrCollection == null}">
+ <h4>This file is not currently marked as a share. Marking as a share will allow users with access rights to see this collection as shared with them</h4>
+
+ <button onclick="addShareAtPath()">
+ <g:message code="text.add.share" />
+ </button>
+ </g:if>
+ </div>
+
+ </div>
+ </div>
+
+
+
+ </div>
+</div>
diff --git a/idrop-web/grails-app/views/sharing/aclDetails.gsp b/idrop-web/grails-app/views/sharing/aclDetails.gsp
index 752c9a4..1c082eb 100644..100755
--- a/idrop-web/grails-app/views/sharing/aclDetails.gsp
+++ b/idrop-web/grails-app/views/sharing/aclDetails.gsp
@@ -1,23 +1,35 @@
-<h2><g:message code="heading.sharing" /></h2>
+<h4><g:message code="text.permissions" /></h4>
+
<div id="aclDialogArea"><!-- area for generating dialogs --></div>
<div id="aclDetailsArea">
+ <div class="alert alert-info">
+ <g:message code="heading.permissions" />
+ </div>
+ <div id="sharingPanelContainingDiv">
+ <g:render template="/sharing/sharingPanel" />
+ </div>
<div id="detailsTopSection" >
- <div id="detailsToolbar" class="fg-toolbar ui-widget-header">
- <div id="detailsMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left, clear: both;">
- <button type="button" id="addAclButton"
- class="ui-state-default ui-corner-all" value="addAcl"
- onclick="prepareAclDialog()")><g:message code="default.button.create.label" /></button>
- <button type="button" id="deleteAclButton"
- class="ui-state-default ui-corner-all" value="deleteAcl"
- onclick="deleteAcl()")><g:message code="default.button.delete.label" /></button>
- <button type="button" id="reloadAclButton"
- class="ui-state-default ui-corner-all" value="reloadAcl"
- onclick="reloadAclTable(selectedPath)")><g:message code="default.button.reload.label" /></button>
+ <div id="detailsToolbar" class="well btn-toolbar">
+ <div id="detailsMenu">
+ <div class="btn-group">
+ <button type="button" id="addAclButton"
+ value="addAcl"
+ onclick="prepareAclDialog()")><g:message code="default.button.create.label" /></button>
+ <button type="button" id="deleteAclButton"
+ value="deleteAcl"
+ onclick="deleteAcl()")><g:message code="default.button.delete.label" /></button>
+ <button type="button" id="reloadAclButton"
+ value="reloadAcl"
+ onclick="reloadAclTable(selectedPath)")><g:message code="default.button.reload.label" /></button>
+ </div>
+ <div class="btn-group">
+ <button onclick="makePublicLinkAtPath()"><g:message code="text.create.public.link" /></button>
+ </div>
</div>
</div>
</div>
+
<g:hiddenField name='aclDetailsAbsPath' id='aclDetailsAbsPath' value='${absPath}'/>
<div id="aclTableDiv"><!-- acl user list --></div>
</div>
@@ -34,4 +46,6 @@
reloadAclTable(path);
});
+
+
</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/sharing/aclDialog.gsp b/idrop-web/grails-app/views/sharing/aclDialog.gsp
index 2592d39..3e19529 100644..100755
--- a/idrop-web/grails-app/views/sharing/aclDialog.gsp
+++ b/idrop-web/grails-app/views/sharing/aclDialog.gsp
@@ -1,8 +1,10 @@
+<div class="alert alert-info">
+ <g:message code="heading.enter.user.or.search" />
+</div>
<div id="aclDialogDiv">
-<div class="roundedContainer" style="margin:20px;">
- <h2 ><g:message code="heading.enter.user.or.search" /></h2>
- </div>
+
+
<form id="userDialogForm" name="userFormForm">
<fieldset id="verticalForm">
@@ -16,7 +18,7 @@
<g:textField id="userName" name="userName" value="${userName}" />
<br/>
<button type="button" id="lookUpUserNames"
- class="ui-state-default ui-corner-all" value="lookUpUserNames"
+ value="lookUpUserNames"
onclick="lookUpUserNameFromACLDialogClicked()")><g:message code="text.search" /></button>
<br/>
@@ -26,14 +28,14 @@
<!-- div for sharing pick list -->
</div>
<br/>
- <div id="detailsDialogToolbar" class="fg-toolbar ui-widget-header">
- <div id="detailsDialogMenu" class="fg-buttonset fg-buttonset-multi"
+ <div id="detailsDialogToolbar" class="well">
+ <div id="detailsDialogMenu"
style="float: left, clear : both; width: 90%;">
<button type="button" id="updateAclDetailButton"
- class="ui-state-default ui-corner-all" value="addAcl"
- onclick="submitAclDialog()")><g:message code="default.button.save.label" /></button>
+ value="addAcl"
+ onclick="submitAclDialog()")><g:message code="text.update" /></button>
<button type="button" id="cancelAddAclButton"
- class="ui-state-default ui-corner-all" value="cancelAdd"
+ value="cancelAdd"
onclick="closeAclAddDialog()")><g:message code="default.button.cancel.label" /></button>
</div>
</div>
diff --git a/idrop-web/grails-app/views/sharing/aclTable.gsp b/idrop-web/grails-app/views/sharing/aclTable.gsp
index dd2d99b..dd2d99b 100644..100755
--- a/idrop-web/grails-app/views/sharing/aclTable.gsp
+++ b/idrop-web/grails-app/views/sharing/aclTable.gsp
diff --git a/idrop-web/grails-app/views/sharing/addShareDialog.gsp b/idrop-web/grails-app/views/sharing/addShareDialog.gsp
new file mode 100755
index 0000000..91f5396
--- /dev/null
+++ b/idrop-web/grails-app/views/sharing/addShareDialog.gsp
@@ -0,0 +1,40 @@
+<div class="alert alert-info">
+ <g:message code="heading.add.share" />
+</div>
+<div id="addShareDialogDiv">
+
+ <form class="form-horizontal" id="addShareForm" name="addShareForm"
+ action="">
+ <g:hiddenField name="formAction" id="formAction" value="${formAction}"/>
+ <g:if test="${flash.error}">
+ <script type="text/javascript">
+ $(function() { setErrorMessage("${flash.error}"); });
+ </script>
+ </g:if>
+
+ <g:if test="${flash.message}">
+ <script type="text/javascript">
+ $(function() { setMessage("${flash.message}");});
+ </script>
+ </g:if>
+
+ <div class="control-group">
+ <label class="control-label" for="shareName"><g:message
+ code="text.share.name" /></label>
+ <div class="controls">
+ <input type="text" id="shareName" value="${shareName}">
+ </div>
+ </div>
+ <div class="control-group">
+ <div class="controls">
+ <button type="button" class="btn" id="btnUpdateNamedShare" onclick="updateNamedShare()">
+ <g:message code="text.update" />
+ </button>
+ <button type="button" class="btn" onclick="closeNamedShareDialog()">
+ <g:message code="text.cancel" />
+ </button>
+ </div>
+ </div>
+ </form>
+
+</div> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/sharing/sharingPanelWrapper.gsp b/idrop-web/grails-app/views/sharing/sharingPanelWrapper.gsp
new file mode 100644
index 0000000..ed3267e
--- /dev/null
+++ b/idrop-web/grails-app/views/sharing/sharingPanelWrapper.gsp
@@ -0,0 +1,3 @@
+<div>
+<g:render template="/sharing/sharingPanel" />
+</div> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/sharing/userPanel.gsp b/idrop-web/grails-app/views/sharing/userPanel.gsp
index c5e714a..c5e714a 100644..100755
--- a/idrop-web/grails-app/views/sharing/userPanel.gsp
+++ b/idrop-web/grails-app/views/sharing/userPanel.gsp
diff --git a/idrop-web/grails-app/views/browse/cartDetails.gsp b/idrop-web/grails-app/views/shoppingCart/cartDetails.gsp
index a45a4bb..a45a4bb 100644..100755
--- a/idrop-web/grails-app/views/browse/cartDetails.gsp
+++ b/idrop-web/grails-app/views/shoppingCart/cartDetails.gsp
diff --git a/idrop-web/grails-app/views/shoppingCart/index.gsp b/idrop-web/grails-app/views/shoppingCart/index.gsp
new file mode 100755
index 0000000..642fdbc
--- /dev/null
+++ b/idrop-web/grails-app/views/shoppingCart/index.gsp
@@ -0,0 +1,45 @@
+<head>
+ <meta name="layout" content="mainNoSidebar" />
+ <g:javascript library="mydrop/home" />
+ <g:javascript library="mydrop/shoppingCart" />
+</head>
+<div id="cartTopSection">
+ <div id="cartToggleDiv">
+ <div id="cartToggleDiv" class="row">
+ <div class="span12">
+ <div id="cartToolbar" class="btn-toolbar" >
+
+ <button type="button" id="clearCartButton"
+ onclick="clearCart()")><g:message code="default.button.clear.label" /></button>
+ <button type="button" id="deleteFromCartButton"
+ value="deleteFromCart"
+ onclick="deleteFromCart()")><g:message code="default.button.delete.label" /></button>
+ <button type="button" id="reloadCartButton"
+ value="reloadCart"
+ onclick="refreshCartFiles()")><g:message code="default.button.reload.label" /></button>
+ <button type="button" id="checkout"
+ value="checkout"
+ onclick="checkOut()")><g:message code="text.check.out" /></button>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="row">
+ <div id="cartTableDiv" class="span12">
+ <!-- cart table -->
+ </div>
+ </div>
+</div>
+
+<div id="cartAppletDiv">
+<!-- empty div --></div>
+</div>
+<script type="text/javascript">
+
+ $(function() {
+ $("#topbarShoppingCart").addClass("active");
+ refreshCartFiles();
+ });
+
+ </script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/tags/index.gsp b/idrop-web/grails-app/views/tags/index.gsp
new file mode 100755
index 0000000..ec43205
--- /dev/null
+++ b/idrop-web/grails-app/views/tags/index.gsp
@@ -0,0 +1,64 @@
+<head>
+<meta name="layout" content="mainNoSidebar" />
+<g:javascript library="mydrop/tag" />
+</head>
+<button type="button" id="refreshTags" name="refreshTags"
+ onclick="refreshTagCloudButtonClicked()">
+ <g:message code="text.refresh" />
+</button>
+
+<ul class="nav nav-tabs" id="searchTabs">
+ <li><a href="#tagCloudTab">Tags</a></li>
+ <li><a href="#resultsTab">Search Results</a></li>
+</ul>
+
+<div class="tab-content">
+ <div class="tab-pane active" id="tagCloudTab">
+ <div style="padding: 10px;overflow:auto;">
+ <div id="tagCloudDiv" style="height: 700px;width:auto;">
+ <!-- tag cloud div is ajax loaded -->
+ </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="resultsTab">
+ <div id="resultsTabInner">
+ Search Results here
+ </div>
+
+ </div>
+
+</div>
+
+<script>
+ $(document).ready(function() {
+
+ $.ajaxSetup({
+ cache : false
+ });
+ $("#topbarSearch").addClass("active");
+
+ $('#searchTabs a').click(function (e) {
+
+ e.preventDefault();
+ $(this).tab('show');
+ var state = {};
+ var tabId = this.hash
+ state["tab"] = tabId;
+ $.bbq.pushState(state);
+ });
+
+ $(window).bind( 'hashchange', function(e) {
+ processTagSearchStateChange( $.bbq.getState());
+ });
+
+ refreshTagCloud();
+
+ $(window).trigger( 'hashchange' );
+
+ });
+
+ function refreshTagCloudButtonClicked() {
+
+ refreshTagCloud();
+ }
+</script> \ No newline at end of file
diff --git a/idrop-web/grails-app/views/tags/tagCloud.gsp b/idrop-web/grails-app/views/tags/tagCloud.gsp
index a6f82f0..a6f82f0 100644..100755
--- a/idrop-web/grails-app/views/tags/tagCloud.gsp
+++ b/idrop-web/grails-app/views/tags/tagCloud.gsp
diff --git a/idrop-web/grails-app/views/ticket/ticketDetails.gsp b/idrop-web/grails-app/views/ticket/ticketDetails.gsp
index 50d82c5..2d3384c 100644..100755
--- a/idrop-web/grails-app/views/ticket/ticketDetails.gsp
+++ b/idrop-web/grails-app/views/ticket/ticketDetails.gsp
@@ -1,29 +1,32 @@
-<h2><g:message code="text.tickets" /></h2>
+<h4><g:message code="text.tickets" /></h4>
+ <div id="ticketDialogArea"><!-- area for generating dialogs --></div>
+ <div id="ticketMessageArea"><!-- area for messages --></div>
+
<g:javascript library="jquery.gchart.min" />
-<div id="ticketDialogArea"><!-- area for generating dialogs --></div>
-<div id="ticketMessageArea"><!-- area for messages --></div>
<div id="ticketDetailsTableArea">
- <div class="fg-toolbar ui-widget-header" id="ticketDetailsTopSection" >
- <div id="detailsMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left, clear : both;">
+ <div class="alert alert-info">
+ <g:message code="heading.tickets" />
+ </div>
+ <div class="well" id="ticketDetailsTopSection" >
+ <div id="detailsMenu"">
<button type="button" id="addTicketButton"
- class="ui-state-default ui-corner-all" value="addTicket"
+ value="addTicket"
onclick="prepareTicketDetailsDialog()")>
<g:message code="default.button.create.label" />
</button>
<button type="button" id="editTicketButton"
- class="ui-state-default ui-corner-all" value="editTicket"
+ value="editTicket"
onclick="editTicketDialog()")>
<g:message code="default.button.edit.label" />
</button>
<button type="button" id="deleteTicketButton"
- class="ui-state-default ui-corner-all" value="deleteTicket"
+ value="deleteTicket"
onclick="deleteTicket()")>
<g:message code="default.button.delete.label" />
</button>
<button type="button" id="reloadTickets"
- class="ui-state-default ui-corner-all" value="reloadTickets"
+ value="reloadTickets"
onclick="reloadTickets()")>
<g:message code="default.button.reload.label" />
</button>
diff --git a/idrop-web/grails-app/views/ticket/ticketPulldown.gsp b/idrop-web/grails-app/views/ticket/ticketPulldown.gsp
index 6831e6c..f931b2a 100644..100755
--- a/idrop-web/grails-app/views/ticket/ticketPulldown.gsp
+++ b/idrop-web/grails-app/views/ticket/ticketPulldown.gsp
@@ -1,4 +1,4 @@
-<div id="ticketPulldownDiv" style="overflow:visible;width:auto;">
+<div id="ticketPulldownDiv" class="alert alert-info">
<g:if test="${flash.error}">
<script>
$(function() { setErrorMessage("${flash.error}"); });
@@ -42,7 +42,7 @@
<div>
<div style="width:15%;"><label><g:message code="text.ticket.string" />:</label></div>
<div><g:textField id="ticketString" name="ticketString" width="20em"
- value="${ticket.ticketString}" /></div>
+ value="${ticket.ticketString}" placeholder="Enter a ticket key or let iRODS generate one"/></div>
</div>
<div>
<div style="width:15%;"><label><g:message code="text.ticket.type" />:</label></div>
@@ -103,13 +103,13 @@
<div><!-- pie chart row -->
- <div style="width:33%;height:auto;" class="roundedContainer">
+ <div style="width:33%;height:auto;" class="well">
<!-- pie chart cell usage -->
<div id="ticketUsesChart" style="height:auto;width:auto;"></div>
<label><g:message code="text.ticket.uses.count" /></label><br/>${ticket.usesCount}<br/>
<label><g:message code="text.ticket.uses.limit" /></label><br/><g:textField id="usesLimit" name="usesLimit" value="${ticket.usesLimit}" />
</div>
- <div style="width:33%;height:auto;" class="roundedContainer">
+ <div style="width:33%;height:auto;" class="well">
<!-- pie chart cell write files -->
<div id="ticketWriteFilesChart" style="height:auto;width:auto%;" ></div>
<label><g:message code="text.ticket.file.count" /></label><br/>${ticket.writeFileCount}<br/>
@@ -117,7 +117,7 @@
<g:textField id="writeFileLimit" name="writeFileLimit" value="${ticket.writeFileLimit}" />
</div>
- <div style="width:33%;height:auto;" class="roundedContainer">
+ <div style="width:33%;height:auto;" class="well">
<!-- pie chart cell write bytes -->
<div id="ticketWriteBytesChart" style="height:auto;width:auto;"></div>
<label><g:message code="text.ticket.byte.count" /></label><br/>${ticket.writeByteCount}<br/>
@@ -129,26 +129,25 @@
</div> <!-- pie chart table end -->
<g:if test="${ticket.isDialog}">
- <div id="detailsDialogMenu" class="fg-buttonset fg-buttonset-multi"
- style="float: left, clear : both; width: 90%;">
+ <div id="detailsDialogMenu"
+ class="pull-right">
<button type="button" id="updateTicketDetailButton"
- class="ui-state-default ui-corner-all" value="update Ticket"
- onclick="submitTicketDialog()")><g:message code="default.button.save.label" /></button>
+ value="update Ticket"
+ onclick="submitTicketDialog()")><g:message code="text.update" /></button>
<button type="button" id="cancelAddTicketButton"
- class="ui-state-default ui-corner-all" value="cancelAdd"
+ value="cancelAdd"
onclick="closeTicketDialog()")><g:message code="default.button.cancel.label" /></button>
</div>
-
</g:if>
<g:else>
- <div id="detailsDialogMenu" class="fg-buttonset fg-buttonset-multi"
- style="width: auto;">
+ <div id="detailsDialogMenu" class="well pull-right"
+ >
<button type="button" id="updateTicketPulldownButton"
- class="ui-state-default ui-corner-all"
- onclick="updateTicketFromPulldown()")><g:message code="default.button.save.label" /></button>
+
+ onclick="updateTicketFromPulldown()")><g:message code="text.update" /></button>
<button type="button" id="cancelTicketPulldownButton"
- class="ui-state-default ui-corner-all"
+
onclick="cancelTicketFromPulldown()")><g:message code="default.button.cancel.label" /></button>
</div>
diff --git a/idrop-web/grails-app/views/ticket/ticketTable.gsp b/idrop-web/grails-app/views/ticket/ticketTable.gsp
index 0d0f34c..0d0f34c 100644..100755
--- a/idrop-web/grails-app/views/ticket/ticketTable.gsp
+++ b/idrop-web/grails-app/views/ticket/ticketTable.gsp
diff --git a/idrop-web/grails-app/views/ticketAccess/ticketAccessCollection.gsp b/idrop-web/grails-app/views/ticketAccess/ticketAccessCollection.gsp
index 8c893d5..dd63788 100644..100755
--- a/idrop-web/grails-app/views/ticketAccess/ticketAccessCollection.gsp
+++ b/idrop-web/grails-app/views/ticketAccess/ticketAccessCollection.gsp
@@ -26,7 +26,6 @@
<div>
<div style="width:20%;"><label><g:message code="text.actions" />:</label></div>
<div><button type="button" id="uploadToCollectionButton"
- class="ui-state-default ui-corner-all"
onclick="uploadToCollectionButton()")><g:message code="text.upload" /></button></div>
</div>
</div>
diff --git a/idrop-web/grails-app/views/ticketAccess/ticketAccessDataObject.gsp b/idrop-web/grails-app/views/ticketAccess/ticketAccessDataObject.gsp
index 7383840..eeb42ce 100644..100755
--- a/idrop-web/grails-app/views/ticketAccess/ticketAccessDataObject.gsp
+++ b/idrop-web/grails-app/views/ticketAccess/ticketAccessDataObject.gsp
@@ -5,7 +5,7 @@
style="height: 820px;">
<div class="roundedContainer">
<h1>Landing page for Data Object</h1>
- <h2>This ticket allows you to download a file from iRODS that has been shared with you. Click the button below to download the file to you local file system</h2>
+ <h2>This ticket allows you to download a file from iRODS that has been shared with you. Click the button below to download the file to your local file system</h2>
</div>
<div id="container" style="height:auto;width:100%;">
<g:hiddenField name='ticketString' id='ticketString' value='${ticketString}'/>
@@ -25,7 +25,6 @@
<div>
<div style="width:20%;"><label><g:message code="text.actions" />:</label></div>
<div><button type="button" id="downloadDataObjectButton"
- class="ui-state-default ui-corner-all"
onclick="downloadDataObjectButton()")><g:message code="text.download" /></button></div>
</div>
</div>
diff --git a/idrop-web/grails-app/views/ticketAccess/uploadToTicketCollection.gsp b/idrop-web/grails-app/views/ticketAccess/uploadToTicketCollection.gsp
index 10d6576..10d6576 100644..100755
--- a/idrop-web/grails-app/views/ticketAccess/uploadToTicketCollection.gsp
+++ b/idrop-web/grails-app/views/ticketAccess/uploadToTicketCollection.gsp
diff --git a/idrop-web/grails-app/views/user/index.gsp b/idrop-web/grails-app/views/user/index.gsp
index e2f14b4..5517ac8 100644..100755
--- a/idrop-web/grails-app/views/user/index.gsp
+++ b/idrop-web/grails-app/views/user/index.gsp
@@ -1,6 +1,6 @@
<div id="userTopSection" class="box" style="height:8%;">
<div id="userPopupDialogArea"><!-- empty div for user popup dialogs --></div>
- <div id="searchMenu" class="fg-buttonset fg-buttonset-multi"
+ <div id="searchMenu"
style="float: left, clear:both; margin: 5px;">
<label for=""><g:message code="heading.user.search" /></label>
@@ -11,7 +11,7 @@
<input id="userSearchTerm" type="text" name="userSearchTerm" />
<button type="button" id="searchUser"
- class="ui-state-default ui-corner-all" value="searchUser"
+ value="searchUser"
onclick="searchUsers()")>
<g:message code="text.search" />
</button>
diff --git a/idrop-web/grails-app/views/user/userInfoDialog.gsp b/idrop-web/grails-app/views/user/userInfoDialog.gsp
index 222d95d..222d95d 100644..100755
--- a/idrop-web/grails-app/views/user/userInfoDialog.gsp
+++ b/idrop-web/grails-app/views/user/userInfoDialog.gsp
diff --git a/idrop-web/grails-app/views/user/userList.gsp b/idrop-web/grails-app/views/user/userList.gsp
index cf10db6..9af90a9 100644..100755
--- a/idrop-web/grails-app/views/user/userList.gsp
+++ b/idrop-web/grails-app/views/user/userList.gsp
@@ -1,5 +1,5 @@
- <table cellspacing="0" cellpadding="0" border="0" id="userListTable">
+ <table class="table table-striped table-hover" cellspacing="0" cellpadding="0" border="0" id="userListTable">
<thead>
<tr>
<th ></th>
@@ -46,6 +46,6 @@
userListTable.fnAdjustColumnSizing();
});
- */
-
+
+*/
</script> \ No newline at end of file
diff --git a/idrop-web/idrop-web-config.groovy b/idrop-web/idrop-web-config2.groovy
index 6f5c456..95d9dc1 100644..100755
--- a/idrop-web/idrop-web-config.groovy
+++ b/idrop-web/idrop-web-config2.groovy
@@ -41,8 +41,8 @@ environments {
idrop.config.idrop.lite.use.applet.dir=false
*/
-idrop.config.idrop.lite.applet.jar="idrop-lite-1.0.1-SNAPSHOT-jar-with-dependencies.jar"
-idrop.config.idrop.lite.codebase="http://iren-web.renci.org/idrop-web/applet"
+idrop.config.idrop.lite.applet.jar="idrop-lite-2.0.0-SNAPSHOT-jar-with-dependencies.jar"
+idrop.config.idrop.lite.codebase="http://iren-web.renci.org/idrop-snapshot"
idrop.config.idrop.lite.use.applet.dir=false
/*
@@ -65,4 +65,7 @@ idrop.config.idrop.jnlp="http://iren-web.renci.org/idrop-snapshot/idrop.jnlp"
idrop.config.use.tickets=true
// do I want to display the profile tab and maintain user profile info
-idrop.config.use.userprofile=false \ No newline at end of file
+idrop.config.use.userprofile=true
+
+// do I support sharing? Requires target server to have specific query support and sharing queries loaded from jargon-user-tagging
+idrop.config.use.sharing=true
diff --git a/idrop-web/idrop-web.list.template b/idrop-web/idrop-web.list.template
new file mode 100644
index 0000000..39a3044
--- /dev/null
+++ b/idrop-web/idrop-web.list.template
@@ -0,0 +1,328 @@
+%product iRODS iDrop Web
+%copyright Any copyright here.
+%vendor Data Intensive Cyberinfrastructure Foundation, Renaissance Computing Institute
+%license COPYING
+%readme README
+%description Web Based Interface for Interacting with the iRODS data grid
+%version 1.0.1 100001
+
+# don't think http is actually needed
+# %requires httpd 2
+
+%if DEB
+%requires tomcat6
+%requires openjdk-6-jre
+%else
+%requires java 6
+%endif
+
+%format all
+
+# =-=-=-=-=-=-=-
+# variables for configuring the install
+# =-=-=-=-=-=-=-
+$OS_IDROP_ACCT=idropweb
+$OS_IDROP_DIR=idrop-web
+$IDROP_HOME_DIR=/var/lib/$OS_IDROP_DIR
+$IDROP_EXTRAS=idrop-web-extras
+
+$TOMCAT_STARTED=false
+
+# these tomcat vars used for tomcat install on rpm systems
+$TOMCAT_EXTRACT_DIR=/var/lib
+$TOMCAT_VER=6
+$TOMCAT_VER_DOT=0.35
+$TOMCAT_FILE=apache-tomcat-${TOMCAT_VER}.${TOMCAT_VER_DOT}
+$TOMCAT_ARC_FILE=${TOMCAT_FILE}.tar.gz
+$TOMCAT_HTTP_HOST=http://apache.mirrors.pair.com/tomcat/tomcat-${TOMCAT_VER}/v${TOMCAT_VER}.${TOMCAT_VER_DOT}/bin/
+$TOMCAT_TMP_LOC=/tmp/tomcat${TOMCAT_VER}.tar.gz
+
+%if DEB
+# these tomcat vars used for tomcat install on debian systems
+# hopefully everything will migrate to use these vars when centos
+# finally catches up with support for tomcat 6
+$OS_TOMCAT_ACCT=tomcat6
+$TOMCAT_HOME_DIR=/var/lib/${OS_TOMCAT_ACCT}
+$DEB=true
+%else
+$TOMCAT_HOME_DIR=${TOMCAT_EXTRACT_DIR}/idrop-tomcat-${TOMCAT_VER}.${TOMCAT_VER_DOT}
+$OS_TOMCAT_ACCT=idroptc6
+$RPM=true
+%endif
+
+# =-=-=-=-=-=-=-
+# preinstall directives
+# =-=-=-=-=-=-=-
+
+# if this is a centos install, use wget to download tomcat 6
+# and install manually # also add a service account for tomcat
+%if RPM
+%preinstall << END_PREINSTALL
+
+#make sure tomcat is not already installed here
+if [ -d "${TOMCAT_HOME_DIR}" ]; then
+ echo "WARNING :: Tomcat Is Already Installed In: ${TOMCAT_HOME_DIR}"
+else
+# install tomcat
+ echo "INFO :: Getting Apache Tomcat version: ${TOMCAT_VER}.${TOMCAT_VER_DOT} ..."
+# download install archive
+ wget -O ${TOMCAT_TMP_LOC} ${TOMCAT_HTTP_HOST}${TOMCAT_ARC_FILE}
+# unpack into /var/lib
+ tar -zxf $TOMCAT_TMP_LOC -C $TOMCAT_EXTRACT_DIR
+ mv /var/lib/${TOMCAT_FILE} ${TOMCAT_HOME_DIR}
+fi
+
+# create a service account for tomcat
+# determine if the service account already exists
+USER=$$( grep $OS_TOMCAT_ACCT /etc/passwd )
+if [ -n "$$USER" ];
+then
+ echo "WARNING :: Service Account $OS_TOMCAT_ACCT Already Exists."
+else
+# create the service account
+ echo "INFO :: Creating Service Account: $OS_TOMCAT_ACCT at ${TOMCAT_HOME_DIR}"
+ /usr/sbin/useradd -c "Tomcat" -d ${TOMCAT_HOME_DIR} -s "/sbin/nologin" $OS_TOMCAT_ACCT
+fi
+ACCT=$OS_TOMCAT_ACCT
+chown -R $$ACCT:$$ACCT ${TOMCAT_HOME_DIR}
+
+# create a service account for idrop-web
+# determine if the service account already exists
+USER=$$( grep $OS_IDROP_ACCT /etc/passwd )
+if [ -n "$$USER" ];
+then
+ echo "WARNING :: Service Account $OS_IDROP_ACCT Already Exists"
+else
+# create the service account
+ echo "INFO :: Creating Service Account: $OS_IDROP_ACCT at ${IDROP_HOME_DIR}"
+ /usr/sbin/useradd -m -d ${IDROP_HOME_DIR} $OS_IDROP_ACCT
+ chmod 755 ${IDROP_HOME_DIR}
+fi
+END_PREINSTALL
+
+%elseif DEB
+%preinstall << END_PREINSTALL
+# create a service account for idrop-web
+# determine if the service account already exists
+USER=$$( grep $OS_IDROP_ACCT /etc/passwd )
+if [ -n "$$USER" ];
+then
+ echo "WARNING :: Service Account $OS_IDROP_ACCT Already Exists"
+else
+# create the service account
+ echo "INFO :: Creating Service Account: $OS_IDROP_ACCT at ${IDROP_HOME_DIR}"
+ /usr/sbin/useradd -m -d ${IDROP_HOME_DIR} $OS_IDROP_ACCT
+ chmod 755 ${IDROP_HOME_DIR}
+fi
+END_PREINSTALL
+
+%endif
+
+# =-=-=-=-=-=-=-
+# post install
+# =-=-=-=-=-=-=-
+
+%if RPM
+%postinstall << END_POSTINSTALL
+
+# start tomcat
+echo "INFO :: Starting Tomcat ..."
+su -p -s /bin/sh $OS_TOMCAT_ACCT ${TOMCAT_HOME_DIR}/bin/startup.sh
+
+# wait until the tomcat conf/Catalina/localhost folder is created
+# or timeout after about 10 seconds
+TRIES=0
+while [ "$$TRIES" -lt 100 -a ! -e ${TOMCAT_HOME_DIR}/conf/Catalina/localhost ]; do
+ TRIES=$$((TRIES + 1))
+ sleep .1
+done
+
+# create config file (if it does not exist) for idrop-web in order to allow symbolic linking
+echo "INFO :: Configuring iDrop Web for Tomcat ..."
+if [ -f ${TOMCAT_HOME_DIR}/conf/Catalina/localhost/${OS_IDROP_DIR}.xml ];
+then
+ echo "WARNING :: ${TOMCAT_HOME_DIR}/conf/Catalina/localhost/${OS_IDROP_DIR}.xml Already Exists"
+else
+ echo "<?xml version='1.0' encoding='utf-8'?>
+<Context path=\"/idrop-web\" allowLinking=\"true\">
+
+ <WatchedResource>WEB-INF/web.xml</WatchedResource>
+
+</Context>" > ${TOMCAT_HOME_DIR}/conf/Catalina/localhost/${OS_IDROP_DIR}.xml
+fi
+
+# create symbolic link to idrop-web
+if [ -f ${TOMCAT_HOME_DIR}/webapps/${OS_IDROP_DIR} ];
+then
+ echo "WARNING :: ${TOMCAT_HOME_DIR}/webapps/${OS_IDROP_DIR} Already Exists"
+else
+ ln -s ${IDROP_HOME_DIR} ${TOMCAT_HOME_DIR}/webapps/${OS_IDROP_DIR}
+fi
+
+# add iptables entry for HTTP and port 8080
+echo "INFO :: Modifying Firewall For HTTP Port 8080 access ..."
+/sbin/iptables -N idropweb
+/sbin/iptables -I INPUT 1 -j idropweb
+/sbin/iptables -A idropweb -m state --state NEW -p tcp --dport 80 -j ACCEPT
+/sbin/iptables -A idropweb -m tcp -p tcp --dport 8080 -m state --state NEW -j ACCEPT
+/sbin/iptables -A idropweb -m state --state ESTABLISHED,RELATED -j ACCEPT
+/sbin/service iptables save
+
+# Done - print info for starting up
+echo "INFO :: To Run IDrop Web In Web Browser Type: http://127.0.0.1:8080/idrop-web"
+echo "INFO :: To use iDrop-Lite applet or iDrop Swing Desktop application, verify that your browser supports JAVA"
+END_POSTINSTALL
+
+%elseif DEB
+%postinstall << END_POSTINSTALL
+
+# if not already running - start tomcat
+RESULT=$$(ps ax | grep -v grep | grep -i tomcat)
+if [ -n "$$RESULT" ];
+then
+ echo "INFO :: Starting Tomcat ..."
+ /usr/sbin/service ${TOMCAT_VER} start
+fi
+
+# wait until the tomcat conf/Catalina/localhost folder is created
+# or timeout after about 10 seconds
+TRIES=0
+while [ "$$TRIES" -lt 100 -a ! -e ${TOMCAT_HOME_DIR}/conf/Catalina/localhost ]; do
+ TRIES=$$((TRIES + 1))
+ sleep .1
+done
+
+# create config file (if it does not exist) for idrop-web in order to allow symbolic linking
+echo "INFO :: Configuring iDrop Web for Tomcat ..."
+if [ -f ${TOMCAT_HOME_DIR}/conf/Catalina/localhost/${OS_IDROP_DIR}.xml ];
+then
+ echo "WARNING :: ${TOMCAT_HOME_DIR}/conf/Catalina/localhost/${OS_IDROP_DIR}.xml Already Exists"
+else
+ echo "<?xml version='1.0' encoding='utf-8'?>
+<Context path=\"/idrop-web\" allowLinking=\"true\">
+
+ <WatchedResource>WEB-INF/web.xml</WatchedResource>
+
+</Context>" > ${TOMCAT_HOME_DIR}/conf/Catalina/localhost/${OS_IDROP_DIR}.xml
+fi
+
+# create symbolic link to idrop-web
+if [ -f ${TOMCAT_HOME_DIR}/webapps/${OS_IDROP_DIR} ];
+then
+ echo "WARNING :: ${TOMCAT_HOME_DIR}/webapps/${OS_IDROP_DIR} Already Exists"
+else
+ ln -s ${IDROP_HOME_DIR} ${TOMCAT_HOME_DIR}/webapps/${OS_IDROP_DIR}
+fi
+
+# add iptables entry for HTTP and port 8080
+echo "INFO :: Modifying Firewall For HTTP Port 8080 access ..."
+/sbin/iptables -N idropweb
+/sbin/iptables -I INPUT 1 -j idropweb
+/sbin/iptables -A idropweb -m state --state NEW -p tcp --dport 80 -j ACCEPT
+/sbin/iptables -A idropweb -m tcp -p tcp --dport 8080 -m state --state NEW -j ACCEPT
+/sbin/iptables -A idropweb -m state --state ESTABLISHED,RELATED -j ACCEPT
+/sbin/iptables-save
+
+# Done - print info for starting up
+echo "INFO :: To Run IDrop Web In Web Browser Type: http://127.0.0.1:8080/idrop-web"
+echo "INFO :: To use iDrop-Lite applet or iDrop Swing Desktop application, verify that your browser supports JAVA"
+END_POSTINSTALL
+
+%endif
+
+# =-=-=-=-=-=-=-
+# preremove
+# =-=-=-=-=-=-=-
+
+%if RPM
+%preremove << END_PREREMOVE
+# first check to make sure idrop-web is not logged in.
+USER=$$( who | grep $OS_IDROP_ACCT )
+if [ -n "$$USER" ]; then
+ echo "${OS_IDROP_ACCT} is currently logged in. Aborting."
+ exit 1
+fi
+
+# stop tomcat if RPM
+RESULT=$$(ps ax | grep -v grep | grep -i $OS_TOMCAT_ACCT )
+if [ -n "$$RESULT" ];
+then
+ echo "INFO :: Stopping Tomcat ..."
+ su -p -s /bin/sh $OS_TOMCAT_ACCT ${TOMCAT_HOME_DIR}/bin/shutdown.sh
+fi
+
+# remove iptables entries related to idropweb install
+echo "INFO :: Removing Firewall Access for iDrop Web ..."
+/sbin/iptables -F idropweb
+/sbin/iptables -D INPUT -j idropweb
+/sbin/iptables -X idropweb
+/sbin/service iptables save
+END_PREREMOVE
+
+%elseif DEB
+%preremove << END_PREREMOVE
+# first check to make sure idrop-web is not logged in.
+USER=$$( who | grep $OS_IDROP_ACCT )
+if [ -n "$$USER" ]; then
+ echo "${OS_IDROP_ACCT} is currently logged in. Aborting."
+ exit 1
+fi
+
+# remove iptables entries related to idropweb install
+echo "INFO :: Removing Firewall Access for iDrop Web ..."
+/sbin/iptables -F idropweb
+/sbin/iptables -D INPUT -j idropweb
+/sbin/iptables -X idropweb
+/sbin/iptables-save
+END_PREREMOVE
+
+%endif
+
+# =-=-=-=-=-=-=-
+# postremove
+%if RPM
+%postremove << END_POSTREMOVE
+
+# remove idropweb service account
+echo "INFO: :: Removing iDrop Web Service Account: ${OS_IDROP_ACCT} ..."
+USER=$$( grep $OS_IDROP_ACCT /etc/passwd )
+if [ -n "$$USER" ];
+then
+ /usr/sbin/userdel -r $OS_IDROP_ACCT
+else
+ echo "WARNING :: Service Account: ${OS_IDROP_ACCT} Already Removed"
+fi
+
+# clean up tomcat install if this is RPM
+# remove tomcat service account
+echo "INFO: :: Removing iDrop Web Tomcat Service Account: ${OS_TOMCAT_ACCT} ..."
+USER=$$( grep $OS_TOMCAT_ACCT /etc/passwd )
+if [ -n "$$USER" ];
+then
+ /usr/sbin/userdel -r $OS_TOMCAT_ACCT
+else
+ echo "WARNING :: Service Account: ${OS_TOMCAT_ACCT} Already Removed."
+fi
+END_POSTREMOVE
+
+%elseif DEB
+%postremove << END_POSTREMOVE
+
+# remove idropweb service account
+echo "INFO: :: Removing iDrop Web Service Account: ${OS_IDROP_ACCT} ..."
+USER=$$( grep $OS_IDROP_ACCT /etc/passwd )
+if [ -n "$$USER" ];
+then
+ /usr/sbin/userdel -r $OS_IDROP_ACCT
+else
+ echo "WARNING :: Service Account: ${OS_IDROP_ACCT} Already Removed"
+fi
+END_POSTREMOVE
+
+%endif
+
+# =-=-=-=-=-=-=-
+# =-=-=-=-=-=-=-
+# files, and more files...
+d 775 idropweb idropweb /etc/idrop-web -
+f 664 idropweb idropweb /etc/idrop-web/idrop-web-config.groovy ./idrop-web-config.groovy
diff --git a/idrop-web/pom.xml b/idrop-web/pom.xml
new file mode 100644
index 0000000..2438c7a
--- /dev/null
+++ b/idrop-web/pom.xml
@@ -0,0 +1,416 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.irods</groupId>
+ <artifactId>idrop</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0.2-SNAPSHOT</version>
+ <name>iRODS iDrop</name>
+ <description>iRODS iDrop - personal web and desktop grid access clients</description>
+ <url>https://code.renci.org/gf/project/irodsidrop/</url>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <jargon.version>3.2.1-SNAPSHOT</jargon.version>
+ <spring.core.version>3.0.5.RELEASE</spring.core.version>
+ <commons.io.version>2.0.1</commons.io.version>
+ <netbeans.version>RELEASE711</netbeans.version>
+ </properties>
+ <issueManagement>
+ <system>gForge</system>
+ <url>https://code.renci.org/gf/project/irodsidrop/tracker/</url>
+ </issueManagement>
+ <scm>
+ <connection>scm:git:ssh://developername@code.renci.org/gitroot/irodsidrop</connection>
+ <developerConnection>scm:git:ssh://${user.name}@code.renci.org/gitroot/irodsidrop</developerConnection>
+ </scm>
+ <organization>
+ <name>DICE</name>
+ <url>http://www.irods.org</url>
+ </organization>
+ <developers>
+ <developer>
+ <id>mconway</id>
+ <name>Mike Conway</name>
+ <email>michael_conway@unc.edu</email>
+ <url>http://www.irods.org</url>
+ <organization>DICE</organization>
+ <organizationUrl>http://www.irods.org</organizationUrl>
+ <roles>
+ <role>developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <repositories>
+ <repository>
+ <id>ibiblio.repository</id>
+ <name>ibiblio.repository</name>
+ <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>renci.repository</id>
+ <name>renci.repository</name>
+ <url>http://ci-dev.renci.org/nexus/content/repositories/public</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>always</updatePolicy>
+ <checksumPolicy>warn</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>netbeans.repository</id>
+ <name>netbeans.repository</name>
+ <url>http://bits.netbeans.org/maven2</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>jboss</id>
+ <name>jboss.repository</name>
+ <url>http://repository.jboss.com/maven2/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </snapshots>
+ </repository>
+ </repositories>
+ <distributionManagement>
+ <repository>
+ <id>renci.repository</id>
+ <name>renci.repository</name>
+ <url>https://ci-dev.renci.org/nexus/content/repositories/release</url>
+ </repository>
+ <snapshotRepository>
+ <id>renci.snapshots</id>
+ <name>renci.snapshots</name>
+ <url>https://ci-dev.renci.org/nexus/content/repositories/snapshots</url>
+ </snapshotRepository>
+ <site>
+ <id>renci.site</id>
+ <name>renci.site</name>
+ <url>file:///${user.dir}/sites/irodsidrop</url>
+ </site>
+ </distributionManagement>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jxr-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/javase/6/docs/api/</link>
+ <link>http://java.sun.com/javaee/5/docs/api/</link>
+ <link>http://commons.apache.org/logging/apidocs/</link>
+ <link>http://commons.apache.org/io/apidocs/</link>
+ <link>http://commons.apache.org/lang/apidocs/</link>
+ <link>http://www.junit.org/junit/javadoc/</link>
+ <link>http://logging.apache.org/log4j/docs/api/</link>
+ <link>http://velocity.apache.org/engine/devel/apidocs/</link>
+ </links>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-changelog-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <version>2.4</version>
+ </plugin>
+ </plugins>
+ </reporting>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.netbeans.api</groupId>
+ <artifactId>org-netbeans-swing-outline</artifactId>
+ <version>${netbeans.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.netbeans.api</groupId>
+ <artifactId>org-openide-util</artifactId>
+ <version>${netbeans.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.netbeans.api</groupId>
+ <artifactId>org-openide-awt</artifactId>
+ <version>${netbeans.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon</groupId>
+ <artifactId>jargon-core</artifactId>
+ <version>${jargon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon</groupId>
+ <artifactId>jargon-data-utils</artifactId>
+ <version>${jargon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon.transfer</groupId>
+ <artifactId>jargon-transfer-dao-spring</artifactId>
+ <version>${jargon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon.transfer</groupId>
+ <artifactId>jargon-transfer-engine</artifactId>
+ <version>${jargon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon</groupId>
+ <artifactId>jargon-user-tagging</artifactId>
+ <version>${jargon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon</groupId>
+ <artifactId>jargon-security</artifactId>
+ <version>${jargon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.5.10</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.16</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-exec</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.5.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.transaction</groupId>
+ <artifactId>jta</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.dbunit</groupId>
+ <artifactId>dbunit</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.6.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ <version>${spring.core.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commons.io.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-core</artifactId>
+ <version>${spring.core.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-web</artifactId>
+ <version>${spring.core.version}</version>
+ <type>jar</type>
+ </dependency>
+ <!-- <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <version>${spring.core.version}</version>
+ <type>pom</type>
+ </dependency>-->
+ <dependency>
+ <groupId>hibernate</groupId>
+ <artifactId>hibernate3</artifactId>
+ <version>3.6.8.Final</version>
+ </dependency>
+ <dependency>
+ <groupId>c3p0</groupId>
+ <artifactId>c3p0</artifactId>
+ <version>0.9.1</version>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ <version>2.1_3</version>
+ </dependency>
+ <dependency>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>2.7.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>swing-layout</artifactId>
+ <version>1.0.3</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.irods.jargon</groupId>
+ <artifactId>jargon-core</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.netbeans.api</groupId>
+ <artifactId>org-openide-util</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.5</version>
+ <configuration>
+ <includes>
+ <include>**/AllTests.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <fork>true</fork>
+ <compilerVersion>1.6</compilerVersion>
+ <source>1.6</source>
+ <target>1.6</target>
+ <compilerArgument>-Xlint:-unchecked</compilerArgument>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
+ <artifactId>maven-scm-provider-svnjava</artifactId>
+ <version>1.10</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <providerImplementations>
+ <svn>javasvn</svn>
+ </providerImplementations>
+ <resume>false</resume>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>production</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <debug>false</debug>
+ <optimize>true</optimize>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <modules>
+ <module>idrop-swing</module>
+ <module>idrop-lite</module>
+ </modules>
+</project>
diff --git a/idrop-web/release_notes.txt b/idrop-web/release_notes.txt
index 68c17ac..8642638 100644..100755
--- a/idrop-web/release_notes.txt
+++ b/idrop-web/release_notes.txt
@@ -1,45 +1,28 @@
-*'''Project''': idrop-web
-*'''Date''': 10/23/2012
-*'''Release Version''': 1.0.2-beta1
-*'''git tag''': 1.0.2-beta1
+
+*'''Project''': idrop-web version 2
+*'''Date''': xx/xx/xx
+*'''Release Version''': xxxx
+*'''git tag''': 984-idrop-web-redesign
==News==
-This is a release of iDrop web version 1.0.2
+This is a release of iDrop web with the version 2.0 redesign work
==Requirements==
*idrop-web depends on Java 1.6+
-*idrop-web depends on grails 2.0.1
+*idrop-web depends on grails 2.1.1
Note that the following bug and feature requests are logged in GForge with related commit information [[https://code.renci.org/gf/project/irodsidrop/tracker/]]
==Bug Fixes==
-* [#959] firefox browse div float error
-
-* [#950] unable to browse to location message in idrop web tree for new safari/mac
-** temp catch of icon assignment added as shim in jstree javascript
-
-* [#990] update user profile i18n message missing
-
-* [#986] hit home in browse tree causes error message when timed out
-** fixed lingo-common method that handles json call to check for continue
-*[#1013] null appended to url path in browse view download links
+* [#1181] fix memory in idrop web2 when changing login
==Features==
-* [#922] User Profile Management
-** added profile management tab, including ability to change password by user
-
-* [#962] missing file icon in info view for data objects
-Fixed data object info to include icon and be clearer about file versus collection
-
-*[#1023] add Version class in jargon-core
-**Added iDrop web and Jargon version numbers in footer
-
-*Updated Grails version to version 2.1.0
+*[#984] iDrop web '2.0' redesign effort
-*Removed delete and rename buttons from browse details view
+*[#78] very large collection paging \ No newline at end of file
diff --git a/idrop-web/site/resources/css/site.css b/idrop-web/site/resources/css/site.css
new file mode 100644
index 0000000..7e5ccc0
--- /dev/null
+++ b/idrop-web/site/resources/css/site.css
@@ -0,0 +1,10 @@
+#navcolumn h5 {
+ font-size: smaller;
+ border: 1px solid #aaaaaa;
+ background-color: #bbb;
+ margin-top: 7px;
+ margin-bottom: 2px;
+ padding-top: 2px;
+ padding-left: 2px;
+ color: #000;
+}
diff --git a/idrop-web/site/resources/eclipse.xml b/idrop-web/site/resources/eclipse.xml
new file mode 100644
index 0000000..d59cc44
--- /dev/null
+++ b/idrop-web/site/resources/eclipse.xml
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<profiles version="10">
+<profile name="RENCI_CONVENTIONS" version="10">
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+</profile>
+</profiles>
diff --git a/idrop-web/site/site.xml b/idrop-web/site/site.xml
new file mode 100644
index 0000000..5723627
--- /dev/null
+++ b/idrop-web/site/site.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project name="iDrop">
+ <bannerLeft>
+ <name>iDrop</name>
+ </bannerLeft>
+ <bannerRight>
+ <src></src>
+ </bannerRight>
+ <body>
+ <links>
+ <item name="gForge" href="https://code.renci.org/gf/project/irodsidrop"/>
+ <item name="Hudson" href="https://ci-dev.renci.org/hudson"/>
+ </links>
+ <menu name="iDrop">
+ <item name="About" href="index.html"/>
+ <item name="Code Format" href="codeFormat.html"/>
+ </menu>
+ <menu ref="modules"/>
+ </body>
+</project>
diff --git a/idrop-web/site/xdoc/build.xml b/idrop-web/site/xdoc/build.xml
new file mode 100644
index 0000000..792e35c
--- /dev/null
+++ b/idrop-web/site/xdoc/build.xml
@@ -0,0 +1,9 @@
+<document>
+ <properties>
+ </properties>
+ <body>
+ <section name="Jargon">
+ <p></p>
+ </section>
+ </body>
+</document>
diff --git a/idrop-web/site/xdoc/codeFormat.xml b/idrop-web/site/xdoc/codeFormat.xml
new file mode 100644
index 0000000..65ef174
--- /dev/null
+++ b/idrop-web/site/xdoc/codeFormat.xml
@@ -0,0 +1,10 @@
+<document>
+ <properties>
+ </properties>
+ <body>
+ <section name="Eclipse 3.2+">
+ <p>Download <a href="./eclipse.xml">renci-eclipse.xml</a>.</p>
+ <p>After this, select Window > Preferences, and open up the configuration for Java > Code Style > Code Formatter. Click on the button labeled Import... and select the file you downloaded. Give the style a name, and click OK.</p>
+ </section>
+ </body>
+</document>
diff --git a/idrop-web/site/xdoc/index.xml b/idrop-web/site/xdoc/index.xml
new file mode 100644
index 0000000..792e35c
--- /dev/null
+++ b/idrop-web/site/xdoc/index.xml
@@ -0,0 +1,9 @@
+<document>
+ <properties>
+ </properties>
+ <body>
+ <section name="Jargon">
+ <p></p>
+ </section>
+ </body>
+</document>
diff --git a/idrop-web/src/groovy/org/irods/mydrop/config/ServerProperties.groovy b/idrop-web/src/groovy/org/irods/mydrop/config/ServerProperties.groovy
index 3f1ed33..3f1ed33 100644..100755
--- a/idrop-web/src/groovy/org/irods/mydrop/config/ServerProperties.groovy
+++ b/idrop-web/src/groovy/org/irods/mydrop/config/ServerProperties.groovy
diff --git a/idrop-web/src/groovy/org/irods/mydrop/config/ServerPropertiesCache.groovy b/idrop-web/src/groovy/org/irods/mydrop/config/ServerPropertiesCache.groovy
index 6ceb8c9..6ceb8c9 100644..100755
--- a/idrop-web/src/groovy/org/irods/mydrop/config/ServerPropertiesCache.groovy
+++ b/idrop-web/src/groovy/org/irods/mydrop/config/ServerPropertiesCache.groovy
diff --git a/idrop-web/src/groovy/org/irods/mydrop/config/ViewState.groovy b/idrop-web/src/groovy/org/irods/mydrop/config/ViewState.groovy
new file mode 100644
index 0000000..decd742
--- /dev/null
+++ b/idrop-web/src/groovy/org/irods/mydrop/config/ViewState.groovy
@@ -0,0 +1,18 @@
+/**
+ *
+ */
+package org.irods.mydrop.config
+
+import java.io.Serializable
+
+/**
+ * Value class to hold important iDrop server state in session
+ * @author Mike Conway - DICE (www.irods.org)
+ */
+class ViewState implements Serializable {
+
+ String rootPath = ""
+ String browseView = ""
+ String selectedPath = ""
+
+}
diff --git a/idrop-web/src/templates/artifacts/Controller.groovy b/idrop-web/src/templates/artifacts/Controller.groovy
index a36ec0d..a36ec0d 100644..100755
--- a/idrop-web/src/templates/artifacts/Controller.groovy
+++ b/idrop-web/src/templates/artifacts/Controller.groovy
diff --git a/idrop-web/src/templates/artifacts/DomainClass.groovy b/idrop-web/src/templates/artifacts/DomainClass.groovy
index 5a611dc..5a611dc 100644..100755
--- a/idrop-web/src/templates/artifacts/DomainClass.groovy
+++ b/idrop-web/src/templates/artifacts/DomainClass.groovy
diff --git a/idrop-web/src/templates/artifacts/Filters.groovy b/idrop-web/src/templates/artifacts/Filters.groovy
index d1af7f9..d1af7f9 100644..100755
--- a/idrop-web/src/templates/artifacts/Filters.groovy
+++ b/idrop-web/src/templates/artifacts/Filters.groovy
diff --git a/idrop-web/src/templates/artifacts/ScaffoldingController.groovy b/idrop-web/src/templates/artifacts/ScaffoldingController.groovy
index 3f95216..3f95216 100644..100755
--- a/idrop-web/src/templates/artifacts/ScaffoldingController.groovy
+++ b/idrop-web/src/templates/artifacts/ScaffoldingController.groovy
diff --git a/idrop-web/src/templates/artifacts/Script.groovy b/idrop-web/src/templates/artifacts/Script.groovy
index 260d1cf..260d1cf 100644..100755
--- a/idrop-web/src/templates/artifacts/Script.groovy
+++ b/idrop-web/src/templates/artifacts/Script.groovy
diff --git a/idrop-web/src/templates/artifacts/Service.groovy b/idrop-web/src/templates/artifacts/Service.groovy
index 0e877e4..0e877e4 100644..100755
--- a/idrop-web/src/templates/artifacts/Service.groovy
+++ b/idrop-web/src/templates/artifacts/Service.groovy
diff --git a/idrop-web/src/templates/artifacts/TagLib.groovy b/idrop-web/src/templates/artifacts/TagLib.groovy
index 8aea148..8aea148 100644..100755
--- a/idrop-web/src/templates/artifacts/TagLib.groovy
+++ b/idrop-web/src/templates/artifacts/TagLib.groovy
diff --git a/idrop-web/src/templates/artifacts/Tests.groovy b/idrop-web/src/templates/artifacts/Tests.groovy
index 37c12e2..37c12e2 100644..100755
--- a/idrop-web/src/templates/artifacts/Tests.groovy
+++ b/idrop-web/src/templates/artifacts/Tests.groovy
diff --git a/idrop-web/src/templates/artifacts/WebTest.groovy b/idrop-web/src/templates/artifacts/WebTest.groovy
index d446d35..d446d35 100644..100755
--- a/idrop-web/src/templates/artifacts/WebTest.groovy
+++ b/idrop-web/src/templates/artifacts/WebTest.groovy
diff --git a/idrop-web/src/templates/artifacts/hibernate.cfg.xml b/idrop-web/src/templates/artifacts/hibernate.cfg.xml
index 05a7d29..05a7d29 100644..100755
--- a/idrop-web/src/templates/artifacts/hibernate.cfg.xml
+++ b/idrop-web/src/templates/artifacts/hibernate.cfg.xml
diff --git a/idrop-web/src/templates/scaffolding/Controller.groovy b/idrop-web/src/templates/scaffolding/Controller.groovy
index 7393e92..7393e92 100644..100755
--- a/idrop-web/src/templates/scaffolding/Controller.groovy
+++ b/idrop-web/src/templates/scaffolding/Controller.groovy
diff --git a/idrop-web/src/templates/scaffolding/Test.groovy b/idrop-web/src/templates/scaffolding/Test.groovy
index 7ba7d25..7ba7d25 100644..100755
--- a/idrop-web/src/templates/scaffolding/Test.groovy
+++ b/idrop-web/src/templates/scaffolding/Test.groovy
diff --git a/idrop-web/src/templates/scaffolding/_form.gsp b/idrop-web/src/templates/scaffolding/_form.gsp
index ff24f16..ff24f16 100644..100755
--- a/idrop-web/src/templates/scaffolding/_form.gsp
+++ b/idrop-web/src/templates/scaffolding/_form.gsp
diff --git a/idrop-web/src/templates/scaffolding/create.gsp b/idrop-web/src/templates/scaffolding/create.gsp
index 65fcfbc..65fcfbc 100644..100755
--- a/idrop-web/src/templates/scaffolding/create.gsp
+++ b/idrop-web/src/templates/scaffolding/create.gsp
diff --git a/idrop-web/src/templates/scaffolding/edit.gsp b/idrop-web/src/templates/scaffolding/edit.gsp
index b27acc2..b27acc2 100644..100755
--- a/idrop-web/src/templates/scaffolding/edit.gsp
+++ b/idrop-web/src/templates/scaffolding/edit.gsp
diff --git a/idrop-web/src/templates/scaffolding/list.gsp b/idrop-web/src/templates/scaffolding/list.gsp
index 15e49bb..15e49bb 100644..100755
--- a/idrop-web/src/templates/scaffolding/list.gsp
+++ b/idrop-web/src/templates/scaffolding/list.gsp
diff --git a/idrop-web/src/templates/scaffolding/renderEditor.template b/idrop-web/src/templates/scaffolding/renderEditor.template
index e8b10ed..e8b10ed 100644..100755
--- a/idrop-web/src/templates/scaffolding/renderEditor.template
+++ b/idrop-web/src/templates/scaffolding/renderEditor.template
diff --git a/idrop-web/src/templates/scaffolding/show.gsp b/idrop-web/src/templates/scaffolding/show.gsp
index 06fc6b9..06fc6b9 100644..100755
--- a/idrop-web/src/templates/scaffolding/show.gsp
+++ b/idrop-web/src/templates/scaffolding/show.gsp
diff --git a/idrop-web/src/templates/testing/Controller.groovy b/idrop-web/src/templates/testing/Controller.groovy
index 423d448..423d448 100644..100755
--- a/idrop-web/src/templates/testing/Controller.groovy
+++ b/idrop-web/src/templates/testing/Controller.groovy
diff --git a/idrop-web/src/templates/testing/DomainClass.groovy b/idrop-web/src/templates/testing/DomainClass.groovy
index 90c415f..90c415f 100644..100755
--- a/idrop-web/src/templates/testing/DomainClass.groovy
+++ b/idrop-web/src/templates/testing/DomainClass.groovy
diff --git a/idrop-web/src/templates/testing/Filters.groovy b/idrop-web/src/templates/testing/Filters.groovy
index d65ecc7..d65ecc7 100644..100755
--- a/idrop-web/src/templates/testing/Filters.groovy
+++ b/idrop-web/src/templates/testing/Filters.groovy
diff --git a/idrop-web/src/templates/testing/Generic.groovy b/idrop-web/src/templates/testing/Generic.groovy
index d34c26f..d34c26f 100644..100755
--- a/idrop-web/src/templates/testing/Generic.groovy
+++ b/idrop-web/src/templates/testing/Generic.groovy
diff --git a/idrop-web/src/templates/testing/Service.groovy b/idrop-web/src/templates/testing/Service.groovy
index 973e5b1..973e5b1 100644..100755
--- a/idrop-web/src/templates/testing/Service.groovy
+++ b/idrop-web/src/templates/testing/Service.groovy
diff --git a/idrop-web/src/templates/testing/TagLib.groovy b/idrop-web/src/templates/testing/TagLib.groovy
index b210fe0..b210fe0 100644..100755
--- a/idrop-web/src/templates/testing/TagLib.groovy
+++ b/idrop-web/src/templates/testing/TagLib.groovy
diff --git a/idrop-web/src/templates/testing/UnitTest.groovy b/idrop-web/src/templates/testing/UnitTest.groovy
index ab9367b..ab9367b 100644..100755
--- a/idrop-web/src/templates/testing/UnitTest.groovy
+++ b/idrop-web/src/templates/testing/UnitTest.groovy
diff --git a/idrop-web/src/templates/war/web.xml b/idrop-web/src/templates/war/web.xml
index aa5182b..aa5182b 100644..100755
--- a/idrop-web/src/templates/war/web.xml
+++ b/idrop-web/src/templates/war/web.xml
diff --git a/idrop-web/test/unit/idrop/web2/AuthUserTagTagLibTests.groovy b/idrop-web/test/unit/idrop/web2/AuthUserTagTagLibTests.groovy
new file mode 100644
index 0000000..007d27d
--- /dev/null
+++ b/idrop-web/test/unit/idrop/web2/AuthUserTagTagLibTests.groovy
@@ -0,0 +1,17 @@
+package idrop.web2
+
+
+
+import grails.test.mixin.*
+import org.junit.*
+
+/**
+ * See the API for {@link grails.test.mixin.web.GroovyPageUnitTestMixin} for usage instructions
+ */
+@TestFor(AuthUserTagTagLib)
+class AuthUserTagTagLibTests {
+
+ void testSomething() {
+ fail "Implement me"
+ }
+}
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/AuditControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/AuditControllerTests.groovy
index 998aa82..998aa82 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/AuditControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/AuditControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/BrowseControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/BrowseControllerTests.groovy
index dbfb37d..3b5f327 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/BrowseControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/BrowseControllerTests.groovy
@@ -4,8 +4,6 @@ package org.irods.mydrop.controller
import grails.converters.*
import grails.test.*
-import java.util.Properties
-
import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.connection.IRODSServerProperties
import org.irods.jargon.core.exception.JargonException
@@ -18,11 +16,11 @@ import org.irods.jargon.core.pub.domain.DataObject
import org.irods.jargon.core.query.CollectionAndDataObjectListingEntry
import org.irods.jargon.core.query.MetaDataAndDomainData
import org.irods.jargon.testutils.TestingPropertiesHelper
-import org.irods.jargon.usertagging.FreeTaggingService
-import org.irods.jargon.usertagging.IRODSTaggingService
-import org.irods.jargon.usertagging.TaggingServiceFactory
import org.irods.jargon.usertagging.domain.IRODSTagGrouping
import org.irods.jargon.usertagging.domain.IRODSTagValue
+import org.irods.jargon.usertagging.tags.FreeTaggingService
+import org.irods.jargon.usertagging.tags.IRODSTaggingService
+import org.irods.jargon.usertagging.tags.TaggingServiceFactory
import org.mockito.Matchers
import org.mockito.Mockito
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/FileControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/FileControllerTests.groovy
index ebf3d95..ebf3d95 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/FileControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/FileControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/HomeControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/HomeControllerTests.groovy
index c373f3e..c373f3e 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/HomeControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/HomeControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/IdropLiteControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/IdropLiteControllerTests.groovy
index 0f5cad9..0f5cad9 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/IdropLiteControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/IdropLiteControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/ImageControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/ImageControllerTests.groovy
index f136af1..f136af1 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/ImageControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/ImageControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/MetadataControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/MetadataControllerTests.groovy
index 8c3a6c4..8c3a6c4 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/MetadataControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/MetadataControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/ProfileControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/ProfileControllerTests.groovy
index 30e8b0c..30e8b0c 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/ProfileControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/ProfileControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/QuickUploadControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/QuickUploadControllerTests.groovy
new file mode 100644
index 0000000..31fe18d
--- /dev/null
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/QuickUploadControllerTests.groovy
@@ -0,0 +1,17 @@
+package org.irods.mydrop.controller
+
+
+
+import grails.test.mixin.*
+import org.junit.*
+
+/**
+ * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} for usage instructions
+ */
+@TestFor(QuickUploadController)
+class QuickUploadControllerTests {
+
+ void testSomething() {
+ fail "Implement me"
+ }
+}
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/SearchControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/SearchControllerTests.groovy
index 6b088fa..5a056c6 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/SearchControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/SearchControllerTests.groovy
@@ -2,8 +2,6 @@ package org.irods.mydrop.controller
import grails.test.ControllerUnitTestCase
-import java.util.Properties
-
import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.exception.JargonException
import org.irods.jargon.core.pub.CollectionAndDataObjectListAndSearchAO
@@ -11,9 +9,9 @@ import org.irods.jargon.core.pub.IRODSAccessObjectFactory
import org.irods.jargon.core.pub.IRODSFileSystem
import org.irods.jargon.core.query.CollectionAndDataObjectListingEntry
import org.irods.jargon.testutils.TestingPropertiesHelper
-import org.irods.jargon.usertagging.FreeTaggingService
-import org.irods.jargon.usertagging.TaggingServiceFactory
import org.irods.jargon.usertagging.domain.TagQuerySearchResult
+import org.irods.jargon.usertagging.tags.FreeTaggingService
+import org.irods.jargon.usertagging.tags.TaggingServiceFactory
import org.mockito.Mockito
class SearchControllerTests extends ControllerUnitTestCase {
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/SharingControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/SharingControllerTests.groovy
index 115abf8..115abf8 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/SharingControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/SharingControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/ShoppingCartControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/ShoppingCartControllerTests.groovy
new file mode 100755
index 0000000..94248b7
--- /dev/null
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/ShoppingCartControllerTests.groovy
@@ -0,0 +1,19 @@
+package org.irods.mydrop.controller
+
+
+
+import grails.test.mixin.*
+
+import org.irods.mydrop.controller.ShoppingCartController;
+import org.junit.*
+
+/**
+ * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} for usage instructions
+ */
+@TestFor(ShoppingCartController)
+class ShoppingCartControllerTests {
+
+ void testSomething() {
+ fail "Implement me"
+ }
+}
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/TagsControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/TagsControllerTests.groovy
index eeca57b..57fbf38 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/TagsControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/TagsControllerTests.groovy
@@ -5,19 +5,17 @@ package org.irods.mydrop.controller
import grails.converters.*
import grails.test.*
-import java.util.Properties
-
import org.irods.jargon.core.connection.IRODSAccount
import org.irods.jargon.core.exception.*
import org.irods.jargon.core.pub.IRODSAccessObjectFactory
import org.irods.jargon.core.pub.IRODSFileSystem
import org.irods.jargon.testutils.TestingPropertiesHelper
-import org.irods.jargon.usertagging.FreeTaggingService
-import org.irods.jargon.usertagging.IRODSTaggingService
-import org.irods.jargon.usertagging.TaggingServiceFactory
-import org.irods.jargon.usertagging.UserTagCloudService
import org.irods.jargon.usertagging.domain.IRODSTagValue
import org.irods.jargon.usertagging.domain.UserTagCloudView
+import org.irods.jargon.usertagging.tags.FreeTaggingService
+import org.irods.jargon.usertagging.tags.IRODSTaggingService
+import org.irods.jargon.usertagging.tags.TaggingServiceFactory
+import org.irods.jargon.usertagging.tags.UserTagCloudService
import org.mockito.Mockito
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/TicketAccessControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/TicketAccessControllerTests.groovy
index 3848b68..3848b68 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/TicketAccessControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/TicketAccessControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/TicketControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/TicketControllerTests.groovy
index c0963c5..c0963c5 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/TicketControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/TicketControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/UserControllerTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/UserControllerTests.groovy
index 25bcd3f..25bcd3f 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/UserControllerTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/UserControllerTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/controller/UserTagServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/controller/UserTagServiceTests.groovy
index 715db96..715db96 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/controller/UserTagServiceTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/controller/UserTagServiceTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/service/I18NMessagingServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/service/I18NMessagingServiceTests.groovy
index 5821403..5821403 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/service/I18NMessagingServiceTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/service/I18NMessagingServiceTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/service/ProfileServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/service/ProfileServiceTests.groovy
index 850cb5c..850cb5c 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/service/ProfileServiceTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/service/ProfileServiceTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/service/SharingServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/service/SharingServiceTests.groovy
new file mode 100644
index 0000000..e9e87cc
--- /dev/null
+++ b/idrop-web/test/unit/org/irods/mydrop/service/SharingServiceTests.groovy
@@ -0,0 +1,17 @@
+package org.irods.mydrop.service
+
+
+
+import grails.test.mixin.*
+import org.junit.*
+
+/**
+ * See the API for {@link grails.test.mixin.services.ServiceUnitTestMixin} for usage instructions
+ */
+@TestFor(SharingService)
+class SharingServiceTests {
+
+ void testSomething() {
+ fail "Implement me"
+ }
+}
diff --git a/idrop-web/test/unit/org/irods/mydrop/service/StarringServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/service/StarringServiceTests.groovy
new file mode 100644
index 0000000..fd6cc39
--- /dev/null
+++ b/idrop-web/test/unit/org/irods/mydrop/service/StarringServiceTests.groovy
@@ -0,0 +1,17 @@
+package org.irods.mydrop.service
+
+
+
+import grails.test.mixin.*
+import org.junit.*
+
+/**
+ * See the API for {@link grails.test.mixin.services.ServiceUnitTestMixin} for usage instructions
+ */
+@TestFor(StarringService)
+class StarringServiceTests {
+
+ void testSomething() {
+ fail "Implement me"
+ }
+}
diff --git a/idrop-web/test/unit/org/irods/mydrop/service/ThumbnailServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/service/ThumbnailServiceTests.groovy
index a0dc827..a0dc827 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/service/ThumbnailServiceTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/service/ThumbnailServiceTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/service/ViewStateServiceTests.groovy b/idrop-web/test/unit/org/irods/mydrop/service/ViewStateServiceTests.groovy
new file mode 100644
index 0000000..0d201a1
--- /dev/null
+++ b/idrop-web/test/unit/org/irods/mydrop/service/ViewStateServiceTests.groovy
@@ -0,0 +1,17 @@
+package org.irods.mydrop.service
+
+
+
+import grails.test.mixin.*
+import org.junit.*
+
+/**
+ * See the API for {@link grails.test.mixin.services.ServiceUnitTestMixin} for usage instructions
+ */
+@TestFor(ViewStateService)
+class ViewStateServiceTests {
+
+ void testSomething() {
+ fail "Implement me"
+ }
+}
diff --git a/idrop-web/test/unit/org/irods/mydrop/taglib/AuthTagLibTests.groovy b/idrop-web/test/unit/org/irods/mydrop/taglib/AuthTagLibTests.groovy
index 39902a8..39902a8 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/taglib/AuthTagLibTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/taglib/AuthTagLibTests.groovy
diff --git a/idrop-web/test/unit/org/irods/mydrop/taglib/ImageTagLibTests.groovy b/idrop-web/test/unit/org/irods/mydrop/taglib/ImageTagLibTests.groovy
index ce1d0b8..ce1d0b8 100644..100755
--- a/idrop-web/test/unit/org/irods/mydrop/taglib/ImageTagLibTests.groovy
+++ b/idrop-web/test/unit/org/irods/mydrop/taglib/ImageTagLibTests.groovy
diff --git a/idrop-web/web-app/WEB-INF/applicationContext.xml b/idrop-web/web-app/WEB-INF/applicationContext.xml
index 69fbef3..69fbef3 100644..100755
--- a/idrop-web/web-app/WEB-INF/applicationContext.xml
+++ b/idrop-web/web-app/WEB-INF/applicationContext.xml
diff --git a/idrop-web/web-app/WEB-INF/sitemesh.xml b/idrop-web/web-app/WEB-INF/sitemesh.xml
index 72399ce..72399ce 100644..100755
--- a/idrop-web/web-app/WEB-INF/sitemesh.xml
+++ b/idrop-web/web-app/WEB-INF/sitemesh.xml
diff --git a/idrop-web/web-app/WEB-INF/tld/c.tld b/idrop-web/web-app/WEB-INF/tld/c.tld
index 5e18236..5e18236 100644..100755
--- a/idrop-web/web-app/WEB-INF/tld/c.tld
+++ b/idrop-web/web-app/WEB-INF/tld/c.tld
diff --git a/idrop-web/web-app/WEB-INF/tld/fmt.tld b/idrop-web/web-app/WEB-INF/tld/fmt.tld
index 2ae4776..2ae4776 100644..100755
--- a/idrop-web/web-app/WEB-INF/tld/fmt.tld
+++ b/idrop-web/web-app/WEB-INF/tld/fmt.tld
diff --git a/idrop-web/web-app/WEB-INF/tld/grails.tld b/idrop-web/web-app/WEB-INF/tld/grails.tld
index 9bd036b..9bd036b 100644..100755
--- a/idrop-web/web-app/WEB-INF/tld/grails.tld
+++ b/idrop-web/web-app/WEB-INF/tld/grails.tld
diff --git a/idrop-web/web-app/WEB-INF/tld/spring.tld b/idrop-web/web-app/WEB-INF/tld/spring.tld
index 1bc7091..1bc7091 100644..100755
--- a/idrop-web/web-app/WEB-INF/tld/spring.tld
+++ b/idrop-web/web-app/WEB-INF/tld/spring.tld
diff --git a/idrop-web/web-app/WEB-INF/web.xml b/idrop-web/web-app/WEB-INF/web.xml
index d22c8e6..d22c8e6 100644..100755
--- a/idrop-web/web-app/WEB-INF/web.xml
+++ b/idrop-web/web-app/WEB-INF/web.xml
diff --git a/idrop-web/web-app/css/base.css b/idrop-web/web-app/css/base.css
deleted file mode 100644
index 601ecf8..0000000
--- a/idrop-web/web-app/css/base.css
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.5.1
-*/
-/* base.css, part of YUI's CSS Foundation */
-h1 {
- /*18px via YUI Fonts CSS foundation*/
- font-size:138.5%;
-}
-h2 {
- /*16px via YUI Fonts CSS foundation*/
- font-size:123.1%;
-}
-h3 {
- /*14px via YUI Fonts CSS foundation*/
- font-size:108%;
-}
-h1,h2,h3 {
- /* top & bottom margin based on font size */
- margin:1em 0;
-}
-h1,h2,h3,h4,h5,h6,strong {
- /*bringing boldness back to headers and the strong element*/
- font-weight:bold;
-}
-abbr,acronym {
- /*indicating to users that more info is available */
- border-bottom:1px dotted #000;
- cursor:help;
-}
-em {
- /*bringing italics back to the em element*/
- font-style:italic;
-}
-blockquote,ul,ol,dl {
- /*giving blockquotes and lists room to breath*/
- margin:.5em;
-}
-ol,ul,dl {
- /*bringing lists on to the page with breathing room */
- margin-left:1em;
-}
-ol li {
- /*giving OL's LIs generated numbers*/
- list-style: decimal outside;
-}
-ul li {
- /*giving UL's LIs generated disc markers*/
- list-style: disc outside;
-}
-dl dd {
- /*giving UL's LIs generated numbers*/
- margin-left:1em;
-}
-th,td {
- /*borders and padding to make the table readable*/
- /*border:1px solid #000;*/
- /*padding:.5em;*/
-}
-th {
- /*distinguishing table headers from data cells*/
- font-weight:bold;
- text-align:center;
-}
-caption {
- /*coordinated margin to match cell's padding*/
- margin-bottom:.5em;
- /*centered so it doesn't blend in to other content*/
- text-align:center;
-}
-p,fieldset,table,pre {
- /*so things don't run into each other*/
- margin-bottom:1em;
-}
-/* setting a consistent width, 160px;
- control of type=file still not possible */
-input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
diff --git a/idrop-web/web-app/css/bootstrap-responsive.min.css b/idrop-web/web-app/css/bootstrap-responsive.min.css
new file mode 100644
index 0000000..2269019
--- /dev/null
+++ b/idrop-web/web-app/css/bootstrap-responsive.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap Responsive v2.2.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728