Search in sources :

Example 26 with ResponseWriter

use of org.locationtech.geogig.web.api.ResponseWriter in project GeoGig by boundlessgeo.

the class BlameWebOp method run.

/**
     * Runs the command and builds the appropriate response.
     * 
     * @param context - the context to use for this command
     */
@Override
public void run(CommandContext context) {
    final Context geogig = this.getCommandLocator(context);
    Optional<ObjectId> commit = Optional.absent();
    if (branchOrCommit != null) {
        commit = geogig.command(RevParse.class).setRefSpec(branchOrCommit).call();
        if (!commit.isPresent()) {
            throw new CommandSpecException("Could not resolve branch or commit");
        }
    }
    try {
        final BlameReport report = geogig.command(BlameOp.class).setPath(path).setCommit(commit.orNull()).call();
        context.setResponseContent(new CommandResponse() {

            @Override
            public void write(ResponseWriter out) throws Exception {
                out.start();
                try {
                    out.writeBlameReport(report);
                } catch (XMLStreamException e) {
                    throw new CommandSpecException("Error writing stream.");
                }
                out.finish();
            }
        });
    } catch (BlameException e) {
        switch(e.statusCode) {
            case PATH_NOT_FEATURE:
                throw new CommandSpecException("The supplied path does not resolve to a feature");
            case FEATURE_NOT_FOUND:
                throw new CommandSpecException("The supplied path does not exist");
        }
    }
}
Also used : Context(org.locationtech.geogig.api.Context) CommandContext(org.locationtech.geogig.web.api.CommandContext) BlameOp(org.locationtech.geogig.api.porcelain.BlameOp) BlameException(org.locationtech.geogig.api.porcelain.BlameException) ObjectId(org.locationtech.geogig.api.ObjectId) BlameReport(org.locationtech.geogig.api.porcelain.BlameReport) CommandResponse(org.locationtech.geogig.web.api.CommandResponse) BlameException(org.locationtech.geogig.api.porcelain.BlameException) XMLStreamException(javax.xml.stream.XMLStreamException) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException) XMLStreamException(javax.xml.stream.XMLStreamException) ResponseWriter(org.locationtech.geogig.web.api.ResponseWriter) RevParse(org.locationtech.geogig.api.plumbing.RevParse) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException)

Example 27 with ResponseWriter

use of org.locationtech.geogig.web.api.ResponseWriter in project GeoGig by boundlessgeo.

the class CheckoutWebOp method run.

/**
     * Runs the command and builds the appropriate response
     * 
     * @throws CommandSpecException
     */
@Override
public void run(CommandContext context) {
    if (this.getTransactionId() == null) {
        throw new CommandSpecException("No transaction was specified, checkout requires a transaction to preserve the stability of the repository.");
    }
    final Context geogig = this.getCommandLocator(context);
    CheckoutOp command = geogig.command(CheckoutOp.class);
    if (branchOrCommit != null) {
        Optional<Ref> head = geogig.command(RefParse.class).setName(Ref.HEAD).call();
        if (!head.isPresent()) {
            throw new CommandSpecException("Repository has no HEAD, can't merge.");
        }
        final String target = ((SymRef) head.get()).getTarget();
        command.setSource(branchOrCommit).call();
        context.setResponseContent(new CommandResponse() {

            @Override
            public void write(ResponseWriter out) throws Exception {
                out.start();
                out.writeElement("OldTarget", target);
                out.writeElement("NewTarget", branchOrCommit);
                out.finish();
            }
        });
    } else if (path != null) {
        command.addPath(path);
        if (ours && !theirs) {
            command.setOurs(ours);
        } else if (theirs && !ours) {
            command.setTheirs(theirs);
        } else {
            throw new CommandSpecException("Please specify either ours or theirs to update the feature path specified.");
        }
        command.call();
        context.setResponseContent(new CommandResponse() {

            @Override
            public void write(ResponseWriter out) throws Exception {
                out.start();
                out.writeElement("Path", path);
                out.writeElement("Strategy", ours ? "ours" : "theirs");
                out.finish();
            }
        });
    } else {
        throw new CommandSpecException("No branch or commit specified for checkout.");
    }
}
Also used : Context(org.locationtech.geogig.api.Context) CommandContext(org.locationtech.geogig.web.api.CommandContext) Ref(org.locationtech.geogig.api.Ref) SymRef(org.locationtech.geogig.api.SymRef) SymRef(org.locationtech.geogig.api.SymRef) ResponseWriter(org.locationtech.geogig.web.api.ResponseWriter) CheckoutOp(org.locationtech.geogig.api.porcelain.CheckoutOp) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException) CommandResponse(org.locationtech.geogig.web.api.CommandResponse) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException)

