Hi Arnaud

I'm not sure, but I suspect you just flipped the if statement. Shouldn't
the document be saved when "diffs.size() != 0" instead? Everything else
looks ok to me if I understood correctly what you try to do.

if (diffs.size() *!=* 0) {
  println "none"
} else {
  println "Updated"
  ticketDoc.save()
}

Hope this helps
Edo

On Mon, Mar 18, 2013 at 5:37 PM, Arnaud bourree <arnaud.bour...@gmail.com>wrote:

> Hello,
>
> I'm prototyping a connector to a ticket tracking tool: I'm writing a
> Groovy page which import CSV calls into XWiki.
> I map each CSV rows to one XWiki object store in one page (one object per
> page).
> OK, I succeed to to it.
>
> My issue is that imported CSV contains rows (tickets) which don't
> change since last import and I don't want to update page in this case.
> Thanks to getDiff() method on BaseObject, XWiki help me to find is
> ticket change or not.
> I write the following Groovy code:
>
> def http = new HTTPBuilder( 'https://stim.gemalto.com' )
> http.parser.'text/csv' = { resp ->
>   return new CSVReader( new InputStreamReader( resp.entity.content,
>                                 ParserRegistry.getCharset( resp ) ) )
> }
> http.request( Method.GET, 'text/csv' ) {
>   uri.path = myPath
>   uri.query = myQuery
>
>   // response handler for a success response code:
>   response.success = { resp, csv ->
>     if ("${resp.headers.'Content-Type'}".startsWith('text/csv')) {
>       def names = []
>       def idIndex = 0
>       def cpt=0
>       // Find id column call "IncidentNumber" in my case
>       csv.readNext().each { field ->
>           if (field.equals('IncidentNumber')) {
>              idIndex = cpt;
>           }
>           names.add(field)
>           cpt++;
>       }
>       println "|=Incident Number|=action"
>       csv.readAll().each { line ->
>         def id = line[idIndex]
>         def exists = xwiki.exists('myTicket.'+id)
>         def ticketDoc = xwiki.getDocument('myTicket.'+id)
>         def ticket = ticketDoc.newObject('myTicket.myTicketClass')
>         for(i=0 ; i<names.size() ; i++) {
>           ticket.set(names[i], line[i]);
>         }
>         print "|[[myTicket."+id+"]]|"
>         if (!exists) {
>           println "Added"
>           ticketDoc.save()
>         } else {
>           def tickets=ticketDoc.getObjects('myTicket.myTicketClass')
>           def oldTicket = tickets.size() != 0 ? tickets[0] :
> ticketDoc.newObject('myTicket.myTicketClass')
>           def
> diffs=ticket.getBaseObject().getDiff(oldTicket.getBaseObject(),
> xwiki.context)
>           if (diffs.size() != 0) {
>             println "none"
>           } else {
>             println "Updated"
>             ticketDoc.save()
>           }
>         }
>       }
>     }
>   }
>
>   // handler for any failure status code:
>   response.failure = { resp ->
>     println "Unexpected error: ${resp.status} :
> ${resp.statusLine.reasonPhrase}"
>   }
> }
>
> The issue in my code, is that I create and add a new ticket object on
> each update where I want to have only one.
> I could removed old ticket before save but in this case history diff
> may not compare two tickets as there have to different GUID.
> I could copy new ticket fields to old ticket
> Or may be there is simplest way to do it implemented else where in XWiki?
>
> What do you think?
>
> Regards,
>
> Arnaud.
> _______________________________________________
> users mailing list
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to