Search in sources :

Example 1 with Entity

use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.

the class DataServiceController method find.

@RequestMapping(value = "/api/find.{type}", method = RequestMethod.GET)
public void find(@PathVariable String type, @RequestParam(value = "e") String entityRef, @RequestParam(value = "s") String sessionId, @RequestParam(value = "dynamicAttributes", required = false) Boolean dynamicAttributes, HttpServletRequest request, HttpServletResponse response) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
    if (!connect(sessionId, response))
        return;
    try {
        EntityLoadInfo loadInfo = EntityLoadInfo.parse(entityRef);
        if (loadInfo == null) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }
        MetaClass metaClass = loadInfo.getMetaClass();
        if (!readPermitted(metaClass)) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN);
            return;
        }
        Object objectId = loadInfo.getId();
        LoadContext loadCtx = new LoadContext(metaClass);
        loadCtx.setLoadDynamicAttributes(Boolean.TRUE.equals(dynamicAttributes));
        loadCtx.setId(objectId);
        if (loadInfo.getViewName() != null) {
            loadCtx.setView(loadInfo.getViewName());
        } else {
            View view = metadata.getViewRepository().getView(metaClass, View.LOCAL);
            loadCtx.setView(new View(view, "local-with-system-props", true));
        }
        Entity entity = dataService.load(loadCtx);
        if (entity == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        } else {
            Converter converter = conversionFactory.getConverter(type);
            String result = converter.process(entity, metaClass, loadCtx.getView());
            writeResponse(response, result, converter.getMimeType());
        }
    } catch (Throwable e) {
        sendError(request, response, e);
    } finally {
        authentication.end();
    }
}
Also used : BaseGenericIdEntity(com.haulmont.cuba.core.entity.BaseGenericIdEntity) Entity(com.haulmont.cuba.core.entity.Entity) MetaClass(com.haulmont.chile.core.model.MetaClass)

Example 2 with Entity

use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.

the class DataServiceController method queryByPost.

@RequestMapping(value = "/api/query", method = RequestMethod.POST)
public void queryByPost(@RequestParam(value = "s") String sessionId, @RequestHeader(value = "Content-Type") MimeType contentType, @RequestBody String requestContent, HttpServletRequest request, HttpServletResponse response) throws IOException {
    if (!authentication.begin(sessionId)) {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        return;
    }
    try {
        Converter converter = conversionFactory.getConverter(contentType);
        QueryRequest queryRequest = converter.parseQueryRequest(requestContent);
        MetaClass metaClass = metadata.getClass(queryRequest.getEntity());
        if (metaClass == null) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Persistent entity " + queryRequest.getEntity() + " does not exist");
            return;
        }
        if (!entityOpPermitted(metaClass, EntityOp.READ)) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN);
            return;
        }
        LoadContext loadCtx = new LoadContext(metaClass);
        loadCtx.setLoadDynamicAttributes(Boolean.TRUE.equals(queryRequest.loadDynamicAttributes()));
        LoadContext.Query query = new LoadContext.Query(queryRequest.getQuery());
        for (String key : queryRequest.getParams().keySet()) {
            query.setParameter(key, queryRequest.getParams().get(key));
        }
        loadCtx.setQuery(query);
        if (queryRequest.getFirst() != null)
            query.setFirstResult(queryRequest.getFirst());
        if (queryRequest.getMax() != null)
            query.setMaxResults(queryRequest.getMax());
        if (queryRequest.getViewName() == null) {
            View view = metadata.getViewRepository().getView(metaClass, View.LOCAL);
            loadCtx.setView(new View(view, "local-with-system-props", true));
        } else {
            loadCtx.setView(queryRequest.getViewName());
        }
        List<Entity> entities = dataService.loadList(loadCtx);
        String result = converter.process(entities, metaClass, loadCtx.getView());
        writeResponse(response, result, converter.getMimeType());
    } catch (RowLevelSecurityException e) {
        response.sendError(HttpServletResponse.SC_FORBIDDEN, "The operation with entity " + e.getEntity() + " is denied");
    } catch (Throwable e) {
        sendError(request, response, e);
    } finally {
        authentication.end();
    }
}
Also used : BaseGenericIdEntity(com.haulmont.cuba.core.entity.BaseGenericIdEntity) Entity(com.haulmont.cuba.core.entity.Entity) MetaClass(com.haulmont.chile.core.model.MetaClass)

Example 3 with Entity

use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.

the class DataServiceController method commitPermitted.

/**
 * Checks if the user have permissions to commit (create or update)
 * all of the entities.
 *
 * @param commitInstances entities to commit
 * @param newInstanceIds  ids of the new entities
 * @return true - if the user can commit all of the requested entities, false -
 * if he don't have permissions to commit at least one of the entities.
 */
