Package com.sonatype.maven.shell.nexus.internal

Source Code of com.sonatype.maven.shell.nexus.internal.StagingClientImpl

/*******************************************************************************
* Copyright (c) 2009-2011 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
*   http://www.eclipse.org/legal/epl-v10.html
* The Apache License v2.0 is available at
*   http://www.apache.org/licenses/LICENSE-2.0.html
* You may elect to redistribute this code under either of these licenses.
*******************************************************************************/

package com.sonatype.maven.shell.nexus.internal;

import com.google.inject.Inject;
import com.sonatype.maven.shell.nexus.NexusClient;
import com.sonatype.maven.shell.nexus.StagingClient;
import com.sonatype.maven.shell.nexus.internal.marshal.MarshallerFactory;
import com.sonatype.maven.shell.nexus.internal.marshal.MarshallerFactorySupport;
import com.thoughtworks.xstream.XStream;
import org.sonatype.nexus.rest.model.staging.StagingProfile;
import org.sonatype.nexus.rest.model.staging.StagingProfileListResponse;
import org.sonatype.nexus.rest.model.staging.StagingProfileRepositoriesListResponse;
import org.sonatype.nexus.rest.model.staging.StagingProfileRepository;
import org.sonatype.nexus.rest.model.staging.StagingPromote;
import org.sonatype.nexus.rest.model.staging.StagingPromoteRequest;

import java.net.URI;
import java.util.List;

/**
* {@link com.sonatype.maven.shell.nexus.StagingClient} implementation.
*
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
* @since 0.9
*/
public class StagingClientImpl
    extends NexusClientExtensionSupport
    implements StagingClient
{
    @Inject
    public StagingClientImpl(final NexusClient client) {
        super(client);
    }

    @Override
    protected MarshallerFactory createMarshallerFactory() {
        return new MarshallerFactorySupport()
        {
            @Override
            protected XStream configure(final XStream xs) {
                assert xs != null;

                xs.alias("stagingProfiles", StagingProfileListResponse.class);
                xs.alias("stagingProfile", StagingProfile.class);

                xs.alias("stagingRepositories", StagingProfileRepositoriesListResponse.class);
                xs.alias("stagingProfileRepository", StagingProfileRepository.class);

                xs.alias("promoteRequest", StagingPromoteRequest.class);
               
                return super.configure(xs);
            }
        };
    }

    public List<StagingProfile> listProfiles() {
        ensureAuthenticated();

        URI uri = baseUri().path("staging/profiles").build();

        String content = client.get(uri);
        return unmarshal(StagingProfileListResponse.class, content).getData();
    }

    public List<StagingProfileRepository> listRepositories(final String profileId) {
        assert profileId != null;

        ensureAuthenticated();

        URI uri = baseUri().path("staging/profile_repositories").path(profileId).build();

        String content = client.get(uri);
        return unmarshal(StagingProfileRepositoriesListResponse.class, content).getData();
    }

    public void close(final String profileId, final String repositoryId, final String description) {
        assert profileId != null;
        assert repositoryId != null;
        assert description != null;

        ensureAuthenticated();

        URI uri = baseUri().path("staging/profiles").path(profileId).path("finish").build();

        StagingPromoteRequest request = new StagingPromoteRequest();
        StagingPromote data = new StagingPromote();
        data.setStagedRepositoryId(repositoryId);
        data.setDescription(description);
        request.setData(data);

        client.post(uri, marshal(StagingPromoteRequest.class, request));
    }

    public void drop(final String profileId, final String repositoryId) {
        assert profileId != null;
        assert repositoryId != null;

        ensureAuthenticated();

        URI uri = baseUri().path("staging/profiles").path(profileId).path("drop").build();

        StagingPromoteRequest request = new StagingPromoteRequest();
        StagingPromote data = new StagingPromote();
       
        data.setStagedRepositoryId(repositoryId);

        request.setData(data);

        client.post(uri, marshal(StagingPromoteRequest.class, request));
    }

    public void promote(final String profileId, final String stagedRepositoryId, final String targetRepositoryId) {
        assert profileId != null;
        assert stagedRepositoryId != null;
        assert targetRepositoryId != null;

        ensureAuthenticated();

        URI uri = baseUri().path("staging/profiles").path(profileId).path("promote").build();

        StagingPromoteRequest request = new StagingPromoteRequest();
        StagingPromote data = new StagingPromote();
        data.setStagedRepositoryId(stagedRepositoryId);
        data.setTargetRepositoryId(targetRepositoryId);
        request.setData(data);

        client.post(uri, marshal(StagingPromoteRequest.class, request));
    }
}
TOP

Related Classes of com.sonatype.maven.shell.nexus.internal.StagingClientImpl

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.