From: Mathieu Baudier Date: Tue, 7 Dec 2021 08:47:21 +0000 (+0100) Subject: Adapt to changes in Argeo Commons X-Git-Tag: argeo-slc-2.3.1~40 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=2728afed20a95052f93c41ec641808ec5f01f4fb;p=gpl%2Fargeo-slc.git Adapt to changes in Argeo Commons --- diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench.rap/META-INF/spring/osgi.xml b/legacy/argeo-commons/org.argeo.cms.ui.workbench.rap/META-INF/spring/osgi.xml index 248d87497..894017918 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench.rap/META-INF/spring/osgi.xml +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench.rap/META-INF/spring/osgi.xml @@ -9,6 +9,6 @@ osgi:default-timeout="30000"> - + diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml b/legacy/argeo-commons/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml index da9785e5d..9f72ed253 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml @@ -27,7 +27,7 @@ - + roles = new ArrayList(); private UserAdmin userAdmin; - private UserTransaction userTransaction; + private WorkTransaction userTransaction; @Override public void run() { @@ -82,7 +81,7 @@ public class SimpleRoleRegistration implements Runnable { this.userAdmin = userAdminService; } - public void setUserTransaction(UserTransaction userTransaction) { + public void setUserTransaction(WorkTransaction userTransaction) { this.userTransaction = userTransaction; } diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java index 31e7f469d..92548a6c9 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/commands/OpenChangePasswordDialog.java @@ -14,13 +14,13 @@ import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; import javax.security.auth.Subject; import javax.security.auth.x500.X500Principal; -import javax.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.api.security.CryptoKeyring; import org.argeo.cms.CmsException; import org.argeo.eclipse.ui.dialogs.ErrorFeedback; +import org.argeo.osgi.transaction.WorkTransaction; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -44,7 +44,7 @@ import org.osgi.service.useradmin.UserAdmin; public class OpenChangePasswordDialog extends AbstractHandler { private final static Log log = LogFactory.getLog(OpenChangePasswordDialog.class); private UserAdmin userAdmin; - private UserTransaction userTransaction; + private WorkTransaction userTransaction; private CryptoKeyring keyring = null; public Object execute(ExecutionEvent event) throws ExecutionException { @@ -150,7 +150,7 @@ public class OpenChangePasswordDialog extends AbstractHandler { this.userAdmin = userAdmin; } - public void setUserTransaction(UserTransaction userTransaction) { + public void setUserTransaction(WorkTransaction userTransaction) { this.userTransaction = userTransaction; } diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java index 8f5588b76..3aaa48732 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UiAdminUtils.java @@ -1,9 +1,8 @@ package org.argeo.cms.ui.workbench.internal.useradmin; -import javax.transaction.UserTransaction; - import org.argeo.cms.CmsException; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTransactionProvider; +import org.argeo.osgi.transaction.WorkTransaction; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.services.ISourceProviderService; @@ -16,7 +15,7 @@ public class UiAdminUtils { */ /** Easily notify the ActiveWindow that the transaction had a state change */ public final static void notifyTransactionStateChange( - UserTransaction userTransaction) { + WorkTransaction userTransaction) { try { IWorkbenchWindow aww = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UserAdminWrapper.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UserAdminWrapper.java index d5e995ae5..67c1c7a9b 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UserAdminWrapper.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/UserAdminWrapper.java @@ -6,11 +6,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.transaction.Status; -import javax.transaction.UserTransaction; - import org.argeo.api.NodeConstants; import org.argeo.cms.CmsException; +import org.argeo.osgi.transaction.WorkTransaction; import org.argeo.osgi.useradmin.UserAdminConf; import org.osgi.framework.ServiceReference; import org.osgi.service.useradmin.UserAdmin; @@ -22,7 +20,7 @@ public class UserAdminWrapper { private UserAdmin userAdmin; private ServiceReference userAdminServiceReference; - private UserTransaction userTransaction; + private WorkTransaction userTransaction; // First effort to simplify UX while managing users and groups public final static boolean COMMIT_ON_SAVE = true; @@ -35,10 +33,10 @@ public class UserAdminWrapper { * with {@link UserAdminWrapper#commitOrNotifyTransactionStateChange()} once * the security model changes have been performed. */ - public UserTransaction beginTransactionIfNeeded() { + public WorkTransaction beginTransactionIfNeeded() { try { // UserTransaction userTransaction = getUserTransaction(); - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) { + if (userTransaction.isNoTransactionStatus()) { userTransaction.begin(); // UiAdminUtils.notifyTransactionStateChange(userTransaction); } @@ -57,7 +55,7 @@ public class UserAdminWrapper { public void commitOrNotifyTransactionStateChange() { try { // UserTransaction userTransaction = getUserTransaction(); - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) + if (userTransaction.isNoTransactionStatus()) return; if (UserAdminWrapper.COMMIT_ON_SAVE) @@ -107,7 +105,7 @@ public class UserAdminWrapper { return userAdmin; } - public UserTransaction getUserTransaction() { + public WorkTransaction getUserTransaction() { return userTransaction; } @@ -116,7 +114,7 @@ public class UserAdminWrapper { this.userAdmin = userAdmin; } - public void setUserTransaction(UserTransaction userTransaction) { + public void setUserTransaction(WorkTransaction userTransaction) { this.userTransaction = userTransaction; } diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/UserTransactionHandler.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/UserTransactionHandler.java index 6e72912b3..f9e2ded16 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/UserTransactionHandler.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/UserTransactionHandler.java @@ -1,12 +1,10 @@ package org.argeo.cms.ui.workbench.internal.useradmin.commands; -import javax.transaction.Status; -import javax.transaction.UserTransaction; - import org.argeo.cms.CmsException; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UiAdminUtils; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; +import org.argeo.osgi.transaction.WorkTransaction; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -14,8 +12,7 @@ import org.osgi.service.useradmin.UserAdminEvent; /** Manage the transaction that is bound to the current perspective */ public class UserTransactionHandler extends AbstractHandler { - public final static String ID = WorkbenchUiPlugin.PLUGIN_ID - + ".userTransactionHandler"; + public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".userTransactionHandler"; public final static String PARAM_COMMAND_ID = "param.commandId"; @@ -28,26 +25,24 @@ public class UserTransactionHandler extends AbstractHandler { public Object execute(ExecutionEvent event) throws ExecutionException { String commandId = event.getParameter(PARAM_COMMAND_ID); - final UserTransaction userTransaction = userAdminWrapper - .getUserTransaction(); + final WorkTransaction userTransaction = userAdminWrapper.getUserTransaction(); try { if (TRANSACTION_BEGIN.equals(commandId)) { - if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION) + if (!userTransaction.isNoTransactionStatus()) throw new CmsException("A transaction already exists"); else userTransaction.begin(); } else if (TRANSACTION_COMMIT.equals(commandId)) { - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) + if (userTransaction.isNoTransactionStatus()) throw new CmsException("No transaction."); else userTransaction.commit(); } else if (TRANSACTION_ROLLBACK.equals(commandId)) { - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) + if (userTransaction.isNoTransactionStatus()) throw new CmsException("No transaction to rollback."); else { userTransaction.rollback(); - userAdminWrapper.notifyListeners(new UserAdminEvent(null, - UserAdminEvent.ROLE_CHANGED, null)); + userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, null)); } } @@ -65,8 +60,7 @@ public class UserTransactionHandler extends AbstractHandler { } catch (CmsException e) { throw e; } catch (Exception e) { - throw new CmsException("Unable to call " + commandId + " on " - + userTransaction, e); + throw new CmsException("Unable to call " + commandId + " on " + userTransaction, e); } return null; } diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java index f98697536..9318555a5 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java @@ -15,12 +15,13 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; -import javax.transaction.UserTransaction; import org.argeo.api.NodeInstance; import org.argeo.api.NodeUtils; import org.argeo.cms.ArgeoNames; import org.argeo.cms.CmsException; +import org.argeo.cms.auth.UserAdminUtils; +import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.cms.ui.workbench.CmsWorkbenchStyles; import org.argeo.cms.ui.workbench.internal.useradmin.SecurityAdminImages; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; @@ -31,13 +32,12 @@ import org.argeo.cms.ui.workbench.internal.useradmin.providers.MailLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.RoleIconLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserFilter; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener; -import org.argeo.cms.ui.util.CmsUiUtils; -import org.argeo.cms.auth.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; import org.argeo.jcr.JcrUtils; import org.argeo.naming.LdapAttrs; +import org.argeo.osgi.transaction.WorkTransaction; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.MessageDialog; @@ -450,7 +450,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames { userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, myGroup)); } else if (role.getType() == Role.USER) { // TODO check if the group is already member of this group - UserTransaction transaction = userAdminWrapper.beginTransactionIfNeeded(); + WorkTransaction transaction = userAdminWrapper.beginTransactionIfNeeded(); User user = (User) role; myGroup.addMember(user); if (UserAdminWrapper.COMMIT_ON_SAVE) diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java index 5b0b2a558..a6f9c4b3d 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java @@ -5,26 +5,24 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.transaction.SystemException; -import javax.transaction.UserTransaction; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeConstants; import org.argeo.cms.CmsException; import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.auth.UserAdminUtils; import org.argeo.cms.ui.workbench.internal.useradmin.UiAdminUtils; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.ui.workbench.internal.useradmin.providers.CommonNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.DomainNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.MailLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP; -import org.argeo.cms.auth.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; import org.argeo.naming.LdapAttrs; import org.argeo.naming.LdapObjs; +import org.argeo.osgi.transaction.WorkTransaction; import org.eclipse.jface.dialogs.IPageChangeProvider; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.jface.dialogs.MessageDialog; @@ -92,15 +90,10 @@ public class UserBatchUpdateWizard extends Wizard { public boolean performFinish() { if (!canFinish()) return false; - UserTransaction ut = userAdminWrapper.getUserTransaction(); - try { - if (ut.getStatus() != javax.transaction.Status.STATUS_NO_TRANSACTION - && !MessageDialog.openConfirm(getShell(), "Existing Transaction", - "A user transaction is already existing, " + "are you sure you want to proceed ?")) - return false; - } catch (SystemException e) { - throw new CmsException("Cannot get user transaction state " + "before user batch update", e); - } + WorkTransaction ut = userAdminWrapper.getUserTransaction(); + if (!ut.isNoTransactionStatus() && !MessageDialog.openConfirm(getShell(), "Existing Transaction", + "A user transaction is already existing, " + "are you sure you want to proceed ?")) + return false; // We cannot use jobs, user modifications are still meant to be done in // the UIThread @@ -153,14 +146,9 @@ public class UserBatchUpdateWizard extends Wizard { } catch (Exception e) { throw new CmsException("Cannot perform batch update on users", e); } finally { - UserTransaction ut = userAdminWrapper.getUserTransaction(); - try { - if (ut.getStatus() != javax.transaction.Status.STATUS_NO_TRANSACTION) - ut.rollback(); - } catch (IllegalStateException | SecurityException | SystemException e) { - log.error("Unable to rollback session in 'finally', " + "the system might be in a dirty state"); - e.printStackTrace(); - } + WorkTransaction ut = userAdminWrapper.getUserTransaction(); + if (!ut.isNoTransactionStatus()) + ut.rollback(); } } } @@ -192,14 +180,9 @@ public class UserBatchUpdateWizard extends Wizard { } catch (Exception e) { throw new CmsException("Cannot perform batch update on users", e); } finally { - UserTransaction ut = userAdminWrapper.getUserTransaction(); - try { - if (ut.getStatus() != javax.transaction.Status.STATUS_NO_TRANSACTION) - ut.rollback(); - } catch (IllegalStateException | SecurityException | SystemException e) { - log.error("Unable to rollback session in finally block, the system might be in a dirty state"); - e.printStackTrace(); - } + WorkTransaction ut = userAdminWrapper.getUserTransaction(); + if (!ut.isNoTransactionStatus()) + ut.rollback(); } } } @@ -459,8 +442,7 @@ public class UserBatchUpdateWizard extends Wizard { } /** - * Displays a list of users with a check box to be able to choose some of - * them + * Displays a list of users with a check box to be able to choose some of them */ private class ChooseUsersWizardPage extends WizardPage implements IPageChangedListener { private static final long serialVersionUID = 7651807402211214274L; diff --git a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java index a53cfb2df..71abe0120 100644 --- a/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java +++ b/legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java @@ -3,13 +3,11 @@ package org.argeo.cms.ui.workbench.internal.useradmin.providers; import java.util.HashMap; import java.util.Map; -import javax.transaction.Status; -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.ui.workbench.WorkbenchUiPlugin; +import org.argeo.osgi.transaction.WorkTransaction; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.ISources; @@ -24,7 +22,7 @@ public class UserTransactionProvider extends AbstractSourceProvider { public final static String STATUS_NO_TRANSACTION = "status.noTransaction"; /* DEPENDENCY INJECTION */ - private UserTransaction userTransaction; + private WorkTransaction userTransaction; @Override public String[] getProvidedSourceNames() { @@ -45,7 +43,7 @@ public class UserTransactionProvider extends AbstractSourceProvider { private String getInternalCurrentState() { try { String transactionState; - if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) + if (userTransaction.isNoTransactionStatus()) transactionState = STATUS_NO_TRANSACTION; else // if (userTransaction.getStatus() == Status.STATUS_ACTIVE) @@ -68,7 +66,7 @@ public class UserTransactionProvider extends AbstractSourceProvider { } /* DEPENDENCY INJECTION */ - public void setUserTransaction(UserTransaction userTransaction) { + public void setUserTransaction(WorkTransaction userTransaction) { this.userTransaction = userTransaction; } } diff --git a/legacy/org.argeo.slc.spring/src/org/argeo/slc/spring/auth/SimpleRoleRegistration.java b/legacy/org.argeo.slc.spring/src/org/argeo/slc/spring/auth/SimpleRoleRegistration.java index 44b7b79af..7c4d87087 100644 --- a/legacy/org.argeo.slc.spring/src/org/argeo/slc/spring/auth/SimpleRoleRegistration.java +++ b/legacy/org.argeo.slc.spring/src/org/argeo/slc/spring/auth/SimpleRoleRegistration.java @@ -6,10 +6,10 @@ import java.util.Map; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; -import javax.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.osgi.transaction.WorkTransaction; import org.argeo.slc.SlcException; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.UserAdmin; @@ -19,13 +19,12 @@ import org.osgi.service.useradmin.UserAdmin; * is already registered. */ public class SimpleRoleRegistration implements Runnable { - private final static Log log = LogFactory - .getLog(SimpleRoleRegistration.class); + private final static Log log = LogFactory.getLog(SimpleRoleRegistration.class); private String role; private List roles = new ArrayList(); private UserAdmin userAdmin; - private UserTransaction userTransaction; + private WorkTransaction userTransaction; @Override public void run() { @@ -82,7 +81,7 @@ public class SimpleRoleRegistration implements Runnable { this.userAdmin = userAdminService; } - public void setUserTransaction(UserTransaction userTransaction) { + public void setUserTransaction(WorkTransaction userTransaction) { this.userTransaction = userTransaction; } diff --git a/legacy/pom.xml b/legacy/pom.xml index 26441ec41..888b7e81b 100644 --- a/legacy/pom.xml +++ b/legacy/pom.xml @@ -42,27 +42,4 @@ dep - - - org.argeo.tp - argeo-tp - ${version.argeo-tp} - provided - - - org.argeo.tp.apache - org.apache.xerces - - - - org.argeo.tp.sdk - biz.aQute.bndlib - - - org.argeo.tp.misc - slf4j.osgi - - - - \ No newline at end of file diff --git a/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java b/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java index 5e1a62783..cf111f81e 100644 --- a/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java +++ b/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java @@ -23,7 +23,6 @@ import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcConstants; import org.argeo.slc.SlcException; import org.argeo.slc.repo.NodeIndexerVisitor; -import org.argeo.slc.repo.RpmIndexer; import org.argeo.slc.rpmfactory.RpmFactory; import org.argeo.slc.rpmfactory.RpmRepository; import org.argeo.slc.runtime.tasks.SystemCall; diff --git a/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmIndexer.java b/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmIndexer.java new file mode 100644 index 000000000..ae9e70cb2 --- /dev/null +++ b/org.argeo.slc.factory/src/org/argeo/slc/rpmfactory/core/RpmIndexer.java @@ -0,0 +1,117 @@ +package org.argeo.slc.rpmfactory.core; + +import static org.redline_rpm.header.Header.HeaderTag.HEADERIMMUTABLE; +import static org.redline_rpm.header.Signature.SignatureTag.SIGNATURES; + +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; + +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.nodetype.NodeType; + +import org.apache.commons.io.FilenameUtils; +import org.argeo.slc.SlcException; +import org.argeo.slc.SlcNames; +import org.argeo.slc.SlcTypes; +import org.argeo.slc.repo.NodeIndexer; +import org.redline_rpm.ChannelWrapper.Key; +import org.redline_rpm.ReadableChannelWrapper; +import org.redline_rpm.header.AbstractHeader; +import org.redline_rpm.header.Format; +import org.redline_rpm.header.Header; + +/** Indexes an RPM file. */ +public class RpmIndexer implements NodeIndexer, SlcNames { + private Boolean force = false; + + @Override + public Boolean support(String path) { + return FilenameUtils.getExtension(path).equals("rpm"); + } + + @Override + public void index(Node node) { + try { + if (!support(node.getPath())) + return; + + // Already indexed + if (!force && node.isNodeType(SlcTypes.SLC_RPM)) + return; + + if (!node.isNodeType(NodeType.NT_FILE)) + return; + + InputStream in = node.getNode(Node.JCR_CONTENT) + .getProperty(Property.JCR_DATA).getBinary().getStream(); + ReadableChannelWrapper channel = new ReadableChannelWrapper( + Channels.newChannel(in)); + Format format = readRpmInfo(channel); + + node.addMixin(SlcTypes.SLC_RPM); + node.setProperty(SLC_NAME, readTag(format, Header.HeaderTag.NAME)); + String rpmVersion = readTag(format, Header.HeaderTag.VERSION); + String rpmRelease = readTag(format, Header.HeaderTag.RELEASE); + node.setProperty(SLC_RPM_VERSION, rpmVersion); + node.setProperty(SLC_RPM_RELEASE, rpmRelease); + node.setProperty(SLC_VERSION, rpmVersion + "-" + rpmRelease); + + String arch = readTag(format, Header.HeaderTag.ARCH); + if (arch != null) + node.setProperty(SLC_RPM_ARCH, arch); + + String archiveSize = readTag(format, Header.HeaderTag.ARCHIVESIZE); + if (archiveSize != null) + node.setProperty(SLC_RPM_ARCHIVE_SIZE, + Long.parseLong(archiveSize)); + + node.getSession().save(); + } catch (Exception e) { + throw new SlcException("Cannot index " + node, e); + } + + } + + @SuppressWarnings("unused") + public Format readRpmInfo(ReadableChannelWrapper channel) throws Exception { + Format format = new Format(); + + Key lead = channel.start(); + format.getLead().read(channel); + // System.out.println( "Lead ended at '" + in.finish( lead) + "'."); + + Key signature = channel.start(); + int count = format.getSignature().read(channel); + int expected = ByteBuffer + .wrap((byte[]) format.getSignature().getEntry(SIGNATURES) + .getValues(), 8, 4).getInt() + / -16; + // System.out.println( "Signature ended at '" + in.finish( signature) + + // "' and contained '" + count + "' headers (expected '" + expected + + // "')."); + + Key header = channel.start(); + count = format.getHeader().read(channel); + expected = ByteBuffer.wrap( + (byte[]) format.getHeader().getEntry(HEADERIMMUTABLE) + .getValues(), 8, 4).getInt() + / -16; + // System.out.println( "Header ended at '" + in.finish( header) + + // " and contained '" + count + "' headers (expected '" + expected + + // "')."); + + return format; + } + + private String readTag(Format format, Header.HeaderTag tag) { + AbstractHeader.Entry entry = format.getHeader().getEntry(tag); + if (entry == null) + return null; + if (entry.getValues() == null) + return null; + Object[] values = (Object[]) entry.getValues(); + return values[0].toString().trim(); + } +} diff --git a/org.argeo.slc.repo/bnd.bnd b/org.argeo.slc.repo/bnd.bnd index 07af6b4f5..7e59f4e33 100644 --- a/org.argeo.slc.repo/bnd.bnd +++ b/org.argeo.slc.repo/bnd.bnd @@ -3,11 +3,11 @@ org.xml.sax.*,\ javax.xml.transform.*,\ javax.xml.parsers.*,\ javax.jcr.nodetype,\ -org.eclipse.aether.*;version=1.0.1,\ org.osgi.*;version=0.0.0,\ * Private-Package: org.eclipse.aether.* +Export-Package: !org.eclipse.aether.*, !*.internal.*, * Require-Capability: cms.datamodel; filter:="(name=slc)" Provide-Capability: cms.datamodel; name=java,\ diff --git a/org.argeo.slc.repo/src/org/argeo/slc/repo/RpmIndexer.java b/org.argeo.slc.repo/src/org/argeo/slc/repo/RpmIndexer.java deleted file mode 100644 index fadac82ad..000000000 --- a/org.argeo.slc.repo/src/org/argeo/slc/repo/RpmIndexer.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.argeo.slc.repo; - -import static org.redline_rpm.header.Header.HeaderTag.HEADERIMMUTABLE; -import static org.redline_rpm.header.Signature.SignatureTag.SIGNATURES; - -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.nodetype.NodeType; - -import org.apache.commons.io.FilenameUtils; -import org.argeo.slc.SlcException; -import org.argeo.slc.SlcNames; -import org.argeo.slc.SlcTypes; -import org.redline_rpm.ChannelWrapper.Key; -import org.redline_rpm.ReadableChannelWrapper; -import org.redline_rpm.header.AbstractHeader; -import org.redline_rpm.header.Format; -import org.redline_rpm.header.Header; - -/** Indexes an RPM file. */ -public class RpmIndexer implements NodeIndexer, SlcNames { - private Boolean force = false; - - @Override - public Boolean support(String path) { - return FilenameUtils.getExtension(path).equals("rpm"); - } - - @Override - public void index(Node node) { - try { - if (!support(node.getPath())) - return; - - // Already indexed - if (!force && node.isNodeType(SlcTypes.SLC_RPM)) - return; - - if (!node.isNodeType(NodeType.NT_FILE)) - return; - - InputStream in = node.getNode(Node.JCR_CONTENT) - .getProperty(Property.JCR_DATA).getBinary().getStream(); - ReadableChannelWrapper channel = new ReadableChannelWrapper( - Channels.newChannel(in)); - Format format = readRpmInfo(channel); - - node.addMixin(SlcTypes.SLC_RPM); - node.setProperty(SLC_NAME, readTag(format, Header.HeaderTag.NAME)); - String rpmVersion = readTag(format, Header.HeaderTag.VERSION); - String rpmRelease = readTag(format, Header.HeaderTag.RELEASE); - node.setProperty(SLC_RPM_VERSION, rpmVersion); - node.setProperty(SLC_RPM_RELEASE, rpmRelease); - node.setProperty(SLC_VERSION, rpmVersion + "-" + rpmRelease); - - String arch = readTag(format, Header.HeaderTag.ARCH); - if (arch != null) - node.setProperty(SLC_RPM_ARCH, arch); - - String archiveSize = readTag(format, Header.HeaderTag.ARCHIVESIZE); - if (archiveSize != null) - node.setProperty(SLC_RPM_ARCHIVE_SIZE, - Long.parseLong(archiveSize)); - - node.getSession().save(); - } catch (Exception e) { - throw new SlcException("Cannot index " + node, e); - } - - } - - @SuppressWarnings("unused") - public Format readRpmInfo(ReadableChannelWrapper channel) throws Exception { - Format format = new Format(); - - Key lead = channel.start(); - format.getLead().read(channel); - // System.out.println( "Lead ended at '" + in.finish( lead) + "'."); - - Key signature = channel.start(); - int count = format.getSignature().read(channel); - int expected = ByteBuffer - .wrap((byte[]) format.getSignature().getEntry(SIGNATURES) - .getValues(), 8, 4).getInt() - / -16; - // System.out.println( "Signature ended at '" + in.finish( signature) + - // "' and contained '" + count + "' headers (expected '" + expected + - // "')."); - - Key header = channel.start(); - count = format.getHeader().read(channel); - expected = ByteBuffer.wrap( - (byte[]) format.getHeader().getEntry(HEADERIMMUTABLE) - .getValues(), 8, 4).getInt() - / -16; - // System.out.println( "Header ended at '" + in.finish( header) + - // " and contained '" + count + "' headers (expected '" + expected + - // "')."); - - return format; - } - - private String readTag(Format format, Header.HeaderTag tag) { - AbstractHeader.Entry entry = format.getHeader().getEntry(tag); - if (entry == null) - return null; - if (entry.getValues() == null) - return null; - Object[] values = (Object[]) entry.getValues(); - return values[0].toString().trim(); - } -} diff --git a/pom.xml b/pom.xml index 2c0201c92..0127ee601 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,11 @@ org.argeo.tp.misc slf4j.osgi + + + org.argeo.tp.javax + javax.transaction-api +