From 00c6c9955a61c031b09d943f831b25e538eeed95 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Thu, 24 Mar 2016 13:01:43 -0600
Subject: [PATCH] TextUtil cleanout and log formatting updates

---
 src/org/opensha2/calc/CalcConfig.java      | 57 ++++++----------------
 src/org/opensha2/calc/Deaggregation.java   | 17 ++++---
 src/org/opensha2/calc/Site.java            |  2 +-
 src/org/opensha2/calc/Sites.java           | 22 +++------
 src/org/opensha2/eq/model/ModelConfig.java | 30 +++++++-----
 src/org/opensha2/util/TextUtils.java       | 27 ++--------
 6 files changed, 56 insertions(+), 99 deletions(-)

diff --git a/src/org/opensha2/calc/CalcConfig.java b/src/org/opensha2/calc/CalcConfig.java
index 3b5cd571d..2e3c65f66 100644
--- a/src/org/opensha2/calc/CalcConfig.java
+++ b/src/org/opensha2/calc/CalcConfig.java
@@ -10,10 +10,10 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.opensha2.data.XySequence.create;
 import static org.opensha2.data.XySequence.immutableCopyOf;
 import static org.opensha2.util.Parsing.enumsToString;
+import static org.opensha2.util.TextUtils.LOG_INDENT;
+import static org.opensha2.util.TextUtils.LOG_VALUE_COLUMN;
 import static org.opensha2.util.TextUtils.NEWLINE;
 
-// import static org.opensha2.util.TextUtils.*;
-
 import java.io.IOException;
 import java.io.Reader;
 import java.lang.reflect.Type;
@@ -31,7 +31,6 @@ import org.opensha2.data.XySequence;
 import org.opensha2.eq.model.SourceType;
 import org.opensha2.gmm.Gmm;
 import org.opensha2.gmm.Imt;
-import org.opensha2.util.TextUtils;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.Maps;
@@ -200,7 +199,7 @@ public final class CalcConfig {
 				}
 			}
 			return new StringBuilder()
-				.append(formatGroup("Curve"))
+				.append(LOG_INDENT).append("Curve")
 				.append(formatEntry(Key.EXCEEDANCE_MODEL, exceedanceModel))
 				.append(formatEntry(Key.TRUNCATION_LEVEL, truncationLevel))
 				.append(formatEntry(Key.IMTS, enumsToString(imts, Imt.class)))
