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 }