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();
+ }
}