package org.ovirt.engine.core.common.businessentities;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.xml.bind.annotation.XmlType;
import org.ovirt.engine.core.common.VdcObjectType;
@XmlType(name = "ActionGroup")
public enum ActionGroup {
// vm actions groups
CREATE_VM(1, RoleType.USER, VdcObjectType.VM),
DELETE_VM(2, RoleType.USER, VdcObjectType.VM),
EDIT_VM_PROPERTIES(3, RoleType.USER, VdcObjectType.VM),
VM_BASIC_OPERATIONS(4, RoleType.USER, VdcObjectType.VM),
CHANGE_VM_CD(5, RoleType.USER, VdcObjectType.VM),
MIGRATE_VM(6, RoleType.USER, VdcObjectType.VM),
CONNECT_TO_VM(7, RoleType.USER, VdcObjectType.VM),
IMPORT_EXPORT_VM(8, RoleType.ADMIN, VdcObjectType.VM),
CONFIGURE_VM_NETWORK(9, RoleType.USER, VdcObjectType.VM),
CONFIGURE_VM_STORAGE(10, RoleType.USER, VdcObjectType.VM),
MOVE_VM(11, RoleType.USER, VdcObjectType.VM),
MANIPULATE_VM_SNAPSHOTS(12, RoleType.USER, VdcObjectType.VM),
// host (vds) actions groups
CREATE_HOST(100, RoleType.ADMIN, VdcObjectType.VDS),
EDIT_HOST_CONFIGURATION(101, RoleType.ADMIN, VdcObjectType.VDS),
DELETE_HOST(102, RoleType.ADMIN, VdcObjectType.VDS),
MANIPUTLATE_HOST(103, RoleType.ADMIN, VdcObjectType.VDS),
CONFIGURE_HOST_NETWORK(104, RoleType.ADMIN, VdcObjectType.VDS),
// templates actions groups
CREATE_TEMPLATE(200, RoleType.USER, VdcObjectType.VmTemplate),
EDIT_TEMPLATE_PROPERTIES(201, RoleType.USER, VdcObjectType.VmTemplate),
DELETE_TEMPLATE(202, RoleType.USER, VdcObjectType.VmTemplate),
COPY_TEMPLATE(203, RoleType.USER, VdcObjectType.VmTemplate),
CONFIGURE_TEMPLATE_NETWORK(204, RoleType.USER, VdcObjectType.VmTemplate),
// vm pools actions groups
CREATE_VM_POOL(300, RoleType.USER, VdcObjectType.VmPool),
EDIT_VM_POOL_CONFIGURATION(301, RoleType.USER, VdcObjectType.VmPool),
DELETE_VM_POOL(302, RoleType.USER, VdcObjectType.VmPool),
VM_POOL_BASIC_OPERATIONS(303, RoleType.USER, VdcObjectType.VmPool),
// clusters actions groups
CREATE_CLUSTER(400, RoleType.ADMIN, VdcObjectType.VdsGroups),
EDIT_CLUSTER_CONFIGURATION(401, RoleType.ADMIN, VdcObjectType.VdsGroups),
DELETE_CLUSTER(402, RoleType.ADMIN, VdcObjectType.VdsGroups),
CONFIGURE_CLUSTER_NETWORK(403, RoleType.ADMIN, VdcObjectType.VdsGroups),
// users and MLA actions groups
MANIPULATE_USERS(500, RoleType.ADMIN, VdcObjectType.User),
MANIPULATE_ROLES(501, RoleType.ADMIN, VdcObjectType.User),
MANIPULATE_PERMISSIONS(502, RoleType.USER, VdcObjectType.User),
// storage domains actions groups
CREATE_STORAGE_DOMAIN(600, RoleType.ADMIN, VdcObjectType.Storage),
EDIT_STORAGE_DOMAIN_CONFIGURATION(601, RoleType.ADMIN, VdcObjectType.Storage),
DELETE_STORAGE_DOMAIN(602, RoleType.ADMIN, VdcObjectType.Storage),
MANIPULATE_STORAGE_DOMAIN(603, RoleType.ADMIN, VdcObjectType.Storage),
// storage pool actions groups
CREATE_STORAGE_POOL(700, RoleType.ADMIN, VdcObjectType.StoragePool),
DELETE_STORAGE_POOL(701, RoleType.ADMIN, VdcObjectType.StoragePool),
EDIT_STORAGE_POOL_CONFIGURATION(702, RoleType.ADMIN, VdcObjectType.StoragePool),
CONFIGURE_STORAGE_POOL_NETWORK(703, RoleType.ADMIN, VdcObjectType.StoragePool),
// engine generic
CONFIGURE_ENGINE(800, RoleType.ADMIN, VdcObjectType.System),
// Gluster Volume Action Group
GLUSTER_CREATE_VOLUME(900, RoleType.ADMIN, VdcObjectType.GlusterVolume),
GLUSTER_VOLUME_OPERATIONS(901, RoleType.ADMIN, VdcObjectType.GlusterVolume),
GLUSTER_DELETE_VOLUME(902, RoleType.ADMIN, VdcObjectType.GlusterVolume);
private int id;
private RoleType roleType;
private VdcObjectType vdcObjectType;
private static HashMap<Integer, ActionGroup> map = new HashMap<Integer, ActionGroup>(ActionGroup.values().length);
private static HashMap<VdcObjectType, ArrayList<ActionGroup>> entityToActionGroupsMapping =
new HashMap<VdcObjectType, ArrayList<ActionGroup>>();
private static List<ActionGroup> userActionsGroup = new ArrayList<ActionGroup>();
static {
initEntitiesMap();
for (ActionGroup t : ActionGroup.values()) {
map.put(t.id, t);
entityToActionGroupsMapping.get(t.vdcObjectType).add(t);
if (RoleType.USER == t.roleType) {
userActionsGroup.add(t);
}
}
}
private ActionGroup(int value, RoleType type, VdcObjectType objectType) {
id = value;
roleType = type;
vdcObjectType = objectType;
}
private static void initEntitiesMap() {
for (VdcObjectType obj : VdcObjectType.values())
entityToActionGroupsMapping.put(obj, new ArrayList<ActionGroup>());
}
public int getId() {
return id;
}
public RoleType getRoleType() {
return roleType;
}
public static ActionGroup forValue(int value) {
return map.get(value);
}
public static List<ActionGroup> getAllUserActionGroups() {
return userActionsGroup;
}
public static HashMap<VdcObjectType, ArrayList<ActionGroup>> getEntityToActionGroupsMapping() {
return entityToActionGroupsMapping;
}
}