Skip to content

Commit

Permalink
added the ability to re-order policies for all three types (app, serv…
Browse files Browse the repository at this point in the history
…ice, plan)
  • Loading branch information
EricWittmann committed Oct 30, 2014
1 parent aa25e37 commit 91af267
Show file tree
Hide file tree
Showing 39 changed files with 1,156 additions and 123 deletions.
Expand Up @@ -28,6 +28,6 @@ public enum AuditEntryType {
Grant, Revoke,
Publish, Retire,
Register, Unregister,
AddPolicy, RemovePolicy, UpdatePolicy,
AddPolicy, RemovePolicy, UpdatePolicy, ReorderPolicies,
CreateContract, BreakContract
}
Expand Up @@ -28,6 +28,7 @@
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Index;
import org.jboss.errai.common.client.api.annotations.Portable;

/**
Expand Down Expand Up @@ -72,6 +73,9 @@ public class PolicyBean implements Serializable {
private Date modifiedOn;
@ManyToOne(fetch=FetchType.EAGER, optional=false)
private PolicyDefinitionBean definition;
@Column(updatable=true, nullable=false)
@Index(name="pol_order")
private int orderIndex;

/**
* Constructor.
Expand Down Expand Up @@ -247,6 +251,34 @@ public void setDefinition(PolicyDefinitionBean definition) {
this.definition = definition;
}

/**
* @return the description
*/
public String getDescription() {
return description;
}

/**
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
}

/**
* @return the orderIndex
*/
public int getOrderIndex() {
return orderIndex;
}

/**
* @param orderIndex the orderIndex to set
*/
public void setOrderIndex(int orderIndex) {
this.orderIndex = orderIndex;
}

/**
* @see java.lang.Object#hashCode()
*/
Expand Down Expand Up @@ -278,18 +310,4 @@ public boolean equals(Object obj) {
return true;
}

/**
* @return the description
*/
public String getDescription() {
return description;
}

