www.pudn.com > Caliph_v0.9.13+Emirv0.8.5-src.zip > AnnotationFrameProperties.java


/* 
 * This file is part of Caliph & Emir. 
 * 
 * Caliph & Emir is free software; you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 2 of the License, or 
 * (at your option) any later version. 
 * 
 * Caliph & Emir is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 * 
 * You should have received a copy of the GNU General Public License 
 * along with Caliph & Emir; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 * 
 * Copyright statement: 
 * -------------------- 
 * (c) 2002-2004 by Mathias Lux (mathias@juggle.at) 
 * http://www.juggle.at 
 */ 
 
package at.lux.fotoannotation; 
 
/* 
 * Created by Mathias Lux, mathias@juggle.at 
 * User: Mathias Lux, mathias@juggle.at 
 * Date: 05.09.2002 
 * Time: 21:24:10 
 */ 
 
import org.jaxen.JaxenException; 
import org.jaxen.XPath; 
import org.jaxen.jdom.JDOMXPath; 
import org.jdom.Document; 
import org.jdom.Element; 
import org.jdom.JDOMException; 
import org.jdom.input.SAXBuilder; 
import org.jdom.output.XMLOutputter; 
import org.jdom.output.Format; 
 
import javax.swing.*; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.util.Iterator; 
import java.util.List; 
 
/** 
 * Description 
 * @author Mathias Lux, mathias@juggle.at 
 * 
 */ 
 
public class AnnotationFrameProperties { 
    private int frameWidth = 600, frameHeigth = 800, frameLocationX = 0, frameLocationY = 0; 
    private int lrSplit = 220, tbSplit = 550; 
    private int textViewWidth = 640, textViewHeight = 480; 
    private String lastDir = ".", 
 
    externalViewer = null; 
    private JMenuBar menuBar = null; 
    private Document propertiesDocument; 
    private ActionListener listener; 
    private Element propertiesRoot; 
    private File propertyFile = null; 
 
