From 564470de7520f9105a05d7fedb6d10f70e6c9628 Mon Sep 17 00:00:00 2001 From: robertovenzia Date: Fri, 21 Nov 2025 10:28:00 +0100 Subject: [PATCH 1/3] SDK migration and adaptation to Alfresco 23.4 --- .gitignore | 57 +- LICENSE | 166 ---- README.md | 3 +- docker/docker-compose.yml | 76 ++ docs/alfresco-uploader-plus-diagrams.pdf | Bin 90578 -> 0 bytes maven-central-deploy.sh | 14 - pom.xml | 706 ++++++++++++------ repo/.gitignore | 3 - repo/pom.xml | 121 --- repo/run.bat | 8 - repo/run.sh | 7 - .../context/bootstrap-context.xml | 22 - .../uploader-plus-repo/log4j.properties | 40 - .../messages/uploader-plus_fr.properties | 2 - .../uploderplus/ListContentTypesGet.java | 80 -- repo/src/test/resources/log4j.properties | 266 ------- repo/tomcat/context.xml | 38 - run.bat | 127 ++++ run.sh | 122 +++ surf/.gitignore | 2 - surf/pom.xml | 90 --- surf/run.bat | 3 - surf/run.sh | 19 - .../messages/uploader-plus_fr.properties | 5 - .../uploader-plus-admin.get_fr.properties | 12 - .../uploader/flash-upload.get.desc.xml | 5 - .../uploader/flash-upload.get.html.ftl | 120 --- .../uploader/flash-upload.get.js | 6 - .../uploader/flash-upload.get.properties | 31 - .../uploader/flash-upload.get_de.properties | 31 - .../uploader/flash-upload.get_es.properties | 31 - .../uploader/flash-upload.get_fr.properties | 31 - .../uploader/flash-upload.get_it.properties | 31 - .../uploader/flash-upload.get_ja.properties | 31 - .../uploader/flash-upload.get_nb.properties | 31 - .../uploader/flash-upload.get_nl.properties | 31 - .../flash-upload.get_pt_BR.properties | 31 - .../uploader/flash-upload.get_ru.properties | 30 - .../flash-upload.get_zh_CN.properties | 30 - .../surf/uploader-plus-surf-context.xml | 11 - .../uploader-plus/js/flash-upload-plus.js | 275 ------- surf/src/test/resources/log4j.properties | 52 -- surf/tomcat/context.xml | 39 - uploader-plus-integration-tests/pom.xml | 76 ++ uploader-plus-platform-docker/pom.xml | 130 ++++ .../src/main/docker/Dockerfile | 29 + .../main/docker}/alfresco-global.properties | 51 +- .../src/main/docker/dev-log4j2.properties | 412 ++++++++++ .../disable-webscript-caching-context.xml | 0 .../src/main/docker/hotswap-agent.properties | 48 ++ .../src/main/docker/license/README.md | 6 + uploader-plus-platform/pom.xml | 31 + .../src/main/assembly/amp.xml | 66 ++ .../main/assembly}/file-mapping.properties | 41 +- .../src/main/assembly/web/README.md | 22 + .../uploaderplus/ListContentTypesGet.java | 42 ++ .../allowed-content-types.get.desc.xml | 3 +- .../allowed-content-types.get.js | 0 .../allowed-content-types.get.json.ftl | 0 .../list-content-types.get.config.xml | 0 .../list-content-types.get.desc.xml | 0 .../uploader-plus/list-content-types.get.js | 0 .../list-content-types.get.json.ftl | 0 .../upload-folders-list.get.desc.xml | 0 .../uploader-plus/upload-folders-list.get.js | 0 .../upload-folders-list.get.json.ftl | 0 .../upload-folders-new.post.desc.xml | 0 .../uploader-plus/upload-folders-new.post.js | 0 .../upload-folders-new.post.json.ftl | 0 .../uploader-plus/upload.post.desc.xml | 0 .../uploader-plus/upload.post.html.ftl | 0 .../uploader-plus/upload.post.html.status.ftl | 0 .../softwareloop/uploader-plus/upload.post.js | 2 +- .../uploader-plus/upload.post.json.ftl | 0 .../alfresco-global.properties | 4 +- .../context/bootstrap-context.xml | 24 + .../context/service-context.xml | 24 + .../context/webscript-context.xml | 16 +- .../uploader-plus-platform/log4j2.properties | 1 + .../messages/uploader-plus.properties | 0 .../messages/uploader-plus_de.properties | 0 .../messages/uploader-plus_es.properties | 0 .../messages/uploader-plus_it.properties | 0 .../messages/uploader-plus_nl.properties | 0 .../messages/uploader-plus_pt_BR.properties | 0 .../messages/uploader-plus_ru.properties | 0 .../model/uploader-plus-model.xml | 0 .../module-context.xml | 11 +- .../uploader-plus-platform}/module.properties | 94 +-- uploader-plus-share-docker/pom.xml | 73 ++ .../src/main/docker/Dockerfile | 16 + .../src/main/docker/hotswap-agent.properties | 49 ++ .../src/main/docker/log4j2.properties | 86 +++ .../src/main/docker}/share-config-custom.xml | 25 +- uploader-plus-share/pom.xml | 40 + uploader-plus-share/src/main/assembly/amp.xml | 66 ++ .../src/main/assembly/file-mapping.properties | 27 + .../src/main/assembly/web/README.md | 22 + .../uploader-plus/css/uploader-plus-admin.css | 0 .../uploader-plus/css/uploader-plus.css | 0 .../components/uploader-plus/js/common.js | 0 .../components/uploader-plus/js/common.min.js | 3 + .../uploader-plus/js/dnd-upload-plus.js | 86 +-- .../uploader-plus/js/dnd-upload-plus.min.js | 17 + .../uploader-plus/js/html-upload-plus.js | 0 .../uploader-plus/js/html-upload-plus.min.js | 8 + .../uploader-plus/js/uploader-plus-admin.js | 3 +- .../js/uploader-plus-admin.min.js | 18 + .../uploader-plus/js/uploader-plus-mixin.js | 0 .../js/uploader-plus-mixin.min.js | 18 + .../META-INF/share-config-custom.xml | 30 +- .../uploader-plus-share/log4j2.properties | 1 + .../uploader-plus-share}/module.properties | 94 +-- .../messages/uploader-plus.properties | 0 .../messages/uploader-plus_de.properties | 0 .../messages/uploader-plus_es.properties | 0 .../messages/uploader-plus_it.properties | 0 .../messages/uploader-plus_nl.properties | 0 .../messages/uploader-plus_pt_BR.properties | 0 .../messages/uploader-plus_ru.properties | 0 ...ploader-plus-share-webscript-overrides.xml | 27 +- .../customization/file-upload.get.html.ftl | 0 .../uploader-plus/controls/selecttypes.ftl | 0 .../uploader-plus-admin.get.desc.xml | 0 .../uploader-plus-admin.get.html.ftl | 0 .../uploader-plus/uploader-plus-admin.get.js | 0 .../uploader-plus-admin.get.properties | 0 .../uploader-plus-admin.get_de.properties | 0 .../uploader-plus-admin.get_es.properties | 0 .../uploader-plus-admin.get_it.properties | 0 .../uploader-plus-admin.get_pt_BR.properties | 0 .../uploader-plus-admin.get_ru.properties | 0 .../uploader/dnd-upload.get.desc.xml | 0 .../uploader/dnd-upload.get.html.ftl | 0 .../uploader-plus/uploader/dnd-upload.get.js | 0 .../uploader/dnd-upload.get.properties | 0 .../uploader/dnd-upload.get_de.properties | 0 .../uploader/dnd-upload.get_es.properties | 0 .../uploader/dnd-upload.get_fr.properties | 0 .../uploader/dnd-upload.get_it.properties | 0 .../uploader/dnd-upload.get_ja.properties | 0 .../uploader/dnd-upload.get_nb.properties | 0 .../uploader/dnd-upload.get_nl.properties | 0 .../uploader/dnd-upload.get_pt_BR.properties | 0 .../uploader/dnd-upload.get_ru.properties | 0 .../uploader/dnd-upload.get_zh_CN.properties | 0 .../uploader/html-upload.get.desc.xml | 0 .../uploader/html-upload.get.html.ftl | 0 .../uploader-plus/uploader/html-upload.get.js | 0 .../uploader/html-upload.get.properties | 0 .../uploader/html-upload.get_de.properties | 0 .../uploader/html-upload.get_es.properties | 0 .../uploader/html-upload.get_fr.properties | 0 .../uploader/html-upload.get_it.properties | 0 .../uploader/html-upload.get_ja.properties | 0 .../uploader/html-upload.get_nb.properties | 0 .../uploader/html-upload.get_nl.properties | 0 .../uploader/html-upload.get_pt_BR.properties | 0 .../uploader/html-upload.get_ru.properties | 0 .../uploader/html-upload.get_zh_CN.properties | 0 .../site-webscripts/org/alfresco/README.md | 6 + ...us-share-slingshot-application-context.xml | 26 + 162 files changed, 2485 insertions(+), 2225 deletions(-) delete mode 100644 LICENSE create mode 100644 docker/docker-compose.yml delete mode 100644 docs/alfresco-uploader-plus-diagrams.pdf delete mode 100755 maven-central-deploy.sh delete mode 100644 repo/.gitignore delete mode 100644 repo/pom.xml delete mode 100644 repo/run.bat delete mode 100755 repo/run.sh delete mode 100644 repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/bootstrap-context.xml delete mode 100644 repo/src/main/amp/config/alfresco/module/uploader-plus-repo/log4j.properties delete mode 100644 repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_fr.properties delete mode 100644 repo/src/main/java/com/softwareloop/uploderplus/ListContentTypesGet.java delete mode 100644 repo/src/test/resources/log4j.properties delete mode 100644 repo/tomcat/context.xml create mode 100644 run.bat create mode 100644 run.sh delete mode 100644 surf/.gitignore delete mode 100644 surf/pom.xml delete mode 100644 surf/run.bat delete mode 100755 surf/run.sh delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_fr.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_fr.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.desc.xml delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.html.ftl delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.js delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_de.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_es.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_fr.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_it.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ja.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nb.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nl.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_pt_BR.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ru.properties delete mode 100644 surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_zh_CN.properties delete mode 100644 surf/src/main/amp/config/org/springframework/extensions/surf/uploader-plus-surf-context.xml delete mode 100644 surf/src/main/amp/web/components/uploader-plus/js/flash-upload-plus.js delete mode 100644 surf/src/test/resources/log4j.properties delete mode 100644 surf/tomcat/context.xml create mode 100644 uploader-plus-integration-tests/pom.xml create mode 100644 uploader-plus-platform-docker/pom.xml create mode 100644 uploader-plus-platform-docker/src/main/docker/Dockerfile rename {repo/src/test/properties/local => uploader-plus-platform-docker/src/main/docker}/alfresco-global.properties (64%) create mode 100644 uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties rename {repo/src/test/resources/alfresco/extension => uploader-plus-platform-docker/src/main/docker}/disable-webscript-caching-context.xml (100%) create mode 100644 uploader-plus-platform-docker/src/main/docker/hotswap-agent.properties create mode 100644 uploader-plus-platform-docker/src/main/docker/license/README.md create mode 100644 uploader-plus-platform/pom.xml create mode 100644 uploader-plus-platform/src/main/assembly/amp.xml rename {surf/src/main/amp => uploader-plus-platform/src/main/assembly}/file-mapping.properties (60%) create mode 100644 uploader-plus-platform/src/main/assembly/web/README.md create mode 100644 uploader-plus-platform/src/main/java/com/softwareloop/uploaderplus/ListContentTypesGet.java rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml (80%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.js (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.json.ftl (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.config.xml (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.desc.xml (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.js (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.json.ftl (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.desc.xml (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.js (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.json.ftl (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.desc.xml (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.js (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.json.ftl (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload.post.desc.xml (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.ftl (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.status.ftl (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js (100%) rename {repo/src/main/amp/config/alfresco => uploader-plus-platform/src/main/resources/alfresco/extension}/templates/webscripts/com/softwareloop/uploader-plus/upload.post.json.ftl (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/alfresco-global.properties (62%) create mode 100644 uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/bootstrap-context.xml create mode 100644 uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/service-context.xml rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/context/webscript-context.xml (62%) create mode 100644 uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/log4j2.properties rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus_de.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus_es.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus_it.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus_nl.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus_pt_BR.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/messages/uploader-plus_ru.properties (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/model/uploader-plus-model.xml (100%) rename {repo/src/main/amp/config/alfresco/module/uploader-plus-repo => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/module-context.xml (57%) rename {repo/src/main/amp => uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform}/module.properties (95%) create mode 100644 uploader-plus-share-docker/pom.xml create mode 100644 uploader-plus-share-docker/src/main/docker/Dockerfile create mode 100644 uploader-plus-share-docker/src/main/docker/hotswap-agent.properties create mode 100644 uploader-plus-share-docker/src/main/docker/log4j2.properties rename {surf/src/test/resources/alfresco/web-extension => uploader-plus-share-docker/src/main/docker}/share-config-custom.xml (77%) create mode 100644 uploader-plus-share/pom.xml create mode 100644 uploader-plus-share/src/main/assembly/amp.xml create mode 100644 uploader-plus-share/src/main/assembly/file-mapping.properties create mode 100644 uploader-plus-share/src/main/assembly/web/README.md rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/css/uploader-plus-admin.css (100%) rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/css/uploader-plus.css (100%) rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/js/common.js (100%) create mode 100644 uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/common.min.js rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/js/dnd-upload-plus.js (85%) create mode 100644 uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/js/html-upload-plus.js (100%) create mode 100644 uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/html-upload-plus.min.js rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/js/uploader-plus-admin.js (99%) create mode 100644 uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/uploader-plus-admin.min.js rename {surf/src/main/amp/web => uploader-plus-share/src/main/resources/META-INF}/components/uploader-plus/js/uploader-plus-mixin.js (100%) create mode 100644 uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/uploader-plus-mixin.min.js rename {surf => uploader-plus-share}/src/main/resources/META-INF/share-config-custom.xml (60%) create mode 100644 uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/log4j2.properties rename {surf/src/main/amp => uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share}/module.properties (95%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus_de.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus_es.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus_it.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus_nl.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus_pt_BR.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/messages/uploader-plus_ru.properties (100%) rename surf/src/main/amp/config/alfresco/web-extension/site-data/extensions/uploader-plus-surf.xml => uploader-plus-share/src/main/resources/alfresco/web-extension/site-data/extensions/uploader-plus-share-webscript-overrides.xml (83%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/customization/file-upload.get.html.ftl (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/controls/selecttypes.ftl (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.desc.xml (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.html.ftl (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.js (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_de.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_es.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_it.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_pt_BR.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_ru.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.desc.xml (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.html.ftl (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.js (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_de.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_es.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_fr.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_it.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ja.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nb.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nl.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_pt_BR.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ru.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_zh_CN.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.desc.xml (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.html.ftl (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.js (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_de.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_es.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_fr.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_it.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ja.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nb.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nl.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_pt_BR.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ru.properties (100%) rename {surf/src/main/amp/config => uploader-plus-share/src/main/resources}/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_zh_CN.properties (100%) create mode 100644 uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/org/alfresco/README.md create mode 100644 uploader-plus-share/src/main/resources/alfresco/web-extension/uploader-plus-share-slingshot-application-context.xml diff --git a/.gitignore b/.gitignore index 572434e..6dfea5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,38 @@ -/target -/*/target -/*/overlays -/repo/alf_data_dev/ -/alf_data_dev -/repo/alfresco.log* -/surf/share.log* -/.idea -*.DS_Store -*.iml -*.ipr -*.iws -*~ -*.bak -*.orig -*.log -*.project -/.settings/ -surf/.idea +**.log* + +# Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +# Eclipse +.metadata +.project +.classpath +bin/ +tmp/ +*.tmp +.settings/ +.loadpath +.recommenders + +# IntelliJ IDEA +**.idea +**.iml + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# macOS +*.DS_Store \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index fb6d90b..0000000 --- a/LICENSE +++ /dev/null @@ -1,166 +0,0 @@ -GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/README.md b/README.md index ac9323e..a6dbd8e 100644 --- a/README.md +++ b/README.md @@ -29,4 +29,5 @@ Contributors: * [Alexander Mahabir](https://github.com/alex4u2nv) * [Roxana Angheluta](https://github.com/anghelutar) * [tomasrgar](https://github.com/tomasrgar) -* [Tom Vandepoele](https://github.com/tom-vandepoele) \ No newline at end of file +* [Tom Vandepoele](https://github.com/tom-vandepoele) +* [Roberto Gamiz](https://github.com/rgamiz) \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..ece6740 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,76 @@ +version: '3.4' +services: + uploader-plus-share: + image: alfresco-share-uploader-plus:development + build: + dockerfile: ./Dockerfile + context: ../../../uploader-plus-share-docker/target + environment: + CATALINA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8888" + REPO_HOST: uploader-plus-acs + REPO_PORT: 8080 + ports: + - "${share.port}:8080" + - "${share.debug.port}:8888" + uploader-plus-acs: + image: alfresco-content-services-uploader-plus:development + build: + dockerfile: ./Dockerfile + context: ../../../uploader-plus-platform-docker/target + environment: + JAVA_TOOL_OPTIONS: "${keystore.settings}" + JAVA_OPTS: " + -Dsolr.secureComms=secret + -Dsolr.sharedSecret=secret + -Dmessaging.broker.url=\"failover:(nio://uploader-plus-activemq:61616)?timeout=3000&jms.useCompression=true\" + " + CATALINA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8888" + ports: + - "${acs.port}:8080" + - "${acs.debug.port}:8888" + volumes: + - uploader-plus-acs-volume:/usr/local/tomcat/alf_data + depends_on: + - uploader-plus-postgres + uploader-plus-postgres: + image: postgres:9.6 + environment: + POSTGRES_DB: alfresco + POSTGRES_USER: alfresco + POSTGRES_PASSWORD: alfresco + command: postgres -c max_connections=300 -c log_min_messages=LOG + ports: + - "${postgres.port}:5432" + volumes: + - uploader-plus-db-volume:/var/lib/postgresql/data + uploader-plus-ass: + image: alfresco/alfresco-search-services:2.0.3 + environment: + SOLR_ALFRESCO_HOST: uploader-plus-acs + SOLR_ALFRESCO_PORT: 8080 + SOLR_SOLR_HOST: uploader-plus-ass + SOLR_SOLR_PORT: 8983 + SOLR_CREATE_ALFRESCO_DEFAULTS: alfresco,archive + ALFRESCO_SECURE_COMMS: "secret" + JAVA_TOOL_OPTIONS: "-Dalfresco.secureComms.secret=secret" + ports: + - "8983:8983" + volumes: + - uploader-plus-ass-volume:/opt/alfresco-search-services/contentstore + - uploader-plus-ass-volume:/opt/alfresco-search-services/data + uploader-plus-activemq: + image: alfresco/alfresco-activemq:5.16.1 + mem_limit: 1g + ports: + - 8161:8161 # Web Console + - 5672:5672 # AMQP + - 61616:61616 # OpenWire + - 61613:61613 # STOMP + +volumes: + uploader-plus-acs-volume: + external: true + uploader-plus-db-volume: + external: true + uploader-plus-ass-volume: + external: true diff --git a/docs/alfresco-uploader-plus-diagrams.pdf b/docs/alfresco-uploader-plus-diagrams.pdf deleted file mode 100644 index 2de1dcf1c3790e688a68a22bcd28979551b572f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90578 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�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 z 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 - - 4.0.0 - com.softwareloop - uploader-plus - 1.8 - pom - - uploader-plus - An Alfresco uploader that prompts for metadata - https://github.com/softwareloop/uploader-plus - - - - GNU LESSER GENERAL PUBLIC LICENSE, Version 3 - http://www.gnu.org/licenses/lgpl.html - repo - OSI-approved license - - - - - scm:git:git@github.com:softwareloop/uploader-plus.git - scm:git:git@github.com:softwareloop/uploader-plus.git - git@github.com:softwareloop/uploader-plus.git - HEAD - - - - - Paolo Predonzani - paolo.predonzani@gmail.com - https://github.com/softwareloop - - - Douglas C. R. Paes - https://github.com/douglascrp - - - Younes Regaieg - https://github.com/yregaieg - - - - - - Axel Faust - https://github.com/AFaust - - - Stéphane Prouvez - https://github.com/sprouvez - - - Oksana Kurysheva - https://github.com/aviriel - - - Magnus Pedersen - https://github.com/magp3 - - - Alexander Mahabir - https://github.com/alex4u2nv - - - Roxana Angheluta - https://github.com/anghelutar - - - tomasrgar - https://github.com/tomasrgar - - - Tom Vandepoele - https://github.com/tom-vandepoele - - - - - org.alfresco.maven - alfresco-sdk-parent - 2.2.0 - - - - repo - surf - - - - + + 4.0.0 + com.softwareloop + uploader-plus + 2.0 + uploader-plus + An Alfresco uploader that prompts for metadata + https://github.com/softwareloop/uploader-plus + pom + + 3.3.0 + + + + 4.10.0 + UTF-8 + + org.alfresco + acs-community-packaging + 23.4.1 + alfresco + 23.4.0.46 + 23.4.0 + + alfresco/alfresco-content-repository-community + alfresco/alfresco-share + -Dencryption.keystore.type=JCEKS -Dencryption.cipherAlgorithm=AES/CBC/PKCS5Padding -Dencryption.keyAlgorithm=AES -Dencryption.keystore.location=/usr/local/tomcat/shared/classes/alfresco/extension/keystore/keystore -Dmetadata-keystore.password=mp6yc0UD9e -Dmetadata-keystore.aliases=metadata -Dmetadata-keystore.metadata.password=oKIWzVdEdA -Dmetadata-keystore.metadata.algorithm=AES + + 1.1.8 + + 8180 + 9898 + uploader-plus-acs + 8080 + 8888 + 5555 + + + + + + + + junit + junit + test + + + org.mockito + mockito-core + 4.2.0 + test + + + org.apache.httpcomponents + httpclient + test + + + + ${alfresco.groupId} + alfresco-remote-api + provided + + + + org.alfresco.maven + alfresco-rad + ${alfresco.sdk.version} + test + + + + + + + ${alfresco.groupId} + ${alfresco.bomDependencyArtifactId} + ${alfresco.platform.version} + pom + import + + + + ${alfresco.groupId} + share + ${alfresco.share.version} + war + provided + + + ${alfresco.groupId} + share + ${alfresco.share.version} + classes + provided + + + ${alfresco.groupId} + alfresco-web-framework-commons + ${alfresco.share.version} + classes + provided + + + + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + UTF-8 + + + ftl + acp + svg + pdf + doc + docx + xls + xlsx + ppt + pptx + bin + lic + swf + zip + msg + jar + ttf + eot + woff + woff2 + css + ico + psd + js + + + + + org.zeroturnaround + jrebel-maven-plugin + ${jrebel.version} + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-failsafe-plugin + 3.0.0-M1 + + + integration-test + integration-test + + integration-test + + + + verify-test + verify + + verify + + + + - ${alfresco.groupId} - alfresco-platform-distribution - ${alfresco.version} - pom - import + org.apache.maven.surefire + surefire-junit47 + 3.0.0-M1 - - - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.1.1 + + + + + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-resources-plugin + false + + + + copy-and-filter-docker-resources + validate + + copy-resources + + + ${project.build.outputDirectory}/docker + + + docker + true + + + + + + + + + com.github.blutorange + closure-compiler-maven-plugin + 2.28.0 + + + + compress-assembly + generate-resources + + minify + + + ${project.basedir}/src/main/assembly + ${project.basedir}/src/main/assembly + web + web + true + + **/*.js + + + **/webscripts/** + **/site-webscripts/** + **/META-INF/** + **/*.lib.js + **/*.css + **/*.min.js + **/*.min.css + + true + + + + + compress-resources + generate-resources + + minify + + + ${project.basedir}/src/main + ${project.basedir}/src/main + resources + resources + true + + **/*.js + + + **/webscripts/** + **/site-webscripts/** + **/*.lib.js + **/*.css + **/*.min.js + **/*.min.css + + true + + + + + + + org.zeroturnaround + jrebel-maven-plugin + + + generate-rebel-xml + process-resources + + generate + + + + + + + all + + + ${project.build.outputDirectory} + ${project.build.testOutputDirectory} + + + + + true + + + + + + + java8 + + [1.8,11.0) + + - - org.apache.maven.plugins - maven-resources-plugin - 2.7 - - UTF-8 - - ftl - acp - jpg - png - gif - pdf - doc - xls - ppt - bin - lic - swf - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.2 - - - enforce-maven - - enforce - - - - - (,2.1.0),(2.1.0,2.2.0),(2.2.0,) - Maven 2.1.0 and 2.2.0 produce incorrect GPG signatures and checksums respectively. - - - - - - + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.1 - - forked-path - false - -Psonatype-oss-release - true - v@{project.version} - - - - - - - - sonatype-oss-release - - - - org.apache.maven.plugins - maven-source-plugin - 2.4 - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.1 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - - - - - - sonatype-nexus-snapshots - Sonatype Nexus Snapshots - https://oss.sonatype.org/content/repositories/snapshots - - false - - - true - - - - + + + + java11 + + [11.0,17) + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + + + + + + + java17 + + [17,) + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 17 + + + + + + + + + + alfresco-public + https://artifacts.alfresco.com/nexus/content/groups/public + + + alfresco-public-snapshots + https://artifacts.alfresco.com/nexus/content/groups/public-snapshots + + true + daily + + + + + alfresco-private-repository + https://artifacts.alfresco.com/nexus/content/groups/private + + + alfresco-internal + https://artifacts.alfresco.com/nexus/content/groups/internal + + + + + alfresco-plugin-public + https://artifacts.alfresco.com/nexus/content/groups/public + + + alfresco-plugin-public-snapshots + https://artifacts.alfresco.com/nexus/content/groups/public-snapshots + + true + daily + + + + + uploader-plus-platform + uploader-plus-share + uploader-plus-integration-tests + uploader-plus-platform-docker + uploader-plus-share-docker + diff --git a/repo/.gitignore b/repo/.gitignore deleted file mode 100644 index f96903e..0000000 --- a/repo/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/.settings/ -*.classpath -/.idea/ diff --git a/repo/pom.xml b/repo/pom.xml deleted file mode 100644 index a975458..0000000 --- a/repo/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - 4.0.0 - uploader-plus-repo - uploader-plus-repo - amp - uploader-plus AMP for Alfresco repository - https://github.com/softwareloop/uploader-plus - - - com.softwareloop - uploader-plus - 1.8 - - - - - - - - - - - - - - - - - ${alfresco.groupId} - alfresco-platform-distribution - ${alfresco.version} - pom - import - - - - - - - - ${alfresco.groupId} - alfresco-repository - - - - - ${alfresco.groupId} - alfresco-repository - ${alfresco.version} - h2scripts - test - - - * - * - - - - - - ${alfresco.groupId} - alfresco-remote-api - - - org.springframework.social - * - - - - - - ${alfresco.groupId} - alfresco-repository - - - org.springframework.social - * - - - - - - - - - enterprise - - - ${alfresco.groupId} - alfresco-enterprise-repository - ${alfresco.version} - provided - - - - - diff --git a/repo/run.bat b/repo/run.bat deleted file mode 100644 index 03523c1..0000000 --- a/repo/run.bat +++ /dev/null @@ -1,8 +0,0 @@ -@ECHO OFF - -IF "%MAVEN_OPTS%" == "" ( - ECHO The environment variable 'MAVEN_OPTS' is not set, setting it for you - SET MAVEN_OPTS=-Xms256m -Xmx2G -XX:PermSize=300m -) -ECHO MAVEN_OPTS is set to '%MAVEN_OPTS%' -mvn clean install -Pamp-to-war diff --git a/repo/run.sh b/repo/run.sh deleted file mode 100755 index 1df845e..0000000 --- a/repo/run.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if [[ -z ${MAVEN_OPTS} ]]; then - echo "The environment variable 'MAVEN_OPTS' is not set, setting it for you"; - MAVEN_OPTS="-Xms256m -Xmx1524m -XX:PermSize=300m" -fi -echo "MAVEN_OPTS is set to '$MAVEN_OPTS'"; -mvn clean install -Pamp-to-war \ No newline at end of file diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/bootstrap-context.xml b/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/bootstrap-context.xml deleted file mode 100644 index 2a08281..0000000 --- a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/bootstrap-context.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - alfresco/module/uploader-plus-repo/model/uploader-plus-model.xml - - - - - alfresco/module/uploader-plus-repo/messages/uploader-plus - - - - - \ No newline at end of file diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/log4j.properties b/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/log4j.properties deleted file mode 100644 index 18485cd..0000000 --- a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/log4j.properties +++ /dev/null @@ -1,40 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#----------------------------------------------------------------------- -# uploader-plus-repo module log4j.properties -# -# NOTE -# ---- -# Log4j uses the following logging levels: -# debug,info,warn,error,fatal -# -# To set the logging level of {fullClassName} to {loglevel}, -# add a line to this file of the following form: -# -# log4j.logger.{fullClassName}={loglevel} -# -# For example, to make 'com.example.MyExample' produce 'debug' -# logs, add a line like this: -# -# log4j.logger.com.example.MyExample=debug -# -# -# WARNING -# ------- -# Log properties in this log4j.properties file override/augment -# those in the webapp's main log4j.properties. -# -#----------------------------------------------------------------------- -log4j.logger.com.softwareloop.demoamp.DemoComponent=debug diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_fr.properties b/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_fr.properties deleted file mode 100644 index dc2803d..0000000 --- a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_fr.properties +++ /dev/null @@ -1,2 +0,0 @@ -up_UploaderPlus.aspect.up_UploadFolder.title = R\u00e9pertoire de t\u00e9l\u00e9versement -up_UploaderPlus.property.up_allowedTypes.title = Types trouv\u00e9s \ No newline at end of file diff --git a/repo/src/main/java/com/softwareloop/uploderplus/ListContentTypesGet.java b/repo/src/main/java/com/softwareloop/uploderplus/ListContentTypesGet.java deleted file mode 100644 index 9f88b85..0000000 --- a/repo/src/main/java/com/softwareloop/uploderplus/ListContentTypesGet.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.softwareloop.uploderplus; - -import org.alfresco.model.ContentModel; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.alfresco.service.namespace.QName; -import org.apache.log4j.Logger; -import org.springframework.extensions.webscripts.Cache; -import org.springframework.extensions.webscripts.DeclarativeWebScript; -import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptRequest; - -import java.util.*; - -/** - * @author Paolo Predonzani (https://github.com/softwareloop) - */ -public class ListContentTypesGet extends DeclarativeWebScript { - //-------------------------------------------------------------------------- - // Logging - //-------------------------------------------------------------------------- - - static Logger logger = Logger.getLogger(ListContentTypesGet.class); - - //-------------------------------------------------------------------------- - // Constants - //-------------------------------------------------------------------------- - - //-------------------------------------------------------------------------- - // Fields - //-------------------------------------------------------------------------- - - final DictionaryService dictionaryService; - - //-------------------------------------------------------------------------- - // Constructors - //-------------------------------------------------------------------------- - - public ListContentTypesGet(DictionaryService dictionaryService) { - this.dictionaryService = dictionaryService; - } - - - //-------------------------------------------------------------------------- - // AbstractWebScript implementations - //-------------------------------------------------------------------------- - - @Override - protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - logger.debug("ListContentTypesGet.execute()"); - - Map model = new HashMap<>(); - - Collection subtypes = - dictionaryService.getSubTypes(ContentModel.TYPE_CONTENT, true); - - List typesCollection = new ArrayList<>(); - for (QName subtype : subtypes) { - typesCollection.add(subtype.getPrefixString()); - } - Collections.sort(typesCollection); - - model.put("types", typesCollection.toArray()); - - logger.debug("END ListContentTypesGet.execute()"); - return model; - } - - //-------------------------------------------------------------------------- - // Methods - //-------------------------------------------------------------------------- - - //-------------------------------------------------------------------------- - // Abstract methods - //-------------------------------------------------------------------------- - - //-------------------------------------------------------------------------- - // Getters/setters - //-------------------------------------------------------------------------- - -} diff --git a/repo/src/test/resources/log4j.properties b/repo/src/test/resources/log4j.properties deleted file mode 100644 index bf4a472..0000000 --- a/repo/src/test/resources/log4j.properties +++ /dev/null @@ -1,266 +0,0 @@ -# This is a full override of Alfresco 4.2.b log4j.properties -# This file overwrites the alfresco.war log4j.properties - -# Set root logger level to error -log4j.rootLogger=${app.log.root.level}, Console, File - -###### Console appender definition ####### - -# All outputs currently set to be a ConsoleAppender. -log4j.appender.Console=org.apache.log4j.ConsoleAppender -log4j.appender.Console.layout=org.apache.log4j.PatternLayout - -# use log4j NDC to replace %x with tenant domain / username -log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %m%n -#log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n - -###### File appender definition ####### -log4j.appender.File=org.apache.log4j.DailyRollingFileAppender -log4j.appender.File.File=${app.log.dir}alfresco.log -log4j.appender.File.Append=true -log4j.appender.File.DatePattern='.'yyyy-MM-dd -log4j.appender.File.layout=org.apache.log4j.PatternLayout -log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n - -###### Hibernate specific appender definition ####### -#log4j.appender.file=org.apache.log4j.FileAppender -#log4j.appender.file.File=hibernate.log -#log4j.appender.file.layout=org.apache.log4j.PatternLayout -#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -###### Log level overrides ####### - -# Commented-in loggers will be exposed as JMX MBeans (refer to org.alfresco.repo.admin.Log4JHierarchyInit) -# Hence, generally useful loggers should be listed with at least ERROR level to allow simple runtime -# control of the level via a suitable JMX Console. Also, any other loggers can be added transiently via -# Log4j addLoggerMBean as long as the logger exists and has been loaded. - -# Hibernate -log4j.logger.org.hibernate=error -log4j.logger.org.hibernate.util.JDBCExceptionReporter=fatal -log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=fatal -log4j.logger.org.hibernate.type=warn -log4j.logger.org.hibernate.cfg.SettingsFactory=warn - -# Spring -log4j.logger.org.springframework=warn -# Turn off Spring remoting warnings that should really be info or debug. -log4j.logger.org.springframework.remoting.support=error -log4j.logger.org.springframework.util=error - -# Axis/WSS4J -log4j.logger.org.apache.axis=info -log4j.logger.org.apache.ws=info - -# CXF -log4j.logger.org.apache.cxf=error - -# MyFaces -log4j.logger.org.apache.myfaces.util.DebugUtils=info -log4j.logger.org.apache.myfaces.el.VariableResolverImpl=error -log4j.logger.org.apache.myfaces.application.jsp.JspViewHandlerImpl=error -log4j.logger.org.apache.myfaces.taglib=error - -# OpenOfficeConnection -log4j.logger.net.sf.jooreports.openoffice.connection=fatal - -# log prepared statement cache activity ### -log4j.logger.org.hibernate.ps.PreparedStatementCache=info - -# Alfresco -log4j.logger.org.alfresco=error -log4j.logger.org.alfresco.repo.admin=info -log4j.logger.org.alfresco.repo.cache.TransactionalCache=warn -log4j.logger.org.alfresco.repo.model.filefolder=warn -log4j.logger.org.alfresco.repo.tenant=info -log4j.logger.org.alfresco.repo.avm=info -log4j.logger.org.alfresco.config=warn -log4j.logger.org.alfresco.config.JndiObjectFactoryBean=warn -log4j.logger.org.alfresco.config.JBossEnabledWebApplicationContext=warn -log4j.logger.org.alfresco.repo.management.subsystems=warn -log4j.logger.org.alfresco.repo.management.subsystems.ChildApplicationContextFactory=info -log4j.logger.org.alfresco.repo.management.subsystems.ChildApplicationContextFactory$ChildApplicationContext=warn -log4j.logger.org.alfresco.repo.security.sync=info -log4j.logger.org.alfresco.repo.security.person=info - -log4j.logger.org.alfresco.sample=info -log4j.logger.org.alfresco.web=info -#log4j.logger.org.alfresco.web.app.AlfrescoNavigationHandler=debug -#log4j.logger.org.alfresco.web.ui.repo.component.UIActions=debug -#log4j.logger.org.alfresco.web.ui.repo.tag.PageTag=debug -#log4j.logger.org.alfresco.web.bean.clipboard=debug -log4j.logger.org.alfresco.repo.webservice=info -log4j.logger.org.alfresco.service.descriptor.DescriptorService=info -#log4j.logger.org.alfresco.web.page=debug - -log4j.logger.org.alfresco.repo.importer.ImporterBootstrap=error -#log4j.logger.org.alfresco.repo.importer.ImporterBootstrap=info - -log4j.logger.org.alfresco.web.ui.common.Utils=error -#log4j.logger.org.alfresco.web.ui.common.Utils=info - -log4j.logger.org.alfresco.repo.admin.patch.PatchExecuter=info -log4j.logger.org.alfresco.repo.domain.patch.ibatis.PatchDAOImpl=info - -# Specific patches -log4j.logger.org.alfresco.repo.admin.patch.impl.DeploymentMigrationPatch=info -log4j.logger.org.alfresco.repo.version.VersionMigrator=info -log4j.logger.org.alfresco.repo.admin.patch.impl.ResetWCMToGroupBasedPermissionsPatch=info - -log4j.logger.org.alfresco.repo.module.ModuleServiceImpl=info -log4j.logger.org.alfresco.repo.domain.schema.SchemaBootstrap=info -log4j.logger.org.alfresco.repo.admin.ConfigurationChecker=info -log4j.logger.org.alfresco.repo.node.index.AbstractReindexComponent=warn -log4j.logger.org.alfresco.repo.node.index.IndexTransactionTracker=warn -log4j.logger.org.alfresco.repo.node.index.FullIndexRecoveryComponent=info -log4j.logger.org.alfresco.repo.node.index.AVMFullIndexRecoveryComponent=info -log4j.logger.org.alfresco.util.OpenOfficeConnectionTester=info -log4j.logger.org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl=warn -log4j.logger.org.alfresco.repo.domain.hibernate.DirtySessionMethodInterceptor=warn -log4j.logger.org.alfresco.repo.transaction.RetryingTransactionHelper=warn -log4j.logger.org.alfresco.util.transaction.SpringAwareUserTransaction.trace=warn -log4j.logger.org.alfresco.util.AbstractTriggerBean=warn -log4j.logger.org.alfresco.enterprise.repo.cache.cluster.KeepAliveHeartbeatReceiver=info -log4j.logger.org.alfresco.repo.version.Version2ServiceImpl=warn - -#log4j.logger.org.alfresco.web.app.DebugPhaseListener=debug - -log4j.logger.org.alfresco.repo.workflow=info - -# CIFS server debugging -log4j.logger.org.alfresco.smb.protocol=error -#log4j.logger.org.alfresco.smb.protocol.auth=debug -#log4j.logger.org.alfresco.acegi=debug - -# FTP server debugging -log4j.logger.org.alfresco.ftp.protocol=error -#log4j.logger.org.alfresco.ftp.server=debug - -# WebDAV debugging -#log4j.logger.org.alfresco.webdav.protocol=debug -log4j.logger.org.alfresco.webdav.protocol=error - -# NTLM servlet filters -#log4j.logger.org.alfresco.web.app.servlet.NTLMAuthenticationFilter=debug -#log4j.logger.org.alfresco.repo.webdav.auth.NTLMAuthenticationFilter=debug - -# Kerberos servlet filters -#log4j.logger.org.alfresco.web.app.servlet.KerberosAuthenticationFilter=debug -#log4j.logger.org.alfresco.repo.webdav.auth.KerberosAuthenticationFilter=debug - -# File servers -log4j.logger.org.alfresco.fileserver=warn - -# Repo filesystem debug logging -#log4j.logger.org.alfresco.filesys.repo.ContentDiskDriver=debug - -# AVM filesystem debug logging -#log4j.logger.org.alfresco.filesys.avm.AVMDiskDriver=debug - -# Integrity message threshold - if 'failOnViolation' is off, then WARNINGS are generated -log4j.logger.org.alfresco.repo.node.integrity=ERROR - -# Indexer debugging -log4j.logger.org.alfresco.repo.search.Indexer=error -#log4j.logger.org.alfresco.repo.search.Indexer=debug - -log4j.logger.org.alfresco.repo.search.impl.lucene.index=error -log4j.logger.org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexerImpl=warn -#log4j.logger.org.alfresco.repo.search.impl.lucene.index=DEBUG - -# Audit debugging -# log4j.logger.org.alfresco.repo.audit=DEBUG -# log4j.logger.org.alfresco.repo.audit.model=DEBUG - -# Forms debugging -# log4j.logger.org.alfresco.web.forms=debug -# log4j.logger.org.chiba.xml.xforms=debug -log4j.logger.org.alfresco.web.forms.xforms.XFormsBean=error -log4j.logger.org.alfresco.web.forms.XSLTRenderingEngine=error - -# Property sheet and modelling debugging -# change to error to hide the warnings about missing properties and associations -log4j.logger.alfresco.missingProperties=warn -log4j.logger.org.alfresco.web.ui.repo.component.property.UIChildAssociation=warn -log4j.logger.org.alfresco.web.ui.repo.component.property.UIAssociation=warn -#log4j.logger.org.alfresco.web.ui.repo.component.property=debug - -# Dictionary/Model debugging -log4j.logger.org.alfresco.repo.dictionary=warn -log4j.logger.org.alfresco.repo.dictionary.types.period=warn - -# Virtualization Server Registry -log4j.logger.org.alfresco.mbeans.VirtServerRegistry=error - -# Spring context runtime property setter -log4j.logger.org.alfresco.util.RuntimeSystemPropertiesSetter=info - -# Debugging options for clustering -log4j.logger.org.alfresco.repo.content.ReplicatingContentStore=error -log4j.logger.org.alfresco.repo.content.replication=error - -#log4j.logger.org.alfresco.repo.deploy.DeploymentServiceImpl=debug - -# Activity service -log4j.logger.org.alfresco.repo.activities=warn - -# User usage tracking -log4j.logger.org.alfresco.repo.usage=info - -# Sharepoint -log4j.logger.org.alfresco.module.vti=info - -# Forms Engine -log4j.logger.org.alfresco.repo.forms=info -log4j.logger.org.alfresco.web.config.forms=info -log4j.logger.org.alfresco.web.scripts.forms=info - -# CMIS -log4j.logger.org.alfresco.opencmis=error -log4j.logger.org.alfresco.opencmis.AlfrescoCmisServiceInterceptor=error -log4j.logger.org.alfresco.cmis=error -log4j.logger.org.alfresco.cmis.dictionary=warn -log4j.logger.org.apache.chemistry.opencmis=info - -# IMAP -log4j.logger.org.alfresco.repo.imap=info - -# JBPM -# Note: non-fatal errors (eg. logged during job execution) should be handled by Alfresco's retrying transaction handler -log4j.logger.org.jbpm.graph.def.GraphElement=fatal - -#log4j.logger.org.alfresco.repo.googledocs=debug - -###### Scripting ####### - -# Web Framework -log4j.logger.org.springframework.extensions.webscripts=info -log4j.logger.org.springframework.extensions.webscripts.ScriptLogger=warn -log4j.logger.org.springframework.extensions.webscripts.ScriptDebugger=off - -# Repository -log4j.logger.org.alfresco.repo.web.scripts=warn -log4j.logger.org.alfresco.repo.web.scripts.BaseWebScriptTest=info -log4j.logger.org.alfresco.repo.web.scripts.AlfrescoRhinoScriptDebugger=off -log4j.logger.org.alfresco.repo.jscript=error -log4j.logger.org.alfresco.repo.jscript.ScriptLogger=warn -log4j.logger.org.alfresco.repo.cmis.rest.CMISTest=info - -log4j.logger.org.alfresco.repo.avm.actions=info - -# Freemarker -# Note the freemarker.runtime logger is used to log non-fatal errors that are handled by Alfresco's retrying transaction handler -log4j.logger.freemarker.runtime= - -# Metadata extraction -log4j.logger.org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter=warn - -# Reduces PDFont error level due to ALF-7105 -log4j.logger.org.apache.pdfbox.pdmodel.font.PDSimpleFont=fatal -log4j.logger.org.apache.pdfbox.pdmodel.font.PDFont=fatal -log4j.logger.org.apache.pdfbox.pdmodel.font.PDCIDFont=fatal - -# no index support -log4j.logger.org.alfresco.repo.search.impl.noindex.NoIndexIndexer=fatal -log4j.logger.org.alfresco.repo.search.impl.noindex.NoIndexSearchService=fatal -log4j.logger.org.alfresco.demoamp.test=DEBUG \ No newline at end of file diff --git a/repo/tomcat/context.xml b/repo/tomcat/context.xml deleted file mode 100644 index 6ef60da..0000000 --- a/repo/tomcat/context.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..e4c784d --- /dev/null +++ b/run.bat @@ -0,0 +1,127 @@ +@ECHO OFF + +SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml + +IF [%M2_HOME%]==[] ( + SET MVN_EXEC=mvn +) + +IF NOT [%M2_HOME%]==[] ( + SET MVN_EXEC=%M2_HOME%\bin\mvn +) + +IF [%1]==[] ( + echo "Usage: %0 {build_start|build_start_it_supported|start|stop|purge|tail|reload_share|reload_acs|build_test|test}" + GOTO END +) + +IF %1==build_start ( + CALL :down + CALL :build + CALL :start + CALL :tail + GOTO END +) +IF %1==build_start_it_supported ( + CALL :down + CALL :build + CALL :prepare-test + CALL :start + CALL :tail + GOTO END +) +IF %1==start ( + CALL :start + CALL :tail + GOTO END +) +IF %1==stop ( + CALL :down + GOTO END +) +IF %1==purge ( + CALL:down + CALL:purge + GOTO END +) +IF %1==tail ( + CALL :tail + GOTO END +) +IF %1==reload_share ( + CALL :build_share + CALL :start_share + CALL :tail + GOTO END +) +IF %1==reload_acs ( + CALL :build_acs + CALL :start_acs + CALL :tail + GOTO END +) +IF %1==build_test ( + CALL :down + CALL :build + CALL :prepare-test + CALL :start + CALL :test + CALL :tail_all + CALL :down + GOTO END +) +IF %1==test ( + CALL :test + GOTO END +) +echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|reload_acs|build_test|test}" +:END +EXIT /B %ERRORLEVEL% + +:start + docker volume create uploader-plus-acs-volume + docker volume create uploader-plus-db-volume + docker volume create uploader-plus-ass-volume + docker compose -f "%COMPOSE_FILE_PATH%" up --build -d +EXIT /B 0 +:start_share + docker compose -f "%COMPOSE_FILE_PATH%" up --build -d uploader-plus-share +EXIT /B 0 +:start_acs + docker compose -f "%COMPOSE_FILE_PATH%" up --build -d uploader-plus-acs +EXIT /B 0 +:down + if exist "%COMPOSE_FILE_PATH%" ( + docker compose -f "%COMPOSE_FILE_PATH%" down + ) +EXIT /B 0 +:build + call %MVN_EXEC% clean package +EXIT /B 0 +:build_share + docker compose -f "%COMPOSE_FILE_PATH%" kill uploader-plus-share + docker compose -f "%COMPOSE_FILE_PATH%" rm -f uploader-plus-share + call %MVN_EXEC% clean package -pl uploader-plus-share,uploader-plus-share-docker +EXIT /B 0 +:build_acs + docker compose -f "%COMPOSE_FILE_PATH%" kill uploader-plus-acs + docker compose -f "%COMPOSE_FILE_PATH%" rm -f uploader-plus-acs + call %MVN_EXEC% clean package -pl uploader-plus-integration-tests,uploader-plus-platform,uploader-plus-platform-docker +EXIT /B 0 +:tail + docker compose -f "%COMPOSE_FILE_PATH%" logs -f +EXIT /B 0 +:tail_all + docker compose -f "%COMPOSE_FILE_PATH%" logs --tail="all" +EXIT /B 0 +:prepare-test + call %MVN_EXEC% verify -DskipTests=true -pl uploader-plus-platform,uploader-plus-integration-tests,uploader-plus-platform-docker +EXIT /B 0 +:test + call %MVN_EXEC% verify -pl uploader-plus-platform,uploader-plus-integration-tests +EXIT /B 0 +:purge + docker volume rm -f uploader-plus-acs-volume + docker volume rm -f uploader-plus-db-volume + docker volume rm -f uploader-plus-ass-volume +EXIT /B 0 \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..24f7d58 --- /dev/null +++ b/run.sh @@ -0,0 +1,122 @@ +#!/bin/sh + +export COMPOSE_FILE_PATH="${PWD}/target/classes/docker/docker-compose.yml" + +if [ -z "${M2_HOME}" ]; then + export MVN_EXEC="mvn" +else + export MVN_EXEC="${M2_HOME}/bin/mvn" +fi + +start() { + docker volume create uploader-plus-acs-volume + docker volume create uploader-plus-db-volume + docker volume create uploader-plus-ass-volume + docker compose -f "$COMPOSE_FILE_PATH" up --build -d +} + +start_share() { + docker compose -f "$COMPOSE_FILE_PATH" up --build -d uploader-plus-share +} + +start_acs() { + docker compose -f "$COMPOSE_FILE_PATH" up --build -d uploader-plus-acs +} + +down() { + if [ -f "$COMPOSE_FILE_PATH" ]; then + docker compose -f "$COMPOSE_FILE_PATH" down + fi +} + +purge() { + docker volume rm -f uploader-plus-acs-volume + docker volume rm -f uploader-plus-db-volume + docker volume rm -f uploader-plus-ass-volume +} + +build() { + $MVN_EXEC clean package +} + +build_share() { + docker compose -f "$COMPOSE_FILE_PATH" kill uploader-plus-share + yes | docker compose -f "$COMPOSE_FILE_PATH" rm -f uploader-plus-share + $MVN_EXEC clean package -pl uploader-plus-share,uploader-plus-share-docker +} + +build_acs() { + docker compose -f "$COMPOSE_FILE_PATH" kill uploader-plus-acs + yes | docker compose -f "$COMPOSE_FILE_PATH" rm -f uploader-plus-acs + $MVN_EXEC clean package -pl uploader-plus-integration-tests,uploader-plus-platform,uploader-plus-platform-docker +} + +tail() { + docker compose -f "$COMPOSE_FILE_PATH" logs -f +} + +tail_all() { + docker compose -f "$COMPOSE_FILE_PATH" logs --tail="all" +} + +prepare_test() { + $MVN_EXEC verify -DskipTests=true -pl uploader-plus-platform,uploader-plus-integration-tests,uploader-plus-platform-docker +} + +test() { + $MVN_EXEC verify -pl uploader-plus-platform,uploader-plus-integration-tests +} + +case "$1" in + build_start) + down + build + start + tail + ;; + build_start_it_supported) + down + build + prepare_test + start + tail + ;; + start) + start + tail + ;; + stop) + down + ;; + purge) + down + purge + ;; + tail) + tail + ;; + reload_share) + build_share + start_share + tail + ;; + reload_acs) + build_acs + start_acs + tail + ;; + build_test) + down + build + prepare_test + start + test + tail_all + down + ;; + test) + test + ;; + *) + echo "Usage: $0 {build_start|build_start_it_supported|start|stop|purge|tail|reload_share|reload_acs|build_test|test}" +esac \ No newline at end of file diff --git a/surf/.gitignore b/surf/.gitignore deleted file mode 100644 index 1ee639b..0000000 --- a/surf/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/.settings/ -*.classpath diff --git a/surf/pom.xml b/surf/pom.xml deleted file mode 100644 index c66e0c4..0000000 --- a/surf/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - 4.0.0 - uploader-plus-surf - uploader-plus-surf - amp - uploader-plus AMP for Alfresco Share - https://github.com/softwareloop/uploader-plus - - - com.softwareloop - uploader-plus - 1.8 - - - - - - - - - - - - ${alfresco.share.artifactId} - - - 8081 - - - http://localhost:8080/alfresco - - - - - - - - - ${alfresco.groupId} - alfresco-platform-distribution - ${alfresco.version} - pom - import - - - - - - - - ${alfresco.groupId} - share - ${alfresco.version} - classes - provided - - - org.springframework.extensions.surf - spring-surf-api - provided - - - - - - - - net.alchim31.maven - yuicompressor-maven-plugin - - - - \ No newline at end of file diff --git a/surf/run.bat b/surf/run.bat deleted file mode 100644 index ae97ed3..0000000 --- a/surf/run.bat +++ /dev/null @@ -1,3 +0,0 @@ -@ECHO OFF - -mvn clean install -Pamp-to-war \ No newline at end of file diff --git a/surf/run.sh b/surf/run.sh deleted file mode 100755 index 3ce06cc..0000000 --- a/surf/run.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Note. This script requires Alfresco.war to be running in another Tomcat on port 8080 - -if [[ -z ${MAVEN_OPTS} ]]; then - echo "The environment variable 'MAVEN_OPTS' is not set, setting it for you"; - - # Downloads the spring-loaded lib if not existing and runs the Share AMP applied to Share WAR - springloadedfile=~/.m2/repository/org/springframework/springloaded/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar - - if [ ! -f $springloadedfile ]; then - mvn validate -Psetup - fi - - # Spring loaded can be used with the Share AMP project in 5.1 - # (i.e. it does not have the same problem as Repo AMP and AIO) - MAVEN_OPTS="-javaagent:$springloadedfile -noverify" -fi -echo "MAVEN_OPTS is set to '$MAVEN_OPTS'"; -mvn clean install -Pamp-to-war \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_fr.properties b/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_fr.properties deleted file mode 100644 index e99f265..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_fr.properties +++ /dev/null @@ -1,5 +0,0 @@ -tool.uploader-plus-admin.label=Uploader Plus -tool.uploader-plus-admin.description=Uploader Plus -aspect.up_UploadFolder=R\u00e9pertoire de t\u00e9l\u00e9versement -content.type=Type de contenu -uploader.plus.next=Suivant diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_fr.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_fr.properties deleted file mode 100644 index b6cada4..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_fr.properties +++ /dev/null @@ -1,12 +0,0 @@ -title.path = Chemin -title.allowed.types = Types autoris\u00e9s -title.actions = Actions -loading.folders = R\u00e9pertoire de t\u00e9l\u00e9versement -no.folders.found = Aucun dossier trouv\u00e9 -upload.folders = Upload folders -open.in.repository=Ouvrir dans l'entrep\u00f4t -operation.completed.successfully = Op\u00e9ration r\u00e9alis\u00e9e avec succ\u00e8s -operation.failed = Op\u00e9ration \u00e9chou\u00e9e -select.the.upload.folder=S\u00e9lectionner un r\u00e9pertoire -new.upload.folder=Nouveau r\u00e9pertoire de t\u00e9l\u00e9versement -_.is.already.an.upload.folder={path} est d\u00e9j\u00e0 un r\u00e9pertoire de t\u00e9l\u00e9versement diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.desc.xml b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.desc.xml deleted file mode 100644 index 901e601..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.desc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - Flash upload - File upload component that uses flash to select and upload multiple files - /components/uploader-plus/flash-upload - \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.html.ftl b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.html.ftl deleted file mode 100644 index 2b82fbc..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.html.ftl +++ /dev/null @@ -1,120 +0,0 @@ -<@markup id="css" > -<#-- CSS Dependencies --> - <@link href="${url.context}/res/components/upload/flash-upload.css" group="upload"/> - <@link href="${url.context}/res/components/uploader-plus/css/uploader-plus.css" group="upload"/> - - -<@markup id="js"> -<#-- JavaScript Dependencies --> - <@script type="text/javascript" src="${url.context}/res/components/upload/flash-upload.js" group="upload"/> - <@script type="text/javascript" src="${url.context}/res/components/uploader-plus/js/common.js" group="upload"/> - <@script type="text/javascript" src="${url.context}/res/components/uploader-plus/js/uploader-plus-mixin.js" group="upload"/> - <@script type="text/javascript" src="${url.context}/res/components/uploader-plus/js/flash-upload-plus.js" group="upload"/> - - -<@markup id="widgets"> - <@createWidgets group="upload"/> - <@inlineScript group="upload"> - if(Alfresco.getFileUploadInstance) - { - Alfresco.getFileUploadInstance().setOptions({ - flashUploader : YAHOO.lang.isObject(SoftwareLoop) && YAHOO.lang.isFunction(SoftwareLoop.FlashUpload) ? "SoftwareLoop.FlashUpload" : "Alfresco.FlashUpload" - }); - } - - - -<@markup id="html"> - <@uniqueIdDiv> - <#assign el=args.htmlid?html> - - - diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.js b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.js deleted file mode 100644 index f163d33..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.js +++ /dev/null @@ -1,6 +0,0 @@ - -// The above import allows us to reuse Alfresco original flash-upload component web script. -// When end user overrides via web-extension directory, this won't pick up the override. -// This is a drawback of Alfresco JS importing. - -model.widgets[0].name = "SoftwareLoop.FlashUpload"; \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.properties deleted file mode 100644 index e56f6e4..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Upload File -header.multiUpload=Upload File(s) -header.singleUpdate=Update File - -label.browse=Select file(s) to upload -label.multiUploadTip=Use CTRL or SHIFT to select multiple files -label.singleUpdateTip=Click icon to upload a new version of {0} -label.noFiles=No files to display, click icon to select file(s) to upload -label.noFlash=You need a Flash Player of version 9.0.45 to use this component. You can download the latest version of Flash Player from the \ - Adobe Flash Player Download Center. -label.success=Success -label.failure=Failure -label.failure.413=Failure: Quota exceeded -label.failure.409=Failure: Content size violation -label.illegalChars=Failure: Filename contains illegal characters -button.upload=Upload File(s) -label.uploadStatus=Status: {0}/{1} uploaded ({2} failed) -message.cancelStatus=Upload(s) cancelled; {0} file(s) uploaded -message.zeroByteFileSelected=You selected file {0}. It is 0 bytes in size and cannot be uploaded. -message.flashError.title=Flash Communication Error -message.flashError.message=The browser cannot communicate with the Flash Uploader. You can continue to upload in single-file mode, or refresh the page to restart Flash. - -section.version=Version Information -label.version=This version has: -label.minorVersion=minor changes -label.majorVersion=major changes -label.minorVersion.more=minor changes ({0}) -label.majorVersion.more=major changes ({0}) -label.comments=Comments - -type.cm_content=Content \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_de.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_de.properties deleted file mode 100644 index 6afc6c7..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_de.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Datei hochladen -header.multiUpload=Dateien hochladen -header.singleUpdate=Datei aktualisieren - -label.browse=Datei(en) zum Hochladen ausw\u00e4hlen -label.multiUploadTip=Mehrere Dateien \u00fcber CTRL oder SHIFT ausw\u00e4hlen -label.singleUpdateTip=Klicken Sie auf das Icon, um eine neue Version von {0} hoch zu laden -label.noFiles=Keine Dateien anzuzeigen, klicken Sie auf das Icon um die hochzuladenden Dateien auszuw\u00e4hlen -label.noFlash=Sie ben\u00f6tigen einen Flash Player in der Version 9.0.45 um die Funktion nutzen zu k\u00f6nnen. Die aktuellste Version des Flash Player k\u00f6nnen Sie herunterladen von \ - Adobe Flash Player Download Center. -label.success=Erfolg -label.failure=Misserfolg -label.failure.413=Fehler: Kontingent \u00fcberschritten -label.failure.409=Fehler: Dateigr\u00f6\u00dfe \u00fcberschritten -label.illegalChars=Fehler: Dateiname enth\u00e4lt nicht zul\u00e4ssige Zeichen -button.upload=Dateien hochladen -label.uploadStatus=Status: {0}/{1} hochgeladen ({2} fehlgeschlagen) -message.cancelStatus=Upload(s) abgebrochen; {0} Datei(en) hochgeladen -message.zeroByteFileSelected=Sie haben die Datei {0} ausgew\u00e4hlt. Die Datei ist 0 Byte gro\u00df und kann nicht hochgeladen werden. -message.flashError.title=Flash Kommunikationsfehler -message.flashError.message=Der Browser kann nicht mit dem Flash Uploader kommunizieren. Sie k\u00f6nnen weiterhin Dateien im Einzeldateien Modus hochladen oder die Seite neu aufrufen, um Flash neu zu starten. - -section.version=Version Information -label.version=Diese Version: -label.minorVersion=kleine \u00c4nderungen -label.majorVersion=bedeutende \u00c4nderungen -label.minorVersion.more=kleine \u00c4nderungen ({0}) -label.majorVersion.more=bedeutende \u00c4nderungen ({0}) -label.comments=Kommentare - -type.cm_content=Inhalt \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_es.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_es.properties deleted file mode 100644 index fbe21ca..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_es.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=A\u00f1adir fichero -header.multiUpload=A\u00f1adir fichero(s) -header.singleUpdate=Actualizar fichero - -label.browse=Seleccione el fichero que desea a\u00f1adir -label.multiUploadTip=Utilice CTRL o SHIFT para seleccionar m\u00faltiples ficheros -label.singleUpdateTip=Pulse en el icono para subir una nueva versi\u00f3n de {0} -label.noFiles=No hay ning\u00fan fichero para mostrar, pulse el icono para seleccionar los ficheros que desea subir -label.noFlash=Necesita como m\u00ednimo la versi\u00f3n 9.0.45 de Flash Player para utilizar este componente. Puede descargar la \u00faltima versi\u00f3n del visor Flash desde el \ - Centro de descargas Adobe Flash Player. -label.success=Completado -label.failure=Error -label.failure.413=Error: Cuota excedida -label.failure.409=Error: infracci\u00f3n de tama\u00f1o de contenido -label.illegalChars=Error: El nombre del fichero contiene caracteres no admitidos -button.upload=A\u00f1adir fichero(s) -label.uploadStatus=Estado: {0}/{1} subido(s) ({2} err\u00f3neos) -message.cancelStatus=Subida(s) cancelada(s); {0} fichero(s) subido(s) -message.zeroByteFileSelected=Ha seleccionado el fichero {0}. No tiene ning\u00fan contenido y no se puede subir. -message.flashError.title=Error de comunicaci\u00f3n Flash -message.flashError.message=El navegador no puede comunicarse con el cargador Flash. Puede continuar subiendo en modo de fichero \u00fanico o recargar la p\u00e1gina para reiniciar Flash. - -section.version=Informaci\u00f3n de la versi\u00f3n -label.version=Esta versi\u00f3n tiene: -label.minorVersion=cambios menores -label.majorVersion=cambios mayores -label.minorVersion.more=cambios menores ({0}) -label.majorVersion.more=cambios mayores ({0}) -label.comments=Comentarios - -type.cm_content=Contenido \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_fr.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_fr.properties deleted file mode 100644 index 2431878..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_fr.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Ajouter un fichier -header.multiUpload=Ajout de fichier(s) -header.singleUpdate=Mettre le fichier \u00e0 jour - -label.browse=S\u00e9lectionner le(s) fichier(s) \u00e0 ajouter -label.multiUploadTip=Utiliser CTRL ou SHIFT(Maj) pour s\u00e9lectionner des fichiers multiples -label.singleUpdateTip=Cliquez sur l''ic\u00f4ne pour remplacer par une nouvelle version de {0} -label.noFiles=Pas de fichier \u00e0 afficher, cliquer sur l'ic\u00f4ne pour s\u00e9lectionner un ou des fichiers \u00e0 ajouter -label.noFlash=Vous devez poss\u00e9der Flash Player version 9.0.45 pour utiliser ce composant. Vous pouvez t\u00e9l\u00e9charger la derni\u00e8re version de Flash Player depuis \ - Adobe Flash Player Download Center. -label.success=Succ\u00e8s -label.failure=Echec -label.failure.413=Echec : Quota d\u00e9pass\u00e9 -label.failure.409=Echec : Probl\u00e8me de taille de contenu -label.illegalChars=Echec : Le nom de fichier contient des caract\u00e8res ill\u00e9gaux -button.upload=Ajout de fichier(s) -label.uploadStatus=Statut : {0}/{1} ajout\u00e9(s) ({2} \u00e9chec(s)) -message.cancelStatus=Ajout(s) annul\u00e9(s) ; {0} fichier(s) ajout\u00e9(s) -message.zeroByteFileSelected=Vous avez s\u00e9lectionn\u00e9 le fichier {0}. La taille de ce fichier est nulle et ce dernier ne peut pas \u00eatre ajout\u00e9. -message.flashError.title=Erreur de communication Flash -message.flashError.message=Le navigateur n'arrive pas \u00e0 communiquer avec l'injecteur Flash. Vous pouvez continuer en mode fichier unique ou rafra\u00eechir la page pour relancer Flash. - -section.version=Informations de version -label.version=Cette version contient : -label.minorVersion=changements mineurs -label.majorVersion=changements majeurs -label.minorVersion.more=changements mineurs ({0}) -label.majorVersion.more=changements majeurs ({0}) -label.comments=Commentaires - -type.cm_content=Contenu \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_it.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_it.properties deleted file mode 100644 index f3a2126..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_it.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Carica file -header.multiUpload=Carica pi\u00f9 file -header.singleUpdate=Aggiorna file - -label.browse=Selezionare i file da caricare -label.multiUploadTip=Utilizzare CTRL o MAIUSC per selezionare pi\u00f9 file -label.singleUpdateTip=Scegliere l''icona per caricare una nuova versione di {0} -label.noFiles=Nessun file da visualizzare, scegliere l'icona per selezionare i file da caricare -label.noFlash=Per utilizzare questo componente, \u00e8 necessario Flash Player versione 9.0.45. \u00c8 possibile scaricare l'ultima versione di Flash Player da \ - Adobe Flash Player Download Center. -label.success=Operazione riuscita -label.failure=Operazione non riuscita -label.failure.413=Operazione non riuscita: quota superata -label.failure.409=Operazione non riuscita: violazione dimensioni contenuto -label.illegalChars=Operazione non riuscita: il nome file contiene caratteri non validi -button.upload=Carica pi\u00f9 file -label.uploadStatus=Stato: {0}/{1} caricati ({2} non riusciti) -message.cancelStatus=Caricamenti annullati; {0} file caricati -message.zeroByteFileSelected=\u00c8 stato selezionato il file {0}. Questo file non pu\u00f2 essere caricato perch\u00e9 ha dimensioni pari a 0 byte. -message.flashError.title=Errore di comunicazione con Flash -message.flashError.message=Il browser non \u00e8 in grado di comunicare con Flash Uploader. \u00c8 possibile continuare a caricare in modalit\u00e0 file singolo o aggiornare la pagina per riavviare Flash. - -section.version=Informazioni sulla versione -label.version=Questa versione dispone di: -label.minorVersion=cambiamenti minori -label.majorVersion=cambiamenti maggiori -label.minorVersion.more=cambiamenti minori ({0}) -label.majorVersion.more=cambiamenti maggiori ({0}) -label.comments=Commenti - -type.cm_content=Contenuto \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ja.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ja.properties deleted file mode 100644 index 7db05f5..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ja.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 -header.multiUpload=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 -header.singleUpdate=\u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0 - -label.browse=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u9078\u629e -label.multiUploadTip=CTRL\u307e\u305f\u306fSHIFT\u3092\u4f7f\u3063\u3066\u8907\u6570\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002 -label.singleUpdateTip=\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306e {0} \u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002 -label.noFiles=\u8868\u793a\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002 -label.noFlash=\u3053\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001Flash Player\u30d0\u30fc\u30b8\u30e7\u30f39.0.45\u304c\u5fc5\u8981\u3067\u3059\u3002 \ -Adobe Flash Player\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30bb\u30f3\u30bf\u30fc\u304b\u3089\u3001\u6700\u65b0\u306eFlash Player\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002 -label.success=\u6210\u529f -label.failure=\u5931\u6557 -label.failure.413=\u5931\u6557: \u30af\u30a9\u30fc\u30bf\u8d85\u904e -label.failure.409=\u30a8\u30e9\u30fc: \u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30b5\u30a4\u30ba\u30a8\u30e9\u30fc -label.illegalChars=\u5931\u6557: \u30d5\u30a1\u30a4\u30eb\u540d\u306b\u4f7f\u7528\u3067\u304d\u306a\u3044\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059 -button.upload=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 -label.uploadStatus=\u30b9\u30c6\u30fc\u30bf\u30b9: {1}\u500b\u306e\u3046\u3061{0}\u500b\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3057\u305f\uff08{2}\u5931\u6557\uff09 -message.cancelStatus=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002{0}\u500b\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3057\u305f -message.zeroByteFileSelected=\u30d5\u30a1\u30a4\u30eb{0}\u3092\u9078\u629e\u3057\u307e\u3057\u305f\u3002 \u30b5\u30a4\u30ba\u304c0\u30d0\u30a4\u30c8\u3067\u3042\u308b\u305f\u3081\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\u3002 -message.flashError.title=Flash\u901a\u4fe1\u30a8\u30e9\u30fc -message.flashError.message=\u30d6\u30e9\u30a6\u30b6\u304cFlash\u30a2\u30c3\u30d7\u30ed\u30fc\u30c0\u3068\u901a\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002 \u30b7\u30f3\u30b0\u30eb\u30d5\u30a1\u30a4\u30eb\u30e2\u30fc\u30c9\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u7d9a\u884c\u3059\u308b\u304b\u3001\u30da\u30fc\u30b8\u3092\u518d\u8aad\u307f\u8fbc\u307f\u3057\u3066Flash\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -section.version=\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 -label.version=\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u6539\u8a02\u30ec\u30d9\u30eb: -label.minorVersion=\u5c0f\u3055\u306a\u5909\u66f4 -label.majorVersion=\u5927\u304d\u306a\u5909\u66f4 -label.minorVersion.more=\u5c0f\u3055\u306a\u5909\u66f4\uff08{0}\uff09 -label.majorVersion.more=\u5927\u304d\u306a\u5909\u66f4\uff08{0}\uff09 -label.comments=\u30b3\u30e1\u30f3\u30c8 - -type.cm_content=\u30b3\u30f3\u30c6\u30f3\u30c4 diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nb.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nb.properties deleted file mode 100644 index 23888ac..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nb.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Last opp file -header.multiUpload=Last opp file(er) -header.singleUpdate=Oppdater fil - -label.browse=Velg fil(er) som skal lastes opp -label.multiUploadTip=Bruk CTRL eller SKIFT for \u00e5 velge flere filer -label.singleUpdateTip=Klikk ikon for \u00e5 laste opp en ny versjon av {0} -label.noFiles=Ingen filer vises. Klikk ikon for \u00e5 velge fil(er) som skal lastes opp. -label.noFlash=Du trenger Flash Player versjon 9.0.45 for \u00e5 bruke denne komponenten. Du kan laste ned den nyeste versjonen av Flash Player fra \ - Adobe Flash Player Download Center. -label.success=Vellykket -label.failure=Mislykket -label.failure.413=Mislykket: Kvote overskredet -label.failure.409=Mislykket: St\u00f8rrelsesfeil innhold -label.illegalChars=Mislykket: Filnavn inneholder ulovlige tegn -button.upload=Last opp file(er) -label.uploadStatus=Status: {0}/{1} lastet opp ({2} mislyktes) -message.cancelStatus=Opplasting(er) avbrutt. {0} fil(er) lastet opp -message.zeroByteFileSelected=Du valgte fil {0}. Den har en st\u00f8rrelse p\u00e5 0 byte og kan ikke lastes opp. -message.flashError.title=Flash-kommunikasjonsfeil -message.flashError.message=Nettleseren kan ikke kommunisere med Flash Uploader. Du kan fortsette \u00e5 laste opp i enkeltfil-modus, eller oppdatere siden for \u00e5 starte Flash p\u00e5 nytt. - -section.version=Versjonsinformasjon -label.version=Denne versjonen har: -label.minorVersion=mindre endringer -label.majorVersion=st\u00f8rre endringer -label.minorVersion.more=mindre endringer ({0}) -label.majorVersion.more=st\u00f8rre endringer ({0}) -label.comments=Kommentarer - -type.cm_content=Innhold \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nl.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nl.properties deleted file mode 100644 index 44c70db..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_nl.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Bestand uploaden -header.multiUpload=Bestand(en) uploaden -header.singleUpdate=Bestand bijwerken - -label.browse=Selecteer een of meer bestanden om te uploaden -label.multiUploadTip=Gebruik CTRL of SHIFT om meerdere bestanden te selecteren -label.singleUpdateTip=Klik op pictogram om een nieuwe versie van {0} te uploaden -label.noFiles=Geen bestanden om weer te geven, klik op pictogram om een of meer bestanden te selecteren om te uploaden -label.noFlash=U hebt een Flash Player van versie 9.0.45 nodig om dit onderdeel te kunnen gebruiken. U kunt de laatste versie van Flash Player downloaden via het \ - downloadcentrum voor Adobe Flash Player. -label.success=Geslaagd -label.failure=Mislukt -label.failure.413=Mislukt: quota overschreden -label.failure.409=Mislukt: fout in grootte van content -label.illegalChars=Mislukt: bestandsnaam bevat ongeldige tekens -button.upload=Bestand(en) uploaden -label.uploadStatus=Status: {0}/{1} ge\u00fcpload ({2} mislukt) -message.cancelStatus=Upload(s) geannuleerd; {0} bestand(en) ge\u00fcpload -message.zeroByteFileSelected=U hebt bestand {0} geselecteerd. Het heeft een grootte van 0 bytes en kan niet worden ge\u00fcpload. -message.flashError.title=Flash-communicatiefout -message.flashError.message=De browser kan niet communiceren met de Flash Uploader. U kunt doorgaan met uploaden in de modus voor \u00e9\u00e9n bestand of u vernieuwt de pagina om Flash opnieuw te starten. - -section.version=Versie-informatie -label.version=Deze versie heeft: -label.minorVersion=kleine wijzigingen -label.majorVersion=grote wijzigingen -label.minorVersion.more=kleine wijzigingen ({0}) -label.majorVersion.more=grote wijzigingen ({0}) -label.comments=Opmerkingen - -type.cm_content=Content \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_pt_BR.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_pt_BR.properties deleted file mode 100644 index 7f6503c..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_pt_BR.properties +++ /dev/null @@ -1,31 +0,0 @@ -header.singleUpload=Carregar arquivo -header.multiUpload=Carregar arquivo(s) -header.singleUpdate=Atualizar arquivo - -label.browse=Selecionar arquivo(s) para carregar -label.multiUploadTip=Use CTRL ou SHIFT para selecionar m\u00faltiplos arquivos -label.singleUpdateTip=Clique no \u00edcone para carregar uma nova vers\u00e3o de {0} -label.noFiles=N\u00e3o h\u00e1 arquivos a serem exibidos. Clique no \u00edcone para selecionar o(s) arquivo(s) a ser(em) carregado(s) -label.noFlash=\u00c9 preciso ter o Flash Player vers\u00e3o 9.0.45 para usar esse componente. \u00c9 poss\u00edvel fazer o download da vers\u00e3o mais recente do Flash Player no \ - Adobe Flash Player Download Center. -label.success=Sucesso -label.failure=Falha -label.failure.413=Falha: Cota excedida -label.failure.409=Falha: Viola\u00e7\u00e3o de tamanho de conte\u00fado -label.illegalChars=Falha: O nome do arquivo cont\u00e9m caracteres ilegais -button.upload=Carregar arquivo(s) -label.uploadStatus=Status: {0}/{1} carregados ({2} com falha) -message.cancelStatus=Carregamento(s) cancelado(s). {0} arquivo(s) carregado(s) -message.zeroByteFileSelected=Voc\u00ea selecionou o arquivo {0}. Tem 0 byte de tamanho e n\u00e3o pode ser carregado. -message.flashError.title=Erro de comunica\u00e7\u00e3o com o Flash -message.flashError.message=O navegador n\u00e3o pode se comunicar com o Flash Uploader. Voc\u00ea pode continuar a carregar no modo de arquivo \u00fanico ou atualizar a p\u00e1gina para reiniciar o Flash. - -section.version=Informa\u00e7\u00f5es da vers\u00e3o -label.version=Esta vers\u00e3o possui: -label.minorVersion=altera\u00e7\u00f5es secund\u00e1rias -label.majorVersion=altera\u00e7\u00f5es principais -label.minorVersion.more=altera\u00e7\u00f5es secund\u00e1rias ({0}) -label.majorVersion.more=altera\u00e7\u00f5es principais ({0}) -label.comments=Coment\u00e1rios - -type.cm_content=Conte\u00fado \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ru.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ru.properties deleted file mode 100644 index c30a38c..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_ru.properties +++ /dev/null @@ -1,30 +0,0 @@ -header.singleUpload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b -header.multiUpload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b -header.singleUpdate=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b - -label.browse=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b -label.multiUploadTip=\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 CTRL \u0438\u043b\u0438 SHIFT \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 -label.singleUpdateTip=\u0429\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e {0} -label.noFiles=\u041d\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0429\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 -label.noFlash=\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c Flash Player \u0432\u0435\u0440\u0441\u0438\u0438 9.0.45. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e Flash Player \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 \n\u0446\u0435\u043d\u0442\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f Adobe Flash Player. -label.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e -label.failure=\u0421\u0431\u043e\u0439 -label.failure.413=\u0421\u0431\u043e\u0439\: \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0430 \u043a\u0432\u043e\u0442\u0430 -label.failure.409=\u0421\u0431\u043e\u0439: \u043e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 -label.illegalChars=\u0421\u0431\u043e\u0439\: \u0432 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b -button.upload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b -label.uploadStatus=\u0421\u0442\u0430\u0442\u0443\u0441\: \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e {0}/{1} (\u0441\u0431\u043e\u0439\: {2}) -message.cancelStatus=\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430; \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0444\u0430\u0439\u043b\u043e\u0432\: {0} -message.zeroByteFileSelected=\u0412\u044b\u0431\u0440\u0430\u043d \u0444\u0430\u0439\u043b {0}. \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 - 0 \u0431\u0430\u0439\u0442, \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c. -message.flashError.title=\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0438 Flash -message.flashError.message=\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u0443 \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 Flash Uploader. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Flash. - -section.version=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0435\u0440\u0441\u0438\u0438 -label.version=\u0423 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0435\u0441\u0442\u044c\: -label.minorVersion=\u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f -label.majorVersion=\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f -label.minorVersion.more=\u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f ({0}) -label.majorVersion.more=\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f ({0}) -label.comments=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 - -type.cm_content=\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_zh_CN.properties b/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_zh_CN.properties deleted file mode 100644 index 49e9728..0000000 --- a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/flash-upload.get_zh_CN.properties +++ /dev/null @@ -1,30 +0,0 @@ -header.singleUpload=\u4E0A\u4F20\u6587\u4EF6 -header.multiUpload=\u4E0A\u4F20\u6587\u4EF6 -header.singleUpdate=\u66F4\u65B0\u6587\u4EF6 - -label.browse=\u9009\u62E9\u8981\u4E0A\u4F20\u7684\u6587\u4EF6 -label.multiUploadTip=\u53EF\u4F7F\u7528 CTRL \u6216 SHIFT \u952E\u9009\u62E9\u591A\u4E2A\u6587\u4EF6 -label.singleUpdateTip=\u5355\u51FB\u56FE\u6807\u53EF\u4E0A\u4F20 {0} \u7684\u65B0\u7248\u672C -label.noFiles=\u65E0\u8981\u663E\u793A\u7684\u6587\u4EF6\uFF1B\u5355\u51FB\u56FE\u6807\u53EF\u9009\u62E9\u8981\u4E0A\u4F20\u7684\u6587\u4EF6 -label.noFlash=\u9700\u8981 Flash Player \u7248\u672C 9.0.45 \u624D\u80FD\u4F7F\u7528\u6B64\u7EC4\u4EF6\u3002 \u53EF\u4ECE Adobe Flash Player \u4E0B\u8F7D\u4E2D\u5FC3\u4E0B\u8F7D Flash Player \u7684\u6700\u65B0\u7248\u672C\u3002 -label.success=\u6210\u529F -label.failure=\u5931\u8D25 -label.failure.413=\u5931\u8D25\uFF1A\u8D85\u8FC7\u4E86\u914D\u989D -label.failure.409=\u5931\u8d25\uff1a\u5185\u5bb9\u5927\u5c0f\u51b2\u7a81 -label.illegalChars=\u5931\u8D25\uFF1A\u6587\u4EF6\u540D\u4E2D\u5305\u542B\u975E\u6CD5\u5B57\u7B26 -button.upload=\u4E0A\u4F20\u6587\u4EF6 -label.uploadStatus=\u72B6\u6001\uFF1A\u4E0A\u4F20\u4E86 {0} \u4E2A\uFF08\u5171 {1} \u4E2A\uFF0C{2} \u4E2A\u5931\u8D25\uFF09 -message.cancelStatus=\u4E0A\u4F20\u5DF2\u53D6\u6D88\uFF1B\u5DF2\u4E0A\u4F20 {0} \u4E2A\u6587\u4EF6 -message.zeroByteFileSelected=\u60A8\u5DF2\u9009\u62E9\u6587\u4EF6 {0}\u3002 \u8BE5\u6587\u4EF6\u5927\u5C0F\u4E3A\u96F6\u5B57\u8282\uFF0C\u6240\u4EE5\u4E0D\u80FD\u4E0A\u4F20\u3002 -message.flashError.title=Flash \u901A\u4FE1\u9519\u8BEF -message.flashError.message=\u6D4F\u89C8\u5668\u4E0D\u80FD\u4E0E Flash Uploader \u901A\u4FE1\u3002 \u60A8\u53EF\u4EE5\u4F7F\u7528\u5355\u6587\u4EF6\u6A21\u5F0F\u7EE7\u7EED\u4E0A\u4F20\uFF0C\u4E5F\u53EF\u5237\u65B0\u9875\u9762\u4EE5\u91CD\u65B0\u542F\u52A8 Flash\u3002 - -section.version=\u7248\u672C\u4FE1\u606F -label.version=\u6B64\u7248\u672C\u6709\uFF1A -label.minorVersion=\u6B21\u8981\u66F4\u6539 -label.majorVersion=\u4E3B\u8981\u66F4\u6539 -label.minorVersion.more=\u6B21\u8981\u66F4\u6539 ({0}) -label.majorVersion.more=\u4E3B\u8981\u66F4\u6539 ({0}) -label.comments=\u6CE8\u91CA - -type.cm_content=\u5185\u5BB9 \ No newline at end of file diff --git a/surf/src/main/amp/config/org/springframework/extensions/surf/uploader-plus-surf-context.xml b/surf/src/main/amp/config/org/springframework/extensions/surf/uploader-plus-surf-context.xml deleted file mode 100644 index 5a7e971..0000000 --- a/surf/src/main/amp/config/org/springframework/extensions/surf/uploader-plus-surf-context.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - alfresco.web-extension.messages.uploader-plus - - - - - diff --git a/surf/src/main/amp/web/components/uploader-plus/js/flash-upload-plus.js b/surf/src/main/amp/web/components/uploader-plus/js/flash-upload-plus.js deleted file mode 100644 index acea95f..0000000 --- a/surf/src/main/amp/web/components/uploader-plus/js/flash-upload-plus.js +++ /dev/null @@ -1,275 +0,0 @@ -(function () { - Alfresco.logger.debug("flash-upload-plus.js"); - - SoftwareLoop.FlashUpload = function (id) - { - // use "null" to avoid Alfresco.component.Base + Alfresco.util.ComponentManager to override Alfresco.DNDUpload - SoftwareLoop.FlashUpload.superclass.constructor.call(this, "null"); - - // re-register with correct id and name - Alfresco.util.ComponentManager.unregister(this); - this.id = (typeof id == "undefined" || id === null) ? Alfresco.util.generateDomId() : id; - this.name = "SoftwareLoop.FlashUpload"; - Alfresco.util.ComponentManager.register(this); - - return this; - }; - - YAHOO.lang.extend(SoftwareLoop.FlashUpload, Alfresco.FlashUpload, YAHOO.lang.merge(SoftwareLoop.UploaderPlusMixin, { - - savedDialogTitle : null, - - records : null, - - currentRecordIndex : -1, - - //************************************************************************** - // Initialisation at show - //************************************************************************** - show: function (config) { - Alfresco.logger.debug("show", arguments); - - SoftwareLoop.FlashUpload.superclass.show.call(this, config); - - if (!this.shouldUseSameMetadataSet) { - this.cleanupOldFormForNextUpload(); - } - - this.loadTypes(this.populateSelect, this); - Alfresco.logger.debug("END show"); - }, - - //************************************************************************** - // onRowsAddEvent listener setup - //************************************************************************** - - _createEmptyDataTable: function () { - Alfresco.logger.debug("_createEmptyDataTable", arguments); - SoftwareLoop.FlashUpload.superclass._createEmptyDataTable.apply( - this, arguments - ); - this.widgets.dataTable.subscribe( - "rowsAddEvent", this.onRowsAddEvent, this, true - ); - Alfresco.logger.debug("END _createEmptyDataTable"); - }, - - //************************************************************************** - // onRowsAddEvent listener setup - //************************************************************************** - - _createEmptyDataTable: function () { - Alfresco.logger.debug("_createEmptyDataTable", arguments); - SoftwareLoop.FlashUpload.superclass._createEmptyDataTable.apply( - this, arguments - ); - this.widgets.dataTable.subscribe( - "rowsAddEvent", this.onRowsAddEvent, this, true - ); - Alfresco.logger.debug("END _createEmptyDataTable"); - }, - - //************************************************************************** - // onRowsAddEvent listener setup - //************************************************************************** - - _createEmptyDataTable: function () { - Alfresco.logger.debug("_createEmptyDataTable", arguments); - SoftwareLoop.FlashUpload.superclass._createEmptyDataTable.apply( - this, arguments - ); - this.widgets.dataTable.subscribe( - "rowsAddEvent", this.onRowsAddEvent, this, true - ); - Alfresco.logger.debug("END _createEmptyDataTable"); - }, - - //************************************************************************** - // onRowsAddEvent management - //************************************************************************** - - onRowsAddEvent: function (arg) { - Alfresco.logger.debug("onRowsAddEvent", arguments); - if (this.showConfig.mode === this.MODE_SINGLE_UPDATE) { - Alfresco.logger.debug("Single update"); - return; - } - if (this.types == null) { - Alfresco.logger.debug("Types is null"); - return; - } - this.savedDialogTitle = - YAHOO.util.Dom.get(this.id + "-title-span").innerText; - this.records = arg.records; - this.currentRecordIndex = 0; - this.showMetadataDialog(); - Alfresco.logger.debug("END onRowsAddEvent"); - }, - - //************************************************************************** - // Metadata dialog management - //************************************************************************** - - showMetadataDialog: function () { - Alfresco.logger.debug("showMetadataDialog", arguments); - if (this.currentRecordIndex == this.records.length) { - Alfresco.logger.debug("At the end of the records array"); - return this.showMainDialog(); - } - var currentRecord = this.records[this.currentRecordIndex]; - var data = currentRecord.getData(); - YAHOO.util.Dom.get(this.id + "-title-span").innerText = - Alfresco.util.encodeHTML(data.name); - - YAHOO.util.Dom.addClass(this.id + "-main-dialog", "fake-hidden"); - YAHOO.util.Dom.removeClass(this.id + "-metadata-dialog", "hidden"); - - this.contentTypeSelectNode.selectedIndex = 0; - SoftwareLoop.fireEvent(this.contentTypeSelectNode, "change"); - Alfresco.logger.debug("END showMetadataDialog"); - }, - - showMainDialog: function () { - Alfresco.logger.debug("showMainDialog", arguments); - if (this.savedDialogTitle != null) { - Alfresco.logger.debug("Restore saved dialog title"); - YAHOO.util.Dom.get(this.id + "-title-span").innerText = - this.savedDialogTitle; - this.savedDialogTitle = null; - } - - this.records = null; - this.currentRecordIndex = -1; - - YAHOO.util.Dom.removeClass(this.id + "-main-dialog", "fake-hidden"); - YAHOO.util.Dom.addClass(this.id + "-metadata-dialog", "hidden"); - this.centerPanel(); - Alfresco.logger.debug("END showMainDialog"); - }, - - _resetGUI: function () { - Alfresco.logger.debug("_resetGUI", arguments); - this.showMainDialog(); - SoftwareLoop.FlashUpload.superclass._resetGUI.apply(this, arguments); - Alfresco.logger.debug("END _resetGUI"); - }, - - //************************************************************************** - // Form button handling - //************************************************************************** - - onMetadataCancel: function () { - Alfresco.logger.debug("onMetadataCancel", arguments); - this.records.reverse(); - for (var i = 0; i < this.records.length; i++) { - var record = this.records[i]; - Alfresco.logger.debug("Canceling record:", record); - var flashId = record.getData().id; - var recordId = record.getId(); - this._onFileButtonClickHandler(flashId, recordId); - } - this.showMainDialog(); - Alfresco.logger.debug("END onMetadataCancel"); - }, - - //************************************************************************** - // Upload override - //************************************************************************** - - _uploadFromQueue: function (noOfUploadsToStart) { - Alfresco.logger.debug("_uploadFromQueue", arguments); - // generate upload POST url - var url; - if (this.showConfig.uploadURL === null) { - url = Alfresco.constants.PROXY_URI + "uploader-plus/upload"; - } - else { - url = Alfresco.constants.PROXY_URI + this.showConfig.uploadURL; - } - - // Flash does not correctly bind to the session cookies during POST - // so we manually patch the jsessionid directly onto the URL instead - // also include the CSRF token to pass the CSRF token filter - url += ";jsessionid=" + YAHOO.util.Cookie.get("JSESSIONID") + "?lang=" + Alfresco.constants.JS_LOCALE; - - // Pass the CSRF token if the CSRF token filter is enabled - if (Alfresco.util.CSRFPolicy.isFilterEnabled()) { - url += "&" + Alfresco.util.CSRFPolicy.getParameter() + "=" + encodeURIComponent(Alfresco.util.CSRFPolicy.getToken()); - } - - // Find files to upload - var startedUploads = 0, - length = this.widgets.dataTable.getRecordSet().getLength(), - record, flashId, fileInfo, attributes; - - for (var i = 0; i < length && startedUploads < noOfUploadsToStart; i++) { - record = this.widgets.dataTable.getRecordSet().getRecord(i); - flashId = record.getData("id"); - fileInfo = this.fileStore[flashId]; - if (fileInfo.state === this.STATE_BROWSING) { - // Upload has NOT been started for this file, start it now - fileInfo.state = this.STATE_UPLOADING; - - attributes = - { - username: this.showConfig.username - }; - - // Site or Non-site (Repository) mode - if (this.showConfig.siteId !== null) { - attributes.siteId = this.showConfig.siteId; - attributes.containerId = this.showConfig.containerId; - } - else if (this.showConfig.destination !== null) { - attributes.destination = this.showConfig.destination - } - - if (this.showConfig.mode === this.MODE_SINGLE_UPDATE) { - attributes.updateNodeRef = this.showConfig.updateNodeRef; - attributes.majorVersion = !this.minorVersion.checked; - attributes.description = this.description.value; - } - else { - if (this.showConfig.uploadDirectory !== null) { - attributes.uploadDirectory = this.showConfig.uploadDirectory; - } - if (fileInfo.contentType) { - if (fileInfo.contentType.tagName.toLowerCase() == "select") { - attributes.contentType = fileInfo.contentType.options[fileInfo.contentType.selectedIndex].value; - } - else { - attributes.contentType = fileInfo.contentType.value; - } - } - attributes.overwrite = this.showConfig.overwrite; - if (this.showConfig.thumbnails) { - attributes.thumbnails = this.showConfig.thumbnails; - } - // BEGIN: uploader-plus customisations - Alfresco.logger.debug("fileInfo", fileInfo); - if (fileInfo.propertyData) { - Alfresco.logger.debug("Processing propertyData"); - for (var current in fileInfo.propertyData) { - Alfresco.logger.debug("Current:", current); - if (fileInfo.propertyData.hasOwnProperty(current) && - (current != "prop_mimetype" || - (current == "prop_mimetype" && YAHOO.lang.isString(fileInfo.propertyData[current]) && fileInfo.propertyData[current].length > 0) - )) { - Alfresco.logger.debug("Adding attribute", current); - attributes[current] = fileInfo.propertyData[current]; - } - } - } - Alfresco.logger.debug("Attributes:", attributes); - // END: uploader-plus customisations - - } - - this.uploader.upload(flashId, url, "POST", attributes, "filedata"); - startedUploads++; - } - } - } - })); - -})(); diff --git a/surf/src/test/resources/log4j.properties b/surf/src/test/resources/log4j.properties deleted file mode 100644 index 280996b..0000000 --- a/surf/src/test/resources/log4j.properties +++ /dev/null @@ -1,52 +0,0 @@ -# This file is copied from Alfresco Share 5.0.d -# Overrides tomcat/webapps/share/WEB-INF/classes/log4j,properties -# and sets new file location from property and log level from property. -# - -# Set root logger level to error -log4j.rootLogger=${app.log.root.level}, Console, File - -###### Console appender definition ####### - -# All outputs currently set to be a ConsoleAppender. -log4j.appender.Console=org.apache.log4j.ConsoleAppender -log4j.appender.Console.layout=org.apache.log4j.PatternLayout - -# use log4j NDC to replace %x with tenant domain / username -log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %m%n -#log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n - -###### File appender definition ####### -log4j.appender.File=org.apache.log4j.DailyRollingFileAppender -log4j.appender.File.File=${app.log.dir}alfresco.log -log4j.appender.File.Append=true -log4j.appender.File.DatePattern='.'yyyy-MM-dd -log4j.appender.File.layout=org.apache.log4j.PatternLayout -log4j.appender.File.layout.ConversionPattern=%d{yyyy-MM-dd} %d{ABSOLUTE} %-5p [%c] [%t] %m%n - -# Spring -log4j.logger.org.springframework=warn -# Turn off Spring remoting warnings that should really be info or debug. -log4j.logger.org.springframework.remoting.support=error -log4j.logger.org.springframework.util=error - -# MyFaces -log4j.logger.org.apache.myfaces.util.DebugUtils=info -log4j.logger.org.apache.myfaces.el.VariableResolverImpl=error -log4j.logger.org.apache.myfaces.application.jsp.JspViewHandlerImpl=error -log4j.logger.org.apache.myfaces.taglib=error - -# Alfresco -log4j.logger.org.alfresco=error -log4j.logger.org.alfresco.config=warn -log4j.logger.org.alfresco.config.JndiObjectFactoryBean=warn -log4j.logger.org.alfresco.web=info - -# Web Framework -log4j.logger.org.springframework.extensions.webscripts=info -log4j.logger.org.springframework.extensions.webscripts.ScriptLogger=warn -log4j.logger.org.springframework.extensions.webscripts.ScriptDebugger=off - -# Freemarker -# Note the freemarker.runtime logger is used to log non-fatal errors that are handled by Alfresco's retrying transaction handler -log4j.logger.freemarker.runtime= \ No newline at end of file diff --git a/surf/tomcat/context.xml b/surf/tomcat/context.xml deleted file mode 100644 index 59a0220..0000000 --- a/surf/tomcat/context.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/uploader-plus-integration-tests/pom.xml b/uploader-plus-integration-tests/pom.xml new file mode 100644 index 0000000..2b590a1 --- /dev/null +++ b/uploader-plus-integration-tests/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + uploader-plus-integration-tests + Integration Tests Module + Integration Tests module for in-container integration testing - part of AIO - SDK 4.10 + jar + + + com.softwareloop + uploader-plus + 2.0 + + + + + + + + + com.softwareloop + uploader-plus-platform + 2.0 + test + + + + + + + + src/test/resources + true + + + + + + + org.zeroturnaround + jrebel-maven-plugin + + ${project.build.testOutputDirectory} + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + ${test.acs.endpoint.path} + + + + + + diff --git a/uploader-plus-platform-docker/pom.xml b/uploader-plus-platform-docker/pom.xml new file mode 100644 index 0000000..af2aca6 --- /dev/null +++ b/uploader-plus-platform-docker/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + uploader-plus-platform-docker + Alfresco Platform/Repository Docker Module + Platform/Repo Docker Module to generate the final Docker image + jar + + + com.softwareloop + uploader-plus + 2.0 + + + + + + + + com.softwareloop + uploader-plus-platform + 2.0 + + + com.softwareloop + uploader-plus-integration-tests + 2.0 + test + tests + + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + + collect-test-artifacts + pre-integration-test + + copy-dependencies + + + ${project.build.directory}/extensions + compile + + + + + collect-extensions + package + + copy-dependencies + + + ${project.build.directory}/extensions + runtime + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-and-filter-docker-resources + validate + + copy-resources + + + ${project.build.directory} + + + src/main/docker + true + + **/*.jar + **/*.so + **/*.gz + + + + + + + copy-and-filter-docker-resources-non-filtered + validate + + copy-resources + + + ${project.build.directory} + + + src/main/docker + false + + **/*.jar + **/*.so + **/*.gz + + + + + + + + + + diff --git a/uploader-plus-platform-docker/src/main/docker/Dockerfile b/uploader-plus-platform-docker/src/main/docker/Dockerfile new file mode 100644 index 0000000..8000c2c --- /dev/null +++ b/uploader-plus-platform-docker/src/main/docker/Dockerfile @@ -0,0 +1,29 @@ +FROM ${docker.acs.image}:${alfresco.platform.version} + +ARG TOMCAT_DIR=/usr/local/tomcat +ARG USERNAME=${alfresco.platform.docker.user} + +USER root + +# Copy Dockerfile to avoid an error if no JARs exist +COPY Dockerfile extensions/*.jar $TOMCAT_DIR/webapps/alfresco/WEB-INF/lib/ + +# Copy Dockerfile to avoid an error if no AMPs exist +COPY Dockerfile extensions/*.amp $TOMCAT_DIR/amps/ +RUN java -jar $TOMCAT_DIR/alfresco-mmt/alfresco-mmt*.jar install \ + $TOMCAT_DIR/amps $TOMCAT_DIR/webapps/alfresco -directory -nobackup -force + +COPY alfresco-global.properties $TOMCAT_DIR/shared/classes/alfresco-global.properties +COPY dev-log4j2.properties $TOMCAT_DIR/shared/classes/alfresco/extension/dev-log4j2.properties +COPY disable-webscript-caching-context.xml $TOMCAT_DIR/shared/classes/alfresco/extension + +# Copy Dockerfile to avoid an error if no license file exists +COPY Dockerfile license/*.* $TOMCAT_DIR/webapps/alfresco/WEB-INF/classes/alfresco/extension/license/ + +# Move the log file +RUN sed -i -e "s_appender.rolling.fileName\=alfresco.log_appender.rolling.fileName\=${TOMCAT_DIR}/logs\/alfresco.log_" \ + ${TOMCAT_DIR}/shared/classes/alfresco/extension/dev-log4j2.properties && \ + sed -i -e "s_appender.rolling.filePattern=alfresco.log.%d{yyyy-MM-dd}_appender.rolling.filePattern\=${TOMCAT_DIR}/logs\/alfresco.log.%d{yyyy-MM-dd}_" \ + ${TOMCAT_DIR}/shared/classes/alfresco/extension/dev-log4j2.properties + +USER ${USERNAME} \ No newline at end of file diff --git a/repo/src/test/properties/local/alfresco-global.properties b/uploader-plus-platform-docker/src/main/docker/alfresco-global.properties similarity index 64% rename from repo/src/test/properties/local/alfresco-global.properties rename to uploader-plus-platform-docker/src/main/docker/alfresco-global.properties index eed88e1..0ca0d27 100644 --- a/repo/src/test/properties/local/alfresco-global.properties +++ b/uploader-plus-platform-docker/src/main/docker/alfresco-global.properties @@ -15,15 +15,12 @@ # RUN TIME PROPERTIES # ------------------- -######################################################################################################################## -# Alfresco configuration for running locally +# +# Alfresco configuration for running locally with PostgreSQL Database # # Configuration when running Tomcat embedded from Maven. -# This will create the alf_data_dev directory relative to Tomcat run folder. # Property values from the POM but it can also be edited here. -######################################################################################################################## - -dir.root=${alfresco.data.location} +# # Alfresco Repo Webapp (alfresco.war) context, ports etc alfresco.context=alfresco @@ -34,14 +31,11 @@ alfresco.protocol=http # Alfresco Share Webapp (share.war) context, ports etc share.context=share share.host=localhost -share.port=8080 +share.port=8180 share.protocol=http # Don't try and recover any index index.recovery.mode=NONE -# As we run embedded, we set Lucene -# TODO: Find a better solution for indexing, as buildonly (embedded Lucene) is deprecated and going to be removed soon -index.subsystem.name=buildonly # These jobs seem to require Lucene (Unsupported Operation with Solr) so we disable them / set to future date # See https://forums.alfresco.com/en/viewtopic.php?f=52&t=41597 @@ -53,16 +47,39 @@ wcmqs.publishQueueProcessor.schedule=0 50 2 * * ? 2060 # Fail or not when there are node integrity checker errors integrity.failOnError=true -# Database connection properties -db.driver=${alfresco.db.datasource.class} -db.url=${alfresco.db.url} -db.username=${alfresco.db.username} -db.password=${alfresco.db.password} +# Alfresco Repository PostgreSQL Database configuration. +# The PostgreSQL Driver is brought in via the tomcat7-maven-plugin as a dependency. +db.driver=org.postgresql.Driver + +# This Alfresco Platform Configuration file should be used for custom properties that are introduced by this module. +# Define default values for all properties here. +# System Administrators can override these values in environment specific configurations in +# alfresco/tomcat/shared/classes/alfresco-global.properties. +# +index.subsystem.name=solr6 +solr.host=uploader-plus-ass +solr.port=8983 +solr.secureComms=secret +solr.sharedSecret=secret + +db.username=alfresco +db.password=alfresco db.pool.initial=10 db.pool.max=100 -hibernate.dialect=org.hibernate.dialect.H2Dialect + +db.url=jdbc:postgresql://uploader-plus-postgres:5432/alfresco # File servers related properties # For local runs we disable CIFS and FTP cifs.enabled=false -ftp.enabled=false \ No newline at end of file +ftp.enabled=false + +csrf.filter.enabled=false + +# Embedded broker without persistence +messaging.broker.url=vm://localhost?broker.persistent=false + +# Disable ATS +transform.service.enabled=false +local.transform.service.enabled=false +legacy.transform.service.enabled=false diff --git a/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties b/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties new file mode 100644 index 0000000..1854506 --- /dev/null +++ b/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties @@ -0,0 +1,412 @@ +rootLogger.level=error +rootLogger.appenderRef.stdout.ref=ConsoleAppender +rootLogger.appenderRef.rolling.ref=RollingAppender + +# All outputs currently set to be a ConsoleAppender. +appender.console.type=Console +appender.console.name=ConsoleAppender +appender.console.layout.type=PatternLayout +# use log4j NDC to replace %x with tenant domain / username +appender.console.layout.pattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %replace{%m}{[\r\n]+}{}%n + +# File appender definition # +appender.rolling.type=RollingFile +appender.rolling.name=RollingAppender +appender.rolling.fileName=alfresco.log +appender.rolling.filePattern=alfresco.log.%d{yyyy-MM-dd} +appender.rolling.layout.type=PatternLayout +appender.rolling.layout.pattern=%d{yyyy-MM-dd} %d{ABSOLUTE} %-5p [%c] [%t] %replace{%m}{[\r\n]+}{}%n +appender.rolling.policies.type = Policies +appender.rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.rolling.policies.time.interval = 1 + +# Commented-in loggers will be exposed as JMX MBeans (refer to org.alfresco.repo.admin.Log4J2HierarchyInit) +# Hence, generally useful loggers should be listed with at least ERROR level to allow simple runtime +# control of the level via a suitable JMX Console. Also, any other loggers can be added transiently via +# Log4j2 addLoggerMBean as long as the logger exists and has been loaded. + +# Hibernate +logger.hibernate.name=org.hibernate +logger.hibernate.level=error + +logger.hibernate-util-JDBCExceptionReporter.name=org.hibernate.util.JDBCExceptionReporter +logger.hibernate-util-JDBCExceptionReporter.level=fatal + +logger.hibernate-event-def-AbstractFlushingEventListener.name=org.hibernate.event.def.AbstractFlushingEventListener +logger.hibernate-event-def-AbstractFlushingEventListener.level=fatal + +logger.hibernate-type.name=org.hibernate.type +logger.hibernate-type.level=warn + +logger.hibernate-cfg-SettingsFactory.name=org.hibernate.cfg.SettingsFactory +logger.hibernate-cfg-SettingsFactory.level=warn + +# Spring +logger.springframework.name=org.springframework +logger.springframework.level=warn +# Turn off Spring remoting warnings that should really be info or debug. +logger.springframework-remoting-support.name=org.springframework.remoting.support +logger.springframework-remoting-support.level=error + +logger.springframework-util.name=org.springframework.util +logger.springframework-util.level=error + +# Axis/WSS4J +logger.apache-axis.name=org.apache.axis +logger.apache-axis.level=info + +logger.apache-ws.name=org.apache.ws +logger.apache-ws.level=info + +# CXF +logger.apache-cxf.name=org.apache.cxf +logger.apache-cxf.level=error + +# MyFaces +logger.apache-myfaces-util-DebugUtils.name=org.apache.myfaces.util.DebugUtils +logger.apache-myfaces-util-DebugUtils.level=info + +logger.apache-myfaces-el-VariableResolverImpl.name=org.apache.myfaces.el.VariableResolverImpl +logger.apache-myfaces-el-VariableResolverImpl.level=error + +logger.apache-myfaces-application-jsp-JspViewHandlerImpl.name=org.apache.myfaces.application.jsp.JspViewHandlerImpl +logger.apache-myfaces-application-jsp-JspViewHandlerImpl.level=error + +logger.apache-myfaces-taglib.name=org.apache.myfaces.taglib +logger.apache-myfaces-taglib.level=error + +# OpenOfficeConnection +logger.sf-jooreports-openoffice-connection.name=net.sf.jooreports.openoffice.connection +logger.sf-jooreports-openoffice-connection.level=fatal + +# log prepared statement cache activity log4j.logger.org.hibernate.ps.PreparedStatementCache=info + +# Alfresco +logger.alfresco.name=org.alfresco +logger.alfresco.level=error + +logger.alfresco-repo-admin.name=org.alfresco.repo.admin +logger.alfresco-repo-admin.level=info + +logger.alfresco-repo-transaction.name=org.alfresco.repo.transaction +logger.alfresco-repo-transaction.level=warn + +logger.alfresco-repo-cache-TransactionalCache.name=org.alfresco.repo.cache.TransactionalCache +logger.alfresco-repo-cache-TransactionalCache.level=warn + +logger.alfresco-repo-model-filefolder.name=org.alfresco.repo.model.filefolder +logger.alfresco-repo-model-filefolder.level=warn + +logger.alfresco-repo-tenant.name=org.alfresco.repo.tenant +logger.alfresco-repo-tenant.level=info + +logger.alfresco-config.name=org.alfresco.config +logger.alfresco-config.level=warn + +logger.alfresco-config-JndiObjectFactoryBean.name=org.alfresco.config.JndiObjectFactoryBean +logger.alfresco-config-JndiObjectFactoryBean.level=warn + +logger.alfresco-config-JBossEnabledWebApplicationContext.name=org.alfresco.config.JBossEnabledWebApplicationContext +logger.alfresco-config-JBossEnabledWebApplicationContext.level=warn + +logger.alfresco-repo-management-subsystems.name=org.alfresco.repo.management.subsystems +logger.alfresco-repo-management-subsystems.level=warn + +logger.alfresco-repo-management-subsystems-ChildApplicationContextFactory.name=org.alfresco.repo.management.subsystems.ChildApplicationContextFactory +logger.alfresco-repo-management-subsystems-ChildApplicationContextFactory.level=info + +logger.alfresco-repo-management-subsystems-ChildApplicationContextFactory$ChildApplicationContext.name=org.alfresco.repo.management.subsystems.ChildApplicationContextFactory$ChildApplicationContext +logger.alfresco-repo-management-subsystems-ChildApplicationContextFactory$ChildApplicationContext.level=warn + +logger.alfresco-repo-security-sync.name=org.alfresco.repo.security.sync +logger.alfresco-repo-security-sync.level=info + +logger.alfresco-repo-security-person.name=org.alfresco.repo.security.person +logger.alfresco-repo-security-person.level=info + +logger.alfresco-sample.name=org.alfresco.sample +logger.alfresco-sample.level=info + +logger.alfresco-web.name=org.alfresco.web +logger.alfresco-web.level=info + +logger.alfresco-service-descriptor-DescriptorService.name=org.alfresco.service.descriptor.DescriptorService +logger.alfresco-service-descriptor-DescriptorService.level=info + +logger.alfresco-repo-importer-ImporterBootstrap.name=org.alfresco.repo.importer.ImporterBootstrap +logger.alfresco-repo-importer-ImporterBootstrap.level=error +#log4j.logger.org.alfresco.repo.importer.ImporterBootstrap=info + +logger.alfresco-repo-admin-patch-PatchExecuter.name=org.alfresco.repo.admin.patch.PatchExecuter +logger.alfresco-repo-admin-patch-PatchExecuter.level=info + +logger.alfresco-repo-domain-patch-ibatis-PatchDAOImpl.name=org.alfresco.repo.domain.patch.ibatis.PatchDAOImpl +logger.alfresco-repo-domain-patch-ibatis-PatchDAOImpl.level=info + +# Specific patches +logger.alfresco-repo-admin-patch-impl-DeploymentMigrationPatch.name=org.alfresco.repo.admin.patch.impl.DeploymentMigrationPatch +logger.alfresco-repo-admin-patch-impl-DeploymentMigrationPatch.level=info + +logger.alfresco-repo-version-VersionMigrator.name=org.alfresco.repo.version.VersionMigrator +logger.alfresco-repo-version-VersionMigrator.level=info + +logger.alfresco-repo-module-ModuleServiceImpl.name=org.alfresco.repo.module.ModuleServiceImpl +logger.alfresco-repo-module-ModuleServiceImpl.level=info + +logger.alfresco-repo-domain-schema-SchemaBootstrap.name=org.alfresco.repo.domain.schema.SchemaBootstrap +logger.alfresco-repo-domain-schema-SchemaBootstrap.level=info + +logger.alfresco-repo-admin-ConfigurationChecker.name=org.alfresco.repo.admin.ConfigurationChecker +logger.alfresco-repo-admin-ConfigurationChecker.level=info + +logger.alfresco-repo-node-index-AbstractReindexComponent.name=org.alfresco.repo.node.index.AbstractReindexComponent +logger.alfresco-repo-node-index-AbstractReindexComponent.level=warn + +logger.alfresco-repo-node-index-IndexTransactionTracker.name=org.alfresco.repo.node.index.IndexTransactionTracker +logger.alfresco-repo-node-index-IndexTransactionTracker.level=warn + +logger.alfresco-repo-node-index-FullIndexRecoveryComponent.name=org.alfresco.repo.node.index.FullIndexRecoveryComponent +logger.alfresco-repo-node-index-FullIndexRecoveryComponent.level=info + +#logger.alfresco-repo-node-db-hibernate-HibernateNodeDaoServiceImpl.name=org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl +#logger.alfresco-repo-node-db-hibernate-HibernateNodeDaoServiceImpl.level=warn + +logger.alfresco-repo-domain-hibernate-DirtySessionMethodInterceptor.name=org.alfresco.repo.domain.hibernate.DirtySessionMethodInterceptor +logger.alfresco-repo-domain-hibernate-DirtySessionMethodInterceptor.level=warn + +logger.alfresco-repo-transaction-RetryingTransactionHelper.name=org.alfresco.repo.transaction.RetryingTransactionHelper +logger.alfresco-repo-transaction-RetryingTransactionHelper.level=warn + +logger.alfresco-util-transaction-SpringAwareUserTransaction-trace.name=org.alfresco.util.transaction.SpringAwareUserTransaction.trace +logger.alfresco-util-transaction-SpringAwareUserTransaction-trace.level=warn + +logger.alfresco-util-AbstractTriggerBean.name=org.alfresco.util.AbstractTriggerBean +logger.alfresco-util-AbstractTriggerBean.level=warn + +logger.alfresco-enterprise-repo-cluster.name=org.alfresco.enterprise.repo.cluster +logger.alfresco-enterprise-repo-cluster.level=info + +logger.alfresco-repo-version-Version2ServiceImpl.name=org.alfresco.repo.version.Version2ServiceImpl +logger.alfresco-repo-version-Version2ServiceImpl.level=warn + +#logger.alfresco-web-app-DebugPhaseListener.name=org.alfresco.web.app.DebugPhaseListener +#logger.alfresco-web-app-DebugPhaseListener.level=debug + +logger.alfresco-repo-node-db-NodeStringLengthWorker.name=org.alfresco.repo.node.db.NodeStringLengthWorker +logger.alfresco-repo-node-db-NodeStringLengthWorker.level=info + +logger.alfresco-repo-workflow.name=org.alfresco.repo.workflow +logger.alfresco-repo-workflow.level=info + +# FTP server debugging +logger.alfresco-ftp-protocol.name=org.alfresco.ftp.protocol +logger.alfresco-ftp-protocol.level=error + +# WebDAV debugging +logger.alfresco-webdav-protocol.name=org.alfresco.webdav.protocol +logger.alfresco-webdav-protocol.level=info + +# NTLM servlet filters +#log4j.logger.org.alfresco.web.app.servlet.NTLMAuthenticationFilter=debug +#log4j.logger.org.alfresco.repo.webdav.auth.NTLMAuthenticationFilter=debug + +# Kerberos servlet filters +#log4j.logger.org.alfresco.web.app.servlet.KerberosAuthenticationFilter=debug +#log4j.logger.org.alfresco.repo.webdav.auth.KerberosAuthenticationFilter=debug + +# File servers +logger.alfresco-fileserver.name=org.alfresco.fileserver +logger.alfresco-fileserver.level=warn + +# Repo filesystem debug logging +#log4j.logger.org.alfresco.filesys.repo.ContentDiskDriver=debug + +# Integrity message threshold - if 'failOnViolation' is off, then WARNINGS are generated +logger.alfresco-repo-node-integrity.name=org.alfresco.repo.node.integrity +logger.alfresco-repo-node-integrity.level=error + +# Indexer debugging +logger.alfresco-repo-search-Indexer.name=org.alfresco.repo.search.Indexer +logger.alfresco-repo-search-Indexer.level=error + +logger.alfresco-repo-search-impl-lucene-index.name=org.alfresco.repo.search.impl.lucene.index +logger.alfresco-repo-search-impl-lucene-index.level=error + +logger.alfresco-repo-search-impl-lucene-fts-FullTextSearchIndexerImpl.name=org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexerImpl +logger.alfresco-repo-search-impl-lucene-fts-FullTextSearchIndexerImpl.level=warn + +# Audit debugging +# log4j.logger.org.alfresco.repo.audit=DEBUG +# log4j.logger.org.alfresco.repo.audit.model=DEBUG + +# Property sheet and modelling debugging +# change to error to hide the warnings about missing properties and associations +logger.missingProperties.name=alfresco.missingProperties +logger.missingProperties.level=warn + +# Dictionary/Model debugging +logger.alfresco-repo-dictionary.name=org.alfresco.repo.dictionary +logger.alfresco-repo-dictionary.level=warn + +# Virtualization Server Registry +logger.alfresco-mbeans-VirtServerRegistry.name=org.alfresco.mbeans.VirtServerRegistry +logger.alfresco-mbeans-VirtServerRegistry.level=error + +# Spring context runtime property setter +logger.alfresco-util-RuntimeSystemPropertiesSetter.name=org.alfresco.util.RuntimeSystemPropertiesSetter +logger.alfresco-util-RuntimeSystemPropertiesSetter.level=info + +# Debugging options for clustering +logger.alfresco-repo-content-ReplicatingContentStore.name=org.alfresco.repo.content.ReplicatingContentStore +logger.alfresco-repo-content-ReplicatingContentStore.level=error + +logger.alfresco-repo-content-replication.name=org.alfresco.repo.content.replication +logger.alfresco-repo-content-replication.level=error + +#log4j.logger.org.alfresco.repo.deploy.DeploymentServiceImpl=debug + +# Activity service +logger.alfresco-repo-activities.name=org.alfresco.repo.activities +logger.alfresco-repo-activities.level=warn + +# User usage tracking +logger.alfresco-repo-usage.name=org.alfresco.repo.usage +logger.alfresco-repo-usage.level=info + +# Sharepoint +logger.alfresco-module-vti.name=org.alfresco.module.vti +logger.alfresco-module-vti.level=info + +# Forms Engine +logger.alfresco-web-config-forms.name=org.alfresco.web.config.forms +logger.alfresco-web-config-forms.level=info + +logger.alfresco-web-scripts-forms.name=org.alfresco.web.scripts.forms +logger.alfresco-web-scripts-forms.level=info + +# CMIS +logger.alfresco-opencmis.name=org.alfresco.opencmis +logger.alfresco-opencmis.level=error + +logger.alfresco-opencmis-AlfrescoCmisServiceInterceptor.name=org.alfresco.opencmis.AlfrescoCmisServiceInterceptor +logger.alfresco-opencmis-AlfrescoCmisServiceInterceptor.level=error + +logger.alfresco-cmis.name=org.alfresco.cmis +logger.alfresco-cmis.level=error + +logger.alfresco-cmis-dictionary.name=org.alfresco.cmis.dictionary +logger.alfresco-cmis-dictionary.level=warn + +logger.apache-chemistry-opencmis.name=org.apache.chemistry.opencmis +logger.apache-chemistry-opencmis.level=info + +logger.apache-chemistry-opencmis-server-impl-browser-CmisBrowserBindingServlet.name=org.apache.chemistry.opencmis.server.impl.browser.CmisBrowserBindingServlet +logger.apache-chemistry-opencmis-server-impl-browser-CmisBrowserBindingServlet.level=off + +logger.apache-chemistry-opencmis-server-impl-atompub-CmisAtomPubServlet.name=org.apache.chemistry.opencmis.server.impl.atompub.CmisAtomPubServlet +logger.apache-chemistry-opencmis-server-impl-atompub-CmisAtomPubServlet.level=off + +# IMAP +logger.alfresco-repo-imap.name=org.alfresco.repo.imap +logger.alfresco-repo-imap.level=info + +# JBPM +# Note: non-fatal errors (eg. logged during job execution) should be handled by Alfresco's retrying transaction handler +logger.jbpm-graph-def-GraphElement.name=org.jbpm.graph.def.GraphElement +logger.jbpm-graph-def-GraphElement.level=fatal + +# Web Framework +logger.springframework-extensions-webscripts.name=org.springframework.extensions.webscripts +logger.springframework-extensions-webscripts.level=info + +logger.springframework-extensions-webscripts-ScriptLogger.name=org.springframework.extensions.webscripts.ScriptLogger +logger.springframework-extensions-webscripts-ScriptLogger.level=warn + +logger.springframework-extensions-webscripts-ScriptDebugger.name=org.springframework.extensions.webscripts.ScriptDebugger +logger.springframework-extensions-webscripts-ScriptDebugger.level=off + +# Repository +logger.alfresco-repo-web-scripts.name=org.alfresco.repo.web.scripts +logger.alfresco-repo-web-scripts.level=warn + +logger.alfresco-repo-web-scripts-BaseWebScriptTest.name=org.alfresco.repo.web.scripts.BaseWebScriptTest +logger.alfresco-repo-web-scripts-BaseWebScriptTest.level=info + +logger.alfresco-repo-web-scripts-AlfrescoRhinoScriptDebugger.name=org.alfresco.repo.web.scripts.AlfrescoRhinoScriptDebugger +logger.alfresco-repo-web-scripts-AlfrescoRhinoScriptDebugger.level=off + +logger.alfresco-repo-jscript.name=org.alfresco.repo.jscript +logger.alfresco-repo-jscript.level=error + +logger.alfresco-repo-jscript-ScriptLogger.name=org.alfresco.repo.jscript.ScriptLogger +logger.alfresco-repo-jscript-ScriptLogger.level=warn + +logger.alfresco-repo-cmis-rest-CMISTest.name=org.alfresco.repo.cmis.rest.CMISTest +logger.alfresco-repo-cmis-rest-CMISTest.level=info + +logger.alfresco-repo-domain-schema-script-ScriptBundleExecutorImpl.name=org.alfresco.repo.domain.schema.script.ScriptBundleExecutorImpl +logger.alfresco-repo-domain-schema-script-ScriptBundleExecutorImpl.level=off + +logger.alfresco-repo-domain-schema-script-ScriptExecutorImpl.name=org.alfresco.repo.domain.schema.script.ScriptExecutorImpl +logger.alfresco-repo-domain-schema-script-ScriptExecutorImpl.level=info + +logger.alfresco-repo-domain-schema-script-DeleteNotExistsExecutor.name=org.alfresco.repo.domain.schema.script.DeleteNotExistsExecutor +logger.alfresco-repo-domain-schema-script-DeleteNotExistsExecutor.level=off + +logger.alfresco-repo-search-impl-solr-facet-SolrFacetServiceImpl.name=org.alfresco.repo.search.impl.solr.facet.SolrFacetServiceImpl +logger.alfresco-repo-search-impl-solr-facet-SolrFacetServiceImpl.level=info + +# Bulk Filesystem Import Tool +logger.alfresco-repo-bulkimport.name=org.alfresco.repo.bulkimport +logger.alfresco-repo-bulkimport.level=warn + +# Freemarker +# Note the freemarker.runtime logger is used to log non-fatal errors that are handled by Alfresco's retrying transaction handler +logger.runtime.name=freemarker.runtime +logger.runtime.level= + +# Metadata extraction +logger.alfresco-repo-content-metadata-AbstractMappingMetadataExtracter.name=org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter +logger.alfresco-repo-content-metadata-AbstractMappingMetadataExtracter.level=warn + +# Reduces PDFont error level due to ALF-7105 +logger.apache-pdfbox-pdmodel-font-PDSimpleFont.name=org.apache.pdfbox.pdmodel.font.PDSimpleFont +logger.apache-pdfbox-pdmodel-font-PDSimpleFont.level=fatal + +logger.apache-pdfbox-pdmodel-font-PDCIDFont.name=org.apache.pdfbox.pdmodel.font.PDCIDFont +logger.apache-pdfbox-pdmodel-font-PDCIDFont.level=fatal + +# no index support +logger.alfresco-repo-search-impl-noindex-NoIndexIndexer.name=org.alfresco.repo.search.impl.noindex.NoIndexIndexer +logger.alfresco-repo-search-impl-noindex-NoIndexIndexer.level=fatal + +logger.alfresco-repo-search-impl-noindex-NoIndexSearchService.name=org.alfresco.repo.search.impl.noindex.NoIndexSearchService +logger.alfresco-repo-search-impl-noindex-NoIndexSearchService.level=fatal + +# lucene index warnings +logger.alfresco-repo-search-impl-lucene-index-IndexInfo.name=org.alfresco.repo.search.impl.lucene.index.IndexInfo +logger.alfresco-repo-search-impl-lucene-index-IndexInfo.level=warn + +# Warn about RMI socket bind retries. +logger.alfresco-util-remote-server-socket-HostConfigurableSocketFactory.name=org.alfresco.util.remote.server.socket.HostConfigurableSocketFactory +logger.alfresco-util-remote-server-socket-HostConfigurableSocketFactory.level=warn + +logger.alfresco-repo-usage-RepoUsageMonitor.name=org.alfresco.repo.usage.RepoUsageMonitor +logger.alfresco-repo-usage-RepoUsageMonitor.level=info + +# Authorization +logger.alfresco-enterprise-repo-authorization-AuthorizationService.name=org.alfresco.enterprise.repo.authorization.AuthorizationService +logger.alfresco-enterprise-repo-authorization-AuthorizationService.level=info + +logger.alfresco-enterprise-repo-authorization-AuthorizationsConsistencyMonitor.name=org.alfresco.enterprise.repo.authorization.AuthorizationsConsistencyMonitor +logger.alfresco-enterprise-repo-authorization-AuthorizationsConsistencyMonitor.level=warn + +#----------------------------------------------------------------------- +# Platform module logging +#----------------------------------------------------------------------- +logger.platformsample-DemoComponent.name=com.softwareloop.uploderplus.platformsample.DemoComponent +logger.platformsample-DemoComponent.level=debug +logger.platformsample-HelloWorldWebScript.name=com.softwareloop.uploderplus.platformsample.HelloWorldWebScript +logger.platformsample-HelloWorldWebScript.level=debug + + diff --git a/repo/src/test/resources/alfresco/extension/disable-webscript-caching-context.xml b/uploader-plus-platform-docker/src/main/docker/disable-webscript-caching-context.xml similarity index 100% rename from repo/src/test/resources/alfresco/extension/disable-webscript-caching-context.xml rename to uploader-plus-platform-docker/src/main/docker/disable-webscript-caching-context.xml diff --git a/uploader-plus-platform-docker/src/main/docker/hotswap-agent.properties b/uploader-plus-platform-docker/src/main/docker/hotswap-agent.properties new file mode 100644 index 0000000..6c30787 --- /dev/null +++ b/uploader-plus-platform-docker/src/main/docker/hotswap-agent.properties @@ -0,0 +1,48 @@ +# Enable hotswap so that changes in this module will be automatically reloaded +# Watch for changed class files on watchResources path and reload class definition in the running application. +autoHotswap=true +#autoHotswap.port=8000 + +# Add a directory prior to application classpath (load classes and resources). +# +# This may be useful for example in multi module maven project to load class changes from upstream project +# classes. Set extraClasspath to upstream project compiler output and .class file will have precedence to +# classes from built JAR file. +# i.e. monitor /target/classes +# should work with extraClasspath=${project.build.outputDirectory} +# If not try +extraClasspath=/usr/local/tomcat/hotswap-agent + +# Comma separated list of disabled plugins +# Use plugin name - e.g. +# Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat, +# ZK, Logback, JSF, Seam, ELResolver, OsgiEquinox, Proxy, WebObjects, Weld, JBossModules, Resteasy, Gae +disabledPlugins=Hibernate,Spring + +# Add a directory prior to webapp path (load webapp resources). +# +# Load web application resources (such as HTML, JSP, CSS, ...) from this directory prior to default processing. +# Use this setting to set to serve resources from source directory directly (e.g. src/main/webapp). +extraWebappContext=/usr/local/tomcat/hotswap-agent/uploader-plus-platform/target/classes/META-INF/resources; + +# Load static web resources from different directory. +# +# This setting is dependent on application server plugin(Jetty, Tomcat, JBoss, ...) +webappDir=/usr/local/tomcat/hotswap-agent/uploader-plus-platform/target/classes/META-INF/resources; + +# Watch for changes in a directory (resources only). +# +# Similar to extraClasspath this property adds classpath when searching for resources (not classes). +# While extra classpath just modifies the classloader, this setting does nothing until the resource +# is really changed. +# +# Sometimes it is not possible to point extraClasspath to your i.e. src/main/resources, because there are multiple +# replacements of resources in a building step (maven filtering resource option). +# This setting will leave i.e. src/target/classes as default source for resources, but after the resource is modified +# in src/main/resources, the new changed resource is served instead. +# watchResources= + +LOGGER.org.hotswap.agent=DEBUG +#LOGGER.org.hotswap.agent.plugin=TRACE +#LOGGER.org.hotswap.agent.watch=TRACE +#LOGGER.org.hotswap.agent.command=TRACE \ No newline at end of file diff --git a/uploader-plus-platform-docker/src/main/docker/license/README.md b/uploader-plus-platform-docker/src/main/docker/license/README.md new file mode 100644 index 0000000..996f1bd --- /dev/null +++ b/uploader-plus-platform-docker/src/main/docker/license/README.md @@ -0,0 +1,6 @@ +# Enterprise License location + +Put the Alfresco Enterprise license file in this directory. +It will then be copied into the ACS container in the +$TOMCAT_DIR/WEB-INF/classes/alfresco/extension/license directory. + diff --git a/uploader-plus-platform/pom.xml b/uploader-plus-platform/pom.xml new file mode 100644 index 0000000..03f4335 --- /dev/null +++ b/uploader-plus-platform/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + uploader-plus-platform + uploader-plus-repo + uploader-plus AMP for Alfresco repository + https://github.com/softwareloop/uploader-plus + jar + + + com.softwareloop + uploader-plus + 2.0 + + + + + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + diff --git a/uploader-plus-platform/src/main/assembly/amp.xml b/uploader-plus-platform/src/main/assembly/amp.xml new file mode 100644 index 0000000..238461a --- /dev/null +++ b/uploader-plus-platform/src/main/assembly/amp.xml @@ -0,0 +1,66 @@ + + + + + build-amp-file + + + amp + + + false + + + + + src/main/resources/alfresco/module/${project.artifactId}/module.properties + true + + + + src/main/assembly/file-mapping.properties + false + + + + src/main/resources/alfresco/module/${project.artifactId}/log4j2.properties + false + + + + + + + src/main/assembly/web + web + true + + README.md + + + + + + + + lib + + + + \ No newline at end of file diff --git a/surf/src/main/amp/file-mapping.properties b/uploader-plus-platform/src/main/assembly/file-mapping.properties similarity index 60% rename from surf/src/main/amp/file-mapping.properties rename to uploader-plus-platform/src/main/assembly/file-mapping.properties index 45cccaf..501b3d6 100644 --- a/surf/src/main/amp/file-mapping.properties +++ b/uploader-plus-platform/src/main/assembly/file-mapping.properties @@ -1,14 +1,27 @@ -# Custom AMP to WAR location mappings - -# -# The following property can be used to include the standard set of mappings. -# The contents of this file will override any defaults. The default is -# 'true', i.e. the default mappings will be augmented or modified by values in -# this file. -# -include.default=true - -# -# Custom mappings. If 'include.default' is false, then this is the complete set. -# -/web=/ +# Custom AMP to WAR location mappings + +# +# The following property can be used to include the standard set of mappings. +# The contents of this file will override any defaults. The default is +# 'true', i.e. the default mappings will be augmented or modified by values in +# this file. +# +# Default mappings are: +# +# /config=/WEB-INF/classes +# /lib=/WEB-INF/lib +# /licenses=/WEB-INF/licenses +# /web/jsp=/jsp +# /web/css=/css +# /web/images=/images +# /web/scripts=/scripts +# /web/php=/php +# +include.default=true + +# +# Custom mappings. If 'include.default' is false, then this is the complete set. +# Map /web to / in AMP so we can override things like favicon.ico +# +/web=/ + diff --git a/uploader-plus-platform/src/main/assembly/web/README.md b/uploader-plus-platform/src/main/assembly/web/README.md new file mode 100644 index 0000000..e3b1a7c --- /dev/null +++ b/uploader-plus-platform/src/main/assembly/web/README.md @@ -0,0 +1,22 @@ +# Web resources that should override out-of-the-box files + +Put here any web resources that should override out-of-the-box +web resources, such as favicon.ico. They will then end up in the +*/web* directory in the AMP, and applied to the WAR, and override +any existing web resources in the Alfresco.WAR. + +**Note**. Module dependency needs to be set to amp for the web resources to be applied by MMT: + +` + + ${project.groupId} + some-platform + ${project.version} + amp + +` + +**Important**. New web resources should not be located here, but instead + in the usual place in the *src/main/resources/META-INF/resources* directory. + + diff --git a/uploader-plus-platform/src/main/java/com/softwareloop/uploaderplus/ListContentTypesGet.java b/uploader-plus-platform/src/main/java/com/softwareloop/uploaderplus/ListContentTypesGet.java new file mode 100644 index 0000000..94e35cd --- /dev/null +++ b/uploader-plus-platform/src/main/java/com/softwareloop/uploaderplus/ListContentTypesGet.java @@ -0,0 +1,42 @@ +package com.softwareloop.uploaderplus; + +import org.alfresco.model.ContentModel; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.namespace.QName; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +import java.util.*; + +public class ListContentTypesGet extends DeclarativeWebScript { + private static final Logger logger = LoggerFactory.getLogger(ListContentTypesGet.class); + + private DictionaryService dictionaryService; + + public void setDictionaryService(DictionaryService dictionaryService) { this.dictionaryService = dictionaryService;} + + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { + logger.debug("ListContentTypesGet.execute()"); + + Map model = new HashMap<>(); + + Collection subtypes = + dictionaryService.getSubTypes(ContentModel.TYPE_CONTENT, true); + + List typesCollection = new ArrayList<>(); + for (QName subtype : subtypes) { + typesCollection.add(subtype.getPrefixString()); + } + Collections.sort(typesCollection); + + model.put("types", typesCollection.toArray()); + + logger.debug("END ListContentTypesGet.execute()"); + return model; + } +} diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml similarity index 80% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml index c94c170..364ab9a 100644 --- a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml +++ b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.desc.xml @@ -5,6 +5,5 @@ /uploader-plus/allowed-content-types?siteid={siteid}&containerid={containerid}&path={path} /uploader-plus/allowed-content-types?destination={destination} extension - user - required + user diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.js similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.js rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.js diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.json.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.json.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.json.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/allowed-content-types.get.json.ftl diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.config.xml b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.config.xml similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.config.xml rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.config.xml diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.desc.xml b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.desc.xml similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.desc.xml rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.desc.xml diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.js similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.js rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.js diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.json.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.json.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.json.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/list-content-types.get.json.ftl diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.desc.xml b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.desc.xml similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.desc.xml rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.desc.xml diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.js similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.js rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.js diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.json.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.json.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.json.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-list.get.json.ftl diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.desc.xml b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.desc.xml similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.desc.xml rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.desc.xml diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.js similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.js rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.js diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.json.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.json.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.json.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload-folders-new.post.json.ftl diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.desc.xml b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.desc.xml similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.desc.xml rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.desc.xml diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.ftl diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.status.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.status.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.status.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.html.status.ftl diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js index af34a2d..ed842ba 100644 --- a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js +++ b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js @@ -31,7 +31,6 @@ function uploaderPlusMain() case "containerid": case "destination": case "uploaddirectory": - case "createdirectory": case "updatenoderef": case "description": case "contenttype": @@ -40,6 +39,7 @@ function uploaderPlusMain() case "overwrite": case "thumbnails": case "updatenameandmimetype": + case "createdirectory": // ignore all special upload fields break; case "alf_redirect": diff --git a/repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.json.ftl b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.json.ftl similarity index 100% rename from repo/src/main/amp/config/alfresco/templates/webscripts/com/softwareloop/uploader-plus/upload.post.json.ftl rename to uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.json.ftl diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/alfresco-global.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/alfresco-global.properties similarity index 62% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/alfresco-global.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/alfresco-global.properties index 90cda7d..f566f22 100644 --- a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/alfresco-global.properties +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/alfresco-global.properties @@ -1,5 +1,5 @@ -## This Alfresco Repo Configuration file should be used for custom properties that are introduced by this module. +## This Alfresco Platform Configuration file should be used for custom properties that are introduced by this module. ## Define default values for all properties here. ## System Administrators can override these values in environment specific configurations in ## alfresco/tomcat/shared/classes/alfresco-global.properties. -## \ No newline at end of file +## diff --git a/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/bootstrap-context.xml b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/bootstrap-context.xml new file mode 100644 index 0000000..262e653 --- /dev/null +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/bootstrap-context.xml @@ -0,0 +1,24 @@ + + + + + + + + + + alfresco/module/${project.artifactId}/model/uploader-plus-model.xml + + + + + + alfresco/module/${project.artifactId}/messages/uploader-plus + + + + diff --git a/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/service-context.xml b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/service-context.xml new file mode 100644 index 0000000..3054fda --- /dev/null +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/service-context.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/webscript-context.xml b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/webscript-context.xml similarity index 62% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/webscript-context.xml rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/webscript-context.xml index 1b52cec..c91f75e 100644 --- a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/context/webscript-context.xml +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/context/webscript-context.xml @@ -1,5 +1,4 @@ - - - - - + + + + diff --git a/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/log4j2.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/log4j2.properties new file mode 100644 index 0000000..5bb2a36 --- /dev/null +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/log4j2.properties @@ -0,0 +1 @@ +# Add here module-specific custom log4j2.properties configuration \ No newline at end of file diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_de.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_de.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_de.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_de.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_es.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_es.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_es.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_es.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_it.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_it.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_it.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_it.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_nl.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_nl.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_nl.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_nl.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_pt_BR.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_pt_BR.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_pt_BR.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_pt_BR.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_ru.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_ru.properties similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/messages/uploader-plus_ru.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/messages/uploader-plus_ru.properties diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/model/uploader-plus-model.xml b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/model/uploader-plus-model.xml similarity index 100% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/model/uploader-plus-model.xml rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/model/uploader-plus-model.xml diff --git a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/module-context.xml b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/module-context.xml similarity index 57% rename from repo/src/main/amp/config/alfresco/module/uploader-plus-repo/module-context.xml rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/module-context.xml index 7fb56e5..ef2fa26 100644 --- a/repo/src/main/amp/config/alfresco/module/uploader-plus-repo/module-context.xml +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/module-context.xml @@ -15,11 +15,18 @@ limitations under the License. --> - - + + + + diff --git a/repo/src/main/amp/module.properties b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/module.properties similarity index 95% rename from repo/src/main/amp/module.properties rename to uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/module.properties index 0e5c045..1027062 100644 --- a/repo/src/main/amp/module.properties +++ b/uploader-plus-platform/src/main/resources/alfresco/module/uploader-plus-platform/module.properties @@ -1,48 +1,48 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - - -# SDK Sample module - -# ==== Beginning of Alfresco required/optional properties ====== # -# NB: These properties are filtered at build time by Maven, single -# sourcing from POM properties -module.id=${project.artifactId} -#module.aliases=myModule-123, my-module -module.title=${project.name} -module.description=${project.description} -module.version=${noSnapshotVersion} - -# The following optional properties can be used to prevent the module from being added -# to inappropriate versions of the WAR file. -# module.repo.version.min=2.0 -# module.repo.version.max=2.1 - -# FIXME: This dependencies should come out of mvn dependencies on amp - -# The following describe dependencies on other modules -# Depends on net.sf.myproject.module.SupportModuleA version ${version} or later -# module.depends.net.sf.myproject.module.SupportModuleA=${version}-* -# Depends on net.sf.myproject.module.SupportModuleA version ${version} to 2.0 -# module.depends.net.sf.myproject.module.SupportModuleB=${version}-2.0 -# Depends on net.sf.myproject.module.SupportModuleC - any version -# module.depends.net.sf.myproject.module.SupportModuleB=* - - -# ==== End of Alfresco required/optional properties ======= # - - +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + + +# SDK Sample module + +# ==== Beginning of Alfresco required/optional properties ====== # +# NB: These properties are filtered at build time by Maven, single +# sourcing from POM properties +module.id=${project.artifactId} +#module.aliases=myModule-123, my-module +module.title=${project.name} +module.description=${project.description} +module.version=${project.version} + +# The following optional properties can be used to prevent the module from being added +# to inappropriate versions of the WAR file. +# module.repo.version.min=2.0 +# module.repo.version.max=2.1 + +# FIXME: This dependencies should come out of mvn dependencies on amp + +# The following describe dependencies on other modules +# Depends on net.sf.myproject.module.SupportModuleA version ${version} or later +# module.depends.net.sf.myproject.module.SupportModuleA=${version}-* +# Depends on net.sf.myproject.module.SupportModuleA version ${version} to 2.0 +# module.depends.net.sf.myproject.module.SupportModuleB=${version}-2.0 +# Depends on net.sf.myproject.module.SupportModuleC - any version +# module.depends.net.sf.myproject.module.SupportModuleB=* + + +# ==== End of Alfresco required/optional properties ======= # + + # ==== Beginning of module required properties/optional ====== # \ No newline at end of file diff --git a/uploader-plus-share-docker/pom.xml b/uploader-plus-share-docker/pom.xml new file mode 100644 index 0000000..c206729 --- /dev/null +++ b/uploader-plus-share-docker/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + uploader-plus-share-docker + Alfresco Share Docker Module + Share Docker Module to generate the final Docker image + jar + + + com.softwareloop + uploader-plus + 2.0 + + + + + + + + com.softwareloop + uploader-plus-share + 2.0 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + + collect-extensions + package + + copy-dependencies + + + ${project.build.directory}/extensions + runtime + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + copy-and-filter-docker-resources + validate + + copy-resources + + + ${project.build.directory} + + + src/main/docker + true + + + + + + + + + diff --git a/uploader-plus-share-docker/src/main/docker/Dockerfile b/uploader-plus-share-docker/src/main/docker/Dockerfile new file mode 100644 index 0000000..0865b17 --- /dev/null +++ b/uploader-plus-share-docker/src/main/docker/Dockerfile @@ -0,0 +1,16 @@ +FROM ${docker.share.image}:${alfresco.share.docker.version} + +ARG TOMCAT_DIR=/usr/local/tomcat + +# Copy Dockerfile to avoid an error if no JARs exist +COPY Dockerfile extensions/*.jar $TOMCAT_DIR/webapps/share/WEB-INF/lib/ + +# Copy Dockerfile to avoid an error if no AMPs exist +COPY Dockerfile extensions/*.amp $TOMCAT_DIR/amps_share/ +RUN java -jar $TOMCAT_DIR/alfresco-mmt/alfresco-mmt*.jar install \ + $TOMCAT_DIR/amps_share $TOMCAT_DIR/webapps/share -directory -nobackup -force + +COPY share-config-custom.xml $TOMCAT_DIR/shared/classes/alfresco/web-extension + +COPY log4j2.properties $TOMCAT_DIR/webapps/share/WEB-INF/classes +COPY hotswap-agent.properties $TOMCAT_DIR/webapps/share/WEB-INF/classes diff --git a/uploader-plus-share-docker/src/main/docker/hotswap-agent.properties b/uploader-plus-share-docker/src/main/docker/hotswap-agent.properties new file mode 100644 index 0000000..4af2aa0 --- /dev/null +++ b/uploader-plus-share-docker/src/main/docker/hotswap-agent.properties @@ -0,0 +1,49 @@ +# Enable hotswap so that changes in this module will be automatically reloaded +# Watch for changed class files on watchResources path and reload class definition in the running application. +autoHotswap=true +#autoHotswap.port=8000 + +# Add a directory prior to application classpath (load classes and resources). +# +# This may be useful for example in multi module maven project to load class changes from upstream project +# classes. Set extraClasspath to upstream project compiler output and .class file will have precedence to +# classes from built JAR file. +# i.e. monitor /target/classes +# should work with extraClasspath=${project.build.outputDirectory} +# If not try +extraClasspath=/usr/local/tomcat/hotswap-agent + + +# Comma separated list of disabled plugins +# Use plugin name - e.g. +# Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat, +# ZK, Logback, JSF, Seam, ELResolver, OsgiEquinox, Proxy, WebObjects, Weld, JBossModules, Resteasy, Gae +disabledPlugins=Hibernate,Spring + +# Add a directory prior to webapp path (load webapp resources). +# +# Load web application resources (such as HTML, JSP, CSS, ...) from this directory prior to default processing. +# Use this setting to set to serve resources from source directory directly (e.g. src/main/webapp). +extraWebappContext=/usr/local/tomcat/hotswap-agent/uploader-plus-share/target/classes/META-INF/resources; + +# Load static web resources from different directory. +# +# This setting is dependent on application server plugin(Jetty, Tomcat, JBoss, ...) +webappDir=/usr/local/tomcat/hotswap-agent/uploader-plus-share/target/classes/META-INF/resources; + +# Watch for changes in a directory (resources only). +# +# Similar to extraClasspath this property adds classpath when searching for resources (not classes). +# While extra classpath just modifies the classloader, this setting does nothing until the resource +# is really changed. +# +# Sometimes it is not possible to point extraClasspath to your i.e. src/main/resources, because there are multiple +# replacements of resources in a building step (maven filtering resource option). +# This setting will leave i.e. src/target/classes as default source for resources, but after the resource is modified +# in src/main/resources, the new changed resource is served instead. +# watchResources= + +LOGGER.org.hotswap.agent=DEBUG +#LOGGER.org.hotswap.agent.plugin=TRACE +#LOGGER.org.hotswap.agent.watch=TRACE +#LOGGER.org.hotswap.agent.command=TRACE \ No newline at end of file diff --git a/uploader-plus-share-docker/src/main/docker/log4j2.properties b/uploader-plus-share-docker/src/main/docker/log4j2.properties new file mode 100644 index 0000000..21142f5 --- /dev/null +++ b/uploader-plus-share-docker/src/main/docker/log4j2.properties @@ -0,0 +1,86 @@ +# Set root logger level to error +#log4j.rootLogger=error, Console, File +rootLogger.level=error +rootLogger.appenderRef.stdout.ref=ConsoleAppender +rootLogger.appenderRef.rolling.ref=RollingAppender + +# Console appender definition # + +# All outputs currently set to be a ConsoleAppender. +appender.console.type=Console +appender.console.name=ConsoleAppender +appender.console.layout.type=PatternLayout +appender.console.layout.pattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %replace{%m}{[\r\n]+}{}%n + +# use log4j NDC to replace %x with tenant domain / username +appender.console.layout.pattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %replace{%m}{[\r\n]+}{}%n + +# File appender definition # +appender.rolling.type=RollingFile +appender.rolling.name=RollingAppender +appender.rolling.fileName=alfresco.log +appender.rolling.filePattern=alfresco.log.%d{yyyy-MM-dd} +appender.rolling.layout.type=PatternLayout +appender.rolling.layout.pattern=%d{yyyy-MM-dd} %d{ABSOLUTE} %-5p [%c] [%t] %replace{%m}{[\r\n]+}{}%n +appender.rolling.policies.type = Policies +appender.rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.rolling.policies.time.interval = 1 + +# Spring +logger.springframework.name=org.springframework +logger.springframework.level=warn + +# Turn off Spring remoting warnings that should really be info or debug. +logger.springframework-remoting-support.name=org.springframework.remoting.support +logger.springframework-remoting-support.level=error + +logger.springframework-util.name=org.springframework.util +logger.springframework-util.level=error + +# MyFaces +logger.apache-myfaces-util-DebugUtils.name=org.apache.myfaces.util.DebugUtils +logger.apache-myfaces-util-DebugUtils.level=info + +logger.apache-myfaces-el-VariableResolverImpl.name=org.apache.myfaces.el.VariableResolverImpl +logger.apache-myfaces-el-VariableResolverImpl.level=error + +logger.apache-myfaces-application-jsp-JspViewHandlerImpl.name=org.apache.myfaces.application.jsp.JspViewHandlerImpl +logger.apache-myfaces-application-jsp-JspViewHandlerImpl.level=error + +logger.apache-myfaces-taglib.name=org.apache.myfaces.taglib +logger.apache-myfaces-taglib.level=error + +# Alfresco +logger.alfresco.name=org.alfresco +logger.alfresco.level=error + +logger.alfresco-config.name=org.alfresco.config +logger.alfresco-config.level=warn + +logger.alfresco-config-JndiObjectFactoryBean.name=org.alfresco.config.JndiObjectFactoryBean +logger.alfresco-config-JndiObjectFactoryBean.level=warn + +logger.alfresco-web.name=org.alfresco.web +logger.alfresco-web.level=info + +# Web Framework +logger.springframework-extensions-webscripts.name=org.springframework.extensions.webscripts +logger.springframework-extensions-webscripts.level=info + +logger.springframework-extensions-webscripts-ScriptLogger.name=org.springframework.extensions.webscripts.ScriptLogger +logger.springframework-extensions-webscripts-ScriptLogger.level=warn + +logger.springframework-extensions-webscripts-ScriptDebugger.name=org.springframework.extensions.webscripts.ScriptDebugger +logger.springframework-extensions-webscripts-ScriptDebugger.level=off + +# Freemarker +# Note the freemarker.runtime logger is used to log non-fatal errors that are handled by Alfresco's retrying transaction handler +logger.freemarker-runtime.name=freemarker.runtime +logger.freemarker-runtime.level= + +#----------------------------------------------------------------------- +# Custom Share module logging goes here... +#----------------------------------------------------------------------- + + + diff --git a/surf/src/test/resources/alfresco/web-extension/share-config-custom.xml b/uploader-plus-share-docker/src/main/docker/share-config-custom.xml similarity index 77% rename from surf/src/test/resources/alfresco/web-extension/share-config-custom.xml rename to uploader-plus-share-docker/src/main/docker/share-config-custom.xml index 203f37a..dafd792 100644 --- a/surf/src/test/resources/alfresco/web-extension/share-config-custom.xml +++ b/uploader-plus-share-docker/src/main/docker/share-config-custom.xml @@ -21,6 +21,7 @@ + @@ -38,12 +39,13 @@ - + + + + + ${alfresco.groupId} + share + classes + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + + diff --git a/uploader-plus-share/src/main/assembly/amp.xml b/uploader-plus-share/src/main/assembly/amp.xml new file mode 100644 index 0000000..eaa8613 --- /dev/null +++ b/uploader-plus-share/src/main/assembly/amp.xml @@ -0,0 +1,66 @@ + + + + + build-amp-file + + + amp + + + false + + + + + src/main/resources/alfresco/module/${project.artifactId}/module.properties + true + + + + src/main/assembly/file-mapping.properties + false + + + + src/main/resources/alfresco/module/${project.artifactId}/log4j2.properties + false + + + + + + + src/main/assembly/web + web + true + + README.md + + + + + + + + lib + + + + \ No newline at end of file diff --git a/uploader-plus-share/src/main/assembly/file-mapping.properties b/uploader-plus-share/src/main/assembly/file-mapping.properties new file mode 100644 index 0000000..501b3d6 --- /dev/null +++ b/uploader-plus-share/src/main/assembly/file-mapping.properties @@ -0,0 +1,27 @@ +# Custom AMP to WAR location mappings + +# +# The following property can be used to include the standard set of mappings. +# The contents of this file will override any defaults. The default is +# 'true', i.e. the default mappings will be augmented or modified by values in +# this file. +# +# Default mappings are: +# +# /config=/WEB-INF/classes +# /lib=/WEB-INF/lib +# /licenses=/WEB-INF/licenses +# /web/jsp=/jsp +# /web/css=/css +# /web/images=/images +# /web/scripts=/scripts +# /web/php=/php +# +include.default=true + +# +# Custom mappings. If 'include.default' is false, then this is the complete set. +# Map /web to / in AMP so we can override things like favicon.ico +# +/web=/ + diff --git a/uploader-plus-share/src/main/assembly/web/README.md b/uploader-plus-share/src/main/assembly/web/README.md new file mode 100644 index 0000000..0901911 --- /dev/null +++ b/uploader-plus-share/src/main/assembly/web/README.md @@ -0,0 +1,22 @@ +# Web resources that should override out-of-the-box files + +Put here any web resources that should override out-of-the-box +web resources, such as favicon.ico. They will then end up in the +*/web* directory in the AMP, and applied to the WAR, and override +any existing web resources in the Share.WAR. + +**Note**. Module dependency needs to be set to amp for the web resources to be applied by MMT: + +` + + ${project.groupId} + some-share + ${project.version} + amp + +` + +**Important**. New web resources should not be located here, but instead + in the usual place in the *src/main/resources/META-INF/resources//* directory. + + diff --git a/surf/src/main/amp/web/components/uploader-plus/css/uploader-plus-admin.css b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/css/uploader-plus-admin.css similarity index 100% rename from surf/src/main/amp/web/components/uploader-plus/css/uploader-plus-admin.css rename to uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/css/uploader-plus-admin.css diff --git a/surf/src/main/amp/web/components/uploader-plus/css/uploader-plus.css b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/css/uploader-plus.css similarity index 100% rename from surf/src/main/amp/web/components/uploader-plus/css/uploader-plus.css rename to uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/css/uploader-plus.css diff --git a/surf/src/main/amp/web/components/uploader-plus/js/common.js b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/common.js similarity index 100% rename from surf/src/main/amp/web/components/uploader-plus/js/common.js rename to uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/common.js diff --git a/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/common.min.js b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/common.min.js new file mode 100644 index 0000000..1281e7d --- /dev/null +++ b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/common.min.js @@ -0,0 +1,3 @@ +'use strict';var SoftwareLoop=SoftwareLoop||{hitch:function(b,a){return function(){a.apply(b,arguments)}},printStackTrace:function(b){Alfresco.logger.debug("printStackTrace",arguments);var a;b.stack&&(a=b.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.\s*\(/gm,"{anonymous}()@").split("\n"));console.log(b.message,a)},fireEvent:function(b,a,c,e){Alfresco.logger.debug("fireEvent",arguments);"undefined"===typeof c&&(Alfresco.logger.debug("Setting canBubble to default"), +c=!0);"undefined"===typeof e&&(Alfresco.logger.debug("Setting cancelable to default"),e=!0);if(document.createEvent){Alfresco.logger.debug("document.createEvent available");var d=document.createEvent("HTMLEvents");d.initEvent(a,c,e);return b.dispatchEvent(d)}Alfresco.logger.debug("document.createEvent not available");d=document.createEventObject();return b.fireEvent("on"+a,d)}}; +Array.prototype.indexOf||(Array.prototype.indexOf=function(b,a){a=a||0;for(var c=this.length;a 0) - )) { - + (current != "prop_mimetype" || + (current == "prop_mimetype" && YAHOO.lang.isString(fileInfo.propertyData[current]) && fileInfo.propertyData[current].length > 0) + )) { + Alfresco.logger.debug("Appending", current); formData.append(current, fileInfo.propertyData[current]); } @@ -228,27 +224,10 @@ Alfresco.logger.debug("formData:", formData); // END: uploader-plus customisations - fileInfo.request.open("POST", url, true); + fileInfo.request.open("POST", url, true); fileInfo.request.send(formData); - fileInfo.request.onreadystatechange = function() { - if (this.status === 401) - { - var redirect = this.getResponseHeader["Location"]; - if (redirect) - { - window.location.href = window.location.protocol + "//" + window.location.host + redirect; - return; - } - else - { - window.location.reload(true); - return; - } - } - }; } - else if (this.uploadMethod === this.INMEMORY_UPLOAD) - { + else if (this.uploadMethod === this.INMEMORY_UPLOAD) { Alfresco.logger.debug("Using custom multipart upload"); // PLEASE NOTE: Be *VERY* careful modifying the following code, this carefully constructs a multipart formatted request... @@ -265,12 +244,10 @@ customFormData += rn + "Content-Disposition: form-data; name=\"filename\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.filename)) + rn + "--" + multipartBoundary; customFormData += rn + "Content-Disposition: form-data; name=\"destination\""; - if (fileInfo.uploadData.destination !== null) - { + if (fileInfo.uploadData.destination !== null) { customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.destination)) + rn + "--" + multipartBoundary; } - else - { + else { customFormData += rn + rn + rn + "--" + multipartBoundary; } customFormData += rn + "Content-Disposition: form-data; name=\"siteId\""; @@ -281,28 +258,23 @@ customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.uploaddirectory)) + rn + "--" + multipartBoundary + "--"; customFormData += rn + "Content-Disposition: form-data; name=\"majorVersion\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.majorVersion)) + rn + "--" + multipartBoundary + "--"; - if (fileInfo.uploadData.updateNodeRef) - { + if (fileInfo.uploadData.updateNodeRef) { customFormData += rn + "Content-Disposition: form-data; name=\"updateNodeRef\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.updateNodeRef)) + rn + "--" + multipartBoundary + "--"; } - if (fileInfo.uploadData.description) - { + if (fileInfo.uploadData.description) { customFormData += rn + "Content-Disposition: form-data; name=\"description\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.description)) + rn + "--" + multipartBoundary + "--"; } - if (fileInfo.uploadData.username) - { + if (fileInfo.uploadData.username) { customFormData += rn + "Content-Disposition: form-data; name=\"username\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.username)) + rn + "--" + multipartBoundary + "--"; } - if (fileInfo.uploadData.overwrite) - { + if (fileInfo.uploadData.overwrite) { customFormData += rn + "Content-Disposition: form-data; name=\"overwrite\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.overwrite)) + rn + "--" + multipartBoundary + "--"; } - if (fileInfo.uploadData.thumbnails) - { + if (fileInfo.uploadData.thumbnails) { customFormData += rn + "Content-Disposition: form-data; name=\"thumbnails\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.uploadData.thumbnails)) + rn + "--" + multipartBoundary + "--"; } @@ -315,10 +287,10 @@ if (fileInfo.propertyData) { for (var current in fileInfo.propertyData) { if (fileInfo.propertyData.hasOwnProperty(current) && - (current != "prop_mimetype" || - (current == "prop_mimetype" && YAHOO.lang.isString(fileInfo.propertyData[current]) && fileInfo.propertyData[current].length > 0) - )) { - + (current != "prop_mimetype" || + (current == "prop_mimetype" && YAHOO.lang.isString(fileInfo.propertyData[current]) && fileInfo.propertyData[current].length > 0) + )) { + customFormData += rn + "Content-Disposition: form-data; name=\"" + current + "\""; customFormData += rn + rn + unescape(encodeURIComponent(fileInfo.propertyData[current])) + rn + "--" + multipartBoundary + "--"; } @@ -326,12 +298,10 @@ } // END: uploader-plus customisations - - fileInfo.request.open("POST", url, true); + fileInfo.request.open("POST", url, true); fileInfo.request.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + multipartBoundary); fileInfo.request.sendAsBinary(customFormData); } } - })); })(); diff --git a/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js new file mode 100644 index 0000000..92f32a5 --- /dev/null +++ b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js @@ -0,0 +1,17 @@ +'use strict';(function(){Alfresco.logger.debug("dnd-upload-plus.js");SoftwareLoop.DNDUpload=function(a){SoftwareLoop.DNDUpload.superclass.constructor.call(this,"null");Alfresco.util.ComponentManager.unregister(this);this.id="undefined"==typeof a||null===a?Alfresco.util.generateDomId():a;this.name="SoftwareLoop.DNDUpload";Alfresco.util.ComponentManager.register(this);return this};YAHOO.lang.extend(SoftwareLoop.DNDUpload,Alfresco.DNDUpload,YAHOO.lang.merge(SoftwareLoop.UploaderPlusMixin,{spawnUploadsBooked:!1, +savedDialogTitle:null,records:null,currentRecordIndex:-1,show:function(a){Alfresco.logger.debug("show",arguments);SoftwareLoop.DNDUpload.superclass.show.call(this,a);this.loadTypes(function(){Alfresco.logger.debug("loadTypes callback");this.populateSelect();this.spawnUploadsBooked&&(Alfresco.logger.debug("this.spawnUploadsBooked is true"),this.spawnUploadsBooked=!1,this._spawnUploads())},this);Alfresco.logger.debug("END show")},_spawnUploads:function(){Alfresco.logger.debug("_spawnUploads",arguments); +if(this.typesLoaded){this.shouldUseSameMetadataSet||this.cleanupOldFormForNextUpload();if(this.showConfig.mode===this.MODE_SINGLE_UPDATE)return Alfresco.logger.debug("Single update"),SoftwareLoop.DNDUpload.superclass._spawnUploads.call(this);if(null==this.types)return Alfresco.logger.debug("Types is null"),SoftwareLoop.DNDUpload.superclass._spawnUploads.call(this);this.savedDialogTitle=YAHOO.util.Dom.get(this.id+"-title-span").innerText;this.records=this.dataTable.getRecordSet().getRecords();Alfresco.logger.debug("records", +this.records);this.currentRecordIndex=0;this.showMetadataDialog();Alfresco.logger.debug("END _spawnUploads")}else Alfresco.logger.debug("Types not loaded yet. Postponing"),this.spawnUploadsBooked=!0},showMetadataDialog:function(){Alfresco.logger.debug("showMetadataDialog",arguments);if(this.currentRecordIndex==this.records.length)return Alfresco.logger.debug("At the end of the records array"),this.showMainDialog(),SoftwareLoop.DNDUpload.superclass._spawnUploads.apply(this);var a=this.records[this.currentRecordIndex].getData(); +if(this.fileStore[a.id].state!==this.STATE_ADDED)return Alfresco.logger.debug("State != STATE_ADDED"),SoftwareLoop.DNDUpload.superclass._spawnUploads.apply(this);YAHOO.util.Dom.get(this.id+"-title-span").innerText=Alfresco.util.encodeHTML(a.name);YAHOO.util.Dom.addClass(this.id+"-main-dialog","fake-hidden");YAHOO.util.Dom.removeClass(this.id+"-metadata-dialog","hidden");this.contentTypeSelectNode.selectedIndex=0;SoftwareLoop.fireEvent(this.contentTypeSelectNode,"change");Alfresco.logger.debug("END showMetadataDialog")}, +showMainDialog:function(){Alfresco.logger.debug("showMainDialog",arguments);null!=this.savedDialogTitle&&(Alfresco.logger.debug("Restore saved dialog title"),YAHOO.util.Dom.get(this.id+"-title-span").innerText=this.savedDialogTitle,this.savedDialogTitle=null);this.records=null;this.currentRecordIndex=-1;YAHOO.util.Dom.removeClass(this.id+"-main-dialog","fake-hidden");YAHOO.util.Dom.addClass(this.id+"-metadata-dialog","hidden");this.centerPanel();Alfresco.logger.debug("END showMainDialog")},_resetGUI:function(){Alfresco.logger.debug("_resetGUI", +arguments);this.showMainDialog();SoftwareLoop.DNDUpload.superclass._resetGUI.apply(this,arguments);Alfresco.logger.debug("END _resetGUI")},onMetadataCancel:function(a){Alfresco.logger.debug("onMetadataCancel",arguments);this.showMainDialog();this.onCancelOkButtonClick(a);Alfresco.logger.debug("END onMetadataCancel")},_startUpload:function(a){Alfresco.logger.debug("_startUpload",arguments);a.state=this.STATE_UPLOADING;var e=null===this.showConfig.uploadURL?Alfresco.constants.PROXY_URI+"uploader-plus/upload": +Alfresco.constants.PROXY_URI+this.showConfig.uploadURL;Alfresco.util.CSRFPolicy.isFilterEnabled()&&(e+="?"+Alfresco.util.CSRFPolicy.getParameter()+"="+encodeURIComponent(Alfresco.util.CSRFPolicy.getToken()));if(this.uploadMethod===this.FORMDATA_UPLOAD){Alfresco.logger.debug("Using FormData for file upload");var b=new FormData;b.append("filedata",a.uploadData.filedata);b.append("filename",a.uploadData.filename);b.append("destination",a.uploadData.destination);b.append("uploaddirectory",a.uploadData.uploaddirectory); +b.append("createdirectory",a.uploadData.createdirectory?"true":"false");b.append("majorVersion",a.uploadData.majorVersion?"true":"false");b.append("username",a.uploadData.username);b.append("overwrite",a.uploadData.overwrite);b.append("thumbnails",a.uploadData.thumbnails);b.append("updatenameandmimetype",a.uploadData.updateNameAndMimetype);a.uploadData.updateNodeRef?b.append("updateNodeRef",a.uploadData.updateNodeRef):(b.append("siteId",a.uploadData.siteId),b.append("containerId",a.uploadData.containerId)); +a.uploadData.description&&b.append("description",a.uploadData.description);Alfresco.logger.debug("fileInfo",a);if(a.propertyData){a.propertyData.contentType&&(Alfresco.logger.debug("Appending content type",a.propertyData.contentType),b.append("contentType",a.propertyData.contentType));Alfresco.logger.debug("Processing propertyData");for(var d in a.propertyData)Alfresco.logger.debug("Current:",d),a.propertyData.hasOwnProperty(d)&&("prop_mimetype"!=d||"prop_mimetype"==d&&YAHOO.lang.isString(a.propertyData[d])&& +0{text}",{href:Alfresco.util.encodeHTML(f),title:this.msg("open.in.repository"), +text:Alfresco.util.encodeHTML(c)});Alfresco.logger.debug("END pathFormatter")},allowedTypesFormatter:function(b,a,d,e){Alfresco.logger.debug("allowedTypesFormatter",arguments);for(var c="",f=0;f | "+this.msg("button.delete")+"";Alfresco.logger.debug("END actionFormatter")},setupDataTable:function(){Alfresco.logger.debug("setupDataTable",arguments);var b=[{key:"path",label:this.msg("title.path"),sortable:!1,formatter:SoftwareLoop.hitch(this,this.pathFormatter)},{key:"allowedTypes",label:this.msg("title.allowed.types"), +sortable:!1,formatter:SoftwareLoop.hitch(this,this.allowedTypesFormatter)},{key:"actions",label:this.msg("title.actions"),sortable:!1,formatter:SoftwareLoop.hitch(this,this.actionFormatter)}],a=this.widgets.dataSource=new YAHOO.util.DataSource(this.uploadFoldersListUrl,{responseType:YAHOO.util.DataSource.TYPE_JSON,connXhrMode:"queueRequests",responseSchema:{resultsList:"results",fields:["path","nodeRef","allowedTypes"]}});b=this.widgets.dataTable=new YAHOO.widget.DataTable(this.id+"-folders",b,a, +{initialLoad:{},MSG_LOADING:this.msg("loading.folders"),MSG_EMPTY:this.msg("no.folders.found")});b.subscribe("rowMouseoverEvent",b.onEventHighlightRow);b.subscribe("rowMouseoutEvent",b.onEventUnhighlightRow);YAHOO.util.Event.delegate(this.id,"click",SoftwareLoop.hitch(this,this.editUploadFolderHandler),"a.edit-upload-folder");YAHOO.util.Event.delegate(this.id,"click",SoftwareLoop.hitch(this,this.deleteUploadFolderHandler),"a.delete-upload-folder");Alfresco.logger.debug("END setupDataTable")},setupNewUploadFolderButton:function(){Alfresco.logger.debug("setupNewUploadFolderButton", +arguments);this.widgets.newUploadFolderButton=new YAHOO.widget.Button(this.id+"-new-upload-folder");this.widgets.newUploadFolderButton.on("click",function(){this.promptForFolder()},null,this);Alfresco.logger.debug("END setupNewUploadFolderButton")},promptForFolder:function(){Alfresco.logger.debug("promptForFolder",arguments);var b=new Alfresco.module.DoclibGlobalFolder(this.id+"-new-form"),a=Alfresco.module.DoclibGlobalFolder;b.setOptions({viewMode:a.VIEW_MODE_SITE,defaultViewMode:a.VIEW_MODE_SITE, +allowedViewModes:[a.VIEW_MODE_SITE,a.VIEW_MODE_REPOSITORY,a.VIEW_MODE_SHARED,a.VIEW_MODE_USERHOME],title:this.msg("select.the.upload.folder")});var d=this;b.onOK=function(){Alfresco.logger.debug("onOK callback");Alfresco.module.DoclibGlobalFolder.prototype.onOK.apply(this,arguments);this.selectedNode&&(Alfresco.logger.debug("A node was selected",this.selectedNode),d.createUploadFolder(this.selectedNode.data.nodeRef))};b.showDialog();Alfresco.logger.debug("END promptForFolder")},createUploadFolder:function(b){Alfresco.logger.debug("createUploadFolder", +arguments);var a=Alfresco.util.NodeRef(b);a=YAHOO.lang.substitute(Alfresco.constants.PROXY_URI+"uploader-plus/upload-folders-new/{storeType}/{storeId}/{id}",a);Alfresco.util.Ajax.jsonPost({url:a,responseContentType:Alfresco.util.Ajax.JSON,successCallback:{fn:function(d){Alfresco.logger.debug("successCallback",arguments);var e=d.json.status,c=d.json.node;0==e?(Alfresco.logger.debug("status == 0"),e=this.findUploadFolderPosition(c),this.widgets.dataTable.addRow(c,e),c=this.widgets.dataTable.getRecord(e), +this.editUploadFolderRecord(c)):1==e&&(Alfresco.logger.debug("status == 1"),Alfresco.util.PopupManager.displayMessage({text:YAHOO.lang.substitute(this.msg("_.is.already.an.upload.folder"),c)}))},scope:this},failureMessage:this.msg("operation.failed")});Alfresco.logger.debug("END createUploadFolder")},findUploadFolderPosition:function(b){Alfresco.logger.debug("findUploadFolderPosition",arguments);for(var a=this.widgets.dataTable.getRecordSet().getRecords(),d=0;db.path)return Alfresco.logger.debug("Found position"),d;Alfresco.logger.debug("END findUploadFolderPosition",d);return d},editUploadFolderHandler:function(b,a,d){Alfresco.logger.debug("editUploadFolderHandler",arguments);var e=this.widgets.dataTable.getRecord(a.parentNode.parentNode.parentNode);this.editUploadFolderRecord(e);Alfresco.logger.debug("END editUploadFolderHandler")},editUploadFolderRecord:function(b){Alfresco.logger.debug("editUploadFolderRecord",arguments);var a= +b.getData(),d=this.id+"-edit-form",e=YAHOO.lang.substitute("{serviceContext}components/form?itemKind=node&itemId={itemId}&mode=edit&submitType=json&formId={formId}&showCancelButton=true&htmlid={htmlid}",{serviceContext:Alfresco.constants.URL_SERVICECONTEXT,itemId:a.nodeRef,formId:"upload-folder",htmlid:d}),c=Alfresco.util.NodeRef(a.nodeRef);c=YAHOO.lang.substitute(Alfresco.constants.PROXY_URI+"api/node/{storeType}/{storeId}/{id}/formprocessor",c);(new Alfresco.module.SimpleDialog(d)).setOptions({width:"40em", +templateUrl:e,actionUrl:c,destroyOnHide:!0,doBeforeDialogShow:{fn:function(){Alfresco.logger.debug("doBeforeDialogShow callback",arguments);var f=YAHOO.util.Dom.get(d+"-dialogTitle");f&&(f.innerHTML=Alfresco.util.encodeHTML(this.prettyPath(a.path)));f=YAHOO.util.Dom.getElementsByClassName("supported-types-select","select")[0];this.populateAllowedTypesSelect(f);return!0},scope:this},onSuccess:{fn:function(f){Alfresco.logger.debug("onSuccess callback",arguments);a.allowedTypes=f.config.dataObj.prop_up_allowedTypes.split(","); +this.widgets.dataTable.updateRow(b,a);Alfresco.util.PopupManager.displayMessage({text:this.msg("operation.completed.successfully")})},scope:this},onFailure:{fn:function(f){Alfresco.logger.debug("onFailure callback",arguments);Alfresco.util.PopupManager.displayMessage({text:this.msg("operation.failed")})},scope:this}}).show();Alfresco.logger.debug("END editUploadFolderRecord")},deleteUploadFolderHandler:function(b,a,d){Alfresco.logger.debug("deleteUploadFolderHandler",arguments);var e=this.widgets.dataTable.getRecord(a.parentNode.parentNode.parentNode), +c=e.getData();c=Alfresco.util.NodeRef(c.nodeRef);Alfresco.util.Ajax.jsonPost({url:YAHOO.lang.substitute(Alfresco.constants.PROXY_URI+"slingshot/doclib/action/aspects/node/{storeType}/{storeId}/{id}",c),dataObj:{added:[],removed:["up:UploadFolder"]},requestContentType:Alfresco.util.Ajax.JSON,responseContentType:Alfresco.util.Ajax.JSON,successCallback:{fn:function(f){Alfresco.logger.debug("deleteUploadFolderHandler successCallback",arguments);Alfresco.util.PopupManager.displayMessage({text:this.msg(f.json.overallSuccess? +"operation.completed.successfully":"operation.failed")});this.widgets.dataTable.deleteRow(e)},scope:this},failureMessage:this.msg("operation.failed")});Alfresco.logger.debug("END deleteUploadFolderHandler")},populateAllowedTypesSelect:function(b){Alfresco.logger.debug("populateAllowedTypesSelect",arguments);var a=b.getAttribute("data-selectedValues"),d=[];a&&(d=a.split(","));Alfresco.util.Ajax.jsonGet({url:this.listContentTypesUrl,responseContentType:Alfresco.util.Ajax.JSON,successCallback:{fn:function(e){Alfresco.logger.debug("populateAllowedTypesSelect successCallback", +arguments);for(var c=e.json.types,f=0;f - + It should only be used through the admin interface + + + + + + + +-->
diff --git a/uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/log4j2.properties b/uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/log4j2.properties new file mode 100644 index 0000000..5bb2a36 --- /dev/null +++ b/uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/log4j2.properties @@ -0,0 +1 @@ +# Add here module-specific custom log4j2.properties configuration \ No newline at end of file diff --git a/surf/src/main/amp/module.properties b/uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/module.properties similarity index 95% rename from surf/src/main/amp/module.properties rename to uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/module.properties index 0e5c045..1027062 100644 --- a/surf/src/main/amp/module.properties +++ b/uploader-plus-share/src/main/resources/alfresco/module/uploader-plus-share/module.properties @@ -1,48 +1,48 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - - -# SDK Sample module - -# ==== Beginning of Alfresco required/optional properties ====== # -# NB: These properties are filtered at build time by Maven, single -# sourcing from POM properties -module.id=${project.artifactId} -#module.aliases=myModule-123, my-module -module.title=${project.name} -module.description=${project.description} -module.version=${noSnapshotVersion} - -# The following optional properties can be used to prevent the module from being added -# to inappropriate versions of the WAR file. -# module.repo.version.min=2.0 -# module.repo.version.max=2.1 - -# FIXME: This dependencies should come out of mvn dependencies on amp - -# The following describe dependencies on other modules -# Depends on net.sf.myproject.module.SupportModuleA version ${version} or later -# module.depends.net.sf.myproject.module.SupportModuleA=${version}-* -# Depends on net.sf.myproject.module.SupportModuleA version ${version} to 2.0 -# module.depends.net.sf.myproject.module.SupportModuleB=${version}-2.0 -# Depends on net.sf.myproject.module.SupportModuleC - any version -# module.depends.net.sf.myproject.module.SupportModuleB=* - - -# ==== End of Alfresco required/optional properties ======= # - - +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + + +# SDK Sample module + +# ==== Beginning of Alfresco required/optional properties ====== # +# NB: These properties are filtered at build time by Maven, single +# sourcing from POM properties +module.id=${project.artifactId} +#module.aliases=myModule-123, my-module +module.title=${project.name} +module.description=${project.description} +module.version=${project.version} + +# The following optional properties can be used to prevent the module from being added +# to inappropriate versions of the WAR file. +# module.repo.version.min=2.0 +# module.repo.version.max=2.1 + +# FIXME: This dependencies should come out of mvn dependencies on amp + +# The following describe dependencies on other modules +# Depends on net.sf.myproject.module.SupportModuleA version ${version} or later +# module.depends.net.sf.myproject.module.SupportModuleA=${version}-* +# Depends on net.sf.myproject.module.SupportModuleA version ${version} to 2.0 +# module.depends.net.sf.myproject.module.SupportModuleB=${version}-2.0 +# Depends on net.sf.myproject.module.SupportModuleC - any version +# module.depends.net.sf.myproject.module.SupportModuleB=* + + +# ==== End of Alfresco required/optional properties ======= # + + # ==== Beginning of module required properties/optional ====== # \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_de.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_de.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_de.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_de.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_es.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_es.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_es.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_es.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_it.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_it.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_it.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_it.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_nl.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_nl.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_nl.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_nl.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_pt_BR.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_pt_BR.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_pt_BR.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_pt_BR.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_ru.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_ru.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/messages/uploader-plus_ru.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/messages/uploader-plus_ru.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-data/extensions/uploader-plus-surf.xml b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-data/extensions/uploader-plus-share-webscript-overrides.xml similarity index 83% rename from surf/src/main/amp/config/alfresco/web-extension/site-data/extensions/uploader-plus-surf.xml rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-data/extensions/uploader-plus-share-webscript-overrides.xml index 38efc1f..e28318c 100644 --- a/surf/src/main/amp/config/alfresco/web-extension/site-data/extensions/uploader-plus-surf.xml +++ b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-data/extensions/uploader-plus-share-webscript-overrides.xml @@ -4,7 +4,7 @@ uploader-plus-surf-activation ${project.version} true - + org.alfresco.components.upload @@ -19,7 +19,6 @@ true - template documentlibrary @@ -97,7 +96,6 @@ - template sharedfiles @@ -111,5 +109,28 @@ + + + uploader-plus-admin-config + ${project.version} + true + + + + GROUP_ALFRESCO_ADMINISTRATORS + AND + false + + + + + + + + + + + + \ No newline at end of file diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/customization/file-upload.get.html.ftl b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/customization/file-upload.get.html.ftl similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/customization/file-upload.get.html.ftl rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/customization/file-upload.get.html.ftl diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/controls/selecttypes.ftl b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/controls/selecttypes.ftl similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/controls/selecttypes.ftl rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/controls/selecttypes.ftl diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.desc.xml b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.desc.xml similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.desc.xml rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.desc.xml diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.html.ftl b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.html.ftl similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.html.ftl rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.html.ftl diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.js b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.js similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.js rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.js diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_de.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_de.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_de.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_de.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_es.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_es.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_es.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_es.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_it.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_it.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_it.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_it.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_pt_BR.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_pt_BR.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_pt_BR.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_pt_BR.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_ru.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_ru.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_ru.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader-plus-admin.get_ru.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.desc.xml b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.desc.xml similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.desc.xml rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.desc.xml diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.html.ftl b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.html.ftl similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.html.ftl rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.html.ftl diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.js b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.js similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.js rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.js diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_de.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_de.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_de.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_de.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_es.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_es.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_es.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_es.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_fr.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_fr.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_fr.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_fr.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_it.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_it.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_it.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_it.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ja.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ja.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ja.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ja.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nb.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nb.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nb.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nb.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nl.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nl.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nl.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_nl.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_pt_BR.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_pt_BR.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_pt_BR.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_pt_BR.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ru.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ru.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ru.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_ru.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_zh_CN.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_zh_CN.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_zh_CN.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/dnd-upload.get_zh_CN.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.desc.xml b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.desc.xml similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.desc.xml rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.desc.xml diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.html.ftl b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.html.ftl similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.html.ftl rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.html.ftl diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.js b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.js similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.js rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.js diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_de.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_de.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_de.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_de.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_es.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_es.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_es.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_es.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_fr.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_fr.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_fr.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_fr.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_it.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_it.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_it.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_it.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ja.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ja.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ja.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ja.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nb.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nb.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nb.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nb.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nl.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nl.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nl.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_nl.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_pt_BR.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_pt_BR.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_pt_BR.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_pt_BR.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ru.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ru.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ru.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_ru.properties diff --git a/surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_zh_CN.properties b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_zh_CN.properties similarity index 100% rename from surf/src/main/amp/config/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_zh_CN.properties rename to uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/com/softwareloop/uploader-plus/uploader/html-upload.get_zh_CN.properties diff --git a/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/org/alfresco/README.md b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/org/alfresco/README.md new file mode 100644 index 0000000..f2c0a4f --- /dev/null +++ b/uploader-plus-share/src/main/resources/alfresco/web-extension/site-webscripts/org/alfresco/README.md @@ -0,0 +1,6 @@ +## If you are overriding out-of-the-box Alfresco web scripts, put these files here +## in the correct org.alfresco... package. +## If you are defining a new custom web script, add it under +## resources/alfresco/web-extension/site-webscripts/{your domain path}. +## + diff --git a/uploader-plus-share/src/main/resources/alfresco/web-extension/uploader-plus-share-slingshot-application-context.xml b/uploader-plus-share/src/main/resources/alfresco/web-extension/uploader-plus-share-slingshot-application-context.xml new file mode 100644 index 0000000..857814e --- /dev/null +++ b/uploader-plus-share/src/main/resources/alfresco/web-extension/uploader-plus-share-slingshot-application-context.xml @@ -0,0 +1,26 @@ + + + + + + + + + + alfresco.web-extension.messages.uploader-plus + + + + + \ No newline at end of file From dd195b22fc3ecc91a8cbd4c11e58368daae01530 Mon Sep 17 00:00:00 2001 From: robertovenzia Date: Fri, 21 Nov 2025 10:53:22 +0100 Subject: [PATCH 2/3] SDK migration from master and adaptation to Alfresco 23.4 --- maven-central-deploy.sh | 14 ++++++++++++++ .../com/softwareloop/uploader-plus/upload.post.js | 9 +++++++-- .../components/uploader-plus/js/dnd-upload-plus.js | 4 +++- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 maven-central-deploy.sh diff --git a/maven-central-deploy.sh b/maven-central-deploy.sh new file mode 100644 index 0000000..ec85cf5 --- /dev/null +++ b/maven-central-deploy.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Deploy maven artefact in current directory into Maven central repository +# using maven-release-plugin goals + +read -p "Really deploy to maven cetral repository (yes/no)? " + +if ( [ "$REPLY" == "yes" ] ) then + ssh-add ~/.ssh/id_rsa + ssh-add -l + mvn release:clean release:prepare release:perform -B -e | tee maven-central-deploy.log + ssh-add -D +else + echo 'Exit without deploy' +fi \ No newline at end of file diff --git a/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js index ed842ba..95ee5a3 100644 --- a/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js +++ b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js @@ -8,7 +8,9 @@ function uploaderPlusMain() var repoFormData, fnFieldValue, idx, max, field, fieldName, value; repoFormData = new Packages.org.alfresco.repo.forms.FormData(); - + if(logger.isLoggingEnabled()) { + logger.log("[Uploader plus] - uploaderPlusMain started.."); + } try { // Prevents Flash- and IE8-sourced "null" values being set for those parameters where they are invalid. @@ -55,6 +57,9 @@ function uploaderPlusMain() } } } + if(logger.isLoggingEnabled()) { + logger.log("[Uploader plus] - Saving form, repoFormData: "+repoFormData); + } formService.saveForm("node", model.document.nodeRef, repoFormData); } @@ -69,7 +74,7 @@ function uploaderPlusMain() } else { e.code = 500; - e.message = "Unexpected error occurred during upload of new content."; + e.message = "[Uploader plus] - Unexpected error occurred during upload of new content!"; } throw e; } diff --git a/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.js b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.js index ea1fe00..c389e4e 100644 --- a/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.js +++ b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.js @@ -28,7 +28,9 @@ show : function(config) { Alfresco.logger.debug("show", arguments); - + + //Fix for drag and drop issue which loads the wrong types + this.typesLoaded = false; SoftwareLoop.DNDUpload.superclass.show.call(this, config); this.loadTypes(function () { From cf156f4800181241d24a9f335d6ef33cabed75bb Mon Sep 17 00:00:00 2001 From: robertovenzia Date: Tue, 25 Nov 2025 00:16:55 +0100 Subject: [PATCH 3/3] Fix error in upload files with same name. --- .../src/main/docker/dev-log4j2.properties | 5 +-- .../softwareloop/uploader-plus/upload.post.js | 5 +-- .../uploader-plus/js/dnd-upload-plus.min.js | 32 +++++++++---------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties b/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties index 1854506..6ead657 100644 --- a/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties +++ b/uploader-plus-platform-docker/src/main/docker/dev-log4j2.properties @@ -404,9 +404,6 @@ logger.alfresco-enterprise-repo-authorization-AuthorizationsConsistencyMonitor.l #----------------------------------------------------------------------- # Platform module logging #----------------------------------------------------------------------- -logger.platformsample-DemoComponent.name=com.softwareloop.uploderplus.platformsample.DemoComponent -logger.platformsample-DemoComponent.level=debug -logger.platformsample-HelloWorldWebScript.name=com.softwareloop.uploderplus.platformsample.HelloWorldWebScript -logger.platformsample-HelloWorldWebScript.level=debug + diff --git a/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js index 95ee5a3..b8c5007 100644 --- a/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js +++ b/uploader-plus-platform/src/main/resources/alfresco/extension/templates/webscripts/com/softwareloop/uploader-plus/upload.post.js @@ -5,7 +5,7 @@ function uploaderPlusMain() { - var repoFormData, fnFieldValue, idx, max, field, fieldName, value; + var repoFormData, fnFieldValue, idx, max, field, fieldName, value, name, destNode; repoFormData = new Packages.org.alfresco.repo.forms.FormData(); if(logger.isLoggingEnabled()) { @@ -24,7 +24,7 @@ function uploaderPlusMain() { field = formdata.fields[idx]; fieldName = String(field.name); - + switch (fieldName.toLowerCase()) { case "filename": @@ -41,6 +41,7 @@ function uploaderPlusMain() case "overwrite": case "thumbnails": case "updatenameandmimetype": + case "prop_cm_name": case "createdirectory": // ignore all special upload fields break; diff --git a/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js index 92f32a5..10ea12a 100644 --- a/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js +++ b/uploader-plus-share/src/main/resources/META-INF/components/uploader-plus/js/dnd-upload-plus.min.js @@ -1,17 +1,17 @@ 'use strict';(function(){Alfresco.logger.debug("dnd-upload-plus.js");SoftwareLoop.DNDUpload=function(a){SoftwareLoop.DNDUpload.superclass.constructor.call(this,"null");Alfresco.util.ComponentManager.unregister(this);this.id="undefined"==typeof a||null===a?Alfresco.util.generateDomId():a;this.name="SoftwareLoop.DNDUpload";Alfresco.util.ComponentManager.register(this);return this};YAHOO.lang.extend(SoftwareLoop.DNDUpload,Alfresco.DNDUpload,YAHOO.lang.merge(SoftwareLoop.UploaderPlusMixin,{spawnUploadsBooked:!1, -savedDialogTitle:null,records:null,currentRecordIndex:-1,show:function(a){Alfresco.logger.debug("show",arguments);SoftwareLoop.DNDUpload.superclass.show.call(this,a);this.loadTypes(function(){Alfresco.logger.debug("loadTypes callback");this.populateSelect();this.spawnUploadsBooked&&(Alfresco.logger.debug("this.spawnUploadsBooked is true"),this.spawnUploadsBooked=!1,this._spawnUploads())},this);Alfresco.logger.debug("END show")},_spawnUploads:function(){Alfresco.logger.debug("_spawnUploads",arguments); -if(this.typesLoaded){this.shouldUseSameMetadataSet||this.cleanupOldFormForNextUpload();if(this.showConfig.mode===this.MODE_SINGLE_UPDATE)return Alfresco.logger.debug("Single update"),SoftwareLoop.DNDUpload.superclass._spawnUploads.call(this);if(null==this.types)return Alfresco.logger.debug("Types is null"),SoftwareLoop.DNDUpload.superclass._spawnUploads.call(this);this.savedDialogTitle=YAHOO.util.Dom.get(this.id+"-title-span").innerText;this.records=this.dataTable.getRecordSet().getRecords();Alfresco.logger.debug("records", -this.records);this.currentRecordIndex=0;this.showMetadataDialog();Alfresco.logger.debug("END _spawnUploads")}else Alfresco.logger.debug("Types not loaded yet. Postponing"),this.spawnUploadsBooked=!0},showMetadataDialog:function(){Alfresco.logger.debug("showMetadataDialog",arguments);if(this.currentRecordIndex==this.records.length)return Alfresco.logger.debug("At the end of the records array"),this.showMainDialog(),SoftwareLoop.DNDUpload.superclass._spawnUploads.apply(this);var a=this.records[this.currentRecordIndex].getData(); -if(this.fileStore[a.id].state!==this.STATE_ADDED)return Alfresco.logger.debug("State != STATE_ADDED"),SoftwareLoop.DNDUpload.superclass._spawnUploads.apply(this);YAHOO.util.Dom.get(this.id+"-title-span").innerText=Alfresco.util.encodeHTML(a.name);YAHOO.util.Dom.addClass(this.id+"-main-dialog","fake-hidden");YAHOO.util.Dom.removeClass(this.id+"-metadata-dialog","hidden");this.contentTypeSelectNode.selectedIndex=0;SoftwareLoop.fireEvent(this.contentTypeSelectNode,"change");Alfresco.logger.debug("END showMetadataDialog")}, -showMainDialog:function(){Alfresco.logger.debug("showMainDialog",arguments);null!=this.savedDialogTitle&&(Alfresco.logger.debug("Restore saved dialog title"),YAHOO.util.Dom.get(this.id+"-title-span").innerText=this.savedDialogTitle,this.savedDialogTitle=null);this.records=null;this.currentRecordIndex=-1;YAHOO.util.Dom.removeClass(this.id+"-main-dialog","fake-hidden");YAHOO.util.Dom.addClass(this.id+"-metadata-dialog","hidden");this.centerPanel();Alfresco.logger.debug("END showMainDialog")},_resetGUI:function(){Alfresco.logger.debug("_resetGUI", -arguments);this.showMainDialog();SoftwareLoop.DNDUpload.superclass._resetGUI.apply(this,arguments);Alfresco.logger.debug("END _resetGUI")},onMetadataCancel:function(a){Alfresco.logger.debug("onMetadataCancel",arguments);this.showMainDialog();this.onCancelOkButtonClick(a);Alfresco.logger.debug("END onMetadataCancel")},_startUpload:function(a){Alfresco.logger.debug("_startUpload",arguments);a.state=this.STATE_UPLOADING;var e=null===this.showConfig.uploadURL?Alfresco.constants.PROXY_URI+"uploader-plus/upload": -Alfresco.constants.PROXY_URI+this.showConfig.uploadURL;Alfresco.util.CSRFPolicy.isFilterEnabled()&&(e+="?"+Alfresco.util.CSRFPolicy.getParameter()+"="+encodeURIComponent(Alfresco.util.CSRFPolicy.getToken()));if(this.uploadMethod===this.FORMDATA_UPLOAD){Alfresco.logger.debug("Using FormData for file upload");var b=new FormData;b.append("filedata",a.uploadData.filedata);b.append("filename",a.uploadData.filename);b.append("destination",a.uploadData.destination);b.append("uploaddirectory",a.uploadData.uploaddirectory); -b.append("createdirectory",a.uploadData.createdirectory?"true":"false");b.append("majorVersion",a.uploadData.majorVersion?"true":"false");b.append("username",a.uploadData.username);b.append("overwrite",a.uploadData.overwrite);b.append("thumbnails",a.uploadData.thumbnails);b.append("updatenameandmimetype",a.uploadData.updateNameAndMimetype);a.uploadData.updateNodeRef?b.append("updateNodeRef",a.uploadData.updateNodeRef):(b.append("siteId",a.uploadData.siteId),b.append("containerId",a.uploadData.containerId)); -a.uploadData.description&&b.append("description",a.uploadData.description);Alfresco.logger.debug("fileInfo",a);if(a.propertyData){a.propertyData.contentType&&(Alfresco.logger.debug("Appending content type",a.propertyData.contentType),b.append("contentType",a.propertyData.contentType));Alfresco.logger.debug("Processing propertyData");for(var d in a.propertyData)Alfresco.logger.debug("Current:",d),a.propertyData.hasOwnProperty(d)&&("prop_mimetype"!=d||"prop_mimetype"==d&&YAHOO.lang.isString(a.propertyData[d])&& -0