package com.sap.furcas.runtime.textblocks.shortprettyprint; import java.util.regex.Matcher; import org.eclipse.emf.ecore.EObject; import com.sap.furcas.metamodel.FURCAS.TCS.PrimitiveTemplate; import com.sap.furcas.metamodel.FURCAS.TCS.Property; import com.sap.furcas.metamodel.FURCAS.TCS.ReferenceByPArg; import com.sap.furcas.runtime.common.exceptions.ModelAdapterException; import com.sap.furcas.runtime.common.util.TCSSpecificOCLEvaluator; import com.sap.furcas.runtime.tcs.PropertyArgumentUtil; import com.sap.furcas.utils.StringUtil; public class PrettyPrinterUtil { /** * Quote the given string value according to the rules defined by associated PrimitiveTemplate. */ public static String escapeUsingSerializer(String value, PrimitiveTemplate template) { if (template != null && template.getSerializer() != null && !template.getSerializer().equals("")) { String serializer = StringUtil.unescapeString(template.getSerializer()); String escapedValue = (value).replaceAll("\"", Matcher.quoteReplacement("\\\"")); return serializer.replaceAll("%value%", Matcher.quoteReplacement(escapedValue)); } else { return value; } } public static String invertReferenceByQuery(EObject self, Property property, TCSSpecificOCLEvaluator oclEvaluator) throws ModelAdapterException { ReferenceByPArg referenceBy = PropertyArgumentUtil.getReferenceByPArg(property); String invertQuery = PropertyArgumentUtil.getReferenceByAsOCL(referenceBy); try { String value = (String) oclEvaluator.findElementsWithOCLQuery(self, /*keyValue*/null, invertQuery).iterator().next(); return PropertyArgumentUtil.stripPrefixPostfix(value, PropertyArgumentUtil.getPrefixPArg(property), PropertyArgumentUtil.getPostfixPArg(property)); } catch (ModelAdapterException e) { throw new ModelAdapterException("Unable to serialize referenced model element: " + e.getMessage(), e); } } }