diff --git a/src/main/java/microsim/alignment/multiple/LogitScalingAlignment.java b/src/main/java/microsim/alignment/multiple/LogitScalingAlignment.java index 50fc3edf..1a07f9cb 100644 --- a/src/main/java/microsim/alignment/multiple/LogitScalingAlignment.java +++ b/src/main/java/microsim/alignment/multiple/LogitScalingAlignment.java @@ -2,11 +2,8 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.function.Predicate; -import org.apache.commons.collections4.CollectionUtils; - /** * Logit Scaling alignment (as introduced by P. Stephensen in International * Journal of Microsimulation (2016) 9(3) 89-102), diff --git a/src/main/java/microsim/data/ExperimentManager.java b/src/main/java/microsim/data/ExperimentManager.java index 7a2f4753..a5238503 100644 --- a/src/main/java/microsim/data/ExperimentManager.java +++ b/src/main/java/microsim/data/ExperimentManager.java @@ -166,7 +166,7 @@ public Experiment setupExperiment(Experiment experiment, Object... models) throw // expandODB(experiment.inputFolder + File.separator + inputDatabaseName, // outFolder); - File inputDir = new File(experiment.inputFolder); + File inputDir = new File(Experiment.inputFolder); if (inputDir.exists()) { String[] files = inputDir.list(); for (String file : files) { @@ -181,7 +181,7 @@ public Experiment setupExperiment(Experiment experiment, Object... models) throw } else if (isMultiRun) { log.info("Persisting database connection at: " + DatabaseUtils.databaseInputUrl); } else { - DatabaseUtils.databaseInputUrl = experiment.inputFolder + File.separator + "input"; + DatabaseUtils.databaseInputUrl = Experiment.inputFolder + File.separator + "input"; } if (saveExperimentOnDatabase) { diff --git a/src/main/java/microsim/data/MultiKeyCoefficientMap.java b/src/main/java/microsim/data/MultiKeyCoefficientMap.java index 0516cd88..6b59e01c 100644 --- a/src/main/java/microsim/data/MultiKeyCoefficientMap.java +++ b/src/main/java/microsim/data/MultiKeyCoefficientMap.java @@ -13,7 +13,8 @@ * * @author Ross Richardson */ -public class MultiKeyCoefficientMap extends MultiKeyMap {// implements Cloneable { +// FIXME: this should be generic over and leverage composition +public class MultiKeyCoefficientMap extends MultiKeyMap { private static final long serialVersionUID = 5049597007431364596L; @@ -50,7 +51,7 @@ public MultiKeyCoefficientMap(String[] keys, String[] values) { * @param keys - a String array listing the names of the categories of keys * @param values - a String array listing the names of the categories of values */ - public MultiKeyCoefficientMap(AbstractHashedMap map, String[] keys, String[] values) { + public MultiKeyCoefficientMap(AbstractHashedMap, Object> map, String[] keys, String[] values) { super(map); this.keys = keys; if (values != null) { @@ -107,7 +108,7 @@ public Object getValue(Object... key) { if (key[0] instanceof MultiKey) return super.get(key[0]); else - return super.get(new MultiKey(new Object[] { key[0] })); + return super.get(new MultiKey<>(new Object[] { key[0] })); case 2: return super.get(key[0], key[1]); case 3: @@ -131,7 +132,7 @@ public Object getValue(Object... key) { // of the type MultiKey(MultiKey()). value = (Object[]) super.get(key[0]); else - value = (Object[]) super.get(new MultiKey(new Object[] { key[0] })); + value = (Object[]) super.get(new MultiKey<>(new Object[] { key[0] })); return extractValueFromVector(toStringKey(key[1]), value); case 3: value = (Object[]) super.get(key[0], key[1]); @@ -184,9 +185,9 @@ public void putValue(Object... keyValues) { // MultiKey is created unnecessarily, which then leads to a // null pointer exception as the MultKeyCoefficientMap does // not have a key entry of the type MultiKey(MultiKey()). - super.put((MultiKey) keyValues[0], keyValues[1]); + super.put((MultiKey) keyValues[0], keyValues[1]); else { - super.put(new MultiKey(new Object[] { keyValues[0] }), keyValues[1]); + super.put(new MultiKey<>(new Object[] { keyValues[0] }), keyValues[1]); } break; case 3: @@ -215,7 +216,7 @@ public void putValue(Object... keyValues) { if (value == null) value = new Object[valuesMap.size()]; putValueToVector((String) keyValues[1], value, keyValues[2]); - super.put(new MultiKey(new Object[] { keyValues[0] }), value); + super.put(new MultiKey<>(new Object[] { keyValues[0] }), value); break; case 4: value = (Object[]) super.get(keyValues[0], keyValues[1]); @@ -259,14 +260,14 @@ public void replaceValue(Object... keyValues) { case 1: throw new IllegalArgumentException("Wrong number of key parameters"); case 2: - MultiKey key0; + MultiKey key0; if (keyValues[0] instanceof MultiKey) { // Ross: If we don't do this check, a new MultiKey of a MultiKey // is created unnecessarily, which then leads to a null pointer // exception as the MultKeyCoefficientMap does not have a key // entry of the type MultiKey(MultiKey()). - key0 = (MultiKey) keyValues[0]; + key0 = (MultiKey) keyValues[0]; } else { - key0 = new MultiKey(new Object[] { keyValues[0] }); + key0 = new MultiKey<>(new Object[] { keyValues[0] }); } if (super.containsKey(key0)) super.remove(key0); @@ -325,7 +326,7 @@ public String[] getValuesNames() { */ @Override public MultiKeyCoefficientMap clone() { - HashedMap mapClone = new HashedMap(this.decorated()); + var mapClone = new HashedMap<>(this.decorated()); return new MultiKeyCoefficientMap(mapClone, this.getKeysNames(), this.getValuesNames()); } } diff --git a/src/main/java/microsim/data/db/DatabaseUtils.java b/src/main/java/microsim/data/db/DatabaseUtils.java index d6fe09a0..b22b304e 100644 --- a/src/main/java/microsim/data/db/DatabaseUtils.java +++ b/src/main/java/microsim/data/db/DatabaseUtils.java @@ -5,7 +5,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; -import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -253,7 +252,7 @@ public static EntityManager getEntityManger(boolean autoUpdate) { try { // Create the EntityManagerFactory - Map propertyMap = new HashMap(); + var propertyMap = new HashMap(); propertyMap.put("hibernate.connection.url", "jdbc:h2:file:" + databaseInputUrl); entityManagerFactory = Persistence.createEntityManagerFactory("sim-model", propertyMap); @@ -273,7 +272,7 @@ public static void inputSchemaUpdateEntityManger() { try { // Create the EntityManagerFactory - Map propertyMap = new HashMap(); + var propertyMap = new HashMap(); propertyMap.put("hibernate.connection.url", "jdbc:h2:file:" + DatabaseUtils.databaseInputUrl); EntityManager em = Persistence.createEntityManagerFactory("sim-model", propertyMap) .createEntityManager(); @@ -309,7 +308,7 @@ public static EntityManager getOutEntityManger(String persistenceUnitName) { try { // Create the EntityManagerFactory - Map propertyMap = new HashMap(); + var propertyMap = new HashMap(); propertyMap.put("hibernate.connection.url", "jdbc:h2:file:" + DatabaseUtils.databaseOutputUrl); outEntityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName, propertyMap); diff --git a/src/main/java/microsim/engine/SimulationEngine.java b/src/main/java/microsim/engine/SimulationEngine.java index a2806982..06cb77a3 100644 --- a/src/main/java/microsim/engine/SimulationEngine.java +++ b/src/main/java/microsim/engine/SimulationEngine.java @@ -139,13 +139,6 @@ public class SimulationEngine extends Thread { private ExperimentBuilder experimentBuilder = null; - /** - * @link dependency - * @stereotype use - * @supplierRole 1.. - **/ - /* #SimModel lnkSimModel; */ - /** * Build a new SimEngine with the given time unit. */ @@ -434,7 +427,7 @@ public void buildModels() { try { currentExperiment = ExperimentManager.getInstance().setupExperiment(currentExperiment, - models.toArray(new SimulationManager[models.size()])); + models.toArray()); } catch (Exception e) { e.printStackTrace(); } @@ -467,13 +460,14 @@ public boolean getModelBuildStatus() { * * @return The list of disposed models. */ + // FIXME: this should return a List> public synchronized Class[] disposeModels() { eventQueue.clear(); modelBuild = false; // Get models' class type and dispose - Class[] cls = new Class[models.size()]; + var cls = new Class[models.size()]; for (int i = 0; i < models.size(); i++) { SimulationManager model = models.get(i); cls[i] = model.getClass(); diff --git a/src/main/java/microsim/event/CollectionTargetEvent.java b/src/main/java/microsim/event/CollectionTargetEvent.java index 1d2d6c64..9843f74e 100644 --- a/src/main/java/microsim/event/CollectionTargetEvent.java +++ b/src/main/java/microsim/event/CollectionTargetEvent.java @@ -75,7 +75,7 @@ public void setForObject(Collection elements, Class objectType, Class cl = objectType; while (cl != null) try { - methodInvoker = cl.getDeclaredMethod(method, null); + methodInvoker = cl.getDeclaredMethod(method); return; } catch (NoSuchMethodException e) { cl = cl.getSuperclass(); @@ -112,7 +112,7 @@ public void fireEvent() { if (methodInvoker != null) { while (itr.hasNext()) { try { - methodInvoker.invoke(itr.next(), null); + methodInvoker.invoke(itr.next()); } catch (InvocationTargetException e) { System.out.println("Object " + methodInvoker + " Method: " + methodInvoker.getName()); diff --git a/src/main/java/microsim/event/EventQueue.java b/src/main/java/microsim/event/EventQueue.java index 578e2d28..6ddd8130 100644 --- a/src/main/java/microsim/event/EventQueue.java +++ b/src/main/java/microsim/event/EventQueue.java @@ -59,12 +59,6 @@ public class EventQueue { double time = 0; // protected List stepListeners; - /** - * @link dependency - * @supplierRole 1.. - **/ - /* #SimEvent lnkSimEvent; */ - /** Build new event queue with TIME_TICKS time unit. */ public EventQueue() { eventQueue = new PriorityQueue(10); diff --git a/src/main/java/microsim/event/SingleTargetEvent.java b/src/main/java/microsim/event/SingleTargetEvent.java index 3f433702..0eeee54b 100644 --- a/src/main/java/microsim/event/SingleTargetEvent.java +++ b/src/main/java/microsim/event/SingleTargetEvent.java @@ -70,7 +70,7 @@ public void setForObject(Object o, String method) throws SimulationException { Class cl = o.getClass(); while (cl != null) try { - methodInvoker = cl.getDeclaredMethod(method, null); + methodInvoker = cl.getDeclaredMethod(method); return; } catch (NoSuchMethodException e) { cl = cl.getSuperclass(); @@ -105,7 +105,7 @@ public String toString() { public void fireEvent() { if (methodInvoker != null) { try { - methodInvoker.invoke(object, null); + methodInvoker.invoke(object); } catch (InvocationTargetException e) { System.out.println("Object " + methodInvoker + " Method: " + methodInvoker.getName()); diff --git a/src/main/java/microsim/gui/colormap/DoubleRangeColorMap.java b/src/main/java/microsim/gui/colormap/DoubleRangeColorMap.java index 27b05dd6..a874c805 100644 --- a/src/main/java/microsim/gui/colormap/DoubleRangeColorMap.java +++ b/src/main/java/microsim/gui/colormap/DoubleRangeColorMap.java @@ -43,9 +43,9 @@ public DoubleRangeColorMap(int gradients, Color bottomColor, Color topColor, for (int i = 0; i < gradients; i++) { // int[] c = getComponents(getBoundedCol(i * gap)); int[] c = new int[] { 0, 0, 0 }; - c[0] = redStart + (int) ((redEnd - redStart) * i / gradients); - c[1] = greenStart + (int) ((greenEnd - redStart) * i / gradients); - c[2] = blueStart + (int) ((blueEnd - redStart) * i / gradients); + c[0] = redStart + ((redEnd - redStart) * i / gradients); + c[1] = greenStart + ((greenEnd - redStart) * i / gradients); + c[2] = blueStart + ((blueEnd - redStart) * i / gradients); addColor(i, new Color(c[0], c[1], c[2])); } diff --git a/src/main/java/microsim/gui/colormap/TripleRangeColorMap.java b/src/main/java/microsim/gui/colormap/TripleRangeColorMap.java index 99ca3b61..4353a159 100644 --- a/src/main/java/microsim/gui/colormap/TripleRangeColorMap.java +++ b/src/main/java/microsim/gui/colormap/TripleRangeColorMap.java @@ -71,9 +71,9 @@ public TripleRangeColorMap(int gradients, Color bottomColor, Color middleColor, for (int i = 0; i < lowGradients; i++) { // int[] c = getComponents(getBoundedCol(i * gap)); int[] c = new int[] { 0, 0, 0 }; - c[0] = redStart + (int) ((redMiddle - redStart) * i / gradients); - c[1] = greenStart + (int) ((greenMiddle - greenStart) * i / gradients); - c[2] = blueStart + (int) ((blueMiddle - blueStart) * i / gradients); + c[0] = redStart + ((redMiddle - redStart) * i / gradients); + c[1] = greenStart + ((greenMiddle - greenStart) * i / gradients); + c[2] = blueStart + ((blueMiddle - blueStart) * i / gradients); addColor(i, new Color(c[0], c[1], c[2])); } @@ -81,9 +81,9 @@ public TripleRangeColorMap(int gradients, Color bottomColor, Color middleColor, for (int i = lowGradients; i < gradients; i++) { // int[] c = getComponents(getBoundedCol(i * gap)); int[] c = new int[] { 0, 0, 0 }; - c[0] = redMiddle + (int) ((redEnd - redMiddle) * i / gradients); - c[1] = greenMiddle + (int) ((greenEnd - greenMiddle) * i / gradients); - c[2] = blueMiddle + (int) ((blueEnd - blueMiddle) * i / gradients); + c[0] = redMiddle + ((redEnd - redMiddle) * i / gradients); + c[1] = greenMiddle + ((greenEnd - greenMiddle) * i / gradients); + c[2] = blueMiddle + ((blueEnd - blueMiddle) * i / gradients); addColor(i, new Color(c[0], c[1], c[2])); } diff --git a/src/main/java/microsim/gui/plot/CollectionBarSimulationPlotter.java b/src/main/java/microsim/gui/plot/CollectionBarSimulationPlotter.java index 4a8357db..b78f4b97 100644 --- a/src/main/java/microsim/gui/plot/CollectionBarSimulationPlotter.java +++ b/src/main/java/microsim/gui/plot/CollectionBarSimulationPlotter.java @@ -236,7 +236,7 @@ public void onEvent(Enum type) { public void update() { for (int i = 0; i < sources.size(); i++) { - ArraySource cs = (ArraySource) sources.get(i); + var cs = sources.get(i); final String category = categories.get(i); double[] vals = cs.getDoubleArray(); diff --git a/src/main/java/microsim/gui/plot/HistogramSimulationPlotter.java b/src/main/java/microsim/gui/plot/HistogramSimulationPlotter.java index 51d1daa5..96897768 100644 --- a/src/main/java/microsim/gui/plot/HistogramSimulationPlotter.java +++ b/src/main/java/microsim/gui/plot/HistogramSimulationPlotter.java @@ -226,7 +226,7 @@ public void update() { // chart.getXYPlot().getRenderer().setSeriesPaint(s, new Color(r, g, b, 130)); for (int i = 0; i < sources.size(); i++) { - ArraySource cs = (ArraySource) sources.get(i); + var cs = sources.get(i); double[] vals = cs.getDoubleArray(); if (minimum != null && maximum != null) { diff --git a/src/main/java/microsim/gui/plot/IndividualBarSimulationPlotter.java b/src/main/java/microsim/gui/plot/IndividualBarSimulationPlotter.java index 8b36f33a..f559a941 100644 --- a/src/main/java/microsim/gui/plot/IndividualBarSimulationPlotter.java +++ b/src/main/java/microsim/gui/plot/IndividualBarSimulationPlotter.java @@ -8,7 +8,6 @@ import microsim.event.CommonEventType; import microsim.event.EventListener; -import microsim.gui.colormap.ColorMap; import microsim.gui.colormap.FixedColorMap; import microsim.reflection.ReflectionUtils; import microsim.statistics.IDoubleSource; diff --git a/src/main/java/microsim/gui/plot/ScatterplotSimulationPlotterRefreshable.java b/src/main/java/microsim/gui/plot/ScatterplotSimulationPlotterRefreshable.java index 83613320..675ebdac 100644 --- a/src/main/java/microsim/gui/plot/ScatterplotSimulationPlotterRefreshable.java +++ b/src/main/java/microsim/gui/plot/ScatterplotSimulationPlotterRefreshable.java @@ -1,10 +1,7 @@ package microsim.gui.plot; -//package microsim.gui.plot; - import java.awt.Color; import java.util.ArrayList; -import java.util.List; import javax.swing.JInternalFrame; @@ -773,10 +770,8 @@ public void setMaxSamples(int maxSamples) { public void refresh() { - List data = dataset.getSeries(); - for (int i = 0; i < data.size(); i++) { - XYSeries series = (XYSeries) data.get(i); - series.clear(); + for (int i = 0; i < dataset.getSeriesCount(); i++) { + dataset.getSeries(i).clear(); } } diff --git a/src/main/java/microsim/gui/plot/Weighted_HistogramDataset.java b/src/main/java/microsim/gui/plot/Weighted_HistogramDataset.java index 28451af9..fe2f0ee3 100644 --- a/src/main/java/microsim/gui/plot/Weighted_HistogramDataset.java +++ b/src/main/java/microsim/gui/plot/Weighted_HistogramDataset.java @@ -40,9 +40,8 @@ import java.io.Serializable; import java.util.ArrayList; -import java.util.LinkedHashMap; +import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.Objects; import org.jfree.chart.util.Args; @@ -52,6 +51,11 @@ import org.jfree.data.xy.AbstractIntervalXYDataset; import org.jfree.data.xy.IntervalXYDataset; +record HistEntry(Comparable key, List bins, int numValues, double binWidth) + implements Serializable { + private static final long serialVersionUID = 1L; +} + /** * A weighted dataset that can be used for creating weighted histograms. */ @@ -62,7 +66,7 @@ public class Weighted_HistogramDataset extends AbstractIntervalXYDataset private static final long serialVersionUID = -6341668077370231153L; /** A list of maps. */ - private List list; + private List entries; /** The histogram type. */ private HistogramType type; @@ -78,7 +82,7 @@ public class Weighted_HistogramDataset extends AbstractIntervalXYDataset * {@link HistogramType}.FREQUENCY. */ public Weighted_HistogramDataset() { - this.list = new ArrayList(); + this.entries = new ArrayList(); this.type = HistogramType.FREQUENCY; totalWeight = 0.; } @@ -115,7 +119,7 @@ public void setType(HistogramType type) { * (null not permitted). * @param bins the number of bins (must be at least 1). */ - public void addSeries(Comparable key, double[] values, double[] weightings, int bins) { + public void addSeries(Comparable key, double[] values, double[] weightings, int bins) { // defer argument checking... double minimum = getMinimum(values); double maximum = getMaximum(values); @@ -137,7 +141,7 @@ public void addSeries(Comparable key, double[] values, double[] weightings, int * @param minimum the lower bound of the bin range. * @param maximum the upper bound of the bin range. */ - public void addSeries(Comparable key, double[] values, double[] weightings, int bins, + public void addSeries(Comparable key, double[] values, double[] weightings, int bins, double minimum, double maximum) { Args.nullNotPermitted(key, "key"); @@ -156,7 +160,7 @@ public void addSeries(Comparable key, double[] values, double[] weightings, int double lower = minimum; double upper; - List binList = new ArrayList(bins); + var binList = new ArrayList(bins); for (int i = 0; i < bins; i++) { Weighted_HistogramBin bin; // make sure bins[bins.length]'s upper boundary ends at maximum @@ -187,17 +191,12 @@ public void addSeries(Comparable key, double[] values, double[] weightings, int binIndex = bins - 1; } } - Weighted_HistogramBin bin = (Weighted_HistogramBin) binList.get(binIndex); + var bin = binList.get(binIndex); bin.incrementCount(weightings[i]); totalWeight += weightings[i]; } - // generic map for each series - Map map = new LinkedHashMap(); - map.put("key", key); - map.put("bins", binList); - map.put("values.length", values.length); - map.put("bin width", binWidth); - this.list.add(map); + + this.entries.add(new HistEntry(key, Collections.unmodifiableList(binList), values.length, binWidth)); fireDatasetChanged(); } @@ -256,9 +255,8 @@ private double getMaximum(double[] values) { * @throws IndexOutOfBoundsException if series is outside the * specified range. */ - List getBins(int series) { - Map map = (Map) this.list.get(series); - return (List) map.get("bins"); + List getBins(int series) { + return this.entries.get(series).bins(); } /** @@ -269,8 +267,7 @@ List getBins(int series) { * @return The total. */ private int getTotal(int series) { - Map map = (Map) this.list.get(series); - return ((Integer) map.get("values.length")).intValue(); + return this.entries.get(series).numValues(); } /** @@ -281,8 +278,7 @@ private int getTotal(int series) { * @return The bin width. */ private double getBinWidth(int series) { - Map map = (Map) this.list.get(series); - return ((Double) map.get("bin width")).doubleValue(); + return this.entries.get(series).binWidth(); } /** @@ -292,7 +288,7 @@ private double getBinWidth(int series) { */ @Override public int getSeriesCount() { - return this.list.size(); + return this.entries.size(); } /** @@ -307,9 +303,8 @@ public int getSeriesCount() { * specified range. */ @Override - public Comparable getSeriesKey(int series) { - Map map = (Map) this.list.get(series); - return (Comparable) map.get("key"); + public Comparable getSeriesKey(int series) { + return this.entries.get(series).key(); } /** @@ -345,8 +340,7 @@ public int getItemCount(int series) { */ @Override public Number getX(int series, int item) { - List bins = getBins(series); - Weighted_HistogramBin bin = (Weighted_HistogramBin) bins.get(item); + var bin = this.getBins(series).get(item); double x = (bin.getStartBoundary() + bin.getEndBoundary()) / 2.; return x; } @@ -366,8 +360,7 @@ public Number getX(int series, int item) { */ @Override public Number getY(int series, int item) { - List bins = getBins(series); - Weighted_HistogramBin bin = (Weighted_HistogramBin) bins.get(item); + var bin = this.getBins(series).get(item); double total = getTotal(series); double binWidth = getBinWidth(series); @@ -396,8 +389,7 @@ public Number getY(int series, int item) { */ @Override public Number getStartX(int series, int item) { - List bins = getBins(series); - Weighted_HistogramBin bin = (Weighted_HistogramBin) bins.get(item); + var bin = this.getBins(series).get(item); return bin.getStartBoundary(); } @@ -415,8 +407,7 @@ public Number getStartX(int series, int item) { */ @Override public Number getEndX(int series, int item) { - List bins = getBins(series); - Weighted_HistogramBin bin = (Weighted_HistogramBin) bins.get(item); + var bin = this.getBins(series).get(item); return bin.getEndBoundary(); } @@ -477,7 +468,7 @@ public boolean equals(Object obj) { if (!Objects.equals(this.type, that.type)) { return false; } - if (!Objects.equals(this.list, that.list)) { + if (!Objects.equals(this.entries, that.entries)) { return false; } return true; @@ -493,11 +484,7 @@ public boolean equals(Object obj) { @Override public Object clone() throws CloneNotSupportedException { Weighted_HistogramDataset clone = (Weighted_HistogramDataset) super.clone(); - int seriesCount = getSeriesCount(); - clone.list = new java.util.ArrayList(seriesCount); - for (int i = 0; i < seriesCount; i++) { - clone.list.add(new LinkedHashMap((Map) this.list.get(i))); - } + clone.entries = new ArrayList(this.entries); return clone; } diff --git a/src/main/java/microsim/gui/plot/Weighted_HistogramSimulationPlotter.java b/src/main/java/microsim/gui/plot/Weighted_HistogramSimulationPlotter.java index 00ea4be8..cd93774a 100644 --- a/src/main/java/microsim/gui/plot/Weighted_HistogramSimulationPlotter.java +++ b/src/main/java/microsim/gui/plot/Weighted_HistogramSimulationPlotter.java @@ -1,7 +1,5 @@ package microsim.gui.plot; -//package microsim.gui.plot; - import java.awt.Color; import java.util.ArrayList; @@ -247,7 +245,7 @@ public void update() { // chart.getXYPlot().getRenderer().setSeriesPaint(s, new Color(r, g, b, 130)); for (int i = 0; i < sources.size(); i++) { - WeightedArraySource cs = (WeightedArraySource) sources.get(i); + var cs = sources.get(i); double[] vals = cs.getDoubleArray(); double[] weights = cs.getWeights(); if (minimum != null && maximum != null) { diff --git a/src/main/java/microsim/gui/plot/Weighted_PyramidDataset.java b/src/main/java/microsim/gui/plot/Weighted_PyramidDataset.java index 840b6b59..da816bd7 100644 --- a/src/main/java/microsim/gui/plot/Weighted_PyramidDataset.java +++ b/src/main/java/microsim/gui/plot/Weighted_PyramidDataset.java @@ -233,13 +233,13 @@ public double[][] getDataArray() { } @Override - public List getColumnKeys() { + public List getColumnKeys() { // TODO Auto-generated method stub return Arrays.asList(this.groupNames); } @Override - public Comparable getColumnKey(int column) { + public Weighted_PyramidPlotter.GroupName getColumnKey(int column) { return this.groupNames[column]; } diff --git a/src/main/java/microsim/gui/plot/Weighted_PyramidPlotter.java b/src/main/java/microsim/gui/plot/Weighted_PyramidPlotter.java index 83aebea5..bd78074c 100644 --- a/src/main/java/microsim/gui/plot/Weighted_PyramidPlotter.java +++ b/src/main/java/microsim/gui/plot/Weighted_PyramidPlotter.java @@ -133,24 +133,6 @@ public Weighted_PyramidPlotter(String title) { this(title, DEFAULT_XAXIS, DEFAULT_YAXIS, DEFAULT_LEFT_CAT, DEFAULT_RIGHT_CAT); } - /** - * Constructor for pyramid objects, showing only the latest data as time moves - * forward. - * Default values are used for the following parameters: category names, age - * group names/ranges, reverseOrder - * It generates one age group per unique age, whose title is that age. - * - * @param title - title of the chart - * @param xaxis - name of the x-axis - * @param yaxis - name of the y-axis - * - * - * public PopulationPyramidPlotter(String title, String xaxis, - * String yaxis) { - * this(title, xaxis, yaxis, DEFAULT_LEFT_CAT, DEFAULT_RIGHT_CAT); - * } - */ - /** * Constructor for pyramid objects, showing only the latest data as time moves * forward. @@ -389,8 +371,8 @@ public void update() { double[][] groupRanges = null; // Get the source data - WeightedArraySource leftData = (WeightedArraySource) sources[0]; - WeightedArraySource rightData = (WeightedArraySource) sources[1]; + var leftData = sources[0]; + var rightData = sources[1]; final double[][] vals = new double[][] { leftData.getDoubleArray(), rightData.getDoubleArray() }; final double[][] weights = new double[][] { leftData.getWeights(), rightData.getWeights() }; diff --git a/src/main/java/microsim/gui/probe/MethodParameterDataModel.java b/src/main/java/microsim/gui/probe/MethodParameterDataModel.java index 709eb17f..6e2af439 100644 --- a/src/main/java/microsim/gui/probe/MethodParameterDataModel.java +++ b/src/main/java/microsim/gui/probe/MethodParameterDataModel.java @@ -138,7 +138,7 @@ public Object[] getParams() { o = getWrapper(data[i][COL_TYPE].toString(), data[i][COL_VALUE].toString()); if (o == null) { Class cc = Class.forName(data[i][COL_TYPE].toString()); - Constructor c = cc.getDeclaredConstructor(new Class[] { (new String()).getClass() }); + Constructor c = cc.getDeclaredConstructor(new Class[] { (new String()).getClass() }); o = c.newInstance(new Object[] { data[i][COL_VALUE].toString() }); } obs[i] = o; diff --git a/src/main/java/microsim/gui/probe/MethodsDataModel.java b/src/main/java/microsim/gui/probe/MethodsDataModel.java index f86daf5f..0fb44fd1 100644 --- a/src/main/java/microsim/gui/probe/MethodsDataModel.java +++ b/src/main/java/microsim/gui/probe/MethodsDataModel.java @@ -48,7 +48,7 @@ * @author Michele Sonnessa *

*/ -public class MethodsDataModel implements ListModel { +public class MethodsDataModel implements ListModel { private static final Logger log = LogManager.getLogger(MethodsDataModel.class); @@ -131,12 +131,12 @@ public int getSize() { return methods.size(); } - public Object getElementAt(int index) { + public Method getElementAt(int index) { return methods.get(index); } public void invokeMethodAt(int index) { - Method m = (Method) methods.get(index); + var m = methods.get(index); if (m.getParameterTypes().length > 0) { JOptionPane.showMessageDialog(null, "Method requires parameters", @@ -145,7 +145,7 @@ public void invokeMethodAt(int index) { } try { - Object o = m.invoke(targetObj, null); + Object o = m.invoke(targetObj); if (o == null) return; @@ -159,7 +159,7 @@ public void invokeMethodAt(int index) { } public void invokeMethodAt(int index, Object[] params) { - Method m = (Method) methods.get(index); + var m = methods.get(index); try { Object o = m.invoke(targetObj, params); diff --git a/src/main/java/microsim/gui/probe/ProbeFrame.java b/src/main/java/microsim/gui/probe/ProbeFrame.java index 095dbffa..d82de58a 100644 --- a/src/main/java/microsim/gui/probe/ProbeFrame.java +++ b/src/main/java/microsim/gui/probe/ProbeFrame.java @@ -80,7 +80,7 @@ public class ProbeFrame extends JFrame { // Second tab BorderLayout borderLayout2 = new BorderLayout(); JPanel jPaneMethods = new JPanel(); - JList jListMethods = new JList(); + JList jListMethods = new JList<>(); JScrollPane jScrollMethods = new JScrollPane(jListMethods); JButton jBtnInvoke = new JButton(); @@ -92,7 +92,7 @@ public class ProbeFrame extends JFrame { JPanel jNorthPanel = new JPanel(); JLabel jObjectName = new JLabel(""); BorderLayout borderLayout3 = new BorderLayout(); - JComboBox jCmbSuperclass = new JComboBox(); + JComboBox jCmbSuperclass = new JComboBox<>(); /** * This constructor checks if the given object implements the IProbeFields @@ -291,10 +291,7 @@ private void refreshData() { jTableVariables.updateUI(); methods.update(); jListMethods.updateUI(); - - for (int i = 0; i < openedPanels.size(); i++) - ((PanelObjectCollection) openedPanels.get(i)).updateList(); - + openedPanels.forEach(PanelObjectCollection::updateList); } void jBtnNewProbe_actionPerformed(ActionEvent e) { @@ -381,7 +378,7 @@ private void invokeMethod() { if (jListMethods.getSelectedIndex() == -1) return; - Method m = (Method) methods.getElementAt(jListMethods.getSelectedIndex()); + var m = methods.getElementAt(jListMethods.getSelectedIndex()); if (!ProbeReflectionUtils.isAnExecutableMethod(m)) { JOptionPane.showMessageDialog(null, "Sorry but this method requires complex arguments.\nThis function is not yet implemented.", diff --git a/src/main/java/microsim/gui/shell/MicrosimShell.java b/src/main/java/microsim/gui/shell/MicrosimShell.java index 4f2bcc99..a5648a8a 100644 --- a/src/main/java/microsim/gui/shell/MicrosimShell.java +++ b/src/main/java/microsim/gui/shell/MicrosimShell.java @@ -17,7 +17,6 @@ import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JOptionPane; -import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.filechooser.FileSystemView; diff --git a/src/main/java/microsim/gui/shell/parameter/ParameterFrame.java b/src/main/java/microsim/gui/shell/parameter/ParameterFrame.java index e0b335c3..3cad13c8 100644 --- a/src/main/java/microsim/gui/shell/parameter/ParameterFrame.java +++ b/src/main/java/microsim/gui/shell/parameter/ParameterFrame.java @@ -1,9 +1,6 @@ package microsim.gui.shell.parameter; -import java.awt.Color; -import java.awt.Font; import java.lang.reflect.Field; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -17,8 +14,6 @@ import org.metawidget.inspector.impl.BaseObjectInspector; import org.metawidget.inspector.impl.propertystyle.Property; import org.metawidget.swing.SwingMetawidget; -import org.metawidget.swing.widgetprocessor.binding.beansbinding.BeansBindingProcessor; -import org.metawidget.swing.widgetprocessor.binding.beansbinding.BeansBindingProcessorConfig; import org.metawidget.util.CollectionUtils; public class ParameterFrame extends JInternalFrame { diff --git a/src/main/java/microsim/gui/space/CellObjectChooser.java b/src/main/java/microsim/gui/space/CellObjectChooser.java index 079f3d0a..69c42460 100644 --- a/src/main/java/microsim/gui/space/CellObjectChooser.java +++ b/src/main/java/microsim/gui/space/CellObjectChooser.java @@ -58,7 +58,7 @@ public class CellObjectChooser extends JDialog { private static final long serialVersionUID = 1L; JPanel panel1 = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); - JList jListObjects = new JList(); + JList jListObjects = new JList<>(); JPanel jPanel1 = new JPanel(); JButton jBtnCancel = new JButton(); JButton jBtnOK = new JButton(); diff --git a/src/main/java/microsim/gui/space/LayerObjectGridDrawer.java b/src/main/java/microsim/gui/space/LayerObjectGridDrawer.java index 117a178c..d20276ef 100644 --- a/src/main/java/microsim/gui/space/LayerObjectGridDrawer.java +++ b/src/main/java/microsim/gui/space/LayerObjectGridDrawer.java @@ -124,7 +124,7 @@ private Color getColor(Object agent) throws SecurityException, if (invoker instanceof DoubleInvoker) level = (int) ((DoubleInvoker) invoker).getDouble(agent); else - level = (int) ((IntegerInvoker) invoker).getInt(agent); + level = ((IntegerInvoker) invoker).getInt(agent); int index = colorMap.getColorIndex(level); diff --git a/src/main/java/microsim/gui/space/LayeredSurfaceFrame.java b/src/main/java/microsim/gui/space/LayeredSurfaceFrame.java index ecbe195f..28ae6e5e 100644 --- a/src/main/java/microsim/gui/space/LayeredSurfaceFrame.java +++ b/src/main/java/microsim/gui/space/LayeredSurfaceFrame.java @@ -71,12 +71,6 @@ public class LayeredSurfaceFrame extends JInternalFrame implements JPopupMenu popupMenu = new JPopupMenu(); - /** - * @link dependency - * @label open window - */ - /* #LayeredSurfaceProperties lnkLayeredSurfaceProperties; */ - /** * Create a new frame with given dimensions and a cell length of 4 pixels. * diff --git a/src/main/java/microsim/gui/space/LayeredSurfacePanel.java b/src/main/java/microsim/gui/space/LayeredSurfacePanel.java index f9ccff6b..eabce1f5 100644 --- a/src/main/java/microsim/gui/space/LayeredSurfacePanel.java +++ b/src/main/java/microsim/gui/space/LayeredSurfacePanel.java @@ -60,15 +60,6 @@ public class LayeredSurfacePanel extends JPanel { // Used for dragging private int lastX, lastY; - /** - * @link dependency - * @stereotype use - */ - /* #ILayerDrawer lnkILayerDrawer; */ - - /** @link dependency */ - /* #CellObjectChooser lnkCellObjectChooser; */ - /** * Create a panel with dimensions of (100, 100) and a cell length of 4 pixels. */ @@ -198,7 +189,7 @@ public void paintComponent(Graphics g) { ILayerDrawer lay; for (int i = 0; i < m_layers.size(); i++) { - lay = (ILayerDrawer) m_layers.get(i); + lay = m_layers.get(i); if (lay.isDisplayed()) lay.paint(g, cellLen); } @@ -211,11 +202,11 @@ private void this_mouseClicked(MouseEvent e) { if (e.getClickCount() != 2) return; - int x = (int) (e.getX() / cellLen); - int y = (int) (e.getY() / cellLen); + int x = e.getX() / cellLen; + int y = e.getY() / cellLen; for (int i = m_layers.size() - 1; i >= 0; i--) { - lay = (ILayerDrawer) m_layers.get(i); + lay = m_layers.get(i); if (lay.isDisplayed()) if (lay.performDblClickActionAt(x, y)) return; @@ -224,8 +215,8 @@ private void this_mouseClicked(MouseEvent e) { } private void this_mousePressed(MouseEvent e) { - lastX = (int) (e.getX() / cellLen); - lastY = (int) (e.getY() / cellLen); + lastX = e.getX() / cellLen; + lastY = e.getY() / cellLen; } private void this_mouseDragged(MouseEvent e) { @@ -237,11 +228,11 @@ private void this_mouseReleased(MouseEvent e) { lastY < 0 || lastY > virtualHeigth) return; - int x = (int) (e.getX() / cellLen); - int y = (int) (e.getY() / cellLen); + int x = e.getX() / cellLen; + int y = e.getY() / cellLen; for (int i = m_layers.size() - 1; i >= 0; i--) { - lay = (ILayerDrawer) m_layers.get(i); + lay = m_layers.get(i); if (lay.isDisplayed()) if (lay.performMouseMovedFromTo(lastX, lastY, x, y)) return; diff --git a/src/main/java/microsim/gui/space/LayeredSurfaceProperties.java b/src/main/java/microsim/gui/space/LayeredSurfaceProperties.java index 0571c196..ce26d47a 100644 --- a/src/main/java/microsim/gui/space/LayeredSurfaceProperties.java +++ b/src/main/java/microsim/gui/space/LayeredSurfaceProperties.java @@ -60,7 +60,7 @@ public class LayeredSurfaceProperties extends JDialog { JPanel jButtonPanel = new JPanel(); JButton jBtnCancel = new JButton(); JButton jBtnOK = new JButton(); - JComboBox jCmbSize = new JComboBox(); + JComboBox jCmbSize = new JComboBox<>(); JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); TitledBorder titledBorder1; @@ -83,9 +83,7 @@ public LayeredSurfaceProperties(Frame frame, String title, jCmbSize.addItem("" + i); jCmbSize.setSelectedIndex(cellSize - 1); - java.util.Iterator it = displayLayers.iterator(); - while (it.hasNext()) { - ILayerDrawer lay = (ILayerDrawer) it.next(); + for (var lay : displayLayers) { JCheckBox jc = new JCheckBox(lay.getDescription()); jc.setSelected(lay.isDisplayed()); jMainPanel.add(jc); @@ -143,9 +141,7 @@ void jBtnCancel_actionPerformed(ActionEvent e) { } void jBtnOK_actionPerformed(ActionEvent e) { - ILayerDrawer lay; - for (int i = 0; i < displayLayers.size(); i++) { - lay = (ILayerDrawer) displayLayers.get(i); + for (var lay : displayLayers) { lay.setDisplay(getStatusCheck(lay.getDescription())); } diff --git a/src/main/java/microsim/gui/utils/ImageGenerator.java b/src/main/java/microsim/gui/utils/ImageGenerator.java index 0c8583d4..6cea3393 100644 --- a/src/main/java/microsim/gui/utils/ImageGenerator.java +++ b/src/main/java/microsim/gui/utils/ImageGenerator.java @@ -62,7 +62,7 @@ public static String generate(JPanel panel) { panel.paint(svgGenerator); - return getOutput((SVGGraphics2D) svgGenerator); + return getOutput(svgGenerator); } public static String generate(JFrame frame) { diff --git a/src/main/java/microsim/matching/GlobalMatching.java b/src/main/java/microsim/matching/GlobalMatching.java index 11fdde47..53ff976a 100644 --- a/src/main/java/microsim/matching/GlobalMatching.java +++ b/src/main/java/microsim/matching/GlobalMatching.java @@ -43,7 +43,7 @@ public Pair, Set> matching(Collection collection1, Predicate fil throw new IllegalArgumentException("Matching algorithm cannot match not disjuctable collections"); // evaluate list of global candidate pairs - List candidates = new ArrayList<>(); + var candidates = new ArrayList>(); for (T agent1 : c1) { for (T agent2 : c2) { @@ -51,20 +51,20 @@ public Pair, Set> matching(Collection collection1, Predicate fil Double score = doubleClosure.getValue(agent1, agent2); if (Double.isFinite(score)) { - GlobalMatchingPair pair = new GlobalMatchingPair(agent1, agent2, score); + var pair = new GlobalMatchingPair(agent1, agent2, score); candidates.add(pair); } } } // sort candidate pairs from best to worst candidate matches - Collections.sort(candidates, new GlobalMatchingPairComparator()); + Collections.sort(candidates, new GlobalMatchingPairComparator()); // allocate matches for (int ii = 0; ii < candidates.size(); ii++) { - GlobalMatchingPair pair = candidates.get(ii); - T agent1 = (T) pair.getAgent1(); - T agent2 = (T) pair.getAgent2(); + var pair = candidates.get(ii); + var agent1 = pair.getAgent1(); + var agent2 = pair.getAgent2(); if (c1.contains(agent1) && c2.contains(agent2)) { matching.match(agent1, agent2); c1.remove(agent1); @@ -82,11 +82,13 @@ private GlobalMatching() { } - private static GlobalMatching globalMatching; + // FIXME: remove static instance + private static GlobalMatching globalMatching; + @SuppressWarnings("rawtypes") public static GlobalMatching getInstance() { if (globalMatching == null) - globalMatching = new GlobalMatching(); + globalMatching = new GlobalMatching<>(); return globalMatching; } diff --git a/src/main/java/microsim/matching/GlobalMatchingPairComparator.java b/src/main/java/microsim/matching/GlobalMatchingPairComparator.java index 7a0305c1..42c4422b 100644 --- a/src/main/java/microsim/matching/GlobalMatchingPairComparator.java +++ b/src/main/java/microsim/matching/GlobalMatchingPairComparator.java @@ -5,10 +5,10 @@ /** * HELPER CLASS TO ASSIST SORTING OF GlobalMatchingPairs */ -public class GlobalMatchingPairComparator implements Comparator { +public class GlobalMatchingPairComparator implements Comparator> { @Override - public int compare(GlobalMatchingPair o1, GlobalMatchingPair o2) { + public int compare(GlobalMatchingPair o1, GlobalMatchingPair o2) { return Double.compare(o1.getScore(), o2.getScore()); } } diff --git a/src/main/java/microsim/matching/IterativeMatchingAlgorithm.java b/src/main/java/microsim/matching/IterativeMatchingAlgorithm.java index 1d41bbec..2058ec83 100644 --- a/src/main/java/microsim/matching/IterativeMatchingAlgorithm.java +++ b/src/main/java/microsim/matching/IterativeMatchingAlgorithm.java @@ -1,5 +1,4 @@ package microsim.matching; -//package microsim.matching; import java.util.Collection; import java.util.Comparator; diff --git a/src/main/java/microsim/matching/IterativeRandomMatching.java b/src/main/java/microsim/matching/IterativeRandomMatching.java index d8e8c714..faac1ce8 100644 --- a/src/main/java/microsim/matching/IterativeRandomMatching.java +++ b/src/main/java/microsim/matching/IterativeRandomMatching.java @@ -1,5 +1,4 @@ package microsim.matching; -//package microsim.matching; import java.util.ArrayList; import java.util.Collection; @@ -7,7 +6,6 @@ import java.util.Comparator; import java.util.LinkedHashSet; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Predicate; @@ -105,11 +103,13 @@ private IterativeRandomMatching() { } - private static IterativeRandomMatching iterativeRandomMatching; + // FIXME: remove static instance + private static IterativeRandomMatching iterativeRandomMatching; + @SuppressWarnings("rawtypes") public static IterativeRandomMatching getInstance() { if (iterativeRandomMatching == null) - iterativeRandomMatching = new IterativeRandomMatching(); + iterativeRandomMatching = new IterativeRandomMatching<>(); return iterativeRandomMatching; } diff --git a/src/main/java/microsim/matching/IterativeSimpleMatching.java b/src/main/java/microsim/matching/IterativeSimpleMatching.java index a55367d7..a3cfdf40 100644 --- a/src/main/java/microsim/matching/IterativeSimpleMatching.java +++ b/src/main/java/microsim/matching/IterativeSimpleMatching.java @@ -1,5 +1,4 @@ package microsim.matching; -//package microsim.matching; import java.util.ArrayList; import java.util.Collection; @@ -114,11 +113,13 @@ private IterativeSimpleMatching() { } - private static IterativeSimpleMatching iterativeMatching; + // FIXME: remove static instance + private static IterativeSimpleMatching iterativeMatching; + @SuppressWarnings("rawtypes") public static IterativeSimpleMatching getInstance() { if (iterativeMatching == null) - iterativeMatching = new IterativeSimpleMatching(); + iterativeMatching = new IterativeSimpleMatching<>(); return iterativeMatching; } diff --git a/src/main/java/microsim/matching/SimpleMatching.java b/src/main/java/microsim/matching/SimpleMatching.java index 6d6e84d2..c2d6fe13 100644 --- a/src/main/java/microsim/matching/SimpleMatching.java +++ b/src/main/java/microsim/matching/SimpleMatching.java @@ -93,11 +93,13 @@ private SimpleMatching() { } - private static SimpleMatching simpleMatching; + // FIXME: remove static instance + private static SimpleMatching simpleMatching; + @SuppressWarnings("rawtypes") public static SimpleMatching getInstance() { if (simpleMatching == null) - simpleMatching = new SimpleMatching(); + simpleMatching = new SimpleMatching<>(); return simpleMatching; } diff --git a/src/main/java/microsim/reflection/DoubleValueExtractor.java b/src/main/java/microsim/reflection/DoubleValueExtractor.java index bb2cef8f..fc81fd58 100644 --- a/src/main/java/microsim/reflection/DoubleValueExtractor.java +++ b/src/main/java/microsim/reflection/DoubleValueExtractor.java @@ -126,7 +126,7 @@ public double getDouble(Object target) { if (method == null) return field.getDouble(target); else - return ((Double) method.invoke(target, null)).doubleValue(); + return ((Double) method.invoke(target)).doubleValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/reflection/FloatValueExtractor.java b/src/main/java/microsim/reflection/FloatValueExtractor.java index 6a9fad50..d3d5818d 100644 --- a/src/main/java/microsim/reflection/FloatValueExtractor.java +++ b/src/main/java/microsim/reflection/FloatValueExtractor.java @@ -125,7 +125,7 @@ public float getFloat(Object target) { if (method == null) return field.getFloat(target); else - return ((Float) method.invoke(target, null)).floatValue(); + return ((Float) method.invoke(target)).floatValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/reflection/IntegerValueExtractor.java b/src/main/java/microsim/reflection/IntegerValueExtractor.java index 3e41019e..b1623089 100644 --- a/src/main/java/microsim/reflection/IntegerValueExtractor.java +++ b/src/main/java/microsim/reflection/IntegerValueExtractor.java @@ -126,7 +126,7 @@ public int getInt(Object target) { if (method == null) return field.getInt(target); else - return ((Integer) method.invoke(target, null)).intValue(); + return ((Integer) method.invoke(target)).intValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/reflection/LongValueExtractor.java b/src/main/java/microsim/reflection/LongValueExtractor.java index af811c46..88b2a708 100644 --- a/src/main/java/microsim/reflection/LongValueExtractor.java +++ b/src/main/java/microsim/reflection/LongValueExtractor.java @@ -125,7 +125,7 @@ public long getLong(Object target) { if (method == null) return field.getLong(target); else - return ((Long) method.invoke(target, null)).longValue(); + return ((Long) method.invoke(target)).longValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/reflection/StringValueExtractor.java b/src/main/java/microsim/reflection/StringValueExtractor.java index 71e9a3da..af9cbe75 100644 --- a/src/main/java/microsim/reflection/StringValueExtractor.java +++ b/src/main/java/microsim/reflection/StringValueExtractor.java @@ -129,7 +129,7 @@ public String getString(Object target) { if (method == null) return (String) field.get(target); else - return (String) method.invoke(target, null); + return (String) method.invoke(target); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/space/SparseObjectSpace.java b/src/main/java/microsim/space/SparseObjectSpace.java index 3eb56a1e..9f2fa7c5 100644 --- a/src/main/java/microsim/space/SparseObjectSpace.java +++ b/src/main/java/microsim/space/SparseObjectSpace.java @@ -296,7 +296,7 @@ public boolean hasNext() { public Object next() { Map.Entry entry = it.next(); - currentKey = (HashKey) entry.getKey(); + currentKey = entry.getKey(); return entry.getValue(); } diff --git a/src/main/java/microsim/statistics/TimeSeries.java b/src/main/java/microsim/statistics/TimeSeries.java index bfaf7874..97a9bc4e 100644 --- a/src/main/java/microsim/statistics/TimeSeries.java +++ b/src/main/java/microsim/statistics/TimeSeries.java @@ -235,7 +235,7 @@ public Series getSeries(int seriesIndex) { throw new IndexOutOfBoundsException(seriesIndex + " is out of max bound " + series.size()); - return (Series) series.get(seriesIndex); + return series.get(seriesIndex); } /** diff --git a/src/main/java/microsim/statistics/reflectors/DoubleInvoker.java b/src/main/java/microsim/statistics/reflectors/DoubleInvoker.java index fe0d62a9..bb18a3f8 100644 --- a/src/main/java/microsim/statistics/reflectors/DoubleInvoker.java +++ b/src/main/java/microsim/statistics/reflectors/DoubleInvoker.java @@ -135,7 +135,7 @@ public double getDouble(Object target) { return ((Double) field.get(target)).doubleValue(); } } else - return ((Double) method.invoke(target, null)).doubleValue(); + return ((Double) method.invoke(target)).doubleValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/statistics/reflectors/FloatInvoker.java b/src/main/java/microsim/statistics/reflectors/FloatInvoker.java index 3f0dca05..fc0d5664 100644 --- a/src/main/java/microsim/statistics/reflectors/FloatInvoker.java +++ b/src/main/java/microsim/statistics/reflectors/FloatInvoker.java @@ -132,7 +132,7 @@ public float getFloat(Object target) { return ((Float) field.get(target)).floatValue(); } } else - return ((Float) method.invoke(target, null)).floatValue(); + return ((Float) method.invoke(target)).floatValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/statistics/reflectors/IntegerInvoker.java b/src/main/java/microsim/statistics/reflectors/IntegerInvoker.java index 3ead7828..01337e0d 100644 --- a/src/main/java/microsim/statistics/reflectors/IntegerInvoker.java +++ b/src/main/java/microsim/statistics/reflectors/IntegerInvoker.java @@ -132,7 +132,7 @@ public int getInt(Object target) { return ((Integer) field.get(target)).intValue(); } } else - return ((Integer) method.invoke(target, null)).intValue(); + return ((Integer) method.invoke(target)).intValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/statistics/reflectors/LongInvoker.java b/src/main/java/microsim/statistics/reflectors/LongInvoker.java index bd39feee..e540c1b3 100644 --- a/src/main/java/microsim/statistics/reflectors/LongInvoker.java +++ b/src/main/java/microsim/statistics/reflectors/LongInvoker.java @@ -132,7 +132,7 @@ public long getLong(Object target) { return ((Long) field.get(target)).longValue(); } } else - return ((Long) method.invoke(target, null)).longValue(); + return ((Long) method.invoke(target)).longValue(); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/statistics/reflectors/StringInvoker.java b/src/main/java/microsim/statistics/reflectors/StringInvoker.java index 680d4895..c6a4baae 100644 --- a/src/main/java/microsim/statistics/reflectors/StringInvoker.java +++ b/src/main/java/microsim/statistics/reflectors/StringInvoker.java @@ -130,7 +130,7 @@ public String getString(Object target) { if (method == null) return (String) field.get(target); else - return (String) method.invoke(target, null); + return (String) method.invoke(target); } catch (InvocationTargetException ie) { StringBuffer message = new StringBuffer(); if (method == null) diff --git a/src/main/java/microsim/statistics/regression/BinomialRegression.java b/src/main/java/microsim/statistics/regression/BinomialRegression.java index bb72bf98..9f0ed5a5 100644 --- a/src/main/java/microsim/statistics/regression/BinomialRegression.java +++ b/src/main/java/microsim/statistics/regression/BinomialRegression.java @@ -20,7 +20,7 @@ * * @author Justin van de Ven */ -public class BinomialRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { +public class BinomialRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { MultiKeyCoefficientMap map; private List eventList; @@ -52,23 +52,21 @@ public > double getProbability(IDoubleSource iDblSrc, Class< return getProbability(eventList.get(1), iDblSrc, Regressors); } - public & IntegerValuedEnum, E2 extends Enum> double getProbability(E event, - IDoubleSource iDblSrc, Class Regressors) { + public > double getProbability(E1 event, IDoubleSource iDblSrc, Class Regressors) { return getProbabilities(iDblSrc, Regressors).get(event); } - public & IntegerValuedEnum, E2 extends Enum> Map getProbabilities( - IDoubleSource iDblSrc, Class Regressors) { + public > Map getProbabilities(IDoubleSource iDblSrc, Class Regressors) { // probabilities are obtained for discrete alternatives of dependent variable in // increasing order of the feasible set // P(y=1|X) = F(Xb) - Map probs = new LinkedHashMap<>(); - E event; + var probs = new LinkedHashMap(); + E1 event; double prob = calculator.getProbability(map, iDblSrc, Regressors); - event = (E) eventList.get(0); + event = eventList.get(0); probs.put(event, 1.0 - prob); - event = (E) eventList.get(1); + event = eventList.get(1); probs.put(event, prob); return probs; diff --git a/src/main/java/microsim/statistics/regression/GeneralisedOrderedRegression.java b/src/main/java/microsim/statistics/regression/GeneralisedOrderedRegression.java index 7def67c5..28aa220d 100644 --- a/src/main/java/microsim/statistics/regression/GeneralisedOrderedRegression.java +++ b/src/main/java/microsim/statistics/regression/GeneralisedOrderedRegression.java @@ -22,7 +22,7 @@ * yhat_j = 1 if yhatstar_j>=0 and 0 otherwise * P(yhat_j=1|X) = P(yhatstar_j>=0|X) = P(Xb_j-e_j>=0) = F(Xb_j) *****************************************************************/ -public class GeneralisedOrderedRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { +public class GeneralisedOrderedRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { Map maps; private List eventList; @@ -42,22 +42,20 @@ public List getEventList() { return eventList; } - public & IntegerValuedEnum, E2 extends Enum> double getProbability(E event, - IDoubleSource iDblSrc, Class Regressors) { + public > double getProbability(E1 event, IDoubleSource iDblSrc, Class Regressors) { return getProbabilities(iDblSrc, Regressors).get(event); } - public & IntegerValuedEnum, E2 extends Enum> Map getProbabilities( - IDoubleSource iDblSrc, Class Regressors) { + public > Map getProbabilities(IDoubleSource iDblSrc, Class Regressors) { // probabilities are obtained for discrete alternatives of dependent variable in // increasing order of the feasible set // P(y_j) = P(yhat_j-1|X) - P(yhat_j|X) - Map probs = new LinkedHashMap<>(); + var probs = new LinkedHashMap(); double probHere, probPreceding = 1.0; for (int ii = 0; ii < eventList.size() - 1; ii++) { - E event = (E) eventList.get(ii); + var event = eventList.get(ii); if (maps.get(event) == null) throw new RuntimeException( "generalised ordered logit expected but failed to find regression estimates for event " @@ -71,7 +69,7 @@ public & IntegerValuedEnum, E2 extends Enum> Map & IntegerValuedEnum> { - & IntegerValuedEnum> List getEventList(); + List getEventList(); - & IntegerValuedEnum, E extends Enum> double getProbability(T event, IDoubleSource iDblSrc, - Class Regressors); + > double getProbability(E event, IDoubleSource iDblSrc, Class Regressors); - & IntegerValuedEnum, E extends Enum> Map getProbabilities(IDoubleSource iDblSrc, - Class Regressors); + > Map getProbabilities(IDoubleSource iDblSrc, Class Regressors); } diff --git a/src/main/java/microsim/statistics/regression/LinearRegression.java b/src/main/java/microsim/statistics/regression/LinearRegression.java index 4c33ddab..2663bd7b 100644 --- a/src/main/java/microsim/statistics/regression/LinearRegression.java +++ b/src/main/java/microsim/statistics/regression/LinearRegression.java @@ -12,8 +12,6 @@ import microsim.statistics.IObjectSource; import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.collections4.MapIterator; -import org.apache.commons.collections4.keyvalue.MultiKey; /** * Linear regression object. @@ -156,8 +154,8 @@ public static double computeScore(MultiKeyCoefficientMap amap, Map regressors = new HashSet(); - for (Object multiKey : amap.keySet()) { - final String key = (String) ((MultiKey) multiKey).getKey(0); + for (var multiKey : amap.keySet()) { + final String key = (String) multiKey.getKey(0); if (!regressors.add(key)) { throw new IllegalArgumentException("Regressor key " + key + " is not unique! It is possible that the LinearRegression MultiKeyCoefficientMap containins a MultiKey with more than one key. The LinearRegression will not return the correct value when LinearRegression.computeScore(MultiKeyCoefficientMap amap, Map) is used with a LinearRegression instance containing a MultiKeyCoefficientMap with more than one key! Consider using one of the other LinearRegression.getScore() methods instead."); @@ -241,10 +239,10 @@ public static > double computeScore(MultiKeyCoefficientMap coe if (coeffMultiMap.getKeysNames().length == 1) { // (double) check that there is only one key entry in the // MultiKey of coeffMultiMap double sum = 0.; - for (MapIterator iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { + for (var iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { iterator.next(); - MultiKey coeffMK = (MultiKey) iterator.getKey(); + var coeffMK = iterator.getKey(); String regressor = coeffMK.getKey(0).toString(); // coeffMK is assumed to only have a single key here double covariate = iDblSrc.getDoubleValue(Enum.valueOf(enumType, regressor)); // Gets value of variable // with key that matches @@ -374,10 +372,10 @@ public static > double computeScore(MultiKeyCoefficientMap coe double sum = 0.; int regressorColumnIndex = -1; - for (MapIterator iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { + for (var iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { iterator.next(); - MultiKey coeffMK = (MultiKey) iterator.getKey(); + var coeffMK = iterator.getKey(); boolean coeffMKapplicableForIDblSrc = true; int i = 0; while (i < coeffMultiMapKeysNames.length) { @@ -504,9 +502,9 @@ public static double computeScore(MultiKeyCoefficientMap coeffMultiMap, Object a } double score = 0.; - for (MapIterator iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { + for (var iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { iterator.next(); - MultiKey coeffMK = (MultiKey) iterator.getKey(); + var coeffMK = iterator.getKey(); boolean coeffMKapplicable = true; int i = 0; while (i < iMax) { @@ -695,10 +693,10 @@ public static , U extends Enum> double computeScore(MultiKe double sum = 0.; int regressorColumnIndex = -1; String[] coeffMultiMapKeysNames = coeffMultiMap.getKeysNames(); - for (MapIterator iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { + for (var iterator = coeffMultiMap.mapIterator(); iterator.hasNext();) { iterator.next(); - MultiKey coeffMK = (MultiKey) iterator.getKey(); + var coeffMK = iterator.getKey(); boolean coeffMKapplicableForIDblSrc = true; int i = 0; while (i < coeffMultiMapKeysNames.length) { diff --git a/src/main/java/microsim/statistics/regression/MultinomialRegression.java b/src/main/java/microsim/statistics/regression/MultinomialRegression.java index cfc71112..c9f55dde 100644 --- a/src/main/java/microsim/statistics/regression/MultinomialRegression.java +++ b/src/main/java/microsim/statistics/regression/MultinomialRegression.java @@ -23,7 +23,7 @@ * Identification is permitted by normalising one category, k, such that * exp(Xb_k) = 1.0 *****************************************************************/ -public class MultinomialRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { +public class MultinomialRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { Map maps; private List eventList; @@ -56,20 +56,18 @@ public List getEventList() { return eventList; } - public & IntegerValuedEnum, E2 extends Enum> double getProbability(E event, - IDoubleSource iDblSrc, Class Regressors) { + public > double getProbability(E1 event, IDoubleSource iDblSrc, Class Regressors) { return getProbabilities(iDblSrc, Regressors).get(event); } - public & IntegerValuedEnum, E2 extends Enum> Map getProbabilities( - IDoubleSource iDblSrc, Class Regressors) { + public > Map getProbabilities(IDoubleSource iDblSrc, Class Regressors) { // P(y_i=1|X) = exp(Xb_i) / sum(exp(Xb_1),...exp(Xb_n)) - Map expScores = new HashMap<>(); - Map probs = new LinkedHashMap<>(); + var expScores = new HashMap(); + var probs = new LinkedHashMap(); double denominator = 1.0; int countEventProbs = 0; - for (E event : (Set) maps.keySet()) { + for (var event : maps.keySet()) { double expScore = Math.exp(calculator.getScore(maps.get(event), iDblSrc, Regressors)); expScores.put(event, expScore); denominator += expScore; @@ -79,7 +77,7 @@ public & IntegerValuedEnum, E2 extends Enum> Map) eventList) { + for (var event : eventList) { Double val = expScores.get(event); probs.put(event, Objects.requireNonNullElse(val, 1.0) / denominator); } diff --git a/src/main/java/microsim/statistics/regression/OrderedRegression.java b/src/main/java/microsim/statistics/regression/OrderedRegression.java index de09bba7..78801ae5 100644 --- a/src/main/java/microsim/statistics/regression/OrderedRegression.java +++ b/src/main/java/microsim/statistics/regression/OrderedRegression.java @@ -28,7 +28,7 @@ * * @author Justin van de Ven */ -public class OrderedRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { +public class OrderedRegression & IntegerValuedEnum> implements IDiscreteChoiceModel { MultiKeyCoefficientMap map; private List eventList; @@ -63,23 +63,21 @@ public List getEventList() { return eventList; } - public & IntegerValuedEnum, E2 extends Enum> double getProbability(E event, - IDoubleSource iDblSrc, Class Regressors) { + public > double getProbability(E1 event, IDoubleSource iDblSrc, Class Regressors) { return getProbabilities(iDblSrc, Regressors).get(event); } - public & IntegerValuedEnum, E2 extends Enum> Map getProbabilities( - IDoubleSource iDblSrc, Class Regressors) { + public > Map getProbabilities(IDoubleSource iDblSrc, Class Regressors) { // probabilities are obtained for discrete alternatives of dependent variable in // increasing order of the feasible set // P(y_j|X) = F(cut_j-Xb) - F(cut_j-1-Xb) - Map probs = new LinkedHashMap<>(); + var probs = new LinkedHashMap(); double score = calculator.getScore(map, iDblSrc, Regressors); double probHere, probPreceding = 0.0; for (int ii = 0; ii < eventList.size() - 1; ii++) { - E event = (E) eventList.get(ii); + var event = eventList.get(ii); String key = Strings.concat("Cut", Integer.toString(ii + 1)); double cutVal = getCoefficient(key); probHere = calculator.getProbability(cutVal - score); @@ -91,7 +89,7 @@ public & IntegerValuedEnum, E2 extends Enum> Map Map bootstrapMultinomialRegression( int count = 0; String[] multiKeyMapKeyNames = null; // The name of the MultiKey in the MultiKeyCoefficientMaps String[] multiKeyMapValueNames = null; // The name of the values in the MultiKeyCoefficientMaps - Set covariateMultiKeys = null; + Set> covariateMultiKeys = null; T baseT = null; for (T t : possibleEvents) { if (specifiedEvents.contains(t)) { @@ -681,7 +678,7 @@ public static Map bootstrapMultinomialRegression( } else { String[] otherKeyNames = map.getKeysNames(); String[] otherValueNames = map.getValuesNames(); - Set otherMultiKeys = map.keySet(); + var otherMultiKeys = map.keySet(); // Check dimensions match if (multiKeyMapKeyNames.length != otherKeyNames.length) { throw new IllegalArgumentException( @@ -715,7 +712,7 @@ public static Map bootstrapMultinomialRegression( } } // Check that all events have the same MultiKeys (regression covariates) - for (MultiKey mk : otherMultiKeys) { + for (var mk : otherMultiKeys) { if (!covariateMultiKeys.contains(mk)) { throw new IllegalArgumentException("The covariate " + mk.getKey(0) + " specified in the regression coefficient MultiKeyCofficientMap for event " + t @@ -745,8 +742,7 @@ public static Map bootstrapMultinomialRegression( // (one of) the entries of the Map. for (T event : specifiedEvents) { MultiKeyCoefficientMap regCoefficientsMap = eventRegressionCoefficientMap.get(event); - for (Object o : regCoefficientsMap.keySet()) { - MultiKey mk = (MultiKey) o; + for (var mk : regCoefficientsMap.keySet()) { String combinedName = event.toString() + "_" + mk.getKey(0).toString(); enlargedCoefficientMap.putValue(combinedName, regCoefficientsMap.getValue(mk)); } @@ -758,7 +754,7 @@ public static Map bootstrapMultinomialRegression( for (T event : specifiedEvents) { MultiKeyCoefficientMap newCoefficientMap = new MultiKeyCoefficientMap(multiKeyMapKeyNames, multiKeyMapValueNames); - for (MultiKey mk : covariateMultiKeys) { + for (var mk : covariateMultiKeys) { String combinedName = event.toString() + "_" + mk.getKey(0).toString(); // System.out.println("combinedName " + combinedName); double regCoefficient = ((Number) enlargedCoefficientMap.getValue(combinedName)).doubleValue(); @@ -783,16 +779,14 @@ public static Map bootstrapMultinomialRegression( //// regression " // + "covariate name."); // } - //// for(int i = 0; i < tNames.length; i++) { - //// if(subStrings[0].equals(tNames[i])) { - //// covarianceEvents.add(subStrings[0]); //Only check that first substring of - //// key before the 'regular expression' "_" character is an event name. Thus if - //// LowEdu and HighEdu are events, and the covariance matrix contains keys - //// LowEdu_age and HighEdu_age, this will be satisfied, but not if the keys are - //// age_LowEdu and age_HighEdu. This is to prevent confusion over what is the - //// event name and the covariate name. - //// } - //// } + //// for(int i = 0; i < tNames.length; i++) { / + /// if(subStrings[0].equals(tNames[i])) { / covarianceEvents.add(subStrings[0]); + /// //Only check that first substring of / key before the 'regular expression' + /// "_" character is an event name. Thus if / LowEdu and HighEdu are events, and + /// the covariance matrix contains keys / LowEdu_age and HighEdu_age, this will + /// be satisfied, but not if the keys are / age_LowEdu and age_HighEdu. This is + /// to prevent confusion over what is the / event name and the covariate name. / + /// } / } // } return newMap; @@ -832,8 +826,8 @@ public static & IntegerValuedEnum> Map regressors = new HashSet(); - for (Object multiKey : multinomialCoefficients.keySet()) { - final String key = ((MultiKey) multiKey).getKey(0).toString(); + for (var multiKey : multinomialCoefficients.keySet()) { + final String key = multiKey.getKey(0).toString(); if (!regressors.add(key)) throw new RuntimeException("Regressor key " + key + " in multinomial remapping is not unique."); } @@ -1018,7 +1012,7 @@ public static MultiKeyCoefficientMap appendCoefficientMaps(MultiKeyCoefficientMa } // populate with secondaryMap values - for (Object keyHere : secondaryMap.keySet()) { + for (var keyHere : secondaryMap.keySet()) { Double valHere; if (secondaryMap.getValuesNames().length == 1) { @@ -1040,9 +1034,9 @@ public static MultiKeyCoefficientMap appendCoefficientMaps(MultiKeyCoefficientMa } Object[] keyValueVector = new Object[2]; if (secondaryKeyPrefix == null) - keyValueVector[0] = ((MultiKey) keyHere).getKey(0).toString(); + keyValueVector[0] = keyHere.getKey(0).toString(); else - keyValueVector[0] = secondaryKeyPrefix + ((MultiKey) keyHere).getKey(0).toString(); + keyValueVector[0] = secondaryKeyPrefix + keyHere.getKey(0).toString(); if (invertSecondary) keyValueVector[1] = -valHere; else diff --git a/src/main/java/microsim/statistics/weighted/IWeightedDoubleArraySource.java b/src/main/java/microsim/statistics/weighted/IWeightedDoubleArraySource.java index 7e03cf5f..95c2522e 100644 --- a/src/main/java/microsim/statistics/weighted/IWeightedDoubleArraySource.java +++ b/src/main/java/microsim/statistics/weighted/IWeightedDoubleArraySource.java @@ -1,7 +1,5 @@ package microsim.statistics.weighted; -//package microsim.statistics.weighted; - /** * Used by statistical object to access array of double values. * diff --git a/src/main/java/microsim/statistics/weighted/IWeightedFloatArraySource.java b/src/main/java/microsim/statistics/weighted/IWeightedFloatArraySource.java index 1a110ab4..ef642f56 100644 --- a/src/main/java/microsim/statistics/weighted/IWeightedFloatArraySource.java +++ b/src/main/java/microsim/statistics/weighted/IWeightedFloatArraySource.java @@ -1,7 +1,5 @@ package microsim.statistics.weighted; -//package microsim.statistics.weighted; - /** * Used by statistical object to access array of float values. * diff --git a/src/main/java/microsim/statistics/weighted/IWeightedIntArraySource.java b/src/main/java/microsim/statistics/weighted/IWeightedIntArraySource.java index edee8af6..c8aaeb3e 100644 --- a/src/main/java/microsim/statistics/weighted/IWeightedIntArraySource.java +++ b/src/main/java/microsim/statistics/weighted/IWeightedIntArraySource.java @@ -1,7 +1,5 @@ package microsim.statistics.weighted; -//package microsim.statistics.weighted; - /** * Used by statistical object to access array of integer values. * diff --git a/src/main/java/microsim/statistics/weighted/IWeightedLongArraySource.java b/src/main/java/microsim/statistics/weighted/IWeightedLongArraySource.java index d6d07e4a..36059ef2 100644 --- a/src/main/java/microsim/statistics/weighted/IWeightedLongArraySource.java +++ b/src/main/java/microsim/statistics/weighted/IWeightedLongArraySource.java @@ -1,7 +1,5 @@ package microsim.statistics.weighted; -//package microsim.statistics.weighted; - /** * Used by statistical object to access array of long values. * diff --git a/src/main/java/microsim/statistics/weighted/Weighted_CrossSection.java b/src/main/java/microsim/statistics/weighted/Weighted_CrossSection.java index f5eb3591..8750217c 100644 --- a/src/main/java/microsim/statistics/weighted/Weighted_CrossSection.java +++ b/src/main/java/microsim/statistics/weighted/Weighted_CrossSection.java @@ -1,5 +1,4 @@ package microsim.statistics.weighted; -//package microsim.statistics.weighted; import microsim.statistics.ICollectionFilter; import microsim.statistics.IDoubleSource;