com.sun.portal.portletcontainer.admin.PortletRegistryHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.sun.portal.portletcontainer.admin.PortletRegistryHelper.java

Source

/*
 * CDDL HEADER START
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License). You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the License at
 * http://www.sun.com/cddl/cddl.html and legal/CDDLv1.0.txt
 * See the License for the specific language governing
 * permission and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at legal/CDDLv1.0.txt.
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Copyright 2006 Sun Microsystems Inc. All Rights Reserved
 * CDDL HEADER END
 */
package com.sun.portal.portletcontainer.admin;

import org.silverpeas.core.silvertrace.SilverTrace;
import com.sun.portal.portletcontainer.admin.registry.PortletRegistryTags;
import com.sun.portal.portletcontainer.context.registry.PortletRegistryException;
import com.sun.portal.portletcontainer.warupdater.PortletWarUpdaterUtil;
import org.apache.commons.lang3.CharEncoding;
import org.silverpeas.core.util.ResourceLocator;
import org.silverpeas.core.util.SettingBundle;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * PortletRegistryHelper is a Helper class to write to and read from the portlet registry xml files.
 */
public class PortletRegistryHelper implements PortletRegistryTags {

    // private static final String PORTLET_CONTAINER_DIR_PROPERTY =
    // "com.sun.portal.portletcontainer.dir";
    private static final String PORTLET_CONTAINER_DIR_PROPERTY = "portlets.configDir";
    private static final String PORTLET_CONTAINER_DEFAULT_DIR_NAME = ".portlet-container";
    private static final String PORTLET_CONTAINER_DEFAULT_DATA_DIR_NAME = "data";
    private static final String PORTLET_CONTAINER_DEFAULT_LOG_DIR_NAME = "logs";
    private static final String PORTLET_CONTAINER_DEFAULT_WAR_DIR_NAME = "war";
    private static final String PORTLET_CONTAINER_DEFAULT_AUTODEPLOY_DIR_NAME = "autodeploy";
    private static final String PORTLET_CONTAINER_DEFAULT_CONFIG_DIR_NAME = "config";
    private static final String PORTLET_CONTAINER_HOME_TOKEN = "@portlet-container-home@";
    private static Logger logger = Logger.getLogger("com.sun.portal.portletcontainer.admin",
            "org.silverpeas.portlets.PALogMessages");
    private static String CONFIG_FILE = "ContainerConfig.properties";
    private static SettingBundle configProperties = null;

    private PortletRegistryHelper() {
    }

