Search in sources :

Example 96 with ModelEntity

use of org.apache.ofbiz.entity.model.ModelEntity in project ofbiz-framework by apache.

the class AbstractEntityConditionCache method put.

protected V put(String entityName, EntityCondition condition, K key, V value) {
    ModelEntity entity = this.getDelegator().getModelEntity(entityName);
    if (entity.getNeverCache()) {
        Debug.logWarning("Tried to put a value of the " + entityName + " entity in the cache but this entity has never-cache set to true, not caching.", module);
        return null;
    }
    Map<K, V> conditionCache = getOrCreateConditionCache(entityName, condition);
    return conditionCache.put(key, value);
}
Also used : ModelEntity(org.apache.ofbiz.entity.model.ModelEntity) GenericPK(org.apache.ofbiz.entity.GenericPK)

Example 97 with ModelEntity

use of org.apache.ofbiz.entity.model.ModelEntity in project ofbiz-framework by apache.

the class EntityCache method remove.

public GenericValue remove(GenericPK pk) {
    UtilCache<GenericPK, GenericValue> entityCache = getCache(pk.getEntityName());
    if (Debug.verboseOn()) {
        Debug.logVerbose("Removing from EntityCache with PK [" + pk + "], will remove from this cache: " + (entityCache == null ? "[No cache found to remove from]" : entityCache.getName()), module);
    }
    if (entityCache == null) {
        return null;
    }
    GenericValue retVal = entityCache.remove(pk);
    ModelEntity model = pk.getModelEntity();
    if (model != null) {
        Iterator<String> it = model.getViewConvertorsIterator();
        while (it.hasNext()) {
            String targetEntityName = it.next();
            UtilCache.clearCache(getCacheName(targetEntityName));
        }
    }
    if (Debug.verboseOn()) {
        Debug.logVerbose("Removing from EntityCache with PK [" + pk + "], found this in the cache: " + retVal, module);
    }
    return retVal;
}
Also used : GenericValue(org.apache.ofbiz.entity.GenericValue) GenericPK(org.apache.ofbiz.entity.GenericPK) ModelEntity(org.apache.ofbiz.entity.model.ModelEntity)

Example 98 with ModelEntity

use of org.apache.ofbiz.entity.model.ModelEntity in project ofbiz-framework by apache.

the class EntityListCache method put.

public List<GenericValue> put(String entityName, EntityCondition condition, List<String> orderBy, List<GenericValue> entities) {
    ModelEntity entity = this.getDelegator().getModelEntity(entityName);
    if (entity.getNeverCache()) {
        Debug.logWarning("Tried to put a value of the " + entityName + " entity in the cache but this entity has never-cache set to true, not caching.", module);
        return null;
    }
    for (GenericValue memberValue : entities) {
        memberValue.setImmutable();
    }
    Map<Object, List<GenericValue>> conditionCache = getOrCreateConditionCache(entityName, getFrozenConditionKey(condition));
    return conditionCache.put(getOrderByKey(orderBy), entities);
}
Also used : GenericValue(org.apache.ofbiz.entity.GenericValue) List(java.util.List) ModelEntity(org.apache.ofbiz.entity.model.ModelEntity)

Example 99 with ModelEntity

use of org.apache.ofbiz.entity.model.ModelEntity in project ofbiz-framework by apache.

the class GenericWebEvent method updateGeneric.

/**
 * An HTTP WebEvent handler that updates a Generic entity
 *
 * @param request The HTTP request object for the current JSP or Servlet request.
 * @param response The HTTP response object for the current JSP or Servlet request.
 * @return Returns a String specifying the outcome state of the event. This is used to decide which event
 * to run next or which view to display. If null no event is run nor view displayed, allowing the event to
 * call a forward on a RequestDispatcher.
 */
