001package org.eclipse.aether.installation;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 * 
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 * 
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.ArrayList;
023import java.util.Collection;
024import java.util.Collections;
025import static java.util.Objects.requireNonNull;
026
027import org.eclipse.aether.RepositorySystem;
028import org.eclipse.aether.RepositorySystemSession;
029import org.eclipse.aether.artifact.Artifact;
030import org.eclipse.aether.metadata.Metadata;
031
032/**
033 * The result of installing artifacts and their accompanying metadata into the a remote repository.
034 * 
035 * @see RepositorySystem#install(RepositorySystemSession, InstallRequest)
036 */
037public final class InstallResult
038{
039
040    private final InstallRequest request;
041
042    private Collection<Artifact> artifacts;
043
044    private Collection<Metadata> metadata;
045
046    /**
047     * Creates a new result for the specified request.
048     *
049     * @param request The installation request, must not be {@code null}.
050     */
051    public InstallResult( InstallRequest request )
052    {
053        this.request = requireNonNull( request, "install request cannot be null" );
054        artifacts = Collections.emptyList();
055        metadata = Collections.emptyList();
056    }
057
058    /**
059     * Gets the install request that was made.
060     *
061     * @return The install request, never {@code null}.
062     */
063    public InstallRequest getRequest()
064    {
065        return request;
066    }
067
068    /**
069     * Gets the artifacts that got installed.
070     * 
071     * @return The installed artifacts, never {@code null}.
072     */
073    public Collection<Artifact> getArtifacts()
074    {
075        return artifacts;
076    }
077
078    /**
079     * Sets the artifacts that got installed.
080     * 
081     * @param artifacts The installed artifacts, may be {@code null}.
082     * @return This result for chaining, never {@code null}.
083     */
084    public InstallResult setArtifacts( Collection<Artifact> artifacts )
085    {
086        if ( artifacts == null )
087        {
088            this.artifacts = Collections.emptyList();
089        }
090        else
091        {
092            this.artifacts = artifacts;
093        }
094        return this;
095    }
096
097    /**
098     * Adds the specified artifacts to the result.
099     * 
100     * @param artifact The installed artifact to add, may be {@code null}.
101     * @return This result for chaining, never {@code null}.
102     */
103    public InstallResult addArtifact( Artifact artifact )
104    {
105        if ( artifact != null )
106        {
107            if ( artifacts.isEmpty() )
108            {
109                artifacts = new ArrayList<Artifact>();
110            }
111            artifacts.add( artifact );
112        }
113        return this;
114    }
115
116    /**
117     * Gets the metadata that got installed. Note that due to automatically generated metadata, there might have been
118     * more metadata installed than originally specified in the install request.
119     * 
120     * @return The installed metadata, never {@code null}.
121     */
122    public Collection<Metadata> getMetadata()
123    {
124        return metadata;
125    }
126
127    /**
128     * Sets the metadata that got installed.
129     * 
130     * @param metadata The installed metadata, may be {@code null}.
131     * @return This result for chaining, never {@code null}.
132     */
133    public InstallResult setMetadata( Collection<Metadata> metadata )
134    {
135        if ( metadata == null )
136        {
137            this.metadata = Collections.emptyList();
138        }
139        else
140        {
141            this.metadata = metadata;
142        }
143        return this;
144    }
145
146    /**
147     * Adds the specified metadata to this result.
148     * 
149     * @param metadata The installed metadata to add, may be {@code null}.
150     * @return This result for chaining, never {@code null}.
151     */
152    public InstallResult addMetadata( Metadata metadata )
153    {
154        if ( metadata != null )
155        {
156            if ( this.metadata.isEmpty() )
157            {
158                this.metadata = new ArrayList<Metadata>();
159            }
160            this.metadata.add( metadata );
161        }
162        return this;
163    }
164
165    @Override
166    public String toString()
167    {
168        return getArtifacts() + ", " + getMetadata();
169    }
170
171}