/* Name: - AccessRightsView Description: - Requires: - Provides: - Part of: ProcessPuzzle Framework, Domain and Business Model Ready Architecture. Provides content, workflow and social networking functionality. http://www.processpuzzle.com ProcessPuzzle - Content and Workflow Management Integration Business Platform Author(s): - Zsolt Zsuffa Copyright: (C) 2011 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.processpuzzle.artifact.domain; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext; import com.processpuzzle.application.security.domain.AccessRight; import com.processpuzzle.application.security.domain.User; import com.processpuzzle.application.security.domain.UserRepository; import com.processpuzzle.artifact_type.domain.ArtifactType; import com.processpuzzle.artifact_type.domain.ArtifactViewType; import com.processpuzzle.commons.persistence.RepositoryResultSet; import com.processpuzzle.party.domain.Person; import com.processpuzzle.party.domain.PersonRepository; import com.processpuzzle.persistence.domain.DefaultUnitOfWork; public class AccessRightsView extends ArtifactView<Artifact<?>> { private String rightId; private String userId = null; private UserRepository userRepository; private PersonRepository personRepository; public AccessRightsView( Artifact<?> artifact, String name, ArtifactViewType type ) { super( artifact, name, type ); userRepository = applicationContext.getRepository( UserRepository.class ); personRepository = applicationContext.getRepository( PersonRepository.class ); } public void initializeView() {} public String getRightId() { return rightId; } public void setUserId( String userId ) { this.userId = userId; } public Map<String, AccessRight> getRightsForArtifact() { DefaultUnitOfWork work = new DefaultUnitOfWork( true ); UserRepository userRepository = (UserRepository) ProcessPuzzleContext.getInstance().getRepository( UserRepository.class ); Map<String, AccessRight> accessRights = new HashMap<String, AccessRight>(); if( loggedInUser != null ){ if( loggedInUser.getUserName().equals( "Administrator" ) ){ for( Iterator<User> pIt = userRepository.findAllUser( work ).iterator(); pIt.hasNext(); ){ User user = (User) pIt.next(); AccessRight right = getRightByUserAndAccessControlledObject( work, user, parentArtifact.getName() ); if( right != null ){ accessRights.put( user.getId().toString(), right ); }else{ accessRights.put( user.getId().toString(), (AccessRight) ((ArtifactType) parentArtifact.getType()).getDefaultRightByUserRole( "Administrator" ) ); } } }else{ AccessRight right = getRightByUserAndAccessControlledObject( work, loggedInUser, parentArtifact.getName() ); if( right != null ){ accessRights.put( loggedInUser.getId().toString(), right ); }else{ accessRights.put( loggedInUser.getId().toString(), (AccessRight) ((ArtifactType) parentArtifact.getType()).getDefaultRightByUserRole( "User" ) ); } } } work.finish(); return accessRights; } private AccessRight getRightByUserAndAccessControlledObject( DefaultUnitOfWork work, User user, String name ) { RepositoryResultSet<User> users = userRepository.findUserByAccessRightName( work, parentArtifact.getName() ); AccessRight right = null; for( Iterator<User> i = users.iterator(); i.hasNext(); ){ User u = (User) i.next(); if( u.getId() == user.getId() ){ right = u.getRightByName( parentArtifact.getId() ); break; } } return right; } public String getUserName() { DefaultUnitOfWork work = new DefaultUnitOfWork( true ); Person person = personRepository.findByUserId( work, userId ); work.finish(); return person.getPartyName().getName(); } public void setCanModify( String newValue ) { // StringTokenizer tokenizer = new StringTokenizer(newValue, "_"); // boolean canModify = new Boolean(tokenizer.nextToken()).booleanValue(); // UnitOfWork work = new UnitOfWork(true); // User user = userRepository.findUserById(work, new Integer(tokenizer.nextToken())); // //DefaultAccessRight right = getRight(tokenizer.nextToken()); // User defaultUser=userRepository.findUserByAccessRightId(work, new Integer(tokenizer.nextToken())); // DefaultAccessRight right=defaultUser.getRightById(new Integer(tokenizer.nextToken())); // DefaultAccessRight defRight = ((ArtifactType) // parentArtifact.getType()).getDefaultRightByUserRole("Administrator"); // if (right.isDefault()) { // if (right.getCanModify() != canModify) { // AccessRight aRight = new AccessRight(user, parentArtifact, defRight.getCanRead(), defRight.getCanCreate(), // canModify, defRight // .getCanDelete()); // //arRepository.addAccessRight(work, aRight); // user.addAccessRight(aRight); // userRepository.updateUser(work, defaultUser); // } // } else { // if (right.getCanModify() != canModify) { // right.setCanModify(canModify); // userRepository.updateUser(work, defaultUser); // } // } // work.finish(); } public void setCanCreate( String newValue ) { // UnitOfWork work = new UnitOfWork(true); // StringTokenizer tokenizer = new StringTokenizer(newValue, "_"); // boolean canCreate = new Boolean(tokenizer.nextToken()).booleanValue(); // User user = userRepository.findUserById(work, new Integer(tokenizer.nextToken())); // User defaultUser=userRepository.findUserByAccessRightId(work, new Integer(tokenizer.nextToken())); // DefaultAccessRight right=defaultUser.getRightById(new Integer(tokenizer.nextToken())); // DefaultAccessRight defRight = ((ArtifactType) // parentArtifact.getType()).getDefaultRightByUserRole("Administrator"); // if (right.isDefault()) { // if (right.getCanCreate() != canCreate) { // AccessRight aRight = new AccessRight(user, parentArtifact, defRight.getCanRead(), canCreate, // defRight.getCanModify(), defRight // .getCanDelete()); // user.addAccessRight(aRight); // userRepository.updateUser(work, defaultUser); // } // } else { // if (right.getCanCreate() != canCreate) { // right.setCanCreate(canCreate); // //arRepository.updateAccessRight(work, right); // userRepository.updateUser(work, defaultUser); // } // } // work.finish(); } public void setCanDelete( String newValue ) { // UnitOfWork work = new UnitOfWork(true); // StringTokenizer tokenizer = new StringTokenizer(newValue, "_"); // boolean canDelete = new Boolean(tokenizer.nextToken()).booleanValue(); // User user = userRepository.findUserById(work, new Integer(tokenizer.nextToken())); // // User defaultUser=userRepository.findUserByAccessRightId(work, new Integer(tokenizer.nextToken())); // DefaultAccessRight right=defaultUser.getRightById(new Integer(tokenizer.nextToken())); // // DefaultAccessRight defRight = ((ArtifactType) // parentArtifact.getType()).getDefaultRightByUserRole("Administrator"); // if (right.isDefault()) { // if (right.getCanDelete() != canDelete) { // AccessRight aRight = new AccessRight(user, parentArtifact, defRight.getCanRead(), defRight.getCanCreate(), // defRight // .getCanModify(), canDelete); // //arRepository.addAccessRight(work, aRight); // user.addAccessRight(aRight); // userRepository.updateUser(work, defaultUser); // } // } else { // if (right.getCanDelete() != canDelete) { // right.setCanDelete(canDelete); // //arRepository.updateAccessRight(work, right); // userRepository.updateUser(work, defaultUser); // } // } // work.finish(); } public void setCanRead( String newValue ) { // UnitOfWork work = new UnitOfWork(true); // StringTokenizer tokenizer = new StringTokenizer(newValue, "_"); // boolean canRead = new Boolean(tokenizer.nextToken()).booleanValue(); // User user = userRepository.findUserById(work, new Integer(tokenizer.nextToken())); // // User defaultUser=userRepository.findUserByAccessRightId(work, new Integer(tokenizer.nextToken())); // DefaultAccessRight right=defaultUser.getRightById(new Integer(tokenizer.nextToken())); // // DefaultAccessRight defRight = ((ArtifactType) // parentArtifact.getType()).getDefaultRightByUserRole("Administrator"); // if (right.isDefault()) { // if (right.getCanRead() != canRead) { // AccessRight aRight = new AccessRight(user, parentArtifact, canRead, defRight.getCanCreate(), // defRight.getCanModify(), defRight // .getCanDelete()); // //arRepository.addAccessRight(work, aRight); // user.addAccessRight(aRight); // userRepository.updateUser(work, defaultUser); // } // } else { // if (right.getCanRead() != canRead) { // right.setCanRead(canRead); // //arRepository.updateAccessRight(work, right); // userRepository.updateUser(work, defaultUser); // } // } // work.finish(); } // public DefaultAccessRight getRight(String rightId) { // UnitOfWork work = new UnitOfWork(true); // UserRepository userRepository = (UserRepository) // ProcessPuzzleContext.getInstance().getRepository(UserRepository.class); // DefaultAccessRight right = userRepository.getRight(work, rightId); // work.finish(); // return right; // } }