@@ -355,7 +354,7 @@ public final class CalcConfig {
 
 		private StringBuilder asString() {
 			return new StringBuilder()
-				.append(formatGroup("Performance"))
+				.append(LOG_INDENT).append("Performance")
 				.append(formatEntry(Key.OPTIMIZE_GRIDS, optimizeGrids))
 				.append(formatEntry(Key.COLLAPSE_MFDS, collapseMfds))
 				.append(formatEntry(Key.SYSTEM_PARTITION, systemPartition))
@@ -453,7 +452,7 @@ public final class CalcConfig {
 
 		private StringBuilder asString() {
 			return new StringBuilder()
-				.append(formatGroup("Output"))
+				.append(LOG_INDENT).append("Output")
 				.append(formatEntry(Key.DIRECTORY, directory.toAbsolutePath().normalize()))
 				.append(formatEntry(Key.CURVE_TYPES, enumsToString(curveTypes, CurveType.class)))
 				.append(formatEntry(Key.FLUSH_LIMIT, flushLimit));
@@ -548,7 +547,7 @@ public final class CalcConfig {
 
 		private StringBuilder asString() {
 			return new StringBuilder()
-				.append(formatGroup("Deaggregation"))
+				.append(LOG_INDENT).append("Deaggregation")
 				.append(formatEntry("R"))
 				.append("min=").append(rMin).append(", ")
 				.append("max=").append(rMax).append(", ")
@@ -600,7 +599,7 @@ public final class CalcConfig {
 
 	@Override
 	public String toString() {
-		return new StringBuilder("Calc Configuration: ")
+		return new StringBuilder("Calc Config: ")
 			.append(resource.isPresent()
 				? resource.get().toAbsolutePath().normalize()
 				: "(from defaults)")
@@ -611,38 +610,25 @@ public final class CalcConfig {
 			.toString();
 	}
 
-	// public static <E extends Enum<E>> String format(E id) {
-	// return format(id.toString());
-	// }
-
-	private static final int GROUP_INDENT_SIZE = 8;
-	private static final int KEY_INDENT_SIZE = 10;
-	private static final int VALUE_INDENT_SIZE = 28;
 	private static final int MAX_COL = 100;
-	private static final int VALUE_WIDTH = MAX_COL - VALUE_INDENT_SIZE;
-	private static final String S = " ";
-	private static final String GROUP_INDENT = repeat(S, GROUP_INDENT_SIZE);
-	private static final String KEY_INDENT = repeat(S, KEY_INDENT_SIZE);
-	private static final String VALUE_INDENT = repeat(S, VALUE_INDENT_SIZE);
-
-	private static String formatGroup(String group) {
-		return TextUtils.NEWLINE + GROUP_INDENT + group;
-	}
+	private static final int VALUE_WIDTH = MAX_COL - LOG_VALUE_COLUMN;
+	private static final String KEY_INDENT = LOG_INDENT + "  ";
+	private static final String VALUE_INDENT = NEWLINE + repeat(" ", LOG_VALUE_COLUMN);
 
 	private static String formatEntry(String key) {
-		return NEWLINE + padEnd(KEY_INDENT + '.' + key + ':', VALUE_INDENT_SIZE, ' ');
+		return padEnd(KEY_INDENT + '.' + key + ':', LOG_VALUE_COLUMN, ' ');
 	}
 
 	private static <E extends Enum<E>> String formatEntry(E key, Object value) {
-		return NEWLINE + padEnd(KEY_INDENT + '.' + key + ':', VALUE_INDENT_SIZE, ' ') + value;
+		return padEnd(KEY_INDENT + '.' + key + ':', LOG_VALUE_COLUMN, ' ') + value;
 	}
 
 	/* wrap a commma-delimited string */
 	private static String wrap(String s, boolean pad) {
-		if (s.length() <= VALUE_WIDTH) return pad ? NEWLINE + VALUE_INDENT + s : s;
+		if (s.length() <= VALUE_WIDTH) return pad ? VALUE_INDENT + s : s;
 		StringBuilder sb = new StringBuilder();
 		int lastCommaIndex = s.substring(0, VALUE_WIDTH).lastIndexOf(',') + 1;
-		if (pad) sb.append(NEWLINE).append(VALUE_INDENT);
+		if (pad) sb.append(VALUE_INDENT);
 		sb.append(s.substring(0, lastCommaIndex));
 		sb.append(wrap(s.substring(lastCommaIndex).trim(), true));
 		return sb.toString();
@@ -660,21 +646,6 @@ public final class CalcConfig {
 		})
 		.create();
 
-	// TODO clean
-	public static void main(String[] args) throws IOException {
-
-		// CalcConfig cc =
-		// Builder.fromFile(Paths.get("etc/examples/5-complex-model/config-sites.json")).build();
-		// System.out.println(cc);
-
-		CalcConfig cc = Builder
-			.withDefaults()
-			// .extend(Builder.fromFile(Paths.get("etc/examples/6-enhanced-output/config.json")))
-			.extend(Builder.fromFile(Paths.get("etc/examples/2-custom-config/config.json")))
-			.build();
-		System.out.println(cc);
-	}
-
 	/**
 	 * A builder of configuration instances.
 	 */
diff --git a/src/org/opensha2/calc/Deaggregation.java b/src/org/opensha2/calc/Deaggregation.java
index 0a34f6591..dced2dfc3 100644
--- a/src/org/opensha2/calc/Deaggregation.java
+++ b/src/org/opensha2/calc/Deaggregation.java
@@ -4,7 +4,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static org.opensha2.data.Data.checkInRange;
 import static org.opensha2.util.TextUtils.NEWLINE;
-import static org.opensha2.util.TextUtils.format;
+import static org.opensha2.util.TextUtils.LOG_INDENT;
 import static org.opensha2.data.Data.multiply;
 import static com.google.common.primitives.Doubles.toArray;
 
@@ -207,11 +207,16 @@ public final class Deaggregation {
 
 		@Override public String toString() {
 			return new StringBuilder("Deagg config:")
-				.append(format("imt")).append(imt.name()).append(" [").append(imt).append("]")
-				.append(format("iml")).append(iml).append(" ").append(imt.units())
-				.append(format("rate")).append(rate).append(" yr⁻¹")
-				.append(format("returnPeriod")).append(returnPeriod).append(" yrs")
-				.append(format("probabilityModel")).append(probabilityModel)
+				.append(LOG_INDENT)
+				.append("imt: ").append(imt.name()).append(" [").append(imt).append("]")
+				.append(LOG_INDENT)
+				.append("iml: ").append(iml).append(" ").append(imt.units())
+				.append(LOG_INDENT)
+				.append("rate: ").append(rate).append(" yr⁻¹")
+				.append(LOG_INDENT)
+				.append("returnPeriod: ").append(returnPeriod).append(" yrs")
+				.append(LOG_INDENT)
+				.append("probabilityModel: ").append(probabilityModel)
 				.append(" [trunc = ").append(truncation).append("]")
 				.toString();
 		}
diff --git a/src/org/opensha2/calc/Site.java b/src/org/opensha2/calc/Site.java
index 6a49dc975..1fb8ba1f3 100644
--- a/src/org/opensha2/calc/Site.java
+++ b/src/org/opensha2/calc/Site.java
@@ -125,7 +125,7 @@ public class Site implements Named {
 
 	@Override
 	public String toString() {
-		return new StringBuilder(Strings.padEnd(name, 24, ' '))
+		return new StringBuilder(Strings.padEnd(name, 20, ' '))
 			.append(String.format("%.3f %.3f Vs30=%s ", location.lon(), location.lat(), vs30))
 			.append(vsInferred ? "inferred " : "measured ")
 			.append(String.format("Z1.0=%s Z2.5=%s", z1p0, z2p5))
diff --git a/src/org/opensha2/calc/Sites.java b/src/org/opensha2/calc/Sites.java
index 4afb4a40c..c3f869afb 100644
--- a/src/org/opensha2/calc/Sites.java
+++ b/src/org/opensha2/calc/Sites.java
@@ -2,14 +2,13 @@ package org.opensha2.calc;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.base.Strings.padStart;
-import static com.google.common.base.Strings.repeat;
+import static com.google.common.base.Strings.padEnd;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.opensha2.geo.BorderType.MERCATOR_LINEAR;
 import static org.opensha2.util.GeoJson.validateProperty;
 import static org.opensha2.util.Parsing.splitToList;
-import static org.opensha2.util.TextUtils.ALIGN_COL;
-import static org.opensha2.util.TextUtils.*;
+import static org.opensha2.util.TextUtils.LOG_INDENT;
+import static org.opensha2.util.TextUtils.LOG_VALUE_COLUMN;
 
 import java.io.IOException;
 import java.io.Reader;
@@ -31,10 +30,8 @@ import org.opensha2.geo.Regions;
 import org.opensha2.util.GeoJson;
 import org.opensha2.util.Parsing;
 import org.opensha2.util.Parsing.Delimiter;
-import org.opensha2.util.TextUtils;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.reflect.TypeToken;
@@ -194,8 +191,8 @@ public final class Sites {
 	}
 
 	private static final int TO_STRING_LIMIT = 5;
-	private static final int SITE_INDENT_SIZE = 8;
-	private static final String SITE_INDENT = Strings.repeat(" ", SITE_INDENT_SIZE);
+	private static final String SITE_INDENT = LOG_INDENT + "       ";
+//	private static final String SITE_STRING = padEnd(SITE_INDENT + "Site:", LOG_VALUE_COLUMN, ' ');
 
 	/*
 	 * Parent class for deserialization of different GeoJSON site file formats
@@ -211,16 +208,11 @@ public final class Sites {
 				.append(" [size=").append(size).append("]");
 			if (!region) {
 				for (Site site : Iterables.limit(this, TO_STRING_LIMIT)) {
-					sb.append(NEWLINE)
-						.append(SITE_INDENT)
-						.append("Site: ")
-						.append(site);
+					sb.append(SITE_INDENT).append(site);
 				}
 				if (size > TO_STRING_LIMIT) {
 					int delta = size - TO_STRING_LIMIT;
-					sb.append(NEWLINE)
-						.append(SITE_INDENT)
-						.append("... and ").append(delta).append(" more ...");
+					sb.append(SITE_INDENT).append("... and ").append(delta).append(" more ...");
 				}
 			}
 			return sb.toString();
diff --git a/src/org/opensha2/eq/model/ModelConfig.java b/src/org/opensha2/eq/model/ModelConfig.java
index edd4f00af..b263e55c1 100644
--- a/src/org/opensha2/eq/model/ModelConfig.java
+++ b/src/org/opensha2/eq/model/ModelConfig.java
@@ -4,15 +4,16 @@ import static com.google.common.base.CaseFormat.LOWER_CAMEL;
 import static com.google.common.base.CaseFormat.UPPER_UNDERSCORE;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Strings.padEnd;
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.opensha2.util.TextUtils.format;
+import static org.opensha2.util.TextUtils.LOG_INDENT;
+import static org.opensha2.util.TextUtils.LOG_VALUE_COLUMN;
 
 import java.io.IOException;
 import java.io.Reader;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
-import org.opensha2.calc.CalcConfig;
 import org.opensha2.eq.fault.surface.RuptureFloating;
 import org.opensha2.eq.model.AreaSource.GridScaling;
 
@@ -20,7 +21,6 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
-import com.google.gson.JsonStreamParser;
 
 /**
  * Model and calculation configuration class. No defaults; 'config.json' must be
@@ -87,20 +87,26 @@ final class ModelConfig {
 
 	@Override
 	public String toString() {
-		return new StringBuilder("Model Configuration:")
-			.append(format(Key.NAME)).append(name)
-			.append(format(Key.RESOURCE)).append(resource.toAbsolutePath().normalize())
-			.append(format(Key.SURFACE_SPACING)).append(surfaceSpacing)
-			.append(format(Key.RUPTURE_FLOATING)).append(ruptureFloating)
-			.append(format(Key.RUPTURE_VARIABILITY)).append(ruptureVariability)
-			.append(format(Key.POINT_SOURCE_TYPE)).append(pointSourceType)
-			.append(format(Key.AREA_GRID_SCALING)).append(areaGridScaling)
+		return new StringBuilder("Model Config: ")
+			.append(resource.toAbsolutePath().normalize())
+			.append(LOG_INDENT).append("Model")
+			.append(formatEntry(Key.NAME, name))
+			.append(formatEntry(Key.SURFACE_SPACING, surfaceSpacing))
+			.append(formatEntry(Key.RUPTURE_FLOATING, ruptureFloating))
+			.append(formatEntry(Key.RUPTURE_VARIABILITY, ruptureVariability))
+			.append(formatEntry(Key.POINT_SOURCE_TYPE, pointSourceType))
+			.append(formatEntry(Key.AREA_GRID_SCALING, areaGridScaling))
 			.toString();
 	}
 
+	private static final String KEY_INDENT = LOG_INDENT + "  ";
+
+	private static <E extends Enum<E>> String formatEntry(E key, Object value) {
+		return padEnd(KEY_INDENT + '.' + key + ':', LOG_VALUE_COLUMN, ' ') + value;
+	}
+
 	final static class Builder {
 
-		private static final String ID = "ModelConfig.Builder";
 		private boolean built = false;
 
 		private String name;
diff --git a/src/org/opensha2/util/TextUtils.java b/src/org/opensha2/util/TextUtils.java
index 28e243ef0..33be0461f 100644
--- a/src/org/opensha2/util/TextUtils.java
+++ b/src/org/opensha2/util/TextUtils.java
@@ -1,12 +1,7 @@
 package org.opensha2.util;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Strings.padStart;
-import static com.google.common.base.Strings.repeat;
 
-import java.util.Map;
-
-import com.google.common.base.Joiner;
 import com.google.common.base.StandardSystemProperty;
 import com.google.common.base.Strings;
 
@@ -19,26 +14,14 @@ public class TextUtils {
 
 	/** System specific newline string. */
 	public static final String NEWLINE = StandardSystemProperty.LINE_SEPARATOR.value();
-	
-	public static final int ALIGN_COL = 24;
-	private static final int MAX_COL = 100;
-	private static final int DELTA_COL = MAX_COL - ALIGN_COL - 2;
-	private static final String INDENT = NEWLINE + repeat(" ", ALIGN_COL + 2);
-	
-	
-	private static final Joiner.MapJoiner MAP_JOIN = Joiner.on(", ").withKeyValueSeparator(": ");
 
-	private String toString(Map<?, ?> map) {
-		return Parsing.addBrackets(MAP_JOIN.join(map));
-	}
+	/** The column on which to align values in a log entry. */
+	public static final int LOG_VALUE_COLUMN = 32;
 	
-	public static <E extends Enum<E>> String format(E id) {
-		return format(id.toString());
-	}
+	private static final int LOG_INDENT_SIZE = 8;
 
-	public static String format(String s) {
-		return NEWLINE + padStart(s, ALIGN_COL, ' ') + ": ";
-	}
+	/** A newline plus the number of spaces to indent multiline log entries. */
+	public static final String LOG_INDENT = NEWLINE + Strings.repeat(" ", LOG_INDENT_SIZE);
 	
 	/**
 	 * Verifies that the supplied {@code String} is neither {@code null} or
-- 
GitLab