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