]> source.dussan.org Git - archiva.git/blob
cd7c2d5866b9be19480e943cac97bfe28d9a8f0e
[archiva.git] /
1 package org.apache.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 org.apache.archiva.admin.model.beans.ManagedRepository;
23 import org.apache.archiva.web.util.ContextUtils;
24 import org.apache.commons.lang.StringEscapeUtils;
25 import org.apache.struts2.views.annotations.StrutsTag;
26 import org.apache.struts2.views.annotations.StrutsTagAttribute;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 import javax.servlet.jsp.JspException;
31 import javax.servlet.jsp.JspWriter;
32 import javax.servlet.jsp.PageContext;
33 import javax.servlet.jsp.tagext.TagSupport;
34 import java.io.IOException;
35
36 /**
37  * CopyPasteSnippetTag 
38  *
39  * @version $Id$
40  */
41 @StrutsTag(name = "copy-paste-snippet", tldBodyContent = "empty", tldTagClass = "org.apache.archiva.web.tags.CopyPasteSnippetTag", description = "Render a copy paste snippet for the provided object")
42 public class CopyPasteSnippetTag
43     extends TagSupport
44 {
45     private Logger log = LoggerFactory.getLogger( CopyPasteSnippetTag.class );
46     
47     private Object object;
48     
49     private String wrapper = PRE;
50
51     public static final String PRE = "pre";
52     
53     public static final String TOGGLE = "toggle";
54     
55     @Override
56     public void release()
57     {
58         object = null;
59         super.release();
60     }
61
62     @Override
63     public int doEndTag()
64         throws JspException
65     {
66         StringBuilder prefix = new StringBuilder();
67         StringBuilder buf = new StringBuilder();
68         StringBuilder suffix = new StringBuilder();
69         
70         if ( object == null )
71         {
72             buf.append( "Error generating snippet." );
73             log.error( "Unable to generate snippet for null object." );
74         }
75         else if ( object instanceof ManagedRepository )
76         {
77             ManagedRepository repo = (ManagedRepository) object;
78             
79             if ( TOGGLE.equals( wrapper ) )
80             {
81                 prefix.append( "<a href=\"#\" class=\"expand\">Show POM Snippet</a><br/>" );
82                 prefix.append( "<pre class=\"pom\"><code>" );
83         
84                 suffix.append( "</code></pre>" );
85             }
86             else if ( PRE.equals( wrapper ) )
87             {
88                 prefix.append( "<pre>" );
89                 suffix.append( "</pre>" );
90             }
91             
92             createSnippet( buf, repo, pageContext );
93         }
94         else
95         {
96             buf.append( "Unable to generate snippet for object " ).append( object.getClass().getName() );
97         }
98         
99         try
100         {
101             JspWriter out = pageContext.getOut();
102         
103             out.write( prefix.toString() );
104             out.write( StringEscapeUtils.escapeXml( buf.toString() ) );
105             out.write( suffix.toString() );
106             
107             out.flush();
108         }
109         catch ( IOException e )
110         {
111             throw new JspException( "Unable to write snippet to output: " + e.getMessage(), e );
112         }
113
114         return super.doEndTag();
115     }
116
117     @StrutsTagAttribute(description = "The Object to Render", type = "String", defaultValue = "", required = true, rtexprvalue = true)
118     public void setObject( Object object )
119     {
120         this.object = object;
121     }
122
123     @StrutsTagAttribute(description = "The wrapper type to use, can be 'pre' or 'toggle'", type = "String", defaultValue = "", required = false, rtexprvalue = true)
124     public void setWrapper( String wrapper )
125     {
126         this.wrapper = wrapper;
127     }
128
129     private void createSnippet( StringBuilder snippet, ManagedRepository repo, PageContext pageContext )
130     {
131         snippet.append( "<project>\n" );
132         snippet.append( "  ...\n" );
133         snippet.append( "  <distributionManagement>\n" );
134
135         String distRepoName = "repository";
136         if ( repo.isSnapshots() )
137         {
138             distRepoName = "snapshotRepository";
139         }
140
141         snippet.append( "    <" ).append( distRepoName ).append( ">\n" );
142         snippet.append( "      <id>" ).append( repo.getId() ).append( "</id>\n" );
143         snippet.append( "      <url>" ).append( ContextUtils.getBaseURL( pageContext, "repository" ) );
144         snippet.append( "/" ).append( repo.getId() ).append( "/" ).append( "</url>\n" );
145
146         if ( !"default".equals( repo.getLayout() ) )
147         {
148             snippet.append( "      <layout>" ).append( repo.getLayout() ).append( "</layout>" );
149         }
150
151         snippet.append( "    </" ).append( distRepoName ).append( ">\n" );
152         snippet.append( "  </distributionManagement>\n" );
153         snippet.append( "\n" );
154
155         snippet.append( "  <repositories>\n" );
156         snippet.append( "    <repository>\n" );
157         snippet.append( "      <id>" ).append( repo.getId() ).append( "</id>\n" );
158         snippet.append( "      <name>" ).append( repo.getName() ).append( "</name>\n" );
159
160         snippet.append( "      <url>" );
161         snippet.append( ContextUtils.getBaseURL( pageContext, "repository" ) );
162         snippet.append( "/" ).append( repo.getId() ).append( "/" );
163
164         snippet.append( "</url>\n" );
165
166         if ( !"default".equals( repo.getLayout() ) )
167         {
168             snippet.append( "      <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
169         }
170
171         snippet.append( "      <releases>\n" );
172         snippet.append( "        <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append( "</enabled>\n" );
173         snippet.append( "      </releases>\n" );
174         snippet.append( "      <snapshots>\n" );
175         snippet.append( "        <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append( "</enabled>\n" );
176         snippet.append( "      </snapshots>\n" );
177         snippet.append( "    </repository>\n" );
178         snippet.append( "  </repositories>\n" );
179         snippet.append( "  <pluginRepositories>\n" );
180         snippet.append( "    <pluginRepository>\n" );
181         snippet.append( "      <id>" ).append( repo.getId() ).append( "</id>\n" );
182         snippet.append( "      <name>" ).append( repo.getName() ).append( "</name>\n" );
183
184         snippet.append( "      <url>" );
185         snippet.append( ContextUtils.getBaseURL( pageContext, "repository" ) );
186         snippet.append( "/" ).append( repo.getId() ).append( "/" );
187
188         snippet.append( "</url>\n" );
189
190         if ( !"default".equals( repo.getLayout() ) )
191         {
192             snippet.append( "      <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
193         }
194
195         snippet.append( "      <releases>\n" );
196         snippet.append( "        <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append( "</enabled>\n" );
197         snippet.append( "      </releases>\n" );
198         snippet.append( "      <snapshots>\n" );
199         snippet.append( "        <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append( "</enabled>\n" );
200         snippet.append( "      </snapshots>\n" );
201         snippet.append( "    </pluginRepository>\n" );
202         snippet.append( "  </pluginRepositories>\n" );
203
204         snippet.append( "  ...\n" );
205         snippet.append( "</project>\n" );
206     }
207 }