/*******************************************************************************
* Copyright 2017 Ivan Shubin http://galenframework.com
*
* 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 com.galenframework.validation;
import java.util.HashMap;
import java.util.Map;
import com.galenframework.specs.*;
import com.galenframework.validation.specs.*;
public class ValidationFactory {
@SuppressWarnings("rawtypes")
private Map<Class<? extends Spec>, SpecValidation> validations = new HashMap<>();
private static ValidationFactory _instance = null;
private ValidationFactory() {
initValidations();
}
public synchronized static ValidationFactory get() {
if (_instance == null) {
_instance = new ValidationFactory();
}
return _instance;
}
private void initValidations() {
validations.put(SpecContains.class, new SpecValidationContains());
validations.put(SpecAbsent.class, new SpecValidationAbsent());
validations.put(SpecVisible.class, new SpecValidationVisible());
validations.put(SpecInside.class, new SpecValidationInside());
validations.put(SpecNear.class, new SpecValidationNear());
validations.put(SpecWidth.class, new SpecValidationWidth());
validations.put(SpecHeight.class, new SpecValidationHeight());
validations.put(SpecHorizontally.class, new SpecValidationHorizontally());
validations.put(SpecVertically.class, new SpecValidationVertically());
validations.put(SpecText.class, new SpecValidationText());
validations.put(SpecAbove.class, new SpecValidationDirectionPosition(SpecValidationDirectionPosition.Direction.ABOVE));
validations.put(SpecBelow.class, new SpecValidationDirectionPosition(SpecValidationDirectionPosition.Direction.BELOW));
validations.put(SpecLeftOf.class, new SpecValidationDirectionPosition(SpecValidationDirectionPosition.Direction.LEFT_OF));
validations.put(SpecRightOf.class, new SpecValidationDirectionPosition(SpecValidationDirectionPosition.Direction.RIGHT_OF));
validations.put(SpecCentered.class, new SpecValidationCentered());
validations.put(SpecOn.class, new SpecValidationOn());
validations.put(SpecComponent.class, new SpecValidationComponent());
validations.put(SpecColorScheme.class, new SpecValidationColorScheme());
validations.put(SpecImage.class, new SpecValidationImage());
validations.put(SpecCss.class, new SpecValidationCss());
validations.put(SpecCount.class, new SpecValidationCount());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static SpecValidation<? extends Spec> getValidation(Spec spec, PageValidation pageValidation) {
SpecValidation specValidation = ValidationFactory.get().validations.get(spec.getClass());
if (specValidation == null) {
throw new RuntimeException("There is no known validation for spec " + spec.getClass());
}
else {
return specValidation;
}
}
}