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

com.sap.cds.impl.parser.UpdateParser Maven / Gradle / Ivy

There is a newer version: 3.8.0
Show newest version
/*******************************************************************
 * © 2019 SAP SE or an SAP affiliate company. All rights reserved. *
 *******************************************************************/
package com.sap.cds.impl.parser;

import static com.sap.cds.impl.parser.JsonParser.list;
import static com.sap.cds.impl.parser.JsonParser.map;
import static com.sap.cds.impl.parser.JsonParser.parseJson;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import com.fasterxml.jackson.databind.JsonNode;
import com.sap.cds.ql.StructuredType;
import com.sap.cds.ql.Update;
import com.sap.cds.ql.cqn.CqnPredicate;
import com.sap.cds.ql.cqn.CqnStructuredTypeRef;
import com.sap.cds.ql.impl.UpdateBuilder;

public class UpdateParser {
	private final JsonNode update;

	private UpdateParser(JsonNode node) {
		update = node.get("UPDATE");
	}

	public static UpdateParser of(String cqn) {
		return new UpdateParser(parseJson(cqn));
	}

	public static Update> parse(String cqn) {
		return of(cqn).parse();
	}

	public Update> parse() {
		CqnStructuredTypeRef ref = TokenParser.ref(update.get("entity"));
		UpdateBuilder> update = UpdateBuilder.entity(ref);
		readData().ifPresent(update::data);
		readEntries().ifPresent(update::entries);

		return update.where(where());
	}

	private CqnPredicate where() {
		JsonNode where = update.get("where");
		return ExpressionParser.parsePredicate(where);
	}

	private Optional> readData() {
		if (update.has("data")) {
			return Optional.of(map(update.get("data")));
		} else {
			return Optional.empty();
		}
	}

	private Optional>> readEntries() {
		if (update.has("entries")) {
			return Optional.of(list(update.withArray("entries")));
		} else {
			return Optional.empty();
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy