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 }