    public static DocumentBuilder getDocumentBuilder() throws PortletRegistryException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = null;
        try {
            docBuilder = dbf.newDocumentBuilder();
            docBuilder.setEntityResolver(new NoOpEntityResolver());
        } catch (ParserConfigurationException pce) {
            throw new PortletRegistryException(pce);
        }
        return docBuilder;
    }

    public static Document readFile(File file) throws PortletRegistryException {
        try {
            return getDocumentBuilder().parse(file);
        } catch (SAXException saxe) {
            throw new PortletRegistryException(saxe);
        } catch (IOException ioe) {
            throw new PortletRegistryException(ioe);
        }
    }

    public static Element getRootElement(Document document) {
        if (document != null) {
            return document.getDocumentElement();
        }
        return null;
    }

    public static synchronized void writeFile(Document document, File file) throws PortletRegistryException {
        FileOutputStream output = null;
        try {
            // Use a Transformer for output
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
            transformer.setOutputProperty(OutputKeys.ENCODING, CharEncoding.UTF_8);
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "5");

            DOMSource source = new DOMSource(document);
            // StreamResult result = new StreamResult(System.out);
            output = new FileOutputStream(file);
            StreamResult result = new StreamResult(output);
            transformer.transform(source, result);
        } catch (TransformerConfigurationException tce) {
            throw new PortletRegistryException(tce);
        } catch (TransformerException te) {
            throw new PortletRegistryException(te);
        } catch (Exception e) {
            throw new PortletRegistryException(e);
        } finally {
            if (output != null) {
                try {
                    output.close();
                } catch (IOException ex) {
                    SilverTrace.warn("portlet", PortletRegistryHelper.class.getSimpleName() + ".writeFile()",
                            "root.EX_NO_MESSAGE", ex);
                }
            }
        }
    }

    private static void loadConfigFile() {
        // If the config file is already loaded don't load it again
        InputStream is = null;
        if (configProperties == null) {
            try {
                SettingBundle rl = ResourceLocator.getSettingBundle("org.silverpeas.portlets.portletsSettings");
                if (!rl.exists()) {
                    logger.log(Level.SEVERE, "PSPL_CSPPAM0016");
                } else {
                    configProperties = rl;
                }
            } finally {
                try {
                    if (is != null) {
                        is.close();
                    }
                } catch (Exception ignored) {
                }
            }
        }
    }

    private static String getPortletContainerDir() {
        String registryLocation = null;
        loadConfigFile();
        // In case loadConfigFile throws an exception configProperties will be null
        if (configProperties != null) {
            registryLocation = configProperties.getString(PORTLET_CONTAINER_DIR_PROPERTY);
        }
        if (registryLocation == null || PORTLET_CONTAINER_HOME_TOKEN.equals(registryLocation)) {
            registryLocation = System.getProperty("user.home") + File.separator
                    + PORTLET_CONTAINER_DEFAULT_DIR_NAME;
            if (logger.isLoggable(Level.WARNING)) {
                logger.log(Level.WARNING, "PSPL_CSPPAM0003",
                        new String[] { PORTLET_CONTAINER_DIR_PROPERTY, registryLocation });
            }
        }
        return registryLocation;
    }

    public static String getAutoDeployLocation() {
        String autoDeployLocation = getPortletContainerDir() + File.separator
                + PORTLET_CONTAINER_DEFAULT_AUTODEPLOY_DIR_NAME;
        if (!makeDir(autoDeployLocation)) {
            throw new RuntimeException("cannotCreateDirectory");
        }
        return autoDeployLocation;
    }

    public static String getRegistryLocation() throws PortletRegistryException {
        String registryLocation = getPortletContainerDir() + File.separator
                + PORTLET_CONTAINER_DEFAULT_DATA_DIR_NAME;
        if (!makeDir(registryLocation)) {
            throw new PortletRegistryException("cannotCreateDirectory");
        }
        return registryLocation;
    }

    public static String getLogLocation() throws PortletRegistryException {
        String logDirLocation = getPortletContainerDir() + File.separator + PORTLET_CONTAINER_DEFAULT_LOG_DIR_NAME;
        if (!makeDir(logDirLocation)) {
            throw new PortletRegistryException("cannotCreateDirectory");
        }
        return logDirLocation;
    }

    public static String getWarFileLocation() throws PortletRegistryException {
        String warFileLocation = getPortletContainerDir() + File.separator + PORTLET_CONTAINER_DEFAULT_WAR_DIR_NAME;
        if (!makeDir(warFileLocation)) {
            throw new PortletRegistryException("cannotCreateDirectory");
        }
        return warFileLocation;
    }

    public static String getUpdatedAbsoluteWarFileName(String warFileName) {
        StringBuilder warFileLocation = new StringBuilder();
        try {
            warFileLocation.append(PortletRegistryHelper.getWarFileLocation());
        } catch (PortletRegistryException pre) {
            warFileLocation.append("");
        }

        String warName = PortletWarUpdaterUtil.getWarName(warFileName);
        warFileLocation.append(File.separator);
        warFileLocation.append(warName);
        return warFileLocation.toString();
    }

    public static String getConfigFileLocation() {
        String configFileLocation = getPortletContainerDir() + File.separator
                + PORTLET_CONTAINER_DEFAULT_CONFIG_DIR_NAME;
        return configFileLocation;
    }

    private static boolean makeDir(String dirName) {
        File dir = new File(dirName);
        if (dir.exists()) {
            return true;
        } else {
            return dir.mkdirs();
        }
    }
}