001package org.apache.archiva.redback.rbac.jpa.model; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import org.apache.archiva.redback.rbac.AbstractRole; 023import org.apache.archiva.redback.rbac.Permission; 024import org.apache.archiva.redback.rbac.Role; 025import org.slf4j.Logger; 026import org.slf4j.LoggerFactory; 027import org.springframework.core.annotation.Order; 028 029import javax.persistence.*; 030import java.io.Serializable; 031import java.util.ArrayList; 032import java.util.List; 033 034/** 035 * Created by martin on 25.09.16. 036 */ 037@Entity 038@Table( 039 name="SECURITY_ROLES" 040) 041@IdClass( RoleId.class ) 042public class JpaRole extends AbstractRole implements Serializable { 043 044 private static final Logger log = LoggerFactory.getLogger( JpaRole.class ); 045 private static final long serialVersionUID = 4564608138465995665L; 046 047 @Id 048 @Column(name="NAME", unique = true) 049 private String name; 050 @Id 051 @Column( name = "ID", unique = true ) 052 private String id; 053 @Column(name="DESCRIPTION") 054 private String description; 055 @Column(name="ASSIGNABLE",nullable = false) 056 private Boolean assignable = false; 057 @Column(name="PERMANENT", nullable = false) 058 private Boolean permanent = false; 059 @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 060 @OrderColumn(name="INTEGER_IDX", nullable = false) 061 @JoinTable( 062 name="SECURITY_ROLE_PERMISSION_MAP", 063 joinColumns={ @JoinColumn(name="NAME_OID", referencedColumnName="NAME", nullable = false) }, 064 inverseJoinColumns = { 065 @JoinColumn(name="NAME_EID",referencedColumnName = "NAME") 066 } 067 ) 068 List<JpaPermission> permissions = new ArrayList<JpaPermission>(); 069 070 @ElementCollection(fetch = FetchType.EAGER) 071 @OrderColumn(name="INTEGER_IDX",nullable = false) 072 @Column(name="STRING_ELE") 073 @CollectionTable( 074 name="SECURITY_ROLE_CHILDROLE_MAP", 075 joinColumns = { 076 @JoinColumn(name="NAME_OID",referencedColumnName = "NAME", nullable = false) 077 } 078 ) 079 List<String> childRoleNames = new ArrayList<String>(); 080 081 @ElementCollection(fetch = FetchType.EAGER) 082 @OrderColumn(name="INTEGER_IDX",nullable = false) 083 @Column(name="CHILD_IDS") 084 @CollectionTable( 085 name="SECURITY_ROLE_CHILDROLE_ID_MAP", 086 joinColumns = { 087 @JoinColumn(name="ID_OID",referencedColumnName = "ID", nullable = false) 088 } 089 ) 090 List<String> childRoleIds = new ArrayList<String>(); 091 092 @Column(name="TEMPLATE_INSTANCE",nullable = false) 093 private Boolean templateInstance = false; 094 095 @Column(name="MODEL_ID",nullable = false) 096 private String modelId = ""; 097 098 @Column(name="RESOURCE",nullable = false) 099 private String resource = ""; 100 101 public JpaRole( ) 102 { 103 } 104 105 @Override 106 public void addPermission(Permission permission) { 107 if (permission instanceof JpaPermission) { 108 this.permissions.add((JpaPermission) permission); 109 } 110 111 } 112 113 @Override 114 public void addChildRoleName(String name) { 115 this.childRoleNames.add(name); 116 } 117 118 @Override 119 public void addChildRoleId( String id ) 120 { 121 this.childRoleIds.add( id ); 122 } 123 124 @Override 125 public List<String> getChildRoleNames() { 126 return childRoleNames; 127 } 128 129 @Override 130 public List<String> getChildRoleIds( ) 131 { 132 return childRoleIds; 133 } 134 135 @Override 136 public String getDescription() { 137 return description; 138 } 139 140 @Override 141 public String getName() { 142 return name; 143 } 144 145 @Override 146 public List<? extends Permission> getPermissions() { 147 return permissions; 148 } 149 150 @Override 151 public boolean isAssignable() { 152 return assignable; 153 } 154 155 @Override 156 public void removePermission(Permission permission) { 157 this.permissions.remove(permission); 158 } 159 160 @Override 161 public void setAssignable(boolean assignable) { 162 this.assignable=assignable; 163 } 164 165 @Override 166 public void setChildRoleNames(List<String> names) { 167 this.childRoleNames.clear(); 168 this.childRoleNames.addAll(names); 169 } 170 171 @Override 172 public void setChildRoleIds( List<String> childRoleIds ) 173 { 174 this.childRoleIds.clear(); 175 this.childRoleIds.addAll( childRoleIds ); 176 } 177 178 @Override 179 public void setDescription(String description) { 180 this.description=description; 181 182 } 183 184 @Override 185 public void setName(String name) { 186 this.name=name; 187 188 } 189 190 @Override 191 public void setPermissions(List<Permission> permissions) { 192 this.permissions.clear(); 193 for (Permission p : permissions) { 194 if (p instanceof JpaPermission) { 195 permissions.add(p); 196 } 197 } 198 } 199 200 @Override 201 public boolean isPermanent() { 202 return permanent; 203 } 204 205 @Override 206 public void setPermanent(boolean permanent) { 207 this.permanent=permanent; 208 } 209 210 @Override 211 public void setId( String id ) 212 { 213 if (id==null) { 214 log.error( "Null value for role id" ); 215 throw new NullPointerException( "ID may not be null" ); 216 } 217 this.id = id; 218 } 219 220 @Override 221 public String getId( ) 222 { 223 return id; 224 } 225 226 @Override 227 public void setModelId( String modelId ) 228 { 229 if (modelId==null) { 230 this.modelId = ""; 231 } else 232 { 233 this.modelId = modelId; 234 } 235 } 236 237 @Override 238 public String getModelId( ) 239 { 240 return modelId; 241 } 242 243 @Override 244 public void setTemplateInstance( boolean templateInstanceFlag ) 245 { 246 this.templateInstance = templateInstanceFlag; 247 } 248 249 @Override 250 public boolean isTemplateInstance( ) 251 { 252 return this.templateInstance; 253 } 254 255 @Override 256 public void setResource( String resource ) 257 { 258 if (resource==null) { 259 this.resource = ""; 260 } else 261 { 262 this.resource = resource; 263 } 264 } 265 266 @Override 267 public String getResource( ) 268 { 269 return resource; 270 } 271 272 @Override 273 public boolean equals( Object o ) 274 { 275 if ( this == o ) return true; 276 if ( o == null || getClass( ) != o.getClass( ) ) return false; 277 if ( !super.equals( o ) ) return false; 278 279 JpaRole jpaRole = (JpaRole) o; 280 281 if ( !name.equals( jpaRole.name ) ) return false; 282 return id.equals( jpaRole.id ); 283 } 284 285 @Override 286 public int hashCode( ) 287 { 288 int result = name.hashCode( ); 289 result = 31 * result + id.hashCode( ); 290 return result; 291 } 292}