/*
* Copyright 2014 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.apiman.manager.api.jpa;
import io.apiman.common.util.crypt.DataEncryptionContext;
import io.apiman.common.util.crypt.IDataEncrypter;
import io.apiman.manager.api.beans.apis.ApiBean;
import io.apiman.manager.api.beans.apis.ApiDefinitionBean;
import io.apiman.manager.api.beans.apis.ApiGatewayBean;
import io.apiman.manager.api.beans.apis.ApiPlanBean;
import io.apiman.manager.api.beans.apis.ApiStatus;
import io.apiman.manager.api.beans.apis.ApiVersionBean;
import io.apiman.manager.api.beans.audit.AuditEntityType;
import io.apiman.manager.api.beans.audit.AuditEntryBean;
import io.apiman.manager.api.beans.clients.ClientBean;
import io.apiman.manager.api.beans.clients.ClientStatus;
import io.apiman.manager.api.beans.clients.ClientVersionBean;
import io.apiman.manager.api.beans.contracts.ContractBean;
import io.apiman.manager.api.beans.download.DownloadBean;
import io.apiman.manager.api.beans.gateways.GatewayBean;
import io.apiman.manager.api.beans.gateways.GatewayType;
import io.apiman.manager.api.beans.idm.PermissionBean;
import io.apiman.manager.api.beans.idm.PermissionType;
import io.apiman.manager.api.beans.idm.RoleBean;
import io.apiman.manager.api.beans.idm.RoleMembershipBean;
import io.apiman.manager.api.beans.idm.UserBean;
import io.apiman.manager.api.beans.orgs.OrganizationBean;
import io.apiman.manager.api.beans.plans.PlanBean;
import io.apiman.manager.api.beans.plans.PlanStatus;
import io.apiman.manager.api.beans.plans.PlanVersionBean;
import io.apiman.manager.api.beans.plugins.PluginBean;
import io.apiman.manager.api.beans.policies.PolicyBean;
import io.apiman.manager.api.beans.policies.PolicyDefinitionBean;
import io.apiman.manager.api.beans.policies.PolicyType;
import io.apiman.manager.api.beans.search.PagingBean;
import io.apiman.manager.api.beans.search.SearchCriteriaBean;
import io.apiman.manager.api.beans.search.SearchCriteriaFilterOperator;
import io.apiman.manager.api.beans.search.SearchResultsBean;
import io.apiman.manager.api.beans.summary.ApiEntryBean;
import io.apiman.manager.api.beans.summary.ApiPlanSummaryBean;
import io.apiman.manager.api.beans.summary.ApiRegistryBean;
import io.apiman.manager.api.beans.summary.ApiSummaryBean;
import io.apiman.manager.api.beans.summary.ApiVersionSummaryBean;
import io.apiman.manager.api.beans.summary.ClientSummaryBean;
import io.apiman.manager.api.beans.summary.ClientVersionSummaryBean;
import io.apiman.manager.api.beans.summary.ContractSummaryBean;
import io.apiman.manager.api.beans.summary.GatewaySummaryBean;
import io.apiman.manager.api.beans.summary.OrganizationSummaryBean;
import io.apiman.manager.api.beans.summary.PlanSummaryBean;
import io.apiman.manager.api.beans.summary.PlanVersionSummaryBean;
import io.apiman.manager.api.beans.summary.PluginSummaryBean;
import io.apiman.manager.api.beans.summary.PolicyDefinitionSummaryBean;
import io.apiman.manager.api.beans.summary.PolicyFormType;
import io.apiman.manager.api.beans.summary.PolicySummaryBean;
import io.apiman.manager.api.core.IStorage;
import io.apiman.manager.api.core.IStorageQuery;
import io.apiman.manager.api.core.exceptions.StorageException;
import io.apiman.manager.api.core.util.PolicyTemplateUtil;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Alternative;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A JPA implementation of the storage interface.
*
* @author eric.wittmann@redhat.com
*/
@SuppressWarnings("nls")
@ApplicationScoped @Alternative
public class JpaStorage extends AbstractJpaStorage implements IStorage, IStorageQuery {
private static Logger logger = LoggerFactory.getLogger(JpaStorage.class);
@Inject IDataEncrypter encrypter;
@PostConstruct
public void postConstruct() {
// Kick the encrypter, causing it to be loaded/resolved in CDI
encrypter.encrypt("", new DataEncryptionContext());
}
/**
* Constructor.
*/
public JpaStorage() {
}
/**
* @see io.apiman.manager.api.core.IStorage#beginTx()
*/
@Override
public void beginTx() throws StorageException {
super.beginTx();
}
/**
* @see io.apiman.manager.api.core.IStorage#commitTx()
*/
@Override
public void commitTx() throws StorageException {
super.commitTx();
}
/**
* @see io.apiman.manager.api.core.IStorage#rollbackTx()
*/
@Override
public void rollbackTx() {
super.rollbackTx();
}
@Override
public void initialize() {
// No-Op for JPA
}
/**
* @see io.apiman.manager.api.core.IStorage#createClient(io.apiman.manager.api.beans.clients.ClientBean)
*/
@Override
public void createClient(ClientBean client) throws StorageException {
super.create(client);
}
/**
* @see io.apiman.manager.api.core.IStorage#createClientVersion(io.apiman.manager.api.beans.clients.ClientVersionBean)
*/
@Override
public void createClientVersion(ClientVersionBean version) throws StorageException {
super.create(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#createContract(io.apiman.manager.api.beans.contracts.ContractBean)
*/
@Override
public void createContract(ContractBean contract) throws StorageException {
List<ContractSummaryBean> contracts = getClientContractsInternal(contract.getClient().getClient().getOrganization().getId(),
contract.getClient().getClient().getId(), contract.getClient().getVersion());
for (ContractSummaryBean csb : contracts) {
if (csb.getApiOrganizationId().equals(contract.getApi().getApi().getOrganization().getId()) &&
csb.getApiId().equals(contract.getApi().getApi().getId()) &&
csb.getApiVersion().equals(contract.getApi().getVersion()))
{
throw new StorageException("Error creating contract: duplicate contract detected."); //$NON-NLS-1$
}
}
super.create(contract);
}
/**
* @see io.apiman.manager.api.core.IStorage#createGateway(io.apiman.manager.api.beans.gateways.GatewayBean)
*/
@Override
public void createGateway(GatewayBean gateway) throws StorageException {
super.create(gateway);
}
/**
* @see io.apiman.manager.api.core.IStorage#createDownload(io.apiman.manager.api.beans.download.DownloadBean)
*/
@Override
public void createDownload(DownloadBean download) throws StorageException {
super.create(download);
}
/**
* @see io.apiman.manager.api.core.IStorage#createPlugin(io.apiman.manager.api.beans.plugins.PluginBean)
*/
@Override
public void createPlugin(PluginBean plugin) throws StorageException {
super.create(plugin);
}
/**
* @see io.apiman.manager.api.core.IStorage#createOrganization(io.apiman.manager.api.beans.orgs.OrganizationBean)
*/
@Override
public void createOrganization(OrganizationBean organization) throws StorageException {
super.create(organization);
}
/**
* @see io.apiman.manager.api.core.IStorage#createPlan(io.apiman.manager.api.beans.plans.PlanBean)
*/
@Override
public void createPlan(PlanBean plan) throws StorageException {
super.create(plan);
}
/**
* @see io.apiman.manager.api.core.IStorage#createPlanVersion(io.apiman.manager.api.beans.plans.PlanVersionBean)
*/
@Override
public void createPlanVersion(PlanVersionBean version) throws StorageException {
super.create(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#createPolicy(io.apiman.manager.api.beans.policies.PolicyBean)
*/
@Override
public void createPolicy(PolicyBean policy) throws StorageException {
super.create(policy);
}
/**
* @see io.apiman.manager.api.core.IStorage#createPolicyDefinition(io.apiman.manager.api.beans.policies.PolicyDefinitionBean)
*/
@Override
public void createPolicyDefinition(PolicyDefinitionBean policyDef) throws StorageException {
super.create(policyDef);
}
/**
* @see io.apiman.manager.api.core.IStorage#createApi(io.apiman.manager.api.beans.apis.ApiBean)
*/
@Override
public void createApi(ApiBean api) throws StorageException {
super.create(api);
}
/**
* @see io.apiman.manager.api.core.IStorage#createApiVersion(io.apiman.manager.api.beans.apis.ApiVersionBean)
*/
@Override
public void createApiVersion(ApiVersionBean version) throws StorageException {
super.create(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateClient(io.apiman.manager.api.beans.clients.ClientBean)
*/
@Override
public void updateClient(ClientBean client) throws StorageException {
super.update(client);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateClientVersion(io.apiman.manager.api.beans.clients.ClientVersionBean)
*/
@Override
public void updateClientVersion(ClientVersionBean version) throws StorageException {
super.update(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateGateway(io.apiman.manager.api.beans.gateways.GatewayBean)
*/
@Override
public void updateGateway(GatewayBean gateway) throws StorageException {
super.update(gateway);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateOrganization(io.apiman.manager.api.beans.orgs.OrganizationBean)
*/
@Override
public void updateOrganization(OrganizationBean organization) throws StorageException {
super.update(organization);
}
/**
* @see io.apiman.manager.api.core.IStorage#updatePlan(io.apiman.manager.api.beans.plans.PlanBean)
*/
@Override
public void updatePlan(PlanBean plan) throws StorageException {
super.update(plan);
}
/**
* @see io.apiman.manager.api.core.IStorage#updatePlanVersion(io.apiman.manager.api.beans.plans.PlanVersionBean)
*/
@Override
public void updatePlanVersion(PlanVersionBean version) throws StorageException {
super.update(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#updatePolicy(io.apiman.manager.api.beans.policies.PolicyBean)
*/
@Override
public void updatePolicy(PolicyBean policy) throws StorageException {
super.update(policy);
}
/**
* @see io.apiman.manager.api.core.IStorage#updatePolicyDefinition(io.apiman.manager.api.beans.policies.PolicyDefinitionBean)
*/
@Override
public void updatePolicyDefinition(PolicyDefinitionBean policyDef) throws StorageException {
super.update(policyDef);
}
/**
* @see io.apiman.manager.api.core.IStorage#updatePlugin(io.apiman.manager.api.beans.plugins.PluginBean)
*/
@Override
public void updatePlugin(PluginBean pluginBean) throws StorageException {
super.update(pluginBean);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateApi(io.apiman.manager.api.beans.apis.ApiBean)
*/
@Override
public void updateApi(ApiBean api) throws StorageException {
super.update(api);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateApiVersion(io.apiman.manager.api.beans.apis.ApiVersionBean)
*/
@Override
public void updateApiVersion(ApiVersionBean version) throws StorageException {
super.update(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateApiDefinition(io.apiman.manager.api.beans.apis.ApiVersionBean, java.io.InputStream)
*/
@Override
public void updateApiDefinition(ApiVersionBean version, InputStream definitionStream)
throws StorageException {
try {
ApiDefinitionBean bean = super.get(version.getId(), ApiDefinitionBean.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(definitionStream, baos);
byte [] data = baos.toByteArray();
if (bean != null) {
bean.setData(data);
super.update(bean);
} else {
bean = new ApiDefinitionBean();
bean.setId(version.getId());
bean.setData(data);
bean.setApiVersion(version);
super.create(bean);
}
} catch (IOException e) {
throw new StorageException(e);
}
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteOrganization(io.apiman.manager.api.beans.orgs.OrganizationBean)
*/
@Override
public void deleteOrganization(OrganizationBean organization) throws StorageException {
// Remove memberships
deleteAllMemberships(organization);
// Remove audit entries (as now orphaned)
deleteAllAuditEntries(organization);
// Remove contracts
deleteAllContracts(organization);
// Remove Policies
deleteAllPolicies(organization);
remove(organization);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteClient(io.apiman.manager.api.beans.clients.ClientBean)
*/
@Override
public void deleteClient(ClientBean client) throws StorageException {
// Remove audit
deleteAllAuditEntries(client);
// Remove contracts
deleteAllContracts(client);
// Remove policies
deleteAllPolicies(client);
remove(client);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteClientVersion(io.apiman.manager.api.beans.clients.ClientVersionBean)
*/
@Override
public void deleteClientVersion(ClientVersionBean version) throws StorageException {
remove(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteContract(io.apiman.manager.api.beans.contracts.ContractBean)
*/
@Override
public void deleteContract(ContractBean contract) throws StorageException {
remove(contract);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteApi(io.apiman.manager.api.beans.apis.ApiBean)
*/
@Override
public void deleteApi(ApiBean api) throws StorageException {
// Remove audit entries (as now orphaned)
deleteAllAuditEntries(api);
// Remove contracts
deleteAllContracts(api);
// Remove policies
deleteAllPolicies(api);
remove(api);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteApiVersion(io.apiman.manager.api.beans.apis.ApiVersionBean)
*/
@Override
public void deleteApiVersion(ApiVersionBean version) throws StorageException {
remove(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteApiDefinition(io.apiman.manager.api.beans.apis.ApiVersionBean)
*/
@Override
public void deleteApiDefinition(ApiVersionBean version) throws StorageException {
ApiDefinitionBean bean = super.get(version.getId(), ApiDefinitionBean.class);
if (bean != null) {
super.delete(bean);
} else {
throw new StorageException("No definition found.");
}
}
/**
* @see io.apiman.manager.api.core.IStorage#deletePlan(io.apiman.manager.api.beans.plans.PlanBean)
*/
@Override
public void deletePlan(PlanBean plan) throws StorageException {
// Delete audit entries
deleteAllAuditEntries(plan);
// Delete entity
super.delete(plan);
}
/**
* @see io.apiman.manager.api.core.IStorage#deletePlanVersion(io.apiman.manager.api.beans.plans.PlanVersionBean)
*/
@Override
public void deletePlanVersion(PlanVersionBean version) throws StorageException {
super.delete(version);
}
/**
* @see io.apiman.manager.api.core.IStorage#deletePolicy(io.apiman.manager.api.beans.policies.PolicyBean)
*/
@Override
public void deletePolicy(PolicyBean policy) throws StorageException {
super.delete(policy);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteGateway(io.apiman.manager.api.beans.gateways.GatewayBean)
*/
@Override
public void deleteGateway(GatewayBean gateway) throws StorageException {
super.delete(gateway);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteDownload(io.apiman.manager.api.beans.download.DownloadBean)
*/
@Override
public void deleteDownload(DownloadBean download) throws StorageException {
super.delete(download);
}
/**
* @see io.apiman.manager.api.core.IStorage#deletePlugin(io.apiman.manager.api.beans.plugins.PluginBean)
*/
@Override
public void deletePlugin(PluginBean plugin) throws StorageException {
super.delete(plugin);
}
/**
* @see io.apiman.manager.api.core.IStorage#deletePolicyDefinition(io.apiman.manager.api.beans.policies.PolicyDefinitionBean)
*/
@Override
public void deletePolicyDefinition(PolicyDefinitionBean policyDef) throws StorageException {
super.delete(policyDef);
}
/**
* @see io.apiman.manager.api.core.IStorage#getOrganization(java.lang.String)
*/
@Override
public OrganizationBean getOrganization(String id) throws StorageException {
return super.get(id, OrganizationBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getClient(java.lang.String, java.lang.String)
*/
@Override
public ClientBean getClient(String organizationId, String id) throws StorageException {
return super.get(organizationId, id, ClientBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getContract(java.lang.Long)
*/
@Override
public ContractBean getContract(Long id) throws StorageException {
return super.get(id, ContractBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getApi(java.lang.String, java.lang.String)
*/
@Override
public ApiBean getApi(String organizationId, String id) throws StorageException {
return super.get(organizationId, id, ApiBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getPlan(java.lang.String, java.lang.String)
*/
@Override
public PlanBean getPlan(String organizationId, String id) throws StorageException {
return super.get(organizationId, id, PlanBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getPolicy(io.apiman.manager.api.beans.policies.PolicyType, java.lang.String, java.lang.String, java.lang.String, java.lang.Long)
*/
@Override
public PolicyBean getPolicy(PolicyType type, String organizationId, String entityId, String version,
Long id) throws StorageException {
PolicyBean policyBean = super.get(id, PolicyBean.class);
if (policyBean == null || policyBean.getType() != type) {
return null;
}
if (!policyBean.getOrganizationId().equals(organizationId)) {
return null;
}
if (!policyBean.getEntityId().equals(entityId)) {
return null;
}
if (!policyBean.getEntityVersion().equals(version)) {
return null;
}
return policyBean;
}
/**
* @see io.apiman.manager.api.core.IStorage#getGateway(java.lang.String)
*/
@Override
public GatewayBean getGateway(String id) throws StorageException {
return super.get(id, GatewayBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getDownload(java.lang.String)
*/
@Override
public DownloadBean getDownload(String id) throws StorageException {
return super.get(id, DownloadBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getPlugin(long)
*/
@Override
public PluginBean getPlugin(long id) throws StorageException {
return super.get(id, PluginBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#getPlugin(java.lang.String, java.lang.String)
*/
@Override
public PluginBean getPlugin(String groupId, String artifactId) throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
String sql =
"SELECT p.id, p.artifact_id, p.group_id, p.version, p.classifier, p.type, p.name, p.description, p.created_by, p.created_on, p.deleted" +
" FROM plugins p" +
" WHERE p.group_id = ? AND p.artifact_id = ?";
Query query = entityManager.createNativeQuery(sql);
query.setParameter(1, groupId);
query.setParameter(2, artifactId);
List<Object[]> rows = query.getResultList();
if (!rows.isEmpty()) {
Object[] row = rows.get(0);
PluginBean plugin = new PluginBean();
plugin.setId(((Number) row[0]).longValue());
plugin.setArtifactId(String.valueOf(row[1]));
plugin.setGroupId(String.valueOf(row[2]));
plugin.setVersion(String.valueOf(row[3]));
plugin.setClassifier((String) row[4]);
plugin.setType((String) row[5]);
plugin.setName(String.valueOf(row[6]));
plugin.setDescription(String.valueOf(row[7]));
plugin.setCreatedBy(String.valueOf(row[8]));
plugin.setCreatedOn((Date) row[9]);
plugin.setDeleted((Boolean) row[10]);
return plugin;
} else {
return null;
}
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorage#getPolicyDefinition(java.lang.String)
*/
@Override
public PolicyDefinitionBean getPolicyDefinition(String id) throws StorageException {
return super.get(id, PolicyDefinitionBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#reorderPolicies(io.apiman.manager.api.beans.policies.PolicyType, java.lang.String, java.lang.String, java.lang.String, java.util.List)
*/
@Override
public void reorderPolicies(PolicyType type, String organizationId, String entityId,
String entityVersion, List<Long> newOrder) throws StorageException {
int orderIndex = 0;
for (Long policyId : newOrder) {
PolicyBean storedPolicy = getPolicy(type, organizationId, entityId, entityVersion, policyId);
if (storedPolicy == null) {
throw new StorageException("Invalid policy id: " + policyId);
}
storedPolicy.setOrderIndex(orderIndex++);
updatePolicy(storedPolicy);
}
}
/**
* @see io.apiman.manager.api.jpa.AbstractJpaStorage#find(io.apiman.manager.api.beans.search.SearchCriteriaBean, java.lang.Class)
*/
@Override
protected <T> SearchResultsBean<T> find(SearchCriteriaBean criteria, Class<T> type) throws StorageException {
beginTx();
try {
SearchResultsBean<T> rval = super.find(criteria, type);
return rval;
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#findOrganizations(io.apiman.manager.api.beans.search.SearchCriteriaBean)
*/
@Override
public SearchResultsBean<OrganizationSummaryBean> findOrganizations(SearchCriteriaBean criteria)
throws StorageException {
SearchResultsBean<OrganizationBean> orgs = find(criteria, OrganizationBean.class);
SearchResultsBean<OrganizationSummaryBean> rval = new SearchResultsBean<>();
rval.setTotalSize(orgs.getTotalSize());
List<OrganizationBean> beans = orgs.getBeans();
for (OrganizationBean bean : beans) {
OrganizationSummaryBean osb = new OrganizationSummaryBean();
osb.setId(bean.getId());
osb.setName(bean.getName());
osb.setDescription(bean.getDescription());
rval.getBeans().add(osb);
}
return rval;
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#findClients(io.apiman.manager.api.beans.search.SearchCriteriaBean)
*/
@Override
public SearchResultsBean<ClientSummaryBean> findClients(SearchCriteriaBean criteria)
throws StorageException {
SearchResultsBean<ClientBean> result = find(criteria, ClientBean.class);
SearchResultsBean<ClientSummaryBean> rval = new SearchResultsBean<>();
rval.setTotalSize(result.getTotalSize());
List<ClientBean> beans = result.getBeans();
rval.setBeans(new ArrayList<>(beans.size()));
for (ClientBean client : beans) {
ClientSummaryBean summary = new ClientSummaryBean();
OrganizationBean organization = client.getOrganization();
summary.setId(client.getId());
summary.setName(client.getName());
summary.setDescription(client.getDescription());
// TODO find the number of contracts - probably need native SQL for that
summary.setNumContracts(0);
summary.setOrganizationId(client.getOrganization().getId());
summary.setOrganizationName(organization.getName());
rval.getBeans().add(summary);
}
return rval;
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#findApis(io.apiman.manager.api.beans.search.SearchCriteriaBean)
*/
@Override
public SearchResultsBean<ApiSummaryBean> findApis(SearchCriteriaBean criteria)
throws StorageException {
SearchResultsBean<ApiBean> result = find(criteria, ApiBean.class);
SearchResultsBean<ApiSummaryBean> rval = new SearchResultsBean<>();
rval.setTotalSize(result.getTotalSize());
List<ApiBean> beans = result.getBeans();
rval.setBeans(new ArrayList<>(beans.size()));
for (ApiBean api : beans) {
ApiSummaryBean summary = new ApiSummaryBean();
OrganizationBean organization = api.getOrganization();
summary.setId(api.getId());
summary.setName(api.getName());
summary.setDescription(api.getDescription());
summary.setCreatedOn(api.getCreatedOn());
summary.setOrganizationId(api.getOrganization().getId());
summary.setOrganizationName(organization.getName());
rval.getBeans().add(summary);
}
return rval;
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#findPlans(java.lang.String, io.apiman.manager.api.beans.search.SearchCriteriaBean)
*/
@Override
public SearchResultsBean<PlanSummaryBean> findPlans(String organizationId, SearchCriteriaBean criteria)
throws StorageException {
criteria.addFilter("organization.id", organizationId, SearchCriteriaFilterOperator.eq);
SearchResultsBean<PlanBean> result = find(criteria, PlanBean.class);
SearchResultsBean<PlanSummaryBean> rval = new SearchResultsBean<>();
rval.setTotalSize(result.getTotalSize());
List<PlanBean> plans = result.getBeans();
rval.setBeans(new ArrayList<>(plans.size()));
for (PlanBean plan : plans) {
PlanSummaryBean summary = new PlanSummaryBean();
OrganizationBean organization = plan.getOrganization();
summary.setId(plan.getId());
summary.setName(plan.getName());
summary.setDescription(plan.getDescription());
summary.setOrganizationId(plan.getOrganization().getId());
summary.setOrganizationName(organization.getName());
rval.getBeans().add(summary);
}
return rval;
}
/**
* @see io.apiman.manager.api.core.IStorage#createAuditEntry(io.apiman.manager.api.beans.audit.AuditEntryBean)
*/
@Override
public void createAuditEntry(AuditEntryBean entry) throws StorageException {
super.create(entry);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#auditEntity(java.lang.String, java.lang.String, java.lang.String, java.lang.Class, io.apiman.manager.api.beans.search.PagingBean)
*/
@Override
public <T> SearchResultsBean<AuditEntryBean> auditEntity(String organizationId, String entityId, String entityVersion,
Class<T> type, PagingBean paging) throws StorageException {
SearchCriteriaBean criteria = new SearchCriteriaBean();
if (paging != null) {
criteria.setPaging(paging);
} else {
criteria.setPage(1);
criteria.setPageSize(20);
}
criteria.setOrder("id", false);
if (organizationId != null) {
criteria.addFilter("organizationId", organizationId, SearchCriteriaFilterOperator.eq);
}
if (entityId != null) {
criteria.addFilter("entityId", entityId, SearchCriteriaFilterOperator.eq);
}
if (entityVersion != null) {
criteria.addFilter("entityVersion", entityVersion, SearchCriteriaFilterOperator.eq);
}
if (type != null) {
AuditEntityType entityType = null;
if (type == OrganizationBean.class) {
entityType = AuditEntityType.Organization;
} else if (type == ClientBean.class) {
entityType = AuditEntityType.Client;
} else if (type == ApiBean.class) {
entityType = AuditEntityType.Api;
} else if (type == PlanBean.class) {
entityType = AuditEntityType.Plan;
}
if (entityType != null) {
criteria.addFilter("entityType", entityType.name(), SearchCriteriaFilterOperator.eq);
}
}
return find(criteria, AuditEntryBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#auditUser(java.lang.String, io.apiman.manager.api.beans.search.PagingBean)
*/
@Override
public <T> SearchResultsBean<AuditEntryBean> auditUser(String userId, PagingBean paging)
throws StorageException {
SearchCriteriaBean criteria = new SearchCriteriaBean();
if (paging != null) {
criteria.setPaging(paging);
} else {
criteria.setPage(1);
criteria.setPageSize(20);
}
criteria.setOrder("createdOn", false);
if (userId != null) {
criteria.addFilter("who", userId, SearchCriteriaFilterOperator.eq);
}
return find(criteria, AuditEntryBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#listGateways()
*/
@Override
public List<GatewaySummaryBean> listGateways() throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String sql =
"SELECT g.id, g.name, g.description, g.type" +
" FROM gateways g" +
" ORDER BY g.name ASC";
Query query = entityManager.createNativeQuery(sql);
List<Object[]> rows = query.getResultList();
List<GatewaySummaryBean> gateways = new ArrayList<>(rows.size());
for (Object [] row : rows) {
GatewaySummaryBean gateway = new GatewaySummaryBean();
gateway.setId(String.valueOf(row[0]));
gateway.setName(String.valueOf(row[1]));
gateway.setDescription(String.valueOf(row[2]));
gateway.setType(GatewayType.valueOf(String.valueOf(row[3])));
gateways.add(gateway);
}
return gateways;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#listPlugins()
*/
@Override
public List<PluginSummaryBean> listPlugins() throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String sql =
"SELECT p.id, p.artifact_id, p.group_id, p.version, p.classifier, p.type, p.name, p.description, p.created_by, p.created_on" +
" FROM plugins p" +
" WHERE p.deleted IS NULL OR p.deleted = 0" +
" ORDER BY p.name ASC";
Query query = entityManager.createNativeQuery(sql);
List<Object[]> rows = query.getResultList();
List<PluginSummaryBean> plugins = new ArrayList<>(rows.size());
for (Object [] row : rows) {
PluginSummaryBean plugin = new PluginSummaryBean();
plugin.setId(((Number) row[0]).longValue());
plugin.setArtifactId(String.valueOf(row[1]));
plugin.setGroupId(String.valueOf(row[2]));
plugin.setVersion(String.valueOf(row[3]));
plugin.setClassifier((String) row[4]);
plugin.setType((String) row[5]);
plugin.setName(String.valueOf(row[6]));
plugin.setDescription(String.valueOf(row[7]));
plugin.setCreatedBy(String.valueOf(row[8]));
plugin.setCreatedOn((Date) row[9]);
plugins.add(plugin);
}
return plugins;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#listPolicyDefinitions()
*/
@Override
public List<PolicyDefinitionSummaryBean> listPolicyDefinitions() throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String sql =
"SELECT pd.id, pd.policy_impl, pd.name, pd.description, pd.icon, pd.plugin_id, pd.form_type" +
" FROM policydefs pd" +
" WHERE pd.deleted IS NULL OR pd.deleted = 0" +
" ORDER BY pd.name ASC";
Query query = entityManager.createNativeQuery(sql);
List<Object[]> rows = query.getResultList();
List<PolicyDefinitionSummaryBean> rval = new ArrayList<>(rows.size());
for (Object [] row : rows) {
PolicyDefinitionSummaryBean bean = new PolicyDefinitionSummaryBean();
bean.setId(String.valueOf(row[0]));
bean.setPolicyImpl(String.valueOf(row[1]));
bean.setName(String.valueOf(row[2]));
bean.setDescription(String.valueOf(row[3]));
bean.setIcon(String.valueOf(row[4]));
if (row[5] != null) {
bean.setPluginId(((Number) row[5]).longValue());
}
if (row[6] != null) {
bean.setFormType(PolicyFormType.valueOf(String.valueOf(row[6])));
}
rval.add(bean);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getOrgs(java.util.Set)
*/
@Override
public List<OrganizationSummaryBean> getOrgs(Set<String> orgIds) throws StorageException {
List<OrganizationSummaryBean> orgs = new ArrayList<>();
if (orgIds == null || orgIds.isEmpty()) {
return orgs;
}
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT o from OrganizationBean o WHERE o.id IN :orgs ORDER BY o.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgs", orgIds);
List<OrganizationBean> qr = query.getResultList();
for (OrganizationBean bean : qr) {
OrganizationSummaryBean summary = new OrganizationSummaryBean();
summary.setId(bean.getId());
summary.setName(bean.getName());
summary.setDescription(bean.getDescription());
orgs.add(summary);
}
return orgs;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getClientsInOrg(java.lang.String)
*/
@Override
public List<ClientSummaryBean> getClientsInOrg(String orgId) throws StorageException {
Set<String> orgIds = new HashSet<>();
orgIds.add(orgId);
return getClientsInOrgs(orgIds);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getClientsInOrgs(java.util.Set)
*/
@Override
public List<ClientSummaryBean> getClientsInOrgs(Set<String> orgIds) throws StorageException {
List<ClientSummaryBean> rval = new ArrayList<>();
if (orgIds == null || orgIds.isEmpty()) {
return rval;
}
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT a FROM ClientBean a JOIN a.organization o WHERE o.id IN :orgs ORDER BY a.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgs", orgIds);
List<ClientBean> qr = query.getResultList();
for (ClientBean bean : qr) {
ClientSummaryBean summary = new ClientSummaryBean();
summary.setId(bean.getId());
summary.setName(bean.getName());
summary.setDescription(bean.getDescription());
// TODO find the number of contracts - probably need a native SQL query to pull that together
summary.setNumContracts(0);
OrganizationBean org = bean.getOrganization();
summary.setOrganizationId(org.getId());
summary.setOrganizationName(org.getName());
rval.add(summary);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getApisInOrg(java.lang.String)
*/
@Override
public List<ApiSummaryBean> getApisInOrg(String orgId) throws StorageException {
Set<String> orgIds = new HashSet<>();
orgIds.add(orgId);
return getApisInOrgs(orgIds);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getApisInOrgs(java.util.Set)
*/
@Override
public List<ApiSummaryBean> getApisInOrgs(Set<String> orgIds) throws StorageException {
List<ApiSummaryBean> rval = new ArrayList<>();
if (orgIds == null || orgIds.isEmpty()) {
return rval;
}
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT a FROM ApiBean a JOIN a.organization o WHERE o.id IN :orgs ORDER BY a.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgs", orgIds);
List<ApiBean> qr = query.getResultList();
for (ApiBean bean : qr) {
ApiSummaryBean summary = new ApiSummaryBean();
summary.setId(bean.getId());
summary.setName(bean.getName());
summary.setDescription(bean.getDescription());
summary.setCreatedOn(bean.getCreatedOn());
OrganizationBean org = bean.getOrganization();
summary.setOrganizationId(org.getId());
summary.setOrganizationName(org.getName());
rval.add(summary);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorage#getApiVersion(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public ApiVersionBean getApiVersion(String orgId, String apiId, String version)
throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v from ApiVersionBean v JOIN v.api s JOIN s.organization o WHERE o.id = :orgId AND s.id = :apiId AND v.version = :version";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", orgId);
query.setParameter("apiId", apiId);
query.setParameter("version", version);
return (ApiVersionBean) query.getSingleResult();
} catch (NoResultException e) {
return null;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorage#getApiDefinition(io.apiman.manager.api.beans.apis.ApiVersionBean)
*/
@Override
public InputStream getApiDefinition(ApiVersionBean apiVersion) throws StorageException {
ApiDefinitionBean bean = super.get(apiVersion.getId(), ApiDefinitionBean.class);
if (bean == null) {
return null;
} else {
return new ByteArrayInputStream(bean.getData());
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getApiVersions(java.lang.String, java.lang.String)
*/
@Override
public List<ApiVersionSummaryBean> getApiVersions(String orgId, String apiId)
throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT v "
+ " FROM ApiVersionBean v"
+ " JOIN v.api s"
+ " JOIN s.organization o"
+ " WHERE o.id = :orgId"
+ " AND s.id = :apiId"
+ " ORDER BY v.createdOn DESC";
Query query = entityManager.createQuery(jpql);
query.setMaxResults(500);
query.setParameter("orgId", orgId);
query.setParameter("apiId", apiId);
List<ApiVersionBean> apiVersions = query.getResultList();
List<ApiVersionSummaryBean> rval = new ArrayList<>(apiVersions.size());
for (ApiVersionBean apiVersion : apiVersions) {
ApiVersionSummaryBean svsb = new ApiVersionSummaryBean();
svsb.setOrganizationId(apiVersion.getApi().getOrganization().getId());
svsb.setOrganizationName(apiVersion.getApi().getOrganization().getName());
svsb.setId(apiVersion.getApi().getId());
svsb.setName(apiVersion.getApi().getName());
svsb.setDescription(apiVersion.getApi().getDescription());
svsb.setVersion(apiVersion.getVersion());
svsb.setStatus(apiVersion.getStatus());
svsb.setPublicAPI(apiVersion.isPublicAPI());
rval.add(svsb);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getApiVersionPlans(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public List<ApiPlanSummaryBean> getApiVersionPlans(String organizationId, String apiId,
String version) throws StorageException {
List<ApiPlanSummaryBean> plans = new ArrayList<>();
beginTx();
try {
ApiVersionBean versionBean = getApiVersion(organizationId, apiId, version);
Set<ApiPlanBean> apiPlans = versionBean.getPlans();
if (apiPlans != null) {
for (ApiPlanBean spb : apiPlans) {
PlanVersionBean planVersion = getPlanVersion(organizationId, spb.getPlanId(), spb.getVersion());
ApiPlanSummaryBean summary = new ApiPlanSummaryBean();
summary.setPlanId(planVersion.getPlan().getId());
summary.setPlanName(planVersion.getPlan().getName());
summary.setPlanDescription(planVersion.getPlan().getDescription());
summary.setVersion(spb.getVersion());
plans.add(summary);
}
}
return plans;
} catch (StorageException e) {
throw e;
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getContracts(java.lang.String, java.lang.String, java.lang.String, int, int)
*/
@Override
public List<ContractSummaryBean> getContracts(String organizationId, String apiId,
String version, int page, int pageSize) throws StorageException {
int start = (page - 1) * pageSize;
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT c from ContractBean c " +
" JOIN c.api apiv " +
" JOIN apiv.api api " +
" JOIN c.client clientv " +
" JOIN clientv.client client " +
" JOIN api.organization sorg" +
" JOIN client.organization aorg" +
" WHERE api.id = :apiId " +
" AND sorg.id = :orgId " +
" AND apiv.version = :version " +
" ORDER BY sorg.id, api.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("apiId", apiId);
query.setParameter("version", version);
query.setFirstResult(start);
query.setMaxResults(pageSize);
List<ContractBean> contracts = query.getResultList();
List<ContractSummaryBean> rval = new ArrayList<>(contracts.size());
for (ContractBean contractBean : contracts) {
ClientBean client = contractBean.getClient().getClient();
ApiBean api = contractBean.getApi().getApi();
PlanBean plan = contractBean.getPlan().getPlan();
OrganizationBean clientOrg = entityManager.find(OrganizationBean.class, client.getOrganization().getId());
OrganizationBean apiOrg = entityManager.find(OrganizationBean.class, api.getOrganization().getId());
ContractSummaryBean csb = new ContractSummaryBean();
csb.setClientId(client.getId());
csb.setClientOrganizationId(client.getOrganization().getId());
csb.setClientOrganizationName(clientOrg.getName());
csb.setClientName(client.getName());
csb.setClientVersion(contractBean.getClient().getVersion());
csb.setContractId(contractBean.getId());
csb.setCreatedOn(contractBean.getCreatedOn());
csb.setPlanId(plan.getId());
csb.setPlanName(plan.getName());
csb.setPlanVersion(contractBean.getPlan().getVersion());
csb.setApiDescription(api.getDescription());
csb.setApiId(api.getId());
csb.setApiName(api.getName());
csb.setApiOrganizationId(apiOrg.getId());
csb.setApiOrganizationName(apiOrg.getName());
csb.setApiVersion(contractBean.getApi().getVersion());
rval.add(csb);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorage#getClientVersion(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public ClientVersionBean getClientVersion(String orgId, String clientId, String version)
throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v from ClientVersionBean v JOIN v.client a JOIN a.organization o WHERE o.id = :orgId AND a.id = :clientId AND v.version = :version";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", orgId);
query.setParameter("clientId", clientId);
query.setParameter("version", version);
return (ClientVersionBean) query.getSingleResult();
} catch (NoResultException e) {
return null;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getClientVersions(java.lang.String, java.lang.String)
*/
@Override
public List<ClientVersionSummaryBean> getClientVersions(String orgId, String clientId)
throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT v"
+ " FROM ClientVersionBean v"
+ " JOIN v.client a"
+ " JOIN a.organization o"
+ " WHERE o.id = :orgId"
+ " AND a.id = :clientId"
+ " ORDER BY v.createdOn DESC";
Query query = entityManager.createQuery(jpql);
query.setMaxResults(500);
query.setParameter("orgId", orgId);
query.setParameter("clientId", clientId);
List<ClientVersionBean> clientVersions = query.getResultList();
List<ClientVersionSummaryBean> rval = new ArrayList<>();
for (ClientVersionBean clientVersion : clientVersions) {
ClientVersionSummaryBean avsb = new ClientVersionSummaryBean();
avsb.setOrganizationId(clientVersion.getClient().getOrganization().getId());
avsb.setOrganizationName(clientVersion.getClient().getOrganization().getName());
avsb.setId(clientVersion.getClient().getId());
avsb.setName(clientVersion.getClient().getName());
avsb.setDescription(clientVersion.getClient().getDescription());
avsb.setVersion(clientVersion.getVersion());
avsb.setApiKey(clientVersion.getApikey());
avsb.setStatus(clientVersion.getStatus());
rval.add(avsb);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getClientContracts(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public List<ContractSummaryBean> getClientContracts(String organizationId, String clientId,
String version) throws StorageException {
beginTx();
try {
return getClientContractsInternal(organizationId, clientId, version);
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* Returns a list of all contracts for the given client.
* @param organizationId
* @param clientId
* @param version
* @throws StorageException
*/
protected List<ContractSummaryBean> getClientContractsInternal(String organizationId, String clientId,
String version) throws StorageException {
List<ContractSummaryBean> rval = new ArrayList<>();
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT c from ContractBean c " +
" JOIN c.client clientv " +
" JOIN clientv.client client " +
" JOIN client.organization aorg" +
" WHERE client.id = :clientId " +
" AND aorg.id = :orgId " +
" AND clientv.version = :version " +
" ORDER BY aorg.id, client.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId); //$NON-NLS-1$
query.setParameter("clientId", clientId); //$NON-NLS-1$
query.setParameter("version", version); //$NON-NLS-1$
List<ContractBean> contracts = query.getResultList();
for (ContractBean contractBean : contracts) {
ClientBean client = contractBean.getClient().getClient();
ApiBean api = contractBean.getApi().getApi();
PlanBean plan = contractBean.getPlan().getPlan();
OrganizationBean clientOrg = entityManager.find(OrganizationBean.class, client.getOrganization().getId());
OrganizationBean apiOrg = entityManager.find(OrganizationBean.class, api.getOrganization().getId());
ContractSummaryBean csb = new ContractSummaryBean();
csb.setClientId(client.getId());
csb.setClientOrganizationId(client.getOrganization().getId());
csb.setClientOrganizationName(clientOrg.getName());
csb.setClientName(client.getName());
csb.setClientVersion(contractBean.getClient().getVersion());
csb.setContractId(contractBean.getId());
csb.setCreatedOn(contractBean.getCreatedOn());
csb.setPlanId(plan.getId());
csb.setPlanName(plan.getName());
csb.setPlanVersion(contractBean.getPlan().getVersion());
csb.setApiDescription(api.getDescription());
csb.setApiId(api.getId());
csb.setApiName(api.getName());
csb.setApiOrganizationId(apiOrg.getId());
csb.setApiOrganizationName(apiOrg.getName());
csb.setApiVersion(contractBean.getApi().getVersion());
rval.add(csb);
}
return rval;
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getApiRegistry(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public ApiRegistryBean getApiRegistry(String organizationId, String clientId, String version)
throws StorageException {
ApiRegistryBean rval = new ApiRegistryBean();
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT c from ContractBean c " +
" JOIN c.client clientv " +
" JOIN clientv.client client " +
" JOIN client.organization aorg" +
" WHERE client.id = :clientId " +
" AND aorg.id = :orgId " +
" AND clientv.version = :version " +
" ORDER BY c.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("clientId", clientId);
query.setParameter("version", version);
List<ContractBean> contracts = query.getResultList();
for (ContractBean contractBean : contracts) {
ApiVersionBean svb = contractBean.getApi();
ApiBean api = svb.getApi();
PlanBean plan = contractBean.getPlan().getPlan();
OrganizationBean apiOrg = api.getOrganization();
ApiEntryBean entry = new ApiEntryBean();
entry.setApiId(api.getId());
entry.setApiName(api.getName());
entry.setApiOrgId(apiOrg.getId());
entry.setApiOrgName(apiOrg.getName());
entry.setApiVersion(svb.getVersion());
entry.setPlanId(plan.getId());
entry.setPlanName(plan.getName());
entry.setPlanVersion(contractBean.getPlan().getVersion());
Set<ApiGatewayBean> gateways = svb.getGateways();
if (gateways != null && !gateways.isEmpty()) {
ApiGatewayBean sgb = gateways.iterator().next();
entry.setGatewayId(sgb.getGatewayId());
}
rval.getApis().add(entry);
}
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
return rval;
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getPlansInOrg(java.lang.String)
*/
@Override
public List<PlanSummaryBean> getPlansInOrg(String orgId) throws StorageException {
Set<String> orgIds = new HashSet<>();
orgIds.add(orgId);
return getPlansInOrgs(orgIds);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getPlansInOrgs(java.util.Set)
*/
@Override
public List<PlanSummaryBean> getPlansInOrgs(Set<String> orgIds) throws StorageException {
List<PlanSummaryBean> rval = new ArrayList<>();
if (orgIds == null || orgIds.isEmpty()) {
return rval;
}
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT p FROM PlanBean p JOIN p.organization o WHERE o.id IN :orgs ORDER BY p.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgs", orgIds);
query.setMaxResults(500);
List<PlanBean> qr = query.getResultList();
for (PlanBean bean : qr) {
PlanSummaryBean summary = new PlanSummaryBean();
summary.setId(bean.getId());
summary.setName(bean.getName());
summary.setDescription(bean.getDescription());
OrganizationBean org = bean.getOrganization();
summary.setOrganizationId(org.getId());
summary.setOrganizationName(org.getName());
rval.add(summary);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorage#getPlanVersion(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public PlanVersionBean getPlanVersion(String orgId, String planId, String version)
throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v from PlanVersionBean v JOIN v.plan p JOIN p.organization o WHERE o.id = :orgId AND p.id = :planId AND v.version = :version";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", orgId);
query.setParameter("planId", planId);
query.setParameter("version", version);
return (PlanVersionBean) query.getSingleResult();
} catch (NoResultException e) {
return null;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getPlanVersions(java.lang.String, java.lang.String)
*/
@Override
public List<PlanVersionSummaryBean> getPlanVersions(String orgId, String planId) throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v from PlanVersionBean v" +
" JOIN v.plan p" +
" JOIN p.organization o" +
" WHERE o.id = :orgId" +
" AND p.id = :planId" +
" ORDER BY v.createdOn DESC";
Query query = entityManager.createQuery(jpql);
query.setMaxResults(500);
query.setParameter("orgId", orgId);
query.setParameter("planId", planId);
List<PlanVersionBean> planVersions = query.getResultList();
List<PlanVersionSummaryBean> rval = new ArrayList<>(planVersions.size());
for (PlanVersionBean planVersion : planVersions) {
PlanVersionSummaryBean pvsb = new PlanVersionSummaryBean();
pvsb.setOrganizationId(planVersion.getPlan().getOrganization().getId());
pvsb.setOrganizationName(planVersion.getPlan().getOrganization().getName());
pvsb.setId(planVersion.getPlan().getId());
pvsb.setName(planVersion.getPlan().getName());
pvsb.setDescription(planVersion.getPlan().getDescription());
pvsb.setVersion(planVersion.getVersion());
pvsb.setStatus(planVersion.getStatus());
rval.add(pvsb);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getPolicies(java.lang.String, java.lang.String, java.lang.String, io.apiman.manager.api.beans.policies.PolicyType)
*/
@Override
public List<PolicySummaryBean> 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"
+ " ORDER BY p.orderIndex ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("entityId", entityId);
query.setParameter("entityVersion", version);
query.setParameter("type", type);
List<PolicyBean> policyBeans = query.getResultList();
List<PolicySummaryBean> rval = new ArrayList<>(policyBeans.size());
for (PolicyBean policyBean : policyBeans) {
PolicyTemplateUtil.generatePolicyDescription(policyBean);
PolicySummaryBean psb = new PolicySummaryBean();
psb.setId(policyBean.getId());
psb.setName(policyBean.getName());
psb.setDescription(policyBean.getDescription());
psb.setPolicyDefinitionId(policyBean.getDefinition().getId());
psb.setIcon(policyBean.getDefinition().getIcon());
psb.setCreatedBy(policyBean.getCreatedBy());
psb.setCreatedOn(policyBean.getCreatedOn());
rval.add(psb);
}
return rval;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getMaxPolicyOrderIndex(java.lang.String, java.lang.String, java.lang.String, io.apiman.manager.api.beans.policies.PolicyType)
*/
@Override
public int getMaxPolicyOrderIndex(String organizationId, String entityId, String entityVersion,
PolicyType type) throws StorageException {
SearchCriteriaBean criteria = new SearchCriteriaBean();
criteria.addFilter("organizationId", organizationId, SearchCriteriaFilterOperator.eq);
criteria.addFilter("entityId", entityId, SearchCriteriaFilterOperator.eq);
criteria.addFilter("entityVersion", entityVersion, SearchCriteriaFilterOperator.eq);
criteria.addFilter("type", type.name(), SearchCriteriaFilterOperator.eq);
criteria.setOrder("orderIndex", false);
criteria.setPage(1);
criteria.setPageSize(1);
SearchResultsBean<PolicyBean> resultsBean = find(criteria, PolicyBean.class);
if (resultsBean.getBeans() == null || resultsBean.getBeans().isEmpty()) {
return 0;
} else {
return resultsBean.getBeans().get(0).getOrderIndex();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#listPluginPolicyDefs(java.lang.Long)
*/
@Override
public List<PolicyDefinitionSummaryBean> listPluginPolicyDefs(Long pluginId) throws StorageException {
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
String sql =
"SELECT pd.id, pd.policy_impl, pd.name, pd.description, pd.icon, pd.plugin_id, pd.form_type" +
" FROM policydefs pd" +
" WHERE pd.plugin_id = ?" +
" ORDER BY pd.name ASC";
Query query = entityManager.createNativeQuery(sql);
query.setParameter(1, pluginId);
List<Object[]> rows = query.getResultList();
List<PolicyDefinitionSummaryBean> beans = new ArrayList<>(rows.size());
for (Object [] row : rows) {
PolicyDefinitionSummaryBean bean = new PolicyDefinitionSummaryBean();
bean.setId(String.valueOf(row[0]));
bean.setPolicyImpl(String.valueOf(row[1]));
bean.setName(String.valueOf(row[2]));
bean.setDescription(String.valueOf(row[3]));
bean.setIcon(String.valueOf(row[4]));
if (row[5] != null) {
bean.setPluginId(((Number) row[5]).longValue());
}
if (row[6] != null) {
bean.setFormType(PolicyFormType.valueOf(String.valueOf(row[6])));
}
beans.add(bean);
}
return beans;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorage#createUser(io.apiman.manager.api.beans.idm.UserBean)
*/
@Override
public void createUser(UserBean user) throws StorageException {
super.create(user);
}
/**
* @see io.apiman.manager.api.core.IStorage#getUser(java.lang.String)
*/
@Override
public UserBean getUser(String userId) throws StorageException {
return super.get(userId, UserBean.class);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateUser(io.apiman.manager.api.beans.idm.UserBean)
*/
@Override
public void updateUser(UserBean user) throws StorageException {
super.update(user);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#findUsers(io.apiman.manager.api.beans.search.SearchCriteriaBean)
*/
@Override
public SearchResultsBean<UserBean> findUsers(SearchCriteriaBean criteria) throws StorageException {
beginTx();
try {
return super.find(criteria, UserBean.class);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorage#createRole(io.apiman.manager.api.beans.idm.RoleBean)
*/
@Override
public void createRole(RoleBean role) throws StorageException {
super.create(role);
}
/**
* @see io.apiman.manager.api.core.IStorage#updateRole(io.apiman.manager.api.beans.idm.RoleBean)
*/
@Override
public void updateRole(RoleBean role) throws StorageException {
super.update(role);
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteRole(io.apiman.manager.api.beans.idm.RoleBean)
*/
@Override
public void deleteRole(RoleBean role) throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
RoleBean prole = get(role.getId(), RoleBean.class);
// First delete all memberships in this role
Query query = entityManager.createQuery("DELETE from RoleMembershipBean m WHERE m.roleId = :roleId" );
query.setParameter("roleId", role.getId());
query.executeUpdate();
// Then delete the role itself.
super.delete(prole);
} catch (Throwable t) {
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorage#getRole(java.lang.String)
*/
@Override
public RoleBean getRole(String roleId) throws StorageException {
return getRoleInternal(roleId);
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#findRoles(io.apiman.manager.api.beans.search.SearchCriteriaBean)
*/
@Override
public SearchResultsBean<RoleBean> findRoles(SearchCriteriaBean criteria) throws StorageException {
beginTx();
try {
return super.find(criteria, RoleBean.class);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorage#createMembership(io.apiman.manager.api.beans.idm.RoleMembershipBean)
*/
@Override
public void createMembership(RoleMembershipBean membership) throws StorageException {
super.create(membership);
}
/**
* @see io.apiman.manager.api.core.IStorage#getMembership(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public RoleMembershipBean getMembership(String userId, String roleId, String organizationId) throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
Query query = entityManager.createQuery("SELECT m FROM RoleMembershipBean m WHERE m.roleId = :roleId AND m.userId = :userId AND m.organizationId = :orgId" );
query.setParameter("roleId", roleId);
query.setParameter("userId", userId);
query.setParameter("orgId", organizationId);
RoleMembershipBean bean = null;
List<?> resultList = query.getResultList();
if (!resultList.isEmpty()) {
bean = (RoleMembershipBean) resultList.iterator().next();
}
return bean;
} catch (Throwable t) {
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteMembership(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void deleteMembership(String userId, String roleId, String organizationId) throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
Query query = entityManager.createQuery("DELETE FROM RoleMembershipBean m WHERE m.roleId = :roleId AND m.userId = :userId AND m.organizationId = :orgId" );
query.setParameter("roleId", roleId);
query.setParameter("userId", userId);
query.setParameter("orgId", organizationId);
query.executeUpdate();
} catch (Throwable t) {
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorage#deleteMemberships(java.lang.String, java.lang.String)
*/
@Override
public void deleteMemberships(String userId, String organizationId) throws StorageException {
try {
EntityManager entityManager = getActiveEntityManager();
Query query = entityManager.createQuery("DELETE FROM RoleMembershipBean m WHERE m.userId = :userId AND m.organizationId = :orgId" );
query.setParameter("userId", userId);
query.setParameter("orgId", organizationId);
query.executeUpdate();
} catch (Throwable t) {
throw new StorageException(t);
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getUserMemberships(java.lang.String)
*/
@Override
public Set<RoleMembershipBean> getUserMemberships(String userId) throws StorageException {
Set<RoleMembershipBean> memberships = new HashSet<>();
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<RoleMembershipBean> criteriaQuery = builder.createQuery(RoleMembershipBean.class);
Root<RoleMembershipBean> from = criteriaQuery.from(RoleMembershipBean.class);
criteriaQuery.where(builder.equal(from.get("userId"), userId));
TypedQuery<RoleMembershipBean> typedQuery = entityManager.createQuery(criteriaQuery);
List<RoleMembershipBean> resultList = typedQuery.getResultList();
memberships.addAll(resultList);
return memberships;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getUserMemberships(java.lang.String, java.lang.String)
*/
@Override
public Set<RoleMembershipBean> getUserMemberships(String userId, String organizationId) throws StorageException {
Set<RoleMembershipBean> memberships = new HashSet<>();
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<RoleMembershipBean> criteriaQuery = builder.createQuery(RoleMembershipBean.class);
Root<RoleMembershipBean> from = criteriaQuery.from(RoleMembershipBean.class);
criteriaQuery.where(
builder.equal(from.get("userId"), userId),
builder.equal(from.get("organizationId"), organizationId) );
TypedQuery<RoleMembershipBean> typedQuery = entityManager.createQuery(criteriaQuery);
List<RoleMembershipBean> resultList = typedQuery.getResultList();
memberships.addAll(resultList);
return memberships;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getOrgMemberships(java.lang.String)
*/
@Override
public Set<RoleMembershipBean> getOrgMemberships(String organizationId) throws StorageException {
Set<RoleMembershipBean> memberships = new HashSet<>();
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<RoleMembershipBean> criteriaQuery = builder.createQuery(RoleMembershipBean.class);
Root<RoleMembershipBean> from = criteriaQuery.from(RoleMembershipBean.class);
criteriaQuery.where(builder.equal(from.get("organizationId"), organizationId));
TypedQuery<RoleMembershipBean> typedQuery = entityManager.createQuery(criteriaQuery);
List<RoleMembershipBean> resultList = typedQuery.getResultList();
memberships.addAll(resultList);
return memberships;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @see io.apiman.manager.api.core.IStorageQuery#getPermissions(java.lang.String)
*/
@Override
public Set<PermissionBean> getPermissions(String userId) throws StorageException {
Set<PermissionBean> permissions = new HashSet<>();
beginTx();
try {
EntityManager entityManager = getActiveEntityManager();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<RoleMembershipBean> criteriaQuery = builder.createQuery(RoleMembershipBean.class);
Root<RoleMembershipBean> from = criteriaQuery.from(RoleMembershipBean.class);
criteriaQuery.where(builder.equal(from.get("userId"), userId));
TypedQuery<RoleMembershipBean> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setMaxResults(500);
List<RoleMembershipBean> resultList = typedQuery.getResultList();
for (RoleMembershipBean membership : resultList) {
RoleBean role = getRoleInternal(membership.getRoleId());
String qualifier = membership.getOrganizationId();
for (PermissionType permission : role.getPermissions()) {
PermissionBean p = new PermissionBean();
p.setName(permission);
p.setOrganizationId(qualifier);
permissions.add(p);
}
}
return permissions;
} catch (Throwable t) {
logger.error(t.getMessage(), t);
throw new StorageException(t);
} finally {
rollbackTx();
}
}
/**
* @param roleId the role id
* @return a role by id
* @throws StorageException
*/
protected RoleBean getRoleInternal(String roleId) throws StorageException {
return super.get(roleId, RoleBean.class);
}
@Override
public Iterator<OrganizationBean> getAllOrganizations() throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jqpl = "SELECT b FROM OrganizationBean b ORDER BY b.id ASC";
Query query = entityManager.createQuery(jqpl);
return super.getAll(OrganizationBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllPlans(java.lang.String)
*/
@Override
public Iterator<PlanBean> getAllPlans(String organizationId) throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM PlanBean b "
+ "WHERE b.organization.id = :orgId "
+ "ORDER BY b.id ASC"; //$NON-NLS-1$
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
return super.getAll(PlanBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllApis(java.lang.String)
*/
@Override
public Iterator<ApiBean> getAllApis(String organizationId) throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM ApiBean b "
+ "WHERE b.organization.id = :orgId "
+ "ORDER BY b.id ASC"; //$NON-NLS-1$
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
return super.getAll(ApiBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllClients(java.lang.String)
*/
@Override
public Iterator<ClientBean> getAllClients(String organizationId) throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM ClientBean b "
+ "WHERE b.organization.id = :orgId "
+ "ORDER BY b.id ASC"; //$NON-NLS-1$
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
return super.getAll(ClientBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllClientVersions(java.lang.String, java.lang.String)
*/
@Override
public Iterator<ClientVersionBean> getAllClientVersions(String organizationId,
String clientId) throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v "
+ " FROM ClientVersionBean v "
+ " JOIN v.client a "
+ " JOIN a.organization o "
+ " WHERE o.id = :orgId "
+ " AND a.id = :clientId"
+ " ORDER BY v.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("clientId", clientId);
return super.getAll(ClientVersionBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllContracts(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public Iterator<ContractBean> getAllContracts(String organizationId, String clientId, String version)
throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT c from ContractBean c " +
" JOIN c.client clientv " +
" JOIN clientv.client client " +
" JOIN client.organization aorg" +
" WHERE client.id = :clientId " +
" AND aorg.id = :orgId " +
" AND clientv.version = :version " +
" ORDER BY c.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("clientId", clientId);
query.setParameter("version", version);
return getAll(ContractBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllPolicies(java.lang.String, java.lang.String, java.lang.String, io.apiman.manager.api.beans.policies.PolicyType)
*/
@Override
public Iterator<PolicyBean> getAllPolicies(String organizationId, String entityId, String version,
PolicyType type) throws StorageException {
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"
+ " ORDER BY p.orderIndex ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("entityId", entityId);
query.setParameter("entityVersion", version);
query.setParameter("type", type);
return getAll(PolicyBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllPlanVersions(java.lang.String, java.lang.String)
*/
@Override
public Iterator<PlanVersionBean> getAllPlanVersions(String organizationId, String planId)
throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v "
+ " FROM PlanVersionBean v "
+ " JOIN v.plan p "
+ " JOIN p.organization o "
+ " WHERE o.id = :orgId "
+ " AND p.id = :planId"
+ " ORDER BY v.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("planId", planId);
return super.getAll(PlanVersionBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllApiVersions(java.lang.String, java.lang.String)
*/
@Override
public Iterator<ApiVersionBean> getAllApiVersions(String organizationId, String apiId)
throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql = "SELECT v "
+ " FROM ApiVersionBean v "
+ " JOIN v.api s "
+ " JOIN s.organization o "
+ " WHERE o.id = :orgId "
+ " AND s.id = :apiId"
+ " ORDER BY v.id ASC";
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", organizationId);
query.setParameter("apiId", apiId);
return super.getAll(ApiVersionBean.class, query);
}
@Override
public Iterator<GatewayBean> getAllGateways() throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b FROM GatewayBean b ORDER BY b.id ASC";
Query query = entityManager.createQuery(jpql);
return super.getAll(GatewayBean.class, query);
}
@Override
public Iterator<AuditEntryBean> getAllAuditEntries(String orgId) throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM AuditEntryBean b "
+ "WHERE organization_id = :orgId "
+ "ORDER BY b.id ASC"; //$NON-NLS-1$
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", orgId);
return super.getAll(AuditEntryBean.class, query);
}
@Override
public Iterator<PluginBean> getAllPlugins() throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM PluginBean b "
+ "ORDER BY b.id ASC";
Query query = entityManager.createQuery(jpql);
return super.getAll(PluginBean.class, query);
}
/**
* @see io.apiman.manager.api.core.IStorage#getAllPolicyDefinitions()
*/
@Override
public Iterator<PolicyDefinitionBean> getAllPolicyDefinitions() throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM PolicyDefinitionBean b "
+ "ORDER BY b.id ASC";
Query query = entityManager.createQuery(jpql);
return super.getAll(PolicyDefinitionBean.class, query);
}
@Override
public Iterator<RoleMembershipBean> getAllMemberships(String orgId) throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM RoleMembershipBean b "
+ "WHERE organizationId = :orgId "
+ "ORDER BY b.id ASC"; //$NON-NLS-1$
Query query = entityManager.createQuery(jpql);
query.setParameter("orgId", orgId);
return super.getAll(RoleMembershipBean.class, query);
}
@Override
public Iterator<UserBean> getAllUsers() throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM UserBean b "
+ "ORDER BY b.username ASC";
Query query = entityManager.createQuery(jpql);
return super.getAll(UserBean.class, query);
}
@Override
public Iterator<RoleBean> getAllRoles() throws StorageException {
EntityManager entityManager = getActiveEntityManager();
String jpql =
"SELECT b "
+ "FROM RoleBean b "
+ "ORDER BY b.id ASC";
Query query = entityManager.createQuery(jpql);
return super.getAll(RoleBean.class, query);
}
@Override
public Iterator<ContractBean> getAllContracts(OrganizationBean organizationBean, int lim) throws StorageException {
String jpql =
" SELECT contractBean "
+ " FROM ContractBean contractBean "
// Api
+ " JOIN contractBean.api apiVersion "
+ " JOIN apiVersion.api api "
+ " JOIN api.organization apiOrg "
// Client
+ " JOIN contractBean.client clientVersion "
+ " JOIN clientVersion.client client "
+ " JOIN api.organization clientOrg "
// Check API status
+ " WHERE (apiOrg.id = :orgId AND apiVersion.status = :apiStatus)"
// Check In-Org ClientApp status
+ " OR (clientOrg.id = :orgId AND clientVersion.status = :clientStatus)";
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
query.setParameter("clientStatus", ClientStatus.Registered);
query.setParameter("apiStatus", ApiStatus.Published);
if (lim > 0) {
query.setMaxResults(lim);
}
return super.getAll(ContractBean.class, query);
}
@Override
public Iterator<ClientVersionBean> getAllClientVersions(OrganizationBean organizationBean, int lim) throws StorageException {
return getAllClientVersions(organizationBean, null, lim);
}
@Override
public Iterator<ClientVersionBean> getAllClientVersions(OrganizationBean organizationBean, ClientStatus status, int lim) throws StorageException {
String jpql = "SELECT v "
+ " FROM ClientVersionBean v "
+ " JOIN v.client c "
+ " JOIN c.organization o "
+ "WHERE o.id = :orgId ";
if (status != null) {
jpql += String.format(" AND v.status = '%s' ", status.name());
}
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
if (lim > 0) {
query.setMaxResults(lim);
}
return super.getAll(ClientVersionBean.class, query);
}
@Override
public Iterator<ApiVersionBean> getAllApiVersions(OrganizationBean organizationBean, int lim) throws StorageException {
return getAllApiVersions(organizationBean, null, lim);
}
@Override
public Iterator<ApiVersionBean> getAllApiVersions(OrganizationBean organizationBean, ApiStatus status, int lim) throws StorageException {
String jpql = "SELECT v "
+ " FROM ApiVersionBean v "
+ " JOIN v.api a"
+ " JOIN a.organization o "
+ " WHERE o.id = :orgId ";
if (status != null) {
jpql += String.format(" AND v.status = '%s' ", status.name());
}
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
if (lim > 0) {
query.setMaxResults(lim);
}
return super.getAll(ApiVersionBean.class, query);
}
@Override
public Iterator<PlanVersionBean> getAllPlanVersions(OrganizationBean organizationBean, int lim) throws StorageException {
return getAllPlanVersions(organizationBean, null, lim);
}
@Override
public Iterator<PlanVersionBean> getAllPlanVersions(OrganizationBean organizationBean, PlanStatus status, int lim) throws StorageException {
String jpql = "SELECT v "
+ " FROM PlanVersionBean v "
+ " JOIN v.plan p "
+ " JOIN p.organization o "
+ " WHERE o.id = :orgId ";
if (status != null) {
jpql += String.format(" AND v.status = '%s' ", status.name());
}
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
if (lim > 0) {
query.setMaxResults(lim);
}
return super.getAll(PlanVersionBean.class, query);
}
private void deleteAllPolicies(OrganizationBean organizationBean) throws StorageException {
deleteAllPolicies(organizationBean, null);
}
private void deleteAllPolicies(ApiBean apiBean) throws StorageException {
deleteAllPolicies(apiBean.getOrganization(), apiBean.getId());
}
private void deleteAllPolicies(ClientBean clientBean) throws StorageException {
deleteAllPolicies(clientBean.getOrganization(), clientBean.getId());
}
private void deleteAllPolicies(OrganizationBean organizationBean, String entityId) throws StorageException {
String jpql = "DELETE PolicyBean b "
+ " WHERE b.organizationId = :orgId ";
if (entityId != null) {
jpql += String.format("AND b.entityId = '%s'", entityId);
}
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
}
private void deleteAllMemberships(OrganizationBean organizationBean) throws StorageException {
String jpql = "DELETE RoleMembershipBean b "
+ " WHERE b.organizationId = :orgId ";
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
query.executeUpdate();
}
private void deleteAllAuditEntries(PlanBean plan) throws StorageException {
deleteAllAuditEntries(plan.getOrganization(), AuditEntityType.Plan, plan.getId());
}
private void deleteAllAuditEntries(ApiBean apiBean) throws StorageException {
deleteAllAuditEntries(apiBean.getOrganization(), AuditEntityType.Api, apiBean.getId());
}
private void deleteAllAuditEntries(ClientBean clientBean) throws StorageException {
deleteAllAuditEntries(clientBean.getOrganization(), AuditEntityType.Client, clientBean.getId());
}
private void deleteAllAuditEntries(OrganizationBean organizationBean) throws StorageException {
deleteAllAuditEntries(organizationBean, null, null);
}
private void deleteAllAuditEntries(OrganizationBean organizationBean, AuditEntityType entityType, String entityId) throws StorageException {
String jpql = "DELETE AuditEntryBean b "
+ " WHERE b.organizationId = :orgId ";
if (entityId != null && entityType != null) {
jpql += String.format("AND b.entityId = '%s' AND b.entityType = '%s' ", entityId, entityType.name());
}
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
query.executeUpdate();
}
private void deleteAllContracts(ApiBean apiBean) throws StorageException {
Query query;
if (isMySql()) {
String sql =
"DELETE c " +
" FROM contracts c " +
" JOIN api_versions " +
" ON c.apiv_id = api_versions.id " +
" JOIN apis " +
" ON api_versions.api_id = apis.id " +
" AND api_versions.api_org_id = apis.organization_id " +
" JOIN organizations " +
" ON apis.organization_id = organizations.id " +
"WHERE organizations.id = :orgId " +
"AND apis.id = :apiId ;";
query = getActiveEntityManager().createNativeQuery(sql);
} else {
String jpql =
"DELETE ContractBean deleteBean " +
" WHERE deleteBean IN ( " +
" SELECT b " +
" FROM ContractBean b " +
" JOIN b.api apiVersion " +
" JOIN apiVersion.api api " +
" JOIN api.organization o " +
" WHERE o.id = :orgId " +
" AND api.id = :apiId " +
" )";
query = getActiveEntityManager().createQuery(jpql);
}
query.setParameter("orgId", apiBean.getOrganization().getId());
query.setParameter("apiId", apiBean.getId());
query.executeUpdate();
}
private void deleteAllContracts(ClientBean clientBean) throws StorageException {
Query query;
if (isMySql()) {
String sql =
"DELETE c " +
" FROM contracts c " +
" JOIN client_versions " +
" ON c.clientv_id = client_versions.id " +
" JOIN clients " +
" ON client_versions.client_id = clients.id " +
" AND client_versions.client_org_id = clients.organization_id " +
" JOIN organizations " +
" ON clients.organization_id = organizations.id " +
"WHERE organizations.id = :orgId " +
"AND clients.id = :clientId ;";
query = getActiveEntityManager().createNativeQuery(sql);
} else {
String jpql =
"DELETE ContractBean deleteBean " +
" WHERE deleteBean IN ( " +
" SELECT b " +
" FROM ContractBean b " +
" JOIN b.client clientVersion " +
" JOIN clientVersion.client client " +
" JOIN client.organization o " +
" WHERE o.id = :orgId " +
" AND client.id = :clientId " +
" )";
query = getActiveEntityManager().createQuery(jpql);
}
query.setParameter("orgId", clientBean.getOrganization().getId());
query.setParameter("clientId", clientBean.getId());
query.executeUpdate();
}
private void deleteAllContracts(OrganizationBean organizationBean) throws StorageException {
Query query;
if (isMySql()) {
String sql =
"DELETE c " +
" FROM contracts c " +
" JOIN api_versions " +
" ON c.apiv_id = api_versions.id " +
" JOIN apis " +
" ON api_versions.api_id = apis.id " +
" AND api_versions.api_org_id = apis.organization_id " +
" JOIN organizations " +
" ON apis.organization_id = organizations.id " +
"WHERE organizations.id = :orgId ;";
query = getActiveEntityManager().createNativeQuery(sql);
} else {
String jpql =
"DELETE ContractBean deleteBean " +
" WHERE deleteBean IN ( " +
" SELECT b " +
" FROM ContractBean b " +
" JOIN b.api apiVersion " +
" JOIN apiVersion.api api " +
" JOIN api.organization o " +
" WHERE o.id = :orgId " +
" )";
query = getActiveEntityManager().createQuery(jpql);
}
query.setParameter("orgId", organizationBean.getId());
query.executeUpdate();
}
private boolean isMySql() throws StorageException {
return StringUtils.containsIgnoreCase(getDialect(), "mysql");
}
private <T> void remove(T entity) throws StorageException {
EntityManager em = getActiveEntityManager();
em.remove(em.contains(entity) ? entity : em.merge(entity));
}
public void deleteAllPlans(OrganizationBean organizationBean) throws StorageException {
deleteAllPlanVersions(organizationBean);
String jpql = "DELETE PlanBean p "
+ " WHERE p.organization.id = :orgId ";
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
query.executeUpdate();
}
private void deleteAllPlanVersions(OrganizationBean organizationBean) throws StorageException {
String jpql = "DELETE PlanVersionBean deleteBean "
+ " WHERE deleteBean IN ("
+ "SELECT v"
+ " FROM PlanVersionBean v "
+ " JOIN v.plan p "
+ " JOIN p.organization o "
+ " WHERE o.id = :orgId "
+ ")";
Query query = getActiveEntityManager().createQuery(jpql);
query.setParameter("orgId", organizationBean.getId());
query.executeUpdate();
}
}