use of com.developmentontheedge.be5.api.Request in project be5 by DevelopmentOnTheEdge.
the class Document method generate.
@Override
public void generate(Request req, Response res, Injector injector) {
DocumentGenerator documentGenerator = injector.get(DocumentGenerator.class);
UserAwareMeta userAwareMeta = injector.get(UserAwareMeta.class);
String entityName = req.getNonEmpty(RestApiConstants.ENTITY);
String queryName = req.getNonEmpty(RestApiConstants.QUERY);
int sortColumn = req.getInt("order[0][column]", -1);
boolean sortDesc = "desc".equals(req.get("order[0][dir]"));
Map<String, String> parametersMap = req.getValuesFromJsonAsStrings(RestApiConstants.VALUES);
HashUrl url = new HashUrl(TABLE_ACTION, entityName, queryName).named(parametersMap);
Query query;
try {
query = userAwareMeta.getQuery(entityName, queryName);
} catch (Be5Exception e) {
sendError(req, res, url, e);
return;
}
try {
switch(req.getRequestUri()) {
case "":
JsonApiModel document = documentGenerator.getDocument(query, parametersMap, sortColumn, sortDesc);
document.setMeta(req.getDefaultMeta());
res.sendAsJson(document);
return;
case "moreRows":
res.sendAsRawJson(new MoreRowsGenerator(injector).generate(req));
return;
default:
res.sendUnknownActionError();
}
} catch (Be5Exception e) {
sendError(req, res, url, e);
} catch (Throwable e) {
sendError(req, res, url, Be5Exception.internalInQuery(e, query));
}
}
use of com.developmentontheedge.be5.api.Request in project be5 by DevelopmentOnTheEdge.
the class Form method generate.
@Override
public void generate(Request req, Response res, Injector injector) {
OperationExecutor operationExecutor = injector.get(OperationExecutor.class);
DocumentGenerator documentGenerator = injector.get(DocumentGenerator.class);
String entityName = req.getNonEmpty(RestApiConstants.ENTITY);
String queryName = req.getNonEmpty(RestApiConstants.QUERY);
String operationName = req.getNonEmpty(RestApiConstants.OPERATION);
String[] selectedRows = ParseRequestUtils.selectedRows(nullToEmpty(req.get(RestApiConstants.SELECTED_ROWS)));
Map<String, String> operationParams = req.getValuesFromJsonAsStrings(RestApiConstants.OPERATION_PARAMS);
Map<String, Object> values = req.getValuesFromJson(RestApiConstants.VALUES);
Operation operation;
try {
operation = operationExecutor.create(entityName, queryName, operationName, selectedRows, operationParams);
} catch (Be5Exception e) {
HashUrl url = new HashUrl(FORM_ACTION, entityName, queryName, operationName).named(operationParams);
res.sendErrorAsJson(new ErrorModel(e, "", Collections.singletonMap(SELF_LINK, url.toString())), req.getDefaultMeta());
return;
}
Either<FormPresentation, OperationResult> data;
try {
switch(req.getRequestUri()) {
case "":
data = documentGenerator.generateForm(operation, values);
break;
case "apply":
data = documentGenerator.executeForm(operation, values);
break;
default:
res.sendUnknownActionError();
return;
}
} catch (Be5Exception e) {
res.sendErrorAsJson(documentGenerator.getErrorModel(e, operation.getUrl()), req.getDefaultMeta());
return;
}
res.sendAsJson(new ResourceData(data.isFirst() ? FORM_ACTION : OPERATION_RESULT, data.get(), Collections.singletonMap(SELF_LINK, operation.getUrl().toString())), req.getDefaultMeta());
}
use of com.developmentontheedge.be5.api.Request in project be5 by DevelopmentOnTheEdge.
the class DocumentGeneratorImpl method routeAndRun.
@Override
public Object routeAndRun(Query query, Map<String, String> parameters, int sortColumn, boolean sortDesc) {
switch(query.getType()) {
case STATIC:
if (ActionUtils.isStaticPage(query)) {
return getStatic(query);
} else {
throw Be5Exception.internalInQuery(new IllegalStateException("Unsupported static request"), query);
}
case D1:
case D1_UNKNOWN:
return getTable(query, parameters, sortColumn, sortDesc);
case D2:
case CONTAINER:
case CUSTOM:
case JAVASCRIPT:
throw Be5Exception.internal("Not support operation type: " + query.getType());
case GROOVY:
try {
Class aClass = groovyRegister.getClass(query.getEntity() + query.getName(), query.getQuery(), query.getFileName());
if (aClass != null) {
TableBuilder tableBuilder = (TableBuilder) aClass.newInstance();
tableBuilder.initialize(query, parameters);
injector.injectAnnotatedFields(tableBuilder);
return getTable(query, parameters, tableBuilder.getTableModel());
} else {
throw Be5Exception.internal("Class " + query.getQuery() + " is null.");
}
} catch (NoClassDefFoundError | IllegalAccessException | InstantiationException e) {
throw new UnsupportedOperationException("Groovy feature has been excluded", e);
}
default:
throw Be5Exception.internal("Unknown action type '" + query.getType() + "'");
}
}
use of com.developmentontheedge.be5.api.Request in project be5 by DevelopmentOnTheEdge.
the class MoreRowsGenerator method generate.
/**
* Generates more rows for a table.
* @throws IllegalArgumentException
*/
public MoreRows generate(Request req) {
String entityName = req.getNonEmpty(RestApiConstants.ENTITY);
String queryName = req.getNonEmpty(RestApiConstants.QUERY);
Map<String, String> parametersMap = req.getValuesFromJsonAsStrings(RestApiConstants.VALUES);
String startStr = req.getNonEmpty(RestApiConstants.START);
String lengthStr = req.getNonEmpty(RestApiConstants.LENGTH);
String drawStr = req.getNonEmpty(RestApiConstants.DRAW);
String selectableStr = req.getNonEmpty(RestApiConstants.SELECTABLE);
String totalNumberOfRowsStr = req.getNonEmpty(RestApiConstants.TOTAL_NUMBER_OF_ROWS);
int draw;
int start;
int totalNumberOfRows;
int length;
try {
draw = Integer.parseInt(drawStr);
start = Integer.parseInt(startStr);
length = Integer.parseInt(lengthStr);
totalNumberOfRows = Integer.parseInt(totalNumberOfRowsStr);
} catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
boolean selectable = Boolean.parseBoolean(selectableStr);
Query query = injector.get(UserAwareMeta.class).getQuery(entityName, queryName);
return generateMoreRows(query, req, parametersMap, selectable, draw, start, length, totalNumberOfRows);
}
use of com.developmentontheedge.be5.api.Request in project be5 by DevelopmentOnTheEdge.
the class QueryBuilder method select.
private void select(String sql, Request req, Injector injector) {
DocumentGenerator documentGenerator = injector.get(DocumentGenerator.class);
String userQBuilderQueryName = UserInfoHolder.getUserName() + "Query";
Map<String, String> parametersMap = req.getValuesFromJsonAsStrings(RestApiConstants.VALUES);
Entity entity = new Entity(entityName, injector.getProject().getApplication(), EntityType.TABLE);
DataElementUtils.save(entity);
Query query = new Query(userQBuilderQueryName, entity);
query.setType(QueryType.D1_UNKNOWN);
if (sql != null) {
query.setQuery(sql);
}
DataElementUtils.save(query);
try {
resourceDataList.add(new ResourceData("finalSql", FrontendConstants.STATIC_ACTION, new StaticPagePresentation("Final sql", new Be5QueryExecutor(query, parametersMap, injector).getFinalSql()), null));
} catch (Be5Exception e) {
errorModelList.add(new ErrorModel(e));
}
try {
JsonApiModel document = documentGenerator.getDocument(query, parametersMap);
// todo refactor documentGenerator
document.getData().setId("result");
resourceDataList.add(document.getData());
resourceDataList.addAll(Arrays.asList(document.getIncluded()));
} catch (Be5Exception e) {
errorModelList.add(new ErrorModel(e));
}
entity.getOrigin().remove(entityName);
}
Aggregations