Java tutorial
/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.structure; import java.io.UnsupportedEncodingException; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.jdom.Document; import org.jdom.Element; import com.enonic.cms.framework.xml.XMLDocument; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.core.resource.ResourceKey; /** * May 29, 2009 */ public class SiteData { public static final String LOCALE_RESOLVER_ELEMENT_NAME = "locale-resolver"; public static final String DEVICE_CLASS_RESOLVER_ELEMENT_NAME = "device-class-resolver"; public static final String PATH_TO_PUBLIC_HOME_RESOURCES_ELEMENT_NAME = "path-to-public-home"; public static final String PATH_TO_HOME_RESOURCES_ELEMENT_NAME = "path-to-home"; public static final String DEFAULT_LOCALIZATION_RESOURCE_ELMENT_NAME = "default-localization-resource"; public static final String DEFAULT_CSS_ELEMENT_NAME = "defaultcss"; private Document xmlDoc; public SiteData(Document xmlDoc) { this.xmlDoc = xmlDoc; } public SiteData() { xmlDoc = new Document(); xmlDoc.addContent(new Element("menudata")); } public ResourceKey getPathToPublicResources() { Element element = getAndEnsureElement(getAndEnsureRootElement(), PATH_TO_PUBLIC_HOME_RESOURCES_ELEMENT_NAME); if (element.getText() == null || element.getText().length() == 0) { return null; } return ResourceKey.from(element.getText()); } public ResourceKey getPathToResources() { Element element = getAndEnsureElement(getAndEnsureRootElement(), PATH_TO_HOME_RESOURCES_ELEMENT_NAME); if (element.getText() == null || element.getText().length() == 0) { return null; } return ResourceKey.from(element.getText()); } public ResourceKey getDeviceClassResolver() { Element element = getAndEnsureElement(getAndEnsureRootElement(), DEVICE_CLASS_RESOLVER_ELEMENT_NAME); if (element.getText() == null || element.getText().length() == 0) { return null; } return ResourceKey.from(element.getText()); } public ResourceKey getLocaleResolver() { Element element = getAndEnsureElement(getAndEnsureRootElement(), LOCALE_RESOLVER_ELEMENT_NAME); if (element.getText() == null || element.getText().length() == 0) { return null; } return ResourceKey.from(element.getText()); } public ResourceKey getDefaultLocalizationResource() { Element element = getAndEnsureElement(getAndEnsureRootElement(), DEFAULT_LOCALIZATION_RESOURCE_ELMENT_NAME); if (element.getText() == null || element.getText().length() == 0) { return null; } return ResourceKey.from(element.getText()); } public void addPageType(String value) { Element rootEl = getAndEnsureRootElement(); Element pageTypesEl = getAndEnsureElement(rootEl, "pagetypes"); Element allowEl = new Element("allow"); pageTypesEl.addContent(allowEl); allowEl.setAttribute("type", value); } public Set<String> getAllowedPageTypes() { Element rootEl = getAndEnsureRootElement(); Element pageTypesEl = getAndEnsureElement(rootEl, "pagetypes"); Set<String> pageTypes = new HashSet<String>(); @SuppressWarnings({ "unchecked" }) List<Element> childrenEl = pageTypesEl.getChildren("allow"); for (Element allowEl : childrenEl) { pageTypes.add(allowEl.getAttributeValue("type")); } return Collections.unmodifiableSet(pageTypes); } public ResourceKey getDefaultCssKey() { if (xmlDoc != null) { Element elem = xmlDoc.getRootElement().getChild(DEFAULT_CSS_ELEMENT_NAME); if (elem != null && StringUtils.isNotEmpty(elem.getAttributeValue("key"))) { return ResourceKey.from(elem.getAttributeValue("key")); } } return null; } public void setDefaultCssKey(ResourceKey resourceKey) { Element element = getAndEnsureElement(getAndEnsureRootElement(), DEFAULT_CSS_ELEMENT_NAME); element.setAttribute("key", resourceKey.toString()); } public void setPathToPublicResources(ResourceKey value) { Element element = getAndEnsureElement(getAndEnsureRootElement(), PATH_TO_PUBLIC_HOME_RESOURCES_ELEMENT_NAME); element.setText(value.toString()); } public void setPathToResources(ResourceKey value) { Element element = getAndEnsureElement(getAndEnsureRootElement(), PATH_TO_HOME_RESOURCES_ELEMENT_NAME); element.setText(value.toString()); } public void setDeviceClassResolver(ResourceKey value) { Element element = getAndEnsureElement(getAndEnsureRootElement(), DEVICE_CLASS_RESOLVER_ELEMENT_NAME); element.setText(value.toString()); } public void setLocaleResolver(ResourceKey value) { Element element = getAndEnsureElement(getAndEnsureRootElement(), LOCALE_RESOLVER_ELEMENT_NAME); element.setText(value.toString()); } public void setDefaultLocalizationResource(ResourceKey value) { Element element = getAndEnsureElement(getAndEnsureRootElement(), DEFAULT_LOCALIZATION_RESOURCE_ELMENT_NAME); element.setText(value.toString()); } private Element getAndEnsureElement(Element parentEl, String childName) { Element child = parentEl.getChild(childName); if (child == null) { child = new Element(childName); parentEl.addContent(child); } return child; } private Element getAndEnsureRootElement() { Element rootEl; if (xmlDoc == null) { xmlDoc = new Document(); rootEl = new Element("sitedata"); xmlDoc.setRootElement(rootEl); } rootEl = xmlDoc.getRootElement(); return rootEl; } public byte[] getAsBytes() { XMLDocument xmlDocument = XMLDocumentFactory.create(xmlDoc); try { return xmlDocument.getAsString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Failed to get as bytes: ", e); } } }