001 package org.apache.maven.project;
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
022 import java.io.File;
023 import java.io.PrintWriter;
024 import java.io.StringWriter;
025 import java.util.List;
026
027 import org.apache.maven.model.building.ModelProblem;
028 import org.apache.maven.model.building.ModelProblemUtils;
029
030 /**
031 * @author Jason van Zyl
032 */
033 public class ProjectBuildingException
034 extends Exception
035 {
036 private final String projectId;
037
038 private File pomFile;
039
040 private List<ProjectBuildingResult> results;
041
042 public ProjectBuildingException( String projectId, String message, Throwable cause )
043 {
044 super( createMessage( message, projectId, null ), cause );
045 this.projectId = projectId;
046 }
047
048 /**
049 * @param projectId
050 * @param message
051 * @param pomFile pom file location
052 */
053 public ProjectBuildingException( String projectId, String message, File pomFile )
054 {
055 super( createMessage( message, projectId, pomFile ) );
056 this.projectId = projectId;
057 this.pomFile = pomFile;
058 }
059
060 /**
061 * @param projectId
062 * @param message
063 * @param pomFile pom file location
064 * @param cause
065 */
066 protected ProjectBuildingException( String projectId, String message, File pomFile, Throwable cause )
067 {
068 super( createMessage( message, projectId, pomFile ), cause );
069 this.projectId = projectId;
070 this.pomFile = pomFile;
071 }
072
073 public ProjectBuildingException( List<ProjectBuildingResult> results )
074 {
075 super( createMessage( results ) );
076 this.projectId = "";
077 this.results = results;
078 }
079
080 public File getPomFile()
081 {
082 return pomFile;
083 }
084
085 /**
086 * @deprecated use {@link #getPomFile()}
087 */
088 public String getPomLocation()
089 {
090 if ( getPomFile() != null )
091 {
092 return getPomFile().getAbsolutePath();
093 }
094 else
095 {
096 return "null";
097 }
098 }
099
100 public String getProjectId()
101 {
102 return projectId;
103 }
104
105 public List<ProjectBuildingResult> getResults()
106 {
107 return results;
108 }
109
110 private static String createMessage( String message, String projectId, File pomFile )
111 {
112 StringBuilder buffer = new StringBuilder( 256 );
113 buffer.append( message );
114 buffer.append( " for project " ).append( projectId );
115 if ( pomFile != null )
116 {
117 buffer.append( " at " ).append( pomFile.getAbsolutePath() );
118 }
119 return buffer.toString();
120 }
121
122 private static String createMessage( List<ProjectBuildingResult> results )
123 {
124 StringWriter buffer = new StringWriter( 1024 );
125
126 PrintWriter writer = new PrintWriter( buffer );
127 writer.println( "Some problems were encountered while processing the POMs:" );
128 for ( ProjectBuildingResult result : results )
129 {
130 for ( ModelProblem problem : result.getProblems() )
131 {
132 writer.print( "[" );
133 writer.print( problem.getSeverity() );
134 writer.print( "] " );
135 writer.print( problem.getMessage() );
136 writer.print( " @ " );
137 writer.println( ModelProblemUtils.formatLocation( problem, result.getProjectId() ) );
138 }
139 }
140 writer.close();
141
142 return buffer.toString();
143 }
144
145 }