All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.mindengine.galen.validation.specs.SpecValidationDirectionPosition Maven / Gradle / Ivy

There is a newer version: 1.6.4
Show newest version
/*******************************************************************************
* Copyright 2014 Ivan Shubin http://mindengine.net
* 
* 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 net.mindengine.galen.validation.specs;

import net.mindengine.galen.page.PageElement;
import net.mindengine.galen.page.Rect;
import net.mindengine.galen.specs.Range;
import net.mindengine.galen.specs.SpecDirectionPosition;
import net.mindengine.galen.validation.ErrorArea;
import net.mindengine.galen.validation.PageValidation;
import net.mindengine.galen.validation.SpecValidation;
import net.mindengine.galen.validation.ValidationErrorException;

public class SpecValidationDirectionPosition extends SpecValidation {
	
	public enum Direction {
		ABOVE, BELOW;
		
		public String toString() {
			switch(this) {
			case ABOVE:
				return "above";
			case BELOW:
				return "below";
			}
			return null;
		}
	}

	private Direction direction;

	public SpecValidationDirectionPosition(Direction direction) {
		this.direction = direction;
	}

	@Override
	public void check(PageValidation pageValidation, String objectName, SpecDirectionPosition spec) throws ValidationErrorException {
		
		PageElement mainObject = pageValidation.findPageElement(objectName);
        
        checkAvailability(mainObject, objectName);
        
        PageElement secondObject = pageValidation.findPageElement(spec.getObject());
        checkAvailability(secondObject, spec.getObject());
        
        Rect mainArea = mainObject.getArea();
        Rect secondArea = secondObject.getArea();
        int offset = getOffset(mainArea, secondArea);
        
        
        Range range = convertRange(spec.getRange(), pageValidation);
        
        if (!range.holds(offset)) {
        	throw new ValidationErrorException().withMessage(
        			String.format("\"%s\" is %dpx %s \"%s\" %s", 
        					objectName, 
        					offset, 
        					direction.toString(), 
        					spec.getObject(), 
        					spec.getRange().getErrorMessageSuffix()))
        		.withErrorArea(new ErrorArea(mainArea, objectName))
        		.withErrorArea(new ErrorArea(secondArea, spec.getObject()));
        }
	}


	private int getOffset(Rect mainArea, Rect secondArea) {
		if (direction == Direction.ABOVE) {
			return secondArea.getTop() - mainArea.getTop() - mainArea.getHeight();
		}
		else {
			return mainArea.getTop() - secondArea.getTop() - secondArea.getHeight();
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy