http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/ShortPatternFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/ShortPatternFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/ShortPatternFormat.java deleted file mode 100755 index 6d16bbd..0000000 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/ShortPatternFormat.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.dataformat.bindy.format; - -import java.util.Locale; - -public class ShortPatternFormat extends NumberPatternFormat<Short> { - - public ShortPatternFormat() { - } - - public ShortPatternFormat(String pattern, Locale locale) { - super(pattern, locale); - } - - @Override - public Short parse(String string) throws Exception { - if (getNumberFormat() != null) { - return getNumberFormat().parse(string).shortValue(); - } else { - return Short.valueOf(string); - } - } -}
http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/StringFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/StringFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/StringFormat.java deleted file mode 100755 index 7323906..0000000 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/StringFormat.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.dataformat.bindy.format; - -import org.apache.camel.dataformat.bindy.Format; - -public class StringFormat implements Format<String> { - - public String format(String object) throws Exception { - return object; - } - - public String parse(String string) throws Exception { - return string; - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/AbstractFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/AbstractFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/AbstractFormatFactory.java new file mode 100644 index 0000000..39c89ab --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/AbstractFormatFactory.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +public abstract class AbstractFormatFactory implements FormatFactoryInterface { + protected final List<Class<?>> supportedClasses = new ArrayList<>(); + + @Override + public Collection<Class<?>> supportedClasses() { + return Collections.unmodifiableList(supportedClasses); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return supportedClasses.contains(formattingOptions.getClazz()); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactory.java new file mode 100644 index 0000000..3159c36 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactory.java @@ -0,0 +1,70 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; +import org.apache.camel.util.ObjectHelper; + +public class BigDecimalFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(BigDecimal.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new BigDecimalFormat(formattingOptions.isImpliedDecimalSeparator(), + formattingOptions.getPrecision(), + formattingOptions.getLocale()); + } + + private static class BigDecimalFormat extends AbstractNumberFormat<BigDecimal> { + + BigDecimalFormat(boolean impliedDecimalPosition, int precision, Locale locale) { + super(impliedDecimalPosition, precision, locale); + } + + public String format(BigDecimal object) throws Exception { + return !super.hasImpliedDecimalPosition() + ? super.getFormat().format(object) + : super.getFormat().format(object.multiply(new BigDecimal(super.getMultiplier()))); + } + + public BigDecimal parse(String string) throws Exception { + BigDecimal result = new BigDecimal(string.trim()); + if (super.hasImpliedDecimalPosition()) { + result = result.divide(new BigDecimal(super.getMultiplier()), super.getPrecision(), RoundingMode.HALF_EVEN); + } else { + if (super.getPrecision() != -1) { + result = result.setScale(super.getPrecision()); + } + } + return result; + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalPatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalPatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalPatternFormatFactory.java new file mode 100644 index 0000000..c294be3 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalPatternFormatFactory.java @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class BigDecimalPatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(BigDecimal.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new BigDecimalPatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale(), + formattingOptions.getPrecision(), + formattingOptions.getRounding(), + formattingOptions.getDecimalSeparator(), + formattingOptions.getGroupingSeparator()); + } + + private static class BigDecimalPatternFormat extends NumberPatternFormat<BigDecimal> { + + BigDecimalPatternFormat(String pattern, Locale locale, int precision, String rounding, String decimalSeparator, String groupingSeparator) { + super(pattern, locale, precision, rounding, decimalSeparator, groupingSeparator); + } + + @Override + public BigDecimal parse(String string) throws Exception { + if (getNumberFormat() != null) { + DecimalFormat df = (DecimalFormat)getNumberFormat(); + df.setParseBigDecimal(true); + BigDecimal bd = (BigDecimal)df.parse(string.trim()); + if (super.getPrecision() != -1) { + bd = bd.setScale(super.getPrecision(), RoundingMode.valueOf(super.getRounding())); + } + return bd; + } else { + return new BigDecimal(string.trim()); + } + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigIntegerFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigIntegerFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigIntegerFormatFactory.java new file mode 100644 index 0000000..a8a72fb --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BigIntegerFormatFactory.java @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.math.BigInteger; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; + +public class BigIntegerFormatFactory extends AbstractFormatFactory { + + private static final BigIntegerFormat BIG_INTEGER_FORMAT = new BigIntegerFormat(); + + { + supportedClasses.add(BigInteger.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return BIG_INTEGER_FORMAT; + } + + private static class BigIntegerFormat extends AbstractNumberFormat<BigInteger> { + + public String format(BigInteger object) throws Exception { + return object.toString(); + } + + public BigInteger parse(String string) throws Exception { + return new BigInteger(string); + } + + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BooleanFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BooleanFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BooleanFormatFactory.java new file mode 100755 index 0000000..bc150e8 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BooleanFormatFactory.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +public class BooleanFormatFactory extends AbstractFormatFactory { + + private static final BooleanFormat BOOLEAN_FORMAT = new BooleanFormat(); + + { + supportedClasses.add(boolean.class); + supportedClasses.add(Boolean.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return BOOLEAN_FORMAT; + } + + private static class BooleanFormat implements Format<Boolean> { + + public String format(Boolean object) throws Exception { + return object.toString(); + } + + public Boolean parse(String string) throws Exception { + return Boolean.valueOf(string); + } + + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ByteFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ByteFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ByteFormatFactory.java new file mode 100644 index 0000000..457270f --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ByteFormatFactory.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.util.ObjectHelper; + +public class ByteFormatFactory extends AbstractFormatFactory { + + private static final ByteFormat BYTE_FORMAT = new ByteFormat(); + + { + supportedClasses.add(byte.class); + supportedClasses.add(Byte.class); + } + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return BYTE_FORMAT; + } + + private static class ByteFormat implements Format<Byte> { + + public String format(Byte object) throws Exception { + return object.toString(); + } + + public Byte parse(String string) throws Exception { + return new Byte(string); + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BytePatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BytePatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BytePatternFormatFactory.java new file mode 100644 index 0000000..b795c35 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/BytePatternFormatFactory.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class BytePatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(byte.class); + supportedClasses.add(Byte.class); + } + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new BytePatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale()); + } + + private static class BytePatternFormat extends NumberPatternFormat<Byte> { + + BytePatternFormat(String pattern, Locale locale) { + super(pattern, locale); + } + + @Override + public Byte parse(String string) throws Exception { + if (getNumberFormat() != null) { + return getNumberFormat().parse(string).byteValue(); + } else { + return Byte.valueOf(string); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/CharacterFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/CharacterFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/CharacterFormatFactory.java new file mode 100644 index 0000000..83786c7 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/CharacterFormatFactory.java @@ -0,0 +1,51 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.text.ParseException; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +public class CharacterFormatFactory extends AbstractFormatFactory { + + private static final CharacterFormat CHARACTER_FORMAT = new CharacterFormat(); + + { + supportedClasses.add(char.class); + supportedClasses.add(Character.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return CHARACTER_FORMAT; + } + + private static class CharacterFormat implements Format<Character> { + + public String format(Character object) throws Exception { + return object.toString(); + } + + public Character parse(String string) throws Exception { + if (string.length() > 1) { + throw new ParseException("The string \"" + string + "\" cannot be parsed to a character (size > 1).", 1); + } + return string.charAt(0); + } + + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DateFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DateFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DateFormatFactory.java new file mode 100644 index 0000000..40582f3 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DateFormatFactory.java @@ -0,0 +1,114 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.PatternFormat; +import org.apache.camel.dataformat.bindy.format.FormatException; +import org.apache.camel.util.ObjectHelper; + +public class DateFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(Date.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new DatePatternFormat(formattingOptions.getPattern(), + formattingOptions.getTimezone(), + formattingOptions.getLocale()); + } + + private static class DatePatternFormat implements PatternFormat<Date> { + + private String pattern; + private Locale locale; + private TimeZone timezone; + + DatePatternFormat(String pattern, String timezone, Locale locale) { + this.pattern = pattern; + this.locale = locale; + if (!timezone.isEmpty()) { + this.timezone = TimeZone.getTimeZone(timezone); + } + } + + public String format(Date object) throws Exception { + ObjectHelper.notNull(this.pattern, "pattern"); + return this.getDateFormat().format(object); + } + + public Date parse(String string) throws Exception { + + Date date; + DateFormat df = this.getDateFormat(); + + ObjectHelper.notNull(this.pattern, "pattern"); + + // Check length of the string with date pattern + // To avoid to parse a string date : 20090901-10:32:30 when + // the pattern is yyyyMMdd + + if (string.length() <= this.pattern.length()) { + + // Force the parser to be strict in the syntax of the date to be + // converted + df.setLenient(false); + date = df.parse(string); + + return date; + + } else { + throw new FormatException("Date provided does not fit the pattern defined"); + } + + } + + protected java.text.DateFormat getDateFormat() { + SimpleDateFormat result; + if (locale != null) { + result = new SimpleDateFormat(pattern, locale); + } else { + result = new SimpleDateFormat(pattern); + } + if (timezone != null) { + result.setTimeZone(timezone); + } + return result; + } + + public String getPattern() { + return pattern; + } + + /** + * Sets the pattern + * + * @param pattern the pattern + */ + public void setPattern(String pattern) { + this.pattern = pattern; + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoubleFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoubleFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoubleFormatFactory.java new file mode 100644 index 0000000..9cb44b1 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoubleFormatFactory.java @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.math.BigDecimal; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; +import org.apache.camel.util.ObjectHelper; + +public class DoubleFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(double.class); + supportedClasses.add(Double.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new DoubleFormat(formattingOptions.isImpliedDecimalSeparator(), + formattingOptions.getPrecision(), + formattingOptions.getLocale()); + } + + private static class DoubleFormat extends AbstractNumberFormat<Double> { + + DoubleFormat(boolean impliedDecimalPosition, int precision, Locale locale) { + super(impliedDecimalPosition, precision, locale); + } + + public String format(Double object) throws Exception { + return !super.hasImpliedDecimalPosition() + ? super.getFormat().format(object) + : super.getFormat().format(object * super.getMultiplier()); + } + + public Double parse(String string) throws Exception { + Double value = null; + if (!super.hasImpliedDecimalPosition()) { + value = Double.parseDouble(string.trim()); + } else { + BigDecimal tmp = new BigDecimal(string.trim()); + BigDecimal div = BigDecimal.valueOf(super.getMultiplier()); + value = tmp.divide(div).doubleValue(); + } + + return value; + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoublePatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoublePatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoublePatternFormatFactory.java new file mode 100644 index 0000000..0aade73 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/DoublePatternFormatFactory.java @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class DoublePatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(double.class); + supportedClasses.add(Double.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new DoublePatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale()); + } + + private static class DoublePatternFormat extends NumberPatternFormat<Double> { + + DoublePatternFormat(String pattern, Locale locale) { + super(pattern, locale); + } + + @Override + public Double parse(String string) throws Exception { + if (getNumberFormat() != null) { + return getNumberFormat().parse(string).doubleValue(); + } else { + return Double.valueOf(string); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/EnumFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/EnumFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/EnumFormatFactory.java new file mode 100644 index 0000000..a5639da --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/EnumFormatFactory.java @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +public class EnumFormatFactory extends AbstractFormatFactory { + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return formattingOptions.getClazz().isEnum(); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + @SuppressWarnings({"rawtypes", "unchecked"}) + EnumFormat enumFormat = new EnumFormat(formattingOptions.getClazz()); + return enumFormat; + } + + private static class EnumFormat<T extends Enum<T>> implements Format<T> { + + private final Class<T> clazz; + + EnumFormat(Class<T> clazz) { + this.clazz = clazz; + } + + public String format(final T object) throws Exception { + return object.name(); + } + + public T parse(final String string) throws Exception { + return Enum.valueOf(clazz, string); + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatFormatFactory.java new file mode 100644 index 0000000..f2a3031 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatFormatFactory.java @@ -0,0 +1,72 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.math.BigDecimal; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; +import org.apache.camel.util.ObjectHelper; + +public class FloatFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(float.class); + supportedClasses.add(Float.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new FloatFormat(formattingOptions.isImpliedDecimalSeparator(), + formattingOptions.getPrecision(), + formattingOptions.getLocale()); + } + + private static class FloatFormat extends AbstractNumberFormat<Float> { + + FloatFormat(boolean impliedDecimalPosition, int precision, Locale locale) { + super(impliedDecimalPosition, precision, locale); + } + + public String format(Float object) throws Exception { + return !super.hasImpliedDecimalPosition() + ? super.getFormat().format(object) + : super.getFormat().format(object * super.getMultiplier()); + } + + public Float parse(String string) throws Exception { + Float value; + if (!super.hasImpliedDecimalPosition()) { + value = Float.parseFloat(string.trim()); + } else { + BigDecimal tmp = new BigDecimal(string.trim()); + BigDecimal div = BigDecimal.valueOf(super.getMultiplier()); + value = tmp.divide(div).floatValue(); + } + + return value; + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatPatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatPatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatPatternFormatFactory.java new file mode 100644 index 0000000..1d5bd1f --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FloatPatternFormatFactory.java @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class FloatPatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(float.class); + supportedClasses.add(Float.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new FloatPatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale()); + } + + private static class FloatPatternFormat extends NumberPatternFormat<Float> { + + FloatPatternFormat(String pattern, Locale locale) { + super(pattern, locale); + } + + @Override + public Float parse(String string) throws Exception { + if (getNumberFormat() != null) { + return getNumberFormat().parse(string).floatValue(); + } else { + return Float.valueOf(string); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactories.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactories.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactories.java new file mode 100644 index 0000000..2b9eec8 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactories.java @@ -0,0 +1,99 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +/** + * This class manages all FormatFactoryInterfaces. + * This class is a singleton class. + * FormatFactoryInterfaces can declare to support one or more classes or + * can declare to be generic (e.g. {@link EnumFormatFactory}). + * The factories that support one or more classes are stored in a Map. + * The generic factories are stored in a list. + * The build method first tries to find a factory using the map. + * If it doesn't find one it uses the generic list. + * If it can't find a factory it throws an IllegalArgumentException. + */ +public final class FormatFactories extends AbstractFormatFactory { + + private static final FormatFactories INSTANCE = new FormatFactories(); + private static final Map<Class<?>, List<FormatFactoryInterface>> CLASS_BASED_FACTORIES = new HashMap<>(); + private static final List<FormatFactoryInterface> OTHER_FACTORIES = new ArrayList<>(); + + private FormatFactories() { + } + + public static FormatFactories getInstance() { + return INSTANCE; + } + + /** + * Registers a {@link FormatFactoryInterface}. + * Two types of factories exist: + * <ul> + * <li>Factories that support one or more classes</li> + * <li>Factories that support no specific class (e.g. {@link EnumFormatFactory})</li> + * </ul> + * @param formatFactory + * @return the FormatFactories instance + */ + public synchronized FormatFactories register(FormatFactoryInterface formatFactory) { + if (formatFactory.supportedClasses().isEmpty()) { + OTHER_FACTORIES.add(formatFactory); + } else { + for (Class<?> clazz : formatFactory.supportedClasses()) { + getByClass(clazz).add(formatFactory); + } + } + return this; + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return true; + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + for (FormatFactoryInterface formatFactory : getByClass(formattingOptions.getClazz())) { + if (formatFactory.canBuild(formattingOptions)) { + return formatFactory.build(formattingOptions); + } + } + for (FormatFactoryInterface formatFactory : OTHER_FACTORIES) { + if (formatFactory.canBuild(formattingOptions)) { + return formatFactory.build(formattingOptions); + } + } + throw new IllegalArgumentException("Can not find a suitable formatter for the type: " + formattingOptions.getClazz().getCanonicalName()); + } + + private List<FormatFactoryInterface> getByClass(Class<?> clazz) { + List<FormatFactoryInterface> result = CLASS_BASED_FACTORIES.get(clazz); + if (result == null) { + result = new ArrayList<>(); + CLASS_BASED_FACTORIES.put(clazz, result); + } + return result; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactoryInterface.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactoryInterface.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactoryInterface.java new file mode 100644 index 0000000..1e0347a --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/FormatFactoryInterface.java @@ -0,0 +1,48 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Collection; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +public interface FormatFactoryInterface { + /** + * Returns the list of supported classes. + * When the list doesn't contain elements the factory is supposed + * to support all kinds of classes. The factory must decide on other + * criteria whether it can build a {@link Format}. + * @return the list of supported classes + */ + Collection<Class<?>> supportedClasses(); + + /** + * Can it build a {@link Format}. + * Answers the question about whether it can + * build a {@link Format}. + * @param formattingOptions + * @return can build + */ + boolean canBuild(FormattingOptions formattingOptions); + + /** + * Builds the {@link Format}. + * @param formattingOptions + * @return the format + */ + Format<?> build(FormattingOptions formattingOptions); +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerFormatFactory.java new file mode 100644 index 0000000..5335dbf --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerFormatFactory.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; +import org.apache.camel.util.ObjectHelper; + +public class IntegerFormatFactory extends AbstractFormatFactory { + + private static final IntegerFormat INTEGER_FORMAT = new IntegerFormat(); + + { + supportedClasses.add(int.class); + supportedClasses.add(Integer.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return INTEGER_FORMAT; + } + + private static class IntegerFormat extends AbstractNumberFormat<Integer> { + + public String format(Integer object) throws Exception { + return object.toString(); + } + + public Integer parse(String string) throws Exception { + return new Integer(string); + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerPatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerPatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerPatternFormatFactory.java new file mode 100644 index 0000000..7c81df9 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/IntegerPatternFormatFactory.java @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class IntegerPatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(int.class); + supportedClasses.add(Integer.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new IntegerPatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale()); + } + + private static class IntegerPatternFormat extends NumberPatternFormat<Integer> { + + IntegerPatternFormat(String pattern, Locale locale) { + super(pattern, locale); + } + + @Override + public Integer parse(String string) throws Exception { + if (getNumberFormat() != null) { + return getNumberFormat().parse(string).intValue(); + } else { + return Integer.valueOf(string); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateFormatFactory.java new file mode 100644 index 0000000..64b8606 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateFormatFactory.java @@ -0,0 +1,98 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.PatternFormat; +import org.apache.camel.dataformat.bindy.format.FormatException; +import org.apache.camel.util.ObjectHelper; + +public class LocalDateFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(LocalDate.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new LocalDatePatternFormat(formattingOptions.getPattern(), formattingOptions.getLocale()); + } + + private static class LocalDatePatternFormat implements PatternFormat<LocalDate> { + + private String pattern; + private Locale locale; + + LocalDatePatternFormat(String pattern, Locale locale) { + this.pattern = pattern; + this.locale = locale; + } + + public String format(LocalDate object) throws Exception { + ObjectHelper.notNull(this.pattern, "pattern"); + return this.getDateFormat().format(object); + } + + public LocalDate parse(String string) throws Exception { + + LocalDate date; + DateTimeFormatter df = this.getDateFormat(); + + ObjectHelper.notNull(this.pattern, "pattern"); + + if (doesStringFitLengthOfPattern(string)) { + date = LocalDate.parse(string, df); + return date; + } else { + throw new FormatException("Date provided does not fit the pattern defined"); + } + + } + + private boolean doesStringFitLengthOfPattern(String string) { + return string.length() <= this.pattern.length(); + } + + DateTimeFormatter getDateFormat() { + DateTimeFormatter result; + if (locale != null) { + result = DateTimeFormatter.ofPattern(pattern, locale); + } else { + result = DateTimeFormatter.ofPattern(pattern); + } + return result; + } + + public String getPattern() { + return pattern; + } + + /** + * Sets the pattern + * + * @param pattern the pattern + */ + public void setPattern(String pattern) { + this.pattern = pattern; + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateTimeFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateTimeFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateTimeFormatFactory.java new file mode 100644 index 0000000..109168b --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalDateTimeFormatFactory.java @@ -0,0 +1,109 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.PatternFormat; +import org.apache.camel.dataformat.bindy.format.FormatException; +import org.apache.camel.util.ObjectHelper; + +public class LocalDateTimeFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(LocalDateTime.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new LocalDateTimePatternFormat(formattingOptions.getPattern(), + formattingOptions.getTimezone(), + formattingOptions.getLocale()); + } + + private static class LocalDateTimePatternFormat implements PatternFormat<LocalDateTime> { + + private String pattern; + private Locale locale; + private ZoneId zone; + + LocalDateTimePatternFormat(String pattern, String timezone, Locale locale) { + this.pattern = pattern; + this.locale = locale; + if (timezone.isEmpty()) { + this.zone = ZoneId.systemDefault(); + } else { + this.zone = ZoneId.of(timezone); + } + } + + public String format(LocalDateTime object) throws Exception { + ObjectHelper.notNull(this.pattern, "pattern"); + return this.getDateFormat().format(object); + } + + public LocalDateTime parse(String string) throws Exception { + + LocalDateTime date; + DateTimeFormatter df = this.getDateFormat(); + + ObjectHelper.notNull(this.pattern, "pattern"); + + if (doesStringFitLengthOfPattern(string)) { + date = LocalDateTime.parse(string, df); + return date; + } else { + throw new FormatException("Date provided does not fit the pattern defined"); + } + + } + + private boolean doesStringFitLengthOfPattern(String string) { + return string.length() <= this.pattern.length(); + } + + DateTimeFormatter getDateFormat() { + DateTimeFormatter result; + if (locale != null) { + result = DateTimeFormatter.ofPattern(pattern, locale) + .withZone(zone); + } else { + result = DateTimeFormatter.ofPattern(pattern) + .withZone(zone); + } + return result; + } + + public String getPattern() { + return pattern; + } + + /** + * Sets the pattern + * + * @param pattern the pattern + */ + public void setPattern(String pattern) { + this.pattern = pattern; + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalTimeFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalTimeFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalTimeFormatFactory.java new file mode 100644 index 0000000..aa177ab --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LocalTimeFormatFactory.java @@ -0,0 +1,109 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.PatternFormat; +import org.apache.camel.dataformat.bindy.format.FormatException; +import org.apache.camel.util.ObjectHelper; + +public class LocalTimeFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(LocalTime.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new LocalTimePatternFormat(formattingOptions.getPattern(), + formattingOptions.getTimezone(), + formattingOptions.getLocale()); + } + + private static class LocalTimePatternFormat implements PatternFormat<LocalTime> { + + private String pattern; + private Locale locale; + private ZoneId zone; + + LocalTimePatternFormat(String pattern, String timezone, Locale locale) { + this.pattern = pattern; + this.locale = locale; + if (timezone.isEmpty()) { + this.zone = ZoneId.systemDefault(); + } else { + this.zone = ZoneId.of(timezone); + } + } + + public String format(LocalTime object) throws Exception { + ObjectHelper.notNull(this.pattern, "pattern"); + return this.getDateFormat().format(object); + } + + public LocalTime parse(String string) throws Exception { + + LocalTime date; + DateTimeFormatter df = this.getDateFormat(); + + ObjectHelper.notNull(this.pattern, "pattern"); + + if (doesStringFitLengthOfPattern(string)) { + date = LocalTime.parse(string, df); + return date; + } else { + throw new FormatException("Date provided does not fit the pattern defined"); + } + + } + + private boolean doesStringFitLengthOfPattern(String string) { + return string.length() <= this.pattern.length(); + } + + DateTimeFormatter getDateFormat() { + DateTimeFormatter result; + if (locale != null) { + result = DateTimeFormatter.ofPattern(pattern, locale) + .withZone(zone); + } else { + result = DateTimeFormatter.ofPattern(pattern) + .withZone(zone); + } + return result; + } + + public String getPattern() { + return pattern; + } + + /** + * Sets the pattern + * + * @param pattern the pattern + */ + public void setPattern(String pattern) { + this.pattern = pattern; + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongFormatFactory.java new file mode 100644 index 0000000..0b3a192 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongFormatFactory.java @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; +import org.apache.camel.util.ObjectHelper; + +public class LongFormatFactory extends AbstractFormatFactory { + + private static final LongFormat LONG_FORMAT = new LongFormat(); + + { + supportedClasses.add(long.class); + supportedClasses.add(Long.class); + } + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return LONG_FORMAT; + } + + private static class LongFormat extends AbstractNumberFormat<Long> { + + public String format(Long object) throws Exception { + return object.toString(); + } + + public Long parse(String string) throws Exception { + return new Long(string); + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongPatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongPatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongPatternFormatFactory.java new file mode 100644 index 0000000..07d126f --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/LongPatternFormatFactory.java @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class LongPatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(long.class); + supportedClasses.add(Long.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new LongPatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale()); + } + + private static class LongPatternFormat extends NumberPatternFormat<Long> { + + LongPatternFormat(String pattern, Locale locale) { + super(pattern, locale); + } + + @Override + public Long parse(String string) throws Exception { + if (getNumberFormat() != null) { + return getNumberFormat().parse(string).longValue(); + } else { + return Long.valueOf(string); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortFormatFactory.java new file mode 100644 index 0000000..1475dd3 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortFormatFactory.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.AbstractNumberFormat; +import org.apache.camel.util.ObjectHelper; + +public class ShortFormatFactory extends AbstractFormatFactory { + + private static final ShortFormat SHORT_FORMAT = new ShortFormat(); + + { + supportedClasses.add(short.class); + supportedClasses.add(Short.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return SHORT_FORMAT; + } + + private static class ShortFormat extends AbstractNumberFormat<Short> { + + public String format(Short object) throws Exception { + return object.toString(); + } + + public Short parse(String string) throws Exception { + return new Short(string); + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortPatternFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortPatternFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortPatternFormatFactory.java new file mode 100644 index 0000000..a193822 --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/ShortPatternFormatFactory.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import java.util.Locale; +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.format.NumberPatternFormat; +import org.apache.camel.util.ObjectHelper; + +public class ShortPatternFormatFactory extends AbstractFormatFactory { + + { + supportedClasses.add(short.class); + supportedClasses.add(Short.class); + } + + @Override + public boolean canBuild(FormattingOptions formattingOptions) { + return super.canBuild(formattingOptions) + && ObjectHelper.isNotEmpty(formattingOptions.getPattern()); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return new ShortPatternFormat(formattingOptions.getPattern(), + formattingOptions.getLocale()); + } + + private static class ShortPatternFormat extends NumberPatternFormat<Short> { + + ShortPatternFormat(String pattern, Locale locale) { + super(pattern, locale); + } + + @Override + public Short parse(String string) throws Exception { + if (getNumberFormat() != null) { + return getNumberFormat().parse(string).shortValue(); + } else { + return Short.valueOf(string); + } + } + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/StringFormatFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/StringFormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/StringFormatFactory.java new file mode 100644 index 0000000..670440e --- /dev/null +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/format/factories/StringFormatFactory.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dataformat.bindy.format.factories; + +import org.apache.camel.dataformat.bindy.Format; +import org.apache.camel.dataformat.bindy.FormattingOptions; + +public class StringFormatFactory extends AbstractFormatFactory { + + private static final StringFormat STRING_FORMAT = new StringFormat(); + + { + supportedClasses.add(String.class); + } + + @Override + public Format<?> build(FormattingOptions formattingOptions) { + return STRING_FORMAT; + } + + private static class StringFormat implements Format<String> { + + public String format(String object) throws Exception { + return object; + } + + public String parse(String string) throws Exception { + return string; + } + + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java index b27c6d8..65bc353 100644 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java @@ -137,7 +137,7 @@ public class BindyKeyValuePairDataFormat extends BindyAbstractDataFormat { } } - // Test if models list is empty or not + // BigIntegerFormatFactory if models list is empty or not // If this is the case (correspond to an empty stream, ...) if (models.size() == 0) { throw new java.lang.IllegalArgumentException("No records have been defined in the CSV"); http://git-wip-us.apache.org/repos/asf/camel/blob/311d429c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/util/ConverterUtils.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/util/ConverterUtils.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/util/ConverterUtils.java index 323fdea..778e803 100644 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/util/ConverterUtils.java +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/util/ConverterUtils.java @@ -16,6 +16,11 @@ */ package org.apache.camel.dataformat.bindy.util; +import org.apache.camel.dataformat.bindy.FormattingOptions; +import org.apache.camel.dataformat.bindy.annotation.BindyConverter; +import org.apache.camel.dataformat.bindy.annotation.DataField; +import org.apache.camel.dataformat.bindy.annotation.KeyValuePairField; + /** * To help return the char associated to the unicode string */ @@ -60,4 +65,29 @@ public final class ConverterUtils { return returnCharacter; } } + + public static FormattingOptions convert(DataField dataField, Class<?> clazz, BindyConverter converter, String locale) { + return new FormattingOptions() + .forClazz(clazz) + .withPattern(dataField.pattern()) + .withLocale(locale) + .withTimezone(dataField.timezone()) + .withPrecision(dataField.precision()) + .withRounding(dataField.rounding()) + .withImpliedDecimalSeparator(dataField.impliedDecimalSeparator()) + .withDecimalSeparator(dataField.decimalSeparator()) + .withBindyConverter(converter) + .withGroupingSeparator(dataField.groupingSeparator()); + } + + public static FormattingOptions convert(KeyValuePairField dataField, Class<?> clazz, BindyConverter converter, String locale) { + return new FormattingOptions() + .forClazz(clazz) + .withPattern(dataField.pattern()) + .withLocale(locale) + .withTimezone(dataField.timezone()) + .withPrecision(dataField.precision()) + .withBindyConverter(converter) + .withImpliedDecimalSeparator(dataField.impliedDecimalSeparator()); + } }
