
com.sap.cds.reflect.impl.CdsEntityReader Maven / Gradle / Ivy
/*******************************************************************
* © 2020 SAP SE or an SAP affiliate company. All rights reserved. *
*******************************************************************/
package com.sap.cds.reflect.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.function.Function;
import com.fasterxml.jackson.databind.JsonNode;
import com.sap.cds.impl.parser.TokenParser;
import com.sap.cds.reflect.CdsAnnotation;
import com.sap.cds.reflect.CdsParameter;
import com.sap.cds.reflect.CdsType;
import com.sap.cds.reflect.impl.reader.model.CdsConstants;
public class CdsEntityReader {
private CdsEntityReader() {
}
public static CdsEntityBuilder read(String qualifiedEntityName, JsonNode csn) {
CdsEntityBuilder newEntity = CdsEntityBuilder.create(qualifiedEntityName, CdsAnnotationReader.read(csn),
isAbstract(csn), getQuery(csn));
CdsBoundActionAndFunctionReader actionsAndFunctions = new CdsBoundActionAndFunctionReader(csn);
newEntity.addActions(actionsAndFunctions.getActions());
newEntity.addFunctions(actionsAndFunctions.getFunctions());
return newEntity;
}
private static String getQuery(JsonNode csn) {
String query = null;
if (csn.has(CdsConstants.QUERY)) {
query = csn.get(CdsConstants.QUERY).toString();
}
return query;
}
private static boolean isAbstract(JsonNode csn) {
if (csn.has(CdsConstants.ABSTRACT)) {
return csn.get(CdsConstants.ABSTRACT).asBoolean();
}
return false;
}
public static class CdsParameterReader {
public static List read(String path, JsonNode csn,
Function>> typeFinder) {
if (csn.has(CdsConstants.PARAMS)) {
return getParameters(csn.get(CdsConstants.PARAMS), typeFinder);
}
return Collections.emptyList();
}
private static List getParameters(JsonNode jsonNode,
Function>> typeFinder) {
List paramList = new ArrayList<>();
Iterator> fields = jsonNode.fields();
fields.forEachRemaining(field -> {
String paramName = field.getKey();
String paramType = field.getValue().get(CdsConstants.TYPE).asText();
Optional> type = typeFinder.apply(paramType);
CdsTypeBuilder> cdsType = type.orElseGet(() -> CdsSimpleTypeReader.read(paramType, field.getValue()));
List> annotations = CdsAnnotationReader.read(field.getValue());
Function defValProvider = (t) -> TokenParser.defaultValue(field.getValue().get(CdsConstants.DEFAULT), t);
paramList.add(new CdsParameterBuilder(annotations, paramName, cdsType, defValProvider).build());
});
return paramList;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy