/** * Copyright (c) 2011-2015 committers of YAKINDU and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * committers of YAKINDU - initial API and implementation */ package org.yakindu.sct.generator.csharp.features; import static org.yakindu.sct.generator.csharp.features.ICSharpFeatureConstants.*; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EObject; import org.yakindu.sct.generator.core.library.AbstractDefaultFeatureValueProvider; import org.yakindu.sct.model.sgen.FeatureParameterValue; import org.yakindu.sct.model.sgen.FeatureType; import org.yakindu.sct.model.sgen.FeatureTypeLibrary; /** * * @author andreas muelder - Initial contribution and API * @author terfloth - extensions * */ public class CSharpFeatureValueProvider extends AbstractDefaultFeatureValueProvider { private static final String SUFFIX_REGEX = "[a-zA-Z0-9_]*"; @Override protected void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue, EObject contextElement) { if (parameterValue.getParameter().getName().equals(NAMESPACE_NAME)) { parameterValue.setValue("Yakindu.SCT"); } else if (parameterValue.getParameter().getName() .equals(IMPLEMENTATION_SUFFIX)) { parameterValue.setValue("impl"); } else if (parameterValue.getParameter().getName().equals(NAME_PREFIX)) { parameterValue.setValue("Runnable"); } else if (parameterValue.getParameter().getName().equals(NAME_SUFFIX)) { parameterValue.setValue(""); } } public boolean isProviderFor(FeatureTypeLibrary library) { return library.getName().equals(LIBRARY_NAME); } public IStatus validateParameterValue(FeatureParameterValue value) { String name = value.getParameter().getName(); if (NAMESPACE_NAME.equals(name)) { // Filter out C# keywords for (String keyword : Arrays.asList(CSHARP_KEYWORDS)) { Pattern pattern = Pattern.compile("(?:^|\\.)" + keyword + "(?:$|\\.)"); Matcher matcher = pattern.matcher(value.getStringValue()); while (matcher.find()) { return error("C# keyword '" + matcher.group() + "' is not allowed in package names."); } } } if (IMPLEMENTATION_SUFFIX.equals(name)) { if (!value.getStringValue().matches(SUFFIX_REGEX)) { return error("Invalid value"); } for (String keyword : Arrays.asList(CSHARP_KEYWORDS)) { Pattern pattern = Pattern.compile("^" + keyword + "$"); Matcher matcher = pattern.matcher(value.getStringValue()); while (matcher.find()) { return error("C# keyword '" + matcher.group() + "' is not allowed as suffix."); } } } return Status.OK_STATUS; } }