/**
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
}

}
Expand Up @@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.overlord.apiman.dt.api.beans.summary;
package org.overlord.apiman.dt.api.beans.policies;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.jboss.errai.common.client.api.annotations.Portable;
import org.overlord.apiman.dt.api.beans.policies.PolicyBean;

/**
* Models the list of policies that would get applied if a service were invoked
Expand All @@ -29,7 +28,7 @@
* @author eric.wittmann@redhat.com
*/
@Portable
public class PolicyChainSummaryBean implements Serializable {
public class PolicyChainBean implements Serializable {

private static final long serialVersionUID = -497197512733345793L;

Expand All @@ -38,7 +37,7 @@ public class PolicyChainSummaryBean implements Serializable {
/**
* Constructor.
*/
public PolicyChainSummaryBean() {
public PolicyChainBean() {
}

/**
Expand Down
Expand Up @@ -174,7 +174,7 @@ public <T> SearchResultsBean<AuditEntryBean> auditEntity(String organizationId,
if (paging != null) {
criteria.setPaging(paging);
} else {
criteria.setPage(0);
criteria.setPage(1);
criteria.setPageSize(20);
}
criteria.setOrder("when", false); //$NON-NLS-1$
Expand Down Expand Up @@ -216,7 +216,7 @@ public <T> SearchResultsBean<AuditEntryBean> auditUser(String userId, PagingBean
if (paging != null) {
criteria.setPaging(paging);
} else {
criteria.setPage(0);
criteria.setPage(1);
criteria.setPageSize(20);
}
criteria.setOrder("when", false); //$NON-NLS-1$
Expand Down Expand Up @@ -627,19 +627,25 @@ public List<PlanVersionBean> getPlanVersions(String orgId, String planId)
/**
* @see org.overlord.apiman.dt.api.core.IStorageQuery#getPolicies(java.lang.String, java.lang.String, java.lang.String, org.overlord.apiman.dt.api.beans.policies.PolicyType)
*/
@SuppressWarnings("unchecked")
@SuppressWarnings({ "nls", "unchecked" })
@Override
public List<PolicyBean> getPolicies(String organizationId, String entityId, String version,
PolicyType type) throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT p from PolicyBean p WHERE p.organizationId = :orgId AND p.entityId = :entityId AND p.entityVersion = :entityVersion AND p.type = :type"; //$NON-NLS-1$
String jpql =
"SELECT p from PolicyBean p "
+ " WHERE p.organizationId = :orgId "
+ " AND p.entityId = :entityId "
+ " AND p.entityVersion = :entityVersion "
+ " AND p.type = :type"
+ " ORDER BY p.orderIndex ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId); //$NON-NLS-1$
query.setParameter("entityId", entityId); //$NON-NLS-1$
query.setParameter("entityVersion", version); //$NON-NLS-1$
query.setParameter("type", type); //$NON-NLS-1$
query.setParameter("orgId", organizationId);
query.setParameter("entityId", entityId);
query.setParameter("entityVersion", version);
query.setParameter("type", type);

List<PolicyBean> rval = (List<PolicyBean>) query.getResultList();
for (PolicyBean policyBean : rval) {
Expand Down
Expand Up @@ -46,6 +46,7 @@
import org.overlord.apiman.dt.api.beans.plans.PlanStatus;
import org.overlord.apiman.dt.api.beans.plans.PlanVersionBean;
import org.overlord.apiman.dt.api.beans.policies.PolicyBean;
import org.overlord.apiman.dt.api.beans.policies.PolicyChainBean;
import org.overlord.apiman.dt.api.beans.policies.PolicyDefinitionBean;
import org.overlord.apiman.dt.api.beans.policies.PolicyType;
import org.overlord.apiman.dt.api.beans.search.PagingBean;
Expand All @@ -59,7 +60,6 @@
import org.overlord.apiman.dt.api.beans.summary.ApplicationSummaryBean;
import org.overlord.apiman.dt.api.beans.summary.ContractSummaryBean;
import org.overlord.apiman.dt.api.beans.summary.PlanSummaryBean;
import org.overlord.apiman.dt.api.beans.summary.PolicyChainSummaryBean;
import org.overlord.apiman.dt.api.beans.summary.ServicePlanSummaryBean;
import org.overlord.apiman.dt.api.beans.summary.ServiceSummaryBean;
import org.overlord.apiman.dt.api.core.IApiKeyGenerator;
Expand Down Expand Up @@ -806,6 +806,42 @@ public List<PolicyBean> listAppPolicies(String organizationId, String applicatio
throw new SystemErrorException(e);
}
}

/**
* @see org.overlord.apiman.dt.api.rest.contract.IOrganizationResource#reorderApplicationPolicies(java.lang.String, java.lang.String, java.lang.String, org.overlord.apiman.dt.api.beans.policies.PolicyChainBean)
*/
@Override
public void reorderApplicationPolicies(String organizationId, String applicationId, String version,
PolicyChainBean policyChain) throws OrganizationNotFoundException,
ApplicationVersionNotFoundException, NotAuthorizedException {
if (!securityContext.hasPermission(PermissionType.svcEdit, organizationId))
throw ExceptionFactory.notAuthorizedException();

ApplicationVersionBean avb;
try {
avb = query.getApplicationVersion(organizationId, applicationId, version);
} catch (StorageException e) {
throw new SystemErrorException(e);
}
if (avb == null) {
throw ExceptionFactory.applicationVersionNotFoundException(applicationId, version);
}

try {
storage.beginTx();
List<PolicyBean> policies = policyChain.getPolicies();
for (PolicyBean incomingPolicy : policies) {
PolicyBean storedPolicy = this.storage.get(incomingPolicy.getId(), PolicyBean.class);
storedPolicy.setOrderIndex(incomingPolicy.getOrderIndex());
storage.update(storedPolicy);
}
storage.createAuditEntry(AuditUtils.policiesReordered(avb, PolicyType.Application, securityContext));
storage.commitTx();
} catch (StorageException e) {
storage.rollbackTx();
throw new SystemErrorException(e);
}
}

/**
* @see org.overlord.apiman.dt.api.rest.contract.IOrganizationResource#create(java.lang.String, org.overlord.apiman.dt.api.beans.services.ServiceBean)
Expand Down Expand Up @@ -1262,11 +1298,47 @@ public List<PolicyBean> listServicePolicies(String organizationId, String servic
}
}

/**
* @see org.overlord.apiman.dt.api.rest.contract.IOrganizationResource#reorderServicePolicies(java.lang.String, java.lang.String, java.lang.String, org.overlord.apiman.dt.api.beans.policies.PolicyChainBean)
*/
@Override
public void reorderServicePolicies(String organizationId, String serviceId, String version,
PolicyChainBean policyChain) throws OrganizationNotFoundException,
ServiceVersionNotFoundException, NotAuthorizedException {
if (!securityContext.hasPermission(PermissionType.svcEdit, organizationId))
throw ExceptionFactory.notAuthorizedException();

ServiceVersionBean svb;
try {
svb = query.getServiceVersion(organizationId, serviceId, version);
} catch (StorageException e) {
throw new SystemErrorException(e);
}
if (svb == null) {
throw ExceptionFactory.serviceVersionNotFoundException(serviceId, version);
}

try {
storage.beginTx();
List<PolicyBean> policies = policyChain.getPolicies();
for (PolicyBean incomingPolicy : policies) {
PolicyBean storedPolicy = this.storage.get(incomingPolicy.getId(), PolicyBean.class);
storedPolicy.setOrderIndex(incomingPolicy.getOrderIndex());
storage.update(storedPolicy);
}
storage.createAuditEntry(AuditUtils.policiesReordered(svb, PolicyType.Service, securityContext));
storage.commitTx();
} catch (StorageException e) {
storage.rollbackTx();
throw new SystemErrorException(e);
}
}

/**
* @see org.overlord.apiman.dt.api.rest.contract.IOrganizationResource#getPolicyChain(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public PolicyChainSummaryBean getServicePolicyChain(String organizationId, String serviceId, String version,
public PolicyChainBean getServicePolicyChain(String organizationId, String serviceId, String version,
String planId) throws ServiceVersionNotFoundException, PlanNotFoundException, NotAuthorizedException {
if (!securityContext.hasPermission(PermissionType.svcView, organizationId))
throw ExceptionFactory.notAuthorizedException();
Expand All @@ -1289,7 +1361,7 @@ public PolicyChainSummaryBean getServicePolicyChain(String organizationId, Strin
List<PolicyBean> servicePolicies = query.getPolicies(organizationId, serviceId, version, PolicyType.Service);
List<PolicyBean> planPolicies = query.getPolicies(organizationId, planId, planVersion, PolicyType.Plan);

PolicyChainSummaryBean chain = new PolicyChainSummaryBean();
PolicyChainBean chain = new PolicyChainBean();
chain.getPolicies().addAll(planPolicies);
chain.getPolicies().addAll(servicePolicies);
return chain;
Expand Down Expand Up @@ -1714,6 +1786,42 @@ public List<PolicyBean> listPlanPolicies(String organizationId, String planId, S
}
}

/**
* @see org.overlord.apiman.dt.api.rest.contract.IOrganizationResource#reorderPlanPolicies(java.lang.String, java.lang.String, java.lang.String, org.overlord.apiman.dt.api.beans.policies.PolicyChainBean)
*/
@Override
public void reorderPlanPolicies(String organizationId, String planId, String version,
PolicyChainBean policyChain) throws OrganizationNotFoundException,
PlanVersionNotFoundException, NotAuthorizedException {
if (!securityContext.hasPermission(PermissionType.svcEdit, organizationId))
throw ExceptionFactory.notAuthorizedException();

PlanVersionBean pvb;
try {
pvb = query.getPlanVersion(organizationId, planId, version);
} catch (StorageException e) {
throw new SystemErrorException(e);
}
if (pvb == null) {
throw ExceptionFactory.planVersionNotFoundException(planId, version);
}

try {
storage.beginTx();
List<PolicyBean> policies = policyChain.getPolicies();
for (PolicyBean incomingPolicy : policies) {
PolicyBean storedPolicy = this.storage.get(incomingPolicy.getId(), PolicyBean.class);
storedPolicy.setOrderIndex(incomingPolicy.getOrderIndex());
storage.update(storedPolicy);
}
storage.createAuditEntry(AuditUtils.policiesReordered(pvb, PolicyType.Plan, securityContext));
storage.commitTx();
} catch (StorageException e) {
storage.rollbackTx();
throw new SystemErrorException(e);
}
}


/**
* Creates a policy for the given entity (supports creating policies for applications,
Expand Down Expand Up @@ -1745,6 +1853,20 @@ protected PolicyBean doCreatePolicy(String organizationId, String entityId, Stri
}

try {
SearchCriteriaBean criteria = new SearchCriteriaBean();
criteria.addFilter("organizationId", organizationId, SearchCriteriaFilterBean.OPERATOR_EQ); //$NON-NLS-1$
criteria.addFilter("entityId", entityId, SearchCriteriaFilterBean.OPERATOR_EQ); //$NON-NLS-1$
criteria.addFilter("entityVersion", entityVersion, SearchCriteriaFilterBean.OPERATOR_EQ); //$NON-NLS-1$
criteria.addFilter("type", type.name(), SearchCriteriaFilterBean.OPERATOR_EQ); //$NON-NLS-1$
criteria.setOrder("orderIndex", false); //$NON-NLS-1$
criteria.setPage(1);
criteria.setPageSize(1);
SearchResultsBean<PolicyBean> resultsBean = storage.find(criteria, PolicyBean.class);
int newIdx = 0;
if (!resultsBean.getBeans().isEmpty()) {
newIdx = resultsBean.getBeans().get(0).getOrderIndex() + 1;
}

bean.setId(null);
bean.setName(def.getName());
bean.setCreatedBy(securityContext.getCurrentUser());
Expand All @@ -1755,6 +1877,7 @@ protected PolicyBean doCreatePolicy(String organizationId, String entityId, Stri
bean.setEntityId(entityId);
bean.setEntityVersion(entityVersion);
bean.setType(type);
bean.setOrderIndex(newIdx);
storage.create(bean);
storage.createAuditEntry(AuditUtils.policyAdded(bean, type, securityContext));
storage.commitTx();
Expand Down

0 comments on commit 91af267

Please sign in to comment.