| /* |
| * Copyright (c) 2012 Eike Stepper (Berlin, Germany) and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.emf.cdo.security; |
| |
| import org.eclipse.net4j.util.ObjectUtil; |
| |
| import org.eclipse.emf.common.util.BasicEList; |
| import org.eclipse.emf.common.util.EList; |
| |
| import java.util.Iterator; |
| |
| /** |
| * Various static helper methods for dealing with {@link Realm realms}. |
| * |
| * @author Eike Stepper |
| */ |
| public final class RealmUtil |
| { |
| private RealmUtil() |
| { |
| } |
| |
| public static User findUser(EList<SecurityItem> items, String userID) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof User) |
| { |
| User user = (User)item; |
| if (ObjectUtil.equals(user.getId(), userID)) |
| { |
| return user; |
| } |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| User user = findUser(directory.getItems(), userID); |
| if (user != null) |
| { |
| return user; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| public static Group findGroup(EList<SecurityItem> items, String groupID) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof Group) |
| { |
| Group group = (Group)item; |
| if (ObjectUtil.equals(group.getId(), groupID)) |
| { |
| return group; |
| } |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| Group group = findGroup(directory.getItems(), groupID); |
| if (group != null) |
| { |
| return group; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| public static Role findRole(EList<SecurityItem> items, String roleID) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof Role) |
| { |
| Role role = (Role)item; |
| if (ObjectUtil.equals(role.getId(), roleID)) |
| { |
| return role; |
| } |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| Role role = findRole(directory.getItems(), roleID); |
| if (role != null) |
| { |
| return role; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @since 4.2 |
| */ |
| public static User removeUser(EList<SecurityItem> items, String userID) |
| { |
| for (Iterator<SecurityItem> it = items.iterator(); it.hasNext();) |
| { |
| SecurityItem item = it.next(); |
| if (item instanceof User) |
| { |
| User user = (User)item; |
| if (ObjectUtil.equals(user.getId(), userID)) |
| { |
| it.remove(); |
| return user; |
| } |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| User user = removeUser(directory.getItems(), userID); |
| if (user != null) |
| { |
| return user; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @since 4.2 |
| */ |
| public static Group removeGroup(EList<SecurityItem> items, String groupID) |
| { |
| for (Iterator<SecurityItem> it = items.iterator(); it.hasNext();) |
| { |
| SecurityItem item = it.next(); |
| if (item instanceof Group) |
| { |
| Group group = (Group)item; |
| if (ObjectUtil.equals(group.getId(), groupID)) |
| { |
| it.remove(); |
| return group; |
| } |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| Group group = removeGroup(directory.getItems(), groupID); |
| if (group != null) |
| { |
| return group; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @since 4.2 |
| */ |
| public static Role removeRole(EList<SecurityItem> items, String roleID) |
| { |
| for (Iterator<SecurityItem> it = items.iterator(); it.hasNext();) |
| { |
| SecurityItem item = it.next(); |
| if (item instanceof Role) |
| { |
| Role role = (Role)item; |
| if (ObjectUtil.equals(role.getId(), roleID)) |
| { |
| it.remove(); |
| return role; |
| } |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| Role role = removeRole(directory.getItems(), roleID); |
| if (role != null) |
| { |
| return role; |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| public static BasicEList<User> allUsers(EList<SecurityItem> items) |
| { |
| BasicEList<User> result = new BasicEList<User>(); |
| allUsers(items, result); |
| return result; |
| } |
| |
| public static BasicEList<Group> allGroups(EList<SecurityItem> items) |
| { |
| BasicEList<Group> result = new BasicEList<Group>(); |
| allGroups(items, result); |
| return result; |
| } |
| |
| public static BasicEList<Role> allRoles(EList<SecurityItem> items) |
| { |
| BasicEList<Role> result = new BasicEList<Role>(); |
| allRoles(items, result); |
| return result; |
| } |
| |
| public static BasicEList<Permission> allPermissions(EList<SecurityItem> items) |
| { |
| BasicEList<Permission> result = new BasicEList<Permission>(); |
| allPermissions(items, result); |
| return result; |
| } |
| |
| private static void allUsers(EList<SecurityItem> items, EList<User> result) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof User) |
| { |
| User user = (User)item; |
| result.add(user); |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| allUsers(directory.getItems(), result); |
| } |
| } |
| } |
| |
| private static void allGroups(EList<SecurityItem> items, EList<Group> result) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof Group) |
| { |
| Group group = (Group)item; |
| result.add(group); |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| allGroups(directory.getItems(), result); |
| } |
| } |
| } |
| |
| private static void allRoles(EList<SecurityItem> items, EList<Role> result) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof Role) |
| { |
| Role role = (Role)item; |
| result.add(role); |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| allRoles(directory.getItems(), result); |
| } |
| } |
| } |
| |
| private static void allPermissions(EList<SecurityItem> items, EList<Permission> result) |
| { |
| for (SecurityItem item : items) |
| { |
| if (item instanceof Role) |
| { |
| Role role = (Role)item; |
| result.addAll(role.getPermissions()); |
| } |
| else if (item instanceof Directory) |
| { |
| Directory directory = (Directory)item; |
| allPermissions(directory.getItems(), result); |
| } |
| } |
| } |
| } |