001 /****************************************************************************** 002 * Copyright (C) MActor Developers. All rights reserved. * 003 * ---------------------------------------------------------------------------* 004 * This file is part of MActor. * 005 * * 006 * MActor is free software; you can redistribute it and/or modify * 007 * it under the terms of the GNU General Public License as published by * 008 * the Free Software Foundation; either version 2 of the License, or * 009 * (at your option) any later version. * 010 * * 011 * MActor is distributed in the hope that it will be useful, * 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 014 * GNU General Public License for more details. * 015 * * 016 * You should have received a copy of the GNU General Public License * 017 * along with MActor; if not, write to the Free Software * 018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * 019 ******************************************************************************/ 020 package org.mactor.ui.gui.project.editors; 021 022 import java.net.URL; 023 import java.util.HashMap; 024 import java.util.Iterator; 025 import java.util.Map; 026 027 import org.dom4j.Document; 028 import org.dom4j.Element; 029 import org.dom4j.io.SAXReader; 030 import org.mactor.ui.gui.project.ProjectNodeType; 031 032 public class NodeEditorConfigManager { 033 private static NodeEditorConfigManager instance; 034 private static Object lock = new Object(); 035 private Map<String, NodeEditorConfig> nodeEditorConfigMap = new HashMap<String, NodeEditorConfig>(); 036 public static NodeEditorConfigManager getInstance() { 037 if (instance == null) { 038 synchronized (lock) { 039 if (instance == null) { 040 instance = new NodeEditorConfigManager(); 041 } 042 } 043 } 044 return instance; 045 } 046 public NodeEditorConfig getNodeEditorConfig(ProjectNodeType nodeType) { 047 if(nodeType==null) 048 return null; 049 return nodeEditorConfigMap.get(nodeType.name()); 050 } 051 private NodeEditorConfigManager() { 052 try { 053 loadConfig("node_editors.xml"); 054 } catch (Exception e) { 055 e.printStackTrace(); 056 } 057 try { 058 loadConfig("node_editors_ex.xml"); 059 System.out.print("node_editors_ex.xml was loaded"); 060 } catch (Exception e) { 061 System.out.print("node_editors_ex.xml was not loaded. Reason:" + e.getMessage()); 062 } 063 } 064 private void loadConfig(String fn) throws Exception { 065 URL u = Thread.currentThread().getContextClassLoader().getResource(fn); 066 if (u == null) 067 throw new RuntimeException("Resource '" + fn + "' was not found"); 068 Document doc = new SAXReader().read(u); 069 Iterator typeIt = doc.getRootElement().elementIterator("node_type"); 070 while (typeIt.hasNext()) { 071 Element e = (Element) typeIt.next(); 072 String name = e.attributeValue("name"); 073 ProjectNodeType nodeType = ProjectNodeType.valueOf(name); 074 if (nodeType == null) { 075 System.out.println("Unsupported node type '" + name + "' ignoring..."); 076 continue; 077 } 078 NodeEditorConfig config = nodeEditorConfigMap.get(name); 079 if (config == null) { 080 config = new NodeEditorConfig(nodeType); 081 nodeEditorConfigMap.put(name, config); 082 } 083 config.load(e); 084 } 085 } 086 }