public static String updateGeneric(HttpServletRequest request, HttpServletResponse response) {
    String entityName = request.getParameter("entityName");
    Locale locale = UtilHttp.getLocale(request);
    if (UtilValidate.isEmpty(entityName)) {
        String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.entity_name_not_specified", locale) + ".";
        request.setAttribute("_ERROR_MESSAGE_", errMsg);
        Debug.logWarning("[GenericWebEvent.updateGeneric] The entityName was not specified, but is required.", module);
        return "error";
    }
    Security security = (Security) request.getAttribute("security");
    Delegator delegator = (Delegator) request.getAttribute("delegator");
    if (security == null) {
        String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.security_object_not_found", locale) + ".";
        request.setAttribute("_ERROR_MESSAGE_", errMsg);
        Debug.logWarning("[updateGeneric] The security object was not found in the request, please check the control servlet init.", module);
        return "error";
    }
    if (delegator == null) {
        String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.delegator_object_not_found", locale) + ".";
        request.setAttribute("_ERROR_MESSAGE_", errMsg);
        Debug.logWarning("[updateGeneric] The delegator object was not found in the request, please check the control servlet init.", module);
        return "error";
    }
    ModelReader reader = delegator.getModelReader();
    ModelEntity entity = null;
    try {
        entity = reader.getModelEntity(entityName);
    } catch (GenericEntityException e) {
        Debug.logError(e, module);
    }
    String updateMode = request.getParameter("UPDATE_MODE");
    if (UtilValidate.isEmpty(updateMode)) {
        String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.update_mode_not_specified", locale) + ".";
        request.setAttribute("_ERROR_MESSAGE_", errMsg);
        Debug.logWarning("[updateGeneric] Update Mode was not specified, but is required; entityName: " + entityName, module);
        return "error";
    }
    // check permissions before moving on...
    if (!security.hasEntityPermission("ENTITY_DATA", "_" + updateMode, request.getSession()) && !security.hasEntityPermission(entity.getPlainTableName(), "_" + updateMode, request.getSession())) {
        Map<String, String> messageMap = UtilMisc.toMap("updateMode", updateMode, "entityName", entity.getEntityName(), "entityPlainTableName", entity.getPlainTableName());
        String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.not_sufficient_permissions_01", messageMap, locale);
        errMsg += UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.not_sufficient_permissions_02", messageMap, locale) + ".";
        request.setAttribute("_ERROR_MESSAGE_", errMsg);
        // not really successful, but error return through ERROR_MESSAGE, so quietly fail
        return "error";
    }
    GenericValue findByEntity = delegator.makeValue(entityName);
    // get the primary key parameters...
    String errMsgPk = "";
    Iterator<ModelField> pksIter = entity.getPksIterator();
    while (pksIter.hasNext()) {
        String errMsg = "";
        ModelField field = pksIter.next();
        ModelFieldType type = null;
        try {
            type = delegator.getEntityFieldType(entity, field.getType());
        } catch (GenericEntityException e) {
            Debug.logWarning(e, module);
            Map<String, String> messageMap = UtilMisc.toMap("fieldType", field.getType());
            errMsg += UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.fatal_error_param", messageMap, locale) + ".";
        }
        String fval = request.getParameter(field.getName());
        if (UtilValidate.isNotEmpty(fval)) {
            try {
                findByEntity.setString(field.getName(), fval);
            } catch (Exception e) {
                Map<String, String> messageMap = UtilMisc.toMap("fval", fval);
                errMsg = errMsg + "<li>" + field.getColName() + UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.conversion_failed", messageMap, locale) + type.getJavaType() + ".";
                Debug.logWarning("[updateGeneric] " + field.getColName() + " conversion failed: \"" + fval + "\" is not a valid " + type.getJavaType() + "; entityName: " + entityName, module);
            }
        }
    }
    if (errMsgPk.length() > 0) {
        request.setAttribute("_ERROR_MESSAGE_", errMsgPk);
        return "error";
    }
    // if this is a delete, do that before getting all of the non-pk parameters and validating them
    if ("DELETE".equals(updateMode)) {
        // Delete actual main entity last, just in case database is set up to do a cascading delete, caches won't get cleared
        try {
            delegator.removeByPrimaryKey(findByEntity.getPrimaryKey());
        } catch (GenericEntityException e) {
            String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.delete_failed", locale) + ": " + e.toString();
            Debug.logWarning(e, errMsg, module);
            request.setAttribute("_ERROR_MESSAGE_", errMsg);
            return "error";
        }
        return "success";
    }
    // get the non-primary key parameters
    String errMsgNonPk = "";
    Iterator<ModelField> nopksIter = entity.getNopksIterator();
    while (nopksIter.hasNext()) {
        ModelField field = nopksIter.next();
        ModelFieldType type = null;
        try {
            type = delegator.getEntityFieldType(entity, field.getType());
        } catch (GenericEntityException e) {
            Debug.logWarning(e, module);
            Map<String, String> messageMap = UtilMisc.toMap("fieldType", field.getType());
            errMsgNonPk += UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.fatal_error_param", messageMap, locale) + ".";
        }
        String fval = request.getParameter(field.getName());
        if (UtilValidate.isNotEmpty(fval)) {
            try {
                findByEntity.setString(field.getName(), fval);
            } catch (Exception e) {
                Map<String, String> messageMap = UtilMisc.toMap("fval", fval);
                errMsgNonPk += field.getColName() + UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.conversion_failed", messageMap, locale) + type.getJavaType() + ".";
                Debug.logWarning("[updateGeneric] " + field.getColName() + " conversion failed: \"" + fval + "\" is not a valid " + type.getJavaType() + "; entityName: " + entityName, module);
            }
        } else {
            findByEntity.set(field.getName(), null);
        }
    }
    if (errMsgNonPk.length() > 0) {
        request.setAttribute("_ERROR_MESSAGE_", errMsgNonPk);
        return "error";
    }
    // if the updateMode is CREATE, check to see if an entity with the specified primary key already exists
    if ("CREATE".equals(updateMode)) {
        GenericValue tempEntity = null;
        try {
            tempEntity = EntityQuery.use(delegator).from(findByEntity.getEntityName()).where(findByEntity.getPrimaryKey()).queryOne();
        } catch (GenericEntityException e) {
            String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.create_failed_by_check", locale) + ": " + e.toString();
            Debug.logWarning(e, errMsg, module);
            request.setAttribute("_ERROR_MESSAGE_", errMsg);
            return "error";
        }
        if (tempEntity != null) {
            Map<String, String> messageMap = UtilMisc.toMap("primaryKey", findByEntity.getPrimaryKey().toString());
            String errMsg = "[updateGeneric] " + entity.getEntityName() + UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.already_exists_pk", messageMap, locale) + ".";
            Debug.logWarning(errMsg, module);
        }
    }
    // Validate parameters...
    String errMsgParam = "";
    Iterator<ModelField> fieldIter = entity.getFieldsIterator();
    while (fieldIter.hasNext()) {
        ModelField field = fieldIter.next();
        for (String curValidate : field.getValidators()) {
            Class<?>[] paramTypes = new Class[] { String.class };
            Object[] params = new Object[] { findByEntity.get(field.getName()).toString() };
            String className = "org.apache.ofbiz.base.util.UtilValidate";
            String methodName = curValidate;
            if (curValidate.indexOf('.') > 0) {
                className = curValidate.substring(0, curValidate.lastIndexOf('.'));
                methodName = curValidate.substring(curValidate.lastIndexOf('.') + 1);
            }
            Class<?> valClass;
            try {
                ClassLoader loader = Thread.currentThread().getContextClassLoader();
                valClass = loader.loadClass(className);
            } catch (ClassNotFoundException cnfe) {
                Debug.logError("[updateGeneric] Could not find validation class: " + className + "; ignoring.", module);
                continue;
            }
            Method valMethod;
            try {
                valMethod = valClass.getMethod(methodName, paramTypes);
            } catch (NoSuchMethodException cnfe) {
                Debug.logError("[updateGeneric] Could not find validation method: " + methodName + " of class " + className + "; ignoring.", module);
                continue;
            }
            Boolean resultBool;
            try {
                resultBool = (Boolean) valMethod.invoke(null, params);
            } catch (Exception e) {
                Debug.logError("[updateGeneric] Could not access validation method: " + methodName + " of class " + className + "; returning true.", module);
                resultBool = Boolean.TRUE;
            }
            if (!resultBool.booleanValue()) {
                Field msgField;
                String message;
                try {
                    msgField = valClass.getField(curValidate + "Msg");
                    message = (String) msgField.get(null);
                } catch (Exception e) {
                    Debug.logError("[updateGeneric] Could not find validation message field: " + curValidate + "Msg of class " + className + "; returning generic validation failure message.", module);
                    message = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.validation_failed", locale) + ".";
                }
                errMsgParam += field.getColName() + " " + curValidate + " " + UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.failed", locale) + ": " + message;
                Debug.logWarning("[updateGeneric] " + field.getColName() + " " + curValidate + " failed: " + message, module);
            }
        }
    }
    if (errMsgParam.length() > 0) {
        errMsgParam = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.following_error_occurred", locale) + errMsgParam;
        request.setAttribute("_ERROR_MESSAGE_", errMsgParam);
        return "error";
    }
    if ("CREATE".equals(updateMode)) {
        try {
            delegator.create(findByEntity.getEntityName(), findByEntity.getAllFields());
        } catch (GenericEntityException e) {
            Map<String, String> messageMap = UtilMisc.toMap("entityName", entity.getEntityName());
            String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.creation_param_failed", messageMap, locale) + ": " + findByEntity.toString() + ": " + e.toString();
            Debug.logWarning(e, errMsg, module);
            request.setAttribute("_ERROR_MESSAGE_", errMsg);
            return "error";
        }
    } else if ("UPDATE".equals(updateMode)) {
        GenericValue value = delegator.makeValue(findByEntity.getEntityName(), findByEntity.getAllFields());
        try {
            value.store();
        } catch (GenericEntityException e) {
            Map<String, String> messageMap = UtilMisc.toMap("entityName", entity.getEntityName());
            String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.update_of_param_failed", messageMap, locale) + ": " + value.toString() + ": " + e.toString();
            Debug.logWarning(e, errMsg, module);
            request.setAttribute("_ERROR_MESSAGE_", errMsg);
            return "error";
        }
    } else {
        Map<String, String> messageMap = UtilMisc.toMap("updateMode", updateMode);
        String errMsg = UtilProperties.getMessage(GenericWebEvent.err_resource, "genericWebEvent.update_of_param_failed", messageMap, locale) + ".";
        request.setAttribute("_ERROR_MESSAGE_", errMsg);
        Debug.logWarning("updateGeneric: Update Mode specified (" + updateMode + ") was not valid for entity: " + findByEntity.toString(), module);
        return "error";
    }
    return "success";
}
Also used : Locale(java.util.Locale) Security(org.apache.ofbiz.security.Security) ModelField(org.apache.ofbiz.entity.model.ModelField) Field(java.lang.reflect.Field) ModelReader(org.apache.ofbiz.entity.model.ModelReader) ModelField(org.apache.ofbiz.entity.model.ModelField) ModelEntity(org.apache.ofbiz.entity.model.ModelEntity) GenericValue(org.apache.ofbiz.entity.GenericValue) Method(java.lang.reflect.Method) GenericEntityException(org.apache.ofbiz.entity.GenericEntityException) Delegator(org.apache.ofbiz.entity.Delegator) GenericEntityException(org.apache.ofbiz.entity.GenericEntityException) ModelFieldType(org.apache.ofbiz.entity.model.ModelFieldType) Map(java.util.Map)

