package org.axway.grapes.server.core; import org.axway.grapes.server.core.options.filters.CorporateFilter; import org.axway.grapes.server.db.RepositoryHandler; import org.axway.grapes.server.db.datamodel.DbModule; import org.axway.grapes.server.db.datamodel.DbOrganization; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import java.util.List; /** * Organization Handler * * <p>Manages all operation regarding Organizations. It can, get/update Organizations of the database.</p> * * @author jdcoffre */ public class OrganizationHandler { private final RepositoryHandler repositoryHandler; public OrganizationHandler(final RepositoryHandler repositoryHandler) { this.repositoryHandler = repositoryHandler; } /** * Stores an Organization in Grapes database * * @param dbOrganization DbOrganization */ public void store(final DbOrganization dbOrganization) { repositoryHandler.store(dbOrganization); } /** * Returns all the organization names * * @return List<String> */ public List<String> getOrganizationNames() { return repositoryHandler.getOrganizationNames(); } /** * Returns an Organization * * @param organizationId String * @return DbOrganization */ public DbOrganization getOrganization(final String organizationId) { final DbOrganization dbOrganization = repositoryHandler.getOrganization(organizationId); if(dbOrganization == null){ throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) .entity("Organization " + organizationId + " does not exist.").build()); } return dbOrganization; } /** * Deletes an organization * * @param organizationId String */ public void deleteOrganization(final String organizationId) { final DbOrganization dbOrganization = getOrganization(organizationId); repositoryHandler.deleteOrganization(dbOrganization.getName()); repositoryHandler.removeModulesOrganization(dbOrganization); } /** * Returns the list view of corporate groupIds of an organization * * @param organizationId String * @return ListView */ public List<String> getCorporateGroupIds(final String organizationId) { final DbOrganization dbOrganization = getOrganization(organizationId); return dbOrganization.getCorporateGroupIdPrefixes(); } /** * Adds a corporate groupId to an organization * * @param organizationId String * @param corporateGroupId String */ public void addCorporateGroupId(final String organizationId, final String corporateGroupId) { final DbOrganization dbOrganization = getOrganization(organizationId); if(!dbOrganization.getCorporateGroupIdPrefixes().contains(corporateGroupId)){ dbOrganization.getCorporateGroupIdPrefixes().add(corporateGroupId); repositoryHandler.store(dbOrganization); } repositoryHandler.addModulesOrganization(corporateGroupId, dbOrganization); } /** * Removes a corporate groupId from an Organisation * * @param organizationId String * @param corporateGroupId String */ public void removeCorporateGroupId(final String organizationId, final String corporateGroupId) { final DbOrganization dbOrganization = getOrganization(organizationId); if(dbOrganization.getCorporateGroupIdPrefixes().contains(corporateGroupId)){ dbOrganization.getCorporateGroupIdPrefixes().remove(corporateGroupId); repositoryHandler.store(dbOrganization); } repositoryHandler.removeModulesOrganization(corporateGroupId, dbOrganization); } /** * Returns an Organization that suits the Module or null if there is none * * @param dbModule DbModule * @return DbOrganization */ public DbOrganization getMatchingOrganization(final DbModule dbModule) { if(dbModule.getOrganization() != null && !dbModule.getOrganization().isEmpty()){ return getOrganization(dbModule.getOrganization()); } for(DbOrganization organization: repositoryHandler.getAllOrganizations()){ final CorporateFilter corporateFilter = new CorporateFilter(organization); if(corporateFilter.matches(dbModule)){ return organization; } } return null; } }