com.liferay.portlet.PortletPreferencesSerializer.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portlet.PortletPreferencesSerializer.java

Source

/**
 * Copyright (c) 2000-2005 Liferay, LLC. All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.liferay.portlet;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.portlet.PortletPreferences;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import com.liferay.portal.PortalException;
import com.liferay.portal.SystemException;
import com.liferay.portal.ejb.PortletPreferencesPK;
import com.liferay.util.GetterUtil;
import com.liferay.util.Validator;

/**
 * <a href="PortletPreferencesSerializer.java.html"><b><i>View Source</i></b>
 * </a>
 *
 * @author  Brian Wing Shun Chan
 * @author  Jon Steer
 * @author  Zongliang Li
 * @version $Revision: 1.18 $
 *
 */
public class PortletPreferencesSerializer {

    public static PortletPreferences fromDefaultXML(String xml) throws PortalException, SystemException {

        PortletPreferencesImpl prefs = new PortletPreferencesImpl();

        if (Validator.isNull(xml)) {
            return prefs;
        }

        Map preferences = prefs.getPreferences();

        try {
            Document doc = new SAXReader().read(new StringReader(xml));

            Element root = doc.getRootElement();

            Iterator itr1 = root.elements("preference").iterator();

            while (itr1.hasNext()) {
                Element prefEl = (Element) itr1.next();

                String name = prefEl.elementTextTrim("name");

                List values = new ArrayList();

                Iterator itr2 = prefEl.elements("value").iterator();

                while (itr2.hasNext()) {
                    Element valueEl = (Element) itr2.next();

                    /*if (valueEl.nodeCount() <= 0) {
                       values.add(valueEl.getText());
                    }
                    else {
                       values.add(valueEl.node(0).asXML());
                    }*/

                    values.add(valueEl.getTextTrim());
                }

                boolean readOnly = GetterUtil.get(prefEl.elementText("read-only"), false);

                Preference preference = new Preference(name, (String[]) values.toArray(new String[0]), readOnly);

                preferences.put(name, preference);
            }

            return prefs;
        } catch (DocumentException de) {
            throw new SystemException(de);
        }
    }

    public static PortletPreferencesImpl fromXML(String companyId, PortletPreferencesPK pk, String xml)
            throws PortalException, SystemException {

        try {
            PortletPreferencesImpl prefs = (PortletPreferencesImpl) fromDefaultXML(xml);

            prefs = new PortletPreferencesImpl(companyId, pk, prefs.getPreferences());

            return prefs;
        } catch (PortalException pe) {
            throw pe;
        } catch (SystemException se) {
            throw se;
        }
    }

    public static String toXML(PortletPreferencesImpl prefs) throws SystemException {

        try {
            Map preferences = prefs.getPreferences();

            DocumentFactory docFactory = DocumentFactory.getInstance();

            Element portletPreferences = docFactory.createElement("portlet-preferences");

            Iterator itr = preferences.entrySet().iterator();

            while (itr.hasNext()) {
                Map.Entry entry = (Map.Entry) itr.next();

                Preference preference = (Preference) entry.getValue();

                Element prefEl = docFactory.createElement("preference");

                Element nameEl = docFactory.createElement("name");
                nameEl.addText(preference.getName());

                prefEl.add(nameEl);

                String[] values = preference.getValues();

                for (int i = 0; i < values.length; i++) {
                    Element valueEl = docFactory.createElement("value");
                    valueEl.addText(values[i]);

                    prefEl.add(valueEl);
                }

                if (preference.isReadOnly()) {
                    Element valueEl = docFactory.createElement("read-only");
                    valueEl.addText("true");
                }

                portletPreferences.add(prefEl);
            }

            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            XMLWriter writer = new XMLWriter(baos, OutputFormat.createCompactFormat());

            writer.write(portletPreferences);

            return baos.toString();
        } catch (IOException ioe) {
            throw new SystemException(ioe);
        }
    }

}