Example 100 with ModelEntity

use of org.apache.ofbiz.entity.model.ModelEntity in project ofbiz-framework by apache.

the class LabelReferences method getAutoFieldsEntityTag.

private void getAutoFieldsEntityTag(Element element, Set<String> fieldNames) {
    String entityName = UtilFormatOut.checkNull(element.getAttribute("entity-name"));
    String defaultFieldType = UtilFormatOut.checkNull(element.getAttribute("default-field-type"));
    if (UtilValidate.isNotEmpty(entityName) && UtilValidate.isNotEmpty(defaultFieldType) && (!("hidden".equals(defaultFieldType)))) {
        ModelEntity entity = delegator.getModelEntity(entityName);
        for (Iterator<ModelField> f = entity.getFieldsIterator(); f.hasNext(); ) {
            ModelField field = f.next();
            fieldNames.add(field.getName());
        }
    }
}
Also used : ModelField(org.apache.ofbiz.entity.model.ModelField) ModelEntity(org.apache.ofbiz.entity.model.ModelEntity)

Aggregations

ModelEntity (org.apache.ofbiz.entity.model.ModelEntity)102 GenericValue (org.apache.ofbiz.entity.GenericValue)37 GenericEntityException (org.apache.ofbiz.entity.GenericEntityException)29 ModelField (org.apache.ofbiz.entity.model.ModelField)28 HashMap (java.util.HashMap)22 Delegator (org.apache.ofbiz.entity.Delegator)17 ModelViewEntity (org.apache.ofbiz.entity.model.ModelViewEntity)16 LinkedList (java.util.LinkedList)14 Locale (java.util.Locale)12 ModelKeyMap (org.apache.ofbiz.entity.model.ModelKeyMap)11 ArrayList (java.util.ArrayList)10 ModelRelation (org.apache.ofbiz.entity.model.ModelRelation)10 IOException (java.io.IOException)8 TreeSet (java.util.TreeSet)8 GenericServiceException (org.apache.ofbiz.service.GenericServiceException)8 Map (java.util.Map)7 GeneralRuntimeException (org.apache.ofbiz.base.util.GeneralRuntimeException)7 EntityCondition (org.apache.ofbiz.entity.condition.EntityCondition)7 ModelFieldType (org.apache.ofbiz.entity.model.ModelFieldType)7 GenericTransactionException (org.apache.ofbiz.entity.transaction.GenericTransactionException)7