You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2017/12/01 08:08:59 UTC

svn commit: r1816802 [1/3] - /felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/

Author: davidb
Date: Fri Dec  1 08:08:59 2017
New Revision: 1816802

URL: http://svn.apache.org/viewvc?rev=1816802&view=rev
Log:
[converter] update the source to follow OSGi formatting guidelines

Modified:
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/AbstractSpecifying.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ArrayDelegate.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/CollectionDelegate.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConversionException.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converter.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilder.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilderImpl.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterFunction.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterImpl.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converters.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/CustomConverterImpl.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DTOUtil.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DynamicMapLikeFacade.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Functioning.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/FunctioningImpl.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/InternalConverter.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/InternalConverting.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ListDelegate.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/MapDelegate.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Rule.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/SetDelegate.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Specifying.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/TargetRule.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/TypeRule.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Util.java

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/AbstractSpecifying.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/AbstractSpecifying.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/AbstractSpecifying.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/AbstractSpecifying.java Fri Dec  1 08:08:59 2017
@@ -17,86 +17,87 @@
 package org.osgi.util.converter;
 
 /**
- * @author $Id: 86baf5c8bc1ae985fde13ffda43f4c8a28657211 $
+ * @author $Id: f9c9624a164b35571e02e1bdd3c85f5407fd6cfa $
  */
