JavaBuilderPersister.java :  » Installer » VAInstall » com » memoire » vainstall » builder » util » Java Open Source

Java Open Source » Installer » VAInstall 
VAInstall » com » memoire » vainstall » builder » util » JavaBuilderPersister.java
/*
 * $RCSfile: JavaBuilderPersister.java,v $
 * @modification $Date: 2001/09/28 19:41:42 $
 * @version      $Id: JavaBuilderPersister.java,v 1.1 2001/09/28 19:41:42 hfalk Exp $
 *
 */

package com.memoire.vainstall.builder.util;

import com.memoire.vainstall.builder.*;

import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import java.util.*;

import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.w3c.dom.*;

import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

/**
 * This class performs the persistance of the VAInstall Builder
 *
 * @see com.memoire.vainstall.VAIBuilderModel
 * @see com.memoire.vainstall.util.BuilderPersisterInterface
 *
 * @author Henrik Falk
 * @version $Id: JavaBuilderPersister.java,v 1.1 2001/09/28 19:41:42 hfalk Exp $
 */
public class JavaBuilderPersister implements BuilderPersisterInterface {

    /**
     * The Builder data model
     */
    VAIBuilderModel model = null;

    /**
     * A not so elegant way to find out where the VAInstall shared
     * directory is located.
     * Used for saving the vaibuilder.xml file which contains data
     * from the builder data model.
     */
    String vai_home = XmlUtil.findVAISharedDir().getAbsolutePath();

    /**
     * Default constructor
     */
    public JavaBuilderPersister() {
        super();
    }

    /**
     * Initializes this class in order to know which datamodel to save
     * and load.
     * @param model The builder model
     */
    public void initialize(VAIBuilderModel model) {
        this.model = model;
    }

    /**
     * Loads the data from datastore
     */
    public void load() {

        // check if we are initialized
        if (model == null) {
            return;
        }

        // Check if vaibuilder.xml exists
        String vaibuilder = vai_home + java.io.File.separator + "vaibuilder.xml";
        if (new File(vaibuilder).exists() == false) {
            // this is the first time we run the builder
            return;
        }

        // Parse the XML file at the moment non-validating
        Document doc = null;
        try {
            doc = XmlUtil.parse(vaibuilder,null);
        } catch (XmlParseException exc) {
//            System.out.println("Could not load preferences.");
            return;
        }

        // extract data from the Document to the data model
        importData(doc);
    }

    /**
     * Saves the data in datastore
     */
    public void save() {

        // check if we are initialized
        if (model == null) {
            return;
        }

        // create a new Document
        Document doc = null;
        try {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            doc = builder.newDocument();

        } catch(ParserConfigurationException exc) {
            return;
        }

        // Extract data from the model to the Document
        exportData(doc);

        // Create a Transformer which enables us to export the Document
        Transformer transformer = null;
        try {
            transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty("indent","yes");
        } catch(TransformerConfigurationException exc) {
            exc.printStackTrace();
            return;
        }

        // Export the Document
        String vaibuilder = vai_home + java.io.File.separator + "vaibuilder.xml";
        try {
            transformer.transform(new DOMSource(doc),new StreamResult(new File(vaibuilder)));
        } catch (TransformerException exc) {
            exc.printStackTrace();
        }

    }

    /**
     * Extract data from a Document and updates the data model
     * @param doc a Document
     */
    private void importData(Document doc) {

        NodeList nodelist;

        Element rootElement = doc.getDocumentElement();

        // get saved window positions
        nodelist = rootElement.getElementsByTagName("window");
        for(int i = 0 ; i < nodelist.getLength() ; i++) {
            Node window = (Node)nodelist.item(i);

            NamedNodeMap map = window.getAttributes();

            Rectangle rect = new Rectangle(XmlUtil.getAttributeAsInt(map,"x"),
                                           XmlUtil.getAttributeAsInt(map,"y"),
                                           XmlUtil.getAttributeAsInt(map,"width"),
                                           XmlUtil.getAttributeAsInt(map,"height"));
            model.getWindowList().put(XmlUtil.getAttribute(map,"name"),rect);
        }

        // get saved last opened projects
        nodelist = rootElement.getElementsByTagName("lastfile");

        LinkedList tmpList = new LinkedList();
        for(int i = 0 ; i < nodelist.getLength() ; i++) {
            tmpList.add(""); 
        }
        for(int i = 0 ; i < nodelist.getLength() ; i++) {
            int number = new Integer(XmlUtil.getAttribute(nodelist.item(i),"number")).intValue();
            String lastproject = XmlUtil.getAttribute(nodelist.item(i),"file");
            tmpList.set(number,lastproject);
        } 

        for(int i = tmpList.size()-1 ; i >= 0  ; i--) {
            model.addLastOpenedProject((String)tmpList.get(i));
        }

        // get builder properties
        nodelist = rootElement.getElementsByTagName("property");

        for(int i = 0 ; i < nodelist.getLength() ; i++) {
            String name = XmlUtil.getAttribute(nodelist.item(i),"name");
            String value = XmlUtil.getAttribute(nodelist.item(i),"value");
            model.getPropertyList().put(name,value);
        }
    }

    /**
     * Extract data from the data model and updates a Document
     * @param doc a Document
     */
    private void exportData(Document doc) {

        // create root element
        Element root = doc.createElement("vaibuilder");
        doc.appendChild(root);

        // create <window> elements
        Hashtable windowList = model.getWindowList();

        Enumeration keys = windowList.keys();
        while (keys.hasMoreElements() == true) {
            String key = (String)keys.nextElement();
            Rectangle rect = (Rectangle)windowList.get(key);

            Element element = doc.createElement("window");
            element.setAttribute("name",key);
            element.setAttribute("x",String.valueOf(rect.x));
            element.setAttribute("y",String.valueOf(rect.y));
            element.setAttribute("width",String.valueOf(rect.width));
            element.setAttribute("height",String.valueOf(rect.height));

            root.appendChild(element);
        }

        // create <lastproject> elements
        LinkedList lastproject = model.getLastOpenedProjectList();

        for (int i = 0; i < lastproject.size() ; i++) {

            Element element = doc.createElement("lastfile");
            element.setAttribute("number",String.valueOf(i));
            element.setAttribute("file",String.valueOf(lastproject.get(i)));

            root.appendChild(element);
        }

        // create <property> elements
        Hashtable propertyList = model.getPropertyList();

        Enumeration propertyKeys = propertyList.keys();
        while (propertyKeys.hasMoreElements() == true) {
            String name = (String)propertyKeys.nextElement();
            String value = (String)propertyList.get(name);

            Element element = doc.createElement("property");
            element.setAttribute("name",name);
            element.setAttribute("value",value);

            root.appendChild(element);
        }

    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.