</perspective>
</extension>
+ <!-- VIEWS -->
<extension
point="org.eclipse.ui.views">
<view
</view>
</extension>
- <!-- Editors -->
+ <!-- EDITORS -->
<extension
point="org.eclipse.ui.editors">
<editor
icon="icons/user.gif"
default="false">
</editor>
- <!-- Legacy -->
- <!--<editor
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- id="org.argeo.security.ui.admin.adminArgeoUserEditor"
- name="User"
- icon="icons/user.gif"
- default="false">
- </editor> -->
</extension>
<extension
point="org.eclipse.ui.commands">
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ <!-- User CRUD -->
+ <command
id="org.argeo.security.ui.admin.newUser"
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
name="New User">
</command>
- <command
- defaultHandler="org.argeo.security.ui.admin.commands.DeleteUsers"
- id="org.argeo.security.ui.admin.deleteUsers"
- name="Delete User">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.newGroup"
+ <command
+ id="org.argeo.security.ui.admin.deleteUsers"
+ defaultHandler="org.argeo.security.ui.admin.commands.DeleteUsers"
+ name="Delete User">
+ </command>
+ <!-- Group CRUD -->
+ <command
+ id="org.argeo.security.ui.admin.newGroup"
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
name="New Group">
- </command>
- <command
- defaultHandler="org.argeo.security.ui.admin.commands.DeleteGroups"
+ </command>
+ <command
id="org.argeo.security.ui.admin.deleteGroups"
+ defaultHandler="org.argeo.security.ui.admin.commands.DeleteGroups"
name="Delete Group">
- </command>
+ </command>
+ <!-- Transaction -->
+ <command
+ id="org.argeo.security.ui.admin.userTransactionHandler"
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ name="Manage a user transaction">
+ <commandParameter
+ id="param.commandId"
+ name="begin, commit or rollback">
+ </commandParameter>
+ </command>
<!-- Force the refresh when the various listener are not enough -->
<command
id="org.argeo.security.ui.admin.forceRefresh"
name="Force Refresh">
</command>
- <!--<command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.openArgeoUserEditor"
- name="OpenArgeoUserEditor">
- <commandParameter
- id="org.argeo.security.ui.admin.username"
- name="Username">
- </commandParameter>
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.refreshUsersList"
- name="refreshUsersList">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.newUser"
- name="New User">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.deleteUser"
- name="deleteUser">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.refreshRoles"
- name="refreshRoles">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.addRole"
- name="AddRole">
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.deleteRole"
- name="deleteRole">
- </command>
+ <!--
<command
defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
id="org.argeo.security.ui.admin.userBatchUpdate"
name="User batch update">
</command> -->
- </extension>
- <extension
- point="org.eclipse.ui.menus">
- <menuContribution
+ </extension>
+
+ <!-- MENU CONTRIBUTIONS -->
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI="toolbar:org.argeo.security.ui.rap.userToolbar?after=org.eclipse.ui.file.saveAll">
+ <!-- Transaction management -->
+ <command
+ commandId="org.argeo.security.ui.admin.userTransactionHandler"
+ icon="icons/begin.gif"
+ label="Begin Transaction"
+ style="push"
+ tooltip="Begin a user transaction">
+<!-- <visibleWhen>
+ <and>
+ <with variable="activePart">
+ <instanceof value="org.argeo.cms.CmsEditable" />
+ </with>
+ <with variable="org.argeo.connect.people.rap.editingState">
+ <equals value="notEditing" />
+ </with> -->
+ <!-- FIXME : never true, the role condition does not work -->
+ <!-- <with variable="roles">
+ <iterate ifEmpty="false" operator="or">
+ <equals value="ROLE_BUSINESS_ADMIN" />
+ </iterate>
+ </with> -->
+<!-- </and>
+ </visibleWhen> -->
+ <parameter name="param.commandId" value="transaction.begin" />
+ </command>
+ <command
+ commandId="org.argeo.security.ui.admin.userTransactionHandler"
+ icon="icons/commit.gif"
+ label="Commit Transaction"
+ style="push"
+ tooltip="Commit a user transaction">
+ <parameter name="param.commandId" value="transaction.commit" />
+ </command>
+ <command
+ commandId="org.argeo.security.ui.admin.userTransactionHandler"
+ icon="icons/rollback.gif"
+ label="Rollback Transaction"
+ style="push"
+ tooltip="Abandon current changes and rollback to the latest commited version">
+ <parameter name="param.commandId" value="transaction.rollback" />
+ </command>
+ </menuContribution>
+
+ <!-- UsersView specific toolbar menu -->
+ <menuContribution
locationURI="toolbar:org.argeo.security.ui.admin.usersView">
<command
commandId="org.argeo.security.ui.admin.deleteUsers"
tooltip="Perform maintenance activities on a list of chosen users">
</command>-->
</menuContribution>
+
+ <!-- GroupsView specific toolbar menu -->
<menuContribution
locationURI="toolbar:org.argeo.security.ui.admin.groupsView">
<command
</command>
</menuContribution>
-<!-- <menuContribution
+ <!-- <menuContribution
locationURI="toolbar:org.argeo.security.ui.admin.adminRolesView">
- <command
- commandId="org.argeo.security.ui.admin.deleteRole"
- icon="icons/remove.gif"
- label="Delete Role"
- tooltip="Delete selected roles">
- </command>
- <command
- commandId="org.argeo.security.ui.admin.addRole"
- icon="icons/add.gif"
- label="Add Role"
- tooltip="Add new role">
- </command>
<command
commandId="org.argeo.security.ui.admin.refreshRoles"
icon="icons/sync.gif"
label="LDAP Roles Sync"
tooltip="Synchronize roles from LDAP">
</command>
- </menuContribution>
- <menuContribution
- locationURI="toolbar:org.argeo.security.ui.admin.adminUsersView">
- <command
- commandId="org.argeo.security.ui.admin.refreshUsersList"
- icon="icons/refresh.png"
- label="Refresh list"
- tooltip="Force the full refresh of the user list">
- </command>
- <command
- commandId="org.argeo.security.ui.admin.deleteUser"
- icon="icons/remove.gif"
- label="Delete User"
- tooltip="Delete selected users">
- </command>
- <command
- commandId="org.argeo.security.ui.admin.newUser"
- icon="icons/add.gif"
- label="Add User"
- tooltip="Add new user">
- </command>
- <command
- commandId="org.argeo.security.ui.admin.userBatchUpdate"
- icon="icons/batch.gif"
- label="Update users"
- tooltip="Perform maintenance activities on a list of chosen users">
- </command>
- <command
- commandId="org.argeo.security.ui.admin.refreshUsersList"
- icon="icons/sync.gif"
- label="LDAP Users Sync"
- tooltip="Synchronize users from LDAP">
- </command>
</menuContribution> -->
- </extension>
+ </extension>
- <extension
- point="org.eclipse.ui.activities">
- <activityPatternBinding
- activityId="org.argeo.security.ui.userAdminActivity"
- isEqualityPattern="true"
- pattern="org.argeo.security.ui.admin/org.argeo.security.ui.admin.adminSecurityPerspective">
- </activityPatternBinding>
- <activityPatternBinding
- activityId="org.argeo.security.ui.groupAdminActivity"
- isEqualityPattern="true"
- pattern="org.argeo.security.ui.admin/org.argeo.security.ui.admin.adminRolesView">
- </activityPatternBinding>
- </extension>
-
- </plugin>
\ No newline at end of file
+ <!-- ACTIVITIES -->
+ <extension
+ point="org.eclipse.ui.activities">
+ <activityPatternBinding
+ activityId="org.argeo.security.ui.userAdminActivity"
+ isEqualityPattern="true"
+ pattern="org.argeo.security.ui.admin/org.argeo.security.ui.admin.adminSecurityPerspective">
+ </activityPatternBinding>
+ <activityPatternBinding
+ activityId="org.argeo.security.ui.groupAdminActivity"
+ isEqualityPattern="true"
+ pattern="org.argeo.security.ui.admin/org.argeo.security.ui.admin.adminRolesView">
+ </activityPatternBinding>
+ </extension>
+</plugin>
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.security.ui.admin.commands;
+
+import javax.transaction.Status;
+import javax.transaction.UserTransaction;
+
+import org.argeo.ArgeoException;
+import org.argeo.security.ui.admin.SecurityAdminPlugin;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/** Manage the transaction that is bound to the current perspective */
+public class UserTransactionHandler extends AbstractHandler {
+ public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ + ".userTransactionHandler";
+
+ public final static String PARAM_COMMAND_ID = "param.commandId";
+
+ public final static String TRANSACTION_BEGIN = "transaction.begin";
+ public final static String TRANSACTION_COMMIT = "transaction.commit";
+ public final static String TRANSACTION_ROLLBACK = "transaction.rollback";
+
+ private UserTransaction userTransaction;
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ String commandId = event.getParameter(PARAM_COMMAND_ID);
+ try {
+ if (TRANSACTION_BEGIN.equals(commandId)) {
+ if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
+ throw new ArgeoException("A transaction already exists");
+ else
+ userTransaction.begin();
+ } else if (TRANSACTION_COMMIT.equals(commandId)) {
+ if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
+ throw new ArgeoException("No transaction.");
+ else
+ userTransaction.commit();
+ } else if (TRANSACTION_ROLLBACK.equals(commandId)) {
+ if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
+ throw new ArgeoException("No transaction to rollback.");
+ else
+ userTransaction.rollback();
+ }
+ } catch (ArgeoException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ArgeoException("Unable to call " + commandId + " on "
+ + userTransaction, e);
+ }
+ //
+ // IWorkbenchWindow iww = HandlerUtil.getActiveWorkbenchWindow(event);
+ // if (iww == null)
+ // return null;
+ // IWorkbenchPage activePage = iww.getActivePage();
+ // IWorkbenchPart part = activePage.getActivePart();
+ // if (part instanceof UsersView)
+ // ((UsersView) part).refresh();
+ // else if (part instanceof GroupsView)
+ // ((GroupsView) part).refresh();
+ return null;
+ }
+
+ public void setUserTransaction(UserTransaction userTransaction) {
+ this.userTransaction = userTransaction;
+ }
+}
\ No newline at end of file