/******************************************************************************* * Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. *******************************************************************************/ package org.cloudifysource.dsl.internal.validators; import java.util.HashMap; import java.util.Map; import org.cloudifysource.domain.AppSharedIsolationSLADescriptor; import org.cloudifysource.domain.Application; import org.cloudifysource.domain.GlobalIsolationSLADescriptor; import org.cloudifysource.domain.IsolationSLA; import org.cloudifysource.domain.MirrorProcessingUnit; import org.cloudifysource.domain.Service; import org.cloudifysource.domain.ServiceLifecycle; import org.cloudifysource.domain.ServiceNetwork; import org.cloudifysource.domain.SharedIsolationSLADescriptor; import org.cloudifysource.domain.Sla; import org.cloudifysource.domain.StatelessProcessingUnit; import org.cloudifysource.domain.TenantSharedIsolationSLADescriptor; import org.cloudifysource.domain.cloud.AgentComponent; import org.cloudifysource.domain.cloud.Cloud; import org.cloudifysource.domain.cloud.CloudProvider; import org.cloudifysource.domain.cloud.CloudUser; import org.cloudifysource.domain.cloud.DeployerComponent; import org.cloudifysource.domain.cloud.DiscoveryComponent; import org.cloudifysource.domain.cloud.GridComponent; import org.cloudifysource.domain.cloud.OrchestratorComponent; import org.cloudifysource.domain.cloud.RestComponent; import org.cloudifysource.domain.cloud.UsmComponent; import org.cloudifysource.domain.cloud.WebuiComponent; import org.cloudifysource.domain.cloud.compute.ComputeTemplate; import org.cloudifysource.domain.network.AccessRule; import org.cloudifysource.domain.statistics.PercentileInstancesStatisticsConfig; import org.cloudifysource.dsl.internal.DSLValidationException; /** * * @author adaml * */ public class DSLValidationFactory { private static DSLValidationFactory instance = new DSLValidationFactory(); private Map<String, Class<? extends DSLValidator>> validatorByClass = new HashMap<String, Class<? extends DSLValidator>>(); private DSLValidationFactory() { init(); } public static DSLValidationFactory getInstance() { return instance; } private void init() { validatorByClass.put(AppSharedIsolationSLADescriptor.class.getName(), AppSharedIsolationSLADescriptorValidator.class); validatorByClass.put(Application.class.getName(), ApplicationValidator.class); validatorByClass.put(SharedIsolationSLADescriptor.class.getName(), SharedIsolationSLADescriptorValidator.class); validatorByClass.put(AgentComponent.class.getName(), AgentComponentValidator.class); validatorByClass.put(AppSharedIsolationSLADescriptor.class.getName(), AppSharedIsolationSLADescriptorValidator.class); validatorByClass.put(CloudProvider.class.getName(), CloudProviderValidator.class); validatorByClass.put(CloudUser.class.getName(), CloudUserValidator.class); validatorByClass.put(Cloud.class.getName(), CloudValidator.class); validatorByClass.put(ComputeTemplate.class.getName(), ComputeTemplateValidator.class); validatorByClass.put(DeployerComponent.class.getName(), DeployerComponentValidator.class); validatorByClass.put(DiscoveryComponent.class.getName(), DiscoveryComponentValidator.class); validatorByClass.put(GlobalIsolationSLADescriptor.class.getName(), GlobalIsolationSLADescriptorValidator.class); validatorByClass.put(GridComponent.class.getName(), GridComponentValidator.class); validatorByClass.put(IsolationSLA.class.getName(), IsolationSLAValidatior.class); validatorByClass.put(MirrorProcessingUnit.class.getName(), MirrorProcessingUnitValidator.class); validatorByClass.put(OrchestratorComponent.class.getName(), OrchestratorComponentValidator.class); validatorByClass.put(PercentileInstancesStatisticsConfig.class.getName(), PercentileInstancesStatisticsConfigValidaor.class); validatorByClass.put(RestComponent.class.getName(), RestComponentValidator.class); validatorByClass.put(ServiceLifecycle.class.getName(), ServiceLifecycleValidator.class); validatorByClass.put(ServiceNetwork.class.getName(), ServiceNetworkValidator.class); validatorByClass.put(Service.class.getName(), ServiceValidator.class); validatorByClass.put(SharedIsolationSLADescriptor.class.getName(), SharedIsolationSLADescriptorValidator.class); validatorByClass.put(Sla.class.getName(), SlaValidator.class); validatorByClass.put(StatelessProcessingUnit.class.getName(), StatelessProcessingUnitValidator.class); validatorByClass.put(TenantSharedIsolationSLADescriptor.class.getName(), TenantSharedIsolationSLADescriptorValidator.class); validatorByClass.put(UsmComponent.class.getName(), UsmComponentValidator.class); validatorByClass.put(WebuiComponent.class.getName(), WebuiComponentValidator.class); validatorByClass.put(AccessRule.class.getName(), AccessRuleValidator.class); } public static void main(String[] args) throws DSLValidationException { DSLValidationFactory factory = new DSLValidationFactory(); factory.init(); DSLValidator createValidator = factory.createValidator(new SharedIsolationSLADescriptor()); } /** * * @param entity * @return * @throws DSLValidationException */ public DSLValidator createValidator(final Object entity) throws DSLValidationException { Class<? extends DSLValidator> validatorClass = validatorByClass.get(entity.getClass().getName()); if (validatorClass == null) { return null; } try { DSLValidator validator = (DSLValidator) validatorClass.newInstance(); validator.setDSLEntity(entity); return validator; } catch (InstantiationException e) { throw new DSLValidationException("Failed to load validator for object of type: " + entity.getClass().getName() + ". Error was: " + e.getMessage(), e); } catch (IllegalAccessException e) { throw new DSLValidationException("Failed to load validator for object of type: " + entity.getClass().getName() + ". Error was: " + e.getMessage(), e); } } }