/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * 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. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.security.rolesandpermission.business; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.JoinColumn; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Version; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.mifos.framework.business.AbstractBusinessObject; import org.mifos.security.rolesandpermission.exceptions.RolesPermissionException; import org.mifos.security.util.UserContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @NamedQueries({ @NamedQuery(name = "getRoleForGivenName", query = "FROM RoleBO role WHERE role.name =:RoleName"), @NamedQuery(name = "getAllRoles", query = "from RoleBO role order by role.name") }) @Entity @Table(name = "role") public class RoleBO extends AbstractBusinessObject { private static final Logger logger = LoggerFactory.getLogger(RoleBO.class); @Id @GeneratedValue(generator = "generator") @GenericGenerator(name = "generator", strategy = "increment") @Column(name = "role_id", nullable = false) private Short id = null; @Column(name = "role_name") private String name; @Column(name = "created_date") private Date createdDate; @Column(name = "created_by") private Short createdBy; @Column(name = "updated_date") private Date updatedDate; @Column(name = "updated_by") private Short updatedBy; @Version @Column(name = "version_no", nullable = false) private Integer versionNo; @ManyToMany @JoinTable(name = "roles_activity", joinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "role_id") }, inverseJoinColumns = { @JoinColumn(name = "activity_id", referencedColumnName = "activity_id") }) private final Set<ActivityEntity> activities = new HashSet<ActivityEntity>(0); @OneToMany(orphanRemoval=true, cascade = { CascadeType.ALL}, mappedBy="role") private final Set<RoleActivityRestrictionBO> restrictions = new HashSet<RoleActivityRestrictionBO>(0); @SuppressWarnings("unused") private RoleBO() { } public RoleBO(UserContext userContext, String roleName, List<ActivityEntity> activityList) throws RolesPermissionException { super(userContext); logger.info("Creating a new role:" + roleName); name = roleName; createRoleActivites(activityList); setCreateDetails(); logger.info("New role created:" + roleName); } public RoleBO(UserContext userContext, String roleName, List<ActivityEntity> activityList, List<RoleActivityRestrictionBO> restrictionsList) throws RolesPermissionException{ this(userContext, roleName, activityList); createRoleActivitiesRestrictions(restrictionsList); } public Short getId() { return id; } public String getName() { return name; } public Set<ActivityEntity> getActivities() { return activities; } public Set<RoleActivityRestrictionBO> getRestrictions() { return restrictions; } public List<Short> getActivityIds() { List<Short> ids = new ArrayList<Short>(); for (ActivityEntity activity : activities) { ids.add(activity.getId()); } return ids; } @Override public Short getCreatedBy() { return createdBy; } @Override public void setCreatedBy(Short createdBy) { this.createdBy = createdBy; } @Override public Date getCreatedDate() { return createdDate; } @Override public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; } @Override public Short getUpdatedBy() { return updatedBy; } @Override public void setUpdatedBy(Short updatedBy) { this.updatedBy = updatedBy; } @Override public Date getUpdatedDate() { return updatedDate; } @Override public void setUpdatedDate(Date updatedDate) { this.updatedDate = updatedDate; } @Override public Integer getVersionNo() { return versionNo; } @Override public void setVersionNo(Integer versionNo) { this.versionNo = versionNo; } public void update(Short perosnnelId, String roleName, List<ActivityEntity> activityList) throws RolesPermissionException { logger.info("Updating role"); name = roleName; createRoleActivites(activityList); setUpdateDetails(perosnnelId); logger.info("Role updated"); } public void updateWithActivitiesRestrictions(Short perosnnelId, String roleName, List<ActivityEntity> activityList, List<RoleActivityRestrictionBO> activityRestrictionBOList) throws RolesPermissionException { if (activityRestrictionBOList != null){ createRoleActivitiesRestrictions(activityRestrictionBOList); } update(perosnnelId, roleName, activityList); } private void createRoleActivites(List<ActivityEntity> activityList) { activities.clear(); if(activityList != null) { activities.addAll(activityList); } } private void createRoleActivitiesRestrictions(List<RoleActivityRestrictionBO> activitiesRestrictions) { restrictions.clear(); for ( RoleActivityRestrictionBO activityRestrictionBO : activitiesRestrictions) { activityRestrictionBO.setRole(this); } restrictions.addAll(activitiesRestrictions); } @Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final RoleBO other = (RoleBO) obj; if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } return true; } @Override public String toString() { return "RoleBO [id=" + id + ", name=" + name + "]"; } }