1 31 32 package org.opencms.jsp.decorator; 33 34 import org.opencms.file.CmsFile; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.main.CmsException; 38 import org.opencms.xml.content.CmsXmlContent; 39 import org.opencms.xml.content.CmsXmlContentFactory; 40 41 import java.util.ArrayList ; 42 import java.util.List ; 43 import java.util.Locale ; 44 45 57 58 public class CmsDecoratorConfiguration { 59 60 61 private static final String XPATH_DECORATION = "decoration"; 62 63 64 private static final String XPATH_FILENAME = "filename"; 65 66 67 private static final String XPATH_MARKFIRST = "markfirst"; 68 69 70 private static final String XPATH_NAME = "name"; 71 72 73 private static final String XPATH_POSTTEXT = "posttext"; 74 75 76 private static final String XPATH_POSTTEXTFIRST = "posttextfirst"; 77 78 79 private static final String XPATH_PRETEXT = "pretext"; 80 81 82 private static final String XPATH_PRETEXTFIRST = "pretextfirst"; 83 84 85 private static final String XPATH_USELOCALE = "uselocale"; 86 87 88 private CmsObject m_cms; 89 90 91 private String m_configFile; 92 93 94 private Locale m_configurationLocale = new Locale ("en"); 95 96 97 private CmsDecorationBundle m_decorations; 98 99 100 private Locale m_locale; 101 102 103 private List m_usedDecorations; 104 105 111 public CmsDecoratorConfiguration(CmsObject cms) { 112 113 m_decorations = new CmsDecorationBundle(); 114 m_configFile = null; 115 m_cms = cms; 116 m_locale = m_cms.getRequestContext().getLocale(); 117 m_usedDecorations = new ArrayList (); 118 } 119 120 127 public CmsDecoratorConfiguration(CmsObject cms, String configFile) 128 throws CmsException { 129 130 m_decorations = new CmsDecorationBundle(); 131 m_configFile = configFile; 132 m_cms = cms; 133 m_locale = m_cms.getRequestContext().getLocale(); 134 m_usedDecorations = new ArrayList (); 135 init(); 136 } 137 138 146 public CmsDecoratorConfiguration(CmsObject cms, String configFile, Locale locale) 147 throws CmsException { 148 149 m_decorations = new CmsDecorationBundle(locale); 150 m_configFile = configFile; 151 m_cms = cms; 152 m_locale = locale; 153 m_usedDecorations = new ArrayList (); 154 init(); 155 } 156 157 162 public void addDecorations(CmsDecorationDefintion decorationDefinition) throws CmsException { 163 164 m_decorations.putAll(decorationDefinition.createDecorationBundle(m_cms, m_configurationLocale).getAll()); 165 } 166 167 171 public CmsDecorationBundle getDecorations() { 172 173 return m_decorations; 174 } 175 176 181 public boolean hasUsed(String key) { 182 183 return m_usedDecorations.contains(key); 184 } 185 186 190 public void markAsUsed(String key) { 191 192 m_usedDecorations.add(key); 193 } 194 195 198 public void resetMarkedDecorations() { 199 200 m_usedDecorations = new ArrayList (); 201 } 202 203 208 public void setDecorations(CmsDecorationBundle decorations) { 209 210 m_decorations = decorations; 211 } 212 213 216 public String toString() { 217 218 StringBuffer buf = new StringBuffer (); 219 buf.append(this.getClass().getName()); 220 buf.append(" [configFile = '"); 221 buf.append(m_configFile); 222 buf.append("', decorations = '"); 223 buf.append(m_decorations); 224 buf.append("', locale = '"); 225 buf.append(m_locale); 226 buf.append("']"); 227 return buf.toString(); 228 } 229 230 237 private CmsDecorationDefintion getDecorationDefinition(CmsXmlContent configuration, int i) { 238 239 CmsDecorationDefintion decDef = new CmsDecorationDefintion(); 240 String name = configuration.getValue(XPATH_DECORATION + "[" + i + "]/" + XPATH_NAME, m_configurationLocale).getStringValue( 241 m_cms); 242 String markfirst = configuration.getValue( 243 XPATH_DECORATION + "[" + i + "]/" + XPATH_MARKFIRST, 244 m_configurationLocale).getStringValue(m_cms); 245 String pretext = configuration.getValue( 246 XPATH_DECORATION + "[" + i + "]/" + XPATH_PRETEXT, 247 m_configurationLocale).getStringValue(m_cms); 248 String posttext = configuration.getValue( 249 XPATH_DECORATION + "[" + i + "]/" + XPATH_POSTTEXT, 250 m_configurationLocale).getStringValue(m_cms); 251 String pretextfirst = configuration.getValue( 252 XPATH_DECORATION + "[" + i + "]/" + XPATH_PRETEXTFIRST, 253 m_configurationLocale).getStringValue(m_cms); 254 String posttextfirst = configuration.getValue( 255 XPATH_DECORATION + "[" + i + "]/" + XPATH_POSTTEXTFIRST, 256 m_configurationLocale).getStringValue(m_cms); 257 String filenname = configuration.getValue( 258 XPATH_DECORATION + "[" + i + "]/" + XPATH_FILENAME, 259 m_configurationLocale).getStringValue(m_cms); 260 261 decDef.setName(name); 262 decDef.setMarkFirst(markfirst.equals("true")); 263 decDef.setPreText(pretext); 264 decDef.setPostText(posttext); 265 decDef.setPreTextFirst(pretextfirst); 266 decDef.setPostTextFirst(posttextfirst); 267 decDef.setConfigurationFile(filenname); 268 269 return decDef; 270 } 271 272 276 private void init() throws CmsException { 277 278 CmsResource res = m_cms.readResource(m_configFile); 280 CmsFile file = CmsFile.upgrade(res, m_cms); 281 CmsXmlContent configuration = CmsXmlContentFactory.unmarshal(m_cms, file); 282 283 String uselocale = configuration.getValue(XPATH_USELOCALE, m_configurationLocale).getStringValue(m_cms); 286 if (!uselocale.equals("true")) { 287 m_locale = null; 288 } 289 int decorationDefCount = configuration.getIndexCount(XPATH_DECORATION, m_configurationLocale); 291 for (int i = 1; i <= decorationDefCount; i++) { 293 CmsDecorationDefintion decDef = getDecorationDefinition(configuration, i); 294 CmsDecorationBundle decBundle = decDef.createDecorationBundle(m_cms, m_locale); 295 m_decorations.putAll(decBundle.getAll()); 297 } 298 } 299 300 } 301 | Popular Tags |