List of usage examples for javax.transaction UserTransaction rollback
void rollback() throws IllegalStateException, SecurityException, SystemException;
From source file:org.alfresco.web.bean.repository.Repository.java
/** * Query a list of Person type nodes from the repo * It is currently assumed that all Person nodes exist below the Repository root node * /*from w w w .j ava 2s.c om*/ * @param context Faces Context * @param nodeService The node service * @param personService PersonService * @return List of Person node objects */ public static List<Node> getUsers(FacesContext context, NodeService nodeService, PersonService personService) { List<Node> personNodes = null; UserTransaction tx = null; try { tx = Repository.getUserTransaction(context, true); tx.begin(); NodeRef peopleRef = personService.getPeopleContainer(); // TODO: better to perform an XPath search or a get for a specific child type here? List<ChildAssociationRef> childRefs = nodeService.getChildAssocs(peopleRef); personNodes = new ArrayList<Node>(childRefs.size()); for (ChildAssociationRef ref : childRefs) { // create our Node representation from the NodeRef NodeRef nodeRef = ref.getChildRef(); if (nodeService.getType(nodeRef).equals(ContentModel.TYPE_PERSON)) { // create our Node representation MapNode node = new MapNode(nodeRef); // set data binding properties // this will also force initialisation of the props now during the UserTransaction // it is much better for performance to do this now rather than during page bind Map<String, Object> props = node.getProperties(); String firstName = (String) props.get("firstName"); String lastName = (String) props.get("lastName"); props.put("fullName", (firstName != null ? firstName : "") + ' ' + (lastName != null ? lastName : "")); NodeRef homeFolderNodeRef = (NodeRef) props.get("homeFolder"); if (homeFolderNodeRef != null) { props.put("homeSpace", homeFolderNodeRef); } personNodes.add(node); } } // commit the transaction tx.commit(); } catch (InvalidNodeRefException refErr) { Utils.addErrorMessage(MessageFormat.format(Application.getMessage(context, Repository.ERROR_NODEREF), new Object[] { "root" })); personNodes = Collections.<Node>emptyList(); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } catch (Throwable err) { Utils.addErrorMessage(MessageFormat.format(Application.getMessage(context, Repository.ERROR_GENERIC), err.getMessage()), err); personNodes = Collections.<Node>emptyList(); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } return personNodes; }
From source file:org.alfresco.web.bean.rules.RulesDialog.java
/** * Reapply the currently defines rules to the * @param event ActionEvent//ww w . ja v a 2s. c om */ public void reapplyRules(ActionEvent event) { boolean toChildren = false; UIActionLink link = (UIActionLink) event.getComponent(); Map<String, String> params = link.getParameterMap(); String toChildrenStr = params.get("toChildren"); if (toChildrenStr != null) { toChildren = new Boolean(toChildrenStr).booleanValue(); } FacesContext fc = FacesContext.getCurrentInstance(); UserTransaction tx = null; try { tx = Repository.getUserTransaction(fc); tx.begin(); // Set the include inherited parameter to match the current filter value boolean executeInherited = true; if (this.filterModeMode.equals(LOCAL)) { executeInherited = false; } // Reapply the rules reapplyRules(this.getSpace().getNodeRef(), executeInherited, toChildren); // TODO how do I get the message here ... String msg = Application.getMessage(fc, MSG_REAPPLY_RULES_SUCCESS); FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg); String formId = Utils.getParentForm(fc, event.getComponent()).getClientId(fc); fc.addMessage(formId + ":rulesList", facesMsg); // commit the transaction tx.commit(); } catch (Throwable e) { // rollback the transaction try { if (tx != null) { tx.rollback(); } } catch (Exception ex) { } Utils.addErrorMessage( MessageFormat.format(Application.getMessage(fc, Repository.ERROR_GENERIC), e.getMessage()), e); } }
From source file:org.alfresco.web.bean.spaces.DeleteSpaceDialog.java
@Override protected String finishImpl(FacesContext context, String outcome) throws Exception { final boolean isAdmin = this.navigator.getCurrentUser().isAdmin(); // get the space to delete Node node = this.browseBean.getActionSpace(); if (node != null) { // force cache of name property so we can use it after the delete node.getName();// www .j av a 2 s .c om if (logger.isDebugEnabled()) logger.debug("Trying to delete space: " + node.getId() + " using delete mode: " + this.deleteMode); try { if (isAdmin && !this.executeRules) { Repository.getServiceRegistry(context).getRuleService().disableRules(); } if (DELETE_ALL.equals(this.deleteMode)) { NodeRef nodeRef = node.getNodeRef(); // Check the node still exists if (this.getNodeService().exists(nodeRef)) { if (isAdmin && !this.archiveNodes) { this.getNodeService().addAspect(node.getNodeRef(), ContentModel.ASPECT_TEMPORARY, null); } // ensure the node still exists before deleting if (this.getNodeService().exists(node.getNodeRef())) { this.getNodeService().deleteNode(node.getNodeRef()); } } } else { List<ChildAssociationRef> childRefs = this.getNodeService().getChildAssocs(node.getNodeRef(), ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); List<NodeRef> deleteRefs = new ArrayList<NodeRef>(childRefs.size()); for (ChildAssociationRef ref : childRefs) { NodeRef nodeRef = ref.getChildRef(); if (this.getNodeService().exists(nodeRef)) { if (DELETE_CONTENTS.equals(this.deleteMode)) { deleteRefs.add(nodeRef); } else { // find it's type so we can see if it's a node we are interested in QName type = this.getNodeService().getType(nodeRef); // make sure the type is defined in the data dictionary TypeDefinition typeDef = this.getDictionaryService().getType(type); if (typeDef != null) { if (DELETE_FOLDERS.equals(this.deleteMode)) { // look for folder type if (this.getDictionaryService().isSubClass(type, ContentModel.TYPE_FOLDER) == true && this.getDictionaryService().isSubClass(type, ContentModel.TYPE_SYSTEM_FOLDER) == false) { deleteRefs.add(nodeRef); } } else if (DELETE_FILES.equals(this.deleteMode)) { // look for content file type if (this.getDictionaryService().isSubClass(type, ContentModel.TYPE_CONTENT)) { deleteRefs.add(nodeRef); } } } } } } // delete the list of refs TransactionService txService = Repository.getServiceRegistry(context).getTransactionService(); for (NodeRef nodeRef : deleteRefs) { UserTransaction tx = null; try { tx = txService.getNonPropagatingUserTransaction(); tx.begin(); if (isAdmin && !this.archiveNodes) { this.getNodeService().addAspect(nodeRef, ContentModel.ASPECT_TEMPORARY, null); } // ensure the node still exists before deleting if (this.getNodeService().exists(node.getNodeRef())) { this.getNodeService().deleteNode(nodeRef); } tx.commit(); } catch (Throwable err) { try { if (tx != null) { tx.rollback(); } } catch (Exception ex) { } } } } } finally { if (isAdmin && !this.executeRules) { Repository.getServiceRegistry(context).getRuleService().enableRules(); } } } else { logger.warn("WARNING: delete called without a current Space!"); } return outcome; }
From source file:org.alfresco.web.bean.users.DeleteUserDialog.java
public String search() { if (this.searchCriteria == null || this.searchCriteria.length() == 0) { this.users = Collections.<Node>emptyList(); } else {/*w w w . j av a 2s .c o m*/ FacesContext context = FacesContext.getCurrentInstance(); UserTransaction tx = null; try { tx = Repository.getUserTransaction(context, true); tx.begin(); // define the query to find people by their first or last name String search = ISO9075.encode(this.searchCriteria); List<Pair<QName, String>> filter = Utils.generatePersonFilter(search); if (logger.isDebugEnabled()) { logger.debug("Query filter: " + filter); } List<PersonInfo> persons = getPersonService().getPeople(filter, true, Utils.generatePersonSort(), new PagingRequest(Utils.getPersonMaxResults(), null)).getPage(); if (logger.isDebugEnabled()) { logger.debug("Found " + persons.size() + " users"); } this.users = new ArrayList<Node>(persons.size()); for (PersonInfo person : persons) { // create our Node representation MapNode node = new MapNode(person.getNodeRef()); // set data binding properties // this will also force initialisation of the props now during the UserTransaction // it is much better for performance to do this now rather than during page bind Map<String, Object> props = node.getProperties(); props.put("fullName", ((String) props.get("firstName")) + ' ' + ((String) props.get("lastName"))); NodeRef homeFolderNodeRef = (NodeRef) props.get("homeFolder"); if (homeFolderNodeRef != null) { props.put("homeSpace", homeFolderNodeRef); } this.users.add(node); } // commit the transaction tx.commit(); } catch (InvalidNodeRefException refErr) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(context, Repository.ERROR_NODEREF), new Object[] { "root" })); this.users = Collections.<Node>emptyList(); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } catch (Exception err) { Utils.addErrorMessage(MessageFormat .format(Application.getMessage(context, Repository.ERROR_GENERIC), err.getMessage()), err); this.users = Collections.<Node>emptyList(); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } } // return null to stay on the same page return null; }
From source file:org.alfresco.web.bean.users.UsersDialog.java
/** * Action handler called for the OK button press *//*from ww w . jav a 2 s . co m*/ public String changeUserDetails() { String outcome = DIALOG_CLOSE; FacesContext context = FacesContext.getCurrentInstance(); UserTransaction tx = null; try { tx = Repository.getUserTransaction(context); tx.begin(); Map<QName, Serializable> props = properties.getNodeService() .getProperties(properties.getPerson().getNodeRef()); props.put(ContentModel.PROP_FIRSTNAME, (String) properties.getPerson().getProperties().get(ContentModel.PROP_FIRSTNAME)); props.put(ContentModel.PROP_LASTNAME, (String) properties.getPerson().getProperties().get(ContentModel.PROP_LASTNAME)); props.put(ContentModel.PROP_EMAIL, (String) properties.getPerson().getProperties().get(ContentModel.PROP_EMAIL)); // persist changes properties.getNodeService().setProperties(properties.getPerson().getNodeRef(), props); tx.commit(); // if the above call was successful, then reset Person Node in the session Application.getCurrentUser(context).reset(); } catch (Throwable err) { Utils.addErrorMessage(MessageFormat.format(Application.getMessage(context, Repository.ERROR_GENERIC), err.getMessage()), err); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } return outcome; }
From source file:org.alfresco.web.bean.users.UsersDialog.java
/** * Event handler called when the user wishes to search for a user * // ww w. j av a2s .c o m * @return The outcome */ public String search() { properties.getUsersRichList().setValue(null); if (properties.getSearchCriteria() == null || properties.getSearchCriteria().trim().length() == 0) { this.users = Collections.<Node>emptyList(); } else { FacesContext context = FacesContext.getCurrentInstance(); UserTransaction tx = null; try { tx = Repository.getUserTransaction(context, true); tx.begin(); // define the query to find people by their first or last name String search = properties.getSearchCriteria(); if (logger.isDebugEnabled()) { logger.debug("Query filter: " + search); } List<PersonInfo> persons = properties .getPersonService().getPeople(Utils.generatePersonFilter(search), true, Utils.generatePersonSort(), new PagingRequest(Utils.getPersonMaxResults(), null)) .getPage(); if (logger.isDebugEnabled()) { logger.debug("Found " + persons.size() + " users"); } this.users = new ArrayList<Node>(persons.size()); for (PersonInfo person : persons) { // create our Node representation MapNode node = new MapNode(person.getNodeRef()); // set data binding properties // this will also force initialisation of the props now during the UserTransaction // it is much better for performance to do this now rather than during page bind Map<String, Object> props = node.getProperties(); String firstName = (String) props.get("firstName"); String lastName = (String) props.get("lastName"); props.put("fullName", (firstName != null ? firstName : "") + ' ' + (lastName != null ? lastName : "")); NodeRef homeFolderNodeRef = (NodeRef) props.get("homeFolder"); if (homeFolderNodeRef != null) { props.put("homeSpace", homeFolderNodeRef); } node.addPropertyResolver("sizeLatest", this.resolverUserSizeLatest); node.addPropertyResolver("quota", this.resolverUserQuota); node.addPropertyResolver("isMutable", this.resolverUserMutable); this.users.add(node); } // commit the transaction tx.commit(); } catch (InvalidNodeRefException refErr) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(context, Repository.ERROR_NODEREF), new Object[] { "root" })); this.users = Collections.<Node>emptyList(); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } catch (Exception err) { Utils.addErrorMessage(MessageFormat .format(Application.getMessage(context, Repository.ERROR_GENERIC), err.getMessage()), err); this.users = Collections.<Node>emptyList(); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } } // return null to stay on the same page return null; }
From source file:org.alfresco.web.bean.users.UserShortcutsBean.java
/** * @return the List of shortcut Nodes// w ww . j a v a 2 s . c o m */ public List<Node> getShortcuts() { if (this.shortcuts == null) { List<String> shortcuts = null; NodeRef prefRef = null; UserTransaction tx = null; boolean rollback = false; try { FacesContext context = FacesContext.getCurrentInstance(); tx = Repository.getUserTransaction(context); tx.begin(); // get the shortcuts from the preferences for this user shortcuts = getShortcutList(context); if (shortcuts.size() != 0) { // each shortcut node ID is persisted as a list item in a well known property this.shortcuts = new ArrayList<Node>(shortcuts.size()); for (int i = 0; i < shortcuts.size(); i++) { NodeRef ref = new NodeRef(Repository.getStoreRef(), shortcuts.get(i)); try { if (this.getNodeService().exists(ref) == true) { Node node = new Node(ref); // quick init properties while in the usertransaction node.getProperties(); // save ref to the Node for rendering this.shortcuts.add(node); } else { // ignore this shortcut node - no longer exists in the system! // we write the node list back again afterwards to correct this if (logger.isDebugEnabled()) logger.debug("Found invalid shortcut node Id: " + ref.getId()); } } catch (AccessDeniedException accessErr) { // ignore this shortcut node - no longer exists in the system! // we write the node list back again afterwards to correct this if (logger.isDebugEnabled()) logger.debug("Found invalid shortcut node Id: " + ref.getId()); rollback = true; } } } else { this.shortcuts = new ArrayList<Node>(5); } if (rollback == false) { tx.commit(); } else { tx.rollback(); } } catch (Throwable err) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), err.getMessage()), err); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } // if the count of accessable shortcuts is different to our original list then // write the valid shortcut IDs back to correct invalid node refs if (shortcuts != null && shortcuts.size() != this.shortcuts.size()) { try { shortcuts = new ArrayList<String>(this.shortcuts.size()); for (int i = 0; i < this.shortcuts.size(); i++) { shortcuts.add(this.shortcuts.get(i).getId()); } PreferencesService.getPreferences().setValue(PREF_SHORTCUTS, (Serializable) shortcuts); } catch (Exception err) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), err.getMessage()), err); } } } return this.shortcuts; }
From source file:org.alfresco.web.bean.users.UserShortcutsBean.java
/** * Action handler called when a new shortcut is to be added to the list *//* w w w . ja v a 2 s . c o m*/ public void createShortcut(ActionEvent event) { // TODO: add this action to the Details screen for Space and Document UIActionLink link = (UIActionLink) event.getComponent(); Map<String, String> params = link.getParameterMap(); String id = params.get("id"); if (id != null && id.length() != 0) { try { NodeRef ref = new NodeRef(Repository.getStoreRef(), id); Node node = new Node(ref); boolean foundShortcut = false; for (int i = 0; i < getShortcuts().size(); i++) { if (node.getId().equals(getShortcuts().get(i).getId())) { // found same node already in the list - so we don't need to add it again foundShortcut = true; break; } } if (foundShortcut == false) { // add to persistent store UserTransaction tx = null; try { FacesContext context = FacesContext.getCurrentInstance(); tx = Repository.getUserTransaction(context); tx.begin(); List<String> shortcuts = getShortcutList(context); shortcuts.add(node.getNodeRef().getId()); PreferencesService.getPreferences(context).setValue(PREF_SHORTCUTS, (Serializable) shortcuts); // commit the transaction tx.commit(); // add our new shortcut Node to the in-memory list getShortcuts().add(node); if (logger.isDebugEnabled()) logger.debug("Added node: " + node.getName() + " to the user shortcuts list."); } catch (Throwable err) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), err.getMessage()), err); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } } } catch (InvalidNodeRefException refErr) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_NODEREF), new Object[] { id })); } } }
From source file:org.alfresco.web.bean.users.UserShortcutsBean.java
/** * Action handler bound to the user shortcuts Shelf component called when a node is removed *//*from w w w . j a v a 2s. c o m*/ public void removeShortcut(ActionEvent event) { UIShortcutsShelfItem.ShortcutEvent shortcutEvent = (UIShortcutsShelfItem.ShortcutEvent) event; // remove from persistent store UserTransaction tx = null; try { FacesContext context = FacesContext.getCurrentInstance(); tx = Repository.getUserTransaction(context); tx.begin(); List<String> shortcuts = getShortcutList(context); if (shortcuts.size() > shortcutEvent.Index) { // remove the shortcut from the saved list and persist back shortcuts.remove(shortcutEvent.Index); PreferencesService.getPreferences(context).setValue(PREF_SHORTCUTS, (Serializable) shortcuts); // commit the transaction tx.commit(); // remove shortcut Node from the in-memory list Node node = getShortcuts().remove(shortcutEvent.Index); if (logger.isDebugEnabled()) logger.debug("Removed node: " + node.getName() + " from the user shortcuts list."); } } catch (Throwable err) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), err.getMessage()), err); try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } }
From source file:org.alfresco.web.bean.users.UserShortcutsBean.java
/** * Action handler bound to the user shortcuts Shelf component called when a node is clicked *//* w ww. j ava2 s . co m*/ public void click(ActionEvent event) { // work out which node was clicked from the event data UIShortcutsShelfItem.ShortcutEvent shortcutEvent = (UIShortcutsShelfItem.ShortcutEvent) event; Node selectedNode = getShortcuts().get(shortcutEvent.Index); try { if (getPermissionService().hasPermission(selectedNode.getNodeRef(), PermissionService.READ) == AccessStatus.ALLOWED) { if (getNodeService().exists(selectedNode.getNodeRef()) == false) { throw new InvalidNodeRefException(selectedNode.getNodeRef()); } DictionaryService dd = Repository.getServiceRegistry(FacesContext.getCurrentInstance()) .getDictionaryService(); if (dd.isSubClass(selectedNode.getType(), ContentModel.TYPE_FOLDER)) { // then navigate to the appropriate node in UI // use browse bean functionality for this as it will update the breadcrumb for us this.browseBean.updateUILocation(selectedNode.getNodeRef()); } else if (dd.isSubClass(selectedNode.getType(), ContentModel.TYPE_CONTENT)) { // view details for document this.browseBean.setupContentAction(selectedNode.getId(), true); FacesContext fc = FacesContext.getCurrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "dialog:showDocDetails"); } } else { Utils.addErrorMessage( Application.getMessage(FacesContext.getCurrentInstance(), "error_shortcut_permissions")); } } catch (InvalidNodeRefException refErr) { Utils.addErrorMessage(MessageFormat.format( Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_NODEREF), new Object[] { selectedNode.getId() })); // remove item from the shortcut list UserTransaction tx = null; try { FacesContext context = FacesContext.getCurrentInstance(); tx = Repository.getUserTransaction(context); tx.begin(); List<String> shortcuts = getShortcutList(context); if (shortcuts.size() > shortcutEvent.Index) { // remove the shortcut from the saved list and persist back shortcuts.remove(shortcutEvent.Index); PreferencesService.getPreferences(context).setValue(PREF_SHORTCUTS, (Serializable) shortcuts); // commit the transaction tx.commit(); // remove shortcut Node from the in-memory list Node node = getShortcuts().remove(shortcutEvent.Index); if (logger.isDebugEnabled()) logger.debug("Removed deleted node: " + node.getName() + " from the user shortcuts list."); } } catch (Throwable err) { try { if (tx != null) { tx.rollback(); } } catch (Exception tex) { } } } }