All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sap.cds.reflect.impl.CdsEntityReader Maven / Gradle / Ivy

There is a newer version: 3.8.0
Show newest version
/*******************************************************************
 * © 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