package org.panlab.software.fsdl.validation; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.EPackage; import org.eclipse.xtext.validation.Check; import FederationOffice.FederationOfficePackage; import FederationOffice.federationscenarios.InfrastructureRequest; import FederationOffice.federationscenarios.ResourceRequest; import FederationOffice.federationscenarios.ResourceSettingInstance; import FederationOffice.federationscenarios.ServiceRequest; import FederationOffice.federationscenarios.ServiceSettingInstance; import FederationOffice.federationscenarios.ServicesRequest; import FederationOffice.federationscenarios.SettingInstance; import FederationOffice.resources.Resource; import FederationOffice.services.AbstractSetting; import FederationOffice.services.Service; public class FSDLJavaValidator extends AbstractFSDLJavaValidator { // @Check // public void checkTypeNameStartsWithCapital(Type type) { // if (!Character.isUpperCase(type.getName().charAt(0))) { // warning("Name should start with a capital", MyDslPackage.TYPE__NAME); // } // } @Override protected List<EPackage> getEPackages() { List<EPackage> result = new ArrayList<EPackage>(); result.add(FederationOfficePackage.eINSTANCE); // result.add(org.panlab.virtualTestbedDL.VirtualTestbedDLPackage.eINSTANCE); // result.add(tide.virtualtestbed.VirtualtestbedPackage.eINSTANCE); return result; } // @Check // public void checkIPSetting( ServiceSettingInstance e ){ // //System.out.println("Check checkIPSetting"); // if (e.getName().toUpperCase().equals("IP")) // if ( ( (ServiceRequest)e.eContainer() ).getNumOfServices()>1 ) // if ( !e.getStaticValue().contains("->") ) // warning("The IP should be in the form XXX.XXX.XXX.XXX -> XXX.XXX.XXX.YYY", // FederationOffice.federationscenarios.FederationscenariosPackage.SERVICE_SETTING_INSTANCE__STATIC_VALUE ); // } @Check public void checkTODOvalue( ServiceSettingInstance e ){ //System.out.println("Check checkTODOvalue"); if ( ( e.getStaticValue()!=null ) && (e.getStaticValue().contains("TODO:")) ){ warning("Set here either a static value or \n or use the keyword 'assign' instead of = in order to assign a value from another setting", FederationOffice.federationscenarios.FederationscenariosPackage.SERVICE_SETTING_INSTANCE__STATIC_VALUE ); } } @Check public void checkRequiresService( ServiceRequest e ){ //System.out.println("Check checkIPSetting"); String msg=""; if ( (e.getRefService()!=null)&&(e.getRefService().getRequiresServices().size()>0 )){ ServicesRequest sr = (ServicesRequest)e.eContainer(); for (Service requiredService : e.getRefService().getRequiresServices()) { boolean serviceExistInRequest=false; for (ServiceRequest reqService : sr.getServiceRequestList() ) { if (reqService.getRefService().getName().equals( requiredService.getName() ) ){ serviceExistInRequest = true; } } if (!serviceExistInRequest){ msg += "A \""+ e.getName()+ "\" service, requests also service "+requiredService.getName() +" to be present in the scenario. Please add it.\n"; } } } if (! "".equals(msg)){ error(msg, FederationOffice.federationscenarios.FederationscenariosPackage.SERVICE_REQUEST__NAME ); } } @Check public void checkRequiresServiceSetting( ServiceSettingInstance e ){ //System.out.println("Check checkIPSetting"); String msg=""; if ( (e.getRefServiceSetting()!=null)&&(e.getRefServiceSetting().getRequiresParams().size()>0 )){ for (AbstractSetting reqSetting : e.getRefServiceSetting().getRequiresParams()) { boolean settingExists=false; for (SettingInstance settingInstance : e.getAssignSetting()){ //if we have already some assignments, then check if contain the correct if (settingInstance instanceof ServiceSettingInstance) if ( ((ServiceSettingInstance)settingInstance).getRefServiceSetting().equals(reqSetting) ){ settingExists = true; } } if ( ! settingExists ){ msg += "Setting "+e.getName()+ " requests also setting "+ reqSetting.getName() +" of service "+ ((Service)reqSetting.eContainer()).getName() +" to be assigned. Please assign it.\n"; } } if (! "".equals(msg)){ error(msg, FederationOffice.federationscenarios.FederationscenariosPackage.SERVICE_SETTING_INSTANCE__NAME ); } } } @Check public void checkServiceSettingReadable( ServiceSettingInstance e ){ if ( (e.getRefServiceSetting()!=null)&&(!e.getRefServiceSetting().isWritable() )){ if ( (e.getStaticValue()!=null) || (e.getAssignSetting().size()>0) ) error("Setting is Read only. It cannot be set by user and its value is available after provisioning. " + "It can be assigned to other services. " + "Please remove all static or assigned values", FederationOffice.federationscenarios.FederationscenariosPackage.SERVICE_SETTING_INSTANCE__NAME ); } } @Check public void checkRequiresResource( ResourceRequest e ){ //System.out.println("Check checkIPSetting"); String msg=""; if ( (e.getRefOfferedResource()!=null)&&(e.getRefOfferedResource().getRequiresResources().size()>0 )){ InfrastructureRequest sr = (InfrastructureRequest)e.eContainer(); for (Resource requiredResource : e.getRefOfferedResource().getRequiresResources()) { boolean resourceExistInRequest=false; for (ResourceRequest reqResource : sr.getReqOfferedResources() ) { if (reqResource.getRefOfferedResource().getName().equals( requiredResource.getName() ) ){ resourceExistInRequest = true; } } if (!resourceExistInRequest){ msg += "A \""+ e.getName()+ "\" resource, requests also resource "+requiredResource.getName() +" to be present in the scenario. Please add it.\n"; } } } if (! "".equals(msg)){ error(msg, FederationOffice.federationscenarios.FederationscenariosPackage.RESOURCE_REQUEST__NAME ); } } @Check public void checkRequiresResourceSetting( ResourceSettingInstance e ){ //System.out.println("Check checkIPSetting"); String msg=""; if ( (e.getRefResourceSetting()!=null)&&(e.getRefResourceSetting().getRequiresParams().size()>0 )){ for (AbstractSetting reqSetting : e.getRefResourceSetting().getRequiresParams()) { boolean settingExists=false; for (SettingInstance settingInstance : e.getAssignSetting()){ //if we have already some assignments, then check if contain the correct if (settingInstance instanceof ResourceSettingInstance) if ( ((ResourceSettingInstance)settingInstance).getRefResourceSetting().equals(reqSetting) ){ settingExists = true; } } if ( ! settingExists ){ msg += "Setting "+e.getName()+ " requests also setting "+ reqSetting.getName() +" of resource "+ ((Resource)reqSetting.eContainer()).getName() +" to be assigned. Please assign it.\n"; } } if (! "".equals(msg)){ error(msg, FederationOffice.federationscenarios.FederationscenariosPackage.RESOURCE_SETTING_INSTANCE__NAME ); } } } @Check public void checkResourceSettingReadable( ResourceSettingInstance e ){ if ( (e.getRefResourceSetting()!=null)&&(!e.getRefResourceSetting().isWritable() )){ if ( (e.getStaticValue()!=null) || (e.getAssignSetting().size()>0) ) error("Setting is Read only. It cannot be set by user and its value is available after provisioning. " + "It can be assigned to other resources. " + "Please remove all static or assigned values", FederationOffice.federationscenarios.FederationscenariosPackage.RESOURCE_SETTING_INSTANCE__NAME ); } } }