Finaly I do:
            diffs.each { diff ->
              oldTicket.set(diff.propName, ticket.get(diff.propName))
            }
            ticketDoc.removeObject(ticket)
            ticketDoc.save()

And I get history difference only updated field

Arnaud.

2013/3/19 Arnaud bourree <[email protected]>:
> I just try:
>             ticketDoc.removeObject(oldTicket)
>             ticket.setGuid(oldTicket.getGuid())
>             ticketDoc.save()
>
> And I get unexpected history difference I suspect: object[0] is
> deleted and object[1] is added, so not compared together.
>
> Arnaud.
>
> 2013/3/18 Arnaud bourree <[email protected]>:
>> Thanks, that right test should be if (diffs.size() == 0)
>>
>> But an new object is created anyway
>>
>> Arnaud.
>>
>> 2013/3/18 Edo Beutler <[email protected]>:
>>> 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 
>>> <[email protected]>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
>>>> [email protected]
>>>> http://lists.xwiki.org/mailman/listinfo/users
>>>>
>>> _______________________________________________
>>> users mailing list
>>> [email protected]
>>> http://lists.xwiki.org/mailman/listinfo/users
_______________________________________________
users mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to