Example 28 with ResponseWriter

use of org.locationtech.geogig.web.api.ResponseWriter in project GeoGig by boundlessgeo.

the class Commit method run.

/**
     * Runs the command and builds the appropriate response
     * 
     * @param context - the context to use for this command
     * @throws CommandSpecException
     */
@Override
public void run(CommandContext context) {
    if (this.getTransactionId() == null) {
        throw new CommandSpecException("No transaction was specified, commit requires a transaction to preserve the stability of the repository.");
    }
    final Context geogig = this.getCommandLocator(context);
    RevCommit commit;
    try {
        commit = geogig.command(CommitOp.class).setAuthor(authorName.orNull(), authorEmail.orNull()).setMessage(message).setAllowEmpty(true).setAll(all).call();
        assert commit != null;
    } catch (NothingToCommitException noChanges) {
        context.setResponseContent(CommandResponse.warning("Nothing to commit"));
        commit = null;
    } catch (IllegalStateException e) {
        context.setResponseContent(CommandResponse.warning(e.getMessage()));
        commit = null;
    }
    if (commit != null) {
        final RevCommit commitToWrite = commit;
        final ObjectId parentId = commit.parentN(0).or(ObjectId.NULL);
        final Iterator<DiffEntry> diff = geogig.command(DiffOp.class).setOldVersion(parentId).setNewVersion(commit.getId()).call();
        context.setResponseContent(new CommandResponse() {

            @Override
            public void write(ResponseWriter out) throws Exception {
                out.start();
                out.writeCommitResponse(commitToWrite, diff);
                out.finish();
            }
        });
    }
}
Also used : Context(org.locationtech.geogig.api.Context) CommandContext(org.locationtech.geogig.web.api.CommandContext) ObjectId(org.locationtech.geogig.api.ObjectId) NothingToCommitException(org.locationtech.geogig.api.porcelain.NothingToCommitException) DiffOp(org.locationtech.geogig.api.porcelain.DiffOp) CommandResponse(org.locationtech.geogig.web.api.CommandResponse) NothingToCommitException(org.locationtech.geogig.api.porcelain.NothingToCommitException) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException) ResponseWriter(org.locationtech.geogig.web.api.ResponseWriter) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException) RevCommit(org.locationtech.geogig.api.RevCommit) DiffEntry(org.locationtech.geogig.api.plumbing.diff.DiffEntry)

Example 29 with ResponseWriter

use of org.locationtech.geogig.web.api.ResponseWriter in project GeoGig by boundlessgeo.

the class RefParseWeb method run.

/**
     * Runs the command and builds the appropriate response
     * 
     * @param context - the context to use for this command
     * 
     * @throws CommandSpecException
     */
