/**
* Copyright (c) 2011 Cloudsmith Inc. and other contributors, as listed below.
* 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:
* Cloudsmith
*
*/
package org.cloudsmith.geppetto.pp.dsl.validation;
import org.cloudsmith.geppetto.pp.dsl.validation.IValidationAdvisor.ComplianceLevel;
public class ValidationAdvisor {
public static class BaseValidationAdvisor implements IPotentialProblemsAdvisor, IStylisticProblemsAdvisor {
private IPotentialProblemsAdvisor problemsAdvisor;
protected BaseValidationAdvisor(IPotentialProblemsAdvisor problemsAdvisor) {
this.problemsAdvisor = problemsAdvisor;
}
@Override
public ValidationPreference assignmentToVarNamedString() {
return problemsAdvisor.assignmentToVarNamedString();
}
@Override
public ValidationPreference booleansInStringForm() {
return problemsAdvisor.booleansInStringForm();
}
@Override
public ValidationPreference caseDefaultShouldAppearLast() {
return problemsAdvisor.caseDefaultShouldAppearLast();
}
@Override
public ValidationPreference circularDependencyPreference() {
return problemsAdvisor.circularDependencyPreference();
}
@Override
public ValidationPreference dqStringNotRequired() {
return problemsAdvisor.dqStringNotRequired();
}
@Override
public ValidationPreference dqStringNotRequiredVariable() {
return problemsAdvisor.dqStringNotRequiredVariable();
}
@Override
public ValidationPreference ensureShouldAppearFirstInResource() {
return problemsAdvisor.ensureShouldAppearFirstInResource();
}
@Override
public ValidationPreference interpolatedNonBraceEnclosedHyphens() {
return problemsAdvisor.interpolatedNonBraceEnclosedHyphens();
}
@Override
public ValidationPreference missingDefaultInSelector() {
return problemsAdvisor.missingDefaultInSelector();
}
@Override
public ValidationPreference mlComments() {
return problemsAdvisor.mlComments();
}
@Override
public ValidationPreference rightToLeftRelationships() {
return problemsAdvisor.rightToLeftRelationships();
}
@Override
public ValidationPreference selectorDefaultShouldAppearLast() {
return problemsAdvisor.selectorDefaultShouldAppearLast();
}
@Override
public ValidationPreference unbracedInterpolation() {
return problemsAdvisor.unbracedInterpolation();
}
@Override
public ValidationPreference unquotedResourceTitles() {
return problemsAdvisor.unquotedResourceTitles();
}
}
/**
* Validation Advisor for Puppet 2.6
*
*/
public static class ValidationAdvisor_2_6 extends BaseValidationAdvisor implements IValidationAdvisor {
/**
* @param problemsAdvisor
*/
protected ValidationAdvisor_2_6(IPotentialProblemsAdvisor problemsAdvisor) {
super(problemsAdvisor);
}
/**
* @returns false
*/
@Override
public boolean allowExpressionLastInBlocks() {
return false;
}
/**
* @returns false
*/
@Override
public boolean allowExtendedDependencyTypes() {
return false;
}
/**
* @returns true
*/
@Override
public boolean allowHashInSelector() {
return true;
}
/**
* @returns false
*/
@Override
public boolean allowInheritanceFromParameterizedClass() {
return false;
}
/**
* @returns false
*/
@Override
public boolean allowLambdas() {
return false;
}
/**
* @returns false
*/
@Override
public boolean allowModulo() {
return false;
}
/**
* @returns true
*/
@Override
public boolean allowMoreThan2AtInSequence() {
return true;
}
/**
* @returns false
*/
@Override
public boolean allowSeparatorExpression() {
return false;
}
@Override
public boolean allowUnless() {
return false;
}
/**
* @returns false
*/
@Override
public boolean allowUnlessElse() {
return false;
}
@Override
public boolean allowUnquotedQualifiedResourceNames() {
return false;
}
/**
* @returns ValidationPreference.ERROR
*/
@Override
public ValidationPreference definitionArgumentListEndComma() {
return ValidationPreference.ERROR;
}
@Override
public ValidationPreference definitionParamterMissingDollar() {
return ValidationPreference.WARNING;
}
/**
* @returns ValidationPreference.WARNING
*/
@Override
public ValidationPreference hyphensInNames() {
return ValidationPreference.WARNING;
}
/**
* @returns ValidationPreference.ERROR
*/
@Override
public ValidationPreference periodInCase() {
return ValidationPreference.ERROR;
}
/**
* @returns ValidationPreference.IGNORE
*/
@Override
public ValidationPreference unqualifiedVariables() {
return ValidationPreference.IGNORE;
}
}
/**
* Validation Advisor for Puppet 2.7
*
*/
public static class ValidationAdvisor_2_7 extends ValidationAdvisor_2_6 implements IValidationAdvisor {
/**
* @param problemsAdvisor
*/
protected ValidationAdvisor_2_7(IPotentialProblemsAdvisor problemsAdvisor) {
super(problemsAdvisor);
}
@Override
public boolean allowUnquotedQualifiedResourceNames() {
return true;
}
/**
* @returns ValidationPreference.WARNING
*/
@Override
public ValidationPreference definitionArgumentListEndComma() {
return ValidationPreference.WARNING;
}
/**
* @returns ValidationPreference.IGNORE
*/
@Override
public ValidationPreference periodInCase() {
return ValidationPreference.IGNORE;
}
/**
* @returns ValidationPreference.WARNING
*/
@Override
public ValidationPreference unqualifiedVariables() {
return ValidationPreference.WARNING;
}
}
/**
* Validation Advisor for Puppet 3.0
*
*/
public static class ValidationAdvisor_3_0 extends ValidationAdvisor_2_7 implements IValidationAdvisor {
/**
* @param problemsAdvisor
*/
protected ValidationAdvisor_3_0(IPotentialProblemsAdvisor problemsAdvisor) {
super(problemsAdvisor);
}
/**
* @returns true
*/
@Override
public boolean allowExtendedDependencyTypes() {
return true;
}
/**
* @returns true, but unsure if really supported
*/
@Override
public boolean allowInheritanceFromParameterizedClass() {
return true;
}
@Override
public boolean allowUnless() {
return true;
}
/**
* @returns ValidationPreference.IGNORE
*/
@Override
public ValidationPreference definitionArgumentListEndComma() {
return ValidationPreference.IGNORE;
}
@Override
public ValidationPreference definitionParamterMissingDollar() {
return ValidationPreference.ERROR;
}
/**
* @returns ValidationPreference.ERROR
*/
@Override
public ValidationPreference hyphensInNames() {
return ValidationPreference.ERROR;
}
/**
* @returns ValidationPreference.ERROR
*/
@Override
public ValidationPreference unqualifiedVariables() {
return ValidationPreference.ERROR;
}
}
public static class ValidationAdvisor_3_2 extends ValidationAdvisor_3_0 implements IValidationAdvisor {
protected ValidationAdvisor_3_2(IPotentialProblemsAdvisor problemsAdvisor) {
super(problemsAdvisor);
}
@Override
public boolean allowModulo() {
return true;
}
}
public static class ValidationAdvisor_3_2_future extends ValidationAdvisor_3_2 implements IValidationAdvisor {
protected ValidationAdvisor_3_2_future(IPotentialProblemsAdvisor problemsAdvisor) {
super(problemsAdvisor);
}
@Override
public boolean allowExpressionLastInBlocks() {
return true;
}
@Override
public boolean allowLambdas() {
return true;
}
@Override
public boolean allowSeparatorExpression() {
return true;
}
@Override
public boolean allowUnlessElse() {
return true;
}
}
public static IValidationAdvisor create(ComplianceLevel level, IPotentialProblemsAdvisor problemsAdvisor) {
switch(level) {
case PUPPET_2_6:
return new ValidationAdvisor_2_6(problemsAdvisor);
case PUPPET_2_7:
return new ValidationAdvisor_2_7(problemsAdvisor);
case PUPPET_3_0:
return new ValidationAdvisor_3_0(problemsAdvisor);
case PUPPET_3_2:
return new ValidationAdvisor_3_2(problemsAdvisor);
case PUPPET_FUTURE:
return new ValidationAdvisor_3_2_future(problemsAdvisor);
}
throw new IllegalArgumentException("Unsupported compliance level");
}
}