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