X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.cms.ui.workbench%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fworkbench%2Finternal%2Fuseradmin%2Fproviders%2FUserTransactionProvider.java;fp=org.argeo.cms.ui.workbench%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fworkbench%2Finternal%2Fuseradmin%2Fproviders%2FUserTransactionProvider.java;h=9741d21ae1086832e5e4191ed1f4f1d6bd517af1;hb=23b7a170cae60b500e9d45551f26b5075eba73a4;hp=0000000000000000000000000000000000000000;hpb=366986c3687b920a4b68eb0a0fadf3bc19dbb1bd;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java new file mode 100644 index 000000000..9741d21ae --- /dev/null +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java @@ -0,0 +1,74 @@ +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.eclipse.ui.AbstractSourceProvider; +import org.eclipse.ui.ISources; + +/** Observe and notify UI on UserTransaction state changes */ +public class UserTransactionProvider extends AbstractSourceProvider { + private final static Log log = LogFactory + .getLog(UserTransactionProvider.class); + + public final static String TRANSACTION_STATE = WorkbenchUiPlugin.PLUGIN_ID + + ".userTransactionState"; + public final static String STATUS_ACTIVE = "status.active"; + public final static String STATUS_NO_TRANSACTION = "status.noTransaction"; + + /* DEPENDENCY INJECTION */ + private UserTransaction userTransaction; + + @Override + public String[] getProvidedSourceNames() { + return new String[] { TRANSACTION_STATE }; + } + + @Override + public Map getCurrentState() { + Map currentState = new HashMap(1); + currentState.put(TRANSACTION_STATE, getInternalCurrentState()); + return currentState; + } + + @Override + public void dispose() { + } + + private String getInternalCurrentState() { + try { + String transactionState; + if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) + transactionState = STATUS_NO_TRANSACTION; + else + // if (userTransaction.getStatus() == Status.STATUS_ACTIVE) + transactionState = STATUS_ACTIVE; + return transactionState; + } catch (Exception e) { + throw new CmsException("Unable to begin transaction", e); + } + } + + /** Publishes the ability to notify a state change */ + public void fireTransactionStateChange() { + try { + fireSourceChanged(ISources.WORKBENCH, TRANSACTION_STATE, + getInternalCurrentState()); + } catch (Exception e) { + log.warn("Cannot fire transaction state change event. Caught exception: " + + e.getClass().getCanonicalName() + " - " + e.getMessage()); + } + } + + /* DEPENDENCY INJECTION */ + public void setUserTransaction(UserTransaction userTransaction) { + this.userTransaction = userTransaction; + } +} \ No newline at end of file