-abstract class AbstractSpecifying<T extends Specifying<T>> implements Specifying<T> {
-    protected volatile Object defaultValue;
-    protected volatile boolean hasDefault = false;
-    protected volatile boolean forceCopy = false;
-    protected volatile boolean keysIgnoreCase = false;
-    protected volatile Class<?> sourceAsClass;
-    protected volatile boolean sourceAsDTO = false;
-    protected volatile boolean sourceAsJavaBean = false;
-    protected volatile Class<?> targetAsClass;
-    protected volatile boolean targetAsDTO = false;
-    protected volatile boolean targetAsJavaBean = false;
-
-    @SuppressWarnings("unchecked")
-    private T castThis() {
-        return (T) this;
-    }
-
-    @Override
-    public T copy() {
-        forceCopy  = true;
-        return castThis();
-    }
-
-    @Override
-    public T defaultValue(Object defVal) {
-        defaultValue = defVal;
-        hasDefault = true;
-        return castThis();
-    }
-
-    @Override
-    public T keysIgnoreCase() {
-        keysIgnoreCase = true;
-        return castThis();
-    }
-
-    @Override
-    public T sourceAs(Class<?> cls) {
-        sourceAsClass = cls;
-        return castThis();
-    }
-
-    @Override
-    public T sourceAsBean() {
-        // To avoid ambiguity, reset any instruction to sourceAsDTO
-        sourceAsDTO = false;
-        sourceAsJavaBean = true;
-        return castThis();
-    }
-
-    @Override
-    public T sourceAsDTO() {
-        // To avoid ambiguity, reset any instruction to sourceAsJavaBean
-        sourceAsJavaBean = false;
-        sourceAsDTO = true;
-        return castThis();
-    }
-
-    @Override
-    public T targetAs(Class<?> cls) {
-        targetAsClass = cls;
-        return castThis();
-    }
-
-    @Override
-    public T targetAsBean() {
-        // To avoid ambiguity, reset any instruction to targetAsDTO
-        targetAsDTO = false;
-        targetAsJavaBean = true;
-        return castThis();
-    }
-
-    @Override
-    public T targetAsDTO() {
-        // To avoid ambiguity, reset any instruction to targetAsJavaBean
-        targetAsJavaBean = false;
-        targetAsDTO = true;
-        return castThis();
-    }
+abstract class AbstractSpecifying<T extends Specifying<T>>
+		implements Specifying<T> {
+	protected volatile Object		defaultValue;
+	protected volatile boolean		hasDefault			= false;
+	protected volatile boolean		forceCopy			= false;
+	protected volatile boolean		keysIgnoreCase		= false;
+	protected volatile Class< ? >	sourceAsClass;
+	protected volatile boolean		sourceAsDTO			= false;
+	protected volatile boolean		sourceAsJavaBean	= false;
+	protected volatile Class< ? >	targetAsClass;
+	protected volatile boolean		targetAsDTO			= false;
+	protected volatile boolean		targetAsJavaBean	= false;
+
+	@SuppressWarnings("unchecked")
+	private T castThis() {
+		return (T) this;
+	}
+
+	@Override
+	public T copy() {
+		forceCopy = true;
+		return castThis();
+	}
+
+	@Override
+	public T defaultValue(Object defVal) {
+		defaultValue = defVal;
+		hasDefault = true;
+		return castThis();
+	}
+
+	@Override
+	public T keysIgnoreCase() {
+		keysIgnoreCase = true;
+		return castThis();
+	}
+
+	@Override
+	public T sourceAs(Class< ? > cls) {
+		sourceAsClass = cls;
+		return castThis();
+	}
+
+	@Override
+	public T sourceAsBean() {
+		// To avoid ambiguity, reset any instruction to sourceAsDTO
+		sourceAsDTO = false;
+		sourceAsJavaBean = true;
+		return castThis();
+	}
+
+	@Override
+	public T sourceAsDTO() {
+		// To avoid ambiguity, reset any instruction to sourceAsJavaBean
+		sourceAsJavaBean = false;
+		sourceAsDTO = true;
+		return castThis();
+	}
+
+	@Override
+	public T targetAs(Class< ? > cls) {
+		targetAsClass = cls;
+		return castThis();
+	}
+
+	@Override
+	public T targetAsBean() {
+		// To avoid ambiguity, reset any instruction to targetAsDTO
+		targetAsDTO = false;
+		targetAsJavaBean = true;
+		return castThis();
+	}
+
+	@Override
+	public T targetAsDTO() {
+		// To avoid ambiguity, reset any instruction to targetAsJavaBean
+		targetAsJavaBean = false;
+		targetAsDTO = true;
+		return castThis();
+	}
 
 }

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ArrayDelegate.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ArrayDelegate.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ArrayDelegate.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ArrayDelegate.java Fri Dec  1 08:08:59 2017
@@ -20,12 +20,12 @@ import java.lang.reflect.Array;
 import java.util.List;
 
 /**
- * @author $Id$
+ * @author $Id: 3fe0de68512646ef3f63300b1a93a3aa2ab4e47d $
  */
 class ArrayDelegate<T> extends AbstractCollectionDelegate<T>
 		implements List<T> {
 	// An array, either scalar or primitive
-	private final Object			backingArray;
+	private final Object backingArray;
 
 	ArrayDelegate(Object arr) {
 		backingArray = arr;
@@ -44,7 +44,7 @@ class ArrayDelegate<T> extends AbstractC
 	@Override
 	public Object[] toArray() {
 		Object[] arr = (Object[]) Array.newInstance(Object.class, size());
-		for (int i=0; i<size(); i++) {
+		for (int i = 0; i < size(); i++) {
 			arr[i] = Array.get(backingArray, i);
 		}
 		return arr;

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/CollectionDelegate.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/CollectionDelegate.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/CollectionDelegate.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/CollectionDelegate.java Fri Dec  1 08:08:59 2017
@@ -20,7 +20,7 @@ import java.util.Collection;
 import java.util.List;
 
 /**
- * @author $Id$
+ * @author $Id: e71af7f75c634bd77b2c8ea6da52fe4788760e99 $
  */
 class CollectionDelegate<T> extends AbstractCollectionDelegate<T>
 		implements List<T> {
@@ -29,7 +29,7 @@ class CollectionDelegate<T> extends Abst
 	CollectionDelegate(Collection<T> coll) {
 		delegate = coll;
 	}
-	
+
 	@Override
 	public int size() {
 		return delegate.size();

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConversionException.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConversionException.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConversionException.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConversionException.java Fri Dec  1 08:08:59 2017
@@ -19,7 +19,8 @@ package org.osgi.util.converter;
  * This Runtime Exception is thrown when an object is requested to be converted
  * but the conversion cannot be done. For example when the String "test" is to
  * be converted into a Long.
- * @author $Id: 2e85310dba06f5837f45a670bc9369478da3de71 $
+ * 
+ * @author $Id: c4201fffc3047352cace93e18839741a256877b1 $
  */
 public class ConversionException extends RuntimeException {
 	private static final long serialVersionUID = 1L;

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converter.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converter.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converter.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converter.java Fri Dec  1 08:08:59 2017
@@ -22,7 +22,7 @@ import org.osgi.annotation.versioning.Pr
  * from the service registry. The conversion is then completed via the
  * Converting interface that has methods to specify the target type.
  *
- * @author $Id: bed4a27f1d9cbff0f3646d6df355843518280e33 $
+ * @author $Id: ac7df57df8df90724ba643fda24565ff995713c2 $
  * @ThreadSafe
  */
 @ProviderType
@@ -37,6 +37,7 @@ public interface Converter {
 
 	/**
 	 * Start defining a function that can perform given conversions.
+	 * 
 	 * @return A {@link Functioning} object to complete the definition.
 	 */
 	Functioning function();

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilder.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilder.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilder.java Fri Dec  1 08:08:59 2017
@@ -22,12 +22,12 @@ import org.osgi.annotation.versioning.Pr
 /**
  * A builder to create a new converter with modified behaviour based on an
  * existing converter. The modified behaviour is specified by providing rules
- * and/or conversion functions. If multiple rules match they will be visited
- * in sequence of registration. If a rule's function returns {@code null} the
- * next ruld found will be visited. If none of the rules can handle the
- * conversion, the original converter will be used to perform the conversion.
+ * and/or conversion functions. If multiple rules match they will be visited in
+ * sequence of registration. If a rule's function returns {@code null} the next
+ * ruld found will be visited. If none of the rules can handle the conversion,
+ * the original converter will be used to perform the conversion.
  *
- * @author $Id: 7b467a98fd2cd5107f5a546780abfae21d067a53 $
+ * @author $Id: 6552ff889a7b2648b0eb57307d4fd6eac4b0ed19 $
  */
 @ProviderType
 public interface ConverterBuilder {
@@ -47,11 +47,11 @@ public interface ConverterBuilder {
 	 * the failed conversion.
 	 *
 	 * @param func The function to be used to handle errors.
-     * @return This converter builder for further building.
+	 * @return This converter builder for further building.
 	 */
 	ConverterBuilder errorHandler(ConverterFunction func);
 
-    /**
+	/**
 	 * Register a conversion rule for this converter. Note that only the target
 	 * type is specified, so the rule will be visited for every conversion to
 	 * the target type.
@@ -62,15 +62,15 @@ public interface ConverterBuilder {
 	 */
 	ConverterBuilder rule(Type type, ConverterFunction func);
 
-    /**
-     * Register a conversion rule for this converter.
-     *
-     * @param rule A rule implementation.
-     * @return This converter builder for further building.
-     */
+	/**
+	 * Register a conversion rule for this converter.
+	 *
+	 * @param rule A rule implementation.
+	 * @return This converter builder for further building.
+	 */
 	ConverterBuilder rule(TargetRule rule);
 
-    /**
+	/**
 	 * Register a catch-all rule, will be called of no other rule matches.
 	 *
 	 * @param func The function that will handle the conversion.

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilderImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilderImpl.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilderImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterBuilderImpl.java Fri Dec  1 08:08:59 2017
@@ -25,72 +25,75 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * @author $Id: e13e1ab6e75b979602b6611c48a4ea66a20551b0 $
+ * @author $Id: 79f077e03220b00fa0aa224e712bd7f6fe06bea9 $
  */
 class ConverterBuilderImpl implements ConverterBuilder {
-    private final InternalConverter converter;
-    private final Map<Type, List<ConverterFunction>> rules = new HashMap<>();
-    private final List<ConverterFunction> catchAllRules = new ArrayList<>();
-    private final List<ConverterFunction> errorHandlers = new ArrayList<>();
-
-    public ConverterBuilderImpl(InternalConverter c) {
-        this.converter = c;
-    }
-
-    @Override
-    public InternalConverter build() {
-        return new CustomConverterImpl(converter, rules, catchAllRules, errorHandlers);
-    }
-
-    @Override
-    public ConverterBuilder errorHandler(ConverterFunction func) {
-        errorHandlers.add(func);
-        return this;
-    }
-
-    @Override
-    public ConverterBuilder rule(ConverterFunction func) {
-    	catchAllRules.add(func);
-        return this;
-    }
-
-    @Override
-    public ConverterBuilder rule(Type t, ConverterFunction func) {
-    	getRulesList(t).add(func);
-    	return this;
-    }
-
-    @Override
-    public ConverterBuilder rule(TargetRule rule) {
-    	Type type = rule.getTargetType();
-    	getRulesList(type).add(rule.getFunction());
-
-    	if (type instanceof ParameterizedType) {
-    	    ParameterizedType pt = (ParameterizedType) type;
-
-    	    boolean containsWildCard = false;
-    	    for (Type t : pt.getActualTypeArguments()) {
-    	        if (t instanceof WildcardType) {
-    	            containsWildCard = true;
-    	            break;
-    	        }
-    	    }
-
-    	    // If the parameterized type is a wildcard (e.g. '?') then register also the raw
-    	    // type for the rule. I.e Class<?> will also be registered under bare Class.
-    	    if (containsWildCard)
-    	        getRulesList(pt.getRawType()).add(rule.getFunction());
-    	}
-
-        return this;
-    }
-
-    private List<ConverterFunction> getRulesList(Type type) {
-        List<ConverterFunction> l = rules.get(type);
-    	if (l == null) {
-    		l = new ArrayList<>();
-    		rules.put(type, l);
-    	}
-        return l;
-    }
+	private final InternalConverter					converter;
+	private final Map<Type,List<ConverterFunction>>	rules			= new HashMap<>();
+	private final List<ConverterFunction>			catchAllRules	= new ArrayList<>();
+	private final List<ConverterFunction>			errorHandlers	= new ArrayList<>();
+
+	public ConverterBuilderImpl(InternalConverter c) {
+		this.converter = c;
+	}
+
+	@Override
+	public InternalConverter build() {
+		return new CustomConverterImpl(converter, rules, catchAllRules,
+				errorHandlers);
+	}
+
+	@Override
+	public ConverterBuilder errorHandler(ConverterFunction func) {
+		errorHandlers.add(func);
+		return this;
+	}
+
+	@Override
+	public ConverterBuilder rule(ConverterFunction func) {
+		catchAllRules.add(func);
+		return this;
+	}
+
+	@Override
+	public ConverterBuilder rule(Type t, ConverterFunction func) {
+		getRulesList(t).add(func);
+		return this;
+	}
+
+	@Override
+	public ConverterBuilder rule(TargetRule rule) {
+		Type type = rule.getTargetType();
+		getRulesList(type).add(rule.getFunction());
+
+		if (type instanceof ParameterizedType) {
+			ParameterizedType pt = (ParameterizedType) type;
+
+			boolean containsWildCard = false;
+			for (Type t : pt.getActualTypeArguments()) {
+				if (t instanceof WildcardType) {
+					containsWildCard = true;
+					break;
+				}
+			}
+
+			// If the parameterized type is a wildcard (e.g. '?') then register
+			// also the raw
+			// type for the rule. I.e Class<?> will also be registered under
+			// bare Class.
+			if (containsWildCard)
+				getRulesList(pt.getRawType()).add(rule.getFunction());
+		}
+
+		return this;
+	}
+
+	private List<ConverterFunction> getRulesList(Type type) {
+		List<ConverterFunction> l = rules.get(type);
+		if (l == null) {
+			l = new ArrayList<>();
+			rules.put(type, l);
+		}
+		return l;
+	}
 }

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterFunction.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterFunction.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterFunction.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterFunction.java Fri Dec  1 08:08:59 2017
@@ -25,15 +25,15 @@ import org.osgi.annotation.versioning.Co
  * <P>
  * This interface can also be used to register a custom error handler.
  *
- * @author $Id: 60a17aadcd05222bc5aa57bb77d44e6364ef645d $
+ * @author $Id: 98afbf4376ad2866c36a4a0e13eb41ebe4feb463 $
  */
 @ConsumerType
 public interface ConverterFunction {
-    /**
-     * Special object to indicate that a custom converter rule or error
-     * handler cannot handle the conversion.
-     */
-    static final Object CANNOT_HANDLE = new Object();
+	/**
+	 * Special object to indicate that a custom converter rule or error handler
+	 * cannot handle the conversion.
+	 */
+	static final Object CANNOT_HANDLE = new Object();
 
 	/**
 	 * Convert the object into the target type.
@@ -42,13 +42,12 @@ public interface ConverterFunction {
 	 *            {@code null} as the convert function will not be invoked for
 	 *            null values.
 	 * @param targetType The target type.
-	 * @return The conversion result or {@link #CANNOT_HANDLE} to indicate that the
-	 *         convert function cannot handle this conversion. In this case the
-	 *         next matching rule or parent converter will be given a
+	 * @return The conversion result or {@link #CANNOT_HANDLE} to indicate that
+	 *         the convert function cannot handle this conversion. In this case
+	 *         the next matching rule or parent converter will be given a
 	 *         opportunity to convert.
 	 * @throws Exception the operation can throw an exception if the conversion
 	 *             can not be performed due to incompatible types.
 	 */
-	Object apply(Object obj, Type targetType)
-			throws Exception;
+	Object apply(Object obj, Type targetType) throws Exception;
 }

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterImpl.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConverterImpl.java Fri Dec  1 08:08:59 2017
@@ -28,196 +28,201 @@ import java.util.regex.Pattern;
 import org.osgi.util.function.Function;
 
 /**
- * Top-level implementation of the Converter. This class contains a number of rules
- * that cover 'special cases'. <p>
- *
- * Note that this class avoids lambda's and hard dependencies on Java-8 (or later) types
- * to also work under Java 7.
+ * Top-level implementation of the Converter. This class contains a number of
+ * rules that cover 'special cases'.
+ * <p>
+ * Note that this class avoids lambda's and hard dependencies on Java-8 (or
+ * later) types to also work under Java 7.
  */
 class ConverterImpl implements InternalConverter {
-    private static final SimpleDateFormat ISO8601_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
-    static {
-        ISO8601_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
-    }
-
-    @Override
-    public InternalConverting convert(Object obj) {
-        return new ConvertingImpl(this, obj);
-    }
-
-    @Override
-    public Functioning function() {
-        return new FunctioningImpl(this);
-    }
+	private static final SimpleDateFormat ISO8601_DATE_FORMAT = new SimpleDateFormat(
+			"yyyy-MM-dd'T'HH:mm:ssXXX");
+	static {
+		ISO8601_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
+	}
+
+	@Override
+	public InternalConverting convert(Object obj) {
+		return new ConvertingImpl(this, obj);
+	}
+
+	@Override
+	public Functioning function() {
+		return new FunctioningImpl(this);
+	}
 
 	void addStandardRules(ConverterBuilder cb) {
-        // Not written using lambda's because this code needs to run with Java 7
-        cb.rule(new Rule<Calendar, String>(new Function<Calendar, String>() {
-            @Override
-            public String apply(Calendar f) {
-                return ISO8601_DATE_FORMAT.format(f.getTime());
-            }
-        }) {});
-
-        cb.rule(new Rule<String, Calendar>(new Function<String, Calendar>() {
-            @Override
-            public Calendar apply(String f) {
-                try {
-                    Calendar cc = Calendar.getInstance();
-                    cc.setTime(ISO8601_DATE_FORMAT.parse(f));
-                    return cc;
-                } catch (ParseException e) {
-                    throw new ConversionException("Cannot convert " + f + " to Date", e);
-                }
-            }
-        }) {});
-
-        cb.rule(new Rule<Calendar, Long>(new Function<Calendar, Long>() {
-            @Override
-            public Long apply(Calendar f) {
-                return f.getTime().getTime();
-            }
-        }) {});
-
-        cb.rule(new Rule<Long, Calendar>(new Function<Long, Calendar>() {
-            @Override
-            public Calendar apply(Long f) {
-                Calendar c = Calendar.getInstance();
-                c.setTimeInMillis(f);
-                return c;
-            }
-        }) {});
-
-        cb.rule(new Rule<Character, Boolean>(new Function<Character, Boolean>() {
-            @Override
-            public Boolean apply(Character c) {
-                return c.charValue() != 0;
-            }
-        }) {});
-
-        cb.rule(new Rule<Boolean, Character>(new Function<Boolean, Character>() {
-            @Override
-            public Character apply(Boolean b) {
-                return b.booleanValue() ? (char) 1: (char) 0;
-            }
-        }) {});
-
-        cb.rule(new Rule<Character, Integer>(new Function<Character, Integer>() {
-            @Override
-            public Integer apply(Character c) {
-                return (int) c.charValue();
-            }
-        }) {});
-
-        cb.rule(new Rule<Character, Long>(new Function<Character, Long>() {
-            @Override
-            public Long apply(Character c) {
-                return (long) c.charValue();
-            }
-        }) {});
-
-        cb.rule(new Rule<String, Character>(new Function<String, Character>() {
-            @Override
-            public Character apply(String f) {
-                return f.length() > 0 ? f.charAt(0) : 0;
-            }
-        }) {});
-
-        cb.rule(new Rule<String, Class<?>>(new Function<String, Class<?>>() {
-            @Override
-            public Class<?> apply(String cn) {
-                return loadClassUnchecked(cn);
-            }
-        }) {});
-
-        cb.rule(new Rule<Date, Long>(new Function<Date, Long>() {
-            @Override
-            public Long apply(Date d) {
-                return d.getTime();
-            }
-        }) {});
-
-        cb.rule(new Rule<Long, Date>(new Function<Long, Date>() {
-            @Override
-            public Date apply(Long f) {
-                return new Date(f);
-            }
-        }) {});
-
-        cb.rule(new Rule<Date, String>(new Function<Date, String>() {
-            @Override
-            public String apply(Date d) {
-                return ISO8601_DATE_FORMAT.format(d);
-            }
-        }) {});
-
-        cb.rule(new Rule<String, Date>(new Function<String, Date>() {
-            @Override
-            public Date apply(String f) {
-                try {
-                    return ISO8601_DATE_FORMAT.parse(f);
-                } catch (ParseException e) {
-                    throw new ConversionException("Cannot convert " + f + " to Date", e);
-                }
-            }
-        }) {});
-
-        cb.rule(new Rule<String, Pattern>(new Function<String, Pattern>() {
-            @Override
-            public Pattern apply(String ps) {
-                return Pattern.compile(ps);
-            }
-        }) {});
-
-        cb.rule(new Rule<String, UUID>(new Function<String, UUID>() {
-            @Override
-            public UUID apply(String uuid) {
-                return UUID.fromString(uuid);
-            }
-        }) {});
-
-        // Special conversions between character arrays and String
-        cb.rule(new Rule<char[], String>(new Function<char[], String>() {
-            @Override
-            public String apply(char[] ca) {
-                return charArrayToString(ca);
-            }
-        }) {});
-
-        cb.rule(new Rule<Character[], String>(new Function<Character[], String>() {
-            @Override
-            public String apply(Character[] ca) {
-                return characterArrayToString(ca);
-            }
-        }) {});
-
-        cb.rule(new Rule<String, char[]>(new Function<String, char[]>() {
-            @Override
-            public char[] apply(String s) {
-                return stringToCharArray(s);
-            }
-        }) {});
-
-        cb.rule(new Rule<String, Character[]>(new Function<String, Character[]>() {
-            @Override
-            public Character[] apply(String s) {
-                return stringToCharacterArray(s);
-            }
-        }) {});
-
-        cb.rule(new Rule<Number, Boolean>(new Function<Number, Boolean>() {
-            @Override
-            public Boolean apply(Number obj) {
-                return obj.longValue() != 0;
-            }
-        }) {});
-
-        cb.rule(new Rule<Number, Character>(new Function<Number, Character>() {
-            @Override
-            public Character apply(Number obj) {
-                return Character.valueOf((char) obj.intValue());
-            }
-        }) {});
+		// Not written using lambda's because this code needs to run with Java 7
+		cb.rule(new Rule<Calendar,String>(new Function<Calendar,String>() {
+			@Override
+			public String apply(Calendar f) {
+				return ISO8601_DATE_FORMAT.format(f.getTime());
+			}
+		}) {});
+
+		cb.rule(new Rule<String,Calendar>(new Function<String,Calendar>() {
+			@Override
+			public Calendar apply(String f) {
+				try {
+					Calendar cc = Calendar.getInstance();
+					cc.setTime(ISO8601_DATE_FORMAT.parse(f));
+					return cc;
+				} catch (ParseException e) {
+					throw new ConversionException(
+							"Cannot convert " + f + " to Date", e);
+				}
+			}
+		}) {});
+
+		cb.rule(new Rule<Calendar,Long>(new Function<Calendar,Long>() {
+			@Override
+			public Long apply(Calendar f) {
+				return f.getTime().getTime();
+			}
+		}) {});
+
+		cb.rule(new Rule<Long,Calendar>(new Function<Long,Calendar>() {
+			@Override
+			public Calendar apply(Long f) {
+				Calendar c = Calendar.getInstance();
+				c.setTimeInMillis(f);
+				return c;
+			}
+		}) {});
+
+		cb.rule(new Rule<Character,Boolean>(new Function<Character,Boolean>() {
+			@Override
+			public Boolean apply(Character c) {
+				return c.charValue() != 0;
+			}
+		}) {});
+
+		cb.rule(new Rule<Boolean,Character>(new Function<Boolean,Character>() {
+			@Override
+			public Character apply(Boolean b) {
+				return b.booleanValue() ? (char) 1 : (char) 0;
+			}
+		}) {});
+
+		cb.rule(new Rule<Character,Integer>(new Function<Character,Integer>() {
+			@Override
+			public Integer apply(Character c) {
+				return (int) c.charValue();
+			}
+		}) {});
+
+		cb.rule(new Rule<Character,Long>(new Function<Character,Long>() {
+			@Override
+			public Long apply(Character c) {
+				return (long) c.charValue();
+			}
+		}) {});
+
+		cb.rule(new Rule<String,Character>(new Function<String,Character>() {
+			@Override
+			public Character apply(String f) {
+				return f.length() > 0 ? f.charAt(0) : 0;
+			}
+		}) {});
+
+		cb.rule(new Rule<String,Class< ? >>(new Function<String,Class< ? >>() {
+			@Override
+			public Class< ? > apply(String cn) {
+				return loadClassUnchecked(cn);
+			}
+		}) {});
+
+		cb.rule(new Rule<Date,Long>(new Function<Date,Long>() {
+			@Override
+			public Long apply(Date d) {
+				return d.getTime();
+			}
+		}) {});
+
+		cb.rule(new Rule<Long,Date>(new Function<Long,Date>() {
+			@Override
+			public Date apply(Long f) {
+				return new Date(f);
+			}
+		}) {});
+
+		cb.rule(new Rule<Date,String>(new Function<Date,String>() {
+			@Override
+			public String apply(Date d) {
+				return ISO8601_DATE_FORMAT.format(d);
+			}
+		}) {});
+
+		cb.rule(new Rule<String,Date>(new Function<String,Date>() {
+			@Override
+			public Date apply(String f) {
+				try {
+					return ISO8601_DATE_FORMAT.parse(f);
+				} catch (ParseException e) {
+					throw new ConversionException(
+							"Cannot convert " + f + " to Date", e);
+				}
+			}
+		}) {});
+
+		cb.rule(new Rule<String,Pattern>(new Function<String,Pattern>() {
+			@Override
+			public Pattern apply(String ps) {
+				return Pattern.compile(ps);
+			}
+		}) {});
+
+		cb.rule(new Rule<String,UUID>(new Function<String,UUID>() {
+			@Override
+			public UUID apply(String uuid) {
+				return UUID.fromString(uuid);
+			}
+		}) {});
+
+		// Special conversions between character arrays and String
+		cb.rule(new Rule<char[],String>(new Function<char[],String>() {
+			@Override
+			public String apply(char[] ca) {
+				return charArrayToString(ca);
+			}
+		}) {});
+
+		cb.rule(new Rule<Character[],String>(
+				new Function<Character[],String>() {
+					@Override
+					public String apply(Character[] ca) {
+						return characterArrayToString(ca);
+					}
+				}) {});
+
+		cb.rule(new Rule<String,char[]>(new Function<String,char[]>() {
+			@Override
+			public char[] apply(String s) {
+				return stringToCharArray(s);
+			}
+		}) {});
+
+		cb.rule(new Rule<String,Character[]>(
+				new Function<String,Character[]>() {
+					@Override
+					public Character[] apply(String s) {
+						return stringToCharacterArray(s);
+					}
+				}) {});
+
+		cb.rule(new Rule<Number,Boolean>(new Function<Number,Boolean>() {
+			@Override
+			public Boolean apply(Number obj) {
+				return obj.longValue() != 0;
+			}
+		}) {});
+
+		cb.rule(new Rule<Number,Character>(new Function<Number,Character>() {
+			@Override
+			public Character apply(Number obj) {
+				return Character.valueOf((char) obj.intValue());
+			}
+		}) {});
 
 		reflectiveAddJavaTimeRule(cb, "java.time.LocalDateTime");
 		reflectiveAddJavaTimeRule(cb, "java.time.LocalDate");
@@ -225,26 +230,28 @@ class ConverterImpl implements InternalC
 		reflectiveAddJavaTimeRule(cb, "java.time.OffsetDateTime");
 		reflectiveAddJavaTimeRule(cb, "java.time.OffsetTime");
 		reflectiveAddJavaTimeRule(cb, "java.time.ZonedDateTime");
-    }
+	}
 
 	private void reflectiveAddJavaTimeRule(ConverterBuilder cb,
 			String timeClsName) {
-        try {
+		try {
 			final Class< ? > toCls = getClass().getClassLoader()
 					.loadClass(timeClsName);
 			final Method toMethod = toCls.getMethod("parse",
 					CharSequence.class);
 
-            cb.rule(new TypeRule<String, Object>(String.class, toCls, new Function<String, Object>() {
-                @Override
-                public Object apply(String f) {
-                    try {
-                        return toMethod.invoke(null, f);
-                    } catch (Exception e) {
-                        throw new ConversionException("Problem converting to " + toCls, e);
-                    }
-                }
-            }));
+			cb.rule(new TypeRule<String,Object>(String.class, toCls,
+					new Function<String,Object>() {
+						@Override
+						public Object apply(String f) {
+							try {
+								return toMethod.invoke(null, f);
+							} catch (Exception e) {
+								throw new ConversionException(
+										"Problem converting to " + toCls, e);
+							}
+						}
+					}));
 			cb.rule(new TypeRule<Object,String>(toCls, String.class,
 					new Function<Object,String>() {
 						@Override
@@ -252,46 +259,46 @@ class ConverterImpl implements InternalC
 							return t.toString();
 						}
 					}));
-        } catch (Exception ex) {
-            // Class not available, do not add rule for it
-        }
-    }
-
-    private String charArrayToString(char[] ca) {
-        StringBuilder sb = new StringBuilder(ca.length);
-        for (char c : ca) {
-            sb.append(c);
-        }
-        return sb.toString();
-    }
-
-    private String characterArrayToString(Character[] ca) {
-        return charArrayToString(convert(ca).to(char[].class));
-    }
-
-    private char[] stringToCharArray(String s) {
-        char[] ca = new char[s.length()];
-
-        for (int i=0; i<s.length(); i++) {
-            ca[i] = s.charAt(i);
-        }
-        return ca;
-    }
-
-    private Character[] stringToCharacterArray(String s) {
-        return convert(stringToCharArray(s)).to(Character[].class);
-    }
-
-    private Class<?> loadClassUnchecked(String className) {
-        try {
-            return getClass().getClassLoader().loadClass(className);
-        } catch (ClassNotFoundException e) {
-            throw new NoClassDefFoundError(className);
-        }
-    }
-
-    @Override
-    public ConverterBuilderImpl newConverterBuilder() {
-        return new ConverterBuilderImpl(this);
-    }
+		} catch (Exception ex) {
+			// Class not available, do not add rule for it
+		}
+	}
+
+	private String charArrayToString(char[] ca) {
+		StringBuilder sb = new StringBuilder(ca.length);
+		for (char c : ca) {
+			sb.append(c);
+		}
+		return sb.toString();
+	}
+
+	private String characterArrayToString(Character[] ca) {
+		return charArrayToString(convert(ca).to(char[].class));
+	}
+
+	private char[] stringToCharArray(String s) {
+		char[] ca = new char[s.length()];
+
+		for (int i = 0; i < s.length(); i++) {
+			ca[i] = s.charAt(i);
+		}
+		return ca;
+	}
+
+	private Character[] stringToCharacterArray(String s) {
+		return convert(stringToCharArray(s)).to(Character[].class);
+	}
+
+	private Class< ? > loadClassUnchecked(String className) {
+		try {
+			return getClass().getClassLoader().loadClass(className);
+		} catch (ClassNotFoundException e) {
+			throw new NoClassDefFoundError(className);
+		}
+	}
+
+	@Override
+	public ConverterBuilderImpl newConverterBuilder() {
+		return new ConverterBuilderImpl(this);
+	}
 }

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converters.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converters.java?rev=1816802&r1=1816801&r2=1816802&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converters.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Converters.java Fri Dec  1 08:08:59 2017
@@ -19,36 +19,38 @@ package org.osgi.util.converter;
 /**
  * Factory class to obtain the standard converter or a new converter builder.
  *
- * @author $Id: c61242e5e5e8201691228ec642f5c900d7107a60 $
+ * @author $Id: 366f18dc114b2ad7692c8b4d82577244a54bf227 $
  * @ThreadSafe
  */
 public class Converters {
-    private static final Converter CONVERTER;
+	private static final Converter CONVERTER;
 
-    static {
-        ConverterImpl impl = new ConverterImpl();
-        ConverterBuilder cb = impl.newConverterBuilder();
-        impl.addStandardRules(cb);
-        CONVERTER = cb.build();
-    }
+	static {
+		ConverterImpl impl = new ConverterImpl();
+		ConverterBuilder cb = impl.newConverterBuilder();
+		impl.addStandardRules(cb);
+		CONVERTER = cb.build();
+	}
 
-    private Converters() {
-        // Do not instantiate this factory class
-    }
+	private Converters() {
+		// Do not instantiate this factory class
+	}
 
-    /**
-     * Obtain the standard converter.
-     * @return The standard converter.
-     */
-    public static Converter standardConverter() {
-        return CONVERTER;
-    }
+	/**
+	 * Obtain the standard converter.
+	 * 
+	 * @return The standard converter.
+	 */
+	public static Converter standardConverter() {
+		return CONVERTER;
+	}
 
-    /**
-     * Obtain a converter builder based on the standard converter.
-     * @return A new converter builder.
-     */
-    public static ConverterBuilder newConverterBuilder() {
-        return CONVERTER.newConverterBuilder();
-    }
+	/**
+	 * Obtain a converter builder based on the standard converter.
+	 * 
+	 * @return A new converter builder.
+	 */
+	public static ConverterBuilder newConverterBuilder() {
+		return CONVERTER.newConverterBuilder();
+	}
 }