/* * Moonlight|3D Copyright (C) 2005 The Moonlight|3D team * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Created on Dec 29, 2005 */ package ml.core.preferences; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import ml.core.exceptions.Exception; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class Preferences implements Cloneable { protected ArrayList preferencesGroups; public Preferences() { preferencesGroups=new ArrayList(); } public void addPreferencesGroup(PreferencesGroup preferencesGroup) { preferencesGroups.add(preferencesGroup); } public void setFrom(Preferences preferences) { for(PreferencesGroup group : preferencesGroups) { for(PreferencesGroup otherGroup : preferences.preferencesGroups) { if(group.getName().equals(otherGroup.getName())) { group.setFrom(otherGroup); } } } } public void loadFromFile(String filename) throws SAXException, IOException, ParserConfigurationException { Document preferencesDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(filename).toURI().toString()); Element root = preferencesDoc.getDocumentElement(); NodeList groupList = root.getElementsByTagName("group"); for (int i = 0; i < groupList.getLength(); i++) { Element groupNode = (Element) groupList.item(i); PreferencesGroup group = new PreferencesGroup(); group.setName(groupNode.getAttribute("name")); group.readFromFile(groupNode); preferencesGroups.add(group); } } public void saveToFile(String filename) { try { Document preferencesDoc; preferencesDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // generate save file DOM tree here Element root = preferencesDoc.createElement("preferences"); preferencesDoc.appendChild(root); for(PreferencesGroup group : preferencesGroups) { group.saveToFile(preferencesDoc,root); } Source domSource = new DOMSource(preferencesDoc); Result streamResult = new StreamResult(new File(filename)); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.transform(domSource, streamResult); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } catch (DOMException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public List getGroups() { return preferencesGroups; } public PreferencesGroup getGroupByName(String itemName) { for(PreferencesGroup group : preferencesGroups) { if(group.getName().equals(itemName)) { return group; } } return null; } @Override public Preferences clone() { Preferences preferences=new Preferences(); preferences.preferencesGroups=new ArrayList(); for(PreferencesGroup group : preferencesGroups) { preferences.preferencesGroups.add(group.clone()); } return preferences; } }