package org.zstack.header.identity; import org.zstack.header.configuration.PythonClassInventory; import org.zstack.header.identity.AccountConstant.StatementEffect; import org.zstack.header.query.ExpandedQueries; import org.zstack.header.query.ExpandedQuery; import org.zstack.header.query.ExpandedQueryAlias; import org.zstack.header.query.ExpandedQueryAliases; import org.zstack.header.rest.SDK; import org.zstack.header.search.Inventory; import org.zstack.utils.gson.JSONObjectUtil; import java.util.ArrayList; import java.util.Collection; import java.util.List; @Inventory(mappingVOClass = PolicyVO.class) @PythonClassInventory @ExpandedQueries({ @ExpandedQuery(expandedField = "account", inventoryClass = AccountInventory.class, foreignKey = "accountUuid", expandedInventoryKey = "uuid"), @ExpandedQuery(expandedField = "groupRef", inventoryClass = UserGroupPolicyRefInventory.class, foreignKey = "uuid", expandedInventoryKey = "policyUuid", hidden = true), @ExpandedQuery(expandedField = "userRef", inventoryClass = UserPolicyRefInventory.class, foreignKey = "uuid", expandedInventoryKey = "policyUuid", hidden = true) }) @ExpandedQueryAliases({ @ExpandedQueryAlias(alias = "group", expandedField = "groupRef.group"), @ExpandedQueryAlias(alias = "user", expandedField = "userRef.user") }) public class PolicyInventory { @SDK(sdkClassName = "PolicyStatement") public static class Statement { private String name; private StatementEffect effect; private List<String> principals; private List<String> actions; private List<String> resources; public String getName() { return name; } public void setName(String name) { this.name = name; } public StatementEffect getEffect() { return effect; } public void setEffect(StatementEffect effect) { this.effect = effect; } public List<String> getPrincipals() { return principals; } public void setPrincipals(List<String> principals) { this.principals = principals; } public List<String> getActions() { return actions; } public void setActions(List<String> actions) { this.actions = actions; } public List<String> getResources() { return resources; } public void setResources(List<String> resources) { this.resources = resources; } public void addAction(String a) { if (actions == null) { actions = new ArrayList<String>(); } actions.add(a); } } public static PolicyInventory valueOf(PolicyVO vo) { PolicyInventory inv = new PolicyInventory(); inv.setName(vo.getName()); inv.setUuid(vo.getUuid()); inv.setStatements(JSONObjectUtil.toCollection(vo.getData(), ArrayList.class, Statement.class)); inv.setAccountUuid(vo.getAccountUuid()); return inv; } public static List<PolicyInventory> valueOf(Collection<PolicyVO> vos) { List<PolicyInventory> invs = new ArrayList<PolicyInventory>(); for (PolicyVO vo : vos) { invs.add(valueOf(vo)); } return invs; } private List<Statement> statements; private String name; private String uuid; private String accountUuid; public String getAccountUuid() { return accountUuid; } public void setAccountUuid(String accountUuid) { this.accountUuid = accountUuid; } public void addStatement(Statement s) { if (statements == null) { statements = new ArrayList<Statement>(); } statements.add(s); } public void addStatement(List<Statement> s) { if (statements == null) { statements = new ArrayList<Statement>(); } statements.addAll(s); } public List<Statement> getStatements() { return statements; } public void setStatements(List<Statement> statements) { this.statements = statements; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } }