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.bourree(a)gmail.com>wrote;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(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users