From 810aecacb19916bade7e4bcfcbbb54c301f672df Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 19 Mar 2019 11:15:32 +0100 Subject: [PATCH] Adapt to Java 11 --- demo/log4j.properties | 4 +- dep/org.argeo.dep.cms.client/pom.xml | 2 + dep/org.argeo.dep.cms.e4.rap/pom.xml | 51 +++--------- dep/org.argeo.dep.cms.node/pom.xml | 62 ++------------ dep/org.argeo.dep.cms.platform/pom.xml | 50 ++++++++++++ .../OSGI-INF/cms-admin-rap.xml | 2 +- org.argeo.cms.e4.rap/bnd.bnd | 5 +- .../org/argeo/cms/e4/rap/CmsE4AdminApp.java | 2 +- org.argeo.cms.e4/bnd.bnd | 2 +- .../ui/workbench/rap/RapWorkbenchLogin.java | 8 +- .../workbench/rap/SpnegoWorkbenchLogin.java | 8 +- org.argeo.cms.ui.workbench/bnd.bnd | 2 +- .../cms/spring/AbstractSystemExecution.java | 0 ...catedApplicationContextInitialization.java | 0 .../cms/spring/SimpleRoleRegistration.java | 0 .../cms/spring/osgi/OsgiModuleLabel.java | 0 .../cms/ui/internal/ImageManagerImpl.java | 51 +++++------- .../org/argeo/cms/widgets/auth/CmsLogin.java | 9 ++- .../argeo/cms/widgets/auth/LocaleChoice.java | 2 +- org.argeo.cms/bnd.bnd | 4 - org.argeo.cms/pom.xml | 5 ++ org.argeo.cms/src/org/argeo/cms/CmsMsg.java | 2 - .../src/org/argeo/cms/LocaleUtils.java | 70 ++++++++++++++++ .../src/org/argeo/cms/Localized.java | 27 +++++++ .../src/org/argeo/cms/i18n/LocaleUtils.java | 44 ++++------ .../src/org/argeo/cms/i18n/Localized.java | 31 ++----- .../cms/internal/jcr/RepositoryBuilder.java | 4 +- .../argeo/cms/internal/kernel/Activator.java | 3 +- .../cms/internal/kernel/CmsDeployment.java | 4 +- .../cms/internal/kernel/CmsInstance.java | 4 +- .../cms/internal/kernel/CmsShutdown.java | 3 - .../argeo/cms/internal/kernel/CmsState.java | 81 +++++++++---------- .../cms/internal/kernel/HomeRepository.java | 4 + .../cms/internal/kernel/KernelThread.java | 2 + .../argeo/cms/internal/kernel/NodeHttp.java | 8 +- .../kernel/NodeRepositoryFactory.java | 6 -- .../cms/internal/kernel/NodeUserAdmin.java | 13 ++- .../cms/internal/kernel/SecurityProfile.java | 43 +++++----- .../argeo/cms/security/ChecksumFactory.java | 41 ++++------ org.argeo.ext.jackrabbit/bnd.bnd | 3 +- .../src/org/argeo/jcr/fs/BinaryChannel.java | 48 +---------- .../argeo/jcr/fs/JcrFileSystemProvider.java | 2 +- rcp/org.argeo.eclipse.ui.rcp/bnd.bnd | 2 - 43 files changed, 336 insertions(+), 378 deletions(-) rename {org.argeo.cms => org.argeo.cms.ui.workbench}/src/org/argeo/cms/spring/AbstractSystemExecution.java (100%) rename {org.argeo.cms => org.argeo.cms.ui.workbench}/src/org/argeo/cms/spring/AuthenticatedApplicationContextInitialization.java (100%) rename {org.argeo.cms => org.argeo.cms.ui.workbench}/src/org/argeo/cms/spring/SimpleRoleRegistration.java (100%) rename {org.argeo.cms => org.argeo.cms.ui.workbench}/src/org/argeo/cms/spring/osgi/OsgiModuleLabel.java (100%) create mode 100644 org.argeo.cms/src/org/argeo/cms/LocaleUtils.java create mode 100644 org.argeo.cms/src/org/argeo/cms/Localized.java diff --git a/demo/log4j.properties b/demo/log4j.properties index 05932ba6c..bf3f291a5 100644 --- a/demo/log4j.properties +++ b/demo/log4j.properties @@ -1,13 +1,11 @@ log4j.rootLogger=WARN, development log4j.logger.org.argeo=DEBUG -log4j.logger.org.argeo.cms.internal=TRACE -log4j.logger.org.argeo.cms.viewers=TRACE ## Appenders log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n +log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m %n log4j.appender.development=org.apache.log4j.ConsoleAppender log4j.appender.development.layout=org.apache.log4j.PatternLayout diff --git a/dep/org.argeo.dep.cms.client/pom.xml b/dep/org.argeo.dep.cms.client/pom.xml index 1df3b1d0b..5ac0d6f3e 100644 --- a/dep/org.argeo.dep.cms.client/pom.xml +++ b/dep/org.argeo.dep.cms.client/pom.xml @@ -62,6 +62,7 @@ org.argeo.tp.misc org.slf4j.commons.logging + org.argeo.tp.bouncycastle bcprov @@ -74,6 +75,7 @@ org.argeo.tp.bouncycastle bcpg + org.argeo.tp.apache org.apache.httpcomponents.httpcore diff --git a/dep/org.argeo.dep.cms.e4.rap/pom.xml b/dep/org.argeo.dep.cms.e4.rap/pom.xml index 7f2ffcd17..19748d7af 100644 --- a/dep/org.argeo.dep.cms.e4.rap/pom.xml +++ b/dep/org.argeo.dep.cms.e4.rap/pom.xml @@ -76,14 +76,14 @@ - - org.argeo.tp.bouncycastle - bcmail - - - org.argeo.tp.bouncycastle - bcpg - + + + + + + + + org.argeo.tp.apache.ant org.apache.ant @@ -100,10 +100,10 @@ - - org.argeo.tp.javax - javax.mail - + + + + @@ -119,33 +119,6 @@ org.eclipse.rap.nebula.jface.gridviewer - - - - org.argeo.tp.spring - org.springframework.aspects - - - org.argeo.tp.spring - org.springframework.context.support - - - org.argeo.tp.spring - org.springframework.jdbc - - - org.argeo.tp.spring - org.springframework.tx - - - org.argeo.tp.spring - org.springframework.web - - - org.argeo.tp.spring - org.springframework.web.servlet - - org.argeo.tp.rap.e4 diff --git a/dep/org.argeo.dep.cms.node/pom.xml b/dep/org.argeo.dep.cms.node/pom.xml index 8e70bb829..e956db9e0 100644 --- a/dep/org.argeo.dep.cms.node/pom.xml +++ b/dep/org.argeo.dep.cms.node/pom.xml @@ -1,5 +1,7 @@ - + 4.0.0 org.argeo.commons @@ -38,10 +40,10 @@ - - org.argeo.tp.misc - bitronix.tm - + + + + @@ -113,56 +115,6 @@ - - - org.argeo.tp.spring - org.springframework.beans - - - org.argeo.tp.spring - org.springframework.core - - - org.argeo.tp.javax - javax.el - - - org.argeo.tp.gemini - org.eclipse.gemini.blueprint.core - - - org.argeo.tp.gemini - org.eclipse.gemini.blueprint.extender - - - org.argeo.tp.gemini - org.eclipse.gemini.blueprint.io - - - org.argeo.tp.misc - org.aspectj.weaver - - - org.argeo.tp.misc - org.aopalliance - - - org.argeo.tp.spring - org.springframework.aop - - - org.argeo.tp.spring - org.springframework.context - - - org.argeo.tp.spring - org.springframework.expression - - - org.argeo.tp.spring - org.springframework.instrument - - org.argeo.tp.equinox diff --git a/dep/org.argeo.dep.cms.platform/pom.xml b/dep/org.argeo.dep.cms.platform/pom.xml index 093905bef..3664967a5 100644 --- a/dep/org.argeo.dep.cms.platform/pom.xml +++ b/dep/org.argeo.dep.cms.platform/pom.xml @@ -114,6 +114,56 @@ javax.mail + + + org.argeo.tp.spring + org.springframework.beans + + + org.argeo.tp.spring + org.springframework.core + + + org.argeo.tp.javax + javax.el + + + org.argeo.tp.gemini + org.eclipse.gemini.blueprint.core + + + org.argeo.tp.gemini + org.eclipse.gemini.blueprint.extender + + + org.argeo.tp.gemini + org.eclipse.gemini.blueprint.io + + + org.argeo.tp.misc + org.aspectj.weaver + + + org.argeo.tp.misc + org.aopalliance + + + org.argeo.tp.spring + org.springframework.aop + + + org.argeo.tp.spring + org.springframework.context + + + org.argeo.tp.spring + org.springframework.expression + + + org.argeo.tp.spring + org.springframework.instrument + + org.argeo.tp.spring diff --git a/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml b/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml index 26b454a7e..1f688baa6 100644 --- a/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml +++ b/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml @@ -3,6 +3,6 @@ - + diff --git a/org.argeo.cms.e4.rap/bnd.bnd b/org.argeo.cms.e4.rap/bnd.bnd index d06e1052b..da09b3f8b 100644 --- a/org.argeo.cms.e4.rap/bnd.bnd +++ b/org.argeo.cms.e4.rap/bnd.bnd @@ -1,14 +1,13 @@ Bundle-ActivationPolicy: lazy -#Service-Component: OSGI-INF/cms-admin-rap.xml,\ +Service-Component: OSGI-INF/cms-admin-rap.xml #OSGI-INF/cms-demo-rap.xml -Bundle-Activator: org.argeo.cms.script.ScriptAppActivator +#Bundle-Activator: org.argeo.cms.script.ScriptAppActivator Import-Package: org.argeo.node,\ org.eclipse.swt,\ org.eclipse.swt.graphics,\ org.eclipse.e4.ui.workbench,\ org.eclipse.rap.rwt.client,\ -org.argeo.cms.script,\ org.eclipse.nebula.widgets.richtext;resolution:=optional,\ * diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java index 4921680d7..0650274c5 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java @@ -2,7 +2,7 @@ package org.argeo.cms.e4.rap; public class CmsE4AdminApp extends AbstractRapE4App { public CmsE4AdminApp() { - setPageTitle("CMS Admin"); + setPageTitle("Argeo CMS DevOps"); setE4Xmi("org.argeo.cms.e4/e4xmi/cms-devops.e4xmi"); setPath("/devops"); } diff --git a/org.argeo.cms.e4/bnd.bnd b/org.argeo.cms.e4/bnd.bnd index 78392903c..4673ba134 100644 --- a/org.argeo.cms.e4/bnd.bnd +++ b/org.argeo.cms.e4/bnd.bnd @@ -8,9 +8,9 @@ org.eclipse.swt.widgets;version="0.0.0",\ org.eclipse.e4.ui.model.application.ui,\ org.eclipse.e4.ui.model.application,\ javax.jcr.nodetype,\ +org.argeo.cms,\ org.argeo.jcr.docbook,\ org.eclipse.core.commands.common,\ org.eclipse.jface.window,\ org.argeo.cms.widgets.auth,\ -org.argeo.cms.i18n,\ * diff --git a/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/RapWorkbenchLogin.java b/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/RapWorkbenchLogin.java index 73aac8282..353f3e929 100644 --- a/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/RapWorkbenchLogin.java +++ b/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/RapWorkbenchLogin.java @@ -76,10 +76,10 @@ public class RapWorkbenchLogin extends LoginEntryPoint { @Override protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale, SelectionListener loginSelectionListener) { - Button loginButton = new Button(credentialsBlock, SWT.PUSH); - loginButton.setText(CmsMsg.login.lead(selectedLocale)); - loginButton.setLayoutData(CmsUtils.fillWidth()); - loginButton.addSelectionListener(loginSelectionListener); +// Button loginButton = new Button(credentialsBlock, SWT.PUSH); +// loginButton.setText(CmsMsg.login.lead(selectedLocale)); +// loginButton.setLayoutData(CmsUtils.fillWidth()); +// loginButton.addSelectionListener(loginSelectionListener); } @Override diff --git a/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java b/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java index 2f4ef095b..412fecfc6 100644 --- a/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java +++ b/org.argeo.cms.ui.workbench.rap/src/org/argeo/cms/ui/workbench/rap/SpnegoWorkbenchLogin.java @@ -85,10 +85,10 @@ public class SpnegoWorkbenchLogin extends LoginEntryPoint { @Override protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale, SelectionListener loginSelectionListener) { - Button loginButton = new Button(credentialsBlock, SWT.PUSH); - loginButton.setText(CmsMsg.login.lead(selectedLocale)); - loginButton.setLayoutData(CmsUtils.fillWidth()); - loginButton.addSelectionListener(loginSelectionListener); +// Button loginButton = new Button(credentialsBlock, SWT.PUSH); +// loginButton.setText(CmsMsg.login.lead(selectedLocale)); +// loginButton.setLayoutData(CmsUtils.fillWidth()); +// loginButton.addSelectionListener(loginSelectionListener); } @Override diff --git a/org.argeo.cms.ui.workbench/bnd.bnd b/org.argeo.cms.ui.workbench/bnd.bnd index 83095b767..da2875c31 100644 --- a/org.argeo.cms.ui.workbench/bnd.bnd +++ b/org.argeo.cms.ui.workbench/bnd.bnd @@ -6,8 +6,8 @@ Require-Bundle: org.eclipse.core.runtime,\ org.eclipse.core.commands Import-Package: org.argeo.cms.auth,\ +org.argeo.cms,\ org.argeo.cms.ui,\ -org.argeo.cms.i18n,\ org.argeo.eclipse.spring,\ org.argeo.eclipse.ui.utils,\ org.eclipse.core.runtime.jobs,\ diff --git a/org.argeo.cms/src/org/argeo/cms/spring/AbstractSystemExecution.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/AbstractSystemExecution.java similarity index 100% rename from org.argeo.cms/src/org/argeo/cms/spring/AbstractSystemExecution.java rename to org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/AbstractSystemExecution.java diff --git a/org.argeo.cms/src/org/argeo/cms/spring/AuthenticatedApplicationContextInitialization.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/AuthenticatedApplicationContextInitialization.java similarity index 100% rename from org.argeo.cms/src/org/argeo/cms/spring/AuthenticatedApplicationContextInitialization.java rename to org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/AuthenticatedApplicationContextInitialization.java diff --git a/org.argeo.cms/src/org/argeo/cms/spring/SimpleRoleRegistration.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/SimpleRoleRegistration.java similarity index 100% rename from org.argeo.cms/src/org/argeo/cms/spring/SimpleRoleRegistration.java rename to org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/SimpleRoleRegistration.java diff --git a/org.argeo.cms/src/org/argeo/cms/spring/osgi/OsgiModuleLabel.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/osgi/OsgiModuleLabel.java similarity index 100% rename from org.argeo.cms/src/org/argeo/cms/spring/osgi/OsgiModuleLabel.java rename to org.argeo.cms.ui.workbench/src/org/argeo/cms/spring/osgi/OsgiModuleLabel.java diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/ImageManagerImpl.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/ImageManagerImpl.java index 855446284..5d786dfda 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/ImageManagerImpl.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/ImageManagerImpl.java @@ -10,8 +10,9 @@ import static org.argeo.cms.ui.CmsConstants.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.activation.MimetypesFileTypeMap; import javax.jcr.Binary; import javax.jcr.Node; import javax.jcr.Property; @@ -39,10 +40,9 @@ import org.eclipse.swt.widgets.Label; /** Manages only public images so far. */ public class ImageManagerImpl implements CmsImageManager, CmsNames { private final static Log log = LogFactory.getLog(ImageManagerImpl.class); - private MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap(); +// private MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap(); - public Boolean load(Node node, Control control, Point preferredSize) - throws RepositoryException { + public Boolean load(Node node, Control control, Point preferredSize) throws RepositoryException { Point imageSize = getImageSize(node); Point size; String imgTag = null; @@ -53,8 +53,7 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { size = imageSize; } else { // no image if not completely known - size = resizeTo(NO_IMAGE_SIZE, - preferredSize != null ? preferredSize : imageSize); + size = resizeTo(NO_IMAGE_SIZE, preferredSize != null ? preferredSize : imageSize); imgTag = CmsUtils.noImg(size); } @@ -105,18 +104,15 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { } else if (constraints.x == 0 && constraints.y == 0) { return orig; } else if (constraints.y == 0) {// force width - return new Point(constraints.x, - scale(orig.y, orig.x, constraints.x)); + return new Point(constraints.x, scale(orig.y, orig.x, constraints.x)); } else if (constraints.x == 0) {// force height - return new Point(scale(orig.x, orig.y, constraints.y), - constraints.y); + return new Point(scale(orig.x, orig.y, constraints.y), constraints.y); } throw new CmsException("Cannot resize " + orig + " to " + constraints); } private int scale(int origDimension, int otherDimension, int otherConstraint) { - return Math.round(origDimension - * divide(otherConstraint, otherDimension)); + return Math.round(origDimension * divide(otherConstraint, otherDimension)); } private float divide(int a, int b) { @@ -124,10 +120,8 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { } public Point getImageSize(Node node) throws RepositoryException { - return new Point(node.hasProperty(CMS_IMAGE_WIDTH) ? (int) node - .getProperty(CMS_IMAGE_WIDTH).getLong() : 0, - node.hasProperty(CMS_IMAGE_WIDTH) ? (int) node.getProperty( - CMS_IMAGE_HEIGHT).getLong() : 0); + return new Point(node.hasProperty(CMS_IMAGE_WIDTH) ? (int) node.getProperty(CMS_IMAGE_WIDTH).getLong() : 0, + node.hasProperty(CMS_IMAGE_WIDTH) ? (int) node.getProperty(CMS_IMAGE_HEIGHT).getLong() : 0); } /** @return null if not available */ @@ -136,8 +130,7 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { return getImageTag(node, getImageSize(node)); } - private String getImageTag(Node node, Point size) - throws RepositoryException { + private String getImageTag(Node node, Point size) throws RepositoryException { StringBuilder buf = getImageTagBuilder(node, size); if (buf == null) return null; @@ -146,15 +139,12 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { /** @return null if not available */ @Override - public StringBuilder getImageTagBuilder(Node node, Point size) - throws RepositoryException { - return getImageTagBuilder(node, Integer.toString(size.x), - Integer.toString(size.y)); + public StringBuilder getImageTagBuilder(Node node, Point size) throws RepositoryException { + return getImageTagBuilder(node, Integer.toString(size.x), Integer.toString(size.y)); } /** @return null if not available */ - private StringBuilder getImageTagBuilder(Node node, String width, - String height) throws RepositoryException { + private StringBuilder getImageTagBuilder(Node node, String width, String height) throws RepositoryException { String url = getImageUrl(node); if (url == null) return null; @@ -218,8 +208,7 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { } @Override - public String uploadImage(Node parentNode, String fileName, InputStream in) - throws RepositoryException { + public String uploadImage(Node parentNode, String fileName, InputStream in) throws RepositoryException { InputStream inputStream = null; try { String previousResourceName = null; @@ -240,22 +229,20 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { ImageData id = new ImageData(inputStream); fileNode.setProperty(CMS_IMAGE_WIDTH, id.width); fileNode.setProperty(CMS_IMAGE_HEIGHT, id.height); - fileNode.setProperty(Property.JCR_MIMETYPE, - fileTypeMap.getContentType(fileName)); + String mime = Files.probeContentType(Paths.get(fileName)); + fileNode.setProperty(Property.JCR_MIMETYPE, mime); fileNode.getSession().save(); // reset resource manager ResourceManager resourceManager = RWT.getResourceManager(); - if (previousResourceName != null - && resourceManager.isRegistered(previousResourceName)) { + if (previousResourceName != null && resourceManager.isRegistered(previousResourceName)) { resourceManager.unregister(previousResourceName); if (log.isDebugEnabled()) log.debug("Unregistered image " + previousResourceName); } return getImageUrl(fileNode); } catch (IOException e) { - throw new CmsException("Cannot upload image " + fileName + " in " - + parentNode, e); + throw new CmsException("Cannot upload image " + fileName + " in " + parentNode, e); } finally { IOUtils.closeQuietly(inputStream); } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java b/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java index 7560ceb30..46b3d4f8b 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/CmsLogin.java @@ -20,8 +20,8 @@ import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsMsg; +import org.argeo.cms.LocaleUtils; import org.argeo.cms.auth.HttpRequestCallback; -import org.argeo.cms.i18n.LocaleUtils; import org.argeo.cms.ui.CmsStyles; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.internal.Activator; @@ -184,7 +184,12 @@ public class CmsLogin implements CmsStyles, CallbackHandler { passwordT.addTraverseListener(tl); parent.setTabList(new Control[] { credentialsBlock }); credentialsBlock.setTabList(new Control[] { usernameT, passwordT }); - // credentialsBlock.setFocus(); + + // Button + Button loginButton = new Button(credentialsBlock, SWT.PUSH); + loginButton.setText(CmsMsg.login.lead(locale)); + loginButton.setLayoutData(CmsUtils.fillWidth()); + loginButton.addSelectionListener(loginSelectionListener); extendsCredentialsBlock(credentialsBlock, locale, loginSelectionListener); if (localeChoice != null) diff --git a/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/LocaleChoice.java b/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/LocaleChoice.java index 009c3721a..b3ae47df5 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/LocaleChoice.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/widgets/auth/LocaleChoice.java @@ -22,7 +22,7 @@ import java.util.Locale; import javax.security.auth.callback.LanguageCallback; import org.argeo.cms.CmsException; -import org.argeo.cms.i18n.LocaleUtils; +import org.argeo.cms.LocaleUtils; /** Choose in a list of locales. TODO: replace with {@link LanguageCallback} */ public class LocaleChoice { diff --git a/org.argeo.cms/bnd.bnd b/org.argeo.cms/bnd.bnd index 3061a0e51..4a2da22b9 100644 --- a/org.argeo.cms/bnd.bnd +++ b/org.argeo.cms/bnd.bnd @@ -5,10 +5,6 @@ org.h2;resolution:=optional,\ org.postgresql;resolution:=optional,\ org.apache.jackrabbit.webdav.server,\ org.apache.jackrabbit.webdav.jcr,\ -org.springframework.context;resolution:=optional,\ -org.springframework.core.io;resolution:=optional,\ -org.springframework.*;resolution:=optional,\ -org.eclipse.gemini.blueprint.*;resolution:=optional\ org.apache.commons.httpclient.cookie;resolution:=optional,\ org.osgi.*;version=0.0.0,\ * diff --git a/org.argeo.cms/pom.xml b/org.argeo.cms/pom.xml index 327c58b61..6d92a75ae 100644 --- a/org.argeo.cms/pom.xml +++ b/org.argeo.cms/pom.xml @@ -26,6 +26,11 @@ org.argeo.enterprise 2.1.77-SNAPSHOT + + org.argeo.commons + org.argeo.core + 2.1.77-SNAPSHOT + org.argeo.commons org.argeo.eclipse.ui diff --git a/org.argeo.cms/src/org/argeo/cms/CmsMsg.java b/org.argeo.cms/src/org/argeo/cms/CmsMsg.java index 718bfa48d..a69b419c5 100644 --- a/org.argeo.cms/src/org/argeo/cms/CmsMsg.java +++ b/org.argeo.cms/src/org/argeo/cms/CmsMsg.java @@ -1,7 +1,5 @@ package org.argeo.cms; -import org.argeo.cms.i18n.Localized; - public enum CmsMsg implements Localized { username, password, login, logout, register, // password diff --git a/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java b/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java new file mode 100644 index 000000000..c6c932bf8 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java @@ -0,0 +1,70 @@ +package org.argeo.cms; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; + +import org.argeo.cms.auth.CurrentUser; + +/** Utilities simplifying the development of localization enums. */ +public class LocaleUtils { + public static Object local(Enum en) { + return local(en, getCurrentLocale(), "/OSGI-INF/l10n/bundle"); + } + + public static Object local(Enum en, Locale locale) { + return local(en, locale, "/OSGI-INF/l10n/bundle"); + } + + public static Object local(Enum en, Locale locale, String resource) { + return local(en, locale, resource, en.getClass().getClassLoader()); + } + + public static Object local(Enum en, Locale locale, String resource, ClassLoader classLoader) { + ResourceBundle rb = ResourceBundle.getBundle(resource, locale, classLoader); + return rb.getString(en.name()); + } + + public static String lead(String raw, Locale locale) { + return raw.substring(0, 1).toUpperCase(locale) + raw.substring(1); + } + + public static String lead(Localized localized) { + return lead(localized, getCurrentLocale()); + } + + public static String lead(Localized localized, Locale locale) { + return lead(localized.local(locale).toString(), locale); + } + + static Locale getCurrentLocale() { + return CurrentUser.locale(); + // return UiContext.getLocale(); + // FIXME look into Subject or settings + // return Locale.getDefault(); + } + + /** Returns null if argument is null. */ + public static List asLocaleList(Object locales) { + if (locales == null) + return null; + ArrayList availableLocales = new ArrayList(); + String[] codes = locales.toString().split(","); + for (int i = 0; i < codes.length; i++) { + String code = codes[i]; + // variant not supported + int indexUnd = code.indexOf("_"); + Locale locale; + if (indexUnd > 0) { + String language = code.substring(0, indexUnd); + String country = code.substring(indexUnd + 1); + locale = new Locale(language, country); + } else { + locale = new Locale(code); + } + availableLocales.add(locale); + } + return availableLocales; + } +} diff --git a/org.argeo.cms/src/org/argeo/cms/Localized.java b/org.argeo.cms/src/org/argeo/cms/Localized.java new file mode 100644 index 000000000..1c7c8e530 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/Localized.java @@ -0,0 +1,27 @@ +package org.argeo.cms; + +import java.text.MessageFormat; +import java.util.Locale; + +/** Localized object. */ +public interface Localized { + /** Default assumes that this is an {@link Enum} */ + default Object local(Locale locale) { + return LocaleUtils.local((Enum) this, locale); + } + + default String lead() { + return LocaleUtils.lead(this); + } + + default String format(Object[] args) { + Locale locale = LocaleUtils.getCurrentLocale(); + MessageFormat format = new MessageFormat(local(locale).toString(), locale); + return format.format(args); + } + + default String lead(Locale locale) { + return LocaleUtils.lead(local(locale).toString(), locale); + } + +} diff --git a/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java b/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java index e0a77bcf3..71a31413e 100644 --- a/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/i18n/LocaleUtils.java @@ -1,41 +1,43 @@ package org.argeo.cms.i18n; -import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.ResourceBundle; import org.argeo.cms.auth.CurrentUser; -/** Utilities simplifying the development of localization enums. */ +/** + * Utilities simplifying the development of localization enums. + * + * @deprecated Use {@link org.argeo.cms.LocaleUtils} + */ +@Deprecated public class LocaleUtils { public static Object local(Enum en) { - return local(en, getCurrentLocale(), "/OSGI-INF/l10n/bundle"); + return org.argeo.cms.LocaleUtils.local(en); } public static Object local(Enum en, Locale locale) { - return local(en, locale, "/OSGI-INF/l10n/bundle"); + return org.argeo.cms.LocaleUtils.local(en, locale); } public static Object local(Enum en, Locale locale, String resource) { - return local(en, locale, resource, en.getClass().getClassLoader()); + return org.argeo.cms.LocaleUtils.local(en, locale, resource); } public static Object local(Enum en, Locale locale, String resource, ClassLoader classLoader) { - ResourceBundle rb = ResourceBundle.getBundle(resource, locale, classLoader); - return rb.getString(en.name()); + return org.argeo.cms.LocaleUtils.local(en, locale, resource, classLoader); } public static String lead(String raw, Locale locale) { - return raw.substring(0, 1).toUpperCase(locale) + raw.substring(1); + return org.argeo.cms.LocaleUtils.lead(raw, locale); } public static String lead(Localized localized) { - return lead(localized, getCurrentLocale()); + return org.argeo.cms.LocaleUtils.lead(localized); } public static String lead(Localized localized, Locale locale) { - return lead(localized.local(locale).toString(), locale); + return org.argeo.cms.LocaleUtils.lead(localized, locale); } static Locale getCurrentLocale() { @@ -47,24 +49,6 @@ public class LocaleUtils { /** Returns null if argument is null. */ public static List asLocaleList(Object locales) { - if (locales == null) - return null; - ArrayList availableLocales = new ArrayList(); - String[] codes = locales.toString().split(","); - for (int i = 0; i < codes.length; i++) { - String code = codes[i]; - // variant not supported - int indexUnd = code.indexOf("_"); - Locale locale; - if (indexUnd > 0) { - String language = code.substring(0, indexUnd); - String country = code.substring(indexUnd + 1); - locale = new Locale(language, country); - } else { - locale = new Locale(code); - } - availableLocales.add(locale); - } - return availableLocales; + return org.argeo.cms.LocaleUtils.asLocaleList(locales); } } diff --git a/org.argeo.cms/src/org/argeo/cms/i18n/Localized.java b/org.argeo.cms/src/org/argeo/cms/i18n/Localized.java index 535b5f225..7d32193bf 100644 --- a/org.argeo.cms/src/org/argeo/cms/i18n/Localized.java +++ b/org.argeo.cms/src/org/argeo/cms/i18n/Localized.java @@ -1,27 +1,10 @@ package org.argeo.cms.i18n; -import java.text.MessageFormat; -import java.util.Locale; - -/** Localized object. */ -public interface Localized { - /** Default assumes that this is an {@link Enum} */ - default Object local(Locale locale) { - return LocaleUtils.local((Enum) this, locale); - } - - default String lead() { - return LocaleUtils.lead(this); - } - - default String format(Object[] args) { - Locale locale = LocaleUtils.getCurrentLocale(); - MessageFormat format = new MessageFormat(local(locale).toString(), locale); - return format.format(args); - } - - default String lead(Locale locale) { - return LocaleUtils.lead(local(locale).toString(), locale); - } - +/** + * Localized object. + * + * @deprecated Use {@link org.argeo.cms.Localized} instead. + */ +@Deprecated +public interface Localized extends org.argeo.cms.Localized { } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java b/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java index d5f3a20cd..86ce94bb4 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java @@ -200,8 +200,8 @@ public class RepositoryBuilder { RepositoryContext repositoryContext = RepositoryContext.create(repositoryConfig); double duration = ((double) (System.currentTimeMillis() - begin)) / 1000; - if (log.isTraceEnabled()) - log.trace( + if (log.isDebugEnabled()) + log.debug( "Created Jackrabbit repository in " + duration + " s, home: " + repositoryConfig.getHomeDir()); return repositoryContext; diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java index 5ef545e6f..07f3867ce 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java @@ -62,7 +62,8 @@ public class Activator implements BundleActivator { userAdminSt = new ServiceTracker<>(instance.bc, UserAdmin.class, null); userAdminSt.open(); - log.debug("Kernel bundle started"); + if (log.isTraceEnabled()) + log.trace("Kernel bundle started"); } catch (Throwable e) { log.error("## FATAL: CMS activator failed", e); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java index 3d8a389ef..0711be2e8 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java @@ -364,8 +364,8 @@ public class CmsDeployment implements NodeDeployment { properties.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); LocalRepository localRepository = new LocalRepository(repository, dataModelName); bc.registerService(Repository.class, localRepository, properties); - if (log.isDebugEnabled()) - log.debug("Published data model " + dataModelName); + if (log.isTraceEnabled()) + log.trace("Published data model " + dataModelName); } @Override diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsInstance.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsInstance.java index d040bdb1e..14979711b 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsInstance.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsInstance.java @@ -31,8 +31,8 @@ public class CmsInstance implements NodeInstance { Object cn = reference.getProperty(NodeConstants.CN); if (cn != null && cn.equals(NodeConstants.HOME)) { homeRepository = (HomeRepository) bc.getService(reference); - if (log.isDebugEnabled()) - log.debug("Home repository is available"); + if (log.isTraceEnabled()) + log.trace("Home repository is available"); } return super.addingService(reference); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java index a62ee7f10..43295ae3f 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java @@ -1,11 +1,8 @@ package org.argeo.cms.internal.kernel; -import java.io.IOException; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkEvent; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.launch.Framework; diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java index 789312625..2f3bdcefd 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java @@ -1,42 +1,31 @@ package org.argeo.cms.internal.kernel; -import static bitronix.tm.TransactionManagerServices.getTransactionManager; -import static bitronix.tm.TransactionManagerServices.getTransactionSynchronizationRegistry; import static java.util.Locale.ENGLISH; -import java.io.File; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.file.spi.FileSystemProvider; import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.UUID; import javax.jcr.RepositoryFactory; import javax.transaction.TransactionManager; -import javax.transaction.TransactionSynchronizationRegistry; import javax.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; -import org.argeo.cms.i18n.LocaleUtils; +import org.argeo.cms.LocaleUtils; import org.argeo.node.NodeConstants; import org.argeo.node.NodeState; import org.argeo.transaction.simple.SimpleTransactionManager; import org.argeo.util.LangUtils; -import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; import org.osgi.service.cm.ManagedServiceFactory; -import bitronix.tm.BitronixTransactionManager; -import bitronix.tm.BitronixTransactionSynchronizationRegistry; -import bitronix.tm.TransactionManagerServices; - public class CmsState implements NodeState { private final static Log log = LogFactory.getLog(CmsState.class); private final BundleContext bc = FrameworkUtil.getBundle(CmsState.class).getBundleContext(); @@ -93,7 +82,9 @@ public class CmsState implements NodeState { if (NodeConstants.TRANSACTION_MANAGER_SIMPLE.equals(tmType)) { initSimpleTransactionManager(); } else if (NodeConstants.TRANSACTION_MANAGER_BITRONIX.equals(tmType)) { - initBitronixTransactionManager(); +// initBitronixTransactionManager(); + throw new UnsupportedOperationException( + "Bitronix is not supported anymore, but could be again if there is enough interest."); } else { throw new CmsException("Usupported transaction manager type " + tmType); } @@ -150,38 +141,38 @@ public class CmsState implements NodeState { // TODO TransactionSynchronizationRegistry } - private void initBitronixTransactionManager() { - // TODO manage it in a managed service, as startup could be long - ServiceReference existingTm = bc.getServiceReference(TransactionManager.class); - if (existingTm != null) { - if (log.isDebugEnabled()) - log.debug("Using provided transaction manager " + existingTm); - return; - } - - if (!TransactionManagerServices.isTransactionManagerRunning()) { - bitronix.tm.Configuration tmConf = TransactionManagerServices.getConfiguration(); - tmConf.setServerId(UUID.randomUUID().toString()); - - Bundle bitronixBundle = FrameworkUtil.getBundle(bitronix.tm.Configuration.class); - File tmBaseDir = bitronixBundle.getDataFile(KernelConstants.DIR_TRANSACTIONS); - File tmDir1 = new File(tmBaseDir, "btm1"); - tmDir1.mkdirs(); - tmConf.setLogPart1Filename(new File(tmDir1, tmDir1.getName() + ".tlog").getAbsolutePath()); - File tmDir2 = new File(tmBaseDir, "btm2"); - tmDir2.mkdirs(); - tmConf.setLogPart2Filename(new File(tmDir2, tmDir2.getName() + ".tlog").getAbsolutePath()); - } - BitronixTransactionManager transactionManager = getTransactionManager(); - stopHooks.add(() -> transactionManager.shutdown()); - BitronixTransactionSynchronizationRegistry transactionSynchronizationRegistry = getTransactionSynchronizationRegistry(); - // register - bc.registerService(TransactionManager.class, transactionManager, null); - bc.registerService(UserTransaction.class, transactionManager, null); - bc.registerService(TransactionSynchronizationRegistry.class, transactionSynchronizationRegistry, null); - if (log.isDebugEnabled()) - log.debug("Initialised default Bitronix transaction manager"); - } +// private void initBitronixTransactionManager() { +// // TODO manage it in a managed service, as startup could be long +// ServiceReference existingTm = bc.getServiceReference(TransactionManager.class); +// if (existingTm != null) { +// if (log.isDebugEnabled()) +// log.debug("Using provided transaction manager " + existingTm); +// return; +// } +// +// if (!TransactionManagerServices.isTransactionManagerRunning()) { +// bitronix.tm.Configuration tmConf = TransactionManagerServices.getConfiguration(); +// tmConf.setServerId(UUID.randomUUID().toString()); +// +// Bundle bitronixBundle = FrameworkUtil.getBundle(bitronix.tm.Configuration.class); +// File tmBaseDir = bitronixBundle.getDataFile(KernelConstants.DIR_TRANSACTIONS); +// File tmDir1 = new File(tmBaseDir, "btm1"); +// tmDir1.mkdirs(); +// tmConf.setLogPart1Filename(new File(tmDir1, tmDir1.getName() + ".tlog").getAbsolutePath()); +// File tmDir2 = new File(tmBaseDir, "btm2"); +// tmDir2.mkdirs(); +// tmConf.setLogPart2Filename(new File(tmDir2, tmDir2.getName() + ".tlog").getAbsolutePath()); +// } +// BitronixTransactionManager transactionManager = getTransactionManager(); +// stopHooks.add(() -> transactionManager.shutdown()); +// BitronixTransactionSynchronizationRegistry transactionSynchronizationRegistry = getTransactionSynchronizationRegistry(); +// // register +// bc.registerService(TransactionManager.class, transactionManager, null); +// bc.registerService(UserTransaction.class, transactionManager, null); +// bc.registerService(TransactionSynchronizationRegistry.class, transactionSynchronizationRegistry, null); +// if (log.isDebugEnabled()) +// log.debug("Initialised default Bitronix transaction manager"); +// } void shutdown() { if (log.isDebugEnabled()) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/HomeRepository.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/HomeRepository.java index 1b50023e6..fd432d11e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/HomeRepository.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/HomeRepository.java @@ -188,4 +188,8 @@ class HomeRepository extends JcrRepositoryWrapper implements KernelConstants { } + public boolean isRemote() { + return remote; + } + } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelThread.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelThread.java index b2b51eb8a..a127866e3 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelThread.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelThread.java @@ -91,6 +91,8 @@ class KernelThread extends Thread { @Override public void run() { + if (log.isTraceEnabled()) + log.trace("Kernel thread started."); final long periodNs = PERIOD * m; while (running) { long beginNs = System.nanoTime(); diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java index 1e11b7d7f..9a2177df1 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java @@ -68,8 +68,8 @@ public class NodeHttp implements KernelConstants { registerRemotingServlet(httpService, alias, repository); if (NodeConstants.HOME.equals(alias)) registerFilesServlet(httpService, alias, repository); - if (log.isDebugEnabled()) - log.debug("Registered servlets for repository '" + alias + "'"); + if (log.isTraceEnabled()) + log.trace("Registered servlets for repository '" + alias + "'"); } catch (Exception e) { throw new CmsException("Could not register servlets for repository '" + alias + "'", e); } @@ -83,8 +83,8 @@ public class NodeHttp implements KernelConstants { httpService.unregister(remotingPath(alias)); if (NodeConstants.HOME.equals(alias)) httpService.unregister(filesPath(alias)); - if (log.isDebugEnabled()) - log.debug("Unregistered servlets for repository '" + alias + "'"); + if (log.isTraceEnabled()) + log.trace("Unregistered servlets for repository '" + alias + "'"); } catch (Exception e) { log.error("Could not unregister servlets for repository '" + alias + "'", e); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java index f83eb9476..ae6623826 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java @@ -35,7 +35,6 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; -import org.springframework.core.io.Resource; /** * OSGi-aware Jackrabbit repository factory which can retrieve/publish @@ -200,9 +199,4 @@ class NodeRepositoryFactory implements RepositoryFactory { protected void postInitialization(Repository repository, Map parameters) { } - - public void setFileRepositoryConfiguration(Resource fileRepositoryConfiguration) { - // this.fileRepositoryConfiguration = fileRepositoryConfiguration; - } - } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java index e8977fa37..f00c3c769 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java @@ -61,9 +61,6 @@ import org.osgi.service.useradmin.Authorization; import org.osgi.service.useradmin.UserAdmin; import org.osgi.util.tracker.ServiceTracker; -import bitronix.tm.BitronixTransactionManager; -import bitronix.tm.resource.ehcache.EhCacheXAResourceProducer; - /** * Aggregates multiple {@link UserDirectory} and integrates them with system * roles. @@ -79,7 +76,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor // JTA private final ServiceTracker tmTracker; - private final String cacheName = UserDirectory.class.getName(); + // private final String cacheName = UserDirectory.class.getName(); // GSS API private Path nodeKeyTab = KernelUtils.getOsgiInstancePath(KernelConstants.NODE_KEY_TAB_PATH); @@ -184,8 +181,8 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor if (tm == null) throw new CmsException("A JTA transaction manager must be available."); userDirectory.setTransactionManager(tm); - if (tmTracker.getService() instanceof BitronixTransactionManager) - EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource()); +// if (tmTracker.getService() instanceof BitronixTransactionManager) +// EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource()); Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name()); if (realm != null) { @@ -225,8 +222,8 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor } protected void preDestroy(AbstractUserDirectory userDirectory) { - if (tmTracker.getService() instanceof BitronixTransactionManager) - EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource()); +// if (tmTracker.getService() instanceof BitronixTransactionManager) +// EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource()); Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name()); if (realm != null) { diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/SecurityProfile.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/SecurityProfile.java index 358b212b1..7d5242fa2 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/SecurityProfile.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/SecurityProfile.java @@ -6,9 +6,6 @@ import java.net.SocketPermission; import java.security.AllPermission; import java.util.PropertyPermission; -import javax.management.MBeanPermission; -import javax.management.MBeanServerPermission; -import javax.management.MBeanTrustPermission; import javax.security.auth.AuthPermission; import org.osgi.framework.AdminPermission; @@ -24,8 +21,6 @@ import org.osgi.service.condpermadmin.ConditionalPermissionInfo; import org.osgi.service.condpermadmin.ConditionalPermissionUpdate; import org.osgi.service.permissionadmin.PermissionInfo; -import bitronix.tm.BitronixTransactionManager; - public interface SecurityProfile { BundleContext bc = FrameworkUtil.getBundle(SecurityProfile.class).getBundleContext(); @@ -107,15 +102,15 @@ public interface SecurityProfile { // ConditionalPermissionInfo.ALLOW)); // Bitronix - update.getConditionalPermissionInfos().add(permissionAdmin.newConditionalPermissionInfo(null, - new ConditionInfo[] { new ConditionInfo(BundleLocationCondition.class.getName(), - new String[] { locate(BitronixTransactionManager.class) }) }, - new PermissionInfo[] { new PermissionInfo(PropertyPermission.class.getName(), "bitronix.tm.*", "read"), - new PermissionInfo(RuntimePermission.class.getName(), "getClassLoader", null), - new PermissionInfo(MBeanServerPermission.class.getName(), "createMBeanServer", null), - new PermissionInfo(MBeanPermission.class.getName(), "bitronix.tm.*", "registerMBean"), - new PermissionInfo(MBeanTrustPermission.class.getName(), "register", null) }, - ConditionalPermissionInfo.ALLOW)); +// update.getConditionalPermissionInfos().add(permissionAdmin.newConditionalPermissionInfo(null, +// new ConditionInfo[] { new ConditionInfo(BundleLocationCondition.class.getName(), +// new String[] { locate(BitronixTransactionManager.class) }) }, +// new PermissionInfo[] { new PermissionInfo(PropertyPermission.class.getName(), "bitronix.tm.*", "read"), +// new PermissionInfo(RuntimePermission.class.getName(), "getClassLoader", null), +// new PermissionInfo(MBeanServerPermission.class.getName(), "createMBeanServer", null), +// new PermissionInfo(MBeanPermission.class.getName(), "bitronix.tm.*", "registerMBean"), +// new PermissionInfo(MBeanTrustPermission.class.getName(), "register", null) }, +// ConditionalPermissionInfo.ALLOW)); // DS Bundle dsBundle = findBundle("org.eclipse.equinox.ds"); @@ -135,7 +130,7 @@ public interface SecurityProfile { ConditionalPermissionInfo.ALLOW)); // Jetty - Bundle jettyUtilBundle = findBundle("org.eclipse.equinox.http.jetty"); + // Bundle jettyUtilBundle = findBundle("org.eclipse.equinox.http.jetty"); update.getConditionalPermissionInfos().add(permissionAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] { new ConditionInfo(BundleLocationCondition.class.getName(), new String[] { "*/org.eclipse.jetty.*" }) }, @@ -257,16 +252,14 @@ public interface SecurityProfile { new PermissionInfo(AdminPermission.class.getName(), "*", "*") }, ConditionalPermissionInfo.ALLOW)); Bundle luceneBundle = findBundle("org.apache.lucene"); - update.getConditionalPermissionInfos() - .add(permissionAdmin.newConditionalPermissionInfo(null, - new ConditionInfo[] { new ConditionInfo(BundleLocationCondition.class.getName(), - new String[] { luceneBundle.getLocation() }) }, - new PermissionInfo[] { - new PermissionInfo(FilePermission.class.getName(), "<>", - "read,write,delete"), - new PermissionInfo(PropertyPermission.class.getName(), "*", "read"), - new PermissionInfo(AdminPermission.class.getName(), "*", "*") }, - ConditionalPermissionInfo.ALLOW)); + update.getConditionalPermissionInfos().add(permissionAdmin.newConditionalPermissionInfo(null, + new ConditionInfo[] { new ConditionInfo(BundleLocationCondition.class.getName(), + new String[] { luceneBundle.getLocation() }) }, + new PermissionInfo[] { + new PermissionInfo(FilePermission.class.getName(), "<>", "read,write,delete"), + new PermissionInfo(PropertyPermission.class.getName(), "*", "read"), + new PermissionInfo(AdminPermission.class.getName(), "*", "*") }, + ConditionalPermissionInfo.ALLOW)); // COMMIT update.commit(); diff --git a/org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java b/org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java index c5b4e9ecc..69e8a08fd 100644 --- a/org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java +++ b/org.argeo.cms/src/org/argeo/cms/security/ChecksumFactory.java @@ -1,7 +1,5 @@ package org.argeo.cms.security; -import static javax.xml.bind.DatatypeConverter.printBase64Binary; - import java.io.IOException; import java.math.BigInteger; import java.nio.MappedByteBuffer; @@ -13,6 +11,7 @@ import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.security.MessageDigest; +import java.util.Base64; import java.util.zip.Checksum; import org.argeo.cms.CmsException; @@ -29,8 +28,7 @@ public class ChecksumFactory { Files.walkFileTree(path, new SimpleFileVisitor() { @Override - public FileVisitResult visitFile(Path file, - BasicFileAttributes attrs) throws IOException { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (!Files.isDirectory(file)) { byte[] digest = digest(file, algo); md.update(digest); @@ -41,25 +39,20 @@ public class ChecksumFactory { }); byte[] digest = md.digest(); long duration = System.currentTimeMillis() - begin; - System.out.println(printBase64Binary(digest) + " " + path - + " (" + duration / 1000 + "s)"); + System.out.println(printBase64Binary(digest) + " " + path + " (" + duration / 1000 + "s)"); return digest; } else { long begin = System.nanoTime(); long length = -1; - try (FileChannel channel = (FileChannel) Files - .newByteChannel(path);) { + try (FileChannel channel = (FileChannel) Files.newByteChannel(path);) { length = channel.size(); long cursor = 0; while (cursor < length) { - long effectiveSize = Math.min(regionSize, length - - cursor); - MappedByteBuffer mb = channel.map( - FileChannel.MapMode.READ_ONLY, cursor, - effectiveSize); + long effectiveSize = Math.min(regionSize, length - cursor); + MappedByteBuffer mb = channel.map(FileChannel.MapMode.READ_ONLY, cursor, effectiveSize); // md.update(mb); byte[] buffer = new byte[1024]; - while (mb.hasRemaining()){ + while (mb.hasRemaining()) { mb.get(buffer); md.update(buffer); } @@ -82,11 +75,9 @@ public class ChecksumFactory { } byte[] digest = md.digest(); long duration = System.nanoTime() - begin; - System.out.println(printBase64Binary(digest) + " " - + path.getFileName() + " (" + duration / 1000000 - + "ms, " + (length / 1024) + "kB, " - + (length / (duration / 1000000)) * 1000 - / (1024 * 1024) + " MB/s)"); + System.out.println(printBase64Binary(digest) + " " + path.getFileName() + " (" + duration / 1000000 + + "ms, " + (length / 1024) + "kB, " + (length / (duration / 1000000)) * 1000 / (1024 * 1024) + + " MB/s)"); return digest; } } @@ -112,8 +103,7 @@ public class ChecksumFactory { long cursor = 0; while (cursor < length) { long effectiveSize = Math.min(regionSize, length - cursor); - MappedByteBuffer mb = channel.map( - FileChannel.MapMode.READ_ONLY, cursor, effectiveSize); + MappedByteBuffer mb = channel.map(FileChannel.MapMode.READ_ONLY, cursor, effectiveSize); int nGet; while (mb.hasRemaining()) { nGet = Math.min(mb.remaining(), bufferSize); @@ -139,9 +129,8 @@ public class ChecksumFactory { if (args.length > 0) { path = Paths.get(args[0]); } else { - path = Paths - .get("/home/mbaudier/Downloads/torrents/CentOS-7-x86_64-DVD-1503-01/" - + "CentOS-7-x86_64-DVD-1503-01.iso"); + path = Paths.get("/home/mbaudier/Downloads/torrents/CentOS-7-x86_64-DVD-1503-01/" + + "CentOS-7-x86_64-DVD-1503-01.iso"); } // long adler = cf.checksum(path, new Adler32()); // System.out.format("Adler=%d%n", adler); @@ -154,4 +143,8 @@ public class ChecksumFactory { // String sha1 = printBase64Binary(cf.digest(path, "SHA1")); // System.out.format("SHA1=%s%n", sha1); } + + private static String printBase64Binary(byte[] arr) { + return Base64.getEncoder().encodeToString(arr); + } } diff --git a/org.argeo.ext.jackrabbit/bnd.bnd b/org.argeo.ext.jackrabbit/bnd.bnd index 8107e8717..3dbc51f9c 100644 --- a/org.argeo.ext.jackrabbit/bnd.bnd +++ b/org.argeo.ext.jackrabbit/bnd.bnd @@ -1,4 +1,3 @@ Fragment-Host: org.apache.jackrabbit.core -Import-Package: org.springframework.core,\ -org.argeo.node,\ +Import-Package: org.argeo.node,\ * diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java b/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java index 94eb70482..a5036fb5e 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java @@ -12,8 +12,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; -import javax.activation.FileTypeMap; -import javax.activation.MimetypesFileTypeMap; import javax.jcr.Binary; import javax.jcr.Node; import javax.jcr.Property; @@ -30,23 +28,10 @@ public class BinaryChannel implements SeekableByteChannel { private long position = 0; - // private ByteBuffer toWrite; private FileChannel fc = null; - private static FileTypeMap fileTypeMap; - - static { - try { - fileTypeMap = new MimetypesFileTypeMap("/etc/mime.types"); - } catch (IOException e) { - fileTypeMap = FileTypeMap.getDefaultFileTypeMap(); - } - } - - public BinaryChannel(Node file) throws RepositoryException, IOException { + public BinaryChannel(Node file, Path path) throws RepositoryException, IOException { this.file = file; - // int capacity = 1024 * 1024; - // this.toWrite = ByteBuffer.allocate(capacity); if (file.isNodeType(NodeType.NT_FILE)) { if (file.hasNode(Property.JCR_CONTENT)) { Node data = file.getNode(Property.JCR_CONTENT); @@ -59,7 +44,8 @@ public class BinaryChannel implements SeekableByteChannel { data.setProperty(Property.JCR_DATA, this.binary); // MIME type - String mime = fileTypeMap.getContentType(file.getName()); + String mime = Files.probeContentType(path); + // String mime = fileTypeMap.getContentType(file.getName()); data.setProperty(Property.JCR_MIMETYPE, mime); data.getSession().save(); @@ -81,9 +67,6 @@ public class BinaryChannel implements SeekableByteChannel { Binary newBinary = null; try { Session session = file.getSession(); - // byte[] arr = new byte[(int) position]; - // toWrite.flip(); - // toWrite.get(arr); fc.position(0); InputStream in = Channels.newInputStream(fc); newBinary = session.getValueFactory().createBinary(in); @@ -113,20 +96,9 @@ public class BinaryChannel implements SeekableByteChannel { try { int read; - // int capacity = dst.capacity(); byte[] arr = dst.array(); read = binary.read(arr, position); - // dst.put(arr, 0, read); - - // try { - // byte[] arr = dst.array(); - // read = binary.read(arr, position); - // } catch (UnsupportedOperationException e) { - // int capacity = dst.capacity(); - // byte[] arr = new byte[capacity]; - // read = binary.read(arr, position); - // dst.put(arr); - // } + if (read != -1) position = position + read; return read; @@ -140,15 +112,6 @@ public class BinaryChannel implements SeekableByteChannel { public int write(ByteBuffer src) throws IOException { int written = getFileChannel().write(src); return written; - // int byteCount = src.remaining(); - // if (toWrite.remaining() < byteCount) - // throw new JcrFsException("Write buffer is full"); - // toWrite.put(src); - // if (position < binarySize) - // position = binarySize + byteCount; - // else - // position = position + byteCount; - // return byteCount; } @Override @@ -185,9 +148,6 @@ public class BinaryChannel implements SeekableByteChannel { @Override public SeekableByteChannel truncate(long size) throws IOException { getFileChannel().truncate(size); - // if (size != size()) - // throw new UnsupportedOperationException("Cannot truncate JCR - // binary"); return this; } diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java index 096546556..7dbd4e43f 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java @@ -55,7 +55,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { } if (!node.isNodeType(NodeType.NT_FILE)) throw new UnsupportedOperationException(node + " must be a file"); - return new BinaryChannel(node); + return new BinaryChannel(node, path); } catch (RepositoryException e) { discardChanges(node); throw new IOException("Cannot read file", e); diff --git a/rcp/org.argeo.eclipse.ui.rcp/bnd.bnd b/rcp/org.argeo.eclipse.ui.rcp/bnd.bnd index bcfde8e1b..a51cdbbad 100644 --- a/rcp/org.argeo.eclipse.ui.rcp/bnd.bnd +++ b/rcp/org.argeo.eclipse.ui.rcp/bnd.bnd @@ -1,7 +1,5 @@ Import-Package: org.apache.commons.io,\ org.eclipse.core.commands,\ - org.springframework.beans.factory,\ - org.springframework.core.io.support,\ org.argeo.eclipse.ui.utils,\ !org.eclipse.core.runtime,\ !org.eclipse.ui.plugin,\ -- 2.30.2