    public AnnotationFrameProperties(File propertyFile, ActionListener listener) { 
        this.listener = listener; 
        SAXBuilder builder = new SAXBuilder(); 
        try { 
            propertiesDocument = builder.build(propertyFile); 
            propertiesRoot = propertiesDocument.getRootElement(); 
            this.propertyFile = propertyFile; 
            initProperties(); 
        } catch (JDOMException e) { 
            e.printStackTrace(); 
        } catch (JaxenException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
 
    private void initProperties() throws JaxenException { 
        long mtime = System.currentTimeMillis(); 
        XPath path; 
        List results; 
 
        path = new JDOMXPath("properties/frame/size/width"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting frameWidth to " + e.getTextTrim()); 
            frameWidth = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("properties/frame/size/height"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting frameHeight to " + e.getTextTrim()); 
            frameHeigth = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("properties/frame/location/x"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting frameLocationX to " + e.getTextTrim()); 
            frameLocationX = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("properties/frame/location/y"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting frameLocationY to " + e.getTextTrim()); 
            frameLocationY = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("properties/files/lastdirectory"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting lastDirectory to " + e.getTextTrim()); 
            lastDir = e.getTextTrim(); 
        } 
 
        path = new JDOMXPath("properties/files/externalviewer"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting externalViewer to " + e.getTextTrim()); 
            externalViewer = e.getTextTrim(); 
            if (externalViewer.length() < 2) 
                externalViewer = null; 
        } 
 
        path = new JDOMXPath("properties/frame/split/lr"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting lrSplit divider location to " + e.getTextTrim()); 
            lrSplit = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("properties/frame/split/tb"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting tbSplit divider location to " + e.getTextTrim()); 
            tbSplit = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("textpreview/size/width"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting textViewWidth divider location to " + e.getTextTrim()); 
            textViewWidth = Integer.parseInt(e.getTextTrim()); 
        } 
 
        path = new JDOMXPath("textpreview/size/height"); 
        results = path.selectNodes(propertiesDocument); 
        if (results.size() > 0) { 
            Element e = (Element) results.get(0); 
            debug("Setting textViewHeight divider location to " + e.getTextTrim()); 
            textViewHeight = Integer.parseInt(e.getTextTrim()); 
        } 
 
        menuBar = readMenuFromDocument(); 
 
        mtime = System.currentTimeMillis() - mtime; 
        debug("Reading config file took " + mtime + " ms"); 
    } 
 
    private JMenuBar readMenuFromDocument() { 
        JMenuBar menuBar = new JMenuBar(); 
        Element xMenu = propertiesRoot.getChild("menu"); 
        List subs = xMenu.getChildren("menu"); 
        for (Iterator i = subs.iterator(); i.hasNext();) { 
            Element e = (Element) i.next(); 
            menuBar.add(createSubMenu(e)); 
        } 
        return menuBar; 
    } 
 
    private JMenu createSubMenu(Element node) { 
        JMenu menu = new JMenu(node.getAttributeValue("name")); 
        List subs = node.getChildren(); 
        for (Iterator i = subs.iterator(); i.hasNext();) { 
            Element e = (Element) i.next(); 
            if (e.getName().equals("separator")) 
                menu.addSeparator(); 
            if (e.getName().equals("menuitem")) { 
                JMenuItem item = new JMenuItem(e.getAttributeValue("name")); 
                item.setActionCommand(e.getAttributeValue("command")); 
                item.addActionListener(listener); 
                if (e.getAttributeValue("key") != null) 
                    item.setAccelerator(KeyStroke.getKeyStroke(e.getAttributeValue("key"))); 
                menu.add(item); 
            } 
            if (e.getName().equals(menu)) 
                menu.add(createSubMenu(e)); 
        } 
        return menu; 
    } 
 
    public void saveConfiguration() { 
        Element size = propertiesRoot.getChild("frame").getChild("size"); 
        size.getChild("width").setText("" + frameWidth); 
        size.getChild("height").setText("" + frameHeigth); 
        Element location = propertiesRoot.getChild("frame").getChild("location"); 
        location.getChild("x").setText(frameLocationX + ""); 
        location.getChild("y").setText(frameLocationY + ""); 
        Element split = propertiesRoot.getChild("frame").getChild("split"); 
        split.getChild("lr").setText(lrSplit + ""); 
        split.getChild("tb").setText(tbSplit + ""); 
        Element tpSize = propertiesRoot.getChild("textpreview").getChild("size"); 
        tpSize.getChild("width").setText(textViewWidth + ""); 
        tpSize.getChild("height").setText(textViewHeight + ""); 
        propertiesRoot.getChild("files").getChild("lastdirectory").setText(lastDir); 
        propertiesRoot.getChild("files").getChild("externalviewer").setText(externalViewer); 
        debug("saving configuration to file " + 
                propertyFile.toString()); 
        XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); 
        try { 
            FileOutputStream fos = new FileOutputStream(propertyFile); 
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); 
            outputter.output(propertiesRoot, osw); 
            osw.close(); 
            fos.close(); 
            // outputter.output(propertiesRoot, System.out); 
            // System.out.println(); 
            debug("finished saving configuration to file " + 
                    propertyFile.toString()); 
        } catch (IOException e) { 
            debug("IOException while saving file " 
                    + propertyFile.toString() + ": " + e.toString()); 
        } //catch (UnsupportedEncodingException e) { 
        //  debug("UnsupportedEncodingException (tried saving UTF-8) while saving file " 
        //          + propertyFile.toString() + ": " + e.toString()); 
    } 
 
    private void debug(String message) { 
        if (AnnotationFrame.DEBUG) System.out.println("[at.lux.fotoannotation.AnnotationFrameProperties] " + message); 
    } 
 
    public int getFrameWidth() { 
        return frameWidth; 
    } 
 
    public int getFrameHeigth() { 
        return frameHeigth; 
    } 
 
    public int getFrameLocationX() { 
        return frameLocationX; 
    } 
 
    public int getFrameLocationY() { 
        return frameLocationY; 
    } 
 
    public JMenuBar getMenuBar() { 
        return menuBar; 
    } 
 
    public void setFrameWidth(int frameWidth) { 
        this.frameWidth = frameWidth; 
    } 
 
    public void setFrameHeigth(int frameHeigth) { 
        this.frameHeigth = frameHeigth; 
    } 
 
    public void setFrameLocationX(int frameLocationX) { 
        this.frameLocationX = frameLocationX; 
    } 
 
    public void setFrameLocationY(int frameLocationY) { 
        this.frameLocationY = frameLocationY; 
    } 
 
    public String getLastDir() { 
        return lastDir; 
    } 
 
    public void setLastDir(String lastDir) { 
        this.lastDir = lastDir; 
    } 
 
    public int getLrSplit() { 
        return lrSplit; 
    } 
 
    public void setLrSplit(int lrSplit) { 
        this.lrSplit = lrSplit; 
    } 
 
    public int getTbSplit() { 
        return tbSplit; 
    } 
 
    public void setTbSplit(int tbSplit) { 
        this.tbSplit = tbSplit; 
    } 
 
    public int getTextViewWidth() { 
        return textViewWidth; 
    } 
 
    public void setTextViewWidth(int textViewWidth) { 
        this.textViewWidth = textViewWidth; 
    } 
 
    public int getTextViewHeight() { 
        return textViewHeight; 
    } 
 
    public void setTextViewHeight(int textViewHeight) { 
        this.textViewHeight = textViewHeight; 
    } 
 
    public String getExternalViewer() { 
        return externalViewer; 
    } 
 
    public void setExternalViewer(String externalViewer) { 
        this.externalViewer = externalViewer; 
    } 
 
}