[
https://issues.apache.org/activemq/browse/CAMEL-398?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=48837#action_48837
]
Charles Moulliard commented on CAMEL-398:
-----------------------------------------
* interfaces should always be fully javadoced (especially if others should
use or implement em)
>> I'm currently working on code documentation. My first release was not fully
>> documented because I would like to have your feedback prior to do this job
>> (depending on the modification requested and the refactory required, ..)
* the classloading should be changed to use Camel classes and be OSGi
friendly.
>> I will check how to use Camel ResolverUtil
* dependency on camel-spring should only be scope for test (= unit testing)
>> ok. Removed form the pom.xml
* Would it not be nice that each POJO should be annoted at classlevel as well
(Client.java does not have etc.)
>> Client is not annoted at class level because it is a slave of order class.
>> So, this is not required. Moreover, we need only one 'root class' where the
>> separator is defined.
* Why are the fields in the model objects public? We should support private
fields and use getter/setter to access them
>> I will check this point again and adapt the code. I have changed from
>> private to public due to introspection.
* LinkType? Doesnt hibernate have a similar feature and maybe there is a
better name?
>> I have discovered last week that Hibernate use the following annotation
>> @OnetoMany concerning the link type. So maybe, we can follow this convention
>> ?
* ModelFactory if its a shared instance then it need locking for concurrent
access (we can address this later)
>> IF my code is correct. Only one instance of the modelfactory is created for
>> each Dataformat(packageName) instance created
* BindyDataFormat might be renamed to BindyCsvDataFormat (its nice when the
classname has this important piece in its name)
>> OK. Is the name that you propose not redundant with the fact that this class
>> is in the package org.apache.camel.bindy.csv ?
* use Camel type converter to convert from String to byte[] as it will
handle encoding as well
(exch.getContext().getTypeConverter().convertTo(byte[].class, exch, exch) in
BindyDataFormat
>> ok
* In unmarshal we should use a java.util.Scanner if we for instance is
reading a very big file and can reduce memory usage
>> ok
* code needs to be polished a bit. If you use IDEA it reports Well we get
that later
>> I use Eclipse. What do you want that I do, use the camel formating style ?
* ModelFactory should probably have an interface and a DefaultModelFactory
implementatiion
>> Absolutely
* format.impl is not a nice package name - just use format
>> ok
* I dont think you should use threadlocal to store pattern formatters. Yes
they are not thread safe (damm SUN). creating objects is not expensive anymore!
>> This code is coming from my colleague. It will be happy that he must change
>> it
* ByteFormat - new Byte(String) is not the right one to use - use parseByte
instead.
>> same remark as before
* We could probably use generics for the format, so the API is nicer (we can
check that later)
>> If you have an example, this will help me ?
Question : What do you think about the hashmap (HashMap<String, Object>
modelObjects = new HashMap<String, Object>();) ? Do you think that this is a
good idea to use hashmap and class name as key ?
> Map the content of a CSV file to a POJO using @annotation and .convertBodyTo()
> ------------------------------------------------------------------------------
>
> Key: CAMEL-398
> URL: https://issues.apache.org/activemq/browse/CAMEL-398
> Project: Apache Camel
> Issue Type: New Feature
> Components: camel-core
> Affects Versions: 1.4.0
> Reporter: Charles Moulliard
> Assignee: Claus Ibsen
> Fix For: 2.0.0
>
> Attachments: camel-bindy.zip
>
>
> Hi,
> It should be nice if in a next relase of Camel, it will be possible to map
> the content of a CSV file to a POJO using @annotation.
> For the moment, I use an ArrayList + iterator (see code hereafter) to achieve
> the extraction of the content but I'm sure that we can simplify this code
> using @Annotation
> and the following action (.convertBodyTo(Order<List>) by example.
> Current situation
> Camel route
> from("file:///c:/temp/test?noop=true")
> .unmarshal().csv()
> .to("bean:converter?methodName=TransformMessage"); --> should be replaced by
> something like .convertBodyTo(Order<List>)
> Converter class
> public void TransformMessage(Exchange in) {
> process(in.getIn().getBody(List.class));
> }
> @SuppressWarnings("unchecked")
> private void process(List messages) {
>
> // Iterate through the list of messages
> for (Iterator<ArrayList> it = messages.iterator();
> it.hasNext();) {
> // Split the content of the message into field
> message = it.next();
> field = (String[]) message.toArray();
> order = new Order();
> order.setId(Integer.valueOf(field[0]).intValue());
> order.setBank(field[1]);
> order.setAmountFrom(Double.parseDouble(field[2]));
> order.setAmountTo(Double.parseDouble(field[3]));
> order.setOrderInstruction(field[4].trim());
> this.orderService.createOrder(order);
> }
> }
> Regards,
> Charles
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.