Package org.locationtech.geogig.rest.repository

Source Code of org.locationtech.geogig.rest.repository.SendObjectResource

/* 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.repository;

import static org.locationtech.geogig.rest.repository.RESTUtils.getGeogig;

import java.io.IOException;
import java.io.InputStream;

import org.locationtech.geogig.api.GeoGIG;
import org.locationtech.geogig.remote.BinaryPackedObjects;
import org.locationtech.geogig.remote.BinaryPackedObjects.IngestResults;
import org.locationtech.geogig.rest.RestletException;
import org.restlet.data.Request;
import org.restlet.data.Status;
import org.restlet.resource.Representation;
import org.restlet.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Stopwatch;
import com.google.common.io.Closeables;
import com.google.common.io.CountingInputStream;

/**
*
*/
public class SendObjectResource extends Resource {

    private static final Logger LOGGER = LoggerFactory.getLogger(SendObjectResource.class);

    @Override
    public boolean allowPost() {
        return true;
    }

    @Override
    public void post(Representation entity) {
        InputStream input = null;

        Request request = getRequest();
        try {
            LOGGER.info("Receiving objects from {}", request.getClientInfo().getAddress());
            Representation representation = request.getEntity();
            input = representation.getStream();
            final GeoGIG ggit = getGeogig(request).get();
            final BinaryPackedObjects unpacker = new BinaryPackedObjects(ggit.getRepository()
                    .objectDatabase());

            CountingInputStream countingStream = new CountingInputStream(input);

            Stopwatch sw = Stopwatch.createStarted();
            IngestResults ingestResults = unpacker.ingest(countingStream);
            sw.stop();

            LOGGER.info(String
                    .format("SendObjectResource: Processed %,d objects.\nInserted: %,d.\nExisting: %,d.\nTime to process: %s.\nStream size: %,d bytes.\n",
                            ingestResults.total(), ingestResults.getInserted(),
                            ingestResults.getExisting(), sw, countingStream.getCount()));

        } catch (IOException e) {
            LOGGER.warn("Error processing incoming objects from {}", request.getClientInfo()
                    .getAddress(), e);
            throw new RestletException(e.getMessage(), Status.SERVER_ERROR_INTERNAL, e);
        } finally {
            if (input != null)
                Closeables.closeQuietly(input);
        }
    }
}
TOP

Related Classes of org.locationtech.geogig.rest.repository.SendObjectResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.