blob: bec461fa597b15c487e4bde6e34cee02e82a2641 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.ofbiz.entityext.permission;
import static org.ofbiz.base.util.UtilGenerics.checkList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.StringUtil;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.entity.Delegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.condition.EntityCondition;
import org.ofbiz.entity.condition.EntityConditionList;
import org.ofbiz.entity.condition.EntityExpr;
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.model.ModelEntity;
import org.ofbiz.entity.util.EntityQuery;
import org.ofbiz.entity.util.EntityUtil;
import org.ofbiz.security.Security;
import org.ofbiz.service.ServiceUtil;
import org.w3c.dom.Element;
/**
* EntityPermissionChecker Class
* Services for granting operation permissions on Content entities in a data-driven manner.
*/
public class EntityPermissionChecker {
public static final String module = EntityPermissionChecker.class.getName();
protected FlexibleStringExpander entityIdExdr;
protected FlexibleStringExpander entityNameExdr;
protected boolean displayFailCond;
protected List<String> targetOperationList;
protected PermissionConditionGetter permissionConditionGetter;
protected RelatedRoleGetter relatedRoleGetter;
protected AuxiliaryValueGetter auxiliaryValueGetter;
public EntityPermissionChecker(Element element) {
this.entityNameExdr = FlexibleStringExpander.getInstance(element.getAttribute("entity-name"));
this.entityIdExdr = FlexibleStringExpander.getInstance(element.getAttribute("entity-id"));
this.displayFailCond = "true".equals(element.getAttribute("display-fail-cond"));
Element permissionConditionElement = UtilXml.firstChildElement(element, "permission-condition-getter");
if (permissionConditionElement == null) {
permissionConditionGetter = new StdPermissionConditionGetter();
} else {
permissionConditionGetter = new StdPermissionConditionGetter(permissionConditionElement);
}
Element auxiliaryValueElement = UtilXml.firstChildElement(element, "auxiliary-value-getter");
if (auxiliaryValueElement == null) {
auxiliaryValueGetter = new StdAuxiliaryValueGetter();
} else {
auxiliaryValueGetter = new StdAuxiliaryValueGetter(auxiliaryValueElement);
}
Element relatedRoleElement = UtilXml.firstChildElement(element, "related-role-getter");
if (relatedRoleElement == null) {
relatedRoleGetter = new StdRelatedRoleGetter();
} else {
relatedRoleGetter = new StdRelatedRoleGetter(relatedRoleElement);
}
String targetOperationString = element.getAttribute("target-operation");
if (UtilValidate.isNotEmpty(targetOperationString)) {
List<String> operationsFromString = StringUtil.split(targetOperationString, "|");
if (targetOperationList == null) {
targetOperationList = new ArrayList<String>();
}
targetOperationList.addAll(operationsFromString);
}
permissionConditionGetter.setOperationList(targetOperationList);
}
public boolean runPermissionCheck(Map<String, ?> context) {
boolean passed = false;
String idString = entityIdExdr.expandString(context);
List<String> entityIdList = null;
if (UtilValidate.isNotEmpty(idString)) {
entityIdList = StringUtil.split(idString, "|");
} else {
entityIdList = new LinkedList<String>();
}
String entityName = entityNameExdr.expandString(context);
HttpServletRequest request = (HttpServletRequest)context.get("request");
GenericValue userLogin = null;
String partyId = null;
Delegator delegator = null;
if (request != null) {
HttpSession session = request.getSession();
userLogin = (GenericValue)session.getAttribute("userLogin");
if (userLogin != null) {
partyId = userLogin.getString("partyId");
}
delegator = (Delegator)request.getAttribute("delegator");
}
if (auxiliaryValueGetter != null) auxiliaryValueGetter.clearList();
if (relatedRoleGetter != null) relatedRoleGetter.clearList();
try {
permissionConditionGetter.init(delegator);
passed = checkPermissionMethod(delegator, partyId, entityName, entityIdList, auxiliaryValueGetter, relatedRoleGetter, permissionConditionGetter);
if (!passed && displayFailCond) {
String errMsg = "Permission is denied. \nThese are the conditions of which one must be met:\n"
+ permissionConditionGetter.dumpAsText();
List<Object> errorMessageList = checkList(context.get("errorMessageList"));
errorMessageList.add(errMsg);
}
} catch (GenericEntityException e) {
throw new RuntimeException(e.getMessage());
}
return passed;
}
public static Map<String, Object> checkPermission(GenericValue content, String statusId, GenericValue userLogin, List<String> passedPurposes, List<String> targetOperations, List<String> passedRoles, Delegator delegator , Security security, String entityAction) {
String privilegeEnumId = null;
return checkPermission(content, statusId, userLogin, passedPurposes, targetOperations, passedRoles, delegator, security, entityAction, privilegeEnumId, null);
}
public static Map<String, Object> checkPermission(GenericValue content, String statusId,
GenericValue userLogin, List<String> passedPurposes,
List<String> targetOperations, List<String> passedRoles,
Delegator delegator ,
Security security, String entityAction,
String privilegeEnumId, String quickCheckContentId) {
List<String> statusList = null;
if (statusId != null) {
statusList = StringUtil.split(statusId, "|");
}
return checkPermission(content, statusList, userLogin, passedPurposes, targetOperations, passedRoles, delegator, security, entityAction, privilegeEnumId, quickCheckContentId);
}
public static Map<String, Object> checkPermission(GenericValue content, List<String> statusList,
GenericValue userLogin, List<String> passedPurposes,
List<String> targetOperations, List<String> passedRoles,
Delegator delegator ,
Security security, String entityAction,
String privilegeEnumId) {
return checkPermission(content, statusList, userLogin, passedPurposes, targetOperations, passedRoles, delegator, security, entityAction, privilegeEnumId, null);
}
public static Map<String, Object> checkPermission(GenericValue content, List<String> statusList,
GenericValue userLogin, List<String> passedPurposes,
List<String> targetOperations, List<String> passedRoles,
Delegator delegator ,
Security security, String entityAction,
String privilegeEnumId, String quickCheckContentId) {
List<Object> entityIds = new LinkedList<Object>();
if (content != null) entityIds.add(content);
if (UtilValidate.isNotEmpty(quickCheckContentId)) {
List<String> quickList = StringUtil.split(quickCheckContentId, "|");
if (UtilValidate.isNotEmpty(quickList)) entityIds.addAll(quickList);
}
Map<String, Object> results = new HashMap<String, Object>();
boolean passed = false;
if (userLogin != null && entityAction != null) {
passed = security.hasEntityPermission("CONTENTMGR", entityAction, userLogin);
}
if (passed) {
results.put("permissionStatus", "granted");
return results;
}
try {
boolean check = checkPermissionMethod(delegator, userLogin, targetOperations, "Content", entityIds, passedPurposes, null, privilegeEnumId);
if (check) {
results.put("permissionStatus", "granted");
} else {
results.put("permissionStatus", "rejected");
}
} catch (GenericEntityException e) {
return ServiceUtil.returnError(e.getMessage());
}
return results;
}
public static boolean checkPermissionMethod(Delegator delegator, GenericValue userLogin, List<String> targetOperationList, String entityName, List<? extends Object> entityIdList, List<String> purposeList, List<String> roleList, String privilegeEnumId) throws GenericEntityException {
boolean passed = false;
String lcEntityName = entityName.toLowerCase();
String userLoginId = null;
String partyId = null;
if (userLogin != null) {
userLoginId = userLogin.getString("userLoginId");
partyId = userLogin.getString("partyId");
}
boolean hasRoleOperation = false;
if (!(targetOperationList == null) && userLoginId != null) {
hasRoleOperation = checkHasRoleOperations(partyId, targetOperationList, delegator);
}
if (hasRoleOperation) {
return true;
}
ModelEntity modelEntity = delegator.getModelEntity(entityName);
boolean hasStatusField = false;
if (modelEntity.getField("statusId") != null)
hasStatusField = true;
boolean hasPrivilegeField = false;
if (modelEntity.getField("privilegeEnumId") != null)
hasPrivilegeField = true;
ModelEntity modelOperationEntity = delegator.getModelEntity(entityName + "PurposeOperation");
if (modelOperationEntity == null) {
modelOperationEntity = delegator.getModelEntity(entityName + "Operation");
}
if (modelOperationEntity == null) {
Debug.logError("No operation entity found for " + entityName, module);
throw new RuntimeException("No operation entity found for " + entityName);
}
boolean hasPurposeOp = false;
if (modelOperationEntity.getField(lcEntityName + "PurposeTypeId") != null)
hasPurposeOp = true;
boolean hasStatusOp = false;
if (modelOperationEntity.getField("statusId") != null)
hasStatusOp = true;
boolean hasPrivilegeOp = false;
if (modelOperationEntity.getField("privilegeEnumId") != null)
hasPrivilegeOp = true;
// Get all the condition operations that could apply, rather than having to go thru
// entire table each time.
//List condList = FastList.newInstance();
//Iterator iterType = targetOperationList.iterator();
//while (iterType.hasNext()) {
// String op = (String)iterType.next();
// condList.add(EntityCondition.makeCondition(lcEntityName + "OperationId", op));
//}
//EntityCondition opCond = EntityCondition.makeCondition(condList, EntityOperator.OR);
List<GenericValue> targetOperationEntityList = EntityQuery.use(delegator)
.from(modelOperationEntity.getEntityName())
.where(EntityCondition.makeCondition(lcEntityName + "OperationId", EntityOperator.IN, targetOperationList))
.cache(true)
.queryList();
Map<String, GenericValue> entities = new HashMap<String, GenericValue>();
String pkFieldName = modelEntity.getFirstPkFieldName();
//TODO: privilegeEnumId test
/*
if (hasPrivilegeOp && hasPrivilegeField) {
int privilegeEnumSeq = -1;
if (UtilValidate.isNotEmpty(privilegeEnumId)) {
GenericValue privEnum = EntityQuery.use(delegator).from("Enumeration").where("enumId", privilegeEnumId).cache().queryOne();
if (privEnum != null) {
String sequenceId = privEnum.getString("sequenceId");
try {
privilegeEnumSeq = Integer.parseInt(sequenceId);
} catch (NumberFormatException e) {
// just leave it at -1
}
}
}
boolean thisPassed = true;
Iterator iter = entityIdList.iterator();
while (iter.hasNext()) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, iter.next(), entities);
if (entity == null) continue;
String entityId = entity.getString(pkFieldName);
String targetPrivilegeEnumId = entity.getString("privilegeEnumId");
if (UtilValidate.isNotEmpty(targetPrivilegeEnumId)) {
int targetPrivilegeEnumSeq = -1;
GenericValue privEnum = EntityQuery.use(delegator).from("Enumeration").where("enumId", privilegeEnumId).cache().queryOne();
if (privEnum != null) {
String sequenceId = privEnum.getString("sequenceId");
try {
targetPrivilegeEnumSeq = Integer.parseInt(sequenceId);
} catch (NumberFormatException e) {
// just leave it at -1
}
if (targetPrivilegeEnumSeq > privilegeEnumSeq) {
return false;
}
}
}
entities.put(entityId, entity);
}
}
*/
// check permission for each id in passed list until success.
// Note that "quickCheck" id come first in the list
// Check with no roles or purposes on the chance that the permission fields contain _NA_ s.
Map<String, List<String>> purposes = new HashMap<String, List<String>>();
Map<String, List<String>> roles = new HashMap<String, List<String>>();
//List purposeList = null;
//List roleList = null;
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
String statusId = null;
if (hasStatusOp && hasStatusField) {
statusId = entity.getString("statusId");
}
if (hasPrivilegeOp && hasPrivilegeField) {
privilegeEnumId = entity.getString("privilegeEnumId");
getPrivilegeEnumSeq(delegator, privilegeEnumId);
}
passed = hasMatch(entityName, targetOperationEntityList, roleList, hasPurposeOp, purposeList, hasStatusOp, statusId);
if (passed) {
break;
}
}
if (passed) {
return true;
}
if (hasPurposeOp) {
// Check with just purposes next.
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
String entityId = entity.getString(pkFieldName);
purposeList = getRelatedPurposes(entity, null);
String statusId = null;
if (hasStatusOp && hasStatusField) {
statusId = entity.getString("statusId");
}
if (purposeList.size() > 0) {
passed = hasMatch(entityName, targetOperationEntityList, roleList, hasPurposeOp, purposeList, hasStatusOp, statusId);
}
if (passed) {
break;
}
purposes.put(entityId, purposeList);
}
}
if (passed) return true;
if (userLogin == null) return false;
// Check with roles.
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
String entityId = entity.getString(pkFieldName);
List<String> tmpPurposeList = purposes.get(entityId);
if (purposeList != null) {
if (tmpPurposeList != null) {
purposeList.addAll(tmpPurposeList);
}
} else {
purposeList = tmpPurposeList;
}
List<String> tmpRoleList = getUserRoles(entity, userLogin, delegator);
if (roleList != null) {
if (tmpRoleList != null) {
roleList.addAll(tmpRoleList);
}
} else {
roleList = tmpRoleList;
}
String statusId = null;
if (hasStatusOp && hasStatusField) {
statusId = entity.getString("statusId");
}
passed = hasMatch(entityName, targetOperationEntityList, roleList, hasPurposeOp, purposeList, hasStatusOp, statusId);
if (passed) {
break;
}
roles.put(entityId, roleList);
}
if (passed)
return true;
// Follow ownedEntityIds
if (modelEntity.getField("owner" + entityName + "Id") != null) {
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
String entityId = entity.getString(pkFieldName);
List<String> ownedContentIdList = new LinkedList<String>();
getEntityOwners(delegator, entity, ownedContentIdList, "Content", "ownerContentId");
List<String> ownedContentRoleIds = getUserRolesFromList(delegator, ownedContentIdList, partyId, "contentId", "partyId", "roleTypeId", "ContentRole");
String statusId = null;
if (hasStatusOp && hasStatusField) {
statusId = entity.getString("statusId");
}
purposeList = purposes.get(entityId);
passed = hasMatch(entityName, targetOperationEntityList, ownedContentRoleIds, hasPurposeOp, purposeList, hasStatusOp, statusId);
if (passed) break;
/*
String ownedEntityId = entity.getString("owner" + entityName + "Id");
GenericValue ownedEntity = delegator.findOne(entityName,UtilMisc.toMap(pkFieldName, ownedEntityId), true);
while (ownedEntity != null) {
if (!alreadyCheckedIds.contains(ownedEntityId)) {
// Decided to let the original purposes only be used in permission checking
//
//purposeList = (List)purposes.get(entityId);
//purposeList = getRelatedPurposes(ownedEntity, purposeList);
roleList = getUserRoles(ownedEntity, userLogin, delegator);
String statusId = null;
if (hasStatusOp && hasStatusField) {
statusId = entity.getString("statusId");
}
passed = hasMatch(entityName, targetOperationEntityList, roleList, hasPurposeOp, purposeList, hasStatusOp, statusId);
if (passed)
break;
alreadyCheckedIds.add(ownedEntityId);
//purposes.put(ownedEntityId, purposeList);
//roles.put(ownedEntityId, roleList);
ownedEntityId = ownedEntity.getString("owner" + entityName + "Id");
ownedEntity = delegator.findOne(entityName,UtilMisc.toMap(pkFieldName, ownedEntityId), true);
} else {
ownedEntity = null;
}
}
if (passed)
break;
*/
}
}
/* seems like repeat
// Check parents
iter = entityIdList.iterator();
while (iter.hasNext()) {
String entityId = (String)iter.next();
GenericValue entity = (GenericValue)entities.get(entityId);
purposeList = (List)purposes.get(entityId);
roleList = getUserRoles(entity, userLogin, delegator);
String statusId = null;
if (hasStatusOp && hasStatusField) {
statusId = entity.getString("statusId");
}
String targetPrivilegeEnumId = null;
if (hasPrivilegeOp && hasPrivilegeField) {
targetPrivilegeEnumId = entity.getString("privilegeEnumId");
}
passed = hasMatch(entityName, targetOperationEntityList, roleList, hasPurposeOp, purposeList, hasStatusOp, statusId);
if (passed)
break;
alreadyCheckedIds.add(entityId);
}
*/
return passed;
}
public static boolean checkPermissionMethod(Delegator delegator, String partyId, String entityName, List<? extends Object> entityIdList, AuxiliaryValueGetter auxiliaryValueGetter, RelatedRoleGetter relatedRoleGetter, PermissionConditionGetter permissionConditionGetter) throws GenericEntityException {
permissionConditionGetter.init(delegator);
if (Debug.verboseOn()) Debug.logVerbose(permissionConditionGetter.dumpAsText(), module);
boolean passed = false;
boolean checkAncestors = false;
boolean hasRoleOperation = checkHasRoleOperations(partyId, permissionConditionGetter, delegator);
if (hasRoleOperation) {
return true;
}
ModelEntity modelEntity = delegator.getModelEntity(entityName);
if (relatedRoleGetter != null) {
if (UtilValidate.isNotEmpty(partyId)) {
relatedRoleGetter.setList(UtilMisc.toList("LOGGEDIN"));
}
}
// check permission for each id in passed list until success.
// Note that "quickCheck" id come first in the list
// Check with no roles or purposes on the chance that the permission fields contain _NA_ s.
String pkFieldName = modelEntity.getFirstPkFieldName();
if (Debug.infoOn()) {
String entityIdString = "ENTITIES: ";
for (Object obj: entityIdList) {
if (obj instanceof GenericValue) {
String s = ((GenericValue)obj).getString(pkFieldName);
entityIdString += s + " ";
} else {
entityIdString += obj + " ";
}
}
//if (Debug.infoOn()) Debug.logInfo(entityIdString, module);
}
Map<String, GenericValue> entities = new HashMap<String, GenericValue>();
//List purposeList = null;
//List roleList = null;
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
checkAncestors = false;
passed = hasMatch(entity, permissionConditionGetter, relatedRoleGetter, null, partyId, checkAncestors);
if (passed) {
break;
}
}
if (passed) {
return true;
}
if (auxiliaryValueGetter != null) {
//if (Debug.infoOn()) Debug.logInfo(auxiliaryValueGetter.dumpAsText(), module);
// Check with just purposes next.
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
checkAncestors = false;
passed = hasMatch(entity, permissionConditionGetter, relatedRoleGetter, auxiliaryValueGetter, partyId, checkAncestors);
if (passed) {
break;
}
}
}
if (passed) return true;
// TODO: need to return some information here about why it failed
if (partyId == null) return false;
// Check with roles.
if (relatedRoleGetter != null) {
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
checkAncestors = false;
passed = hasMatch(entity, permissionConditionGetter, relatedRoleGetter, auxiliaryValueGetter, partyId, checkAncestors);
if (passed) {
break;
}
}
}
if (passed)
return true;
if (relatedRoleGetter != null) {
for (Object id: entityIdList) {
GenericValue entity = getNextEntity(delegator, entityName, pkFieldName, id, entities);
if (entity == null) continue;
checkAncestors = true;
passed = hasMatch(entity, permissionConditionGetter, relatedRoleGetter, auxiliaryValueGetter, partyId, checkAncestors);
if (passed) {
break;
}
}
}
return passed;
}
public static GenericValue getNextEntity(Delegator delegator, String entityName, String pkFieldName, Object obj, Map<String, GenericValue> entities) throws GenericEntityException {
GenericValue entity = null;
if (obj instanceof String) {
String entityId = (String)obj;
if (entities != null) entity = entities.get(entityId);
if (entity == null) entity = EntityQuery.use(delegator).from(entityName).where(pkFieldName, entityId).cache(true).queryOne();
} else if (obj instanceof GenericValue) {
entity = (GenericValue)obj;
}
return entity;
}
public static boolean checkHasRoleOperations(String partyId, PermissionConditionGetter permissionConditionGetter , Delegator delegator) {
List<String> targetOperations = permissionConditionGetter.getOperationList();
return checkHasRoleOperations(partyId, targetOperations, delegator);
}
public static boolean checkHasRoleOperations(String partyId, List<String> targetOperations, Delegator delegator) {
//if (Debug.infoOn()) Debug.logInfo("targetOperations:" + targetOperations, module);
//if (Debug.infoOn()) Debug.logInfo("userLoginId:" + userLoginId, module);
if (targetOperations == null) return false;
if (partyId != null && targetOperations.contains("HAS_USER_ROLE")) return true;
boolean hasRoleOperation = false;
boolean hasNeed = false;
List<String> newHasRoleList = new LinkedList<String>();
for (String roleOp: targetOperations) {
int idx1 = roleOp.indexOf("HAS_");
if (idx1 == 0) {
String roleOp1 = roleOp.substring(4); // lop off "HAS_"
int idx2 = roleOp1.indexOf("_ROLE");
if (idx2 == (roleOp1.length() - 5)) {
String roleOp2 = roleOp1.substring(0, roleOp1.indexOf("_ROLE") - 1); // lop off "_ROLE"
//if (Debug.infoOn()) Debug.logInfo("roleOp2:" + roleOp2, module);
newHasRoleList.add(roleOp2);
hasNeed = true;
}
}
}
if (hasNeed) {
try {
if (UtilValidate.isNotEmpty(partyId)) {
List<GenericValue> partyRoleList = EntityQuery.use(delegator).from("PartyRole").where("partyId", partyId).cache(true).queryList();
for (GenericValue partyRole: partyRoleList) {
String roleTypeId = partyRole.getString("roleTypeId");
for (String thisRole: newHasRoleList) {
if (roleTypeId.indexOf(thisRole) >= 0) {
hasRoleOperation = true;
break;
}
}
if (hasRoleOperation)
break;
}
}
} catch (GenericEntityException e) {
Debug.logError(e, module);
return hasRoleOperation;
}
}
return hasRoleOperation;
}
public static boolean hasMatch(String entityName, List<GenericValue> targetOperations, List<String> roles, boolean hasPurposeOp, List<String> purposes, boolean hasStatusOp, String targStatusId) {
boolean isMatch = false;
// if (UtilValidate.isNotEmpty(targPrivilegeEnumId) && !targPrivilegeEnumId.equals("_NA_") && !targPrivilegeEnumId.equals("_00_")) {
// need to do a lookup here to find the seq value of targPrivilegeEnumId.
// The lookup could be a static store or it could be done on Enumeration entity.
// }
String lcEntityName = entityName.toLowerCase();
for (GenericValue targetOp: targetOperations) {
String testRoleTypeId = (String)targetOp.get("roleTypeId");
String testContentPurposeTypeId = null;
if (hasPurposeOp)
testContentPurposeTypeId = (String)targetOp.get(lcEntityName + "PurposeTypeId");
String testStatusId = null;
if (hasStatusOp)
testStatusId = (String)targetOp.get("statusId");
//String testPrivilegeEnumId = null;
//if (hasPrivilegeOp)
//testPrivilegeEnumId = (String)targetOp.get("privilegeEnumId");
//int testPrivilegeSeq = 0;
boolean purposesCond = (!hasPurposeOp || (purposes != null && purposes.contains(testContentPurposeTypeId)) || testContentPurposeTypeId.equals("_NA_"));
boolean statusCond = (!hasStatusOp || testStatusId.equals("_NA_") || (targStatusId != null && targStatusId.equals(testStatusId)));
//boolean privilegeCond = (!hasPrivilegeOp || testPrivilegeEnumId.equals("_NA_") || testPrivilegeSeq <= targPrivilegeSeq || testPrivilegeEnumId.equals(targPrivilegeEnumId));
boolean roleCond = (testRoleTypeId.equals("_NA_") || (roles != null && roles.contains(testRoleTypeId)));
if (purposesCond && statusCond && roleCond) {
isMatch = true;
break;
}
}
return isMatch;
}
public static boolean hasMatch(GenericValue entity, PermissionConditionGetter permissionConditionGetter, RelatedRoleGetter relatedRoleGetter, AuxiliaryValueGetter auxiliaryValueGetter, String partyId, boolean checkAncestors) throws GenericEntityException {
ModelEntity modelEntity = entity.getModelEntity();
Delegator delegator = entity.getDelegator();
String pkFieldName = modelEntity.getFirstPkFieldName();
String entityId = entity.getString(pkFieldName);
if (Debug.verboseOn()) Debug.logVerbose("\n\nIN hasMatch: entityId:" + entityId + " partyId:" + partyId + " checkAncestors:" + checkAncestors, module);
boolean isMatch = false;
permissionConditionGetter.restart();
List<String> auxiliaryValueList = null;
if (auxiliaryValueGetter != null) {
auxiliaryValueGetter.init(delegator, entityId);
auxiliaryValueList = auxiliaryValueGetter.getList();
if (Debug.verboseOn()) Debug.logVerbose(auxiliaryValueGetter.dumpAsText(), module);
} else {
if (Debug.verboseOn()) Debug.logVerbose("NO AUX GETTER", module);
}
List<String> roleValueList = null;
if (relatedRoleGetter != null) {
if (checkAncestors) {
relatedRoleGetter.initWithAncestors(delegator, entity, partyId);
} else {
relatedRoleGetter.init(delegator, entityId, partyId, entity);
}
roleValueList = relatedRoleGetter.getList();
if (Debug.verboseOn()) Debug.logVerbose(relatedRoleGetter.dumpAsText(), module);
} else {
if (Debug.verboseOn()) Debug.logVerbose("NO ROLE GETTER", module);
}
String targStatusId = null;
if (modelEntity.getField("statusId") != null) {
targStatusId = entity.getString("statusId");
}
if (Debug.verboseOn()) Debug.logVerbose("STATUS:" + targStatusId, module);
while (permissionConditionGetter.getNext()) {
String roleConditionId = permissionConditionGetter.getRoleValue();
String auxiliaryConditionId = permissionConditionGetter.getAuxiliaryValue();
String statusConditionId = permissionConditionGetter.getStatusValue();
boolean auxiliaryCond = (auxiliaryConditionId == null || auxiliaryConditionId.equals("_NA_") || (auxiliaryValueList != null && auxiliaryValueList.contains(auxiliaryConditionId)) );
boolean statusCond = (statusConditionId == null || statusConditionId.equals("_NA_") || (targStatusId != null && targStatusId.equals(statusConditionId)));
boolean roleCond = (roleConditionId == null || roleConditionId.equals("_NA_") || (roleValueList != null && roleValueList.contains(roleConditionId)));
if (auxiliaryCond && statusCond && roleCond) {
if (Debug.verboseOn()) Debug.logVerbose("MATCHED: role:" + roleConditionId + " status:" + statusConditionId + " aux:" + auxiliaryConditionId, module);
isMatch = true;
break;
}
}
return isMatch;
}
/**
* getRelatedPurposes
*/
public static List<String> getRelatedPurposes(GenericValue entity, List<String> passedPurposes) {
if (entity == null) return passedPurposes;
List<String> purposeIds = null;
if (passedPurposes == null) {
purposeIds = new LinkedList<String>();
} else {
purposeIds = new LinkedList<String>();
purposeIds.addAll(passedPurposes);
}
String entityName = entity.getEntityName();
String lcEntityName = entityName.toLowerCase();
List<GenericValue> purposes = null;
try {
purposes = entity.getRelated(entityName + "Purpose", null, null, true);
} catch (GenericEntityException e) {
Debug.logError(e, "No associated purposes found. ", module);
return purposeIds;
}
for (GenericValue val: purposes) {
purposeIds.add((String) val.get(lcEntityName + "PurposeTypeId"));
}
return purposeIds;
}
/**
* getUserRoles
* Queries for the ContentRoles associated with a Content entity
* and returns the ones that match the user.
* Follows group parties to see if the user is a member.
*/
public static List<String> getUserRoles(GenericValue entity, GenericValue userLogin, Delegator delegator) throws GenericEntityException {
List<String> roles = new LinkedList<String>();
if (entity == null) return roles;
String entityName = entity.getEntityName();
// TODO: Need to use ContentManagementWorker.getAuthorContent first
roles.remove("OWNER"); // always test with the owner of the current content
if (entity.get("createdByUserLogin") != null && userLogin != null) {
String userLoginId = (String)userLogin.get("userLoginId");
String userLoginIdCB = (String)entity.get("createdByUserLogin");
//if (Debug.infoOn()) Debug.logInfo("userLoginId:" + userLoginId + ": userLoginIdCB:" + userLoginIdCB + ":", null);
if (userLoginIdCB.equals(userLoginId)) {
roles.add("OWNER");
//if (Debug.infoOn()) Debug.logInfo("in getUserRoles, passedRoles(0):" + passedRoles, null);
}
}
String partyId = (String)userLogin.get("partyId");
List<GenericValue> relatedRoles = null;
List<GenericValue> tmpRelatedRoles = entity.getRelated(entityName + "Role", null, null, true);
relatedRoles = EntityUtil.filterByDate(tmpRelatedRoles);
if (relatedRoles != null) {
for (GenericValue contentRole: relatedRoles) {
String roleTypeId = (String)contentRole.get("roleTypeId");
String targPartyId = (String)contentRole.get("partyId");
if (targPartyId.equals(partyId)) {
if (!roles.contains(roleTypeId))
roles.add(roleTypeId);
if (roleTypeId.equals("AUTHOR") && !roles.contains("OWNER"))
roles.add("OWNER");
} else { // Party may be of "PARTY_GROUP" type, in which case the userLogin may still possess this role
GenericValue party = null;
String partyTypeId = null;
try {
party = contentRole.getRelatedOne("Party", false);
partyTypeId = (String)party.get("partyTypeId");
if (partyTypeId != null && partyTypeId.equals("PARTY_GROUP")) {
Map<String, Object> map = new HashMap<String, Object>();
// At some point from/thru date will need to be added
map.put("partyIdFrom", partyId);
map.put("partyIdTo", targPartyId);
if (isGroupMember(map, delegator)) {
if (!roles.contains(roleTypeId))
roles.add(roleTypeId);
}
}
} catch (GenericEntityException e) {
Debug.logError(e, "Error in finding related party. " + e.getMessage(), module);
}
}
}
}
return roles;
}
/**
* Tests to see if the user belongs to a group
*/
public static boolean isGroupMember(Map<String, ?> partyRelationshipValues, Delegator delegator) {
boolean isMember = false;
String partyIdFrom = (String)partyRelationshipValues.get("partyIdFrom") ;
String partyIdTo = (String)partyRelationshipValues.get("partyIdTo") ;
//String roleTypeIdFrom = "PERMISSION_GROUP_MBR";
//String roleTypeIdTo = "PERMISSION_GROUP";
//Timestamp fromDate = UtilDateTime.nowTimestamp();
//Timestamp thruDate = UtilDateTime.getDayStart(UtilDateTime.nowTimestamp(), 1);
//if (partyRelationshipValues.get("roleTypeIdFrom") != null) {
// roleTypeIdFrom = (String)partyRelationshipValues.get("roleTypeIdFrom") ;
//}
//if (partyRelationshipValues.get("roleTypeIdTo") != null) {
// roleTypeIdTo = (String)partyRelationshipValues.get("roleTypeIdTo") ;
//}
//if (partyRelationshipValues.get("fromDate") != null) {
// fromDate = (Timestamp)partyRelationshipValues.get("fromDate") ;
//}
//if (partyRelationshipValues.get("thruDate") != null) {
// thruDate = (Timestamp)partyRelationshipValues.get("thruDate") ;
//}
//EntityExpr relationExpr = EntityCondition.makeCondition("partyRelationshipTypeId", "CONTENT_PERMISSION");
//EntityExpr roleTypeIdFromExpr = EntityCondition.makeCondition("roleTypeIdFrom", "CONTENT_PERMISSION_GROUP_MEMBER");
//EntityExpr roleTypeIdToExpr = EntityCondition.makeCondition("roleTypeIdTo", "CONTENT_PERMISSION_GROUP");
//EntityExpr fromExpr = EntityCondition.makeCondition("fromDate", EntityOperator.LESS_THAN_EQUAL_TO, fromDate);
//EntityCondition thruCond = EntityCondition.makeCondition(UtilMisc.toList(EntityCondition.makeCondition("thruDate", null),
// EntityCondition.makeCondition("thruDate", EntityOperator.GREATER_THAN, thruDate)), EntityOperator.OR);
// This method is simplified to make it work, these conditions need to be added back in.
//List joinList = UtilMisc.toList(fromExpr, thruCond, partyFromExpr, partyToExpr, relationExpr);
List<GenericValue> partyRelationships = null;
try {
partyRelationships = EntityQuery.use(delegator).from("PartyRelationship").where("partyIdFrom", partyIdFrom, "partyIdTo", partyIdTo).queryList();
} catch (GenericEntityException e) {
Debug.logError(e, "Problem finding PartyRelationships. ", module);
return false;
}
if (partyRelationships.size() > 0) {
isMember = true;
}
return isMember;
}
public interface PermissionConditionGetter {
public boolean getNext();
public String getRoleValue();
public String getOperationValue();
public String getStatusValue();
public int getPrivilegeValue() throws GenericEntityException;
public String getAuxiliaryValue();
public void init(Delegator delegator) throws GenericEntityException;
public void restart();
public void setOperationList(String operationIdString);
public void setOperationList(List<String> opList);
public List<String> getOperationList();
public String dumpAsText();
public void clearList();
}
public static class StdPermissionConditionGetter implements PermissionConditionGetter {
protected List<GenericValue> entityList;
protected List<String> operationList;
protected ListIterator<GenericValue> iter;
protected GenericValue currentValue;
protected String operationFieldName;
protected String roleFieldName;
protected String statusFieldName;
protected String privilegeFieldName;
protected String auxiliaryFieldName;
protected String entityName;
public StdPermissionConditionGetter () {
this.operationFieldName = "contentOperationId";
this.roleFieldName = "roleTypeId";
this.statusFieldName = "statusId";
this.privilegeFieldName = "privilegeEnumId";
this.auxiliaryFieldName = "contentPurposeTypeId";
this.entityName = "ContentPurposeOperation";
}
public StdPermissionConditionGetter (String entityName, String operationFieldName, String roleFieldName, String statusFieldName, String auxiliaryFieldName, String privilegeFieldName) {
this.operationFieldName = operationFieldName;
this.roleFieldName = roleFieldName ;
this.statusFieldName = statusFieldName ;
this.privilegeFieldName = privilegeFieldName ;
this.auxiliaryFieldName = auxiliaryFieldName ;
this.entityName = entityName;
}
public StdPermissionConditionGetter (Element getterElement) {
this.operationFieldName = getterElement.getAttribute("operation-field-name");
this.roleFieldName = getterElement.getAttribute("role-field-name");
this.statusFieldName = getterElement.getAttribute("status-field-name");
this.privilegeFieldName = getterElement.getAttribute("privilege-field-name");
this.auxiliaryFieldName = getterElement.getAttribute("auxiliary-field-name");
this.entityName = getterElement.getAttribute("entity-name");
}
public boolean getNext() {
boolean hasNext = false;
if (iter != null && iter.hasNext()) {
currentValue = iter.next();
hasNext = true;
}
return hasNext;
}
public String getRoleValue() {
return this.currentValue.getString(this.roleFieldName);
}
public String getOperationValue() {
return this.currentValue.getString(this.operationFieldName);
}
public String getStatusValue() {
return this.currentValue.getString(this.statusFieldName);
}
public int getPrivilegeValue() throws GenericEntityException {
int privilegeEnumSeq = -1;
String privilegeEnumId = null;
Delegator delegator = currentValue.getDelegator();
if (UtilValidate.isNotEmpty(privilegeFieldName)) {
privilegeEnumId = currentValue.getString(this.privilegeFieldName);
}
if (UtilValidate.isNotEmpty(privilegeEnumId)) {
GenericValue privEnum = EntityQuery.use(delegator).from("Enumeration").where("enumId", privilegeEnumId).cache().queryOne();
if (privEnum != null) {
String sequenceId = privEnum.getString("sequenceId");
try {
privilegeEnumSeq = Integer.parseInt(sequenceId);
} catch (NumberFormatException e) {
// just leave it at -1
}
}
}
return privilegeEnumSeq;
}
public String getAuxiliaryValue() {
return this.currentValue.getString(this.auxiliaryFieldName);
}
public void setOperationList(String operationIdString) {
this.operationList = null;
if (UtilValidate.isNotEmpty(operationIdString)) {
this.operationList = StringUtil.split(operationIdString, "|");
}
}
public void setOperationList(List<String> operationList) {
this.operationList = operationList;
}
public List<String> getOperationList() {
return this.operationList;
}
public void clearList() {
this.entityList = new LinkedList<GenericValue>();
}
public void init(Delegator delegator) throws GenericEntityException {
this.entityList = EntityQuery.use(delegator)
.from(this.entityName)
.where(EntityCondition.makeCondition(operationFieldName, EntityOperator.IN, this.operationList))
.cache(true)
.queryList();
}
public void restart() {
this.iter = null;
if (this.entityList != null) {
this.iter = this.entityList.listIterator();
}
}
public String dumpAsText() {
List<String> fieldNames = UtilMisc.toList("roleFieldName", "auxiliaryFieldName", "statusFieldName");
Map<String, Integer> widths = UtilMisc.toMap("roleFieldName", Integer.valueOf(24), "auxiliaryFieldName", Integer.valueOf(24), "statusFieldName", Integer.valueOf(24));
StringBuilder buf = new StringBuilder();
Integer wid = null;
buf.append("Dump for ");
buf.append(this.entityName);
buf.append(" ops:");
buf.append(StringUtil.join(this.operationList, ","));
buf.append("\n");
for (String fld: fieldNames) {
wid = widths.get(fld);
buf.append(fld);
for (int i=0; i < (wid.intValue() - fld.length()); i++) buf.append("^");
buf.append(" ");
}
buf.append("\n");
for (String fld: fieldNames) {
wid = widths.get(fld);
for (int i=0; i < wid.intValue(); i++) buf.append("-");
buf.append(" ");
}
buf.append("\n");
if (entityList != null) {
for (GenericValue contentPurposeOperation: this.entityList) {
/*
String contentOperationId = contentPurposeOperation.getString(this.operationFieldName);
if (UtilValidate.isEmpty(contentOperationId)) {
contentOperationId = "";
}
wid = (Integer)widths.get("operationFieldName");
buf.append(contentOperationId);
for (int i=0; i < (wid.intValue() - contentOperationId.length()); i++) buf.append("^");
buf.append(" ");
*/
String roleTypeId = contentPurposeOperation.getString(this.roleFieldName);
if (UtilValidate.isEmpty(roleTypeId)) {
roleTypeId = "";
}
wid = widths.get("roleFieldName");
buf.append(roleTypeId);
for (int i=0; i < (wid.intValue() - roleTypeId.length()); i++) buf.append("^");
buf.append(" ");
String auxiliaryFieldValue = contentPurposeOperation.getString(this.auxiliaryFieldName);
if (UtilValidate.isEmpty(auxiliaryFieldValue)) {
auxiliaryFieldValue = "";
}
wid = widths.get("auxiliaryFieldName");
buf.append(auxiliaryFieldValue);
for (int i=0; i < (wid.intValue() - auxiliaryFieldValue.length()); i++) buf.append("^");
buf.append(" ");
String statusId = contentPurposeOperation.getString(this.statusFieldName);
if (UtilValidate.isEmpty(statusId)) {
statusId = "";
}
buf.append(statusId);
/*
wid = (Integer)widths.get("statusFieldName");
for (int i=0; i < (wid.intValue() - statusId.length()); i++) buf.append(" ");
*/
buf.append(" ");
buf.append("\n");
}
}
return buf.toString();
}
}
public interface AuxiliaryValueGetter {
public void init(Delegator delegator, String entityId) throws GenericEntityException;
public List<String> getList();
public void clearList();
public String dumpAsText();
}
public static class StdAuxiliaryValueGetter implements AuxiliaryValueGetter {
protected List<String> entityList = new LinkedList<String>();
protected String auxiliaryFieldName;
protected String entityName;
protected String entityIdName;
public StdAuxiliaryValueGetter () {
this.auxiliaryFieldName = "contentPurposeTypeId";
this.entityName = "ContentPurpose";
this.entityIdName = "contentId";
}
public StdAuxiliaryValueGetter (String entityName, String auxiliaryFieldName, String entityIdName) {
this.auxiliaryFieldName = auxiliaryFieldName ;
this.entityName = entityName;
this.entityIdName = entityIdName;
}
public StdAuxiliaryValueGetter (Element getterElement) {
this.auxiliaryFieldName = getterElement.getAttribute("auxiliary-field-name");
this.entityName = getterElement.getAttribute("entity-name");
this.entityIdName = getterElement.getAttribute("entity-id-name");
}
public List<String> getList() {
return entityList;
}
public void clearList() {
this.entityList = new LinkedList<String>();
}
public void setList(List<String> lst) {
this.entityList = lst;
}
public void init(Delegator delegator, String entityId) throws GenericEntityException {
if (this.entityList == null) {
this.entityList = new LinkedList<String>();
}
if (UtilValidate.isEmpty(this.entityName)) {
return;
}
List<GenericValue> values = EntityQuery.use(delegator).from(this.entityName).where(this.entityIdName, entityId).cache(true).queryList();
for (GenericValue entity: values) {
this.entityList.add(entity.getString(this.auxiliaryFieldName));
}
}
public String dumpAsText() {
StringBuilder buf = new StringBuilder();
buf.append("AUXILIARY: ");
if (entityList != null) {
for (String val: entityList) {
buf.append(val);
buf.append(" ");
}
}
return buf.toString();
}
}
public interface RelatedRoleGetter {
public void init(Delegator delegator, String entityId, String partyId, GenericValue entity) throws GenericEntityException;
public void initWithAncestors(Delegator delegator, GenericValue entity, String partyId) throws GenericEntityException;
public List<String> getList();
public void clearList();
public void setList(List<String> lst);
public String dumpAsText();
public boolean isOwner(GenericValue entity, String targetPartyId);
}
public static class StdRelatedRoleGetter implements RelatedRoleGetter {
protected List<String> roleIdList = new LinkedList<String>();
protected String roleTypeFieldName;
protected String partyFieldName;
protected String entityName;
protected String roleEntityIdName;
protected String roleEntityName;
protected String ownerEntityFieldName;
public StdRelatedRoleGetter () {
this.roleTypeFieldName = "roleTypeId";
this.partyFieldName = "partyId";
this.ownerEntityFieldName = "ownerContentId";
this.entityName = "Content";
this.roleEntityName = "ContentRole";
this.roleEntityIdName = "contentId";
}
public StdRelatedRoleGetter (String entityName, String roleTypeFieldName, String roleEntityIdName, String partyFieldName, String ownerEntityFieldName, String roleEntityName) {
this.roleTypeFieldName = roleTypeFieldName ;
this.partyFieldName = partyFieldName ;
this.ownerEntityFieldName = ownerEntityFieldName ;
this.entityName = entityName;
this.roleEntityName = roleEntityName;
this.roleEntityIdName = roleEntityIdName;
}
public StdRelatedRoleGetter (Element getterElement) {
this.roleTypeFieldName = getterElement.getAttribute("role-type-field-name");
this.partyFieldName = getterElement.getAttribute("party-field-name");
this.ownerEntityFieldName = getterElement.getAttribute("owner-entity-field-name");
this.entityName = getterElement.getAttribute("entity-name");
this.roleEntityName = getterElement.getAttribute("role-entity-name");
this.roleEntityIdName = getterElement.getAttribute("entity-id-name");
}
public List<String> getList() {
return this.roleIdList;
}
public void clearList() {
this.roleIdList = new LinkedList<String>();
}
public void setList(List<String> lst) {
this.roleIdList = lst;
}
public void init(Delegator delegator, String entityId, String partyId, GenericValue entity) throws GenericEntityException {
List<String> lst = getUserRolesFromList(delegator, UtilMisc.toList(entityId), partyId, this.roleEntityIdName,
this.partyFieldName, this.roleTypeFieldName, this.roleEntityName);
this.roleIdList.addAll(lst);
if (isOwner(entity, partyId)) {
this.roleIdList.add("OWNER");
}
}
public void initWithAncestors(Delegator delegator, GenericValue entity, String partyId) throws GenericEntityException {
List<String> ownedContentIdList = new LinkedList<String>();
getEntityOwners(delegator, entity, ownedContentIdList, this.entityName, this.ownerEntityFieldName);
if (ownedContentIdList.size() > 0) {
List<String> lst = getUserRolesFromList(delegator, ownedContentIdList, partyId, this.roleEntityIdName, this.partyFieldName, this.roleTypeFieldName, this.roleEntityName);
this.roleIdList.addAll(lst);
}
}
public boolean isOwner(GenericValue entity, String targetPartyId) {
boolean isOwner = false;
if (entity == null || targetPartyId == null) {
return false;
}
Delegator delegator = entity.getDelegator();
ModelEntity modelEntity = delegator.getModelEntity(entityName);
if (modelEntity.getField("createdByUserLogin") == null) {
return false;
}
if (entity.get("createdByUserLogin") != null) {
String userLoginIdCB = (String)entity.get("createdByUserLogin");
try {
GenericValue userLogin = EntityQuery.use(delegator).from("UserLogin").where("userLoginId", userLoginIdCB).cache().queryOne();
if (userLogin != null) {
String partyIdCB = userLogin.getString("partyId");
if (partyIdCB != null) {
if (partyIdCB.equals(targetPartyId)) {
isOwner = true;
}
}
}
} catch (GenericEntityException e) {
Debug.logInfo(e.getMessage() + " Returning false for 'isOwner'.", module);
}
}
return isOwner;
}
public String dumpAsText() {
StringBuilder buf = new StringBuilder();
buf.append("ROLES: ");
if (roleIdList != null) {
for (String val: roleIdList) {
buf.append(val);
buf.append(" ");
}
}
return buf.toString();
}
}
public static List<String> getUserRolesFromList(Delegator delegator, List<String> idList, String partyId, String entityIdFieldName, String partyIdFieldName, String roleTypeIdFieldName, String entityName) throws GenericEntityException {
EntityExpr expr = EntityCondition.makeCondition(entityIdFieldName, EntityOperator.IN, idList);
EntityExpr expr2 = EntityCondition.makeCondition(partyIdFieldName, partyId);
List<GenericValue> roleList = EntityQuery.use(delegator)
.from(entityName)
.where(EntityCondition.makeCondition(UtilMisc.toList(expr, expr2)))
.cache(true)
.queryList();
List<GenericValue> roleListFiltered = EntityUtil.filterByDate(roleList);
Set<String> distinctSet = new HashSet<String>();
for (GenericValue contentRole: roleListFiltered) {
String roleTypeId = contentRole.getString(roleTypeIdFieldName);
distinctSet.add(roleTypeId);
}
List<String> distinctList = Arrays.asList(distinctSet.toArray(new String[distinctSet.size()]));
return distinctList;
}
public static void getEntityOwners(Delegator delegator, GenericValue entity, List<String> contentOwnerList, String entityName, String ownerIdFieldName) throws GenericEntityException {
String ownerContentId = entity.getString(ownerIdFieldName);
if (UtilValidate.isNotEmpty(ownerContentId)) {
contentOwnerList.add(ownerContentId);
ModelEntity modelEntity = delegator.getModelEntity(entityName);
String pkFieldName = modelEntity.getFirstPkFieldName();
GenericValue ownerContent = EntityQuery.use(delegator).from(entityName).where(pkFieldName, ownerContentId).cache(true).queryOne();
if (ownerContent != null) {
getEntityOwners(delegator, ownerContent, contentOwnerList, entityName, ownerIdFieldName);
}
}
}
public static int getPrivilegeEnumSeq(Delegator delegator, String privilegeEnumId) throws GenericEntityException {
int privilegeEnumSeq = -1;
if (UtilValidate.isNotEmpty(privilegeEnumId)) {
GenericValue privEnum = EntityQuery.use(delegator).from("Enumeration").where("enumId", privilegeEnumId).cache().queryOne();
if (privEnum != null) {
String sequenceId = privEnum.getString("sequenceId");
try {
privilegeEnumSeq = Integer.parseInt(sequenceId);
} catch (NumberFormatException e) {
// just leave it at -1
}
}
}
return privilegeEnumSeq;
}
}