/******************************************************************************* * Copyright (c) 2010-2012, Zoltan Ujhelyi, Istvan Rath and Daniel Varro * 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: * Zoltan Ujhelyi - initial API and implementation *******************************************************************************/ package org.eclipse.incquery.databinding.runtime.util.validation; import org.eclipse.incquery.patternlanguage.annotations.IPatternAnnotationAdditionalValidator; import org.eclipse.incquery.patternlanguage.emf.annotations.AnnotationExpressionValidator; import org.eclipse.incquery.patternlanguage.helper.CorePatternLanguageHelper; import org.eclipse.incquery.patternlanguage.patternLanguage.Annotation; import org.eclipse.incquery.patternlanguage.patternLanguage.Pattern; import org.eclipse.incquery.patternlanguage.patternLanguage.PatternLanguagePackage; import org.eclipse.incquery.patternlanguage.patternLanguage.StringValue; import org.eclipse.incquery.patternlanguage.patternLanguage.ValueReference; import org.eclipse.incquery.patternlanguage.validation.IIssueCallback; import com.google.inject.Inject; /** * A validator for observable value annotations * * @author Zoltan Ujhelyi * */ public class ObservableValuePatternValidator implements IPatternAnnotationAdditionalValidator { private static final String VALIDATOR_BASE_CODE = "org.eclipse.incquery.databinding."; public static final String GENERAL_ISSUE_CODE = VALIDATOR_BASE_CODE + "general"; @Inject private AnnotationExpressionValidator expressionValidator; @Override public void executeAdditionalValidation(Annotation annotation, IIssueCallback validator) { Pattern pattern = (Pattern) annotation.eContainer(); ValueReference ref = CorePatternLanguageHelper.getFirstAnnotationParameter(annotation, "expression"); if (ref instanceof StringValue) { String value = ((StringValue) ref).getValue(); if (value.contains("$")) { validator.warning("The expressions are not required to be escaped using $ characters.", ref, PatternLanguagePackage.Literals.STRING_VALUE__VALUE, GENERAL_ISSUE_CODE); } expressionValidator.validateModelExpression(value, pattern, ref, validator); } } }