@Override public Object apply(ActionParams params) { MApiModel am = am(); ModelExecutorContext context = new SimpleModelExecutorContext(api, dao, am, em, params); ModelQueryExecutor executor = newQueryExecutor(context); Object id = id(params); QueryOptionsBase options = getWithId(params, 0); QueryOneResult result = executor.queryOne(id, options); if (null != result.getEntity()) { return ApiResponse.of(result.getEntity()); } else if (result.getRecord() == null) { throw new NotFoundException(am.getName() + " '" + id.toString() + "' not found"); } else { return ApiResponse.of(result.getRecord()); } }
@Override public QueryOneResult queryOne(Object id, QueryOptionsBase options) { if (remoteRest) { RestResource restResource = restResourceFactory.createResource(dao.getOrmContext(), em); Record record = restResource.find(id, options); return new QueryOneResult(record); } ModelExecutionContext context = new DefaultModelExecutionContext(this.context); if (null != ex.handler) { ex.handler.processQueryOneOptions(context, id, options); } Record record; CriteriaQuery<Record> query = createCriteriaQuery().whereById(id); applySelect(query, options, new HashMap<>()); ex.preQueryOne(context, id, query); if (null != ex.handler) { ex.handler.preQueryOne(context, id, query); } record = query.firstOrNull(); expandOne(record, options); if (null != ex.handler && null != record) { ex.handler.postQueryOne(context, id, record); } Object entity = ex.processQueryOneRecord(context, id, record); return new QueryOneResult(record, entity); }
/** * Gets the record of the specified id. */ protected ApiResponse get(Object id, QueryOptionsBase options) { ModelQueryExecutor executor = mef.newQueryExecutor(mec); QueryOneResult result = executor.queryOne(id, options); return ApiResponse.of(result.getRecord()); }
@Override public QueryOneResult queryOne(Object id, QueryOptionsBase options) { if (!rm.isManyToOne()) { throw new IllegalStateException("Relation '" + rm.getName() + "' must be " + RelationType.MANY_TO_ONE + "' for query one"); } RelationExecutionContext context = new DefaultRelationExecutionContext(DefaultRelationQueryExecutor.this.context); ex.preRelateQueryOne(context, id, options); Record record; if (remoteRest) { record = queryOneRemoteSource(id, options); }else if (tem.isRemoteRest()) { record = queryOneRemoteTarget(id, options); }else { record = iqe.queryOneByRelation(id, options); } ex.postRelateQueryOne(context, id, record); QueryOneResult result = new QueryOneResult(record); ex.completeRelateQueryOne(context, id, result); return result; }