/** * The contents of this file are subject to the OpenMRS Public License * Version 1.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://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.logic; import org.openmrs.logic.op.Count; import org.openmrs.logic.op.First; import org.openmrs.logic.op.Last; import org.openmrs.logic.op.Operator; import org.openmrs.logic.op.TransformOperator; import org.openmrs.logic.result.Result; /** * LogicTransform is internal representation of the transformation applied to the LogicCriteria <br /><br /> * * Example: <br /> * <code>count()</code> will apply the {@link Count} operator and return the total number of {@link Result} instead of the Result itself * <code>first(2)</code> will apply the {@link First} operator and return the first two {@link Result} out of the entire Result * */ public class LogicTransform { private Operator transformOperator = null; private Integer numResults = null; private String sortColumn = null; public LogicTransform(Operator transformOperator, Integer numResults) { this.transformOperator = transformOperator; this.numResults = numResults; } public LogicTransform(Operator transformOperator) { this.transformOperator = transformOperator; } /** * Get the {@link TransformOperator} in this LogicTransform object * * @return the current TransformOperator */ public Operator getTransformOperator() { return transformOperator; } public String toString() { StringBuffer result = new StringBuffer(); if (transformOperator != null) { result.append(transformOperator); } if (numResults != null) { result.append(" " + numResults); } if (sortColumn != null) { result.append(" ordered by " + sortColumn); } return result.toString(); } /** * Get number of {@link Result} object should be returned by the current criteria. <br> * Only for {@link First} and {@link Last} */ public Integer getNumResults() { return numResults; } public String getSortColumn() { return sortColumn; } /** * Set number of {@link Result} object should be returned by the current criteria. <br> * Only for {@link First} and {@link Last} * * @param numResults the total Result expected from this criteria */ public void setNumResults(Integer numResults) { this.numResults = numResults; } public void setSortColumn(String sortColumn) { this.sortColumn = sortColumn; } @Override public boolean equals(Object obj) { if (!(obj instanceof LogicTransform)) { return false; } LogicTransform compTransform = (LogicTransform) obj; if (!safeEquals(this.transformOperator, compTransform.getTransformOperator())) { return false; } if (!safeEquals(numResults, compTransform.getNumResults())) { return false; } if (!safeEquals(sortColumn, compTransform.getSortColumn())) { return false; } return true; } private boolean safeEquals(Object a, Object b) { if (a == null && b == null) return true; if (a == null || b == null) return false; return a.equals(b); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((transformOperator == null) ? 0 : transformOperator.hashCode()); result = prime * result + ((numResults == null) ? 0 : numResults.hashCode()); result = prime * result + ((sortColumn == null) ? 0 : sortColumn.hashCode()); return result; } }