/* * Copyright (c) 2005–2012 Goethe Center for Scientific Computing - Simulation and Modelling (G-CSC Frankfurt) * Copyright (c) 2012-2015 Goethe Center for Scientific Computing - Computational Neuroscience (G-CSC Frankfurt) * * This file is part of NeuGen. * * NeuGen is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. * * see: http://opensource.org/licenses/LGPL-3.0 * file://path/to/NeuGen/LICENSE * * NeuGen 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. * * This version of NeuGen includes copyright notice and attribution requirements. * According to the LGPL this information must be displayed even if you modify * the source code of NeuGen. The copyright statement/attribution may not be removed. * * Attribution Requirements: * * If you create derived work you must do the following regarding copyright * notice and author attribution. * * Add an additional notice, stating that you modified NeuGen. In addition * you must cite the publications listed below. A suitable notice might read * "NeuGen source code modified by YourName 2012". * * Note, that these requirements are in full accordance with the LGPL v3 * (see 7. Additional Terms, b). * * Publications: * * S. Wolf, S. Grein, G. Queisser. NeuGen 2.0 - * Employing NeuGen 2.0 to automatically generate realistic * morphologies of hippocapal neurons and neural networks in 3D. * Neuroinformatics, 2013, 11(2), pp. 137-148, doi: 10.1007/s12021-012-9170-1 * * * J. P. Eberhard, A. Wanner, G. Wittum. NeuGen - * A tool for the generation of realistic morphology * of cortical neurons and neural networks in 3D. * Neurocomputing, 70(1-3), pp. 327-343, doi: 10.1016/j.neucom.2006.01.028 * */ /* * File: NeuGenComments.java * Created on 30.07.2009, 09:52:27 * */ package org.neugen.gui; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.LinkedList; import java.util.Properties; import org.apache.log4j.Logger; import org.neugen.datastructures.xml.XMLNode; import org.neugen.datastructures.xml.XMLObject; /** * @author Sergei Wolf */ public final class NeuGenComments { private static final Logger logger = Logger.getLogger(NeuGenComments.class.getName()); private final XMLObject configRoot; private final File comDir; private final String propName; public NeuGenComments(XMLObject root, File commentDir, String propName) { configRoot = root; this.comDir = commentDir; this.propName = propName; } public static Properties getProjectPropFromXML(String projectDir) { String path = projectDir + System.getProperty("file.separator") + NeuGenConstants.NEUGEN_PROJECT_FILE; Properties properties = new Properties(); File projectFile = new File(path); try { InputStream is = new FileInputStream(projectFile); properties.loadFromXML(is); is.close(); } catch (IOException ex) { logger.error(ex, ex); } return properties; } public static void saveProjectPropToXML(String projectDir, Properties properties) throws FileNotFoundException { String path = projectDir + System.getProperty("file.separator") + NeuGenConstants.NEUGEN_PROJECT_FILE; OutputStream propOut; File file = new File(path); propOut = new FileOutputStream(file); try { properties.storeToXML(propOut, "neugen project properties"); propOut.close(); } catch (IOException ex) { logger.error(ex, ex); } } public static void saveComments(Properties prop, File dir, String propName) { try { String commentFilePath = dir.getPath() + System.getProperty("file.separator") + propName + NeuGenConstants.PROPERTIES_SUFFIX; logger.debug("save comments: " + commentFilePath); File commentFile = new File(commentFilePath); OutputStream propOut = new FileOutputStream(commentFile); prop.store(propOut, "comments for " + propName + "." + NeuGenConstants.PROPERTIES_SUFFIX); propOut.close(); } catch (IOException ex) { logger.error(ex, ex); } } public static Properties completeComments(XMLObject root, Properties properties) { // compare data of .neu with data of .properties Properties newProp = new Properties(); LinkedList<XMLObject> queue = new LinkedList<XMLObject>(); queue.addFirst(root); logger.info("complete property for comments: " + root.getKey()); while (queue.size() != 0) { //System.out.println("laufe den Baum ab"); XMLNode current = (XMLNode) queue.getLast(); queue.removeLast(); XMLObject currentObj = XMLObject.convert(current); String currentPropKey = currentObj.getPathForProperties(); if (!properties.containsKey(currentPropKey)) { //logger.info("currentPropKey not found: " + currentPropKey); //properties.setProperty(currentPropKey, "no comment exists for: " + currentObj.getKey()); newProp.setProperty(currentPropKey, ""); } else { newProp.setProperty(currentPropKey, properties.getProperty(currentPropKey)); } if (currentObj != null) { for (int i = 0; i < currentObj.getChildrenCount(); i++) { XMLNode currentChild = currentObj.getChild(i); XMLObject currentChildObj = XMLObject.convert(currentChild); if (currentChildObj != null) { queue.addFirst(currentChildObj); } else { currentPropKey = currentChild.getPathForProperties(); if (!properties.containsKey(currentPropKey)) { // logger.info("currentPropKey not found unten: " + currentChild.getPathForProperties()); // logger.info("key not in properties: " + currentChild.getPathForProperties()); newProp.setProperty(currentChild.getPathForProperties(), ""); } else { newProp.setProperty(currentChild.getPathForProperties(), properties.getProperty(currentPropKey)); } } } } } properties.clear(); return newProp; } public Properties getComments() { String commentFilePath = comDir.getPath() + System.getProperty("file.separator") + propName + NeuGenConstants.PROPERTIES_SUFFIX; logger.info("load comments: " + commentFilePath); File commentFile = new File(commentFilePath); Properties properties = new Properties(); if (!commentFile.exists()) { try { XMLObject dummyProjectRoot = new XMLObject("dummy", null, null); configRoot.setParent(dummyProjectRoot); dummyProjectRoot.addChild(configRoot); properties = completeComments(configRoot, properties); configRoot.setParent(null); OutputStream propOut = new FileOutputStream(commentFile); properties.store(propOut, "comments for " + propName + "." + NeuGenConstants.PROPERTIES_SUFFIX); propOut.close(); } catch (IOException ex) { logger.error(ex, ex); } } else { try { //System.out.print("lese comment file"); FileInputStream stream = new FileInputStream(commentFile); properties.load(stream); stream.close(); XMLObject dummyProjectRoot = new XMLObject("dummy", null, null); configRoot.setParent(dummyProjectRoot); dummyProjectRoot.addChild(configRoot); properties = completeComments(configRoot, properties); configRoot.setParent(null); //properties = completeComments(configRoot, properties); } catch (IOException e) { logger.error(e, e); } } return properties; } }