/* Copyright (c) 2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Gabriel Roldan (Boundless) - initial implementation */ package org.locationtech.geogig.rest.osm; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.locationtech.geogig.api.AbstractGeoGigOp; import org.locationtech.geogig.osm.internal.OSMDownloadOp; import org.locationtech.geogig.osm.internal.OSMImportOp; import org.locationtech.geogig.osm.internal.OSMReport; import org.locationtech.geogig.osm.internal.OSMUpdateOp; import org.locationtech.geogig.rest.AsyncCommandRepresentation; import org.locationtech.geogig.rest.AsyncContext.AsyncCommand; import org.locationtech.geogig.rest.CommandRepresentationFactory; import org.restlet.data.MediaType; import com.google.common.base.Optional; /** * Representation for commands that return {@link OSMReport} (i.e. {@link OSMImportOp}, * {@link OSMDownloadOp}, {@link OSMUpdateOp}). * <p> * The SPI factory for this class must be present in * {@code META-INF/services/org.locationtech.geogig.rest.CommandRepresentationFactory} as * {@code org.locationtech.geogig.rest.osm.OSMReportRepresentation$Factory} * */ public class OSMReportRepresentation extends AsyncCommandRepresentation<Optional<OSMReport>> { public OSMReportRepresentation(MediaType mediaType, AsyncCommand<Optional<OSMReport>> cmd, String baseURL) { super(mediaType, cmd, baseURL); } @Override protected void writeResultBody(XMLStreamWriter w, Optional<OSMReport> result) throws XMLStreamException { if (result.isPresent()) { OSMReport report = result.get(); long latestChangeset = report.getLatestChangeset(); long latestTimestamp = report.getLatestTimestamp(); long processedEntities = report.getCount(); long nodeCount = report.getNodeCount(); long wayCount = report.getWayCount(); long unpprocessedCount = report.getUnpprocessedCount(); w.writeStartElement("OSMReport"); element(w, "latestChangeset", latestChangeset); element(w, "latestTimestamp", latestTimestamp); element(w, "processedEntities", processedEntities); element(w, "nodeCount", nodeCount); element(w, "wayCount", wayCount); element(w, "unpprocessedCount", unpprocessedCount); w.writeEndElement(); } } public static class Factory implements CommandRepresentationFactory<Optional<OSMReport>> { @Override public boolean supports(Class<? extends AbstractGeoGigOp<?>> cmdClass) { return OSMImportOp.class.isAssignableFrom(cmdClass) || OSMDownloadOp.class.isAssignableFrom(cmdClass) || OSMUpdateOp.class.isAssignableFrom(cmdClass); } @Override public AsyncCommandRepresentation<Optional<OSMReport>> newRepresentation( AsyncCommand<Optional<OSMReport>> cmd, MediaType mediaType, String baseURL) { return new OSMReportRepresentation(mediaType, cmd, baseURL); } } }