[Schmitzm-commits] r711 - in trunk/src: schmitzm/geotools/feature schmitzm/geotools/feature/resource/locales schmitzm/geotools/io schmitzm/jfree/feature/style schmitzm/lang schmitzm/swing/table skrueger/swing
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri Feb 19 02:09:41 CET 2010
Author: alfonx
Date: 2010-02-19 02:09:35 +0100 (Fri, 19 Feb 2010)
New Revision: 711
Modified:
trunk/src/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java
trunk/src/schmitzm/geotools/feature/resource/locales/FeatureResourceBundle_de.properties
trunk/src/schmitzm/geotools/io/GeoImportUtil.java
trunk/src/schmitzm/jfree/feature/style/FeatureBasicChartStyle.java
trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java
trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java
trunk/src/schmitzm/lang/LangUtil.java
trunk/src/schmitzm/swing/table/DoubleRenderer.java
trunk/src/skrueger/swing/CancellableTabbedDialogAdapter.java
trunk/src/skrueger/swing/ColorButton.java
trunk/src/skrueger/swing/TranslationEditJPanel.java
trunk/src/skrueger/swing/TranslationJTextField.java
Log:
Fine-tuning session with A + R
Modified: trunk/src/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java
===================================================================
--- trunk/src/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/geotools/feature/FeatureTypeBuilderTableModel.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -53,10 +53,8 @@
import schmitzm.geotools.gui.GeotoolsGUIUtil;
import schmitzm.swing.BooleanInputOption;
import schmitzm.swing.ExceptionDialog;
-import schmitzm.swing.InputOption;
import schmitzm.swing.ManualInputOption;
import schmitzm.swing.SelectionInputOption;
-import schmitzm.swing.event.InputOptionAdapter;
import schmitzm.swing.table.AbstractMutableTableModel;
import schmitzm.swing.table.ComponentRenderer;
import schmitzm.temp.BaseTypeUtil;
Modified: trunk/src/schmitzm/geotools/feature/resource/locales/FeatureResourceBundle_de.properties
===================================================================
--- trunk/src/schmitzm/geotools/feature/resource/locales/FeatureResourceBundle_de.properties 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/geotools/feature/resource/locales/FeatureResourceBundle_de.properties 2010-02-19 01:09:35 UTC (rev 711)
@@ -59,7 +59,7 @@
# --------------------------------------------------
# --- Restrictions for attribute names ---
-org.geotools.err.attr.name=Attribute-Name nicht zulässig
+org.geotools.err.attr.name=Attribute-Name nicht zul\u00e4ssig
org.geotools.err.attr.name.null=Attribute-Name darf nicht NULL sein!
org.geotools.err.attr.name.length=Attribut-Name darf maximal 10 Zeichen lang sein!
org.geotools.err.attr.name.start=Attribut-Name muss mit einem Zeichen (A-Z,a-z) beginnen!
Modified: trunk/src/schmitzm/geotools/io/GeoImportUtil.java
===================================================================
--- trunk/src/schmitzm/geotools/io/GeoImportUtil.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/geotools/io/GeoImportUtil.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -70,7 +70,6 @@
import org.geotools.gce.geotiff.GeoTiffReader;
import org.geotools.gce.image.WorldImageReader;
import org.geotools.geometry.Envelope2D;
-import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
Modified: trunk/src/schmitzm/jfree/feature/style/FeatureBasicChartStyle.java
===================================================================
--- trunk/src/schmitzm/jfree/feature/style/FeatureBasicChartStyle.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/jfree/feature/style/FeatureBasicChartStyle.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -36,8 +36,6 @@
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.xy.XYDataset;
-import org.opengis.feature.simple.SimpleFeature;
-import org.opengis.feature.simple.SimpleFeatureType;
import schmitzm.jfree.chart.style.BasicChartStyle;
import schmitzm.jfree.chart.style.ChartStyle;
Modified: trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java
===================================================================
--- trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -43,7 +43,6 @@
import org.opengis.feature.simple.SimpleFeatureType;
import schmitzm.jfree.chart.style.AbstractChartStyle;
-import schmitzm.jfree.chart.style.ChartAxisStyle;
import schmitzm.jfree.chart.style.ChartStyle;
import schmitzm.lang.LangUtil;
Modified: trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java
===================================================================
--- trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -278,18 +278,17 @@
SimpleFeature f = fi.next();
// Determine X value (NULL not permitted for XYDateset!)
Number xValue = (Number) f.getAttribute(xAttrName);
-
+
// Filter out NODATA values
xValue = chartStyle.filterNoDataValue(0, xValue);
if (xValue == null)
continue;
-
// Determine the Y values and fill the series
for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
String yAttrName = chartStyle.getAttributeName(attrIdx);
Number yValue = (Number) f.getAttribute(yAttrName);
-
+
// Filter out NoDataValues
yValue = chartStyle.filterNoDataValue(attrIdx, yValue);
if (yValue == null)
@@ -313,7 +312,7 @@
// Mapping between FID and data index in series
mapping.setMapping(f.getID(), yAttrName, datasetIdx++);
}
-
+
}
return dataset;
}
@@ -364,9 +363,23 @@
.getAttributeCount(); attrIdx++) {
if (chartStyle.isAttributeNormalized(attrIdx)) {
+
String attrName = chartStyle
.getAttributeName(attrIdx);
+ // SK: Since normalization is now usaually set for
+ // all
+ // attributes (even when they are not numeric), we
+ // double check here, whether it is really a numeric
+ // attribute
+ if (!Number.class.isAssignableFrom(f
+ .getFeatureType().getDescriptor(attrName)
+ .getType().getBinding())) {
+ continue;
+ }
+
+ // Look for a cached version of the Statistics or
+ // create a new one
StaticBin1D stat = attribStats.get(attrName);
if (stat == null) {
stat = new DynamicBin1D();
@@ -374,21 +387,20 @@
}
// Filter out NoDataValues
- Object rawValue = chartStyle.filterNoDataValue(attrIdx, f.getAttribute(attrName));
+ Object rawValue = chartStyle.filterNoDataValue(
+ attrIdx, f.getAttribute(attrName));
if (rawValue == null)
continue;
-// rawValue = ,
-// rawValue);
-
final Double doubleValue = new Double(
((Number) rawValue).doubleValue());
+
stat.add(doubleValue);
- // LOGGER.debug("Adding "+doubleValue+" and sd = "+stat.standardDeviation()+" and mean = "+stat.mean());
}
}
- } // Featuer iterator
- } finally {
+ }
+ } // Feature iterator
+ finally {
fc.close(fIt);
}
} // doNormlization
@@ -489,13 +501,13 @@
// Determine the category (NULL not permitted!)
Comparable<?> catValue = (Comparable<?>) f
.getAttribute(xAttrName);
-
+
// Filter out NODATA values
catValue = chartStyle.filterNoDataValue(0, catValue);
-
+
if (catValue == null)
continue;
-
+
// Determine the Y values and fill the dataset
for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
String yAttrName = chartStyle.getAttributeName(attrIdx);
Modified: trunk/src/schmitzm/lang/LangUtil.java
===================================================================
--- trunk/src/schmitzm/lang/LangUtil.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/lang/LangUtil.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -50,634 +50,808 @@
/**
* Diese Klasse stellt Hilfsfunktionen fuer Basisoperationen bereit.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ *
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ * (University of Bonn/Germany)
* @version 1.0
*/
public class LangUtil {
- /** {@link ResourceProvider}, der die Lokalisation fuer Komponenten
- * des Package {@code schmitzm.lang} zur Verfuegung stellt. Diese sind
- * in properties-Dateien unter {@code schmitzm.lang.resource.locales}
- * hinterlegt. */
- public static ResourceProvider RESOURCE = new ResourceProvider( extendPackagePath(LangUtil.class,"resource.locales.LangResourceBundle"), Locale.ENGLISH );
+ /**
+ * {@link ResourceProvider}, der die Lokalisation fuer Komponenten des
+ * Package {@code schmitzm.lang} zur Verfuegung stellt. Diese sind in
+ * properties-Dateien unter {@code schmitzm.lang.resource.locales}
+ * hinterlegt.
+ */
+ public static ResourceProvider RESOURCE = new ResourceProvider(
+ extendPackagePath(LangUtil.class,
+ "resource.locales.LangResourceBundle"), Locale.ENGLISH);
- /**
- * Liefert den einfachen Namen einer Klasse (ohne Package) oder den
- * String "null", falls das Objekt {@code null} ist
- * @param object ein Objekt
- * @param niemals {@code null}
- */
- public static String getSimpleClassName(Object object) {
- if ( object == null )
- return "null";
- return object.getClass().getSimpleName();
- }
+ /**
+ * Liefert den einfachen Namen einer Klasse (ohne Package) oder den String
+ * "null", falls das Objekt {@code null} ist
+ *
+ * @param object
+ * ein Objekt
+ * @param niemals
+ * {@code null}
+ */
+ public static String getSimpleClassName(Object object) {
+ if (object == null)
+ return "null";
+ return object.getClass().getSimpleName();
+ }
+ /**
+ * Prueft, ob ein {@link Enum} ein spezielles Feld besitzt.
+ *
+ * @param enumClass
+ * enum typ
+ * @param fieldName
+ * feld name
+ */
+ public static boolean checkEnumValue(Class<? extends Enum> enumClass,
+ String fieldName) {
+ try {
+ Enum.valueOf(enumClass, fieldName);
+ return true;
+ } catch (IllegalArgumentException err) {
+ return false;
+ }
+ }
- /**
- * Prueft, ob ein {@link Enum} ein spezielles Feld besitzt.
- * @param enumClass enum typ
- * @param fieldName feld name
- */
- public static boolean checkEnumValue(Class<? extends Enum> enumClass, String fieldName) {
- try {
- Enum.valueOf(enumClass, fieldName);
- return true;
- } catch (IllegalArgumentException err) {
- return false;
- }
- }
+ /**
+ * Fuegt alle Elemente eines Arrays in einen {@link Vector} ein. Wird als
+ * Vector <code>null</code> angegeben, wird ein neuer Vector erzeugt.
+ *
+ * @param obj
+ * einzufuegende Objekte
+ * @param vec
+ * Vector in den die Elemente eingefuegt werden (kann
+ * <code>null</code> sein)
+ * @return den Vector <code>vec</code> oder eine neue {@link Vector}-Instanz
+ */
+ public static Vector addObjectsToVector(Object[] obj, Vector vec) {
+ if (vec == null)
+ vec = new Vector();
+ for (int i = 0; i < obj.length; i++)
+ vec.add(obj[i]);
+ return vec;
+ }
- /**
- * Fuegt alle Elemente eines Arrays in einen {@link Vector} ein. Wird als Vector
- * <code>null</code> angegeben, wird ein neuer Vector erzeugt.
- * @param obj einzufuegende Objekte
- * @param vec Vector in den die Elemente eingefuegt werden (kann <code>null</code>
- * sein)
- * @return den Vector <code>vec</code> oder eine neue {@link Vector}-Instanz
- */
- public static Vector addObjectsToVector(Object[] obj, Vector vec) {
- if ( vec == null )
- vec = new Vector();
- for (int i=0; i<obj.length; i++)
- vec.add(obj[i]);
- return vec;
- }
+ /**
+ * Ersetzt alle Tabulator-Vorkommen in einem String durch Leerzeichen.
+ *
+ * @param source
+ * Quell-String
+ * @param tabLen
+ * Anzahl an Zeichen die ein Tabulator darstellt
+ */
+ public static String replaceTabulators(String source, int tabLen) {
+ String outString = new String(source);
+ char[] maxSpacePattern = new char[tabLen];
+ Arrays.fill(maxSpacePattern, ' ');
- /**
- * Ersetzt alle Tabulator-Vorkommen in einem String durch Leerzeichen.
- * @param source Quell-String
- * @param tabLen Anzahl an Zeichen die ein Tabulator darstellt
- */
- public static String replaceTabulators(String source, int tabLen) {
- String outString = new String(source);
- char[] maxSpacePattern = new char[tabLen];
- Arrays.fill(maxSpacePattern,' ');
+ for (int pos; (pos = outString.indexOf('\t')) >= 0;) {
+ outString = outString.replaceFirst("\t", String.valueOf(
+ maxSpacePattern, 0, tabLen - pos % tabLen));
+ }
+ return outString;
+ }
- for(int pos; (pos=outString.indexOf('\t')) >= 0;) {
- outString = outString.replaceFirst(
- "\t",
- String.valueOf(maxSpacePattern,0,tabLen-pos%tabLen)
- );
- }
- return outString;
- }
+ /**
+ * Haengt eine beliebige Anzahl von Strings hintereinander.
+ *
+ * @param str
+ * aneinanderzuhaengende Stings
+ */
+ public static String stringConcat(String... str) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; str != null && i < str.length; i++)
+ sb.append(str[i]);
+ return sb.toString();
+ }
- /**
- * Haengt eine beliebige Anzahl von Strings hintereinander.
- * @param str aneinanderzuhaengende Stings
- */
- public static String stringConcat(String... str) {
- StringBuffer sb = new StringBuffer();
- for (int i=0; str!=null && i<str.length; i++)
- sb.append(str[i]);
- return sb.toString();
- }
+ /**
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein.
+ *
+ * @param sep
+ * Trenner
+ * @param str
+ * aneinanderzuhaengende Stings
+ */
+ public static String stringConcatWithSep(String sep, String... str) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; str != null && i < str.length; i++) {
+ if (i > 0)
+ sb.append(sep);
+ sb.append(str[i]);
+ }
+ return sb.toString();
+ }
- /**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen
- * den Strings einen Trenner ein.
- * @param sep Trenner
- * @param str aneinanderzuhaengende Stings
- */
- public static String stringConcatWithSep(String sep, String... str) {
- StringBuffer sb = new StringBuffer();
- for (int i=0; str!=null && i<str.length; i++) {
- if ( i>0 )
- sb.append(sep);
- sb.append(str[i]);
- }
- return sb.toString();
- }
+ /**
+ * Erzeugt einen vorbelegten Array.
+ *
+ * @param count
+ * Groesse des Arrays
+ * @param value
+ * Wert mit dem die Elemente vorbelegt werden
+ */
+ public static int[] createArray(int count, int value) {
+ int[] array = new int[count];
+ java.util.Arrays.fill(array, value);
+ return array;
+ }
- /**
- * Erzeugt einen vorbelegten Array.
- * @param count Groesse des Arrays
- * @param value Wert mit dem die Elemente vorbelegt werden
- */
- public static int[] createArray(int count, int value) {
- int[] array = new int[count];
- java.util.Arrays.fill(array,value);
- return array;
- }
+ /**
+ * Erzeugt einen vorbelegten Array.
+ *
+ * @param count
+ * Groesse des Arrays
+ * @param value
+ * Wert mit dem die Elemente vorbelegt werden
+ */
+ public static long[] createArray(int count, long value) {
+ long[] array = new long[count];
+ java.util.Arrays.fill(array, value);
+ return array;
+ }
- /**
- * Erzeugt einen vorbelegten Array.
- * @param count Groesse des Arrays
- * @param value Wert mit dem die Elemente vorbelegt werden
- */
- public static long[] createArray(int count, long value) {
- long[] array = new long[count];
- java.util.Arrays.fill(array,value);
- return array;
- }
+ /**
+ * Erzeugt einen vorbelegten Array.
+ *
+ * @param count
+ * Groesse des Arrays
+ * @param value
+ * Wert mit dem die Elemente vorbelegt werden
+ */
+ public static float[] createArray(int count, float value) {
+ float[] array = new float[count];
+ java.util.Arrays.fill(array, value);
+ return array;
+ }
- /**
- * Erzeugt einen vorbelegten Array.
- * @param count Groesse des Arrays
- * @param value Wert mit dem die Elemente vorbelegt werden
- */
- public static float[] createArray(int count, float value) {
- float[] array = new float[count];
- java.util.Arrays.fill(array,value);
- return array;
- }
+ /**
+ * Erzeugt einen vorbelegten Array.
+ *
+ * @param count
+ * Groesse des Arrays
+ * @param value
+ * Wert mit dem die Elemente vorbelegt werden
+ */
+ public static double[] createArray(int count, double value) {
+ double[] array = new double[count];
+ java.util.Arrays.fill(array, value);
+ return array;
+ }
- /**
- * Erzeugt einen vorbelegten Array.
- * @param count Groesse des Arrays
- * @param value Wert mit dem die Elemente vorbelegt werden
- */
- public static double[] createArray(int count, double value) {
- double[] array = new double[count];
- java.util.Arrays.fill(array,value);
- return array;
- }
+ /**
+ * Erzeugt einen vorbelegten Array.
+ *
+ * @param count
+ * Groesse des Arrays
+ * @param value
+ * Wert mit dem die Elemente vorbelegt werden
+ */
+ public static String[] createArray(int count, String value) {
+ String[] array = new String[count];
+ java.util.Arrays.fill(array, value);
+ return array;
+ }
- /**
- * Erzeugt einen vorbelegten Array.
- * @param count Groesse des Arrays
- * @param value Wert mit dem die Elemente vorbelegt werden
- */
- public static String[] createArray(int count, String value) {
- String[] array = new String[count];
- java.util.Arrays.fill(array,value);
- return array;
- }
+ /**
+ * Erzeugt einen mehr-dimensionalen {@link Object}-Array.
+ *
+ * @param size
+ * Groesse der Array-Dimensionen
+ * @return einen {@code Object[]..[]}
+ */
+ public static Object createArray(int... size) {
+ switch (size.length) {
+ case 1:
+ return new Object[size[0]];
+ case 2:
+ return new Object[size[0]][size[1]];
+ case 3:
+ return new Object[size[0]][size[1]][size[2]];
+ case 4:
+ return new Object[size[0]][size[1]][size[2]][size[3]];
+ case 5:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]];
+ case 6:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]];
+ case 7:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]];
+ case 8:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]];
+ case 9:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]];
+ case 10:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]];
+ case 11:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]];
+ case 12:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]];
+ case 13:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]];
+ case 14:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]];
+ case 15:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]];
+ case 16:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]];
+ case 17:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]];
+ case 18:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]][size[17]];
+ case 19:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]][size[17]][size[18]];
+ case 20:
+ return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]][size[17]][size[18]][size[19]];
+ }
+ throw new IllegalArgumentException("Dimension not supported: "
+ + size.length);
+ }
- /**
- * Erzeugt einen mehr-dimensionalen {@link Object}-Array.
- * @param size Groesse der Array-Dimensionen
- * @return einen {@code Object[]..[]}
- */
- public static Object createArray(int... size) {
- switch ( size.length ) {
- case 1: return new Object[size[0]];
- case 2: return new Object[size[0]][size[1]];
- case 3: return new Object[size[0]][size[1]][size[2]];
- case 4: return new Object[size[0]][size[1]][size[2]][size[3]];
- case 5: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]];
- case 6: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]];
- case 7: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]];
- case 8: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]];
- case 9: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]];
- case 10: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]];
- case 11: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]];
- case 12: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]];
- case 13: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]];
- case 14: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]];
- case 15: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]];
- case 16: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]];
- case 17: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]];
- case 18: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]][size[17]];
- case 19: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]][size[17]][size[18]];
- case 20: return new Object[size[0]][size[1]][size[2]][size[3]][size[4]][size[5]][size[6]][size[7]][size[8]][size[9]][size[10]][size[11]][size[12]][size[13]][size[14]][size[15]][size[16]][size[17]][size[18]][size[19]];
- }
- throw new IllegalArgumentException("Dimension not supported: "+size.length);
- }
+ /**
+ * Liefert die Dimension eines multi-dimensionalen {@link Object}-Array.<br>
+ * <b>Diese Methode funktioniert nur, wenn das Element 0 in jeder Dimension
+ * belegt ist!</b>
+ *
+ * @param array
+ * multi-dim. Array (Instanz von {@code Object[]..[]})
+ * @exception ArrayIndexOutOfBoundsException
+ * wenn das 0te Element in einer Dimension mit {@code null}
+ * belegt ist
+ */
+ public static int getArrayDimension(Object array) {
+ int dim = 0;
+ try {
+ for (;; dim++) {
+ array = ((Object[]) array)[0];
+ }
+ } catch (ClassCastException err) {
+ }
+ return dim;
+ }
- /**
- * Liefert die Dimension eines multi-dimensionalen {@link Object}-Array.<br>
- * <b>Diese Methode funktioniert nur, wenn das Element 0 in jeder Dimension
- * belegt ist!</b>
- * @param array multi-dim. Array (Instanz von {@code Object[]..[]})
- * @exception ArrayIndexOutOfBoundsException wenn das 0te Element in einer
- * Dimension mit {@code null} belegt ist
- */
- public static int getArrayDimension(Object array) {
- int dim = 0;
- try {
- for (;; dim++) {
- array = ((Object[])array)[0];
- }
- } catch (ClassCastException err) {
- }
- return dim;
- }
+ /**
+ * Liefert die Groessen der einzelnen Dimensionen eines multi-dimensionalen
+ * {@link Object}-Array.<br>
+ * <b>Diese Methode funktioniert nur, wenn das Element 0 in jeder Dimension
+ * belegt ist!</b>
+ *
+ * @param array
+ * multi-dim. Array (Instanz von {@code Object[]..[]})
+ * @exception ArrayIndexOutOfBoundsException
+ * wenn das 0te Element in einer Dimension mit {@code null}
+ * belegt ist
+ */
+ public static int[] getArrayLength(Object array) {
+ int[] dimSize = new int[getArrayDimension(array)];
+ for (int d = 0; d < dimSize.length; d++) {
+ dimSize[d] = ((Object[]) array).length;
+ array = ((Object[]) array)[0];
+ }
+ return dimSize;
+ }
- /**
- * Liefert die Groessen der einzelnen Dimensionen eines multi-dimensionalen
- * {@link Object}-Array.<br>
- * <b>Diese Methode funktioniert nur, wenn das Element 0 in jeder Dimension
- * belegt ist!</b>
- * @param array multi-dim. Array (Instanz von {@code Object[]..[]})
- * @exception ArrayIndexOutOfBoundsException wenn das 0te Element in einer
- * Dimension mit {@code null} belegt ist
- */
- public static int[] getArrayLength(Object array) {
- int[] dimSize = new int[ getArrayDimension(array) ];
- for (int d=0; d<dimSize.length; d++) {
- dimSize[d] = ((Object[])array).length;
- array = ( (Object[]) array)[0];
- }
- return dimSize;
- }
+ /**
+ * Liefert einen Wert aus einem multi-dimensionalen {@link Object}-Array.
+ *
+ * @param array
+ * multi-dim. Array (Instanz von {@code Object[]..[]})
+ * @param coord
+ * Koordinaten des Arrays
+ * @exception ArrayIndexOutOfBoundsException
+ * wenn eine fehlerhafte Koordinate angegeben wird
+ */
+ public static Object getArrayValue(Object array, int... coord) {
+ for (int i = 0; i < coord.length; i++)
+ array = ((Object[]) array)[coord[i]];
+ return array;
+ }
- /**
- * Liefert einen Wert aus einem multi-dimensionalen {@link Object}-Array.
- * @param array multi-dim. Array (Instanz von {@code Object[]..[]})
- * @param coord Koordinaten des Arrays
- * @exception ArrayIndexOutOfBoundsException wenn eine fehlerhafte Koordinate
- * angegeben wird
- */
- public static Object getArrayValue(Object array, int... coord) {
- for (int i=0; i<coord.length; i++)
- array = ((Object[])array)[ coord[i] ];
- return array;
- }
+ /**
+ * Setzt einen Wert aus einem multi-dimensionalen {@link Object}-Array.
+ *
+ * @param array
+ * multi-dim. Array (Instanz von {@code Object[]..[]})
+ * @param value
+ * zu setzender Wert (Instanz von {@code Object[]..[]})
+ * @param coord
+ * Koordinaten des Arrays
+ * @exception ArrayIndexOutOfBoundsException
+ * wenn eine fehlerhafte Koordinate angegeben wird
+ */
+ public static void setArrayValue(Object array, Object value, int... coord) {
+ for (int i = 0; i < coord.length - 1; i++)
+ array = ((Object[]) array)[coord[i]];
+ ((Object[]) array)[coord[coord.length - 1]] = value;
+ }
- /**
- * Setzt einen Wert aus einem multi-dimensionalen {@link Object}-Array.
- * @param array multi-dim. Array (Instanz von {@code Object[]..[]})
- * @param value zu setzender Wert (Instanz von {@code Object[]..[]})
- * @param coord Koordinaten des Arrays
- * @exception ArrayIndexOutOfBoundsException wenn eine fehlerhafte Koordinate
- * angegeben wird
- */
- public static void setArrayValue(Object array, Object value, int... coord) {
- for (int i=0; i<coord.length-1; i++)
- array = ((Object[])array)[ coord[i] ];
- ((Object[])array)[ coord[coord.length-1] ] = value;
- }
+ /**
+ * Kopiert einen Array (aber nicht dessen Elemente). Darueberhinaus koennen
+ * (einige) Elemente direkt neu belegt werden. Ist das Flag {@code replNull}
+ * auf {@code false} gesetzt, werden {@code null}-Werte in {@code replElem}
+ * ignoriert. So ist es z.B. moeglich, nur das 4. und 5. Element im neuen
+ * Array neu zu belegen und die davor liegenden Elemente unangetastet zu
+ * lassen.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replNull
+ * Bestimmt, ob {@code null}-Elemente von {@code replElem} im
+ * neuen Array gesetzt werden ({@code true}) oder nicht
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static <T> T[] cloneArray(T[] source, boolean replNull,
+ T... replElem) {
+ T[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length,
+ replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ if (replNull || replElem[i] != null)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array (aber nicht dessen Elemente). Darueberhinaus koennen
- * (einige) Elemente direkt neu belegt werden. Ist das Flag {@code replNull}
- * auf {@code false} gesetzt, werden {@code null}-Werte in {@code replElem}
- * ignoriert. So ist es z.B. moeglich, nur das 4. und 5. Element im neuen
- * Array neu zu belegen und die davor liegenden Elemente unangetastet zu lassen.
- * @param source zu kopierender Array
- * @param replNull Bestimmt, ob {@code null}-Elemente von {@code replElem}
- * im neuen Array gesetzt werden ({@code true}) oder nicht
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static <T> T[] cloneArray(T[] source, boolean replNull, T... replElem) {
- T[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- if (replNull || replElem[i] != null)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array (aber nicht dessen Elemente). Darueberhinaus koennen
+ * (einige) Elemente direkt neu belegt werden.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static <T> T[] cloneArray(T[] source, T... replElem) {
+ return cloneArray(source, true, replElem);
+ }
- /**
- * Kopiert einen Array (aber nicht dessen Elemente). Darueberhinaus koennen
- * (einige) Elemente direkt neu belegt werden.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static <T> T[] cloneArray(T[] source, T... replElem) {
- return cloneArray(source,true,replElem);
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static long[] cloneArray(long[] source, long... replElem) {
+ long[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static long[] cloneArray(long[] source, long... replElem) {
- long[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static int[] cloneArray(int[] source, int... replElem) {
+ int[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static int[] cloneArray(int[] source, int... replElem) {
- int[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static short[] cloneArray(short[] source, short... replElem) {
+ short[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static short[] cloneArray(short[] source, short... replElem) {
- short[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static byte[] cloneArray(byte[] source, byte... replElem) {
+ byte[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static byte[] cloneArray(byte[] source, byte... replElem) {
- byte[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static double[] cloneArray(double[] source, double... replElem) {
+ double[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static double[] cloneArray(double[] source, double... replElem) {
- double[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static float[] cloneArray(float[] source, float... replElem) {
+ float[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static float[] cloneArray(float[] source, float... replElem) {
- float[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static boolean[] cloneArray(boolean[] source, boolean... replElem) {
+ boolean[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static boolean[] cloneArray(boolean[] source, boolean... replElem) {
- boolean[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Kopiert einen Array und belegt (einige) Elemente direkt neu.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param replElem
+ * Elemente (beginnend bei Index 0), die nach dem Kopieren im
+ * Array neu gesetzt werden
+ * @return Array von der Groesse {@code max(source.length, replElem.length)}
+ */
+ public static char[] cloneArray(char[] source, char... replElem) {
+ char[] newArray = java.util.Arrays.copyOf(source, Math.max(
+ source.length, replElem.length));
+ for (int i = 0; i < replElem.length; i++)
+ newArray[i] = replElem[i];
+ return newArray;
+ }
- /**
- * Kopiert einen Array und belegt (einige) Elemente direkt neu.
- * @param source zu kopierender Array
- * @param replElem Elemente (beginnend bei Index 0), die nach dem Kopieren
- * im Array neu gesetzt werden
- * @return Array von der Groesse {@code max(source.length, replElem.length)}
- */
- public static char[] cloneArray(char[] source, char... replElem) {
- char[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
- for (int i=0; i<replElem.length; i++)
- newArray[i] = replElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static <T> T[] extendArray(T[] source, T... newElem) {
+ T[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static <T> T[] extendArray(T[] source, T... newElem) {
- T[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static long[] extendArray(long[] source, long... newElem) {
+ long[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static long[] extendArray(long[] source, long... newElem) {
- long[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static int[] extendArray(int[] source, int... newElem) {
+ int[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static int[] extendArray(int[] source, int... newElem) {
- int[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static short[] extendArray(short[] source, short... newElem) {
+ short[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static short[] extendArray(short[] source, short... newElem) {
- short[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static byte[] extendArray(byte[] source, byte... newElem) {
+ byte[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static byte[] extendArray(byte[] source, byte... newElem) {
- byte[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static double[] extendArray(double[] source, double... newElem) {
+ double[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static double[] extendArray(double[] source, double... newElem) {
- double[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static float[] extendArray(float[] source, float... newElem) {
+ float[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static float[] extendArray(float[] source, float... newElem) {
- float[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static boolean[] extendArray(boolean[] source, boolean... newElem) {
+ boolean[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static boolean[] extendArray(boolean[] source, boolean... newElem) {
- boolean[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Erweitert einen Array.
+ *
+ * @param source
+ * zu kopierender Array
+ * @param newElem
+ * Elemente, die an das Ende des Arrays angehaengt werden
+ * @return Array von der Groesse {@code source.length + newElem.length}
+ */
+ public static char[] extendArray(char[] source, char... newElem) {
+ char[] newArray = java.util.Arrays.copyOf(source, source.length
+ + newElem.length);
+ for (int i = 0; i < newElem.length; i++)
+ newArray[source.length + i] = newElem[i];
+ return newArray;
+ }
- /**
- * Erweitert einen Array.
- * @param source zu kopierender Array
- * @param newElem Elemente, die an das Ende des Arrays angehaengt werden
- * @return Array von der Groesse {@code source.length + newElem.length}
- */
- public static char[] extendArray(char[] source, char... newElem) {
- char[] newArray = java.util.Arrays.copyOf(source, source.length+newElem.length);
- for (int i=0; i<newElem.length; i++)
- newArray[source.length+i] = newElem[i];
- return newArray;
- }
+ /**
+ * Liefert die Klassen-Namen zu einem Array von Klassen.
+ *
+ * @param clazz
+ * Klassen
+ * @param simple
+ * gibt an, ob der einfache Klassenname ({@code true}) oder der
+ * komplette Klassenname inkl. Paketname ({@code false})
+ * zurueckgegeben wird.
+ */
+ public static String[] getClassNames(Class[] clazz, boolean simple) {
+ String[] className = new String[clazz.length];
+ for (int i = 0; i < className.length; i++)
+ className[i] = simple ? clazz[i].getSimpleName() : clazz[i]
+ .getName();
+ return className;
+ }
- /**
- * Liefert die Klassen-Namen zu einem Array von Klassen.
- * @param clazz Klassen
- * @param simple gibt an, ob der einfache Klassenname ({@code true}) oder der
- * komplette Klassenname inkl. Paketname ({@code false})
- * zurueckgegeben wird.
- */
- public static String[] getClassNames(Class[] clazz, boolean simple) {
- String[] className = new String[clazz.length];
- for (int i=0; i<className.length; i++)
- className[i] = simple ? clazz[i].getSimpleName() : clazz[i].getName();
- return className;
- }
+ /**
+ * Ruft die Java Garbage Collection auf.
+ *
+ * @return Anzahl an Bytes, die durch den Aufruf der Garbage Collection
+ * freigegeben wurden
+ * @see Runtime#gc()
+ * @see Runtime#freeMemory()
+ */
+ public static long gc() {
+ Runtime runtime = Runtime.getRuntime();
+ long prevFreeMem = runtime.freeMemory();
+ runtime.gc();
+ return runtime.freeMemory() - prevFreeMem;
+ }
- /**
- * Ruft die Java Garbage Collection auf.
- * @return Anzahl an Bytes, die durch den Aufruf der Garbage Collection
- * freigegeben wurden
- * @see Runtime#gc()
- * @see Runtime#freeMemory()
- */
- public static long gc() {
- Runtime runtime = Runtime.getRuntime();
- long prevFreeMem = runtime.freeMemory();
- runtime.gc();
- return runtime.freeMemory() - prevFreeMem;
- }
+ /**
+ * Ruft die Java Garbage Collection solange auf, bis kein Speicher mehr
+ * freigegeben werden kann.
+ *
+ * @return Gesamt-Anzahl an Bytes, die durch die Aufrufe der Garbage
+ * Collection freigegeben wurden
+ * @see #gc()
+ */
+ public static long gcTotal() {
+ long totalFreedMem = 0;
+ for (long freedMem = 0; (freedMem = gc()) > 0;)
+ totalFreedMem += freedMem;
+ return totalFreedMem;
+ }
- /**
- * Ruft die Java Garbage Collection solange auf, bis kein Speicher mehr
- * freigegeben werden kann.
- * @return Gesamt-Anzahl an Bytes, die durch die Aufrufe der Garbage Collection
- * freigegeben wurden
- * @see #gc()
- */
- public static long gcTotal() {
- long totalFreedMem = 0;
- for ( long freedMem=0; (freedMem = gc()) > 0; )
- totalFreedMem += freedMem;
- return totalFreedMem;
- }
+ /**
+ * Erzeugt einen neuen {@link URLClassLoader}, der vom
+ * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoaders}
+ * abgeleitet ist.
+ *
+ * @param searchPath
+ * Pfade, in denen der ClassLoader nach Klassen sucht
+ */
+ public static ClassLoader createClassLoader(URL[] searchPath) {
+ return URLClassLoader.newInstance(searchPath, ClassLoader
+ .getSystemClassLoader());
+ }
- /**
- * Erzeugt einen neuen {@link URLClassLoader}, der vom
- * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoaders}
- * abgeleitet ist.
- * @param searchPath Pfade, in denen der ClassLoader nach Klassen sucht
- */
- public static ClassLoader createClassLoader(URL[] searchPath) {
- return URLClassLoader.newInstance( searchPath, ClassLoader.getSystemClassLoader() );
- }
+ /**
+ * Erzeugt einen neuen {@link URLClassLoader}, der vom
+ * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoaders}
+ * abgeleitet ist.
+ *
+ * @param searchPath
+ * Pfad, in denm der ClassLoader nach Klassen sucht
+ */
+ public static ClassLoader createClassLoader(URL searchPath) {
+ return createClassLoader(new URL[] { searchPath });
+ }
- /**
- * Erzeugt einen neuen {@link URLClassLoader}, der vom
- * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoaders}
- * abgeleitet ist.
- * @param searchPath Pfad, in denm der ClassLoader nach Klassen sucht
- */
- public static ClassLoader createClassLoader(URL searchPath) {
- return createClassLoader( new URL[] {searchPath} );
- }
+ /**
+ * Laed eine Klasse. Ggf. wird hierfuer ein neuer {@link ClassLoader}
+ * erzeugt.
+ *
+ * @param clazz
+ * Klassenname (inkl. Paket)
+ * @param searchPath
+ * Pfade, in denen der ClassLoader nach Klassen sucht (wenn
+ * <code>null</code>, wird der
+ * {@linkplain ClassLoader#getSystemClassLoader()
+ * System-ClassLoader} zum Laden der Klasse verwendet)
+ */
+ public static Class loadClass(String clazz, URL[] searchPath)
+ throws ClassNotFoundException {
+ if (searchPath == null)
+ return Class.forName(clazz);
+ return createClassLoader(searchPath).loadClass(clazz);
+ }
- /**
- * Laed eine Klasse. Ggf. wird hierfuer ein neuer {@link ClassLoader}
- * erzeugt.
- * @param clazz Klassenname (inkl. Paket)
- * @param searchPath Pfade, in denen der ClassLoader nach Klassen sucht
- * (wenn <code>null</code>, wird der
- * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoader}
- * zum Laden der Klasse verwendet)
- */
- public static Class loadClass(String clazz, URL[] searchPath) throws ClassNotFoundException {
- if ( searchPath == null )
- return Class.forName(clazz);
- return createClassLoader(searchPath).loadClass(clazz);
- }
+ /**
+ * Laed eine Klasse. Ggf. wird hierfuer ein neuer {@link ClassLoader}
+ * erzeugt.
+ *
+ * @param clazz
+ * Klassenname (inkl. Paket)
+ * @param searchPath
+ * Pfad, in dem der ClassLoader nach Klassen sucht (wenn
+ * <code>null</code>, wird der
+ * {@linkplain ClassLoader#getSystemClassLoader()
+ * System-ClassLoader} zum Laden der Klasse verwendet)
+ */
+ public static Class loadClass(String clazz, URL searchPath)
+ throws ClassNotFoundException {
+ if (searchPath == null)
+ return Class.forName(clazz);
+ return createClassLoader(searchPath).loadClass(clazz);
+ }
- /**
- * Laed eine Klasse. Ggf. wird hierfuer ein neuer {@link ClassLoader}
- * erzeugt.
- * @param clazz Klassenname (inkl. Paket)
- * @param searchPath Pfad, in dem der ClassLoader nach Klassen sucht
- * (wenn <code>null</code>, wird der
- * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoader}
- * zum Laden der Klasse verwendet)
- */
- public static Class loadClass(String clazz, URL searchPath) throws ClassNotFoundException {
- if ( searchPath == null )
- return Class.forName(clazz);
- return createClassLoader(searchPath).loadClass(clazz);
- }
-
- /**
- *
- * Laed eine Klasse derart das Klassen im Cache ignoriert werden. Dazu ist es erforderlich
- * das unter dem Parameter <code>searchPath</code> eine Verzeichnis "META-INF" vorhanden ist.
- * Darin muss eine Datei "PREFERRED.LIST" sein. Wie genau diese Datei aufgebaut sein muss, lässt
- * sich in der Dokumentation des {@link PreferredClassLoader PreferredClassLoaders} nachlesen.
- *
- * @param classname Klassenname (inkl. Paket)
- * @param searchPath Pfad, in dem der ClassLoader nach Klassen sucht
- * (wenn <code>null</code>, wird der System-Klassenpfad
- * {@linkplain ClassLoader#getSystemResource(String) ClassLoader.getSystemResource("")}
- * zum Laden der Klasse verwendet)
+ /**
+ *
+ * Laed eine Klasse derart das Klassen im Cache ignoriert werden. Dazu ist
+ * es erforderlich das unter dem Parameter <code>searchPath</code> eine
+ * Verzeichnis "META-INF" vorhanden ist. Darin muss eine Datei
+ * "PREFERRED.LIST" sein. Wie genau diese Datei aufgebaut sein muss, lässt
+ * sich in der Dokumentation des {@link PreferredClassLoader
+ * PreferredClassLoaders} nachlesen.
+ *
+ * @param classname
+ * Klassenname (inkl. Paket)
+ * @param searchPath
+ * Pfad, in dem der ClassLoader nach Klassen sucht (wenn
+ * <code>null</code>, wird der System-Klassenpfad
+ * {@linkplain ClassLoader#getSystemResource(String)
+ * ClassLoader.getSystemResource("")} zum Laden der Klasse
+ * verwendet)
* @throws ClassNotFoundException
* @see PreferredClassLoader
- *
- * @author Dominik Appl
+ *
+ * @author Dominik Appl
*/
public static Class loadPreferredClass(String classname, URL searchPath)
throws ClassNotFoundException {
- if ( searchPath == null )
- // System-Klassenpfad verwenden
- searchPath = ClassLoader.getSystemResource("");
+ if (searchPath == null)
+ // System-Klassenpfad verwenden
+ searchPath = ClassLoader.getSystemResource("");
PreferredClassLoader classLoader = new PreferredClassLoader(
- new URL[]{searchPath}, Thread.currentThread()
+ new URL[] { searchPath }, Thread.currentThread()
.getContextClassLoader(), null, false);
Class loadedClass = classLoader.loadClass(classname);
if (loadedClass == null)
@@ -686,362 +860,471 @@
return loadedClass;
}
- /**
- * Laed eine Klasse neu und erzeugt eine Objekt-Instanz. Als Suchpfad fuer
- * die Klasse der System-Klassenpfad
- * {@linkplain ClassLoader#getSystemResource(String) ClassLoader.getSystemResource("")}
- * verwendet.
- * @param classname Klassenname (inkl. Paket)
- * @param param Parameter fuer den Konstruktor-Aufruf
- * @exception RuntimeException falls irgendein Fehler auftritt
- */
- public static Object loadPreferredObject(String classname, Object... param) {
- return loadPreferredObject(classname,null,param);
- }
+ /**
+ * Laed eine Klasse neu und erzeugt eine Objekt-Instanz. Als Suchpfad fuer
+ * die Klasse der System-Klassenpfad
+ * {@linkplain ClassLoader#getSystemResource(String)
+ * ClassLoader.getSystemResource("")} verwendet.
+ *
+ * @param classname
+ * Klassenname (inkl. Paket)
+ * @param param
+ * Parameter fuer den Konstruktor-Aufruf
+ * @exception RuntimeException
+ * falls irgendein Fehler auftritt
+ */
+ public static Object loadPreferredObject(String classname, Object... param) {
+ return loadPreferredObject(classname, null, param);
+ }
- /**
- * Laed eine Klasse neu und erzeugt eine Objekt-Instanz.
- * @param classname Klassenname (inkl. Paket)
- * @param searchPath Pfad, in dem der ClassLoader nach Klassen sucht
- * (wenn <code>null</code>, wird der System-Klassenpfad
- * {@linkplain ClassLoader#getSystemResource(String) ClassLoader.getSystemResource("")}
- * zum Laden der Klasse verwendet)
- * @param param Parameter fuer den Konstruktor-Aufruf
- * @exception RuntimeException falls irgendein Fehler auftritt
- */
- public static Object loadPreferredObject(String classname, URL searchPath, Object... param) {
- try {
- // Klasse laden
- Class clazz = loadPreferredClass(classname,searchPath);
-// // Klassen der Konstruktor-Parameter ermitteln
-// Class[] paramClass = new Class[ param.length ];
-// for (int i=0; i<paramClass.length; i++)
-// paramClass[i] = param[i].getClass();
-// // Konstruktor fuer Parameter ermitteln (erfordert exakes Matching
-// // zwischen den Klassen der uebergebenen Parameter und der Klassen
-// // der Konstruktor-Parameter!)
-// Constructor constructor = clazz.getConstructor(paramClass);
- // Konstruktor fuer Parameter ausprobieren
- for ( Constructor constructor : clazz.getConstructors() )
- try {
- return constructor.newInstance(param);
- } catch (IllegalArgumentException err) {
- }
- // kein passender Konstruktor gefunden
- throw new UnsupportedOperationException("No matching constructor found...");
- } catch (Exception err) {
- throw new RuntimeException(err);
- }
- }
+ /**
+ * Laed eine Klasse neu und erzeugt eine Objekt-Instanz.
+ *
+ * @param classname
+ * Klassenname (inkl. Paket)
+ * @param searchPath
+ * Pfad, in dem der ClassLoader nach Klassen sucht (wenn
+ * <code>null</code>, wird der System-Klassenpfad
+ * {@linkplain ClassLoader#getSystemResource(String)
+ * ClassLoader.getSystemResource("")} zum Laden der Klasse
+ * verwendet)
+ * @param param
+ * Parameter fuer den Konstruktor-Aufruf
+ * @exception RuntimeException
+ * falls irgendein Fehler auftritt
+ */
+ public static Object loadPreferredObject(String classname, URL searchPath,
+ Object... param) {
+ try {
+ // Klasse laden
+ Class clazz = loadPreferredClass(classname, searchPath);
+ // // Klassen der Konstruktor-Parameter ermitteln
+ // Class[] paramClass = new Class[ param.length ];
+ // for (int i=0; i<paramClass.length; i++)
+ // paramClass[i] = param[i].getClass();
+ // // Konstruktor fuer Parameter ermitteln (erfordert exakes
+ // Matching
+ // // zwischen den Klassen der uebergebenen Parameter und der
+ // Klassen
+ // // der Konstruktor-Parameter!)
+ // Constructor constructor = clazz.getConstructor(paramClass);
+ // Konstruktor fuer Parameter ausprobieren
+ for (Constructor constructor : clazz.getConstructors())
+ try {
+ return constructor.newInstance(param);
+ } catch (IllegalArgumentException err) {
+ }
+ // kein passender Konstruktor gefunden
+ throw new UnsupportedOperationException(
+ "No matching constructor found...");
+ } catch (Exception err) {
+ throw new RuntimeException(err);
+ }
+ }
+ /**
+ * Liefert das Package einer Klasse erweitert um einen relativen Pfad in
+ * Punkt-Notation.
+ *
+ * @param clazz
+ * eine Klasse
+ * @param pathExt
+ * Erweiterung des Pfads
+ */
+ public static String extendPackagePath(Class clazz, String pathExt) {
+ String packagePath = clazz.getPackage().getName();
+ if (pathExt != null && !pathExt.trim().equals(""))
+ packagePath += "." + pathExt;
+ return packagePath;
+ }
- /**
- * Liefert das Package einer Klasse erweitert um einen relativen Pfad
- * in Punkt-Notation.
- * @param clazz eine Klasse
- * @param pathExt Erweiterung des Pfads
- */
- public static String extendPackagePath(Class clazz, String pathExt) {
- String packagePath = clazz.getPackage().getName();
- if ( pathExt != null && !pathExt.trim().equals("") )
- packagePath += "." + pathExt;
- return packagePath;
- }
+ /**
+ * Prueft einen Identifier auf Korrektheit.
+ *
+ * @param identifier
+ * Identifier
+ * @exception IllegalArgumentException
+ * falls der Identifier nicht-erlaubte Zeichen enthaelt
+ * @see Character#isJavaIdentifierStart(char)
+ * @see Character#isJavaIdentifierPart(char)
+ */
+ public static void checkIdentifierAndError(String identifier) {
+ if (!Character.isJavaIdentifierStart(identifier.charAt(0)))
+ throw new IllegalArgumentException("Illegal first character '"
+ + identifier.charAt(0) + "'");
+ for (int i = 1; i < identifier.length(); i++) {
+ char c = identifier.charAt(i);
+ if (!Character.isJavaIdentifierPart(c))
+ throw new IllegalArgumentException("Illegal inner character '"
+ + c + "'");
+ }
+ }
+ /**
+ * Prueft einen Identifier auf Korrektheit.
+ *
+ * @param identifier
+ * Identifier
+ * @see #checkIdentifierAndError(String)
+ */
+ public static boolean checkIdentifier(String identifier) {
+ try {
+ checkIdentifierAndError(identifier);
+ return true;
+ } catch (Exception err) {
+ return false;
+ }
+ }
- /**
- * Prueft einen Identifier auf Korrektheit.
- * @param identifier Identifier
- * @exception IllegalArgumentException falls der Identifier nicht-erlaubte
- * Zeichen enthaelt
- * @see Character#isJavaIdentifierStart(char)
- * @see Character#isJavaIdentifierPart(char)
- */
- public static void checkIdentifierAndError(String identifier) {
- if ( !Character.isJavaIdentifierStart( identifier.charAt(0) ) )
- throw new IllegalArgumentException("Illegal first character '"+identifier.charAt(0)+"'");
- for (int i=1; i<identifier.length(); i++) {
- char c = identifier.charAt(i);
- if ( !Character.isJavaIdentifierPart(c) )
- throw new IllegalArgumentException("Illegal inner character '"+c+"'");
- }
- }
+ /**
+ * Sortiert einen Array aus beliebigen Objekten nach der natuerlichen
+ * Sortierung ihrer {@code toString()}-Werte.
+ *
+ * @param objects
+ * Objekte
+ */
+ public static void sort(Object[] objects) {
+ Arrays.sort(objects, new Comparator<Object>() {
+ public int compare(Object c1, Object c2) {
+ return c1.toString().compareTo(c2.toString());
+ }
+ });
+ }
- /**
- * Prueft einen Identifier auf Korrektheit.
- * @param identifier Identifier
- * @see #checkIdentifierAndError(String)
- */
- public static boolean checkIdentifier(String identifier) {
- try {
- checkIdentifierAndError(identifier);
- return true;
- } catch ( Exception err ) {
- return false;
- }
- }
+ /**
+ * Returns the maximum value of some integer collections.
+ *
+ * @param defMaxValue
+ * value taken as maximum if a collection is empty
+ * @param collections
+ * some collections
+ */
+ public static int max(int defMaxValue, Collection<Integer>... collections) {
+ int maxValue = defMaxValue;
+ for (Collection<Integer> collection : collections) {
+ int collMax = defMaxValue;
+ if (collection != null && !collection.isEmpty())
+ collMax = Collections.max(collection);
+ maxValue = Math.max(maxValue, collMax);
+ }
+ return maxValue;
+ }
- /**
- * Sortiert einen Array aus beliebigen Objekten nach der natuerlichen
- * Sortierung ihrer {@code toString()}-Werte.
- * @param objects Objekte
- */
- public static void sort(Object[] objects) {
- Arrays.sort( objects, new Comparator<Object>() {
- public int compare(Object c1, Object c2) {
- return c1.toString().compareTo(c2.toString());
- }
- });
- }
-
- /**
- * Returns the maximum value of some integer collections.
- * @param defMaxValue value taken as maximum if a collection is empty
- * @param collections some collections
- */
- public static int max(int defMaxValue, Collection<Integer>... collections) {
- int maxValue = defMaxValue;
- for (Collection<Integer> collection : collections) {
- int collMax = defMaxValue;
- if ( collection != null && !collection.isEmpty() )
- collMax = Collections.max(collection);
- maxValue = Math.max( maxValue, collMax );
- }
- return maxValue;
- }
-
- /**
- * Returns the maximum value of some integer collections. If
- * a collection is empty, 0 is taken as its maximum value.
- * @param collections some collections
- */
- public static int max(Collection<Integer>... collections) {
- return max(0,collections);
- }
+ /**
+ * Returns the maximum value of some integer collections. If a collection is
+ * empty, 0 is taken as its maximum value.
+ *
+ * @param collections
+ * some collections
+ */
+ public static int max(Collection<Integer>... collections) {
+ return max(0, collections);
+ }
- /**
- * Returns the minimum value of some integer collections.
- * @param defMinValue value taken as minimum if a collection is empty
- * @param collections some collections
- */
- public static int min(int defMinValue, Collection<Integer>... collections) {
- int minValue = defMinValue;
- for (Collection<Integer> collection : collections) {
- int collMin = defMinValue;
- if ( collection != null && !collection.isEmpty() )
- collMin = Collections.min(collection);
- minValue = Math.min( minValue, collMin );
- }
- return minValue;
- }
-
- /**
- * Returns the minimum value of some integer collections. If
- * a collection is empty, 0 is taken as its minimum value.
- * @param collections some collections
- */
- public static int min(Collection<Integer>... collections) {
- return min(0,collections);
- }
+ /**
+ * Returns the minimum value of some integer collections.
+ *
+ * @param defMinValue
+ * value taken as minimum if a collection is empty
+ * @param collections
+ * some collections
+ */
+ public static int min(int defMinValue, Collection<Integer>... collections) {
+ int minValue = defMinValue;
+ for (Collection<Integer> collection : collections) {
+ int collMin = defMinValue;
+ if (collection != null && !collection.isEmpty())
+ collMin = Collections.min(collection);
+ minValue = Math.min(minValue, collMin);
+ }
+ return minValue;
+ }
- /**
- * Rundet einen Wert auf Nach- oder Vorkommastellen.
- * @param value Wert
- * @param digits Anzahl an Nachkommastellen (negative Werte runden auf
- * Vorkommastellen, also 10er-, 100er-, usw. Stelle)
- * @param mode Modus für das Runden (0 = normal Runden, 1 = Aufrunden, -1 = Abrunden;
- * wenn nicht angegeben, wird normal gerundet)
- */
- public static double round(double value, int digits, int... mode) {
- int roundMode = 0; // Default: Normal-Runden
- if ( mode.length > 0 )
- roundMode = mode[0];
+ /**
+ * Returns the minimum value of some integer collections. If a collection is
+ * empty, 0 is taken as its minimum value.
+ *
+ * @param collections
+ * some collections
+ */
+ public static int min(Collection<Integer>... collections) {
+ return min(0, collections);
+ }
- // 10er-Potenz fuer Nachkommestellen bilden um vor dem Runden
- // die Nachkommastellen "vor das Komma" zu schieben
- double digitsFactor = Math.pow(10, digits);
- value = value * digitsFactor;
- // Runden
- if ( roundMode < 0 )
- value = Math.floor(value);
- else if ( roundMode > 0 )
- value = Math.ceil(value);
- else
- value = Math.round(value);
+ /**
+ * Rundet einen Wert auf Nach- oder Vorkommastellen.
+ *
+ * @param value
+ * Wert
+ * @param digits
+ * Anzahl an Nachkommastellen (negative Werte runden auf
+ * Vorkommastellen, also 10er-, 100er-, usw. Stelle)
+ * @param mode
+ * Modus für das Runden (0 = normal Runden, 1 = Aufrunden, -1 =
+ * Abrunden; wenn nicht angegeben, wird normal gerundet)
+ */
+ public static double round(double value, int digits, int... mode) {
+ int roundMode = 0; // Default: Normal-Runden
+ if (mode.length > 0)
+ roundMode = mode[0];
- // Nachkommastellen wieder hinter das Komma schieben
- return value / digitsFactor;
- }
+ // 10er-Potenz fuer Nachkommestellen bilden um vor dem Runden
+ // die Nachkommastellen "vor das Komma" zu schieben
+ double digitsFactor = Math.pow(10, digits);
+ value = value * digitsFactor;
+ // Runden
+ if (roundMode < 0)
+ value = Math.floor(value);
+ else if (roundMode > 0)
+ value = Math.ceil(value);
+ else
+ value = Math.round(value);
- /**
- * Rundet alle Werte einer {@link Collection} auf Nach- oder Vorkommastellen.<br>
- * <b>Achtung:</b><br>
- * Es wird eine neue {@link Collection} des gleichen Typs erzeugt und die
- * gerundeten Werte darin in der Reihenfolge eingefuegt, wie sie von
- * {@link Collection#iterator()} geliefert werden! Unter umstaenden kann
- * die urspruengliche Sortierung verloren gehen! Diese Methode sollte also
- * im Zweifelsfall nur auf automatisch sortierte {@link Collection Collections}
- * angewandt werden (z.B. {@link TreeSet}).
- * @param values Werte
- * @param digits Anzahl an Nachkommastellen (negative Werte runden auf
- * Vorkommastellen, also 10er-, 100er-, usw. Stelle)
- * @param mode Modus für das Runden (0 = normal Runden, 1 = Aufrunden, -1 = Abrunden;
- * wenn nicht angegeben, wird normal gerundet)
- */
- public static Collection<Number> round(Collection<Number> values, int digits, int... mode) {
- try {
- Collection<Number> newCollection = values.getClass().newInstance();
- for (Number value : values) {
- newCollection.add( round(value.doubleValue(),digits,mode) );
- }
- return newCollection;
- } catch (Exception err) {
- throw new IllegalArgumentException("Can not handle collection: "+getSimpleClassName(values),err);
- }
- }
-
- /**
- * Puts a text to system clipboard.
- * @param str a text
- */
- public static void copyToClipboard(String str) {
- if ( str == null )
- return;
- StringSelection sel = new StringSelection( str );
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel,sel);
- }
-
-
- /**
- * Returns the class names of the top of a stack trace. Duplicate class names
- * are eliminated.
- * @param stackTrace stack trace to explore
- * @param depth maximum count of classes, which are explored in the stack
- * trace
- */
- public static String[] getLastStackTraceClasses(StackTraceElement[] stackTrace, int depth) {
- Vector<String> lastClasses = new Vector<String>();
- for (StackTraceElement st : stackTrace) {
- String className = st.getClassName();
- if ( !lastClasses.contains(className) )
- lastClasses.add(className);
- if ( lastClasses.size() >= depth )
- break;
- }
- return lastClasses.toArray(new String[0]);
- }
+ // Nachkommastellen wieder hinter das Komma schieben
+ return value / digitsFactor;
+ }
- /**
- * Prints the last X classes from a stack trace.
- * @param stackTrace stack trace to explore
- * @param depth maximum count of classes, which are explored in the stack
- * trace
- * @param out output stream to write to
- */
- public static void printLastStackTraceClasses(StackTraceElement[] stackTrace, int depth, PrintStream out) {
- String[] lastClasses = getLastStackTraceClasses(stackTrace, depth);
- for (int i=0; i<lastClasses.length; i++) {
- if (i > 0)
- out.print("\t...");
- out.println(lastClasses[i]);
- }
- }
+ /**
+ * Rundet alle Werte einer {@link Collection} auf Nach- oder
+ * Vorkommastellen.<br>
+ * <b>Achtung:</b><br>
+ * Es wird eine neue {@link Collection} des gleichen Typs erzeugt und die
+ * gerundeten Werte darin in der Reihenfolge eingefuegt, wie sie von
+ * {@link Collection#iterator()} geliefert werden! Unter umstaenden kann die
+ * urspruengliche Sortierung verloren gehen! Diese Methode sollte also im
+ * Zweifelsfall nur auf automatisch sortierte {@link Collection Collections}
+ * angewandt werden (z.B. {@link TreeSet}).
+ *
+ * @param values
+ * Werte
+ * @param digits
+ * Anzahl an Nachkommastellen (negative Werte runden auf
+ * Vorkommastellen, also 10er-, 100er-, usw. Stelle)
+ * @param mode
+ * Modus für das Runden (0 = normal Runden, 1 = Aufrunden, -1 =
+ * Abrunden; wenn nicht angegeben, wird normal gerundet)
+ */
+ public static Collection<Number> round(Collection<Number> values,
+ int digits, int... mode) {
+ try {
+ Collection<Number> newCollection = values.getClass().newInstance();
+ for (Number value : values) {
+ newCollection.add(round(value.doubleValue(), digits, mode));
+ }
+ return newCollection;
+ } catch (Exception err) {
+ throw new IllegalArgumentException("Can not handle collection: "
+ + getSimpleClassName(values), err);
+ }
+ }
- /**
- * Prints the last X classes from a stack trace to the standard output.
- * @param stackTrace stack trace to explore
- * @param depth maximum count of classes, which are explored in the stack
- * trace
- * @see System#out
- */
- public static void printLastStackTraceClasses(StackTraceElement[] stackTrace, int depth) {
- printLastStackTraceClasses(stackTrace, depth, System.out);
- }
+ /**
+ * Puts a text to system clipboard.
+ *
+ * @param str
+ * a text
+ */
+ public static void copyToClipboard(String str) {
+ if (str == null)
+ return;
+ StringSelection sel = new StringSelection(str);
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel, sel);
+ }
- /**
- * Erzeugt einen Log4j-Logger fuer ein Objekt. Als Identifier fuer den Logger
- * wird der Klassenname des Objekts verwendet.
- * @param object ein Objekt
- * @return Logger mit dem Namen "NULL", falls das uebergebene Objekt {@code null}
- * ist
- */
- public static Logger createLogger(Object object) {
- if ( object == null )
- return Logger.getLogger("");
- if ( object instanceof Class )
- return Logger.getLogger( ((Class)object).getName() );
- return Logger.getLogger( object.getClass().getName() );
- }
+ /**
+ * Returns the class names of the top of a stack trace. Duplicate class
+ * names are eliminated.
+ *
+ * @param stackTrace
+ * stack trace to explore
+ * @param depth
+ * maximum count of classes, which are explored in the stack
+ * trace
+ */
+ public static String[] getLastStackTraceClasses(
+ StackTraceElement[] stackTrace, int depth) {
+ Vector<String> lastClasses = new Vector<String>();
+ for (StackTraceElement st : stackTrace) {
+ String className = st.getClassName();
+ if (!lastClasses.contains(className))
+ lastClasses.add(className);
+ if (lastClasses.size() >= depth)
+ break;
+ }
+ return lastClasses.toArray(new String[0]);
+ }
- /**
- * Erzeugt einen Error- und einen Debug-Eintrag in einem Logger. Der Error-Eintrag
- * erhaelt nur die Meldung, der Debug-Eintrag auch die detaillierten Informationen
- * des Fehlers.
- * @param logger ein Logger
- * @param mess Fehlermeldung (wenn {@code null} wird die Message des Fehlers ausgegeben)
- * @param err ein Fehler
- */
- public static void logDebugError(Category logger, Object mess, Throwable err) {
- if ( mess == null )
- mess = err.getClass().getName()+": "+err.getMessage();
- logger.error(mess);
- logger.debug(mess,err);
- }
+ /**
+ * Prints the last X classes from a stack trace.
+ *
+ * @param stackTrace
+ * stack trace to explore
+ * @param depth
+ * maximum count of classes, which are explored in the stack
+ * trace
+ * @param out
+ * output stream to write to
+ */
+ public static void printLastStackTraceClasses(
+ StackTraceElement[] stackTrace, int depth, PrintStream out) {
+ String[] lastClasses = getLastStackTraceClasses(stackTrace, depth);
+ for (int i = 0; i < lastClasses.length; i++) {
+ if (i > 0)
+ out.print("\t...");
+ out.println(lastClasses[i]);
+ }
+ }
- /**
- * Erzeugt einen Error- und einen Debug-Eintrag in einem Logger. Der Error-Eintrag
- * erhaelt nur die Meldung, der Debug-Eintrag auch die detaillierten Informationen
- * des Fehlers.
- * @param logger ein Logger
- * @param err ein Fehler
- */
- public static void logDebugError(Category logger, Throwable err) {
- logDebugError(logger,null,err);
- }
+ /**
+ * Prints the last X classes from a stack trace to the standard output.
+ *
+ * @param stackTrace
+ * stack trace to explore
+ * @param depth
+ * maximum count of classes, which are explored in the stack
+ * trace
+ * @see System#out
+ */
+ public static void printLastStackTraceClasses(
+ StackTraceElement[] stackTrace, int depth) {
+ printLastStackTraceClasses(stackTrace, depth, System.out);
+ }
- /**
- * Erzeugt einen Warn- und einen Debug-Eintrag in einem Logger. Der Warn-Eintrag
- * erhaelt nur die Meldung, der Debug-Eintrag auch die detaillierten Informationen
- * des Fehlers.
- * @param logger ein Logger
- * @param mess Fehlermeldung (wenn {@code null} wird die Message des Fehlers ausgegeben)
- * @param err ein Fehler
- */
- public static void logDebugWarn(Category logger, Object mess, Throwable err) {
- if ( mess == null )
- mess = err.getClass().getName()+": "+err.getMessage();
- logger.warn(mess);
- logger.debug(mess,err);
- }
+ /**
+ * Erzeugt einen Log4j-Logger fuer ein Objekt. Als Identifier fuer den
+ * Logger wird der Klassenname des Objekts verwendet.
+ *
+ * @param object
+ * ein Objekt
+ * @return Logger mit dem Namen "NULL", falls das uebergebene Objekt {@code
+ * null} ist
+ */
+ public static Logger createLogger(Object object) {
+ if (object == null)
+ return Logger.getLogger("");
+ if (object instanceof Class)
+ return Logger.getLogger(((Class) object).getName());
+ return Logger.getLogger(object.getClass().getName());
+ }
- /**
- * Erzeugt einen Warn- und einen Debug-Eintrag in einem Logger. Der Warn-Eintrag
- * erhaelt nur die Meldung, der Debug-Eintrag auch die detaillierten Informationen
- * des Fehlers.
- * @param logger ein Logger
- * @param err ein Fehler
- */
- public static void logDebugWarn(Category logger, Throwable err) {
- logDebugWarn(logger,null,err);
- }
+ /**
+ * Erzeugt einen Error- und einen Debug-Eintrag in einem Logger. Der
+ * Error-Eintrag erhaelt nur die Meldung, der Debug-Eintrag auch die
+ * detaillierten Informationen des Fehlers.
+ *
+ * @param logger
+ * ein Logger
+ * @param mess
+ * Fehlermeldung (wenn {@code null} wird die Message des Fehlers
+ * ausgegeben)
+ * @param err
+ * ein Fehler
+ */
+ public static void logDebugError(Category logger, Object mess, Throwable err) {
+ if (mess == null)
+ mess = err.getClass().getName() + ": " + err.getMessage();
+ logger.error(mess);
+ logger.debug(mess, err);
+ }
- /**
- * Logs the last X classes from a stack trace as debug message.
- * @param logger the logger
- * @param stackTrace stack trace to explore
- * @param depth maximum count of classes, which are explored in the stack
- * trace
- */
- public static void logDebugLastStackTraceClasses(Category logger, StackTraceElement[] stackTrace, int depth) {
- String[] lastClasses = getLastStackTraceClasses(stackTrace, depth);
- for (int i=0; i<lastClasses.length; i++) {
- String message = "";
- if (i > 0)
- message = "\t...";
- message += lastClasses[i];
- logger.debug(message);
- }
- }
+ /**
+ * Erzeugt einen Error- und einen Debug-Eintrag in einem Logger. Der
+ * Error-Eintrag erhaelt nur die Meldung, der Debug-Eintrag auch die
+ * detaillierten Informationen des Fehlers.
+ *
+ * @param logger
+ * ein Logger
+ * @param err
+ * ein Fehler
+ */
+ public static void logDebugError(Category logger, Throwable err) {
+ logDebugError(logger, null, err);
+ }
+ /**
+ * Erzeugt einen Warn- und einen Debug-Eintrag in einem Logger. Der
+ * Warn-Eintrag erhaelt nur die Meldung, der Debug-Eintrag auch die
+ * detaillierten Informationen des Fehlers.
+ *
+ * @param logger
+ * ein Logger
+ * @param mess
+ * Fehlermeldung (wenn {@code null} wird die Message des Fehlers
+ * ausgegeben)
+ * @param err
+ * ein Fehler
+ */
+ public static void logDebugWarn(Category logger, Object mess, Throwable err) {
+ if (mess == null)
+ mess = err.getClass().getName() + ": " + err.getMessage();
+ logger.warn(mess);
+ logger.debug(mess, err);
+ }
+
+ /**
+ * Erzeugt einen Warn- und einen Debug-Eintrag in einem Logger. Der
+ * Warn-Eintrag erhaelt nur die Meldung, der Debug-Eintrag auch die
+ * detaillierten Informationen des Fehlers.
+ *
+ * @param logger
+ * ein Logger
+ * @param err
+ * ein Fehler
+ */
+ public static void logDebugWarn(Category logger, Throwable err) {
+ logDebugWarn(logger, null, err);
+ }
+
+ /**
+ * Logs the last X classes from a stack trace as debug message.
+ *
+ * @param logger
+ * the logger
+ * @param stackTrace
+ * stack trace to explore
+ * @param depth
+ * maximum count of classes, which are explored in the stack
+ * trace
+ */
+ public static void logDebugLastStackTraceClasses(Category logger,
+ StackTraceElement[] stackTrace, int depth) {
+ String[] lastClasses = getLastStackTraceClasses(stackTrace, depth);
+ for (int i = 0; i < lastClasses.length; i++) {
+ String message = "";
+ if (i > 0)
+ message = "\t...";
+ message += lastClasses[i];
+ logger.debug(message);
+ }
+ }
+
+ /**
+ * Parses a String as a specific Number class, e.g. Double or Long
+ *
+ * @param numClass
+ * TODO Martin, geht das nicht schöner? Ich bin zu doof
+ */
+ public static Number parseNumberAs(final String valueString, final Class<?> numClass) {
+
+ // everything can be parsed as a Double
+ final Double doubleValue = Double.parseDouble(valueString);
+
+ if (numClass == Long.class) {
+ return doubleValue.longValue();
+ } else if (numClass == Double.class) {
+ return doubleValue;
+ } else if (numClass == Integer.class) {
+ return doubleValue.intValue();
+ } else if (numClass == Byte.class) {
+ return doubleValue.byteValue();
+ } else if (numClass == Short.class) {
+ return doubleValue.shortValue();
+ } else if (numClass == Float.class) {
+ return doubleValue.floatValue();
+ } else {
+ throw new RuntimeException(
+ "Please report that parseNumberAs has to support variables of type "
+ + numClass.getCanonicalName());
+ }
+ }
}
-
Modified: trunk/src/schmitzm/swing/table/DoubleRenderer.java
===================================================================
--- trunk/src/schmitzm/swing/table/DoubleRenderer.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/schmitzm/swing/table/DoubleRenderer.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -29,16 +29,10 @@
******************************************************************************/
package schmitzm.swing.table;
-import java.awt.Color;
-import java.awt.Component;
import java.text.NumberFormat;
-import javax.swing.BorderFactory;
import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.border.Border;
import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.table.TableCellRenderer;
/**
* Diese Klasse stellt einen Renderer fuer Tabellenzellen dar, in denen
Modified: trunk/src/skrueger/swing/CancellableTabbedDialogAdapter.java
===================================================================
--- trunk/src/skrueger/swing/CancellableTabbedDialogAdapter.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/skrueger/swing/CancellableTabbedDialogAdapter.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -77,7 +77,7 @@
});
- buttonsJPanel.add(okButton);
+ buttonsJPanel.add(okButton, "tag ok");
final CancelButton cancelButton = new CancelButton(new AbstractAction(
"") {
@@ -85,7 +85,7 @@
cancelClose();
}
});
- buttonsJPanel.add(cancelButton);
+ buttonsJPanel.add(cancelButton, "tag cancel");
return buttonsJPanel;
}
Modified: trunk/src/skrueger/swing/ColorButton.java
===================================================================
--- trunk/src/skrueger/swing/ColorButton.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/skrueger/swing/ColorButton.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -5,6 +5,7 @@
import java.awt.image.BufferedImage;
import javax.swing.AbstractAction;
+import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
@@ -37,6 +38,12 @@
public void setColor(Expression colorExpression) {
setColor(StylingUtil.getColorFromExpression(colorExpression));
}
+
+ @Override
+ public void setAction(Action a) {
+ super.setAction(a);
+ setColor(color);
+ }
/**
* Updates a {@link JButton}'s {@link Icon} with a {@link Color}.
@@ -65,6 +72,7 @@
g2d.setBackground(newColor);
g2d.fillRect(0, 0, 30, 10);
setIcon(new ImageIcon(bi));
+ repaint();
}
}
Modified: trunk/src/skrueger/swing/TranslationEditJPanel.java
===================================================================
--- trunk/src/skrueger/swing/TranslationEditJPanel.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/skrueger/swing/TranslationEditJPanel.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -33,10 +33,9 @@
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.List;
import java.util.Random;
-import java.util.Set;
import java.util.WeakHashMap;
import javax.swing.BorderFactory;
@@ -73,9 +72,11 @@
/**
* Remembers all {@link JTextField} that have been created.
*/
- private Set<TranslationJTextField> langTextFields = new HashSet<TranslationJTextField>();
+ private HashMap<String, TranslationJTextField> langTextFields = new HashMap<String, TranslationJTextField>();
private WeakHashMap<ActionListener, ActionListener> actionListeners = new WeakHashMap<ActionListener, ActionListener>();
+ private final String question;
+
/**
* Creates a {@link JPanel} that asks the user for the translation of a
* String in several languages
@@ -92,7 +93,8 @@
public TranslationEditJPanel(String question, Translation trans,
List<String> languages_) {
super(new BorderLayout());
-
+ this.question = question;
+
SwingUtil.setMinimumWidth(this, 400);
if (trans == null)
@@ -101,6 +103,10 @@
this.trans = trans;
this.languages = languages_;
+ initGUI();
+ }
+
+ private void initGUI() {
add(getTranslationGrid(), BorderLayout.CENTER);
if (question != null) {
@@ -109,10 +115,6 @@
.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
add(questionLable, BorderLayout.NORTH);
}
-
- /**
- * Add listeners
- */
}
/**
@@ -141,15 +143,20 @@
langDesc.setHorizontalAlignment(SwingConstants.RIGHT);
langDesc.setVerticalAlignment(SwingConstants.NORTH);
- TranslationJTextField langTextField = new TranslationJTextField(
- trans, langId);
- // Setting a size
- langTextField.setPreferredSize(new Dimension(360, 22));
- langDesc.setLabelFor(langTextField);
+ TranslationJTextField langTextField = langTextFields
+ .get(langId);
+
+ if (langTextField == null) {
+ langTextField = new TranslationJTextField(trans, langId);
+ // Setting a size
+ langTextField.setPreferredSize(new Dimension(360, 22));
+ langDesc.setLabelFor(langTextField);
+ }
+
translationGrid.add(langDesc);
translationGrid.add(langTextField);
- langTextFields.add(langTextField);
+ langTextFields.put(langId, langTextField);
}
// Lay out the panel.
@@ -174,9 +181,10 @@
* TODO Is never called?!
*/
public void dispose() {
- for (TranslationJTextField f: langTextFields) {
+ for (TranslationJTextField f : langTextFields.values()) {
f.dispose();
}
+ langTextFields.clear();
}
public void addTranslationChangeListener(final ActionListener al) {
@@ -201,4 +209,5 @@
}
}
+
}
Modified: trunk/src/skrueger/swing/TranslationJTextField.java
===================================================================
--- trunk/src/skrueger/swing/TranslationJTextField.java 2010-02-18 20:52:26 UTC (rev 710)
+++ trunk/src/skrueger/swing/TranslationJTextField.java 2010-02-19 01:09:35 UTC (rev 711)
@@ -120,21 +120,21 @@
@Override
public void actionPerformed(ActionEvent e) {
-// LOGGER.debug("ActionListener called ");
+ // LOGGER.debug("ActionListener called ");
- if (e.getSource() == trans)
-// && langCode.equals(e.getActionCommand()))
- {
-// LOGGER.debug(" and omittet!\n");
- return;
- }
- LOGGER.debug(" and performed!\n");
+// if (e.getSource() == trans)
+// // && langCode.equals(e.getActionCommand()))
+// {
+// // LOGGER.debug(" and omittet!\n");
+// return;
+// }
+// LOGGER.debug(" and performed!\n");
String newString = trans.get(langCode);
if (newString == null)
newString = "";
if ((newString != null && !newString.equals(getText()))) {
- LOGGER.debug("Setting text to " + newString
- + " becuse oldString was " + getText());
+// LOGGER.debug("Setting text to " + newString
+// + " becuse oldString was " + getText());
setText(newString);
}
}
@@ -180,6 +180,24 @@
}
// LOGGER.debug("putting '"+trimmedText+"' into the translation");
- trans.put(langCode, trimmedText);
+ if (!trimmedText.equals(trans.get(langCode)))
+ trans.put(langCode, trimmedText);
}
+//
+// ActionListener listenToChangesOfTheTranslationAndUpdateTheGUI = new ActionListener() {
+//
+// @Override
+// public void actionPerformed(ActionEvent e) {
+// if (!hasFocus())
+// translationChangedExternally();
+// }
+// };
+//
+// /**
+// * Call it when the translation object has changed to update the JTextFields
+// */
+// public void translationChangedExternally() {
+// setText(trans.get(langCode));
+// }
+
}
More information about the Schmitzm-commits
mailing list