com.enonic.cms.core.structure.SiteData.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.structure.SiteData.java

Source

/*
 * 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);
        }
    }
}