]> source.dussan.org Git - archiva.git/blob
73653c67bd30e1a29c6d37436bc80ae89432119a
[archiva.git] /
1 package org.apache.maven.archiva.web.tags;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import java.io.IOException;
23 import java.util.List;
24
25 import javax.servlet.jsp.JspException;
26 import javax.servlet.jsp.tagext.TagSupport;
27
28 import org.apache.archiva.metadata.model.Dependency;
29 import org.apache.archiva.metadata.model.License;
30 import org.apache.archiva.metadata.model.MailingList;
31 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
32 import org.apache.commons.lang.StringUtils;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 /**
37  * ProjectMetadataTag 
38  * 
39  * Outputs the project metadata attributes, used in the Metadata tab in artifact browse.
40  */
41 @SuppressWarnings( "serial" )
42 public class ProjectMetadataTag
43     extends TagSupport
44 {
45     private Logger log = LoggerFactory.getLogger( ProjectMetadataTag.class );
46
47     private Object object;
48     
49     private String groupId;
50
51     private String artifactId;
52
53     private String version;
54
55     @Override
56     public void release()
57     {
58         object = null;
59         super.release();
60     }
61
62     @Override
63     public int doStartTag()
64         throws JspException
65     {
66         StringBuffer buf = new StringBuffer();
67
68         if ( object == null )
69         {
70             buf.append( "Error generating project metadata." );
71             log.error( "Unable to generate project metadata for null object." );
72         }
73         else if ( object instanceof ProjectVersionMetadata )
74         {
75             ProjectVersionMetadata metadata = (ProjectVersionMetadata) object;
76
77             buildProjectMetadata( buf, metadata );
78         }
79         else
80         {
81             buf.append( "Unable to generate project metadata for object " ).append( object.getClass().getName() );
82         }
83
84         out( buf.toString() );
85
86         return EVAL_BODY_INCLUDE;
87     }
88
89     private void out( String msg )
90         throws JspException
91     {
92         try
93         {
94             pageContext.getOut().print( msg );
95         }
96         catch ( IOException e )
97         {
98             throw new JspException( "Unable to output to jsp page context." );
99         }
100     }
101
102     private void buildProjectMetadata( StringBuffer metadataEntries, ProjectVersionMetadata projectMetadata )
103     {
104         startList( metadataEntries );
105
106         addListItem( "project.metadata.id=", projectMetadata.getId(), metadataEntries );
107         addListItem( "project.url=", projectMetadata.getUrl(), metadataEntries );
108         addListItem( "project.name=", projectMetadata.getName(), metadataEntries );
109         addListItem( "project.description=", projectMetadata.getDescription(), metadataEntries );
110         
111         if ( projectMetadata.getOrganization() != null )
112         {
113             startListItem( "organization", metadataEntries );
114             startList( metadataEntries );
115             addListItem( "organization.name=", projectMetadata.getOrganization().getName(), metadataEntries );
116             addListItem( "organization.url=", projectMetadata.getOrganization().getUrl(), metadataEntries );
117             endList( metadataEntries );
118             endListItem( metadataEntries );
119         }
120         
121         if ( projectMetadata.getIssueManagement() != null )
122         {
123             startListItem( "issueManagement", metadataEntries );
124             startList( metadataEntries );
125             addListItem( "issueManagement.system=", projectMetadata.getIssueManagement().getSystem(), metadataEntries );
126             addListItem( "issueManagement.url=", projectMetadata.getIssueManagement().getUrl(), metadataEntries );
127             endList( metadataEntries );
128             endListItem( metadataEntries );
129         }
130         
131         if ( projectMetadata.getScm() != null )
132         {
133             startListItem( "scm", metadataEntries );
134             startList( metadataEntries );
135             addListItem( "scm.url=", projectMetadata.getScm().getUrl(), metadataEntries );
136             addListItem( "scm.connection=", projectMetadata.getScm().getConnection(), metadataEntries );
137             addListItem( "scm.developer.connection=", projectMetadata.getScm().getDeveloperConnection(),
138                          metadataEntries );
139             endList( metadataEntries );
140             endListItem( metadataEntries );
141         }
142         
143         if ( projectMetadata.getCiManagement() != null )
144         {
145             startListItem( "ciManagement", metadataEntries );
146             startList( metadataEntries );
147             addListItem( "ciManagement.system=", projectMetadata.getCiManagement().getSystem(), metadataEntries );
148             addListItem( "ciManagement.url=", projectMetadata.getCiManagement().getUrl(), metadataEntries );
149             endList( metadataEntries );
150             endListItem( metadataEntries );
151         }
152         
153         if ( projectMetadata.getLicenses() != null && !projectMetadata.getLicenses().isEmpty() )
154         {
155             startListItem( "licenses", metadataEntries );
156             List<License> licenses = projectMetadata.getLicenses();
157             int ctr = 0;
158             startList( metadataEntries );
159             for ( License license : licenses )
160             {
161                 createDeleteLink( "license", license.getName(), metadataEntries );
162                 startList( metadataEntries );
163                 addListItem( "licenses." + ctr + ".name=", license.getName(), metadataEntries );
164                 addListItem( "licenses." + ctr + ".url=", license.getUrl(), metadataEntries );
165                 endList( metadataEntries );
166                 endListItem( metadataEntries );
167                 ctr++;
168             }
169             endList( metadataEntries );
170             endListItem( metadataEntries );
171         }
172         
173         if ( projectMetadata.getMailingLists() != null && !projectMetadata.getMailingLists().isEmpty() )
174         {
175             startListItem( "mailingLists", metadataEntries );
176             List<MailingList> lists = projectMetadata.getMailingLists();
177             List<String> otherArchives;
178             int ctr = 0;
179             int archiveCtr = 0;
180
181             startList( metadataEntries );
182             for ( MailingList list : lists )
183             {
184                 createDeleteLink( "mailingList", list.getName(), metadataEntries );
185                 startList( metadataEntries );
186                 addListItem( "mailingLists." + ctr + ".name=", list.getName(), metadataEntries );
187                 addListItem( "mailingLists." + ctr + ".archive.url=", list.getMainArchiveUrl(), metadataEntries );
188                 addListItem( "mailingLists." + ctr + ".post=", list.getPostAddress(), metadataEntries );
189                 addListItem( "mailingLists." + ctr + ".subscribe=", list.getSubscribeAddress(), metadataEntries );
190                 addListItem( "mailingLists." + ctr + ".unsubscribe=", list.getUnsubscribeAddress(), metadataEntries );
191                 startListItem( "mailingLists." + ctr + ".otherArchives", metadataEntries );
192
193                 if ( list.getOtherArchives() != null && list.getOtherArchives().size() > 0 )
194                 {
195                     archiveCtr = 0;
196                     otherArchives = list.getOtherArchives();
197
198                     startList( metadataEntries );
199                     for ( String archive : otherArchives )
200                     {
201                         addListItem( "mailingLists." + ctr + ".otherArchives." + archiveCtr + "=", archive,
202                                      metadataEntries );
203                         metadataEntries.append( archive );
204                         archiveCtr++;
205                     }
206                     endList( metadataEntries );
207                 }
208                 endListItem( metadataEntries );
209                 endList( metadataEntries );
210                 endListItem( metadataEntries );
211                 ctr++;
212             }
213             endList( metadataEntries );
214             endListItem( metadataEntries );
215         }
216         
217         if ( projectMetadata.getDependencies() != null && !projectMetadata.getDependencies().isEmpty() )
218         {
219             startListItem( "dependencies", metadataEntries );
220             List<Dependency> dependencies = projectMetadata.getDependencies();
221             int ctr = 0;
222
223             startList( metadataEntries );
224             
225             for ( Dependency dependency : dependencies )
226             {
227                 createDeleteLink( "dependency", dependency.getArtifactId(), metadataEntries );
228                 startList( metadataEntries );
229                 addListItem( "dependency." + ctr + ".group.id=", dependency.getGroupId(), metadataEntries );
230                 addListItem( "dependency." + ctr + ".artifact.id=", dependency.getArtifactId(), metadataEntries );
231                 addListItem( "dependency." + ctr + ".version=", dependency.getVersion(), metadataEntries );
232                 addListItem( "dependency." + ctr + ".classifier=", dependency.getClassifier(), metadataEntries );
233                 addListItem( "dependency." + ctr + ".type=", dependency.getType(), metadataEntries );
234                 addListItem( "dependency." + ctr + ".scope=", dependency.getScope(), metadataEntries );
235                 addListItem( "dependency." + ctr + ".system.path=", dependency.getSystemPath(), metadataEntries );
236                 endList( metadataEntries );
237                 endListItem( metadataEntries );
238                 ctr++;
239             }
240             endList( metadataEntries );
241             
242             endListItem( metadataEntries );
243         }
244
245         endList( metadataEntries );
246     }
247
248     private void startList( StringBuffer metadataEntries )
249     {
250         metadataEntries.append( "\n<ul>" );
251     }
252
253     private void endList( StringBuffer metadataEntries )
254     {
255         metadataEntries.append( "\n</ul>" );
256     }
257
258     private void addListItem( String label, String value, StringBuffer metadataEntries )
259     {
260         String newValue = StringUtils.isEmpty( value ) ? "" : value;
261         metadataEntries.append( "\n<li>" ).append( label ).append( newValue ).append( "</li>" );
262     }
263
264     private void startListItem( String value, StringBuffer metadataEntries )
265     {
266         metadataEntries.append( "\n<li>" ).append( value );
267     }
268
269     private void endListItem( StringBuffer metadataEntries )
270     {
271         metadataEntries.append( "\n</li>" );
272     }
273     
274     private void createDeleteLink( String name, String value, StringBuffer metadataEntries )
275     {
276         metadataEntries.append( "\n<li>" ).append( value )
277                        .append( "\n<a href=\"showProjectMetadata!deleteMetadataEntry.action?" )
278                        .append( "groupId=" ).append( groupId )
279                        .append( "&artifactId=" ).append( artifactId )
280                        .append( "&version=" ).append( version )
281                        .append( "&deleteItem=" ).append( name )
282                        .append( "&itemValue=").append( value ).append( "\" >" )
283                        .append( "<img src=\"images/icons/delete.gif\"/>" ).append( "</a>" );
284     }
285
286     public void setObject( Object object )
287     {
288         this.object = object;
289     }
290
291     public void setGroupId( String groupId )
292     {
293         this.groupId = groupId;
294     }
295
296     public void setArtifactId( String artifactId )
297     {
298         this.artifactId = artifactId;
299     }
300
301     public void setVersion( String version )
302     {
303         this.version = version;
304     }
305 }