package com.robotoworks.mechanoid.sharedprefs.validation; import org.eclipse.xtext.common.types.JvmType; import org.eclipse.xtext.common.types.util.TypeReferences; import org.eclipse.xtext.validation.Check; import com.google.inject.Inject; import com.robotoworks.mechanoid.MechanoidPlugin; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.BooleanLiteral; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.Literal; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.Model; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.NumericLiteral; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.Preference; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.PreferenceType; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.SharedPreferencesModelPackage; import com.robotoworks.mechanoid.sharedprefs.sharedPreferencesModel.StringLiteral; import com.robotoworks.mechanoid.validation.MechanoidIssueCodes; import com.robotoworks.mechanoid.validation.MechanoidLibClasspathValidationHelper; public class SharedPreferencesModelJavaValidator extends AbstractSharedPreferencesModelJavaValidator { @Inject TypeReferences typeReferences; @Inject MechanoidLibClasspathValidationHelper libValidationHelper; @Check public void checkMechanoidLibOnClasspath(Model m) { if(libValidationHelper.shouldValidateMechanoidLibOnClassPath(m)) { JvmType type = typeReferences.findDeclaredType(MechanoidPlugin.MECHANOID_LIB_CLASS, m); if(type == null) { error("mechanoid.jar is required in your /libs folder or on the classpath", SharedPreferencesModelPackage.Literals.MODEL__PACKAGE_NAME, MechanoidIssueCodes.MISSING_MECHANOID_LIBS); } } } @Check public void checkDefaultValue(Preference preference){ PreferenceType type = preference.getType(); Literal defaultValue = preference.getDefaultValue(); if(defaultValue == null) { return; } switch(type) { case STRING: if(!(defaultValue instanceof StringLiteral)) { error("Type mismatch", SharedPreferencesModelPackage.Literals.PREFERENCE__DEFAULT_VALUE ); } break; case BOOLEAN: if(!(defaultValue instanceof BooleanLiteral)) { error("Type mismatch", SharedPreferencesModelPackage.Literals.PREFERENCE__DEFAULT_VALUE ); } break; case FLOAT: case INTEGER: case LONG: if(!(defaultValue instanceof NumericLiteral)) { error("Type mismatch", SharedPreferencesModelPackage.Literals.PREFERENCE__DEFAULT_VALUE ); } break; } } }