package org.js.model.rbac.validation;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.js.model.feature.Attribute;
import org.js.model.feature.Feature;
import org.js.model.rbac.AccessControlModel;
import org.js.model.rbac.Group;
import org.js.model.rbac.Role;
import org.js.model.rbac.Subject;
public class DuplicateElementConstraint extends AbstractRbacConstraint {
@Override
String validateTarget(EObject target) {
String msg = null;
EObject eContainer = EcoreUtil.getRootContainer(target);
if (eContainer instanceof AccessControlModel) {
AccessControlModel model = (AccessControlModel) eContainer;
List<EObject> objects = new ArrayList<EObject>();
if (target instanceof Role) {
objects.addAll(model.getRoles());
} else if (target instanceof Subject) {
objects.addAll(model.getSubjects());
} else if (target instanceof Group) {
objects.addAll(model.getGroups());
}
String targetId = EcoreUtil.getID(target);
if (targetId != null) {
for (EObject eObject : objects) {
if (eObject != target) {
String otherObjectId = EcoreUtil.getID(eObject);
if (targetId.equals(otherObjectId)) {
msg = "An element with identifier <" + targetId + "> is already defined";
}
}
}
}
}
return msg;
}
}