package org.axway.grapes.server.core.options.filters; import org.axway.grapes.server.db.DBRegExp; import org.axway.grapes.server.db.DataUtils; import org.axway.grapes.server.db.datamodel.DbArtifact; import org.axway.grapes.server.db.datamodel.DbDependency; import org.axway.grapes.server.db.datamodel.DbModule; import org.axway.grapes.server.db.datamodel.DbOrganization; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class CorporateFilter implements Filter { private DbOrganization organization; public CorporateFilter(final DbOrganization organization) { this.organization = organization; } @Override public boolean filter(final Object datamodelObj) { if(datamodelObj instanceof DbModule){ return matches((DbModule) datamodelObj); } if(datamodelObj instanceof DbArtifact){ return matches((DbArtifact)datamodelObj); } if(datamodelObj instanceof DbDependency){ return matches((DbDependency)datamodelObj); } return false; } public boolean matches(final DbModule module) { final List<String> artifacts = DataUtils.getAllArtifacts(module); if(artifacts.isEmpty()){ return evaluate(module.getId()); } return evaluate(artifacts.get(0)); } public boolean matches(final DbArtifact artifact) { return evaluate(artifact.getGavc()); } public boolean matches(final DbDependency dependency) { return evaluate(dependency.getTarget()); } @Override public Map<String, Object> moduleFilterFields() { final Map<String, Object> queryParams = new HashMap<String, Object>(); queryParams.put(DbModule.ORGANIZATION_DB_FIELD, organization.getName()); return queryParams; } @Override public Map<String, Object> artifactFilterFields() { final Map<String, Object> queryParams = new HashMap<String, Object>(); final DBRegExp regExp = getMongoRegExp(); if(regExp != null){ queryParams.put(DbArtifact.GROUPID_DB_FIELD, regExp); } return queryParams; } private boolean evaluate(final String id){ for(String corporateGroupId: organization.getCorporateGroupIdPrefixes()){ if(id.startsWith(corporateGroupId)){ return true; } } return false; } public DBRegExp getMongoRegExp() { final List<String> corporateGroupIds = organization.getCorporateGroupIdPrefixes(); if(corporateGroupIds.isEmpty()){ return null; } final StringBuilder sb = new StringBuilder(); final Iterator<String> groupIdsIterator = corporateGroupIds.iterator(); while(groupIdsIterator.hasNext()){ String corporateGroupId = groupIdsIterator.next(); // If the groupId ends with '.' this loop removes it to avoid to break the regexp if(corporateGroupId.endsWith(".")){ corporateGroupId = corporateGroupId.substring(0 , corporateGroupId.length()-1); } sb.append(corporateGroupId); sb.append("*"); if(groupIdsIterator.hasNext()){ sb.append("|"); } } return new DBRegExp(sb.toString()); } }