[Schmitzm-commits] r2069 - in trunk: schmitzm-core/src/main/java/de/schmitzm/lang schmitzm-gt/src/main/java/de/schmitzm/geotools/styling schmitzm-gt/src/test/java/de/schmitzm/geotools/styling
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Sat Jun 30 21:35:05 CEST 2012
Author: keeb
Date: 2012-06-30 21:35:05 +0200 (Sat, 30 Jun 2012)
New Revision: 2069
Modified:
trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java
trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/styling/StylingUtil.java
trunk/schmitzm-gt/src/test/java/de/schmitzm/geotools/styling/StylingUtilTest.java
Log:
new methods pasteFromClipboard() and loadSLD(String xmlString)
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java 2012-06-28 22:55:39 UTC (rev 2068)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java 2012-06-30 19:35:05 UTC (rev 2069)
@@ -30,8 +30,12 @@
package de.schmitzm.lang;
import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.PrintStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -81,7 +85,8 @@
/**
* 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 {
@@ -106,34 +111,42 @@
final static Pattern onlyZerosRegEx = Pattern.compile("^([\\s0.,]*)$");
/** Dummy day representing the 01.01.0001. */
- public static final Date DAY1 = new GregorianCalendar(1, Calendar.JANUARY, 1).getTime();
+ public static final Date DAY1 = new GregorianCalendar(1, Calendar.JANUARY,
+ 1).getTime();
/** Dummy day representing the 02.01.0001. */
- public static final Date DAY2 = new GregorianCalendar(1, Calendar.JANUARY, 2).getTime();
+ public static final Date DAY2 = new GregorianCalendar(1, Calendar.JANUARY,
+ 2).getTime();
/**
* Date formatter for "dd.MM.yyyy [HH:mm:ss]".
*/
- public static final DateFormat DEFAULT_DATE_TIME_FORMATTER = new SimpleDateFormat("dd.MM.yyyy [HH:mm:ss]");
+ public static final DateFormat DEFAULT_DATE_TIME_FORMATTER = new SimpleDateFormat(
+ "dd.MM.yyyy [HH:mm:ss]");
/** Format for 2-digit hour information with leading zero. */
public static final NumberFormat HOUR_FORMAT = new DecimalFormat("00");
/**
- * Liefert <code>true</code> wenn der String nur Nullen, Leerzeichen, Kommata und/oder Punkte enthält.
+ * Liefert <code>true</code> wenn der String nur Nullen, Leerzeichen,
+ * Kommata und/oder Punkte enthält.
*/
public static boolean onlyZero(String numerString) {
return onlyZerosRegEx.matcher(numerString).find();
}
/**
- * {@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.
+ * {@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 = ResourceProvider.newInstance(
- extendPackagePath(LangUtil.class, "resource.locales.LangResourceBundle"), Locale.ENGLISH);
+ 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
+ * Liefert den einfachen Namen einer Klasse (ohne Package) oder den String
+ * "null", falls das Objekt {@code null} ist
*
* @param object
* ein Objekt
@@ -188,10 +201,12 @@
}
/**
- * Returns a timezone description including difference to GMT for the default time zone.
+ * Returns a timezone description including difference to GMT for the
+ * default time zone.
*
* @param style
- * style for time zone description ({@link TimeZone#LONG} or {@link TimeZone#SHORT})
+ * style for time zone description ({@link TimeZone#LONG} or
+ * {@link TimeZone#SHORT})
* @see TimeZone#getDisplayName(boolean, int, Locale)
*/
public static String getTimezoneDescription(int style) {
@@ -199,10 +214,12 @@
}
/**
- * Returns a timezone description including difference to GMT for the default time zone.
+ * Returns a timezone description including difference to GMT for the
+ * default time zone.
*
* @param style
- * style for time zone description ({@link TimeZone#LONG} or {@link TimeZone#SHORT})
+ * style for time zone description ({@link TimeZone#LONG} or
+ * {@link TimeZone#SHORT})
* @see TimeZone#getDisplayName(boolean, int, Locale)
*/
public static String getTimezoneDescription(TimeZone timezone, int style) {
@@ -215,12 +232,15 @@
* @param timezone
* a time zone (if {@code null} the default timezone is used)
* @param date
- * special date to return the timezone for (daylight saving in GMT offset)
+ * special date to return the timezone for (daylight saving in
+ * GMT offset)
* @param style
- * style for time zone description ({@link TimeZone#LONG} or {@link TimeZone#SHORT})
+ * style for time zone description ({@link TimeZone#LONG} or
+ * {@link TimeZone#SHORT})
* @see TimeZone#getDisplayName(boolean, int, Locale)
*/
- public static String getTimezoneDescription(TimeZone timezone, Date date, int style) {
+ public static String getTimezoneDescription(TimeZone timezone, Date date,
+ int style) {
if (timezone == null)
timezone = TimeZone.getDefault();
if (date == null)
@@ -233,11 +253,14 @@
String timezoneStr = timezone.getDisplayName(inclDST, style);
// for long description, show short term too
if (style == TimeZone.LONG)
- timezoneStr += " / " + timezone.getDisplayName(inclDST, TimeZone.SHORT);
+ timezoneStr += " / "
+ + timezone.getDisplayName(inclDST, TimeZone.SHORT);
// calculate offset to GMT
- long zoneOffsetHours = timezone.getOffset(date.getTime()) / LangUtil.HOUR_MILLIS;
- String zoneOffsetStr = "GMT" + LangUtil.getSignumStr(zoneOffsetHours, "+")
+ long zoneOffsetHours = timezone.getOffset(date.getTime())
+ / LangUtil.HOUR_MILLIS;
+ String zoneOffsetStr = "GMT"
+ + LangUtil.getSignumStr(zoneOffsetHours, "+")
+ HOUR_FORMAT.format(Math.abs(zoneOffsetHours));
timezoneStr += " (" + zoneOffsetStr + ")";
@@ -246,9 +269,10 @@
}
/**
- * Completes an incomplete date definition (in european dotted-format {@code dd.MM.yyyy}). Missing dots are also
- * added. In this case the method expects that day is given with 2 digits. If month and/or year is not given, these
- * information is completed with the current month/year.<br>
+ * Completes an incomplete date definition (in european dotted-format
+ * {@code dd.MM.yyyy}). Missing dots are also added. In this case the method
+ * expects that day is given with 2 digits. If month and/or year is not
+ * given, these information is completed with the current month/year.<br>
* Examples: Expect that current date is 29.03.2011, then
* <ul>
* <li>"12102009" is completed to "12.10.2009"</li>
@@ -261,7 +285,8 @@
*
* @param dateStr
* a european date definition as string
- * @return the source string if the given string contains other signs than digits and dots
+ * @return the source string if the given string contains other signs than
+ * digits and dots
*/
public static String completeEuropeanDateString(String dateStr) {
if (dateStr == null || !dateStr.matches("[\\d\\.]+"))
@@ -301,7 +326,8 @@
// "19" erweitern
String yearStr = dateStr.substring(dateStr.lastIndexOf(".") + 1);
if (Integer.parseInt(yearStr) < 100)
- dateStr = dateStr.substring(0, dateStr.lastIndexOf(".")) + ".19" + yearStr;
+ dateStr = dateStr.substring(0, dateStr.lastIndexOf("."))
+ + ".19" + yearStr;
}
return dateStr;
@@ -322,7 +348,8 @@
* Returns the current time as formatted string.
*
* @param format
- * date format as defined in {@link SimpleDateFormat} (if {@code null}, the default format is used)
+ * date format as defined in {@link SimpleDateFormat} (if
+ * {@code null}, the default format is used)
* @see #DEFAULT_DATE_TIME_FORMATTER
*/
public static String getCurrentTimeFormatted(String formatPattern) {
@@ -333,12 +360,14 @@
}
/**
- * Returns a new date which combines the date and time information of several date objects.
+ * Returns a new date which combines the date and time information of
+ * several date objects.
*
* @param date
* date the date information is taken from
* @param time
- * date the time information is taken from (if {@code null} the time 00:00:00.000 is set)
+ * date the time information is taken from (if {@code null} the
+ * time 00:00:00.000 is set)
*/
public static Date combineDate(Date date, Date time) {
Calendar dateCal = GregorianCalendar.getInstance();
@@ -349,10 +378,14 @@
Calendar combinedDateCal = GregorianCalendar.getInstance();
// combine date and time for new date object
- combinedDateCal.set(Calendar.HOUR_OF_DAY, time == null ? 0 : timeCal.get(Calendar.HOUR_OF_DAY));
- combinedDateCal.set(Calendar.MINUTE, time == null ? 0 : timeCal.get(Calendar.MINUTE));
- combinedDateCal.set(Calendar.SECOND, time == null ? 0 : timeCal.get(Calendar.SECOND));
- combinedDateCal.set(Calendar.MILLISECOND, time == null ? 0 : timeCal.get(Calendar.MILLISECOND));
+ combinedDateCal.set(Calendar.HOUR_OF_DAY,
+ time == null ? 0 : timeCal.get(Calendar.HOUR_OF_DAY));
+ combinedDateCal.set(Calendar.MINUTE,
+ time == null ? 0 : timeCal.get(Calendar.MINUTE));
+ combinedDateCal.set(Calendar.SECOND,
+ time == null ? 0 : timeCal.get(Calendar.SECOND));
+ combinedDateCal.set(Calendar.MILLISECOND,
+ time == null ? 0 : timeCal.get(Calendar.MILLISECOND));
combinedDateCal.set(Calendar.DATE, dateCal.get(Calendar.DATE));
combinedDateCal.set(Calendar.MONTH, dateCal.get(Calendar.MONTH));
@@ -362,7 +395,8 @@
}
/**
- * Returns a new date which combines the date and time information of several date objects.
+ * Returns a new date which combines the date and time information of
+ * several date objects.
*
* @param date
* date the date information is taken from
@@ -382,19 +416,25 @@
}
/**
- * Returns a {@link Date} which represents the given day and time in GMT time zone.<br>
+ * Returns a {@link Date} which represents the given day and time in GMT
+ * time zone.<br>
* <b>For example:</b><br>
- * The given date is 01.01.2011, 00:00 (in CET). Then this method returns 01.01.2011, 01:00, because the timezone
- * offset (+1 hour + possible daylight saving time offset) is added. In other words: This method returns the date
- * (in current timezone), when GMT represents the moment of the given date.<br>
+ * The given date is 01.01.2011, 00:00 (in CET). Then this method returns
+ * 01.01.2011, 01:00, because the timezone offset (+1 hour + possible
+ * daylight saving time offset) is added. In other words: This method
+ * returns the date (in current timezone), when GMT represents the moment of
+ * the given date.<br>
* <b>Field of application:</b><br>
- * Excel does not handle timezones, so it will always show an exported date in GMT (java internal timestamp). For
- * birthdates or many other "fixed" moments this is not the expected way! This method converts e.g. the birthdate
- * (in the current timezone) so that it represents the exact birthdate in GMT.
+ * Excel does not handle timezones, so it will always show an exported date
+ * in GMT (java internal timestamp). For birthdates or many other "fixed"
+ * moments this is not the expected way! This method converts e.g. the
+ * birthdate (in the current timezone) so that it represents the exact
+ * birthdate in GMT.
*
* @param date
* a date in any timezone
- * @return the date (in current timezone), when GMT represents this day and time
+ * @return the date (in current timezone), when GMT represents this day and
+ * time
*/
public static Date getGmtDate(Date date) {
GregorianCalendar c = new GregorianCalendar();
@@ -477,10 +517,13 @@
try {
if (format instanceof SimpleDateFormat) {
// Datum im Format "dd-mm-yyyy" verursacht fuer Format
- // "yyyy-mm-dd" KEINE Exception sondern fuehrt zu falschem Datum
- // --> Pruefen, ob (erste) Position des "-" in Pattern mit (erster)
+ // "yyyy-mm-dd" KEINE Exception sondern fuehrt zu
+ // falschem Datum
+ // --> Pruefen, ob (erste) Position des "-" in Pattern
+ // mit (erster)
// Position des "-" im Datums-String uebereinstimmt.
- String pattern = ((SimpleDateFormat) format).toPattern();
+ String pattern = ((SimpleDateFormat) format)
+ .toPattern();
if (pattern.indexOf('-') != dateStr.indexOf('-')
|| pattern.indexOf('.') != dateStr.indexOf('.'))
continue;
@@ -513,7 +556,8 @@
* @param startMillis
* start offset
* @param format
- * formatter to format the seconds value (if {@code null} a format with 2 fraction digits is used)
+ * formatter to format the seconds value (if {@code null} a
+ * format with 2 fraction digits is used)
*/
public static String getDelaySeconds(long startMillis, NumberFormat format) {
if (format == null)
@@ -578,7 +622,8 @@
* Checks whether both objects are {@code null} or equal.
*/
public static boolean checkEqual(Object o1, Object o2) {
- return o1 == null && o2 == null || o1 != null && o2 != null && o1.equals(o2);
+ return o1 == null && o2 == null || o1 != null && o2 != null
+ && o1.equals(o2);
}
/**
@@ -587,7 +632,8 @@
* @param delim
* Trennzeichen (kann {@code null} sein)
* @param strList
- * Liste von Strings ({@code null}-Elemente und leere Strings werden ignoriert
+ * Liste von Strings ({@code null}-Elemente und leere Strings
+ * werden ignoriert
* @return
*/
public static String listString(String delim, String... strList) {
@@ -612,17 +658,20 @@
* @param delim
* Trennzeichen (kann {@code null} sein)
* @param ignoreNulls
- * bestimmt, ob {@code null}-Elemente (und leere Strings) ignoriert werden
+ * bestimmt, ob {@code null}-Elemente (und leere Strings)
+ * ignoriert werden
* @param objList
* Liste von Objekten
* @return
*/
- public static String listObjects(String delim, boolean ignoreNulls, Object... objList) {
+ public static String listObjects(String delim, boolean ignoreNulls,
+ Object... objList) {
StringBuffer resultStr = new StringBuffer();
for (int i = 0; i < objList.length; i++) {
// ignore item if it is null or empty
if (ignoreNulls
- && (objList[i] == null || objList[i] instanceof String && "".equals(((String) objList[i]).trim())))
+ && (objList[i] == null || objList[i] instanceof String
+ && "".equals(((String) objList[i]).trim())))
continue;
// append delimiter (if necessary)
if (resultStr.length() > 0 && delim != null)
@@ -640,12 +689,14 @@
* @param delim
* Trennzeichen (kann {@code null} sein)
* @param ignoreNulls
- * bestimmt, ob {@code null}-Elemente (und leere Strings) ignoriert werden
+ * bestimmt, ob {@code null}-Elemente (und leere Strings)
+ * ignoriert werden
* @param objList
* Liste von Objekten
* @return
*/
- public static String listObjects(String delim, boolean ignoreNulls, Collection<?> values) {
+ public static String listObjects(String delim, boolean ignoreNulls,
+ Collection<?> values) {
Object[] objArray = values.toArray();
return listObjects(delim, ignoreNulls, objArray);
}
@@ -658,7 +709,8 @@
* @param fieldName
* feld name
*/
- public static boolean checkEnumValue(Class<? extends Enum> enumClass, String fieldName) {
+ public static boolean checkEnumValue(Class<? extends Enum> enumClass,
+ String fieldName) {
try {
Enum.valueOf(enumClass, fieldName);
return true;
@@ -668,13 +720,14 @@
}
/**
- * Fuegt alle Elemente eines Arrays in einen {@link Vector} ein. Wird als Vector <code>null</code> angegeben, wird
- * ein neuer Vector erzeugt.
+ * 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)
+ * 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) {
@@ -699,13 +752,15 @@
Arrays.fill(maxSpacePattern, ' ');
for (int pos; (pos = outString.indexOf('\t')) >= 0;) {
- outString = outString.replaceFirst("\t", String.valueOf(maxSpacePattern, 0, tabLen - pos % tabLen));
+ outString = outString.replaceFirst("\t",
+ String.valueOf(maxSpacePattern, 0, tabLen - pos % tabLen));
}
return outString;
}
/**
- * Haengt eine beliebige Anzahl von Objekte als Strings (toString()) hintereinander.
+ * Haengt eine beliebige Anzahl von Objekte als Strings (toString())
+ * hintereinander.
*
* @param str
* aneinanderzuhaengende Objekte
@@ -719,51 +774,60 @@
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
- * {@code null}-Werte werden ignoriert.<br>
- * Bemerkung: Dies ist eine Workaround-Methode, da die die ueberladendenen Methoden mit "Object..." nicht von allen
- * Compilern richtig interpretiert werden!
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein. {@code null}-Werte werden
+ * ignoriert.<br>
+ * Bemerkung: Dies ist eine Workaround-Methode, da die die ueberladendenen
+ * Methoden mit "Object..." nicht von allen Compilern richtig interpretiert
+ * werden!
*
* @param sep
* Trenner
* @param str
* aneinanderzuhaengende Stings
*/
- public static String stringConcatWithSepIgnoreNulls(String sep, Object... str) {
+ public static String stringConcatWithSepIgnoreNulls(String sep,
+ Object... str) {
return stringConcatWithSep(sep, null, true, str);
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
- * {@code null}-Werte werden beruecksichtigt<br>
- * Bemerkung: Dies ist eine Workaround-Methode, da die die ueberladendenen Methoden mit "Object..." nicht von allen
- * Compilern richtig interpretiert werden!
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein. {@code null}-Werte werden
+ * beruecksichtigt<br>
+ * Bemerkung: Dies ist eine Workaround-Methode, da die die ueberladendenen
+ * Methoden mit "Object..." nicht von allen Compilern richtig interpretiert
+ * werden!
*
* @param sep
* Trenner
* @param str
* aneinanderzuhaengende Stings
*/
- public static String stringConcatWithSepIncludeNulls(String sep, Object... str) {
+ public static String stringConcatWithSepIncludeNulls(String sep,
+ Object... str) {
return stringConcatWithSep(sep, null, false, str);
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein.
*
* @param sep
* Trenner
* @param str
* aneinanderzuhaengende Stings als Liste
*/
- public static String stringConcatWithSep(String sep, Collection<? extends Object> list) {
+ public static String stringConcatWithSep(String sep,
+ Collection<? extends Object> list) {
if (list == null)
return "";
return stringConcatWithSep(sep, null, list.toArray());
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein.
*
* @param sep
* Trenner
@@ -775,7 +839,8 @@
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein.
*
* @param sep
* Trenner
@@ -784,24 +849,28 @@
* @param str
* aneinanderzuhaengende Stings
*/
- public static String stringConcatWithSep(String sep, boolean ignoreNulls, Object... str) {
+ public static String stringConcatWithSep(String sep, boolean ignoreNulls,
+ Object... str) {
return stringConcatWithSep(sep, null, ignoreNulls, str);
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
- * Optional werden die einzelnen Strings mit einem speziellen Zeichen (z.B. Apostroph oder Anfuehrungszeichen)
- * maskiert.
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein. Optional werden die einzelnen
+ * Strings mit einem speziellen Zeichen (z.B. Apostroph oder
+ * Anfuehrungszeichen) maskiert.
*
* @param sep
* Trenner
* @param maskChar
- * Zeichen, mit dem die aneinandergehaengten Strings gekapselt werden (z.B. Apostroph oder
- * Anfuehrungszeichen). Wenn {@code null} oder leer, werden die Strings nicht gekapselt.
+ * Zeichen, mit dem die aneinandergehaengten Strings gekapselt
+ * werden (z.B. Apostroph oder Anfuehrungszeichen). Wenn
+ * {@code null} oder leer, werden die Strings nicht gekapselt.
* @param str
* aneinanderzuhaengende Stings
*/
- public static String stringConcatWithSep(String sep, String maskChar, Object... str) {
+ public static String stringConcatWithSep(String sep, String maskChar,
+ Object... str) {
// StringBuffer sb = new StringBuffer();
// for (int i = 0; str != null && i < str.length; i++) {
// if (i > 0)
@@ -816,21 +885,24 @@
}
/**
- * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt zwischen den Strings einen Trenner ein.
- * Optional werden die einzelnen Strings mit einem speziellen Zeichen (z.B. Apostroph oder Anfuehrungszeichen)
- * maskiert.
+ * Haengt eine beliebige Anzahl von Strings hintereinander und fuegt
+ * zwischen den Strings einen Trenner ein. Optional werden die einzelnen
+ * Strings mit einem speziellen Zeichen (z.B. Apostroph oder
+ * Anfuehrungszeichen) maskiert.
*
* @param sep
* Trenner
* @param maskChar
- * Zeichen, mit dem die aneinandergehaengten Strings gekapselt werden (z.B. Apostroph oder
- * Anfuehrungszeichen). Wenn {@code null} oder leer, werden die Strings nicht gekapselt.
+ * Zeichen, mit dem die aneinandergehaengten Strings gekapselt
+ * werden (z.B. Apostroph oder Anfuehrungszeichen). Wenn
+ * {@code null} oder leer, werden die Strings nicht gekapselt.
* @param ignoreNulls
* wenn {@code true} werden NULL-Werte ignoriert
* @param str
* aneinanderzuhaengende Stings
*/
- public static String stringConcatWithSep(String sep, String maskChar, boolean ignoreNulls, Object... str) {
+ public static String stringConcatWithSep(String sep, String maskChar,
+ boolean ignoreNulls, Object... str) {
StringBuffer sb = new StringBuffer();
// wenn statt einem Object-Array ein nativer Array angegeben wird,
@@ -841,7 +913,8 @@
}
for (int i = 0; str != null && i < str.length; i++) {
- if (ignoreNulls && (str[i] == null || str[i].toString().trim().equals("")))
+ if (ignoreNulls
+ && (str[i] == null || str[i].toString().trim().equals("")))
continue;
// if (i > 0)
if (sb.length() > 0)
@@ -871,13 +944,16 @@
* @param sourceMap
* source map
* @param mapping
- * mapping from source key to destination key (if mapping contains no value for a key of source map, the
- * original key is used!)
+ * mapping from source key to destination key (if mapping
+ * contains no value for a key of source map, the original key is
+ * used!)
* @param destMap
- * destination map to put the values in (if {@code null} a new {@link HashMap} is created)
+ * destination map to put the values in (if {@code null} a new
+ * {@link HashMap} is created)
* @return {@code sourceMap} if mapping is {@code null}
*/
- public static <K, V> Map<K, V> transformMapKeys(Map<K, V> sourceMap, Map<K, K> mapping, Map<K, V> destMap) {
+ public static <K, V> Map<K, V> transformMapKeys(Map<K, V> sourceMap,
+ Map<K, K> mapping, Map<K, V> destMap) {
if (mapping == null)
return sourceMap;
if (destMap == null)
@@ -896,13 +972,16 @@
* @param sourceMap
* source map
* @param mapping
- * mapping from destination key to source key (if mapping contains no value for a key of source map, the
- * value is irgnored)
+ * mapping from destination key to source key (if mapping
+ * contains no value for a key of source map, the value is
+ * irgnored)
* @param destMap
- * destination map to put the values in (if {@code null} a new {@link HashMap} is created)
+ * destination map to put the values in (if {@code null} a new
+ * {@link HashMap} is created)
* @return {@code sourceMap} if mapping is {@code null}
*/
- public static <K, V> Map<K, V> transformMapKeysInverted(Map<K, V> sourceMap, Map<K, K> mapping, Map<K, V> destMap) {
+ public static <K, V> Map<K, V> transformMapKeysInverted(
+ Map<K, V> sourceMap, Map<K, K> mapping, Map<K, V> destMap) {
if (mapping == null)
return sourceMap;
if (destMap == null)
@@ -1037,17 +1116,20 @@
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);
+ 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>
+ * <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
+ * wenn das 0te Element in einer Dimension mit {@code null}
+ * belegt ist
*/
public static int getArrayDimension(Object array) {
int dim = 0;
@@ -1061,13 +1143,16 @@
}
/**
- * 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>
+ * 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
+ * wenn das 0te Element in einer Dimension mit {@code null}
+ * belegt ist
*/
public static int[] getArrayLength(Object array) {
int[] dimSize = new int[getArrayDimension(array)];
@@ -1113,25 +1198,30 @@
}
/**
- * 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.
+ * 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
+ * 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
+ * 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) {
+ public static <T> T[] cloneArray(T[] source, boolean replNull,
+ T... replElem) {
if (source == null)
return null;
- T[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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];
@@ -1139,13 +1229,14 @@
}
/**
- * Kopiert einen Array (aber nicht dessen Elemente). Darueberhinaus koennen (einige) Elemente direkt neu belegt
- * werden.
+ * 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
+ * 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) {
@@ -1158,14 +1249,16 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- long[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1177,14 +1270,16 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- int[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1196,14 +1291,16 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- short[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1215,13 +1312,15 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- byte[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1233,14 +1332,16 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- double[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1252,14 +1353,16 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- float[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1271,13 +1374,15 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- boolean[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1289,13 +1394,15 @@
* @param source
* zu kopierender Array
* @param replElem
- * Elemente (beginnend bei Index 0), die nach dem Kopieren im Array neu gesetzt werden
+ * 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) {
if (source == null)
return null;
- char[] newArray = java.util.Arrays.copyOf(source, Math.max(source.length, replElem.length));
+ 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;
@@ -1311,7 +1418,8 @@
* @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);
+ 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;
@@ -1327,7 +1435,8 @@
* @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);
+ 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;
@@ -1343,7 +1452,8 @@
* @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);
+ 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;
@@ -1359,7 +1469,8 @@
* @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);
+ 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;
@@ -1375,7 +1486,8 @@
* @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);
+ 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;
@@ -1391,7 +1503,8 @@
* @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);
+ 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;
@@ -1407,7 +1520,8 @@
* @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);
+ 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;
@@ -1423,7 +1537,8 @@
* @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);
+ 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;
@@ -1439,7 +1554,8 @@
* @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);
+ 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;
@@ -1451,32 +1567,39 @@
* @param clazz
* Klassen
* @param simple
- * gibt an, ob der einfache Klassenname ({@code true}) oder der komplette Klassenname inkl. Paketname (
- * {@code false}) zurueckgegeben wird.
+ * 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();
+ className[i] = simple ? clazz[i].getSimpleName() : clazz[i]
+ .getName();
return className;
}
/**
- * Instantiates an object by {@link Class#forName(String)}. The class must be present in runtime classpath.
+ * Instantiates an object by {@link Class#forName(String)}. The class must
+ * be present in runtime classpath.
*
* @param className
* full name of class (incl. package)
* @param fallback
- * if <code>true</code> this method returns <code>null</code> if {@link Class#forName(String)} fails
+ * if <code>true</code> this method returns <code>null</code> if
+ * {@link Class#forName(String)} fails
* @param constrArg
* arguments for the constructor
* @exception UnsupportedOperationException
- * if class could be loaded, but no matching constructor can be found
+ * if class could be loaded, but no matching constructor can
+ * be found
* @exception RuntimeException
- * if class can not be loaded and fallback is disabled or another error occurs during
+ * if class can not be loaded and fallback is disabled or
+ * another error occurs during
* {@link Constructor#newInstance(Object...)}
*/
- public static Object instantiateObject(String className, boolean fallback, Object... constrArg) {
+ public static Object instantiateObject(String className, boolean fallback,
+ Object... constrArg) {
try {
Class<?> clazz = Class.forName(className);
for (Constructor constructor : clazz.getConstructors())
@@ -1484,7 +1607,8 @@
return constructor.newInstance(constrArg);
} catch (IllegalArgumentException err) {
}
- throw new UnsupportedOperationException("No matching constructor found...");
+ throw new UnsupportedOperationException(
+ "No matching constructor found...");
} catch (ClassNotFoundException err) {
// if we want to fall back, we do nothing but
// return NULL
@@ -1502,7 +1626,8 @@
/**
* Ruft die Java Garbage Collection auf.
*
- * @return Anzahl an Bytes, die durch den Aufruf der Garbage Collection freigegeben wurden
+ * @return Anzahl an Bytes, die durch den Aufruf der Garbage Collection
+ * freigegeben wurden
* @see Runtime#gc()
* @see Runtime#freeMemory()
*/
@@ -1514,9 +1639,11 @@
}
/**
- * Ruft die Java Garbage Collection solange auf, bis kein Speicher mehr freigegeben werden kann.
+ * 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
+ * @return Gesamt-Anzahl an Bytes, die durch die Aufrufe der Garbage
+ * Collection freigegeben wurden
* @see #gc()
*/
public static long gcTotal() {
@@ -1527,19 +1654,22 @@
}
/**
- * Erzeugt einen neuen {@link URLClassLoader}, der vom {@linkplain ClassLoader#getSystemClassLoader()
- * System-ClassLoaders} abgeleitet ist.
+ * 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());
+ return URLClassLoader.newInstance(searchPath,
+ ClassLoader.getSystemClassLoader());
}
/**
- * Erzeugt einen neuen {@link URLClassLoader}, der vom {@linkplain ClassLoader#getSystemClassLoader()
- * System-ClassLoaders} abgeleitet ist.
+ * Erzeugt einen neuen {@link URLClassLoader}, der vom
+ * {@linkplain ClassLoader#getSystemClassLoader() System-ClassLoaders}
+ * abgeleitet ist.
*
* @param searchPath
* Pfad, in denm der ClassLoader nach Klassen sucht
@@ -1549,30 +1679,38 @@
}
/**
- * Laed eine Klasse. Ggf. wird hierfuer ein neuer {@link ClassLoader} erzeugt.
+ * 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)
+ * 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 {
+ 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.
+ * 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)
+ * 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 {
+ public static Class loadClass(String clazz, URL searchPath)
+ throws ClassNotFoundException {
if (searchPath == null)
return Class.forName(clazz);
return createClassLoader(searchPath).loadClass(clazz);
@@ -1580,28 +1718,34 @@
/**
*
- * 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
+ * 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)
+ * 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
*/
- public static Class loadPreferredClass(String classname, URL searchPath) throws ClassNotFoundException {
+ public static Class loadPreferredClass(String classname, URL searchPath)
+ throws ClassNotFoundException {
if (searchPath == null)
// System-Klassenpfad verwenden
searchPath = ClassLoader.getSystemResource("");
- PreferredClassLoader classLoader = new PreferredClassLoader(new URL[] { searchPath }, Thread.currentThread()
- .getContextClassLoader(), null, false);
+ PreferredClassLoader classLoader = new PreferredClassLoader(
+ new URL[] { searchPath }, Thread.currentThread()
+ .getContextClassLoader(), null, false);
Class loadedClass = classLoader.loadClass(classname);
if (loadedClass == null)
return Class.forName(classname);
@@ -1610,8 +1754,10 @@
}
/**
- * Laed eine Klasse neu und erzeugt eine Objekt-Instanz. Als Suchpfad fuer die Klasse der System-Klassenpfad
- * {@linkplain ClassLoader#getSystemResource(String) ClassLoader.getSystemResource("")} verwendet.
+ * 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)
@@ -1630,15 +1776,18 @@
* @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)
+ * 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) {
+ public static Object loadPreferredObject(String classname, URL searchPath,
+ Object... param) {
try {
// Klasse laden
Class clazz = loadPreferredClass(classname, searchPath);
@@ -1659,7 +1808,8 @@
} catch (IllegalArgumentException err) {
}
// kein passender Konstruktor gefunden
- throw new UnsupportedOperationException("No matching constructor found...");
+ throw new UnsupportedOperationException(
+ "No matching constructor found...");
} catch (Exception err) {
throw new RuntimeException(err);
}
@@ -1671,27 +1821,32 @@
* @param classes
* irgenwelche Klassen
* @param superClass
- * es werden nur Klassen beruecksichtigt, die von dieser Oberklasse abgeleitet sind (kann {@code null}
- * sein)
+ * es werden nur Klassen beruecksichtigt, die von dieser
+ * Oberklasse abgeleitet sind (kann {@code null} sein)
* @param methodName
* aufzurufende Methode (case-sensitive!)
* @param methodParams
* Aufruf-Parameter fuer Methode
- * @return Die Rueckgabewerte der Methoden-Aufrufe. Die Elemente fuer diejenigen Indizes i, fuer die classes[i]
- * nicht der superClass entspricht werden mit {@code null} belegt
+ * @return Die Rueckgabewerte der Methoden-Aufrufe. Die Elemente fuer
+ * diejenigen Indizes i, fuer die classes[i] nicht der superClass
+ * entspricht werden mit {@code null} belegt
*/
- public static Object[] callStaticMethod(Class[] classes, Class superClass, String methodName,
- Object... methodParams) {
+ public static Object[] callStaticMethod(Class[] classes, Class superClass,
+ String methodName, Object... methodParams) {
Object[] ret = new Object[classes.length];
for (int i = 0; i < classes.length; i++) {
Class clazz = classes[i];
// pruefen, ob Klasse von Deiner Oberklasse abgeleitet ist
if (superClass != null && !superClass.isAssignableFrom(clazz))
continue;
- // Theoretisch koenne man hier Class.getMethod(methodName,methodParams)
- // aufrufen; habe aber bei den Konstruktorne (siehe loadPreferredObject(.))
- // festgestellt, wenn die Parameter GENAU die Typen sind, mit denen die
- // Methode deklariert ist... Besser ist es, die passende Methode durch
+ // Theoretisch koenne man hier
+ // Class.getMethod(methodName,methodParams)
+ // aufrufen; habe aber bei den Konstruktorne (siehe
+ // loadPreferredObject(.))
+ // festgestellt, wenn die Parameter GENAU die Typen sind, mit denen
+ // die
+ // Methode deklariert ist... Besser ist es, die passende Methode
+ // durch
// Ausprobieren zu ermitteln:
boolean methodFound = false;
for (Method m : clazz.getMethods()) {
@@ -1713,14 +1868,17 @@
}
}
if (!methodFound)
- throw new UnsupportedOperationException("Static method '" + methodName + "("
- + stringConcatWithSep(",", methodParams) + ")' not available in " + getSimpleClassName(clazz));
+ throw new UnsupportedOperationException("Static method '"
+ + methodName + "("
+ + stringConcatWithSep(",", methodParams)
+ + ")' not available in " + getSimpleClassName(clazz));
}
return ret;
}
/**
- * Liefert das Package einer Klasse erweitert um einen relativen Pfad in Punkt-Notation.
+ * Liefert das Package einer Klasse erweitert um einen relativen Pfad in
+ * Punkt-Notation.
*
* @param clazz
* eine Klasse
@@ -1746,11 +1904,13 @@
*/
public static void checkIdentifierAndError(String identifier) {
if (!Character.isJavaIdentifierStart(identifier.charAt(0)))
- throw new IllegalArgumentException("Illegal first character '" + 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 + "'");
+ throw new IllegalArgumentException("Illegal inner character '"
+ + c + "'");
}
}
@@ -1771,7 +1931,8 @@
}
/**
- * Sortiert einen Array aus beliebigen Objekten nach der natuerlichen Sortierung ihrer {@code toString()}-Werte.
+ * Sortiert einen Array aus beliebigen Objekten nach der natuerlichen
+ * Sortierung ihrer {@code toString()}-Werte.
*
* @param objects
* Objekte
@@ -1804,7 +1965,8 @@
}
/**
- * Returns the maximum value of some integer collections. If a collection is empty, 0 is taken as its maximum value.
+ * Returns the maximum value of some integer collections. If a collection is
+ * empty, 0 is taken as its maximum value.
*
* @param collections
* some collections
@@ -1833,7 +1995,8 @@
}
/**
- * Returns the minimum value of some integer collections. If a collection is empty, 0 is taken as its minimum value.
+ * Returns the minimum value of some integer collections. If a collection is
+ * empty, 0 is taken as its minimum value.
*
* @param collections
* some collections
@@ -1848,11 +2011,11 @@
* @param value
* Wert
* @param digits
- * Anzahl an Nachkommastellen (negative Werte runden auf Vorkommastellen, also 10er-, 100er-, usw.
- * Stelle)
+ * 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)
+ * 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
@@ -1876,23 +2039,27 @@
}
/**
- * Rundet alle Werte einer {@link Collection} auf Nach- oder Vorkommastellen.<br>
+ * 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}).
+ * 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)
+ * 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)
+ * 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) {
+ public static Collection<Number> round(Collection<Number> values,
+ int digits, int... mode) {
try {
Collection<Number> newCollection = values.getClass().newInstance();
for (Number value : values) {
@@ -1900,7 +2067,8 @@
}
return newCollection;
} catch (Exception err) {
- throw new IllegalArgumentException("Can not handle collection: " + getSimpleClassName(values), err);
+ throw new IllegalArgumentException("Can not handle collection: "
+ + getSimpleClassName(values), err);
}
}
@@ -1918,14 +2086,44 @@
}
/**
- * Returns the class names of the top of a stack trace. Duplicate class names are eliminated.
+ * Reads from the clipboard and returns the content as a string, if the
+ * content is of type stringFlavor. Returns empty String otherwise.
*
+ * @return Clipboard content as String. Empty String if clipboard empty or
+ * of wrong type
+ */
+ public static String pasteFromClipboard() {
+ Transferable contents = Toolkit.getDefaultToolkit()
+ .getSystemClipboard().getContents(null);
+ String result = "";
+
+ boolean hasTransferableText = (contents != null)
+ && contents.isDataFlavorSupported(DataFlavor.stringFlavor);
+ if (hasTransferableText) {
+ try {
+ result = (String) contents
+ .getTransferData(DataFlavor.stringFlavor);
+ } catch (Exception ex) {
+ // highly unlikely since we are using a standard DataFlavor
+ System.out.println(ex);
+ ex.printStackTrace();
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 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
+ * maximum count of classes, which are explored in the stack
+ * trace
*/
- public static String[] getLastStackTraceClasses(StackTraceElement[] stackTrace, int depth) {
+ public static String[] getLastStackTraceClasses(
+ StackTraceElement[] stackTrace, int depth) {
Vector<String> lastClasses = new Vector<String>();
for (StackTraceElement st : stackTrace) {
String className = st.getClassName();
@@ -1943,11 +2141,13 @@
* @param stackTrace
* stack trace to explore
* @param depth
- * maximum count of classes, which are explored in the stack trace
+ * 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) {
+ 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)
@@ -1962,22 +2162,27 @@
* @param stackTrace
* stack trace to explore
* @param depth
- * maximum count of classes, which are explored in the stack trace
+ * maximum count of classes, which are explored in the stack
+ * trace
* @see System#out
*/
- public static void printLastStackTraceClasses(StackTraceElement[] stackTrace, int depth) {
+ public static void printLastStackTraceClasses(
+ StackTraceElement[] stackTrace, int depth) {
printLastStackTraceClasses(stackTrace, depth, System.out);
}
/**
- * Initializes the {@link Logger} (root logger) with a default {@link ConsoleAppender}. This method does nothing
- * when the root logger already contains an appender, so it does not matter when this method is called twice or
- * more.
+ * Initializes the {@link Logger} (root logger) with a default
+ * {@link ConsoleAppender}. This method does nothing when the root logger
+ * already contains an appender, so it does not matter when this method is
+ * called twice or more.
*
* @param logLevel
- * log level (if {@code null} the level {@link Level#DEBUG} is used)
+ * log level (if {@code null} the level {@link Level#DEBUG} is
+ * used)
* @param logPattern
- * pattern for the console output (if {@code null} a default pattern "%r\t%p\t%c\t%m%n" is used)
+ * pattern for the console output (if {@code null} a default
+ * pattern "%r\t%p\t%c\t%m%n" is used)
*/
public static void initializeDefaultLogger(Level logLevel, String logPattern) {
// Diry-code by Steve:
@@ -2011,12 +2216,13 @@
}
/**
- * Erzeugt einen Log4j-Logger fuer ein Objekt. Als Identifier fuer den Logger wird der Klassenname des Objekts
- * verwendet.
+ * 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
+ * @return Logger mit dem Namen "NULL", falls das uebergebene Objekt
+ * {@code null} ist
*/
public static Logger createLogger(Object object) {
if (object == null)
@@ -2027,13 +2233,15 @@
}
/**
- * 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.
+ * 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)
+ * Fehlermeldung (wenn {@code null} wird die Message des Fehlers
+ * ausgegeben)
* @param err
* ein Fehler
*/
@@ -2045,8 +2253,9 @@
}
/**
- * 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.
+ * 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
@@ -2058,13 +2267,15 @@
}
/**
- * 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.
+ * 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)
+ * Fehlermeldung (wenn {@code null} wird die Message des Fehlers
+ * ausgegeben)
* @param err
* ein Fehler
*/
@@ -2076,8 +2287,9 @@
}
/**
- * 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.
+ * 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
@@ -2096,9 +2308,11 @@
* @param stackTrace
* stack trace to explore
* @param depth
- * maximum count of classes, which are explored in the stack trace
+ * maximum count of classes, which are explored in the stack
+ * trace
*/
- public static void logDebugLastStackTraceClasses(Category logger, StackTraceElement[] stackTrace, int depth) {
+ 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 = "";
@@ -2115,7 +2329,8 @@
* @param numClass
* TODO Martin, geht das nicht schöner? Ich bin zu doof
*/
- public static Number parseNumberAs(final String valueString, final Class<?> numClass) {
+ public static Number parseNumberAs(final String valueString,
+ final Class<?> numClass) {
if (StringUtils.trimToNull(valueString) == null)
return null;
@@ -2136,8 +2351,9 @@
} else if (numClass == Float.class) {
return doubleValue.floatValue();
} else {
- throw new RuntimeException("Please report that parseNumberAs has to support variables of type "
- + numClass.getCanonicalName());
+ throw new RuntimeException(
+ "Please report that parseNumberAs has to support variables of type "
+ + numClass.getCanonicalName());
}
}
@@ -2155,7 +2371,8 @@
}
/**
- * Interpretiert einen {@link String} zu einem {@link boolean} mit default <code>true</code>.
+ * Interpretiert einen {@link String} zu einem {@link boolean} mit default
+ * <code>true</code>.
*/
public static boolean parseStringDefaultTrue(String str) {
Boolean b = parseStringDefaultNull(str);
@@ -2173,19 +2390,22 @@
}
/**
- * Interpretiert einen {@link String} zu einem {@link boolean} mit default <code>null</code>.
+ * Interpretiert einen {@link String} zu einem {@link boolean} mit default
+ * <code>null</code>.
*/
public static Boolean parseStringDefaultNull(String str) {
return parseStringDefaultNull(str, true);
}
/**
- * Interpretiert einen {@link String} zu einem {@link boolean} mit default <code>null</code>.
+ * Interpretiert einen {@link String} zu einem {@link boolean} mit default
+ * <code>null</code>.
*/
public static Boolean parseStringDefaultNull(String str, boolean lax) {
if (str == null)
return null;
- String trimmedLowcase = removeWhitespacesToEmpty(str.toLowerCase()).trim();
+ String trimmedLowcase = removeWhitespacesToEmpty(str.toLowerCase())
+ .trim();
if (trimmedLowcase.startsWith("no"))
return false;
if (trimmedLowcase.endsWith("no"))
@@ -2240,7 +2460,8 @@
}
/**
- * Interpretiert einen {@link String} zu einem {@link boolean} mit default <code>false</code>.
+ * Interpretiert einen {@link String} zu einem {@link boolean} mit default
+ * <code>false</code>.
*/
public static boolean parseStringDefaultFalse(String str) {
Boolean b = parseStringDefaultNull(str);
@@ -2248,7 +2469,8 @@
}
/**
- * Converts a list to a map which contains the list items as keys and corresponding values.
+ * Converts a list to a map which contains the list items as keys and
+ * corresponding values.
*/
public static <K> Map<K, K> convertToMap(List<K> list) {
Map<K, K> map = new SequentialOrderedMap<K, K>();
@@ -2258,7 +2480,8 @@
}
/**
- * Removes leading and tailing "\n" newline commands. Very similar: StringUtils.trimToEmpty(string);
+ * Removes leading and tailing "\n" newline commands. Very similar:
+ * StringUtils.trimToEmpty(string);
*
* @param string
* return <code>null</code> if <code>null</code> is passed.
@@ -2294,10 +2517,12 @@
final static String REMOVETAGSREGEX = "\\s*<[^>]*>\\s*";
/**
- * Kann verwendet werden, um einen String von XML/HTML Tags zu säubern. Rückgabe ist ein ein String ohne Tags. Mehr
- * als 2 Leerzeichen werden zu einem Leerzeichen. Am Ende und Anfang nie Leerzeichen. Ein <li>wird zu einem * um die
- * Lesbarkeit als Rein-Text zu verbessern.<br/>
- * Die Methode basiert auf RegEx. Es wird also kein valides oder wellformed-XML erwartet.
+ * Kann verwendet werden, um einen String von XML/HTML Tags zu säubern.
+ * Rückgabe ist ein ein String ohne Tags. Mehr als 2 Leerzeichen werden zu
+ * einem Leerzeichen. Am Ende und Anfang nie Leerzeichen. Ein <li>wird zu
+ * einem * um die Lesbarkeit als Rein-Text zu verbessern.<br/>
+ * Die Methode basiert auf RegEx. Es wird also kein valides oder
+ * wellformed-XML erwartet.
*/
public static String removeTags(String withTags) {
if (withTags == null)
@@ -2305,42 +2530,48 @@
String withoutTags = withTags;
- Matcher matcher = RegexCache.getInstance().getMatcher("<li>", withoutTags);
+ Matcher matcher = RegexCache.getInstance().getMatcher("<li>",
+ withoutTags);
if (matcher.find())
withoutTags = matcher.replaceAll("*");
-
- matcher = RegexCache.getInstance().getMatcher(REMOVETAGSREGEX, withoutTags);
+
+ matcher = RegexCache.getInstance().getMatcher(REMOVETAGSREGEX,
+ withoutTags);
if (matcher.find())
withoutTags = matcher.replaceAll(" ");
-
+
matcher = RegexCache.getInstance().getMatcher("\\b\\+\\b", withoutTags);
if (matcher.find())
withoutTags = matcher.replaceAll(" ");
-
+
matcher = RegexCache.getInstance().getMatcher("\\s{1,}", withoutTags);
if (matcher.find())
withoutTags = matcher.replaceAll(" ");
-// withoutTags = withoutTags.replaceAll("<li>", "*");
-// withoutTags = withoutTags.replaceAll(REMOVETAGSREGEX, " ");
-// withoutTags = withoutTags.replaceAll("\\s{1,}", " ");
+ // withoutTags = withoutTags.replaceAll("<li>", "*");
+ // withoutTags = withoutTags.replaceAll(REMOVETAGSREGEX, " ");
+ // withoutTags = withoutTags.replaceAll("\\s{1,}", " ");
return withoutTags.trim();
}
/**
- * Liefert einen String zurück, der zeigt, wo die RegEx im String getroffen hat. Der getroffene Bereich wird
- * +-$border Zeichen ausgeschnitten und GROSS geschrieben. <br/>
+ * Liefert einen String zurück, der zeigt, wo die RegEx im String getroffen
+ * hat. Der getroffene Bereich wird +-$border Zeichen ausgeschnitten und
+ * GROSS geschrieben. <br/>
* Beispiele:
* <ul>
- * <li>assertEquals("abcBAUMdef", LangUtil.regExBereich("abcBaumdef", "Baum", 115)); <br/>
- * <li>assertEquals("5BAUM6", LangUtil.regExBereich("12345Baum67890", "Baum", 1));
+ * <li>assertEquals("abcBAUMdef", LangUtil.regExBereich("abcBaumdef",
+ * "Baum", 115)); <br/>
+ * <li>assertEquals("5BAUM6", LangUtil.regExBereich("12345Baum67890",
+ * "Baum", 1));
*/
static public String regExBereich(String value, String regex, int border) {
return regExBereich(value, regex, border, ".*", ".*");
}
- static public String regExBereich(String value, String regex, int border, String pre, String post) {
+ static public String regExBereich(String value, String regex, int border,
+ String pre, String post) {
if (border < 0)
throw new IllegalStateException("border may not be smaller 0!");
@@ -2362,13 +2593,16 @@
int s2 = Math.min(start, border);
String vorher = value.substring(start - s2, start);
- String nachher = value.substring(matcher.end(1), Math.min(matcher.end(1) + border, value.length()));
+ String nachher = value.substring(matcher.end(1),
+ Math.min(matcher.end(1) + border, value.length()));
- return vorher.toLowerCase() + treffer.toUpperCase() + nachher.toLowerCase();
+ return vorher.toLowerCase() + treffer.toUpperCase()
+ + nachher.toLowerCase();
}
/**
- * Fasst Zeilenumbrüche und sonstige Leerräume zu einem einizgen Leerzeichen zusammen.
+ * Fasst Zeilenumbrüche und sonstige Leerräume zu einem einizgen Leerzeichen
+ * zusammen.
*
* @Deprecated use removeWhitespacesToNull
*/
@@ -2378,14 +2612,16 @@
}
/**
- * Fasst Zeilenumbrüche und sonstige Leerräume zu einem einizgen Leerzeichen zusammen.
+ * Fasst Zeilenumbrüche und sonstige Leerräume zu einem einizgen Leerzeichen
+ * zusammen.
*/
public static String removeWhitespacesToNull(String string) {
return StringUtils.trimToNull(removeWhitespacesToEmpty(string));
}
/**
- * Alle Zeilenumbrüche raus // Geschützte Leerzeichen weg // Tabulator -> Leer
+ * Alle Zeilenumbrüche raus // Geschützte Leerzeichen weg // Tabulator ->
+ * Leer
*/
final static String REMOVE_WHITESPACES_PATTERN_R = "[\\n|\\t|\\r|\\u0085|\\u2028|\\u2029|\\u00A0]";
// final static Pattern REMOVE_WHITESPACES_PATTERN =
@@ -2395,11 +2631,13 @@
*/
final static String REMOVE_WHITESPACES_PATTERN2_R = "\\s{2,}";
- // final static Pattern REMOVE_WHITESPACES_PATTERN2 = RegexCache.getInstance().getPattern(
+ // final static Pattern REMOVE_WHITESPACES_PATTERN2 =
+ // RegexCache.getInstance().getPattern(
// REMOVE_WHITESPACES_PATTERN2_R);
/**
- * Fasst Zeilenumbrüche und sonstige Leerräume zu einem einizgen Leerzeichen zusammen.
+ * Fasst Zeilenumbrüche und sonstige Leerräume zu einem einizgen Leerzeichen
+ * zusammen.
*
* @author gregor
*/
@@ -2412,18 +2650,21 @@
// Tabulator -> Leer
// final Matcher matcher = REMOVE_WHITESPACES_PATTERN.matcher(string);
- final Matcher matcher = RegexCache.getInstance().getMatcher(REMOVE_WHITESPACES_PATTERN_R, string);
+ final Matcher matcher = RegexCache.getInstance().getMatcher(
+ REMOVE_WHITESPACES_PATTERN_R, string);
string = matcher.replaceAll(" ");
- // matcher = RegexCache.getInstance().getPattern("\\u00A0").matcher(string);
+ // matcher =
+ // RegexCache.getInstance().getPattern("\\u00A0").matcher(string);
// string = matcher.replaceAll(" ");
//
// matcher = RegexCache.getInstance().getPattern("\\t").matcher(string);
// string = matcher.replaceAll(" ");
// Leerraum konsolidieren
- final String result = RegexCache.getInstance().getMatcher(REMOVE_WHITESPACES_PATTERN2_R, string)
+ final String result = RegexCache.getInstance()
+ .getMatcher(REMOVE_WHITESPACES_PATTERN2_R, string)
.replaceAll(" ");
return result;
@@ -2448,18 +2689,22 @@
public static String formatInterval(final long l) {
final long days = TimeUnit.MILLISECONDS.toDays(l);
final long hr = TimeUnit.MILLISECONDS.toHours(l);
- final long min = TimeUnit.MILLISECONDS.toMinutes(l - TimeUnit.HOURS.toMillis(hr));
- final long sec = TimeUnit.MILLISECONDS.toSeconds(l - TimeUnit.HOURS.toMillis(hr)
- - TimeUnit.MINUTES.toMillis(min));
- // final long ms = TimeUnit.MILLISECONDS.toMillis(l - TimeUnit.HOURS.toMillis(hr) -
+ final long min = TimeUnit.MILLISECONDS.toMinutes(l
+ - TimeUnit.HOURS.toMillis(hr));
+ final long sec = TimeUnit.MILLISECONDS.toSeconds(l
+ - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min));
+ // final long ms = TimeUnit.MILLISECONDS.toMillis(l -
+ // TimeUnit.HOURS.toMillis(hr) -
// TimeUnit.MINUTES.toMillis(min)
// - TimeUnit.SECONDS.toMillis(sec));
if (days > 0)
- return String.format("%d days %02d:%02d:%02d", days, hr % 24, min, sec);
+ return String.format("%d days %02d:%02d:%02d", days, hr % 24, min,
+ sec);
else
return String.format("%02d:%02d:%02d", hr, min, sec);
// if (days > 0)
- // return String.format("%ddays %02d:%02d:%02d.%03d", days, hr, min, sec, ms);
+ // return String.format("%ddays %02d:%02d:%02d.%03d", days, hr, min,
+ // sec, ms);
// else
// return String.format("%02d:%02d:%02d.%03d", days, hr, min, sec, ms);
}
@@ -2473,7 +2718,8 @@
int start = 0;
while (itemsRemaining != 0) {
- int end = itemsRemaining >= maxListSize ? (start + maxListSize) : start + itemsRemaining;
+ int end = itemsRemaining >= maxListSize ? (start + maxListSize)
+ : start + itemsRemaining;
splittedList.add(list.subList(start, end));
@@ -2488,7 +2734,8 @@
/**
* Rauskopiert aus ExecutorService JavaDoc
*/
- public static void shutdownAndAwaitTermination(ExecutorService pool, int secondsToWait) {
+ public static void shutdownAndAwaitTermination(ExecutorService pool,
+ int secondsToWait) {
pool.shutdown(); // Disable new tasks from being submitted
try {
// Wait a while for existing tasks to terminate
Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/styling/StylingUtil.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/styling/StylingUtil.java 2012-06-28 22:55:39 UTC (rev 2068)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/styling/StylingUtil.java 2012-06-30 19:35:05 UTC (rev 2069)
@@ -39,6 +39,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
+import java.io.StringBufferInputStream;
import java.io.StringWriter;
import java.lang.reflect.Array;
import java.net.URL;
@@ -2556,7 +2557,33 @@
}
}
+
+ /**
+ * Loads {@link Style}s from a String
+ *
+ * @param xmlString
+ * String to read the SLD from
+ *
+ * @return An {@link Array} of {@link Style}s, can be length==0. null if
+ * file not exists
+ */
+ public static Style[] loadSLD(String xmlString) {
+ Style[] styles = null;
+ try {
+ SLDParser stylereader = new SLDParser(StylingUtil.STYLE_FACTORY,
+ new StringBufferInputStream(xmlString));
+ styles = stylereader.readXML();
+ return styles;
+ } catch (Exception e) {
+ LOGGER.warn(
+ " ... no styles recognized. Return 'new Style[] { null }' ",
+ e);
+ return new Style[] { null };
+ }
+
+ }
+
/**
* Loads {@link Style}s from a SLD {@link InputStream}
*
Modified: trunk/schmitzm-gt/src/test/java/de/schmitzm/geotools/styling/StylingUtilTest.java
===================================================================
--- trunk/schmitzm-gt/src/test/java/de/schmitzm/geotools/styling/StylingUtilTest.java 2012-06-28 22:55:39 UTC (rev 2068)
+++ trunk/schmitzm-gt/src/test/java/de/schmitzm/geotools/styling/StylingUtilTest.java 2012-06-30 19:35:05 UTC (rev 2069)
@@ -1,6 +1,7 @@
package de.schmitzm.geotools.styling;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -42,6 +43,7 @@
import de.schmitzm.geotools.styling.StylingUtil.SelectionStylesTypes;
import de.schmitzm.geotools.testing.GTTestingUtil;
import de.schmitzm.io.IOUtil;
+import de.schmitzm.lang.LangUtil;
import de.schmitzm.testing.TestingClass;
import de.schmitzm.testing.TestingUtil;
@@ -192,5 +194,20 @@
assertEquals(cme.getOpacity(), cme2.getOpacity());
assertEquals(cme.getColor(), cme2.getColor());
}
+
+ @Test
+ public void testLoadSldFromString(){
+ StyleBuilder sb = StylingUtil.STYLE_BUILDER;
+ RasterSymbolizer rs = sb.createRasterSymbolizer();
+ Style style = sb.createStyle(rs);
+ String xmlString="";
+ try {
+ xmlString = StylingUtil.toXMLString(style);
+ } catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ Style[] loadedStyle = StylingUtil.loadSLD(xmlString);
+ assertFalse(StylingUtil.isStyleDifferent(style, loadedStyle[0]));
+ }
}
\ No newline at end of file
More information about the Schmitzm-commits
mailing list