1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.devacfr.maven.skins.reflow; 20 21 import javax.annotation.Nonnull; 22 import javax.annotation.Nullable; 23 24 import org.apache.maven.doxia.site.SiteModel; 25 import org.apache.maven.project.MavenProject; 26 import org.codehaus.plexus.util.xml.Xpp3Dom; 27 import org.devacfr.maven.skins.reflow.context.Context; 28 29 /** 30 * Interface of skin config. 31 * 32 * @author devacfr 33 * @since 2.1 34 */ 35 public interface ISkinConfig { 36 37 /** 38 * A convenience method to check if the value of the {@code property} is {@code "false"}. Useful for properties that 39 * are enabled by default - checks if the property is set to {@code "false"} explicitly. 40 * 41 * @param property 42 * the property of interest 43 * @return {@code true} if the configuration value is set either in page or globally, and is equal to 44 * {@code "false"}. Note that this will return {@code false} if property is not set at all. 45 * @see #get(String) 46 * @since 1.0 47 */ 48 boolean not(String property); 49 50 /** 51 * Gets the associated value to {@code key} stored in Velocity context. 52 * 53 * @param key 54 * the key name of associated value in Velocity context. 55 * @param type 56 * the the type of expected value. 57 * @return Returns the associated value to {@code key} stored in Velocity context. 58 * @param <T> 59 * the type of expected value. 60 * @since 2.1 61 */ 62 <T> T getContextValue(@Nonnull String key, @Nonnull Class<T> type); 63 64 /** 65 * Sets the value in Velocity context associated to {@code key}. 66 * 67 * @param key 68 * the key name of associated value in Velocity context. 69 * @param value 70 * the new value 71 * @since 2.1 72 */ 73 void setContextValue(@Nonnull String key, Object value); 74 75 /** 76 * Gets the associated tool to {@code name} stored in toolbox of Velocity context. 77 * 78 * @param toolName 79 * the name of tool associated in Velocity context. 80 * @param toolType 81 * the expected class of tool. 82 * @return Returns the associated tool to {@code name} stored in toolbox of Velocity context. 83 * @param <T> 84 * the type of expected tool. 85 * @since 2.1 86 */ 87 @Nullable <T> T getToolbox(@Nonnull String toolName, @Nonnull Class<T> toolType); 88 89 /** 90 * @return Returns the root level {@link Xpp3Dom}. 91 */ 92 @Nonnull 93 Xpp3Dom getGlobalProperties(); 94 95 /** 96 * @return Returns the page level {@link Xpp3Dom}. 97 */ 98 @Nonnull 99 Xpp3Dom getPageProperties(); 100 101 /** 102 * @return Returns a {@link String} representing the namespace. 103 */ 104 @Nonnull 105 String getNamespace(); 106 107 /** 108 * @return Returns the {@link String} representing the fileId. 109 */ 110 @Nullable String getFileId(); 111 112 /** 113 * @return the context 114 */ 115 @Nonnull 116 Context<?> getContext(); 117 118 /** 119 * @return Returns the {@link String} representing the projectId. 120 */ 121 @Nullable Object getProjectId(); 122 123 /** 124 * @return the project 125 */ 126 @Nonnull 127 MavenProject getProject(); 128 129 /** 130 * @return the SiteModel 131 */ 132 @Nonnull 133 SiteModel getSiteModel(); 134 135 /** 136 * Default accessor for config properties. Instead of using {@code $config.get("myproperty")}, one can utilise 137 * Velocity fallback onto the default getter and use {@code $config.myproperty}. 138 * 139 * @param property 140 * the property of interest 141 * @return configuration node if found in the following sequence: 142 * <ol> 143 * <li>In page configuration</li> 144 * <li>In global configuration</li> 145 * <li>{@code null} otherwise</li> 146 * </ol> 147 * @since 1.0 148 */ 149 @Nullable Xpp3Dom get(@Nonnull String property); 150 151 /** 152 * Gets the text value of the given {@code property}. 153 * 154 * @param property 155 * the property to use 156 * @param targetType 157 * the returned target type use to convert value. 158 * @param defaultValue 159 * the default value used if property doesn't exist. 160 * @return Returns a converted value of the given {@code property}. 161 * @since 2.0 162 * @param <T> 163 * the type of returned object. 164 */ 165 @Nullable <T> T getPropertyValue(@Nonnull String property, @Nonnull Class<T> targetType, @Nullable T defaultValue); 166 167 /** 168 * Gets the attribute value of the given {@code attribute} of {@code property}. 169 * 170 * @param property 171 * the property to use 172 * @param attribute 173 * the attribute to use. 174 * @param targetType 175 * the returned target type use to convert value. 176 * @param defaultValue 177 * the default value used if property doesn't exist. 178 * @return Returns a converted value of the given {@code property}. 179 * @since 2.0 180 * @param <T> 181 * the type of returned object. 182 */ 183 @Nullable <T> T getAttributeValue(@Nonnull String property, 184 @Nonnull String attribute, 185 @Nonnull Class<T> targetType, 186 @Nullable T defaultValue); 187 188 /** 189 * Get the value contained in specific attribute of {@code element} parameter. 190 * 191 * @param element 192 * the xml element. 193 * @param attribute 194 * the attribute name. 195 * @param targetType 196 * the class of converted returned value. 197 * @param defaultValue 198 * the value to return if attribute is empty or {@code null}. 199 * @return Returns the converted value of specific attribute of {@code element} parameter if exists, otherwise 200 * returns the default value. 201 * @param <T> 202 * the type of returned value. 203 */ 204 @Nullable <T> T getAttributeValue(@Nonnull Xpp3Dom element, 205 @Nonnull String attribute, 206 @Nonnull Class<T> targetType, 207 T defaultValue); 208 209 /** 210 * @param href 211 * link to relative. 212 * @return Returns Relativizes the link. 213 */ 214 @Nullable String relativeLink(String href); 215 216 /** 217 * Gets the indicating if the link is active. 218 * 219 * @param href 220 * the link to check. 221 * @return Returns {@code true} the link is active, otherwise {@code false}. 222 */ 223 boolean isActiveLink(@Nullable String href); 224 225 /** 226 * Evaluate a velocity expression in the current context. 227 * 228 * @param vtl 229 * The velocity expression to evaluate 230 * @param requiredClass 231 * the class of returned value. 232 * @return Returns the value returned by the evaluated velocity expression. 233 * @param <T> 234 * Tthe type of expected returned value. 235 */ 236 @Nullable <T> T eval(@Nullable String vtl, @Nonnull Class<T> requiredClass); 237 238 /** 239 * @return Returns a {@link String} representing the relative path to root site. 240 */ 241 @Nonnull 242 public String getResourcePath(); 243 }