/** * 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.java.features; import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.*; 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 JavaFeatureValueProvider extends AbstractDefaultFeatureValueProvider { private static final String PACKAGE_NAME_REGEX = "([a-zA-Z_][a-zA-Z0-9_\\.]*)+[a-zA-Z_][a-zA-Z0-9_]*"; 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(BASE_PACKAGE)) { parameterValue.setValue("org.yakindu.sct"); } else if (parameterValue.getParameter().getName().equals(IMPLEMENTATION_SUFFIX)) { parameterValue.setValue("impl"); } else if (featureType.getName().equals(FEATURE_RUNNABLE_WRAPPER)) { if (parameterValue.getParameter().getName().equals(VALUE_NAME_PREFIX)) { parameterValue.setValue(RUNNABLE_WRAPPER_NAME_PREFIX_DEFAULT); } else if (parameterValue.getParameter().getName().equals(VALUE_NAME_SUFFIX)) { parameterValue.setValue(RUNNABLE_WRAPPER_NAME_SUFFIX_DEFAULT); } } else if (featureType.getName().equals(FEATURE_SYCHRONIZED_WRAPPER)) { if (parameterValue.getParameter().getName().equals(VALUE_NAME_PREFIX)) { parameterValue.setValue(SYCHRONIZED_WRAPPER_NAME_PREFIX_DEFAULT); } else if (parameterValue.getParameter().getName().equals(VALUE_NAME_SUFFIX)) { parameterValue.setValue(SYCHRONIZED_WRAPPER_NAME_SUFFIX_DEFAULT); } } } public boolean isProviderFor(FeatureTypeLibrary library) { return library.getName().equals(LIBRARY_NAME); } public IStatus validateParameterValue(FeatureParameterValue value) { String name = value.getParameter().getName(); if (BASE_PACKAGE.equals(name)) { if (!value.getStringValue().matches(PACKAGE_NAME_REGEX)) { return error("Invalid package name"); } // Filter out java keywords for (String keyword : Arrays.asList(JAVA_KEYWORDS)) { Pattern pattern = Pattern.compile("(?:^|\\.)" + keyword + "(?:$|\\.)"); Matcher matcher = pattern.matcher(value.getStringValue()); while (matcher.find()) { return error("Java 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(JAVA_KEYWORDS)) { Pattern pattern = Pattern.compile("^" + keyword + "$"); Matcher matcher = pattern.matcher(value.getStringValue()); while (matcher.find()) { return error("Java keyword '" + matcher.group() + "' is not allowed as suffix."); } } } return Status.OK_STATUS; } }