From d09df374dc8e12018dee562e4e45cfe06733dab4 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Sun, 26 Mar 2017 20:16:36 +1100 Subject: [PATCH] tidying --- .../diskbrowser/visicalc/AbstractValue.java | 11 ++++-- .../diskbrowser/visicalc/Average.java | 1 - .../bytezone/diskbrowser/visicalc/Cell.java | 2 - .../bytezone/diskbrowser/visicalc/Choose.java | 1 - .../diskbrowser/visicalc/Condition.java | 38 ++++--------------- .../bytezone/diskbrowser/visicalc/Count.java | 2 +- .../bytezone/diskbrowser/visicalc/Error.java | 2 + .../bytezone/diskbrowser/visicalc/Format.java | 2 - src/com/bytezone/diskbrowser/visicalc/If.java | 2 + .../diskbrowser/visicalc/IsError.java | 1 - .../bytezone/diskbrowser/visicalc/IsNa.java | 1 - .../bytezone/diskbrowser/visicalc/Lookup.java | 16 ++++---- .../bytezone/diskbrowser/visicalc/Max.java | 1 - .../bytezone/diskbrowser/visicalc/Min.java | 1 - src/com/bytezone/diskbrowser/visicalc/Na.java | 2 + .../bytezone/diskbrowser/visicalc/Npv.java | 1 - .../bytezone/diskbrowser/visicalc/Range.java | 8 ++-- .../bytezone/diskbrowser/visicalc/Sum.java | 1 - .../diskbrowser/visicalc/ValueFunction.java | 1 + .../diskbrowser/visicalc/ValueList.java | 6 +-- .../visicalc/ValueListFunction.java | 1 + 21 files changed, 40 insertions(+), 61 deletions(-) diff --git a/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java b/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java index 2964b3d..a06bb66 100644 --- a/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java +++ b/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public abstract class AbstractValue implements Value//, Iterable +public abstract class AbstractValue implements Value { protected static final String FMT2 = "| %-9.9s : %-70.70s|%n"; protected static final String FMT4 = "| %-9.9s : %-50.50s %-8.8s %-10.10s|%n"; @@ -15,7 +15,7 @@ public abstract class AbstractValue implements Value//, Iterable protected final Cell cell; protected final String fullText; - protected ValueType valueType = ValueType.NUMBER; // could be BOOLEAN + protected ValueType valueType; // = ValueType.NUMBER; // could be BOOLEAN protected double value; protected boolean bool; @@ -94,8 +94,11 @@ public abstract class AbstractValue implements Value//, Iterable protected String getValueText (Value value) { - return value.getValueType () == ValueType.NUMBER ? value.getDouble () + "" - : value.getBoolean () ? "TRUE" : "FALSE"; + if (value.getValueType () == ValueType.NUMBER) + return value.getDouble () + ""; + if (value.getValueType () == ValueType.BOOLEAN) + return value.getBoolean () ? "TRUE" : "FALSE"; + return "??*??"; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Average.java b/src/com/bytezone/diskbrowser/visicalc/Average.java index aaffd23..abf59b5 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Average.java +++ b/src/com/bytezone/diskbrowser/visicalc/Average.java @@ -9,7 +9,6 @@ public class Average extends ValueListFunction super (cell, text); assert text.startsWith ("@AVERAGE(") : text; - valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Cell.java b/src/com/bytezone/diskbrowser/visicalc/Cell.java index e7c3d6f..0939435 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Cell.java +++ b/src/com/bytezone/diskbrowser/visicalc/Cell.java @@ -4,8 +4,6 @@ import java.util.Iterator; class Cell implements Value, Comparable { - private static final String line = "+----------------------------------------" - + "--------------------------------------------+"; private static final String empty = " "; private final Address address; diff --git a/src/com/bytezone/diskbrowser/visicalc/Choose.java b/src/com/bytezone/diskbrowser/visicalc/Choose.java index 47ef888..da37489 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Choose.java +++ b/src/com/bytezone/diskbrowser/visicalc/Choose.java @@ -9,7 +9,6 @@ public class Choose extends ValueListFunction super (cell, text); assert text.startsWith ("@CHOOSE(") : text; - valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Condition.java b/src/com/bytezone/diskbrowser/visicalc/Condition.java index b018c72..e985c2a 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Condition.java +++ b/src/com/bytezone/diskbrowser/visicalc/Condition.java @@ -12,18 +12,15 @@ class Condition extends AbstractValue implements Iterable private String comparator; private String conditionText; private String valueText; - private final String fullText; - // private Address address; - private Expression conditionExpression; - private Expression valueExpression; + private Value conditionExpression; + private Value valueExpression; public Condition (Cell cell, String text) { super (cell, text); valueType = ValueType.BOOLEAN; - fullText = text; for (String comp : comparators) { @@ -44,38 +41,20 @@ class Condition extends AbstractValue implements Iterable } if (comparator == null) - { - if (text.startsWith ("@")) + if (text.startsWith ("@") || cellAddress.matcher (text).matches ()) { conditionText = text; - conditionExpression = new Expression (cell, text); - values.add (conditionExpression); - - // comparator = "="; - // - // valueText = "1"; - // valueExpression = new Expression (cell, valueText); - // values.add (valueExpression); - } - else if (cellAddress.matcher (text).matches ()) - { - conditionText = text; - conditionExpression = new Expression (cell, text); - conditionExpression.valueType = ValueType.BOOLEAN; + conditionExpression = new Expression (cell, text).reduce (); values.add (conditionExpression); } else - { - System.out.println ("No comparator and not a function: " + text); - throw new IllegalArgumentException ("No comparator and not a function: " + text); - } - } + throw new IllegalArgumentException ( + "No comparator and not a function or address: " + text); } @Override public void calculate () { - // System.out.printf ("********Calc: %s%n", fullText); valueResult = ValueResult.VALID; conditionExpression.calculate (); @@ -89,7 +68,6 @@ class Condition extends AbstractValue implements Iterable if (conditionExpression.getValueType () == ValueType.BOOLEAN) { bool = conditionExpression.getBoolean (); - // System.out.printf ("********Bool: %s%n", bool); return; } @@ -117,7 +95,6 @@ class Condition extends AbstractValue implements Iterable bool = conditionResult >= expressionResult; else System.out.printf ("Unexpected comparator result [%s]%n", comparator); - // System.out.printf ("********Bool: %s%n", bool); } @Override @@ -162,6 +139,7 @@ class Condition extends AbstractValue implements Iterable public String toString () { StringBuilder text = new StringBuilder (); + text.append (LINE + "\n"); text.append (String.format (FMT4, "Predicate", getFullText (), valueType, getValueText (this))); @@ -173,7 +151,7 @@ class Condition extends AbstractValue implements Iterable text.append (String.format (FMT4, "Right", valueText, valueExpression.getValueType (), getValueText (valueExpression))); } - // text.append (LINE); + return text.toString (); } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Count.java b/src/com/bytezone/diskbrowser/visicalc/Count.java index 9ca8b84..c1ce11f 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Count.java +++ b/src/com/bytezone/diskbrowser/visicalc/Count.java @@ -7,6 +7,7 @@ class Count extends ValueListFunction public Count (Cell cell, String text) { super (cell, text); + assert text.startsWith ("@COUNT(") : text; } @@ -14,7 +15,6 @@ class Count extends ValueListFunction public void calculate () { value = 0; - valueType = ValueType.NUMBER; if (!isRange) value = list.size (); diff --git a/src/com/bytezone/diskbrowser/visicalc/Error.java b/src/com/bytezone/diskbrowser/visicalc/Error.java index badfa60..03c256a 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Error.java +++ b/src/com/bytezone/diskbrowser/visicalc/Error.java @@ -7,6 +7,8 @@ class Error extends ConstantFunction super (cell, text); assert text.startsWith ("@ERROR") : text; + valueResult = ValueResult.ERROR; + valueType = ValueType.NUMBER; } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Format.java b/src/com/bytezone/diskbrowser/visicalc/Format.java index 0304179..ba5c44b 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Format.java +++ b/src/com/bytezone/diskbrowser/visicalc/Format.java @@ -65,8 +65,6 @@ public class Format val = String.format (rightFormat, val); } - // System.out.printf ("[%s]%n", val); - if (val.length () > colWidth) return OVERFLOW.substring (0, colWidth); diff --git a/src/com/bytezone/diskbrowser/visicalc/If.java b/src/com/bytezone/diskbrowser/visicalc/If.java index b62bf78..634068c 100644 --- a/src/com/bytezone/diskbrowser/visicalc/If.java +++ b/src/com/bytezone/diskbrowser/visicalc/If.java @@ -83,6 +83,7 @@ class If extends Function public String toString () { StringBuilder text = new StringBuilder (); + text.append (String.format ("%s%n", LINE)); text.append (String.format (FMT4, getType (), getFullText (), getValueType (), getValueText (this))); @@ -91,6 +92,7 @@ class If extends Function attach (text, "true", textTrue, expTrue); else attach (text, "false", textFalse, expFalse); + return text.toString (); } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/IsError.java b/src/com/bytezone/diskbrowser/visicalc/IsError.java index 7f94eec..1fdfda0 100644 --- a/src/com/bytezone/diskbrowser/visicalc/IsError.java +++ b/src/com/bytezone/diskbrowser/visicalc/IsError.java @@ -7,7 +7,6 @@ class IsError extends BooleanFunction super (cell, text); assert text.startsWith ("@ISERROR(") : text; - valueType = ValueType.BOOLEAN; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/IsNa.java b/src/com/bytezone/diskbrowser/visicalc/IsNa.java index 189e0c7..4bfa7bf 100644 --- a/src/com/bytezone/diskbrowser/visicalc/IsNa.java +++ b/src/com/bytezone/diskbrowser/visicalc/IsNa.java @@ -7,7 +7,6 @@ public class IsNa extends BooleanFunction super (cell, text); assert text.startsWith ("@ISNA(") : text; - valueType = ValueType.BOOLEAN; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Lookup.java b/src/com/bytezone/diskbrowser/visicalc/Lookup.java index 6ab9eb9..8e88f1e 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Lookup.java +++ b/src/com/bytezone/diskbrowser/visicalc/Lookup.java @@ -7,7 +7,6 @@ class Lookup extends ValueListFunction super (cell, text); assert text.startsWith ("@LOOKUP(") : text; - valueType = ValueType.NUMBER; } @Override @@ -33,11 +32,6 @@ class Lookup extends ValueListFunction double sourceValue = source.getDouble (); Address target = null; - // is the range horizontal or vertical? - Cell firstCell = (Cell) list.get (1); - Cell lastCell = (Cell) list.get (list.size () - 1); - boolean isVertical = firstCell.getAddress ().columnMatches (lastCell.getAddress ()); - for (int i = 1; i < list.size (); i++) // skip first entry { Cell cell = (Cell) list.get (i); @@ -52,11 +46,19 @@ class Lookup extends ValueListFunction return; } - Address adjacentAddress = isVertical ? target.nextColumn () : target.nextRow (); + Address adjacentAddress = isVertical () ? target.nextColumn () : target.nextRow (); if (cell.cellExists (adjacentAddress)) value = cell.getCell (adjacentAddress).getDouble (); else value = 0; } + + // is the range horizontal or vertical? + private boolean isVertical () + { + Cell firstCell = (Cell) list.get (1); + Cell lastCell = (Cell) list.get (list.size () - 1); + return firstCell.getAddress ().columnMatches (lastCell.getAddress ()); + } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Max.java b/src/com/bytezone/diskbrowser/visicalc/Max.java index f4ccb8b..89cb3e9 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Max.java +++ b/src/com/bytezone/diskbrowser/visicalc/Max.java @@ -7,7 +7,6 @@ class Max extends ValueListFunction super (cell, text); assert text.startsWith ("@MAX(") : text; - valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Min.java b/src/com/bytezone/diskbrowser/visicalc/Min.java index 23f6df2..33bdd0c 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Min.java +++ b/src/com/bytezone/diskbrowser/visicalc/Min.java @@ -7,7 +7,6 @@ class Min extends ValueListFunction super (cell, text); assert text.startsWith ("@MIN(") : text; - valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Na.java b/src/com/bytezone/diskbrowser/visicalc/Na.java index 3187382..bea49ac 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Na.java +++ b/src/com/bytezone/diskbrowser/visicalc/Na.java @@ -7,6 +7,8 @@ public class Na extends ConstantFunction super (cell, text); assert text.equals ("@NA") : text; + valueResult = ValueResult.NA; + valueType = ValueType.NUMBER; } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Npv.java b/src/com/bytezone/diskbrowser/visicalc/Npv.java index 3aca7e9..83afe73 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Npv.java +++ b/src/com/bytezone/diskbrowser/visicalc/Npv.java @@ -9,7 +9,6 @@ public class Npv extends ValueListFunction super (cell, text); assert text.startsWith ("@NPV(") : text; - valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/Range.java b/src/com/bytezone/diskbrowser/visicalc/Range.java index 1335b3a..03edcef 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Range.java +++ b/src/com/bytezone/diskbrowser/visicalc/Range.java @@ -1,6 +1,5 @@ package com.bytezone.diskbrowser.visicalc; -import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -9,10 +8,10 @@ import java.util.regex.Pattern; class Range implements Iterable
{ - private static final Pattern cellAddress = Pattern.compile ("[A-B]?[A-Z][0-9]{1,3}"); + // private static final Pattern cellAddress = Pattern.compile ("[A-B]?[A-Z][0-9]{1,3}"); private static final Pattern rangePattern = Pattern.compile ("([A-B]?[A-Z])([0-9]{1,3})\\.\\.\\.([A-B]?[A-Z])([0-9]{1,3})"); - private static final Pattern addressList = Pattern.compile ("\\(([^,]+(,[^,]+)*)\\)"); + // private static final Pattern addressList = Pattern.compile ("\\(([^,]+(,[^,]+)*)\\)"); private Address from, to; private final List
range = new ArrayList
(); @@ -57,7 +56,8 @@ class Range implements Iterable
cell.getCell (from); } else - throw new InvalidParameterException (); + throw new IllegalArgumentException ( + "Cannot create range " + from.getText () + ", " + to.getText ()); from = tempFrom; } diff --git a/src/com/bytezone/diskbrowser/visicalc/Sum.java b/src/com/bytezone/diskbrowser/visicalc/Sum.java index 0a1fc43..11c0f27 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Sum.java +++ b/src/com/bytezone/diskbrowser/visicalc/Sum.java @@ -7,7 +7,6 @@ class Sum extends ValueListFunction super (cell, text); assert text.startsWith ("@SUM(") : text; - valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/ValueFunction.java b/src/com/bytezone/diskbrowser/visicalc/ValueFunction.java index 542a683..47c091f 100644 --- a/src/com/bytezone/diskbrowser/visicalc/ValueFunction.java +++ b/src/com/bytezone/diskbrowser/visicalc/ValueFunction.java @@ -12,6 +12,7 @@ public abstract class ValueFunction extends Function source = cell.getExpressionValue (functionText); values.add (source); + valueType = ValueType.NUMBER; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/ValueList.java b/src/com/bytezone/diskbrowser/visicalc/ValueList.java index 2dad4ed..78afde7 100644 --- a/src/com/bytezone/diskbrowser/visicalc/ValueList.java +++ b/src/com/bytezone/diskbrowser/visicalc/ValueList.java @@ -7,7 +7,7 @@ import java.util.List; public class ValueList implements Iterable { private final List values = new ArrayList (); - private boolean rangeFound; + private boolean hasRange; public ValueList (Cell cell, String text) { @@ -19,7 +19,7 @@ public class ValueList implements Iterable if (Range.isRange (parameter)) { - rangeFound = true; + hasRange = true; for (Address address : new Range (cell, parameter)) values.add (cell.getCell (address)); } @@ -35,7 +35,7 @@ public class ValueList implements Iterable public boolean hasRange () { - return rangeFound; + return hasRange; } public Value get (int index) diff --git a/src/com/bytezone/diskbrowser/visicalc/ValueListFunction.java b/src/com/bytezone/diskbrowser/visicalc/ValueListFunction.java index c95d964..51c34e1 100644 --- a/src/com/bytezone/diskbrowser/visicalc/ValueListFunction.java +++ b/src/com/bytezone/diskbrowser/visicalc/ValueListFunction.java @@ -11,6 +11,7 @@ public abstract class ValueListFunction extends Function list = new ValueList (cell, functionText); isRange = functionText.indexOf ("...") > 0; + valueType = ValueType.NUMBER; for (Value v : list) values.add (v);