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.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ public enum AuditEntryType {
Grant, Revoke,
Publish, Retire,
Register, Unregister,
AddPolicy, RemovePolicy, UpdatePolicy,
AddPolicy, RemovePolicy, UpdatePolicy, ReorderPolicies,
CreateContract, BreakContract
}
Original file line number Diff line number Diff line change
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;
}

}
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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.