001package org.apache.maven.repository.metadata;
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 org.apache.maven.artifact.ArtifactScopeEnum;
023import org.codehaus.plexus.PlexusContainer;
024import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
025
026/**
027 * This object is tinted with ClasspathTransformation and GraphConflictResolver.
028 * Get rid of them after debugging
029 *
030 * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
031 */
032public class MetadataResolutionResult
033{
034    MetadataTreeNode treeRoot;
035
036    /**
037     * these components are are initialized on demand by
038     * explicit call of the initTreeProcessing()
039     */
040    ClasspathTransformation classpathTransformation;
041    GraphConflictResolver conflictResolver;
042
043    //----------------------------------------------------------------------------
044    public MetadataResolutionResult( )
045    {
046    }
047    //----------------------------------------------------------------------------
048    public MetadataResolutionResult( MetadataTreeNode root )
049    {
050        this.treeRoot = root;
051    }
052    //----------------------------------------------------------------------------
053    public MetadataTreeNode getTree()
054    {
055        return treeRoot;
056    }
057    //----------------------------------------------------------------------------
058    public void setTree( MetadataTreeNode root )
059    {
060        this.treeRoot = root;
061    }
062
063    public void initTreeProcessing( PlexusContainer plexus )
064        throws ComponentLookupException
065    {
066        classpathTransformation = plexus.lookup( ClasspathTransformation.class );
067        conflictResolver = plexus.lookup( GraphConflictResolver.class );
068    }
069    //----------------------------------------------------------------------------
070    public MetadataGraph getGraph()
071        throws MetadataResolutionException
072    {
073        return treeRoot == null ? null : new MetadataGraph( treeRoot );
074    }
075    //----------------------------------------------------------------------------
076    public MetadataGraph getGraph( ArtifactScopeEnum scope )
077        throws MetadataResolutionException, GraphConflictResolutionException
078    {
079        if ( treeRoot == null )
080        {
081            return null;
082        }
083
084        if ( conflictResolver == null )
085        {
086            return null;
087        }
088
089        return conflictResolver.resolveConflicts( getGraph(), scope );
090    }
091    //----------------------------------------------------------------------------
092    public MetadataGraph getGraph( MetadataResolutionRequestTypeEnum requestType )
093        throws MetadataResolutionException, GraphConflictResolutionException
094    {
095        if ( requestType == null )
096        {
097            return null;
098        }
099
100        if ( treeRoot == null )
101        {
102            return null;
103        }
104
105        if ( conflictResolver == null )
106        {
107            return null;
108        }
109
110        if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathCompile ) )
111        {
112            return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.compile );
113        }
114        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
115        {
116            return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.runtime );
117        }
118        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
119        {
120            return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
121        }
122        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
123        {
124            return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
125        }
126        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.graph ) )
127        {
128            return getGraph();
129        }
130        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.versionedGraph ) )
131        {
132            return new MetadataGraph( getTree(), true, false );
133        }
134        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.scopedGraph ) )
135        {
136            return new MetadataGraph( getTree(), true, true );
137        }
138        return null;
139    }
140    //----------------------------------------------------------------------------
141    public ClasspathContainer getClasspath( ArtifactScopeEnum scope )
142        throws MetadataGraphTransformationException, MetadataResolutionException
143    {
144        if ( classpathTransformation == null )
145        {
146            return null;
147        }
148
149        MetadataGraph dirtyGraph = getGraph();
150        if ( dirtyGraph == null )
151        {
152            return null;
153        }
154
155        return classpathTransformation.transform( dirtyGraph, scope, false );
156    }
157
158    //----------------------------------------------------------------------------
159    public MetadataTreeNode getClasspathTree( ArtifactScopeEnum scope )
160        throws MetadataGraphTransformationException, MetadataResolutionException
161    {
162        ClasspathContainer cpc = getClasspath( scope );
163        if ( cpc == null )
164        {
165            return null;
166        }
167
168        return cpc.getClasspathAsTree();
169    }
170    //----------------------------------------------------------------------------
171    //----------------------------------------------------------------------------
172}