View Javadoc

1   package org.apache.maven.doxia.sink.render;
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.File;
23  import java.util.HashMap;
24  import java.util.Locale;
25  import java.util.Map;
26  
27  import org.codehaus.plexus.util.PathTool;
28  import org.codehaus.plexus.util.StringUtils;
29  
30  /**
31   * The rendering context of a document.
32   *
33   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
34   * @version $Id: RenderingContext.java 1090706 2011-04-09 23:15:28Z hboutemy $
35   * @since 1.1
36   */
37  public class RenderingContext
38  {
39      private final File basedir;
40  
41      private final String inputName;
42  
43      private final String outputName;
44  
45      private final String parserId;
46  
47      private final String relativePath;
48  
49      private final String extension;
50  
51      private Map<String, String> attributes;
52  
53      /**
54       * <p>Constructor for RenderingContext.</p>
55       *
56       * @param basedir a {@link java.io.File} object.
57       * @param document a {@link java.lang.String} object.
58       */
59      public RenderingContext( File basedir, String document )
60      {
61          this( basedir, document, null );
62      }
63  
64      /**
65       * <p>Constructor for RenderingContext.</p>
66       *
67       * @param basedir a {@link java.io.File} object.
68       * @param document a {@link java.lang.String} object.
69       * @param parserId a {@link java.lang.String} object.
70       */
71      public RenderingContext( File basedir, String document, String parserId )
72      {
73          this( basedir, document, parserId, null );
74  
75      }
76  
77      /**
78       * <p>Constructor for RenderingContext.</p>
79       *
80       * @param basedir a {@link java.io.File} object.
81       * @param document a {@link java.lang.String} object.
82       * @param parserId a {@link java.lang.String} object.
83       * @param extension a {@link java.lang.String} object.
84       */
85      public RenderingContext( File basedir, String document, String parserId, String extension )
86      {
87          this.basedir = basedir;
88          this.extension = extension;
89          if ( StringUtils.isNotEmpty( extension ) )
90          {
91              // here we now the parserId we can play with this
92              // index.xml -> index.html
93              // index.xml.vm -> index.html
94              // download.apt.vm --> download.html
95              int startIndexOfExtension =
96                  document.toLowerCase( Locale.ENGLISH ).indexOf( "." + extension.toLowerCase( Locale.ENGLISH ) );
97              String fileNameWithoutExt = document.substring( 0, startIndexOfExtension );
98              this.outputName = fileNameWithoutExt + ".html";
99          }
100         else
101         {
102             this.outputName = document.substring( 0, document.indexOf( '.' ) ).replace( '\\', '/' ) + ".html";
103         }
104         this.relativePath = PathTool.getRelativePath( basedir.getPath(), new File( basedir, document ).getPath() );
105 
106         this.inputName = document;
107 
108         this.parserId = parserId;
109 
110         this.attributes = new HashMap<String, String>();
111     }
112 
113     /**
114      * <p>Getter for the field <code>basedir</code>.</p>
115      *
116      * @return a {@link java.io.File} object.
117      */
118     public File getBasedir()
119     {
120         return basedir;
121     }
122 
123     /**
124      * <p>Getter for the field <code>inputName</code>.</p>
125      *
126      * @return a {@link java.lang.String} object.
127      */
128     public String getInputName()
129     {
130         return inputName;
131     }
132 
133     /**
134      * <p>Getter for the field <code>outputName</code>.</p>
135      *
136      * @return a {@link java.lang.String} object.
137      */
138     public String getOutputName()
139     {
140         return outputName;
141     }
142 
143     /**
144      * <p>Getter for the field <code>parserId</code>.</p>
145      *
146      * @return a {@link java.lang.String} object.
147      */
148     public String getParserId()
149     {
150         return parserId;
151     }
152 
153     /**
154      * <p>Getter for the field <code>relativePath</code>.</p>
155      *
156      * @return a {@link java.lang.String} object.
157      */
158     public String getRelativePath()
159     {
160         return relativePath;
161     }
162 
163     /**
164      * <p>setAttribute.</p>
165      *
166      * @param key a {@link java.lang.String} object.
167      * @param value a {@link java.lang.String} object.
168      */
169     public void setAttribute( String key, String value )
170     {
171         attributes.put( key, value );
172     }
173 
174     /**
175      * <p>getAttribute.</p>
176      *
177      * @param key a {@link java.lang.String} object.
178      * @return a {@link java.lang.String} object.
179      */
180     public String getAttribute( String key )
181     {
182         return (String) attributes.get( key );
183     }
184 
185     /**
186      * <p>Getter for the field <code>extension</code>.</p>
187      *
188      * @return a {@link java.lang.String} object.
189      */
190     public String getExtension()
191     {
192         return extension;
193     }
194 }