public CalcResult merge(CalcResult resultsToAdd) { if (!isCompatible(resultsToAdd)) { throw new IllegalArgumentException("Parameter is not a compatible type"); } if (resultsToAdd == CalcResult.NULL_RESULT) { return this; } if (resultsToAdd instanceof MaxResult) { // take the smaller of the 2 values Comparable toAdd = (Comparable) resultsToAdd.getValue(); Comparable newMax = maxValue; if (newMax.getClass() != toAdd.getClass()) { // 2 different data types, therefore convert Class bestClass = CalcUtil.bestClass(new Object[] {toAdd, newMax}); if (bestClass != toAdd.getClass()) toAdd = (Comparable) CalcUtil.convert(toAdd, bestClass); if (bestClass != newMax.getClass()) newMax = (Comparable) CalcUtil.convert(newMax, bestClass); } if (newMax.compareTo(toAdd) < 0) { newMax = toAdd; } return new MaxResult(newMax); } else { throw new IllegalArgumentException( "The CalcResults claim to be compatible, but the appropriate merge method has not been implemented."); } } }
public CalcResult merge(CalcResult resultsToAdd) { if (!isCompatible(resultsToAdd)) { throw new IllegalArgumentException( "Parameter is not a compatible type"); } if(resultsToAdd == CalcResult.NULL_RESULT) { return this; } if (resultsToAdd instanceof MaxResult) { //take the smaller of the 2 values Comparable toAdd = (Comparable) resultsToAdd.getValue(); Comparable newMax = maxValue; if (newMax.getClass() != toAdd.getClass()) { //2 different data types, therefore convert Class bestClass = CalcUtil.bestClass(new Object[] {toAdd, newMax}); if (bestClass != toAdd.getClass()) toAdd = (Comparable) CalcUtil.convert(toAdd, bestClass); if (bestClass != newMax.getClass()) newMax = (Comparable) CalcUtil.convert(newMax, bestClass); } if (newMax.compareTo(toAdd) < 0) { newMax = toAdd; } return new MaxResult(newMax); } else { throw new IllegalArgumentException( "The CalcResults claim to be compatible, but the appropriate merge method has not been implemented."); } } }
public CalcResult merge(CalcResult resultsToAdd) { if (!isCompatible(resultsToAdd)) { throw new IllegalArgumentException( "Parameter is not a compatible type"); } if (resultsToAdd instanceof MaxResult) { //take the smaller of the 2 values Comparable toAdd = (Comparable) resultsToAdd.getValue(); Comparable newMax = maxValue; if (newMax.getClass() != toAdd.getClass()) { //2 different data types, therefore convert Class bestClass = CalcUtil.bestClass(new Object[] {toAdd, newMax}); if (bestClass != toAdd.getClass()) toAdd = (Comparable) CalcUtil.convert(toAdd, bestClass); if (bestClass != newMax.getClass()) newMax = (Comparable) CalcUtil.convert(newMax, bestClass); } if (newMax.compareTo(toAdd) < 0) { newMax = toAdd; } return new MaxResult(newMax); } else { throw new IllegalArgumentException( "The CalcResults claim to be compatible, but the appropriate merge method has not been implemented."); } } }
public CalcResult getResult() { if (!visited) { throw new IllegalStateException( "Must visit before max value is ready!"); } return new MaxResult(maxvalue); }
public CalcResult getResult() { if (!visited) { return CalcResult.NULL_RESULT; } return new MaxResult(maxvalue); }
assertEquals((double) 4.5, maxResult3.toDouble(), 0); CalcResult maxResult4 = new MaxResult((Comparable) new Double(2)); CalcResult maxResult5 = (MaxResult) maxResult4.merge(maxResult1); assertEquals(3, maxResult5.toDouble(), 0); assertEquals(2, maxResult4.toDouble(), 0); CalcResult maxResult6 = new MaxResult((Comparable) Integer.valueOf(-5)); CalcResult maxResult7 = (MaxResult) maxResult1.merge(maxResult6); assertEquals(3, maxResult7.toDouble(), 0);
public CalcResult getResult() { if (!visited) { return CalcResult.NULL_RESULT; } return new MaxResult(maxvalue); }
@Override public CalcResult wrap(Expression aggregateAttribute, Object value) { return new MaxVisitor.MaxResult((Comparable<?>) value); } },