private boolean commitPermitted(Collection commitInstances, Collection newInstanceIds) {
    for (Object commitInstance : commitInstances) {
        Entity entity = (Entity) commitInstance;
        String fullId = entity.getMetaClass().getName() + "-" + entity.getId();
        if (newInstanceIds.contains(fullId)) {
            if (!createPermitted(entity.getMetaClass()))
                return false;
        } else if (!updatePermitted(entity.getMetaClass())) {
            return false;
        }
    }
    return true;
}
Also used : BaseGenericIdEntity(com.haulmont.cuba.core.entity.BaseGenericIdEntity) Entity(com.haulmont.cuba.core.entity.Entity)

Example 4 with Entity

use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.

the class JSONConverter method parseIntoList.

protected List<Entity> parseIntoList(CommitRequest commitRequest, JSONArray nodeList) throws JSONException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, IntrospectionException, ParseException {
    List<Entity> result = new ArrayList<>(nodeList.length());
    for (int j = 0; j < nodeList.length(); j++) {
        JSONObject jsonObject = nodeList.getJSONObject(j);
        InstanceRef ref = commitRequest.parseInstanceRefAndRegister(jsonObject.getString("id"));
        MetaClass metaClass = ref.getMetaClass();
        Entity instance = ref.getInstance();
        asJavaTree(commitRequest, instance, metaClass, jsonObject);
        result.add(instance);
    }
    return result;
}
Also used : BaseGenericIdEntity(com.haulmont.cuba.core.entity.BaseGenericIdEntity) Entity(com.haulmont.cuba.core.entity.Entity) JSONObject(org.json.JSONObject) MetaClass(com.haulmont.chile.core.model.MetaClass)

Example 5 with Entity

use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.

the class JSONConverter method processServiceMethodResult.

@Override
public String processServiceMethodResult(Object result, Class resultType) throws Exception {
    MyJSONObject root = new MyJSONObject();
    if (result instanceof Entity) {
        Entity entity = (Entity) result;
        MyJSONObject entityObject = _process(entity);
        root.set("result", entityObject);
    } else if (result instanceof Collection) {
        if (!checkCollectionItemTypes((Collection) result, Entity.class))
            throw new IllegalArgumentException("Items that are not instances of Entity found in service method result");
        // noinspection unchecked
        ArrayList list = new ArrayList((Collection) result);
        MetaClass metaClass;
        if (!list.isEmpty())
            metaClass = ((Entity) list.get(0)).getMetaClass();
        else
            metaClass = AppBeans.get(Metadata.class).getClasses().iterator().next();
        MyJSONObject.Array processed = _process(list, metaClass, null);
        root.set("result", processed);
    } else {
        if (result != null && resultType != Void.TYPE) {
            Datatype datatype = getDatatype(resultType);
            root.set("result", datatype != null ? datatype.format(result) : result.toString());
        } else {
            root.set("result", null);
        }
    }
    return root.toString();
}
Also used : JSONArray(org.json.JSONArray) BaseGenericIdEntity(com.haulmont.cuba.core.entity.BaseGenericIdEntity) Entity(com.haulmont.cuba.core.entity.Entity) MetaClass(com.haulmont.chile.core.model.MetaClass) Datatype(com.haulmont.chile.core.datatypes.Datatype)

Aggregations

Entity (com.haulmont.cuba.core.entity.Entity)203 MetaClass (com.haulmont.chile.core.model.MetaClass)51 MetaProperty (com.haulmont.chile.core.model.MetaProperty)44 BaseGenericIdEntity (com.haulmont.cuba.core.entity.BaseGenericIdEntity)40 CollectionDatasource (com.haulmont.cuba.gui.data.CollectionDatasource)18 Test (org.junit.Test)15 Inject (javax.inject.Inject)14 java.util (java.util)12 EntityManager (com.haulmont.cuba.core.EntityManager)11 ParseException (java.text.ParseException)11 Element (org.dom4j.Element)11 Logger (org.slf4j.Logger)11 com.haulmont.cuba.core.global (com.haulmont.cuba.core.global)10 MetaPropertyPath (com.haulmont.chile.core.model.MetaPropertyPath)9 LoggerFactory (org.slf4j.LoggerFactory)9 Query (com.haulmont.cuba.core.Query)8 Server (com.haulmont.cuba.core.entity.Server)8 Transaction (com.haulmont.cuba.core.Transaction)7 Datasource (com.haulmont.cuba.gui.data.Datasource)7 Collectors (java.util.stream.Collectors)7