From 1bd165d6454edb8a600ece696fab2a293e9eaf27 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 22 Jul 2022 10:19:15 +0200 Subject: [PATCH] Remove UI dependencies to JCR. --- Makefile | 2 +- .../.classpath | 0 .../.project | 2 +- .../META-INF/.gitignore | 0 .../bnd.bnd | 0 .../build.properties | 0 .../icons/loading.gif | Bin .../icons/noPic-goldenRatio-640px.png | Bin .../icons/noPic-square-640px.png | Bin .../src/org/argeo/cms/ui/CmsUiConstants.java | 5 - .../src/org/argeo/cms/ui/CmsUiProvider.java | 0 .../org/argeo/cms/ui/LifeCycleUiProvider.java | 0 .../ui/eclipse/forms/AbstractFormPart.java | 0 .../cms/ui/eclipse/forms/FormColors.java | 0 .../argeo/cms/ui/eclipse/forms/FormFonts.java | 0 .../cms/ui/eclipse/forms/FormToolkit.java | 0 .../argeo/cms/ui/eclipse/forms/FormUtil.java | 0 .../cms/ui/eclipse/forms/IFormColors.java | 0 .../argeo/cms/ui/eclipse/forms/IFormPart.java | 0 .../cms/ui/eclipse/forms/IManagedForm.java | 0 .../eclipse/forms/IPartSelectionListener.java | 0 .../cms/ui/eclipse/forms/ManagedForm.java | 0 .../ui/eclipse/forms/editor/FormEditor.java | 0 .../cms/ui/eclipse/forms/editor/FormPage.java | 0 .../ui/eclipse/forms/editor/IFormPage.java | 0 .../org/argeo/cms/ui/forms/EditableLink.java | 0 .../ui/forms/EditableMultiStringProperty.java | 0 .../cms/ui/forms/EditablePropertyDate.java | 0 .../cms/ui/forms/EditablePropertyString.java | 0 .../org/argeo/cms/ui/forms/FormConstants.java | 0 .../argeo/cms/ui/forms/FormEditorHeader.java | 0 .../argeo/cms/ui/forms/FormPageViewer.java | 0 .../src/org/argeo/cms/ui/forms/FormStyle.java | 0 .../src/org/argeo/cms/ui/forms/FormUtils.java | 0 .../cms/ui/forms/MarkupValidatorCopy.java | 0 .../org/argeo/cms/ui/forms/package-info.java | 0 .../src/org/argeo/cms/ui/fs/CmsFsBrowser.java | 0 .../src/org/argeo/cms/ui/fs/FileDrop.java | 0 .../org/argeo/cms/ui/fs/FsContextMenu.java | 0 .../src/org/argeo/cms/ui/fs/FsStyles.java | 0 .../src/org/argeo/cms/ui/fs/package-info.java | 0 .../org/argeo/cms/ui/internal/Activator.java | 0 .../cms/ui/internal/JcrContentProvider.java | 0 .../ui/internal/JcrFileUploadReceiver.java | 0 .../cms/ui/internal/SimpleEditableImage.java | 6 +- .../cms/ui/jcr/DefaultRepositoryRegister.java | 0 .../FullVersioningTreeContentProvider.java | 0 .../org/argeo/cms/ui/jcr/JcrBrowserUtils.java | 0 .../argeo/cms/ui/jcr/JcrDClickListener.java | 0 .../src/org/argeo/cms/ui/jcr/JcrImages.java | 0 .../cms/ui/jcr/JcrTreeContentProvider.java | 0 .../argeo/cms/ui/jcr/NodeContentProvider.java | 0 .../argeo/cms/ui/jcr/NodeLabelProvider.java | 0 .../cms/ui/jcr/OsgiRepositoryRegister.java | 0 .../cms/ui/jcr/PropertiesContentProvider.java | 0 .../cms/ui/jcr/PropertyLabelProvider.java | 0 .../argeo/cms/ui/jcr/RepositoryRegister.java | 0 .../cms/ui/jcr/VersionLabelProvider.java | 0 .../jcr/model/MaintainedRepositoryElem.java | 0 .../ui/jcr/model/RemoteRepositoryElem.java | 0 .../cms/ui/jcr/model/RepositoriesElem.java | 0 .../cms/ui/jcr/model/RepositoryElem.java | 0 .../cms/ui/jcr/model/SingleJcrNodeElem.java | 0 .../argeo/cms/ui/jcr/model/WorkspaceElem.java | 0 .../argeo/cms/ui/jcr/model/package-info.java | 0 .../org/argeo/cms/ui/jcr/package-info.java | 0 .../src/org/argeo/cms/ui/package-info.java | 0 .../src/org/argeo/cms/ui/util/CmsLink.java | 0 .../src/org/argeo/cms/ui/util/CmsPane.java | 0 .../src/org/argeo/cms/ui/util/CmsUiUtils.java | 23 +- .../cms/ui/util/DefaultImageManager.java | 133 ++++++ .../src/org/argeo/cms/ui/util/MenuLink.java | 0 .../argeo/cms/ui/util/SimpleCmsHeader.java | 0 .../argeo/cms/ui/util/SimpleDynamicPages.java | 0 .../argeo/cms/ui/util/SimpleStaticPage.java | 0 .../org/argeo/cms/ui/util/SimpleStyle.java | 0 .../cms/ui/util/StyleSheetResourceLoader.java | 0 .../cms/ui/util/SystemNotifications.java | 0 .../src/org/argeo/cms/ui/util/UserMenu.java | 0 .../org/argeo/cms/ui/util/UserMenuLink.java | 0 .../org/argeo/cms/ui/util/VerticalMenu.java | 0 .../org/argeo/cms/ui/util/package-info.java | 0 .../cms/ui/viewers/AbstractPageViewer.java | 0 .../org/argeo/cms/ui/viewers/ItemPart.java | 0 .../cms/ui/viewers/JcrVersionCmsEditable.java | 0 .../org/argeo/cms/ui/viewers/NodePart.java | 0 .../argeo/cms/ui/viewers/PropertyPart.java | 0 .../src/org/argeo/cms/ui/viewers/Section.java | 0 .../org/argeo/cms/ui/viewers/SectionPart.java | 0 .../argeo/cms/ui/viewers/package-info.java | 0 .../argeo/cms/ui/widgets/EditableImage.java | 0 .../argeo/cms/ui/widgets/EditableText.java | 0 .../src/org/argeo/cms/ui/widgets/Img.java | 0 .../argeo/cms/ui/widgets/JcrComposite.java | 0 .../argeo/cms/ui/widgets/StyledControl.java | 0 .../org/argeo/cms/ui/widgets/TextStyles.java | 0 .../argeo/cms/ui/widgets/package-info.java | 0 .../ui/jcr/AbstractNodeContentProvider.java | 0 .../eclipse/ui/jcr/AsyncUiEventListener.java | 0 .../ui/jcr/DefaultNodeLabelProvider.java | 0 .../org/argeo/eclipse/ui/jcr/JcrUiUtils.java | 0 .../ui/jcr/NodeColumnLabelProvider.java | 0 .../org/argeo/eclipse/ui/jcr/NodeElement.java | 0 .../eclipse/ui/jcr/NodeElementComparer.java | 0 .../argeo/eclipse/ui/jcr/NodesWrapper.java | 0 .../ui/jcr/QueryTableContentProvider.java | 0 .../ui/jcr/RowColumnLabelProvider.java | 0 .../ui/jcr/SimpleNodeContentProvider.java | 0 .../ui/jcr/VersionColumnLabelProvider.java | 0 .../ui/jcr/VersionHistoryContentProvider.java | 0 .../org/argeo/eclipse/ui/jcr/WrappedNode.java | 0 .../ui/jcr/lists/JcrColumnDefinition.java | 0 .../ui/jcr/lists/NodeViewerComparator.java | 0 .../ui/jcr/lists/RowViewerComparator.java | 0 .../jcr/lists/SimpleJcrNodeLabelProvider.java | 0 .../jcr/lists/SimpleJcrRowLabelProvider.java | 0 .../eclipse/ui/jcr/lists/package-info.java | 0 .../argeo/eclipse/ui/jcr/package-info.java | 0 .../eclipse/ui/jcr/util/JcrFileProvider.java | 0 .../ui/jcr/util/JcrItemsComparator.java | 0 .../ui/jcr/util/NodeViewerComparer.java | 0 .../jcr/util/SingleSessionFileProvider.java | 0 .../eclipse/ui/jcr/util/package-info.java | 0 .../cms/ui/util/DefaultImageManager.java | 246 ---------- .../argeo/cms/ui/util/SimpleImageManager.java | 5 - .../argeo/cms/ux/AbstractImageManager.java | 62 +++ .../src/org/argeo/cms/ux/CmsUxUtils.java | 14 + .../cms/swt/AbstractSwtImageManager.java | 77 ++++ .../argeo/cms/swt/acr/AcrSwtImageManager.java | 37 ++ swt/rap/org.argeo.cms.e4.rap/bnd.bnd | 4 +- .../argeo/cms/e4/rap/CmsLoginLifecycle.java | 4 +- swt/rap/org.argeo.cms.swt.rap/bnd.bnd | 2 - .../src/org/argeo/cms/ui/script/AppUi.java | 268 ----------- .../src/org/argeo/cms/ui/script/Branding.java | 20 - .../org/argeo/cms/ui/script/CmsScriptApp.java | 421 ------------------ .../ui/script/CmsScriptRwtApplication.java | 120 ----- .../cms/ui/script/ScriptAppActivator.java | 45 -- .../src/org/argeo/cms/ui/script/ScriptUi.java | 115 ----- .../src/org/argeo/cms/ui/script/cms.js | 90 ---- .../org/argeo/cms/ui/script/package-info.java | 2 - .../argeo/cms/web/AbstractCmsEntryPoint.java | 398 ----------------- .../org/argeo/cms/web/CmsWebEntryPoint.java | 4 +- .../src/org/argeo/cms/web/SimpleApp.java | 414 ----------------- .../org/argeo/cms/web/SimpleErgonomics.java | 238 ---------- 144 files changed, 342 insertions(+), 2415 deletions(-) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/.classpath (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/.project (94%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/META-INF/.gitignore (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/bnd.bnd (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/build.properties (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/icons/loading.gif (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/icons/noPic-goldenRatio-640px.png (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/icons/noPic-square-640px.png (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/CmsUiConstants.java (73%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/CmsUiProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/LifeCycleUiProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/AbstractFormPart.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/FormColors.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/FormFonts.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/FormToolkit.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/FormUtil.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/IFormColors.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/IFormPart.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/IManagedForm.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/IPartSelectionListener.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/editor/FormEditor.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/editor/FormPage.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/eclipse/forms/editor/IFormPage.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/EditableLink.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/EditablePropertyDate.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/EditablePropertyString.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/FormConstants.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/FormEditorHeader.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/FormPageViewer.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/FormStyle.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/FormUtils.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/MarkupValidatorCopy.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/forms/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/fs/CmsFsBrowser.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/fs/FileDrop.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/fs/FsContextMenu.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/fs/FsStyles.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/fs/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/internal/Activator.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/internal/JcrContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/internal/SimpleEditableImage.java (87%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/DefaultRepositoryRegister.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/FullVersioningTreeContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/JcrBrowserUtils.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/JcrDClickListener.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/JcrImages.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/JcrTreeContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/NodeContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/OsgiRepositoryRegister.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/PropertiesContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/PropertyLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/RepositoryRegister.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/VersionLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/MaintainedRepositoryElem.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/RemoteRepositoryElem.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/RepositoriesElem.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/RepositoryElem.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/SingleJcrNodeElem.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/WorkspaceElem.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/model/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/jcr/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/CmsLink.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/CmsPane.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/CmsUiUtils.java (88%) create mode 100644 jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/MenuLink.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/SimpleCmsHeader.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/SimpleDynamicPages.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/SimpleStaticPage.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/SimpleStyle.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/StyleSheetResourceLoader.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/SystemNotifications.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/UserMenu.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/UserMenuLink.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/VerticalMenu.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/util/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/ItemPart.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/NodePart.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/PropertyPart.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/Section.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/SectionPart.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/viewers/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/EditableImage.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/EditableText.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/Img.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/JcrComposite.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/StyledControl.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/TextStyles.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/cms/ui/widgets/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/JcrUiUtils.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/NodeColumnLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/NodeElement.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/NodeElementComparer.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/NodesWrapper.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/QueryTableContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/VersionColumnLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/VersionHistoryContentProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/WrappedNode.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/lists/JcrColumnDefinition.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/lists/NodeViewerComparator.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/lists/RowViewerComparator.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrNodeLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrRowLabelProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/lists/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/package-info.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/util/JcrFileProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/util/JcrItemsComparator.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/util/NodeViewerComparer.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/util/SingleSessionFileProvider.java (100%) rename jcr/{org.argeo.cms.ui => org.argeo.cms.jcr.ui}/src/org/argeo/eclipse/ui/jcr/util/package-info.java (100%) delete mode 100644 jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java delete mode 100644 jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleImageManager.java create mode 100644 org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractImageManager.java create mode 100644 swt/org.argeo.cms.swt/src/org/argeo/cms/swt/AbstractSwtImageManager.java create mode 100644 swt/org.argeo.cms.swt/src/org/argeo/cms/swt/acr/AcrSwtImageManager.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/AppUi.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/Branding.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptApp.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptRwtApplication.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptAppActivator.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptUi.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/cms.js delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/package-info.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleApp.java delete mode 100644 swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleErgonomics.java diff --git a/Makefile b/Makefile index 5c14dc8b1..b04cee306 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ swt/rap/org.argeo.cms.swt.rap \ swt/rap/org.argeo.cms.swt.rap.cli \ swt/rap/org.argeo.cms.e4.rap \ jcr/org.argeo.cms.jcr \ -jcr/org.argeo.cms.ui \ +jcr/org.argeo.cms.jcr.ui \ JAVADOC_BUNDLES = \ org.argeo.api.uuid \ diff --git a/jcr/org.argeo.cms.ui/.classpath b/jcr/org.argeo.cms.jcr.ui/.classpath similarity index 100% rename from jcr/org.argeo.cms.ui/.classpath rename to jcr/org.argeo.cms.jcr.ui/.classpath diff --git a/jcr/org.argeo.cms.ui/.project b/jcr/org.argeo.cms.jcr.ui/.project similarity index 94% rename from jcr/org.argeo.cms.ui/.project rename to jcr/org.argeo.cms.jcr.ui/.project index e52eb8ef7..645296b6b 100644 --- a/jcr/org.argeo.cms.ui/.project +++ b/jcr/org.argeo.cms.jcr.ui/.project @@ -1,6 +1,6 @@ - org.argeo.cms.ui + org.argeo.cms.jcr.ui diff --git a/jcr/org.argeo.cms.ui/META-INF/.gitignore b/jcr/org.argeo.cms.jcr.ui/META-INF/.gitignore similarity index 100% rename from jcr/org.argeo.cms.ui/META-INF/.gitignore rename to jcr/org.argeo.cms.jcr.ui/META-INF/.gitignore diff --git a/jcr/org.argeo.cms.ui/bnd.bnd b/jcr/org.argeo.cms.jcr.ui/bnd.bnd similarity index 100% rename from jcr/org.argeo.cms.ui/bnd.bnd rename to jcr/org.argeo.cms.jcr.ui/bnd.bnd diff --git a/jcr/org.argeo.cms.ui/build.properties b/jcr/org.argeo.cms.jcr.ui/build.properties similarity index 100% rename from jcr/org.argeo.cms.ui/build.properties rename to jcr/org.argeo.cms.jcr.ui/build.properties diff --git a/jcr/org.argeo.cms.ui/icons/loading.gif b/jcr/org.argeo.cms.jcr.ui/icons/loading.gif similarity index 100% rename from jcr/org.argeo.cms.ui/icons/loading.gif rename to jcr/org.argeo.cms.jcr.ui/icons/loading.gif diff --git a/jcr/org.argeo.cms.ui/icons/noPic-goldenRatio-640px.png b/jcr/org.argeo.cms.jcr.ui/icons/noPic-goldenRatio-640px.png similarity index 100% rename from jcr/org.argeo.cms.ui/icons/noPic-goldenRatio-640px.png rename to jcr/org.argeo.cms.jcr.ui/icons/noPic-goldenRatio-640px.png diff --git a/jcr/org.argeo.cms.ui/icons/noPic-square-640px.png b/jcr/org.argeo.cms.jcr.ui/icons/noPic-square-640px.png similarity index 100% rename from jcr/org.argeo.cms.ui/icons/noPic-square-640px.png rename to jcr/org.argeo.cms.jcr.ui/icons/noPic-square-640px.png diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsUiConstants.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/CmsUiConstants.java similarity index 73% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsUiConstants.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/CmsUiConstants.java index c6a62e9e0..fd1dda525 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsUiConstants.java +++ b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/CmsUiConstants.java @@ -1,7 +1,5 @@ package org.argeo.cms.ui; -import org.argeo.api.cms.ux.Cms2DSize; - /** Commons constants */ @Deprecated public interface CmsUiConstants { @@ -20,9 +18,6 @@ public interface CmsUiConstants { // STANDARD RESOURCES public final static String LOADING_IMAGE = "icons/loading.gif"; - public final static String NO_IMAGE = "icons/noPic-square-640px.png"; - public final static Cms2DSize NO_IMAGE_SIZE = new Cms2DSize(320, 320); - public final static Float NO_IMAGE_RATIO = 1f; // MISCEALLENEOUS String DATE_TIME_FORMAT = "dd/MM/yyyy, HH:mm"; } diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsUiProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/CmsUiProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsUiProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/CmsUiProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/LifeCycleUiProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/LifeCycleUiProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/LifeCycleUiProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/LifeCycleUiProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/AbstractFormPart.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/AbstractFormPart.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/AbstractFormPart.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/AbstractFormPart.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormColors.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormColors.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormColors.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormColors.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormFonts.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormFonts.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormFonts.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormFonts.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormToolkit.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormToolkit.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormToolkit.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormToolkit.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormUtil.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormUtil.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/FormUtil.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/FormUtil.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IFormColors.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IFormColors.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IFormColors.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IFormColors.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IFormPart.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IFormPart.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IFormPart.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IFormPart.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IManagedForm.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IManagedForm.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IManagedForm.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IManagedForm.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IPartSelectionListener.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IPartSelectionListener.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/IPartSelectionListener.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/IPartSelectionListener.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormEditor.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormEditor.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormEditor.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormEditor.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormPage.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormPage.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormPage.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/editor/FormPage.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/editor/IFormPage.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/editor/IFormPage.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/editor/IFormPage.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/eclipse/forms/editor/IFormPage.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableLink.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditableLink.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableLink.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditableLink.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormConstants.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormConstants.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormConstants.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormConstants.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormEditorHeader.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormEditorHeader.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormEditorHeader.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormEditorHeader.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormStyle.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormStyle.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormStyle.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormStyle.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormUtils.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormUtils.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormUtils.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/FormUtils.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/MarkupValidatorCopy.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/MarkupValidatorCopy.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/MarkupValidatorCopy.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/MarkupValidatorCopy.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/forms/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/CmsFsBrowser.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/CmsFsBrowser.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/CmsFsBrowser.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/CmsFsBrowser.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FileDrop.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/FileDrop.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FileDrop.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/FileDrop.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FsContextMenu.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/FsContextMenu.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FsContextMenu.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/FsContextMenu.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FsStyles.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/FsStyles.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FsStyles.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/FsStyles.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/fs/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/fs/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/Activator.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/Activator.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/Activator.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/Activator.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/JcrContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/JcrContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/SimpleEditableImage.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/SimpleEditableImage.java similarity index 87% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/SimpleEditableImage.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/SimpleEditableImage.java index 5e938d818..6162a74bf 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/SimpleEditableImage.java +++ b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/internal/SimpleEditableImage.java @@ -6,6 +6,8 @@ import org.argeo.api.cms.ux.Cms2DSize; import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.cms.ui.widgets.EditableImage; +import org.argeo.cms.ux.AbstractImageManager; +import org.argeo.cms.ux.CmsUxUtils; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; @@ -41,9 +43,9 @@ public class SimpleEditableImage extends EditableImage { protected String createImgTag() throws RepositoryException { String imgTag; if (src != null) - imgTag = CmsUiUtils.img(src, imageSize); + imgTag = CmsUxUtils.img(src, imageSize); else - imgTag = CmsUiUtils.noImg(imageSize != null ? imageSize : NO_IMAGE_SIZE); + imgTag = CmsUiUtils.noImg(imageSize != null ? imageSize : AbstractImageManager.NO_IMAGE_SIZE); return imgTag; } diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/DefaultRepositoryRegister.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/DefaultRepositoryRegister.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/DefaultRepositoryRegister.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/DefaultRepositoryRegister.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/FullVersioningTreeContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/FullVersioningTreeContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/FullVersioningTreeContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/FullVersioningTreeContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrBrowserUtils.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrBrowserUtils.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrBrowserUtils.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrBrowserUtils.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrDClickListener.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrDClickListener.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrDClickListener.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrDClickListener.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrImages.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrImages.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrImages.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrImages.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrTreeContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrTreeContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrTreeContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/JcrTreeContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/NodeContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/NodeContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/NodeContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/NodeContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/NodeLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/OsgiRepositoryRegister.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/OsgiRepositoryRegister.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/OsgiRepositoryRegister.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/OsgiRepositoryRegister.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/PropertiesContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/PropertiesContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/PropertiesContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/PropertiesContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/PropertyLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/PropertyLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/PropertyLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/PropertyLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/RepositoryRegister.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/RepositoryRegister.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/RepositoryRegister.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/RepositoryRegister.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/VersionLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/VersionLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/VersionLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/VersionLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/MaintainedRepositoryElem.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/MaintainedRepositoryElem.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/MaintainedRepositoryElem.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/MaintainedRepositoryElem.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RemoteRepositoryElem.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/RemoteRepositoryElem.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RemoteRepositoryElem.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/RemoteRepositoryElem.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RepositoriesElem.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/RepositoriesElem.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RepositoriesElem.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/RepositoriesElem.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RepositoryElem.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/RepositoryElem.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RepositoryElem.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/RepositoryElem.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/SingleJcrNodeElem.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/SingleJcrNodeElem.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/SingleJcrNodeElem.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/SingleJcrNodeElem.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/WorkspaceElem.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/WorkspaceElem.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/WorkspaceElem.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/WorkspaceElem.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/model/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/jcr/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsLink.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsLink.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsLink.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsLink.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsPane.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsPane.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsPane.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsPane.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java similarity index 88% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java index 178fbcf24..7cc611c9b 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java +++ b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java @@ -15,6 +15,8 @@ import org.argeo.api.cms.ux.CmsView; import org.argeo.cms.jcr.CmsJcrUtils; import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.ui.CmsUiConstants; +import org.argeo.cms.ux.AbstractImageManager; +import org.argeo.cms.ux.CmsUxUtils; import org.argeo.jcr.JcrUtils; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.service.ResourceManager; @@ -140,36 +142,23 @@ public class CmsUiUtils { // String src = (serverBase != null ? serverBase : "") + NodeUtils.getDataPath(fileNode); String src; src = (serverBase != null ? serverBase : "") + getDataPathForUrl(fileNode); - return imgBuilder(src, width, height).append("/>").toString(); - } - - public static String img(String src, String width, String height) { - return imgBuilder(src, width, height).append("/>").toString(); - } - - public static String img(String src, Cms2DSize size) { - return img(src, Integer.toString(size.getWidth()), Integer.toString(size.getHeight())); - } - - public static StringBuilder imgBuilder(String src, String width, String height) { - return new StringBuilder(64).append("").toString(); } public static String noImg(Cms2DSize size) { ResourceManager rm = RWT.getResourceManager(); - return CmsUiUtils.img(rm.getLocation(CmsUiConstants.NO_IMAGE), size); + return CmsUxUtils.img(rm.getLocation(AbstractImageManager.NO_IMAGE), size); } public static String noImg() { - return noImg(CmsUiConstants.NO_IMAGE_SIZE); + return noImg(AbstractImageManager.NO_IMAGE_SIZE); } public static Image noImage(Cms2DSize size) { ResourceManager rm = RWT.getResourceManager(); InputStream in = null; try { - in = rm.getRegisteredContent(CmsUiConstants.NO_IMAGE); + in = rm.getRegisteredContent(AbstractImageManager.NO_IMAGE); ImageData id = new ImageData(in); ImageData scaled = id.scaledTo(size.getWidth(), size.getHeight()); Image image = new Image(Display.getCurrent(), scaled); diff --git a/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java new file mode 100644 index 000000000..b431fc3c9 --- /dev/null +++ b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java @@ -0,0 +1,133 @@ +package org.argeo.cms.ui.util; + +import static javax.jcr.Node.JCR_CONTENT; +import static javax.jcr.Property.JCR_DATA; +import static javax.jcr.nodetype.NodeType.NT_FILE; +import static javax.jcr.nodetype.NodeType.NT_RESOURCE; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; + +import javax.jcr.Binary; +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.RepositoryException; + +import org.apache.commons.io.IOUtils; +import org.argeo.api.cms.CmsLog; +import org.argeo.api.cms.ux.Cms2DSize; +import org.argeo.cms.swt.AbstractSwtImageManager; +import org.argeo.jcr.JcrException; +import org.argeo.jcr.JcrUtils; +import org.eclipse.rap.rwt.RWT; +import org.eclipse.rap.rwt.service.ResourceManager; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.widgets.Display; + +/** Manages only public images so far. */ +public class DefaultImageManager extends AbstractSwtImageManager { + private final static CmsLog log = CmsLog.getLog(DefaultImageManager.class); + + /** @return null if not available */ + @Override + public String getImageUrl(Node node) { + return CmsUiUtils.getDataPathForUrl(node); + } + + protected String getResourceName(Node node) { + try { + String workspace = node.getSession().getWorkspace().getName(); + if (node.hasNode(JCR_CONTENT)) + return workspace + '_' + node.getNode(JCR_CONTENT).getIdentifier(); + else + return workspace + '_' + node.getIdentifier(); + } catch (RepositoryException e) { + throw new JcrException(e); + } + } + + public Binary getImageBinary(Node node) { + try { + if (node.isNodeType(NT_FILE)) { + return node.getNode(JCR_CONTENT).getProperty(JCR_DATA).getBinary(); + } else { + return null; + } + } catch (RepositoryException e) { + throw new JcrException(e); + } + } + + public Image getSwtImage(Node node) { + InputStream inputStream = null; + Binary binary = getImageBinary(node); + if (binary == null) + return null; + try { + inputStream = binary.getStream(); + return new Image(Display.getCurrent(), inputStream); + } catch (RepositoryException e) { + throw new JcrException(e); + } finally { + IOUtils.closeQuietly(inputStream); + JcrUtils.closeQuietly(binary); + } + } + + @Override + public String uploadImage(Node context, Node parentNode, String fileName, InputStream in, String contentType) { + InputStream inputStream = null; + try { + String previousResourceName = null; + if (parentNode.hasNode(fileName)) { + Node node = parentNode.getNode(fileName); + previousResourceName = getResourceName(node); + if (node.hasNode(JCR_CONTENT)) { + node.getNode(JCR_CONTENT).remove(); + node.addNode(JCR_CONTENT, NT_RESOURCE); + } + } + + byte[] arr = IOUtils.toByteArray(in); + Node fileNode = JcrUtils.copyBytesAsFile(parentNode, fileName, arr); + inputStream = new ByteArrayInputStream(arr); + ImageData id = new ImageData(inputStream); + processNewImageFile(context, fileNode, id); + + String mime = contentType != null ? contentType : Files.probeContentType(Paths.get(fileName)); + if (mime != null) { + fileNode.getNode(JCR_CONTENT).setProperty(Property.JCR_MIMETYPE, mime); + } + fileNode.getSession().save(); + + // reset resource manager + ResourceManager resourceManager = RWT.getResourceManager(); + if (previousResourceName != null && resourceManager.isRegistered(previousResourceName)) { + resourceManager.unregister(previousResourceName); + if (log.isDebugEnabled()) + log.debug("Unregistered image " + previousResourceName); + } + return CmsUiUtils.getDataPath(fileNode); + } catch (IOException e) { + throw new RuntimeException("Cannot upload image " + fileName + " in " + parentNode, e); + } catch (RepositoryException e) { + throw new JcrException(e); + } finally { + IOUtils.closeQuietly(inputStream); + } + } + + /** Does nothing by default. */ + protected void processNewImageFile(Node context, Node fileNode, ImageData id) + throws RepositoryException, IOException { + } + + @Override + protected String noImg(Cms2DSize size) { + return CmsUiUtils.noImg(size); + } +} diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/MenuLink.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/MenuLink.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/MenuLink.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/MenuLink.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleCmsHeader.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleCmsHeader.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleCmsHeader.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleCmsHeader.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleDynamicPages.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleDynamicPages.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleDynamicPages.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleDynamicPages.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleStaticPage.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleStaticPage.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleStaticPage.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleStaticPage.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleStyle.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleStyle.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleStyle.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SimpleStyle.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/StyleSheetResourceLoader.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/StyleSheetResourceLoader.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/StyleSheetResourceLoader.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/StyleSheetResourceLoader.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SystemNotifications.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SystemNotifications.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SystemNotifications.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/SystemNotifications.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/UserMenu.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/UserMenu.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/UserMenu.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/UserMenu.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/UserMenuLink.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/UserMenuLink.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/UserMenuLink.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/UserMenuLink.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/VerticalMenu.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/VerticalMenu.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/VerticalMenu.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/VerticalMenu.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/util/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/ItemPart.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/ItemPart.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/ItemPart.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/ItemPart.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/NodePart.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/NodePart.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/NodePart.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/NodePart.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/PropertyPart.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/PropertyPart.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/PropertyPart.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/PropertyPart.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/Section.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/Section.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/Section.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/Section.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/SectionPart.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/SectionPart.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/SectionPart.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/SectionPart.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/viewers/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/EditableImage.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/EditableImage.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/EditableImage.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/EditableImage.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/EditableText.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/EditableText.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/EditableText.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/EditableText.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/Img.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/Img.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/JcrComposite.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/JcrComposite.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/JcrComposite.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/JcrComposite.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/StyledControl.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/StyledControl.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/StyledControl.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/StyledControl.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/TextStyles.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/TextStyles.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/TextStyles.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/TextStyles.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/JcrUiUtils.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/JcrUiUtils.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/JcrUiUtils.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/JcrUiUtils.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodeColumnLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodeColumnLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodeColumnLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodeColumnLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodeElement.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodeElement.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodeElement.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodeElement.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodeElementComparer.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodeElementComparer.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodeElementComparer.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodeElementComparer.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodesWrapper.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodesWrapper.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/NodesWrapper.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/NodesWrapper.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/QueryTableContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/QueryTableContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/QueryTableContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/QueryTableContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/VersionColumnLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/VersionColumnLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/VersionColumnLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/VersionColumnLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/VersionHistoryContentProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/VersionHistoryContentProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/VersionHistoryContentProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/VersionHistoryContentProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/WrappedNode.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/WrappedNode.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/WrappedNode.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/WrappedNode.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/JcrColumnDefinition.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/JcrColumnDefinition.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/JcrColumnDefinition.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/JcrColumnDefinition.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/NodeViewerComparator.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/NodeViewerComparator.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/NodeViewerComparator.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/NodeViewerComparator.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/RowViewerComparator.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/RowViewerComparator.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/RowViewerComparator.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/RowViewerComparator.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrNodeLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrNodeLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrNodeLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrNodeLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrRowLabelProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrRowLabelProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrRowLabelProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/SimpleJcrRowLabelProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/lists/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/lists/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/JcrFileProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/JcrFileProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/JcrFileProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/JcrFileProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/JcrItemsComparator.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/JcrItemsComparator.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/JcrItemsComparator.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/JcrItemsComparator.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/NodeViewerComparer.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/NodeViewerComparer.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/NodeViewerComparer.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/NodeViewerComparer.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/SingleSessionFileProvider.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/SingleSessionFileProvider.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/SingleSessionFileProvider.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/SingleSessionFileProvider.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/package-info.java b/jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/package-info.java similarity index 100% rename from jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/util/package-info.java rename to jcr/org.argeo.cms.jcr.ui/src/org/argeo/eclipse/ui/jcr/util/package-info.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java deleted file mode 100644 index 1ec2622b0..000000000 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java +++ /dev/null @@ -1,246 +0,0 @@ -package org.argeo.cms.ui.util; - -import static javax.jcr.Node.JCR_CONTENT; -import static javax.jcr.Property.JCR_DATA; -import static javax.jcr.nodetype.NodeType.NT_FILE; -import static javax.jcr.nodetype.NodeType.NT_RESOURCE; -import static org.argeo.cms.ui.CmsUiConstants.NO_IMAGE_SIZE; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; - -import javax.jcr.Binary; -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; - -import org.apache.commons.io.IOUtils; -import org.argeo.api.cms.CmsLog; -import org.argeo.api.cms.ux.Cms2DSize; -import org.argeo.api.cms.ux.CmsImageManager; -import org.argeo.jcr.JcrException; -import org.argeo.jcr.JcrUtils; -import org.eclipse.rap.rwt.RWT; -import org.eclipse.rap.rwt.service.ResourceManager; -import org.eclipse.rap.rwt.widgets.FileUpload; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; - -/** Manages only public images so far. */ -public class DefaultImageManager implements CmsImageManager { - private final static CmsLog log = CmsLog.getLog(DefaultImageManager.class); -// private MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap(); - - public Boolean load(Node node, Control control, Cms2DSize preferredSize) { - Cms2DSize imageSize = getImageSize(node); - Cms2DSize size; - String imgTag = null; - if (preferredSize == null || imageSize.getWidth() == 0 || imageSize.getHeight() == 0 - || (preferredSize.getWidth() == 0 && preferredSize.getHeight() == 0)) { - if (imageSize.getWidth() != 0 && imageSize.getHeight() != 0) { - // actual image size if completely known - size = imageSize; - } else { - // no image if not completely known - size = resizeTo(NO_IMAGE_SIZE, preferredSize != null ? preferredSize : imageSize); - imgTag = CmsUiUtils.noImg(size); - } - - } else if (preferredSize.getWidth() != 0 && preferredSize.getHeight() != 0) { - // given size if completely provided - size = preferredSize; - } else { - // at this stage : - // image is completely known - assert imageSize.getWidth() != 0 && imageSize.getHeight() != 0; - // one and only one of the dimension as been specified - assert preferredSize.getWidth() == 0 || preferredSize.getHeight() == 0; - size = resizeTo(imageSize, preferredSize); - } - - boolean loaded = false; - if (control == null) - return loaded; - - if (control instanceof Label) { - if (imgTag == null) { - // IMAGE RETRIEVED HERE - imgTag = getImageTag(node, size); - // - if (imgTag == null) - imgTag = CmsUiUtils.noImg(size); - else - loaded = true; - } - - Label lbl = (Label) control; - lbl.setText(imgTag); - // lbl.setSize(size); - } else if (control instanceof FileUpload) { - FileUpload lbl = (FileUpload) control; - lbl.setImage(CmsUiUtils.noImage(size)); - lbl.setSize(new Point(size.getWidth(), size.getHeight())); - return loaded; - } else - loaded = false; - - return loaded; - } - - private Cms2DSize resizeTo(Cms2DSize orig, Cms2DSize constraints) { - if (constraints.getWidth() != 0 && constraints.getHeight() != 0) { - return constraints; - } else if (constraints.getWidth() == 0 && constraints.getHeight() == 0) { - return orig; - } else if (constraints.getHeight() == 0) {// force width - return new Cms2DSize(constraints.getWidth(), - scale(orig.getHeight(), orig.getWidth(), constraints.getWidth())); - } else if (constraints.getWidth() == 0) {// force height - return new Cms2DSize(scale(orig.getWidth(), orig.getHeight(), constraints.getHeight()), - constraints.getHeight()); - } - throw new IllegalArgumentException("Cannot resize " + orig + " to " + constraints); - } - - private int scale(int origDimension, int otherDimension, int otherConstraint) { - return Math.round(origDimension * divide(otherConstraint, otherDimension)); - } - - private float divide(int a, int b) { - return ((float) a) / ((float) b); - } - - public Cms2DSize getImageSize(Node node) { - // TODO optimise - Image image = getSwtImage(node); - return new Cms2DSize(image.getBounds().width, image.getBounds().height); - } - - /** @return null if not available */ - @Override - public String getImageTag(Node node) { - return getImageTag(node, getImageSize(node)); - } - - private String getImageTag(Node node, Cms2DSize size) { - StringBuilder buf = getImageTagBuilder(node, size); - if (buf == null) - return null; - return buf.append("/>").toString(); - } - - /** @return null if not available */ - @Override - public StringBuilder getImageTagBuilder(Node node, Cms2DSize size) { - return getImageTagBuilder(node, Integer.toString(size.getWidth()), Integer.toString(size.getHeight())); - } - - /** @return null if not available */ - private StringBuilder getImageTagBuilder(Node node, String width, String height) { - String url = getImageUrl(node); - if (url == null) - return null; - return CmsUiUtils.imgBuilder(url, width, height); - } - - /** @return null if not available */ - @Override - public String getImageUrl(Node node) { - return CmsUiUtils.getDataPathForUrl(node); - } - - protected String getResourceName(Node node) { - try { - String workspace = node.getSession().getWorkspace().getName(); - if (node.hasNode(JCR_CONTENT)) - return workspace + '_' + node.getNode(JCR_CONTENT).getIdentifier(); - else - return workspace + '_' + node.getIdentifier(); - } catch (RepositoryException e) { - throw new JcrException(e); - } - } - - public Binary getImageBinary(Node node) { - try { - if (node.isNodeType(NT_FILE)) { - return node.getNode(JCR_CONTENT).getProperty(JCR_DATA).getBinary(); - } else { - return null; - } - } catch (RepositoryException e) { - throw new JcrException(e); - } - } - - public Image getSwtImage(Node node) { - InputStream inputStream = null; - Binary binary = getImageBinary(node); - if (binary == null) - return null; - try { - inputStream = binary.getStream(); - return new Image(Display.getCurrent(), inputStream); - } catch (RepositoryException e) { - throw new JcrException(e); - } finally { - IOUtils.closeQuietly(inputStream); - JcrUtils.closeQuietly(binary); - } - } - - @Override - public String uploadImage(Node context, Node parentNode, String fileName, InputStream in, String contentType) { - InputStream inputStream = null; - try { - String previousResourceName = null; - if (parentNode.hasNode(fileName)) { - Node node = parentNode.getNode(fileName); - previousResourceName = getResourceName(node); - if (node.hasNode(JCR_CONTENT)) { - node.getNode(JCR_CONTENT).remove(); - node.addNode(JCR_CONTENT, NT_RESOURCE); - } - } - - byte[] arr = IOUtils.toByteArray(in); - Node fileNode = JcrUtils.copyBytesAsFile(parentNode, fileName, arr); - inputStream = new ByteArrayInputStream(arr); - ImageData id = new ImageData(inputStream); - processNewImageFile(context, fileNode, id); - - String mime = contentType != null ? contentType : Files.probeContentType(Paths.get(fileName)); - if (mime != null) { - fileNode.getNode(JCR_CONTENT).setProperty(Property.JCR_MIMETYPE, mime); - } - fileNode.getSession().save(); - - // reset resource manager - ResourceManager resourceManager = RWT.getResourceManager(); - if (previousResourceName != null && resourceManager.isRegistered(previousResourceName)) { - resourceManager.unregister(previousResourceName); - if (log.isDebugEnabled()) - log.debug("Unregistered image " + previousResourceName); - } - return CmsUiUtils.getDataPath(fileNode); - } catch (IOException e) { - throw new RuntimeException("Cannot upload image " + fileName + " in " + parentNode, e); - } catch (RepositoryException e) { - throw new JcrException(e); - } finally { - IOUtils.closeQuietly(inputStream); - } - } - - /** Does nothing by default. */ - protected void processNewImageFile(Node context, Node fileNode, ImageData id) - throws RepositoryException, IOException { - } -} diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleImageManager.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleImageManager.java deleted file mode 100644 index ac09b2a02..000000000 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/util/SimpleImageManager.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.argeo.cms.ui.util; - -public class SimpleImageManager extends DefaultImageManager { - -} diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractImageManager.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractImageManager.java new file mode 100644 index 000000000..41c905ef6 --- /dev/null +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractImageManager.java @@ -0,0 +1,62 @@ +package org.argeo.cms.ux; + +import org.argeo.api.cms.ux.Cms2DSize; +import org.argeo.api.cms.ux.CmsImageManager; + +/** Manages only public images so far. */ +public abstract class AbstractImageManager implements CmsImageManager { + public final static String NO_IMAGE = "icons/noPic-square-640px.png"; + public final static Cms2DSize NO_IMAGE_SIZE = new Cms2DSize(320, 320); + public final static Float NO_IMAGE_RATIO = 1f; + + protected Cms2DSize resizeTo(Cms2DSize orig, Cms2DSize constraints) { + if (constraints.getWidth() != 0 && constraints.getHeight() != 0) { + return constraints; + } else if (constraints.getWidth() == 0 && constraints.getHeight() == 0) { + return orig; + } else if (constraints.getHeight() == 0) {// force width + return new Cms2DSize(constraints.getWidth(), + scale(orig.getHeight(), orig.getWidth(), constraints.getWidth())); + } else if (constraints.getWidth() == 0) {// force height + return new Cms2DSize(scale(orig.getWidth(), orig.getHeight(), constraints.getHeight()), + constraints.getHeight()); + } + throw new IllegalArgumentException("Cannot resize " + orig + " to " + constraints); + } + + protected int scale(int origDimension, int otherDimension, int otherConstraint) { + return Math.round(origDimension * divide(otherConstraint, otherDimension)); + } + + protected float divide(int a, int b) { + return ((float) a) / ((float) b); + } + + /** @return null if not available */ + @Override + public String getImageTag(M node) { + return getImageTag(node, getImageSize(node)); + } + + protected String getImageTag(M node, Cms2DSize size) { + StringBuilder buf = getImageTagBuilder(node, size); + if (buf == null) + return null; + return buf.append("/>").toString(); + } + + /** @return null if not available */ + @Override + public StringBuilder getImageTagBuilder(M node, Cms2DSize size) { + return getImageTagBuilder(node, Integer.toString(size.getWidth()), Integer.toString(size.getHeight())); + } + + /** @return null if not available */ + protected StringBuilder getImageTagBuilder(M node, String width, String height) { + String url = getImageUrl(node); + if (url == null) + return null; + return CmsUxUtils.imgBuilder(url, width, height); + } + +} diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/CmsUxUtils.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/CmsUxUtils.java index d6fd221a4..916cc74f2 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/CmsUxUtils.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/CmsUxUtils.java @@ -3,6 +3,7 @@ package org.argeo.cms.ux; import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentRepository; import org.argeo.api.acr.ContentSession; +import org.argeo.api.cms.ux.Cms2DSize; import org.argeo.api.cms.ux.CmsView; import org.argeo.util.CurrentSubject; @@ -19,4 +20,17 @@ public class CmsUxUtils { private CmsUxUtils() { } + + public static StringBuilder imgBuilder(String src, String width, String height) { + return new StringBuilder(64).append("").toString(); + } + + public static String img(String src, Cms2DSize size) { + return img(src, Integer.toString(size.getWidth()), Integer.toString(size.getHeight())); + } } diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/AbstractSwtImageManager.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/AbstractSwtImageManager.java new file mode 100644 index 000000000..00a51ef92 --- /dev/null +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/AbstractSwtImageManager.java @@ -0,0 +1,77 @@ +package org.argeo.cms.swt; + +import org.argeo.api.cms.ux.Cms2DSize; +import org.argeo.cms.ux.AbstractImageManager; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; + +/** Manages only public images so far. */ +public abstract class AbstractSwtImageManager extends AbstractImageManager { + protected abstract Image getSwtImage(M node); + + protected abstract String noImg(Cms2DSize size); + + public Boolean load(M node, Control control, Cms2DSize preferredSize) { + Cms2DSize imageSize = getImageSize(node); + Cms2DSize size; + String imgTag = null; + if (preferredSize == null || imageSize.getWidth() == 0 || imageSize.getHeight() == 0 + || (preferredSize.getWidth() == 0 && preferredSize.getHeight() == 0)) { + if (imageSize.getWidth() != 0 && imageSize.getHeight() != 0) { + // actual image size if completely known + size = imageSize; + } else { + // no image if not completely known + size = resizeTo(NO_IMAGE_SIZE, preferredSize != null ? preferredSize : imageSize); + imgTag = noImg(size); + } + + } else if (preferredSize.getWidth() != 0 && preferredSize.getHeight() != 0) { + // given size if completely provided + size = preferredSize; + } else { + // at this stage : + // image is completely known + assert imageSize.getWidth() != 0 && imageSize.getHeight() != 0; + // one and only one of the dimension as been specified + assert preferredSize.getWidth() == 0 || preferredSize.getHeight() == 0; + size = resizeTo(imageSize, preferredSize); + } + + boolean loaded = false; + if (control == null) + return loaded; + + if (control instanceof Label) { + if (imgTag == null) { + // IMAGE RETRIEVED HERE + imgTag = getImageTag(node, size); + // + if (imgTag == null) + imgTag = noImg(size); + else + loaded = true; + } + + Label lbl = (Label) control; + lbl.setText(imgTag); + // lbl.setSize(size); +// } else if (control instanceof FileUpload) { +// FileUpload lbl = (FileUpload) control; +// lbl.setImage(CmsUiUtils.noImage(size)); +// lbl.setSize(new Point(size.getWidth(), size.getHeight())); +// return loaded; + } else + loaded = false; + + return loaded; + } + + public Cms2DSize getImageSize(M node) { + // TODO optimise + Image image = getSwtImage(node); + return new Cms2DSize(image.getBounds().width, image.getBounds().height); + } + +} diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/acr/AcrSwtImageManager.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/acr/AcrSwtImageManager.java new file mode 100644 index 000000000..5e83454de --- /dev/null +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/acr/AcrSwtImageManager.java @@ -0,0 +1,37 @@ +package org.argeo.cms.swt.acr; + +import java.io.InputStream; + +import org.argeo.api.acr.Content; +import org.argeo.api.cms.ux.Cms2DSize; +import org.argeo.cms.swt.AbstractSwtImageManager; +import org.eclipse.swt.graphics.Image; + +public class AcrSwtImageManager extends AbstractSwtImageManager { + + @Override + public String getImageUrl(Content node) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String uploadImage(Content context, Content uploadFolder, String fileName, InputStream in, + String contentType) { + // TODO Auto-generated method stub + return null; + } + + @Override + protected Image getSwtImage(Content node) { + // TODO Auto-generated method stub + return null; + } + + @Override + protected String noImg(Cms2DSize size) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/swt/rap/org.argeo.cms.e4.rap/bnd.bnd b/swt/rap/org.argeo.cms.e4.rap/bnd.bnd index 5bbe4bc4b..29ce1708a 100644 --- a/swt/rap/org.argeo.cms.e4.rap/bnd.bnd +++ b/swt/rap/org.argeo.cms.e4.rap/bnd.bnd @@ -1,7 +1,9 @@ Bundle-ActivationPolicy: lazy Service-Component: OSGI-INF/cms-admin-rap.xml -Import-Package: org.eclipse.swt,\ +Import-Package: \ +org.argeo.api.acr, \ +org.eclipse.swt,\ org.eclipse.swt.graphics,\ org.eclipse.e4.ui.workbench,\ org.eclipse.rap.rwt.client,\ diff --git a/swt/rap/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java b/swt/rap/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java index 471cdeca5..cdd489928 100644 --- a/swt/rap/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java +++ b/swt/rap/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java @@ -15,9 +15,9 @@ import org.argeo.api.cms.ux.UxContext; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.swt.SimpleSwtUxContext; +import org.argeo.cms.swt.acr.AcrSwtImageManager; import org.argeo.cms.swt.auth.CmsLoginShell; import org.argeo.cms.swt.dialogs.CmsFeedback; -import org.argeo.cms.ui.util.SimpleImageManager; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.e4.ui.workbench.UIEvents; import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate; @@ -82,7 +82,7 @@ public class CmsLoginLifecycle implements CmsView { if (CurrentUser.getUsername(getSubject()) == null) return false; uxContext = new SimpleSwtUxContext(); - imageManager = new SimpleImageManager(); + imageManager = (CmsImageManager) new AcrSwtImageManager(); eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler() { @Override diff --git a/swt/rap/org.argeo.cms.swt.rap/bnd.bnd b/swt/rap/org.argeo.cms.swt.rap/bnd.bnd index db2ac0beb..81178ebd3 100644 --- a/swt/rap/org.argeo.cms.swt.rap/bnd.bnd +++ b/swt/rap/org.argeo.cms.swt.rap/bnd.bnd @@ -2,8 +2,6 @@ Import-Package:\ org.argeo.api.acr,\ org.eclipse.swt,\ org.argeo.eclipse.ui,\ -javax.jcr.nodetype,\ -javax.jcr.security,\ org.eclipse.swt.graphics,\ javax.servlet.*;version="[3,5)",\ * diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/AppUi.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/AppUi.java deleted file mode 100644 index 01ebb237e..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/AppUi.java +++ /dev/null @@ -1,268 +0,0 @@ -package org.argeo.cms.ui.script; - -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.script.Invocable; -import javax.script.ScriptException; - -import org.argeo.api.cms.CmsConstants; -import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.swt.Selected; -import org.argeo.cms.ui.CmsUiProvider; -import org.argeo.cms.ui.util.CmsPane; -import org.argeo.cms.web.SimpleErgonomics; -import org.eclipse.rap.rwt.RWT; -import org.eclipse.rap.rwt.application.Application; -import org.eclipse.rap.rwt.application.EntryPoint; -import org.eclipse.rap.rwt.application.EntryPointFactory; -import org.eclipse.rap.rwt.client.WebClient; -import org.eclipse.rap.rwt.client.service.JavaScriptExecutor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.osgi.framework.BundleContext; - -public class AppUi implements CmsUiProvider, Branding { - private final CmsScriptApp app; - - private CmsUiProvider ui; - private String createUi; - private Object impl; - private String script; - // private Branding branding = new Branding(); - - private EntryPointFactory factory; - - // Branding - private String themeId; - private String additionalHeaders; - private String bodyHtml; - private String pageTitle; - private String pageOverflow; - private String favicon; - - public AppUi(CmsScriptApp app) { - this.app = app; - } - - public AppUi(CmsScriptApp app, String scriptPath) { - this.app = app; - this.ui = new ScriptUi((BundleContext) app.getScriptEngine().get(CmsScriptRwtApplication.BC), - app.getScriptEngine(), scriptPath); - } - - public AppUi(CmsScriptApp app, CmsUiProvider uiProvider) { - this.app = app; - this.ui = uiProvider; - } - - public AppUi(CmsScriptApp app, EntryPointFactory factory) { - this.app = app; - this.factory = factory; - } - - public void apply(Repository repository, Application application, Branding appBranding, String path) { - Map factoryProperties = new HashMap<>(); - if (appBranding != null) - appBranding.applyBranding(factoryProperties); - applyBranding(factoryProperties); - if (factory != null) { - application.addEntryPoint("/" + path, factory, factoryProperties); - } else { - EntryPointFactory entryPointFactory = new EntryPointFactory() { - @Override - public EntryPoint create() { - SimpleErgonomics ergonomics = new SimpleErgonomics(repository, CmsConstants.SYS_WORKSPACE, - "/home/root/argeo:keyring", AppUi.this, factoryProperties); -// CmsUiProvider header = app.getHeader(); -// if (header != null) -// ergonomics.setHeader(header); - app.applySides(ergonomics); - Integer headerHeight = app.getHeaderHeight(); - if (headerHeight != null) - ergonomics.setHeaderHeight(headerHeight); - return ergonomics; - } - }; - application.addEntryPoint("/" + path, entryPointFactory, factoryProperties); - } - } - - public void setUi(CmsUiProvider uiProvider) { - this.ui = uiProvider; - } - - public void applyBranding(Map properties) { - if (themeId != null) - properties.put(WebClient.THEME_ID, themeId); - if (additionalHeaders != null) - properties.put(WebClient.HEAD_HTML, additionalHeaders); - if (bodyHtml != null) - properties.put(WebClient.BODY_HTML, bodyHtml); - if (pageTitle != null) - properties.put(WebClient.PAGE_TITLE, pageTitle); - if (pageOverflow != null) - properties.put(WebClient.PAGE_OVERFLOW, pageOverflow); - if (favicon != null) - properties.put(WebClient.FAVICON, favicon); - } - - // public Branding getBranding() { - // return branding; - // } - - @Override - public Control createUi(Composite parent, Node context) throws RepositoryException { - CmsPane cmsPane = new CmsPane(parent, SWT.NONE); - - if (false) { - // QA - CmsSwtUtils.style(cmsPane.getQaArea(), "qa"); - Button reload = new Button(cmsPane.getQaArea(), SWT.FLAT); - CmsSwtUtils.style(reload, "qa"); - reload.setText("Reload"); - reload.addSelectionListener(new Selected() { - private static final long serialVersionUID = 1L; - - @Override - public void widgetSelected(SelectionEvent e) { - new Thread() { - @Override - public void run() { - app.reload(); - } - }.start(); - RWT.getClient().getService(JavaScriptExecutor.class) - .execute("setTimeout('location.reload()',1000)"); - } - }); - - // Support - CmsSwtUtils.style(cmsPane.getSupportArea(), "support"); - Label msg = new Label(cmsPane.getSupportArea(), SWT.NONE); - CmsSwtUtils.style(msg, "support"); - msg.setText("UNSUPPORTED DEVELOPMENT VERSION"); - } - - if (ui != null) { - ui.createUi(cmsPane.getMainArea(), context); - } - if (createUi != null) { - Invocable invocable = (Invocable) app.getScriptEngine(); - try { - invocable.invokeFunction(createUi, cmsPane.getMainArea(), context); - - } catch (NoSuchMethodException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ScriptException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - if (impl != null) { - Invocable invocable = (Invocable) app.getScriptEngine(); - try { - invocable.invokeMethod(impl, "createUi", cmsPane.getMainArea(), context); - - } catch (NoSuchMethodException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ScriptException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - // Invocable invocable = (Invocable) app.getScriptEngine(); - // try { - // invocable.invokeMethod(AppUi.this, "initUi", parent, context); - // - // } catch (NoSuchMethodException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } catch (ScriptException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - - return null; - } - - public void setCreateUi(String createUi) { - this.createUi = createUi; - } - - public void setImpl(Object impl) { - this.impl = impl; - } - - public Object getImpl() { - return impl; - } - - public String getScript() { - return script; - } - - public void setScript(String script) { - this.script = script; - } - - // Branding - public String getThemeId() { - return themeId; - } - - public void setThemeId(String themeId) { - this.themeId = themeId; - } - - public String getAdditionalHeaders() { - return additionalHeaders; - } - - public void setAdditionalHeaders(String additionalHeaders) { - this.additionalHeaders = additionalHeaders; - } - - public String getBodyHtml() { - return bodyHtml; - } - - public void setBodyHtml(String bodyHtml) { - this.bodyHtml = bodyHtml; - } - - public String getPageTitle() { - return pageTitle; - } - - public void setPageTitle(String pageTitle) { - this.pageTitle = pageTitle; - } - - public String getPageOverflow() { - return pageOverflow; - } - - public void setPageOverflow(String pageOverflow) { - this.pageOverflow = pageOverflow; - } - - public String getFavicon() { - return favicon; - } - - public void setFavicon(String favicon) { - this.favicon = favicon; - } - -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/Branding.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/Branding.java deleted file mode 100644 index f72338ef7..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/Branding.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.argeo.cms.ui.script; - -import java.util.Map; - -public interface Branding { - public void applyBranding(Map properties); - - public String getThemeId(); - - public String getAdditionalHeaders(); - - public String getBodyHtml(); - - public String getPageTitle(); - - public String getPageOverflow(); - - public String getFavicon(); - -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptApp.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptApp.java deleted file mode 100644 index 6b3a670d7..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptApp.java +++ /dev/null @@ -1,421 +0,0 @@ -package org.argeo.cms.ui.script; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.PropertyIterator; -import javax.jcr.PropertyType; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.script.ScriptEngine; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.argeo.api.cms.CmsLog; -import org.argeo.api.cms.ux.CmsTheme; -import org.argeo.cms.swt.CmsException; -import org.argeo.cms.ui.CmsUiConstants; -import org.argeo.cms.ui.CmsUiProvider; -import org.argeo.cms.ui.util.CmsUiUtils; -import org.argeo.cms.web.BundleResourceLoader; -import org.argeo.cms.web.SimpleErgonomics; -import org.argeo.cms.web.WebThemeUtils; -import org.eclipse.rap.rwt.application.Application; -import org.eclipse.rap.rwt.application.Application.OperationMode; -import org.eclipse.rap.rwt.application.ApplicationConfiguration; -import org.eclipse.rap.rwt.application.ExceptionHandler; -import org.eclipse.rap.rwt.client.WebClient; -import org.eclipse.rap.rwt.service.ResourceLoader; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.http.HttpContext; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; - -public class CmsScriptApp implements Branding { - public final static String CONTEXT_NAME = "contextName"; - - ServiceRegistration appConfigReg; - - private ScriptEngine scriptEngine; - - private final static CmsLog log = CmsLog.getLog(CmsScriptApp.class); - - private String webPath; - private String repo = "(cn=node)"; - - // private Branding branding = new Branding(); - private CmsTheme theme; - - private List resources = new ArrayList<>(); - - private Map ui = new HashMap<>(); - - private CmsUiProvider header; - private Integer headerHeight = null; - private CmsUiProvider lead; - private CmsUiProvider end; - private CmsUiProvider footer; - - // Branding - private String themeId; - private String additionalHeaders; - private String bodyHtml; - private String pageTitle; - private String pageOverflow; - private String favicon; - - public CmsScriptApp(ScriptEngine scriptEngine) { - super(); - this.scriptEngine = scriptEngine; - } - - public void apply(BundleContext bundleContext, Repository repository, Application application) { - BundleResourceLoader bundleRL = new BundleResourceLoader(bundleContext.getBundle()); - - application.setOperationMode(OperationMode.SWT_COMPATIBILITY); - // application.setOperationMode(OperationMode.JEE_COMPATIBILITY); - - application.setExceptionHandler(new CmsExceptionHandler()); - - // loading animated gif - application.addResource(CmsUiConstants.LOADING_IMAGE, createResourceLoader(CmsUiConstants.LOADING_IMAGE)); - // empty image - application.addResource(CmsUiConstants.NO_IMAGE, createResourceLoader(CmsUiConstants.NO_IMAGE)); - - for (String resource : resources) { - application.addResource(resource, bundleRL); - if (log.isTraceEnabled()) - log.trace("Resource " + resource); - } - - if (theme != null) { - WebThemeUtils.apply(application, theme); - String themeHeaders = theme.getHtmlHeaders(); - if (themeHeaders != null) { - if (additionalHeaders == null) - additionalHeaders = themeHeaders; - else - additionalHeaders = themeHeaders + "\n" + additionalHeaders; - } - themeId = theme.getThemeId(); - } - - // client JavaScript - Bundle appBundle = bundleRL.getBundle(); - BundleContext bc = appBundle.getBundleContext(); - HttpService httpService = bc.getService(bc.getServiceReference(HttpService.class)); - HttpContext httpContext = new BundleHttpContext(bc); - Enumeration themeResources = appBundle.findEntries("/js/", "*", true); - if (themeResources != null) - bundleResources: while (themeResources.hasMoreElements()) { - try { - String name = themeResources.nextElement().getPath(); - if (name.endsWith("/")) - continue bundleResources; - String alias = "/" + getWebPath() + name; - - httpService.registerResources(alias, name, httpContext); - if (log.isDebugEnabled()) - log.debug("Mapped " + name + " to alias " + alias); - - } catch (NamespaceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - // App UIs - for (String appUiName : ui.keySet()) { - AppUi appUi = ui.get(appUiName); - appUi.apply(repository, application, this, appUiName); - - } - - } - - public void applySides(SimpleErgonomics simpleErgonomics) { - simpleErgonomics.setHeader(header); - simpleErgonomics.setLead(lead); - simpleErgonomics.setEnd(end); - simpleErgonomics.setFooter(footer); - } - - public void register(BundleContext bundleContext, ApplicationConfiguration appConfig) { - Hashtable props = new Hashtable<>(); - props.put(CONTEXT_NAME, webPath); - appConfigReg = bundleContext.registerService(ApplicationConfiguration.class, appConfig, props); - } - - public void reload() { - BundleContext bundleContext = appConfigReg.getReference().getBundle().getBundleContext(); - ApplicationConfiguration appConfig = bundleContext.getService(appConfigReg.getReference()); - appConfigReg.unregister(); - register(bundleContext, appConfig); - - // BundleContext bundleContext = (BundleContext) - // getScriptEngine().get("bundleContext"); - // try { - // Bundle bundle = bundleContext.getBundle(); - // bundle.stop(); - // bundle.start(); - // } catch (BundleException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - } - - private static ResourceLoader createResourceLoader(final String resourceName) { - return new ResourceLoader() { - public InputStream getResourceAsStream(String resourceName) throws IOException { - return getClass().getClassLoader().getResourceAsStream(resourceName); - } - }; - } - - public List getResources() { - return resources; - } - - public AppUi newUi(String name) { - if (ui.containsKey(name)) - throw new IllegalArgumentException("There is already an UI named " + name); - AppUi appUi = new AppUi(this); - // appUi.setApp(this); - ui.put(name, appUi); - return appUi; - } - - public void addUi(String name, AppUi appUi) { - if (ui.containsKey(name)) - throw new IllegalArgumentException("There is already an UI named " + name); - // appUi.setApp(this); - ui.put(name, appUi); - } - - public void applyBranding(Map properties) { - if (themeId != null) - properties.put(WebClient.THEME_ID, themeId); - if (additionalHeaders != null) - properties.put(WebClient.HEAD_HTML, additionalHeaders); - if (bodyHtml != null) - properties.put(WebClient.BODY_HTML, bodyHtml); - if (pageTitle != null) - properties.put(WebClient.PAGE_TITLE, pageTitle); - if (pageOverflow != null) - properties.put(WebClient.PAGE_OVERFLOW, pageOverflow); - if (favicon != null) - properties.put(WebClient.FAVICON, favicon); - } - - class CmsExceptionHandler implements ExceptionHandler { - - @Override - public void handleException(Throwable throwable) { - // TODO be smarter - CmsUiUtils.getCmsView().exception(throwable); - } - - } - - // public Branding getBranding() { - // return branding; - // } - - ScriptEngine getScriptEngine() { - return scriptEngine; - } - - public static String toJson(Node node) { - try { - StringBuilder sb = new StringBuilder(); - sb.append('{'); - PropertyIterator pit = node.getProperties(); - int count = 0; - while (pit.hasNext()) { - Property p = pit.nextProperty(); - int type = p.getType(); - if (type == PropertyType.REFERENCE || type == PropertyType.WEAKREFERENCE || type == PropertyType.PATH) { - Node ref = p.getNode(); - if (count != 0) - sb.append(','); - // TODO limit depth? - sb.append(toJson(ref)); - count++; - } else if (!p.isMultiple()) { - if (count != 0) - sb.append(','); - sb.append('\"').append(p.getName()).append("\":\"").append(p.getString()).append('\"'); - count++; - } - } - sb.append('}'); - return sb.toString(); - } catch (RepositoryException e) { - throw new CmsException("Cannot convert " + node + " to JSON", e); - } - } - - public void fromJson(Node node, String json) { - // TODO - } - - public CmsTheme getTheme() { - return theme; - } - - public void setTheme(CmsTheme theme) { - this.theme = theme; - } - - public String getWebPath() { - return webPath; - } - - public void setWebPath(String context) { - this.webPath = context; - } - - public String getRepo() { - return repo; - } - - public void setRepo(String repo) { - this.repo = repo; - } - - public Map getUi() { - return ui; - } - - public void setUi(Map ui) { - this.ui = ui; - } - - // Branding - public String getThemeId() { - return themeId; - } - - public void setThemeId(String themeId) { - this.themeId = themeId; - } - - public String getAdditionalHeaders() { - return additionalHeaders; - } - - public void setAdditionalHeaders(String additionalHeaders) { - this.additionalHeaders = additionalHeaders; - } - - public String getBodyHtml() { - return bodyHtml; - } - - public void setBodyHtml(String bodyHtml) { - this.bodyHtml = bodyHtml; - } - - public String getPageTitle() { - return pageTitle; - } - - public void setPageTitle(String pageTitle) { - this.pageTitle = pageTitle; - } - - public String getPageOverflow() { - return pageOverflow; - } - - public void setPageOverflow(String pageOverflow) { - this.pageOverflow = pageOverflow; - } - - public String getFavicon() { - return favicon; - } - - public void setFavicon(String favicon) { - this.favicon = favicon; - } - - public CmsUiProvider getHeader() { - return header; - } - - public void setHeader(CmsUiProvider header) { - this.header = header; - } - - public Integer getHeaderHeight() { - return headerHeight; - } - - public void setHeaderHeight(Integer headerHeight) { - this.headerHeight = headerHeight; - } - - public CmsUiProvider getLead() { - return lead; - } - - public void setLead(CmsUiProvider lead) { - this.lead = lead; - } - - public CmsUiProvider getEnd() { - return end; - } - - public void setEnd(CmsUiProvider end) { - this.end = end; - } - - public CmsUiProvider getFooter() { - return footer; - } - - public void setFooter(CmsUiProvider footer) { - this.footer = footer; - } - - static class BundleHttpContext implements HttpContext { - private BundleContext bundleContext; - - public BundleHttpContext(BundleContext bundleContext) { - super(); - this.bundleContext = bundleContext; - } - - @Override - public boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException { - // TODO Auto-generated method stub - return true; - } - - @Override - public URL getResource(String name) { - - return bundleContext.getBundle().getEntry(name); - } - - @Override - public String getMimeType(String name) { - return null; - } - - } - -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptRwtApplication.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptRwtApplication.java deleted file mode 100644 index 9879fb019..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/CmsScriptRwtApplication.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.argeo.cms.ui.script; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.URL; - -import javax.jcr.Repository; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; - -import org.argeo.api.cms.CmsLog; -import org.argeo.cms.swt.CmsException; -import org.eclipse.rap.rwt.application.Application; -import org.eclipse.rap.rwt.application.ApplicationConfiguration; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.osgi.framework.wiring.BundleWiring; - -public class CmsScriptRwtApplication implements ApplicationConfiguration { - public final static String APP = "APP"; - public final static String BC = "BC"; - - private final CmsLog log = CmsLog.getLog(CmsScriptRwtApplication.class); - - BundleContext bundleContext; - Repository repository; - - ScriptEngine engine; - - public void init(BundleContext bundleContext) { - this.bundleContext = bundleContext; - ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader(); - ClassLoader originalCcl = Thread.currentThread().getContextClassLoader(); - try { -// Thread.currentThread().setContextClassLoader(bundleCl);// GraalVM needs it to be before creating manager -// ScriptEngineManager scriptEngineManager = new ScriptEngineManager(bundleCl); -// engine = scriptEngineManager.getEngineByName("JavaScript"); -// if (engine == null) {// Nashorn -// Thread.currentThread().setContextClassLoader(originalCcl); -// scriptEngineManager = new ScriptEngineManager(); -// Thread.currentThread().setContextClassLoader(bundleCl); -// engine = scriptEngineManager.getEngineByName("JavaScript"); -// } - engine = loadScriptEngine(originalCcl, bundleCl); - - // Load script - URL appUrl = bundleContext.getBundle().getEntry("cms/app.js"); - // System.out.println("Loading " + appUrl); - // System.out.println("Loading " + appUrl.getHost()); - // System.out.println("Loading " + appUrl.getPath()); - - CmsScriptApp app = new CmsScriptApp(engine); - engine.put(APP, app); - engine.put(BC, bundleContext); - try (Reader reader = new InputStreamReader(appUrl.openStream())) { - engine.eval(reader); - } catch (IOException | ScriptException e) { - throw new CmsException("Cannot execute " + appUrl, e); - } - - if (log.isDebugEnabled()) - log.debug("CMS script app initialized from " + appUrl); - - } catch (Exception e) { - e.printStackTrace(); - } finally { - Thread.currentThread().setContextClassLoader(originalCcl); - } - } - - public void destroy(BundleContext bundleContext) { - engine = null; - } - - @Override - public void configure(Application application) { - load(application); - } - - void load(Application application) { - CmsScriptApp app = getApp(); - app.apply(bundleContext, repository, application); - if (log.isDebugEnabled()) - log.debug("CMS script app loaded to " + app.getWebPath()); - } - - CmsScriptApp getApp() { - if (engine == null) - throw new IllegalStateException("CMS script app is not initialized"); - return (CmsScriptApp) engine.get(APP); - } - - void update() { - - try { - bundleContext.getBundle().update(); - } catch (BundleException e) { - e.printStackTrace(); - } - } - - public void setRepository(Repository repository) { - this.repository = repository; - } - - private static ScriptEngine loadScriptEngine(ClassLoader originalCcl, ClassLoader bundleCl) { - Thread.currentThread().setContextClassLoader(bundleCl);// GraalVM needs it to be before creating manager - ScriptEngineManager scriptEngineManager = new ScriptEngineManager(bundleCl); - ScriptEngine engine = scriptEngineManager.getEngineByName("JavaScript"); - if (engine == null) {// Nashorn - Thread.currentThread().setContextClassLoader(originalCcl); - scriptEngineManager = new ScriptEngineManager(); - Thread.currentThread().setContextClassLoader(bundleCl); - engine = scriptEngineManager.getEngineByName("JavaScript"); - } - return engine; - } -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptAppActivator.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptAppActivator.java deleted file mode 100644 index a55095371..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptAppActivator.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.argeo.cms.ui.script; - -import javax.jcr.Repository; - -import org.argeo.api.cms.CmsLog; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; - -public class ScriptAppActivator implements BundleActivator { - private final static CmsLog log = CmsLog.getLog(ScriptAppActivator.class); - - @Override - public void start(BundleContext context) throws Exception { - try { - CmsScriptRwtApplication appConfig = new CmsScriptRwtApplication(); - appConfig.init(context); - CmsScriptApp app = appConfig.getApp(); - ServiceTracker repoSt = new ServiceTracker(context, - FrameworkUtil.createFilter("(&" + app.getRepo() + "(objectClass=javax.jcr.Repository))"), null) { - - @Override - public Repository addingService(ServiceReference reference) { - Repository repository = super.addingService(reference); - appConfig.setRepository(repository); - CmsScriptApp app = appConfig.getApp(); - app.register(context, appConfig); - return repository; - } - - }; - repoSt.open(); - } catch (Exception e) { - log.error("Cannot initialise script bundle " + context.getBundle().getSymbolicName(), e); - throw e; - } - } - - @Override - public void stop(BundleContext context) throws Exception { - } - -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptUi.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptUi.java deleted file mode 100644 index 0c870e1e8..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/ScriptUi.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.argeo.cms.ui.script; - -import java.net.URL; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptException; - -import org.argeo.api.cms.CmsLog; -import org.argeo.cms.ui.CmsUiProvider; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.osgi.framework.BundleContext; - -class ScriptUi implements CmsUiProvider { - private final static CmsLog log = CmsLog.getLog(ScriptUi.class); - - private boolean development = true; - private ScriptEngine scriptEngine; - - private URL appUrl; - // private BundleContext bundleContext; - // private String path; - - // private Bindings bindings; - // private String script; - - public ScriptUi(BundleContext bundleContext,ScriptEngine scriptEngine, String path) { - this.scriptEngine = scriptEngine; -//// ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); -// ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader(); -// ClassLoader originalCcl = Thread.currentThread().getContextClassLoader(); -// try { -//// Thread.currentThread().setContextClassLoader(bundleCl); -//// scriptEngine = scriptEngineManager.getEngineByName("JavaScript"); -//// scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext); -// scriptEngine = CmsScriptRwtApplication.loadScriptEngine(originalCcl, bundleCl); -// -// } catch (Exception e) { -// e.printStackTrace(); -// } finally { -// Thread.currentThread().setContextClassLoader(originalCcl); -// } - this.appUrl = bundleContext.getBundle().getEntry(path); - load(); - } - - private void load() { -// try (Reader reader = new InputStreamReader(appUrl.openStream())) { -// scriptEngine.eval(reader); -// } catch (IOException | ScriptException e) { -// log.warn("Cannot execute " + appUrl, e); -// } - - try { - scriptEngine.eval("load('" + appUrl + "')"); - } catch (ScriptException e) { - log.warn("Cannot execute " + appUrl, e); - } - - } - - // public ScriptUiProvider(ScriptEngine scriptEngine, String script) throws - // ScriptException { - // super(); - // this.scriptEngine = scriptEngine; - // this.script = script; - // bindings = scriptEngine.createBindings(); - // scriptEngine.eval(script, bindings); - // } - - @Override - public Control createUi(Composite parent, Node context) throws RepositoryException { - long begin = System.currentTimeMillis(); - // if (bindings == null) { - // bindings = scriptEngine.createBindings(); - // try { - // scriptEngine.eval(script, bindings); - // } catch (ScriptException e) { - // log.warn("Cannot evaluate script", e); - // } - // } - // Bindings bindings = scriptEngine.createBindings(); - // bindings.put("parent", parent); - // bindings.put("context", context); - // URL appUrl = bundleContext.getBundle().getEntry(path); - // try (Reader reader = new InputStreamReader(appUrl.openStream())) { - // scriptEngine.eval(reader,bindings); - // } catch (IOException | ScriptException e) { - // log.warn("Cannot execute " + appUrl, e); - // } - - if (development) - load(); - - Invocable invocable = (Invocable) scriptEngine; - try { - invocable.invokeFunction("createUi", parent, context); - } catch (NoSuchMethodException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ScriptException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - long duration = System.currentTimeMillis() - begin; - if (log.isTraceEnabled()) - log.trace(appUrl + " UI in " + duration + " ms"); - return null; - } - -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/cms.js b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/cms.js deleted file mode 100644 index be9618dcb..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/cms.js +++ /dev/null @@ -1,90 +0,0 @@ -// CMS -var ScrolledPage = Java.type('org.argeo.cms.ui.widgets.ScrolledPage'); - -var CmsScriptApp = Java.type('org.argeo.cms.ui.script.CmsScriptApp'); -var AppUi = Java.type('org.argeo.cms.ui.script.AppUi'); -var Theme = Java.type('org.argeo.cms.ui.script.Theme'); -var ScriptUi = Java.type('org.argeo.cms.ui.script.ScriptUi'); -var CmsUtils = Java.type('org.argeo.cms.ui.util.CmsUiUtils'); -var SimpleCmsHeader = Java.type('org.argeo.cms.ui.util.SimpleCmsHeader'); -var CmsLink = Java.type('org.argeo.cms.ui.util.CmsLink'); -var MenuLink = Java.type('org.argeo.cms.ui.util.MenuLink'); -var UserMenuLink = Java.type('org.argeo.cms.ui.util.UserMenuLink'); - -// SWT -var SWT = Java.type('org.eclipse.swt.SWT'); -var Composite = Java.type('org.eclipse.swt.widgets.Composite'); -var Label = Java.type('org.eclipse.swt.widgets.Label'); -var Button = Java.type('org.eclipse.swt.widgets.Button'); -var Text = Java.type('org.eclipse.swt.widgets.Text'); -var Browser = Java.type('org.eclipse.swt.browser.Browser'); - -var FillLayout = Java.type('org.eclipse.swt.layout.FillLayout'); -var GridLayout = Java.type('org.eclipse.swt.layout.GridLayout'); -var RowLayout = Java.type('org.eclipse.swt.layout.RowLayout'); -var FormLayout = Java.type('org.eclipse.swt.layout.FormLayout'); -var GridData = Java.type('org.eclipse.swt.layout.GridData'); - -function loadNode(node) { - var json = CmsScriptApp.toJson(node) - var fromJson = JSON.parse(json) - return fromJson -} - -function newArea(parent, style, layout) { - var control = new Composite(parent, SWT.NONE) - control.setLayout(layout) - CmsUtils.style(control, style) - return control -} - -function newLabel(parent, style, text) { - var control = new Label(parent, SWT.WRAP) - control.setText(text) - CmsUtils.style(control, style) - CmsUtils.markup(control) - return control -} - -function newButton(parent, style, text) { - var control = new Button(parent, SWT.FLAT) - control.setText(text) - CmsUtils.style(control, style) - CmsUtils.markup(control) - return control -} - -function newFormLabel(parent, style, text) { - return newLabel(parent, style, '' + text + '') -} - -function newText(parent, style, msg) { - var control = new Text(parent, SWT.NONE) - control.setMessage(msg) - CmsUtils.style(control, style) - return control -} - -function newScrolledPage(parent) { - var scrolled = new ScrolledPage(parent, SWT.NONE) - scrolled.setLayoutData(CmsUtils.fillAll()) - scrolled.setLayout(CmsUtils.noSpaceGridLayout()) - var page = new Composite(scrolled, SWT.NONE) - page.setLayout(CmsUtils.noSpaceGridLayout()) - page.setBackgroundMode(SWT.INHERIT_NONE) - return page -} - -function gridData(control) { - var gridData = new GridData() - control.setLayoutData(gridData) - return gridData -} - -function gridData(control, hAlign, vAlign) { - var gridData = new GridData(hAlign, vAlign, false, false) - control.setLayoutData(gridData) - return gridData -} - -// print(__FILE__, __LINE__, __DIR__) diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/package-info.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/package-info.java deleted file mode 100644 index 7440596ab..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/ui/script/package-info.java +++ /dev/null @@ -1,2 +0,0 @@ -/** Argeo CMS user interface scripting. */ -package org.argeo.cms.ui.script; \ No newline at end of file diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java deleted file mode 100644 index f3269f2c4..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java +++ /dev/null @@ -1,398 +0,0 @@ -package org.argeo.cms.web; - -import static org.argeo.util.directory.ldap.SharedSecret.X_SHARED_SECRET; - -import java.io.IOException; -import java.security.PrivilegedAction; -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.PathNotFoundException; -import javax.jcr.Property; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.nodetype.NodeType; -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; -import javax.servlet.http.HttpServletRequest; - -import org.argeo.api.cms.CmsLog; -import org.argeo.api.cms.ux.CmsView; -import org.argeo.api.cms.CmsAuth; -import org.argeo.cms.auth.CurrentUser; -import org.argeo.cms.auth.RemoteAuthCallback; -import org.argeo.cms.auth.RemoteAuthCallbackHandler; -import org.argeo.cms.servlet.ServletHttpRequest; -import org.argeo.cms.servlet.ServletHttpResponse; -import org.argeo.cms.swt.CmsException; -import org.argeo.cms.swt.CmsStyles; -import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.eclipse.ui.specific.UiContext; -import org.argeo.jcr.JcrUtils; -import org.argeo.util.directory.ldap.AuthPassword; -import org.argeo.util.directory.ldap.SharedSecret; -import org.eclipse.rap.rwt.RWT; -import org.eclipse.rap.rwt.application.AbstractEntryPoint; -import org.eclipse.rap.rwt.client.WebClient; -import org.eclipse.rap.rwt.client.service.BrowserNavigation; -import org.eclipse.rap.rwt.client.service.BrowserNavigationEvent; -import org.eclipse.rap.rwt.client.service.BrowserNavigationListener; -import org.eclipse.rap.rwt.client.service.JavaScriptExecutor; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -/** Manages history and navigation */ -@Deprecated -public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements CmsView { - private static final long serialVersionUID = 906558779562569784L; - - private final CmsLog log = CmsLog.getLog(AbstractCmsEntryPoint.class); - - // private final Subject subject; - private LoginContext loginContext; - - private final Repository repository; - private final String workspace; - private final String defaultPath; - private final Map factoryProperties; - - // Current state - private Session session; - private Node node; - private String nodePath;// useful when changing auth - private String state; - private Throwable exception; - - // Client services - private final JavaScriptExecutor jsExecutor; - private final BrowserNavigation browserNavigation; - - public AbstractCmsEntryPoint(Repository repository, String workspace, String defaultPath, - Map factoryProperties) { - this.repository = repository; - this.workspace = workspace; - this.defaultPath = defaultPath; - this.factoryProperties = new HashMap(factoryProperties); - // subject = new Subject(); - - // Initial login - LoginContext lc; - try { - lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_USER, - new RemoteAuthCallbackHandler(new ServletHttpRequest(UiContext.getHttpRequest()), - new ServletHttpResponse(UiContext.getHttpResponse()))); - lc.login(); - } catch (LoginException e) { - try { - lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_ANONYMOUS); - lc.login(); - } catch (LoginException e1) { - throw new CmsException("Cannot log in as anonymous", e1); - } - } - authChange(lc); - - jsExecutor = RWT.getClient().getService(JavaScriptExecutor.class); - browserNavigation = RWT.getClient().getService(BrowserNavigation.class); - if (browserNavigation != null) - browserNavigation.addBrowserNavigationListener(new CmsNavigationListener()); - } - - @Override - protected Shell createShell(Display display) { - Shell shell = super.createShell(display); - shell.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_SHELL); - display.disposeExec(new Runnable() { - - @Override - public void run() { - if (log.isTraceEnabled()) - log.trace("Logging out " + session); - JcrUtils.logoutQuietly(session); - } - }); - return shell; - } - - @Override - protected final void createContents(final Composite parent) { - // UiContext.setData(CmsView.KEY, this); - CmsSwtUtils.registerCmsView(parent.getShell(), this); - Subject.doAs(getSubject(), new PrivilegedAction() { - @Override - public Void run() { - try { - initUi(parent); - } catch (Exception e) { - throw new CmsException("Cannot create entrypoint contents", e); - } - return null; - } - }); - } - - /** Create UI */ - protected abstract void initUi(Composite parent); - - /** Recreate UI after navigation or auth change */ - protected abstract void refresh(); - - /** - * The node to return when no node was found (for authenticated users and - * anonymous) - */ -// private Node getDefaultNode(Session session) throws RepositoryException { -// if (!session.hasPermission(defaultPath, "read")) { -// String userId = session.getUserID(); -// if (userId.equals(NodeConstants.ROLE_ANONYMOUS)) -// // TODO throw a special exception -// throw new CmsException("Login required"); -// else -// throw new CmsException("Unauthorized"); -// } -// return session.getNode(defaultPath); -// } - - protected String getBaseTitle() { - return factoryProperties.get(WebClient.PAGE_TITLE); - } - - public void navigateTo(String state) { - exception = null; - String title = setState(state); - doRefresh(); - if (browserNavigation != null) - browserNavigation.pushState(state, title); - } - - // @Override - // public synchronized Subject getSubject() { - // return subject; - // } - - // @Override - // public LoginContext getLoginContext() { - // return loginContext; - // } - protected Subject getSubject() { - return loginContext.getSubject(); - } - - @Override - public boolean isAnonymous() { - return CurrentUser.isAnonymous(getSubject()); - } - - @Override - public synchronized void logout() { - if (loginContext == null) - throw new CmsException("Login context should not be null"); - try { - CurrentUser.logoutCmsSession(loginContext.getSubject()); - loginContext.logout(); - LoginContext anonymousLc = new LoginContext(CmsAuth.LOGIN_CONTEXT_ANONYMOUS); - anonymousLc.login(); - authChange(anonymousLc); - } catch (LoginException e) { - log.error("Cannot logout", e); - } - } - - @Override - public synchronized void authChange(LoginContext lc) { - if (lc == null) - throw new CmsException("Login context cannot be null"); - // logout previous login context - if (this.loginContext != null) - try { - this.loginContext.logout(); - } catch (LoginException e1) { - log.warn("Could not log out: " + e1); - } - this.loginContext = lc; - Subject.doAs(getSubject(), new PrivilegedAction() { - - @Override - public Void run() { - try { - JcrUtils.logoutQuietly(session); - session = repository.login(workspace); - if (nodePath != null) - try { - node = session.getNode(nodePath); - } catch (PathNotFoundException e) { - navigateTo("~"); - } - - // refresh UI - doRefresh(); - } catch (RepositoryException e) { - throw new CmsException("Cannot perform auth change", e); - } - return null; - } - - }); - } - - @Override - public void exception(final Throwable e) { - AbstractCmsEntryPoint.this.exception = e; - log.error("Unexpected exception in CMS", e); - doRefresh(); - } - - protected synchronized void doRefresh() { - Subject.doAs(getSubject(), new PrivilegedAction() { - @Override - public Void run() { - refresh(); - return null; - } - }); - } - - /** Sets the state of the entry point and retrieve the related JCR node. */ - protected synchronized String setState(String newState) { - String previousState = this.state; - - String newNodePath = null; - String prefix = null; - this.state = newState; - if (newState.equals("~")) - this.state = ""; - - try { - int firstSlash = state.indexOf('/'); - if (firstSlash == 0) { - newNodePath = state; - prefix = ""; - } else if (firstSlash > 0) { - prefix = state.substring(0, firstSlash); - newNodePath = state.substring(firstSlash); - } else { - newNodePath = defaultPath; - prefix = state; - - } - - // auth - int colonIndex = prefix.indexOf('$'); - if (colonIndex > 0) { - SharedSecret token = new SharedSecret(new AuthPassword(X_SHARED_SECRET + '$' + prefix)) { - - @Override - public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { - super.handle(callbacks); - // handle HTTP context - for (Callback callback : callbacks) { - if (callback instanceof RemoteAuthCallback) { - ((RemoteAuthCallback) callback) - .setRequest(new ServletHttpRequest(UiContext.getHttpRequest())); - ((RemoteAuthCallback) callback) - .setResponse(new ServletHttpResponse(UiContext.getHttpResponse())); - } - } - } - }; - LoginContext lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_USER, token); - lc.login(); - authChange(lc);// sets the node as well - // } else { - // // TODO check consistency - // } - } else { - Node newNode = null; - if (session.nodeExists(newNodePath)) - newNode = session.getNode(newNodePath); - else { -// throw new CmsException("Data " + newNodePath + " does not exist"); - newNode = null; - } - setNode(newNode); - } - String title = publishMetaData(getNode()); - - if (log.isTraceEnabled()) - log.trace("node=" + newNodePath + ", state=" + state + " (prefix=" + prefix + ")"); - - return title; - } catch (Exception e) { - log.error("Cannot set state '" + state + "'", e); - if (state.equals("") || newState.equals("~") || newState.equals(previousState)) - return "Unrecoverable exception : " + e.getClass().getSimpleName(); - if (previousState.equals("")) - previousState = "~"; - navigateTo(previousState); - throw new CmsException("Unexpected issue when accessing #" + newState, e); - } - } - - private String publishMetaData(Node node) throws RepositoryException { - // Title - String title; - if (node != null && node.isNodeType(NodeType.MIX_TITLE) && node.hasProperty(Property.JCR_TITLE)) - title = node.getProperty(Property.JCR_TITLE).getString() + " - " + getBaseTitle(); - else - title = getBaseTitle(); - - HttpServletRequest request = UiContext.getHttpRequest(); - if (request == null) - return null; - - StringBuilder js = new StringBuilder(); - if (title == null) - title = ""; - title = title.replace("'", "\\'");// sanitize - js.append("document.title = '" + title + "';"); - jsExecutor.execute(js.toString()); - return title; - } - - // Simply remove some illegal character - // private String clean(String stringToClean) { - // return stringToClean.replaceAll("'", "").replaceAll("\\n", "") - // .replaceAll("\\t", ""); - // } - - protected synchronized Node getNode() { - return node; - } - - private synchronized void setNode(Node node) throws RepositoryException { - this.node = node; - this.nodePath = node == null ? null : node.getPath(); - } - - protected String getState() { - return state; - } - - protected Throwable getException() { - return exception; - } - - protected void resetException() { - exception = null; - } - - protected Session getSession() { - return session; - } - - private class CmsNavigationListener implements BrowserNavigationListener { - private static final long serialVersionUID = -3591018803430389270L; - - @Override - public void navigated(BrowserNavigationEvent event) { - setState(event.getState()); - doRefresh(); - } - } -} \ No newline at end of file diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java index 159719720..477a6569d 100644 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java +++ b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java @@ -27,8 +27,8 @@ import org.argeo.cms.servlet.ServletHttpRequest; import org.argeo.cms.servlet.ServletHttpResponse; import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.swt.SimpleSwtUxContext; +import org.argeo.cms.swt.acr.AcrSwtImageManager; import org.argeo.cms.swt.dialogs.CmsFeedback; -import org.argeo.cms.ui.util.DefaultImageManager; import org.argeo.eclipse.ui.specific.UiContext; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.EntryPoint; @@ -111,7 +111,7 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL public Void run() { try { uxContext = new SimpleSwtUxContext(); - imageManager = new DefaultImageManager(); + imageManager = (CmsImageManager) new AcrSwtImageManager(); CmsSession cmsSession = getCmsSession(); if (cmsSession != null) { UiContext.setLocale(cmsSession.getLocale()); diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleApp.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleApp.java deleted file mode 100644 index 38a9b4449..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleApp.java +++ /dev/null @@ -1,414 +0,0 @@ -package org.argeo.cms.web; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.security.Privilege; -import javax.jcr.version.VersionManager; - -import org.argeo.api.cms.CmsConstants; -import org.argeo.api.cms.CmsLog; -import org.argeo.cms.jcr.CmsJcrUtils; -import org.argeo.cms.swt.CmsException; -import org.argeo.cms.ui.CmsUiConstants; -import org.argeo.cms.ui.CmsUiProvider; -import org.argeo.cms.ui.LifeCycleUiProvider; -import org.argeo.cms.ui.util.CmsUiUtils; -import org.argeo.cms.ui.util.StyleSheetResourceLoader; -import org.argeo.jcr.JcrUtils; -import org.eclipse.rap.rwt.RWT; -import org.eclipse.rap.rwt.application.Application; -import org.eclipse.rap.rwt.application.Application.OperationMode; -import org.eclipse.rap.rwt.application.ApplicationConfiguration; -import org.eclipse.rap.rwt.application.EntryPoint; -import org.eclipse.rap.rwt.application.EntryPointFactory; -import org.eclipse.rap.rwt.application.ExceptionHandler; -import org.eclipse.rap.rwt.client.WebClient; -import org.eclipse.rap.rwt.client.service.JavaScriptExecutor; -import org.eclipse.rap.rwt.service.ResourceLoader; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; - -/** A basic generic app based on {@link SimpleErgonomics}. */ -@Deprecated -public class SimpleApp implements CmsUiConstants, ApplicationConfiguration { - private final static CmsLog log = CmsLog.getLog(SimpleApp.class); - - private String contextName = null; - - private Map> branding = new HashMap>(); - private Map> styleSheets = new HashMap>(); - - private List resources = new ArrayList(); - - private BundleContext bundleContext; - - private Repository repository; - private String workspace = null; - private String jcrBasePath = "/"; - private List roPrincipals = Arrays.asList(CmsConstants.ROLE_ANONYMOUS, CmsConstants.ROLE_USER); - private List rwPrincipals = Arrays.asList(CmsConstants.ROLE_USER); - - private CmsUiProvider header; - private Map pages = new LinkedHashMap(); - - private Integer headerHeight = 40; - - private ServiceRegistration appReg; - - public void configure(Application application) { - try { - BundleResourceLoader bundleRL = new BundleResourceLoader(bundleContext.getBundle()); - - application.setOperationMode(OperationMode.SWT_COMPATIBILITY); - // application.setOperationMode(OperationMode.JEE_COMPATIBILITY); - - application.setExceptionHandler(new CmsExceptionHandler()); - - // loading animated gif - application.addResource(LOADING_IMAGE, createResourceLoader(LOADING_IMAGE)); - // empty image - application.addResource(NO_IMAGE, createResourceLoader(NO_IMAGE)); - - for (String resource : resources) { - application.addResource(resource, bundleRL); - if (log.isTraceEnabled()) - log.trace("Resource " + resource); - } - - Map defaultBranding = null; - if (branding.containsKey("*")) - defaultBranding = branding.get("*"); - // String defaultTheme = defaultBranding.get(WebClient.THEME_ID); - - // entry points - for (String page : pages.keySet()) { - Map properties = defaultBranding != null ? new HashMap(defaultBranding) - : new HashMap(); - if (branding.containsKey(page)) { - properties.putAll(branding.get(page)); - } - // favicon - if (properties.containsKey(WebClient.FAVICON)) { - String themeId = defaultBranding.get(WebClient.THEME_ID); - Bundle themeBundle = findThemeBundle(bundleContext, themeId); - String faviconRelPath = properties.get(WebClient.FAVICON); - application.addResource(faviconRelPath, - new BundleResourceLoader(themeBundle != null ? themeBundle : bundleContext.getBundle())); - if (log.isTraceEnabled()) - log.trace("Favicon " + faviconRelPath); - - } - - // page title - if (!properties.containsKey(WebClient.PAGE_TITLE)) { - if (page.length() > 0) - properties.put(WebClient.PAGE_TITLE, Character.toUpperCase(page.charAt(0)) + page.substring(1)); - } - - // default body HTML - if (!properties.containsKey(WebClient.BODY_HTML)) - properties.put(WebClient.BODY_HTML, DEFAULT_LOADING_BODY); - - // - // ADD ENTRY POINT - // - application.addEntryPoint("/" + page, - new CmsEntryPointFactory(pages.get(page), repository, workspace, properties), properties); - log.info("Page /" + page); - } - - // stylesheets and themes - Set themeBundles = new HashSet<>(); - for (String themeId : styleSheets.keySet()) { - Bundle themeBundle = findThemeBundle(bundleContext, themeId); - StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader( - themeBundle != null ? themeBundle : bundleContext.getBundle()); - if (themeBundle != null) - themeBundles.add(themeBundle); - List cssLst = styleSheets.get(themeId); - if (log.isDebugEnabled()) - log.debug("Theme " + themeId); - for (String css : cssLst) { - application.addStyleSheet(themeId, css, styleSheetRL); - if (log.isDebugEnabled()) - log.debug(" CSS " + css); - } - - } - for (Bundle themeBundle : themeBundles) { - BundleResourceLoader themeBRL = new BundleResourceLoader(themeBundle); - SimpleApp.addThemeResources(application, themeBundle, themeBRL, "*.png"); - SimpleApp.addThemeResources(application, themeBundle, themeBRL, "*.gif"); - SimpleApp.addThemeResources(application, themeBundle, themeBRL, "*.jpg"); - } - } catch (RuntimeException e) { - // Easier access to initialisation errors - log.error("Unexpected exception when configuring RWT application.", e); - throw e; - } - } - - public void init() throws RepositoryException { - Session session = null; - try { - session = CmsJcrUtils.openDataAdminSession(repository, workspace); - // session = JcrUtils.loginOrCreateWorkspace(repository, workspace); - VersionManager vm = session.getWorkspace().getVersionManager(); - JcrUtils.mkdirs(session, jcrBasePath); - session.save(); - if (!vm.isCheckedOut(jcrBasePath)) - vm.checkout(jcrBasePath); - for (String principal : rwPrincipals) - JcrUtils.addPrivilege(session, jcrBasePath, principal, Privilege.JCR_WRITE); - for (String principal : roPrincipals) - JcrUtils.addPrivilege(session, jcrBasePath, principal, Privilege.JCR_READ); - - for (String pageName : pages.keySet()) { - try { - initPage(session, pages.get(pageName)); - session.save(); - } catch (Exception e) { - throw new CmsException("Cannot initialize page " + pageName, e); - } - } - - } finally { - JcrUtils.logoutQuietly(session); - } - - // publish to OSGi - register(); - } - - protected void initPage(Session adminSession, CmsUiProvider page) throws RepositoryException { - if (page instanceof LifeCycleUiProvider) - ((LifeCycleUiProvider) page).init(adminSession); - } - - public void destroy() { - for (String pageName : pages.keySet()) { - try { - CmsUiProvider page = pages.get(pageName); - if (page instanceof LifeCycleUiProvider) - ((LifeCycleUiProvider) page).destroy(); - } catch (Exception e) { - log.error("Cannot destroy page " + pageName, e); - } - } - } - - protected void register() { - Hashtable props = new Hashtable(); - if (contextName != null) - props.put("contextName", contextName); - appReg = bundleContext.registerService(ApplicationConfiguration.class, this, props); - if (log.isDebugEnabled()) - log.debug("Registered " + (contextName == null ? "/" : contextName)); - } - - protected void unregister() { - appReg.unregister(); - if (log.isDebugEnabled()) - log.debug("Unregistered " + (contextName == null ? "/" : contextName)); - } - - public void setRepository(Repository repository) { - this.repository = repository; - } - - public void setWorkspace(String workspace) { - this.workspace = workspace; - } - - public void setHeader(CmsUiProvider header) { - this.header = header; - } - - public void setPages(Map pages) { - this.pages = pages; - } - - public void setJcrBasePath(String basePath) { - this.jcrBasePath = basePath; - } - - public void setRoPrincipals(List roPrincipals) { - this.roPrincipals = roPrincipals; - } - - public void setRwPrincipals(List rwPrincipals) { - this.rwPrincipals = rwPrincipals; - } - - public void setHeaderHeight(Integer headerHeight) { - this.headerHeight = headerHeight; - } - - public void setBranding(Map> branding) { - this.branding = branding; - } - - public void setStyleSheets(Map> styleSheets) { - this.styleSheets = styleSheets; - } - - public void setBundleContext(BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - public void setResources(List resources) { - this.resources = resources; - } - - public void setContextName(String contextName) { - this.contextName = contextName; - } - - private static void addThemeResources(Application application, Bundle themeBundle, BundleResourceLoader themeBRL, - String pattern) { - Enumeration themeResources = themeBundle.findEntries("/", pattern, true); - if (themeResources == null) - return; - while (themeResources.hasMoreElements()) { - String resource = themeResources.nextElement().getPath(); - // remove first '/' so that RWT registers it - resource = resource.substring(1); - if (!resource.endsWith("/")) { - application.addResource(resource, themeBRL); - if (log.isTraceEnabled()) - log.trace("Registered " + resource + " from theme " + themeBundle); - } - - } - - } - - private static Bundle findThemeBundle(BundleContext bundleContext, String themeId) { - if (themeId == null) - return null; - // TODO optimize - // TODO deal with multiple versions - Bundle themeBundle = null; - if (themeId != null) { - for (Bundle bundle : bundleContext.getBundles()) - if (themeId.equals(bundle.getSymbolicName())) { - themeBundle = bundle; - break; - } - } - return themeBundle; - } - - class CmsExceptionHandler implements ExceptionHandler { - - @Override - public void handleException(Throwable throwable) { - // TODO be smarter - CmsUiUtils.getCmsView().exception(throwable); - } - - } - - private class CmsEntryPointFactory implements EntryPointFactory { - private final CmsUiProvider page; - private final Repository repository; - private final String workspace; - private final Map properties; - - public CmsEntryPointFactory(CmsUiProvider page, Repository repository, String workspace, - Map properties) { - this.page = page; - this.repository = repository; - this.workspace = workspace; - this.properties = properties; - } - - @Override - public EntryPoint create() { - SimpleErgonomics entryPoint = new SimpleErgonomics(repository, workspace, jcrBasePath, page, properties) { - private static final long serialVersionUID = -637940404865527290L; - - @Override - protected void createAdminArea(Composite parent) { - Composite adminArea = new Composite(parent, SWT.NONE); - adminArea.setLayout(new FillLayout()); - Button refresh = new Button(adminArea, SWT.PUSH); - refresh.setText("Reload App"); - refresh.addSelectionListener(new SelectionAdapter() { - private static final long serialVersionUID = -7671999525536351366L; - - @Override - public void widgetSelected(SelectionEvent e) { - long timeBeforeReload = 1000; - RWT.getClient().getService(JavaScriptExecutor.class).execute( - "setTimeout(function() { " + "location.reload();" + "}," + timeBeforeReload + ");"); - reloadApp(); - } - }); - } - }; - // entryPoint.setState(""); - entryPoint.setHeader(header); - entryPoint.setHeaderHeight(headerHeight); - // CmsSession.current.set(entryPoint); - return entryPoint; - } - - private void reloadApp() { - new Thread("Refresh app") { - @Override - public void run() { - unregister(); - register(); - } - }.start(); - } - } - - private static ResourceLoader createResourceLoader(final String resourceName) { - return new ResourceLoader() { - public InputStream getResourceAsStream(String resourceName) throws IOException { - return getClass().getClassLoader().getResourceAsStream(resourceName); - } - }; - } - - // private static ResourceLoader createUrlResourceLoader(final URL url) { - // return new ResourceLoader() { - // public InputStream getResourceAsStream(String resourceName) - // throws IOException { - // return url.openStream(); - // } - // }; - // } - - /* - * TEXTS - */ - private static String DEFAULT_LOADING_BODY = "" - + "" + ""; -} diff --git a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleErgonomics.java b/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleErgonomics.java deleted file mode 100644 index 783f6eb73..000000000 --- a/swt/rap/org.argeo.cms.swt.rap/src/org/argeo/cms/web/SimpleErgonomics.java +++ /dev/null @@ -1,238 +0,0 @@ -package org.argeo.cms.web; - -import java.util.Map; -import java.util.UUID; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; - -import org.argeo.api.cms.CmsLog; -import org.argeo.api.cms.ux.CmsImageManager; -import org.argeo.api.cms.ux.UxContext; -import org.argeo.cms.swt.CmsException; -import org.argeo.cms.swt.CmsStyles; -import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.swt.SimpleSwtUxContext; -import org.argeo.cms.ui.CmsUiProvider; -import org.argeo.cms.ui.util.DefaultImageManager; -import org.argeo.cms.ui.util.SystemNotifications; -import org.eclipse.rap.rwt.RWT; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -/** Simple header/body ergonomics. */ -@Deprecated -public class SimpleErgonomics extends AbstractCmsEntryPoint { - private static final long serialVersionUID = 8743413921359548523L; - - private final static CmsLog log = CmsLog.getLog(SimpleErgonomics.class); - - private boolean uiInitialized = false; - private Composite headerArea; - private Composite leftArea; - private Composite rightArea; - private Composite footerArea; - private Composite bodyArea; - private final CmsUiProvider uiProvider; - - private CmsUiProvider header; - private Integer headerHeight = 0; - private Integer footerHeight = 0; - private CmsUiProvider lead; - private CmsUiProvider end; - private CmsUiProvider footer; - - private CmsImageManager imageManager = new DefaultImageManager(); - private UxContext uxContext = null; - private String uid; - - public SimpleErgonomics(Repository repository, String workspace, String defaultPath, CmsUiProvider uiProvider, - Map factoryProperties) { - super(repository, workspace, defaultPath, factoryProperties); - this.uiProvider = uiProvider; - } - - @Override - protected void initUi(Composite parent) { - uid = UUID.randomUUID().toString(); - parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - parent.setLayout(CmsSwtUtils.noSpaceGridLayout(new GridLayout(3, false))); - - uxContext = new SimpleSwtUxContext(); - if (!getUxContext().isMasterData()) - createAdminArea(parent); - headerArea = new Composite(parent, SWT.NONE); - headerArea.setLayout(new FillLayout()); - GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1); - headerData.heightHint = headerHeight; - headerArea.setLayoutData(headerData); - - // TODO: bi-directional - leftArea = new Composite(parent, SWT.NONE); - leftArea.setLayoutData(new GridData(SWT.LEAD, SWT.TOP, false, false)); - leftArea.setLayout(CmsSwtUtils.noSpaceGridLayout()); - - bodyArea = new Composite(parent, SWT.NONE); - bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY); - bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - bodyArea.setLayout(CmsSwtUtils.noSpaceGridLayout()); - - // TODO: bi-directional - rightArea = new Composite(parent, SWT.NONE); - rightArea.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false)); - rightArea.setLayout(CmsSwtUtils.noSpaceGridLayout()); - - footerArea = new Composite(parent, SWT.NONE); - // footerArea.setLayout(new FillLayout()); - GridData footerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1); - footerData.heightHint = footerHeight; - footerArea.setLayoutData(footerData); - - uiInitialized = true; - refresh(); - } - - @Override - protected void refresh() { - if (!uiInitialized) - return; - if (getState() == null) - setState(""); - refreshSides(); - refreshBody(); - if (log.isTraceEnabled()) - log.trace("UI refreshed " + getNode()); - } - - protected void createAdminArea(Composite parent) { - } - - @Deprecated - protected void refreshHeader() { - if (header == null) - return; - - for (Control child : headerArea.getChildren()) - child.dispose(); - try { - header.createUi(headerArea, getNode()); - } catch (RepositoryException e) { - throw new CmsException("Cannot refresh header", e); - } - headerArea.layout(true, true); - } - - protected void refreshSides() { - refresh(headerArea, header, CmsStyles.CMS_HEADER); - refresh(leftArea, lead, CmsStyles.CMS_LEAD); - refresh(rightArea, end, CmsStyles.CMS_END); - refresh(footerArea, footer, CmsStyles.CMS_FOOTER); - } - - private void refresh(Composite area, CmsUiProvider uiProvider, String style) { - if (uiProvider == null) - return; - - for (Control child : area.getChildren()) - child.dispose(); - CmsSwtUtils.style(area, style); - try { - uiProvider.createUi(area, getNode()); - } catch (RepositoryException e) { - throw new CmsException("Cannot refresh header", e); - } - area.layout(true, true); - } - - protected void refreshBody() { - // Exception - Throwable exception = getException(); - if (exception != null) { - SystemNotifications systemNotifications = new SystemNotifications(bodyArea); - systemNotifications.notifyException(exception); - resetException(); - return; - // TODO report - } - - // clear - for (Control child : bodyArea.getChildren()) - child.dispose(); - bodyArea.setLayout(CmsSwtUtils.noSpaceGridLayout()); - - try { - Node node = getNode(); -// if (node == null) -// log.error("Context cannot be null"); -// else - uiProvider.createUi(bodyArea, node); - } catch (RepositoryException e) { - throw new CmsException("Cannot refresh body", e); - } - - bodyArea.layout(true, true); - } - - @Override - public UxContext getUxContext() { - return uxContext; - } - @Override - public String getUid() { - return uid; - } - - public CmsImageManager getImageManager() { - return imageManager; - } - - public void setHeader(CmsUiProvider header) { - this.header = header; - } - - public void setHeaderHeight(Integer headerHeight) { - this.headerHeight = headerHeight; - } - - public void setImageManager(CmsImageManager imageManager) { - this.imageManager = imageManager; - } - - public CmsUiProvider getLead() { - return lead; - } - - public void setLead(CmsUiProvider lead) { - this.lead = lead; - } - - public CmsUiProvider getEnd() { - return end; - } - - public void setEnd(CmsUiProvider end) { - this.end = end; - } - - public CmsUiProvider getFooter() { - return footer; - } - - public void setFooter(CmsUiProvider footer) { - this.footer = footer; - } - - public CmsUiProvider getHeader() { - return header; - } - - public void setFooterHeight(Integer footerHeight) { - this.footerHeight = footerHeight; - } - -} -- 2.30.2