mardi 18 août 2015

Smooks CSV2Java filter equal entitys

i transformed some CSV'S into Java-Entities, but now i have the problem, that there are some entities double. I filtered them in a Java function which is called after smooks, but would prefer to filter it befor calling result.getBean(...).

App main = new App(); 
    JavaResult result;
    result = main.runCSVTransform("config-Verlag.xml", "input-Verlag");
    List<Verlag> inputVerlag = ((List<Verlag>) result.getBean("input-Verlag"));
    List<Adresse> inputAdresse = (List<Adresse>) result.getBean("input-Adresse");
    inputAdresse.filter();`

protected JavaResult runCSVTransform(...) {
    smooks = new Smooks(config);
    final ExecutionContext executionContext = smooks.createExecutionContext();
    JavaResult result = new JavaResult();
    executionContext.setEventListener(new HtmlReportGenerator("target/report/" + csvName + "Report.html"));

    URIResourceLocator resourceLocator = new URIResourceLocator();
    InputStream is = resourceLocator.getResource(csvName + ".csv");

    String messageIn = StreamUtils.readStreamAsString(is);
    smooks.filterSource(executionContext, new StringSource(messageIn), result);

    return result;
}

And my smooksConfig:

<?xml version="1.0"?>
<smooks-resource-list xmlns="http://ift.tt/1lg2aEi"
                  xmlns:csv="http://ift.tt/1rhyGah"
                  xmlns:jb="http://ift.tt/1rhyGak">

<csv:reader fields="name,strasse,hausnummer,zusatz,postleitzahl,ort"/>

<jb:bindings beanId="input-Verlag" class="java.util.ArrayList" createOnElement="csv-set">
    <jb:wiring beanIdRef="verlag"/>
</jb:bindings> 
<jb:bindings beanId="input-Adresse" class="java.util.ArrayList" createOnElement="csv-set">
    <jb:wiring beanIdRef="adresse"/>
</jb:bindings> 
<jb:bindings beanId="verlag" class="de.target.classes.Verlag" createOnElement="csv-record">
    <jb:value property="name" data="csv-record/name"/>
</jb:bindings>
<jb:bindings beanId="adresse" class="de.target.classes.Adresse" createOnElement="csv-record">
    <jb:value property="strasse" data="csv-record/strasse"/>
    <jb:value property="hausnummer" data="csv-record/hausnummer"/>
    <jb:value property="zusatz" data="csv-record/zusatz"/>
    <jb:value property="postleitzahl" data="csv-record/postleitzahl"/>
    <jb:value property="ort" data="csv-record/ort"/>
</jb:bindings>

I've read something about a visitor-pattern but couldn't include any examples.

Aucun commentaire:

Enregistrer un commentaire