@Override
public void run(CommandContext context) {
    if (refSpec == null) {
        throw new CommandSpecException("No name was given.");
    }
    final Context geogig = this.getCommandLocator(context);
    Optional<Ref> ref;
    try {
        ref = geogig.command(RefParse.class).setName(refSpec).call();
    } catch (Exception e) {
        context.setResponseContent(CommandResponse.error("Aborting UpdateRef: " + e.getMessage()));
        return;
    }
    if (ref.isPresent()) {
        final Ref newRef = ref.get();
        context.setResponseContent(new CommandResponse() {

            @Override
            public void write(ResponseWriter out) throws Exception {
                out.start();
                out.writeRefParseResponse(newRef);
                out.finish();
            }
        });
    } else {
        context.setResponseContent(new CommandResponse() {

            @Override
            public void write(ResponseWriter out) throws Exception {
                out.start();
                out.writeEmptyRefResponse();
                out.finish();
            }
        });
    }
}
Also used : Context(org.locationtech.geogig.api.Context) CommandContext(org.locationtech.geogig.web.api.CommandContext) Ref(org.locationtech.geogig.api.Ref) ResponseWriter(org.locationtech.geogig.web.api.ResponseWriter) RefParse(org.locationtech.geogig.api.plumbing.RefParse) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException) CommandResponse(org.locationtech.geogig.web.api.CommandResponse) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException)

Example 30 with ResponseWriter

use of org.locationtech.geogig.web.api.ResponseWriter in project GeoGig by boundlessgeo.

the class RemoteWebOp method remotePing.

private void remotePing(CommandContext context, final Context geogig) {
    Optional<Remote> remote = geogig.command(RemoteResolve.class).setName(remoteName).call();
    final boolean remotePingResponse;
    if (remote.isPresent()) {
        Optional<IRemoteRepo> remoteRepo = RemoteUtils.newRemote(GlobalContextBuilder.builder.build(), remote.get(), null, null);
        Ref ref = null;
        if (remoteRepo.isPresent()) {
            try {
                remoteRepo.get().open();
                ref = remoteRepo.get().headRef();
                remoteRepo.get().close();
            } catch (IOException e) {
            // Do nothing, we will write the response later.
            }
        }
        remotePingResponse = ref != null;
    } else {
        remotePingResponse = false;
    }
    context.setResponseContent(new CommandResponse() {

        @Override
        public void write(ResponseWriter out) throws Exception {
            out.start();
            out.writeRemotePingResponse(remotePingResponse);
            out.finish();
        }
    });
}
Also used : Ref(org.locationtech.geogig.api.Ref) ResponseWriter(org.locationtech.geogig.web.api.ResponseWriter) IRemoteRepo(org.locationtech.geogig.remote.IRemoteRepo) Remote(org.locationtech.geogig.api.Remote) IOException(java.io.IOException) CommandResponse(org.locationtech.geogig.web.api.CommandResponse) IOException(java.io.IOException) RemoteException(org.locationtech.geogig.api.porcelain.RemoteException) CommandSpecException(org.locationtech.geogig.web.api.CommandSpecException)

Aggregations

CommandResponse (org.locationtech.geogig.web.api.CommandResponse)32 ResponseWriter (org.locationtech.geogig.web.api.ResponseWriter)32 Context (org.locationtech.geogig.api.Context)24 CommandContext (org.locationtech.geogig.web.api.CommandContext)24 CommandSpecException (org.locationtech.geogig.web.api.CommandSpecException)23 ObjectId (org.locationtech.geogig.api.ObjectId)11 RevCommit (org.locationtech.geogig.api.RevCommit)9 Ref (org.locationtech.geogig.api.Ref)8 NodeRef (org.locationtech.geogig.api.NodeRef)6 Optional (com.google.common.base.Optional)5 IOException (java.io.IOException)5 Remote (org.locationtech.geogig.api.Remote)5 DiffEntry (org.locationtech.geogig.api.plumbing.diff.DiffEntry)5 RemoteException (org.locationtech.geogig.api.porcelain.RemoteException)5 SymRef (org.locationtech.geogig.api.SymRef)4 MergeScenarioReport (org.locationtech.geogig.api.plumbing.merge.MergeScenarioReport)4 GeogigTransaction (org.locationtech.geogig.api.GeogigTransaction)3 RevFeature (org.locationtech.geogig.api.RevFeature)3 RevFeatureType (org.locationtech.geogig.api.RevFeatureType)3 RevTree (org.locationtech.geogig.api.RevTree)3