2 * Copyright (C) 2007-2012 Argeo GmbH
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.commands
;
18 import javax
.transaction
.Status
;
19 import javax
.transaction
.UserTransaction
;
21 import org
.argeo
.cms
.CmsException
;
22 import org
.argeo
.cms
.ui
.workbench
.WorkbenchUiPlugin
;
23 import org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.UiAdminUtils
;
24 import org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.UserAdminWrapper
;
25 import org
.eclipse
.core
.commands
.AbstractHandler
;
26 import org
.eclipse
.core
.commands
.ExecutionEvent
;
27 import org
.eclipse
.core
.commands
.ExecutionException
;
28 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
30 /** Manage the transaction that is bound to the current perspective */
31 public class UserTransactionHandler
extends AbstractHandler
{
32 public final static String ID
= WorkbenchUiPlugin
.PLUGIN_ID
33 + ".userTransactionHandler";
35 public final static String PARAM_COMMAND_ID
= "param.commandId";
37 public final static String TRANSACTION_BEGIN
= "transaction.begin";
38 public final static String TRANSACTION_COMMIT
= "transaction.commit";
39 public final static String TRANSACTION_ROLLBACK
= "transaction.rollback";
41 /* DEPENDENCY INJECTION */
42 private UserAdminWrapper userAdminWrapper
;
44 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
45 String commandId
= event
.getParameter(PARAM_COMMAND_ID
);
46 final UserTransaction userTransaction
= userAdminWrapper
47 .getUserTransaction();
49 if (TRANSACTION_BEGIN
.equals(commandId
)) {
50 if (userTransaction
.getStatus() != Status
.STATUS_NO_TRANSACTION
)
51 throw new CmsException("A transaction already exists");
53 userTransaction
.begin();
54 } else if (TRANSACTION_COMMIT
.equals(commandId
)) {
55 if (userTransaction
.getStatus() == Status
.STATUS_NO_TRANSACTION
)
56 throw new CmsException("No transaction.");
58 userTransaction
.commit();
59 } else if (TRANSACTION_ROLLBACK
.equals(commandId
)) {
60 if (userTransaction
.getStatus() == Status
.STATUS_NO_TRANSACTION
)
61 throw new CmsException("No transaction to rollback.");
63 userTransaction
.rollback();
64 userAdminWrapper
.notifyListeners(new UserAdminEvent(null,
65 UserAdminEvent
.ROLE_CHANGED
, null));
69 UiAdminUtils
.notifyTransactionStateChange(userTransaction
);
70 // Try to remove invalid thread access errors when managing users.
71 // HandlerUtil.getActivePart(event).getSite().getShell().getDisplay()
72 // .asyncExec(new Runnable() {
74 // public void run() {
76 // .notifyTransactionStateChange(userTransaction);
80 } catch (CmsException e
) {
82 } catch (Exception e
) {
83 throw new CmsException("Unable to call " + commandId
+ " on "
84 + userTransaction
, e
);
89 /* DEPENDENCY INJECTION */
90 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
91 this.userAdminWrapper
= userAdminWrapper
;