Package net.mindengine.galen.validation.specs

Source Code of net.mindengine.galen.validation.specs.SpecValidationDirectionPosition

/*******************************************************************************
* 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<SpecDirectionPosition> {
 
  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();
    }
  }

}
TOP

Related Classes of net.mindengine.galen.validation.specs.SpecValidationDirectionPosition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.