/******************************************************************************* * Copyright 2016 Universidad Politécnica de Madrid UPM * * 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.universAAL.ontology.security; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.universAAL.middleware.owl.ManagedIndividual; /** * @author amedrano * */ public class Role extends ManagedIndividual { public static final String MY_URI = SecurityOntology.NAMESPACE + "Role"; public static final String PROP_SUB_ROLES = SecurityOntology.NAMESPACE + "includesRoles"; public static final String PROP_HAS_ACCESS_RIGHTS = SecurityOntology.NAMESPACE + "hasAccessRights"; /** * */ public Role() { } /** * @param uri */ public Role(String uri) { super(uri); } /** * @param uriPrefix * @param numProps */ public Role(String uriPrefix, int numProps) { super(uriPrefix, numProps); } /**{@inheritDoc} */ public String getClassURI() { return MY_URI; } /**{@inheritDoc} */ public int getPropSerializationType(String propURI) { return PROP_SERIALIZATION_FULL; } public List getAllAccessRights(){ return getAllAccessRights(new ArrayList()); } private List getAllAccessRights(List visited){ visited.add(this); ArrayList result = new ArrayList(); Object directAR = getProperty(PROP_HAS_ACCESS_RIGHTS); if (directAR instanceof AccessRight){ result.add(directAR); } if (directAR instanceof List){ for (Iterator i = ((List) directAR).iterator(); i.hasNext();) { Object ar = (Object) i.next(); result.add(ar); } } Object subRole = getProperty(PROP_SUB_ROLES); if (subRole instanceof Role && !visited.contains(subRole)){ result.addAll(((Role)subRole).getAllAccessRights(visited)); } if (subRole instanceof List){ for (Iterator i = ((List) subRole).iterator(); i.hasNext();) { Object sr = (Object) i.next(); if (!visited.contains(sr)) { result.addAll(((Role) sr).getAllAccessRights(visited)); } } } return result; } public void addAccessRight(AccessRight ar){ Object current = getProperty(PROP_HAS_ACCESS_RIGHTS); if (current == null){ setProperty(PROP_HAS_ACCESS_RIGHTS, ar); } else if (current instanceof AccessRight){ ArrayList nar = new ArrayList(); nar.add(current); nar.add(ar); changeProperty(PROP_HAS_ACCESS_RIGHTS, nar); } else if (current instanceof List){ ((List) current).add(ar); changeProperty(PROP_HAS_ACCESS_RIGHTS, current); } } public void removeAccessRight(AccessRight ar) { Object current = getProperty(PROP_HAS_ACCESS_RIGHTS); if (current==null){ return; } else if (current instanceof Role && current.equals(ar)){ changeProperty(PROP_HAS_ACCESS_RIGHTS, null); } else if (current instanceof List){ ((List) current).remove(ar); changeProperty(PROP_HAS_ACCESS_RIGHTS, current); } } public void addSubRole(Role subrole){ Object current = getProperty(PROP_SUB_ROLES); if (current==null){ setProperty(PROP_SUB_ROLES, subrole); } else if (current instanceof Role){ ArrayList nsr = new ArrayList(); nsr.add(current); nsr.add(subrole); changeProperty(PROP_SUB_ROLES, nsr); } else if (current instanceof List){ ((List) current).add(subrole); changeProperty(PROP_SUB_ROLES, current); } } public void removeSubRole(Role subrole){ Object current = getProperty(PROP_SUB_ROLES); if (current==null){ return; } else if (current instanceof Role && current.equals(subrole)){ changeProperty(PROP_SUB_ROLES, null); } else if (current instanceof List){ ((List) current).remove(subrole); changeProperty(PROP_SUB_ROLES, current); } } }