Java tutorial
/* * Copyright (C) 2010, 2011, 2012 by Arne Kesting, Martin Treiber, Ralph Germ, Martin Budden * <movsim.org@gmail.com> * ----------------------------------------------------------------------------------------- * * This file is part of * * MovSim - the multi-model open-source vehicular-traffic simulator. * * MovSim 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 3 of the License, or * (at your option) any later version. * * MovSim 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 MovSim. If not, see <http://www.gnu.org/licenses/> * or <http://www.movsim.org>. * * ----------------------------------------------------------------------------------------- */ package org.movsim.input; import java.io.File; import java.io.InputStream; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.ISODateTimeFormat; /** * Container for some shared information. Singleton pattern. * * <br> * created: Mar 9, 2013<br> * */ // TODO this class deperately needs a throughout refactoring !!! public final class ProjectMetaData { private static final String MOVSIM_COMMON_LOG_PATH = "config"; private static final String LOG4J_FILENAME = "log4j.properties"; private static final String MOVSIM_CONFIG_FILE_ENDING = ".xprj"; private static ProjectMetaData singleton = new ProjectMetaData(); private String projectName; private String pathToProjectXmlFile; private String outputPath; private String xodrNetworkFilename; private String xodrPath; private String consumptionFilename; private String consumptionPath; private boolean instantaneousFileOutput = true; // private boolean onlyValidation = false; private long timeOffsetMillis = 0; /** * Needed for Applet. Change to true, if you cannot access the file system. * Allows to read the config files from resources instead. */ private boolean xmlFromResources = false; /** * For Android client: xmlFromResources does work, but using the file system is more convenient. */ private boolean parseFromInputstream = false; private InputStream movsimXml; private InputStream networkXml; private InputStream projectProperties; /** * private constructor: singleton pattern. */ private ProjectMetaData() { } /** * Gets the single instance of ProjectMetaData. * * @return single instance of ProjectMetaData */ public static ProjectMetaData getInstance() { return singleton; } public boolean hasProjectName() { return projectName != null && !projectName.isEmpty(); } public String getProjectName() { if (!hasProjectName()) { throw new IllegalStateException("project name not set. Check in advance using \"hasProjectName()\""); } return projectName; } /** * Sets the project name. * * @param projectName * the new project name */ public void setProjectName(String projectName) { System.out.println("projectname = " + projectName); this.projectName = projectName; } public boolean hasPathToProjectFile() { return pathToProjectXmlFile != null && !pathToProjectXmlFile.isEmpty(); } public String getPathToProjectFile() { if (!hasPathToProjectFile()) { throw new IllegalStateException( "path to project file not set. Check in advance using \"hasPathToProjectXmlFile()\""); } return pathToProjectXmlFile; } /** * Sets the path to project xml file. * * @param pathToProjectXmlFile * the new path to project xml file */ public void setPathToProjectXmlFile(String pathToProjectXmlFile) { this.pathToProjectXmlFile = pathToProjectXmlFile; } public boolean hasOutputPath() { return outputPath != null && !outputPath.isEmpty(); } public String getOutputPath() { if (!hasOutputPath()) { throw new IllegalStateException("output path not set. Check in advance using \"hasOutputPath()\""); } return outputPath; } /** * Sets the output path. * * @param outputPath * the new output path */ public void setOutputPath(String outputPath) { this.outputPath = outputPath; } public boolean hasNetworkFilename() { return xodrNetworkFilename != null && !xodrNetworkFilename.isEmpty(); } public String getXodrNetworkFilename() { if (!hasNetworkFilename()) { throw new IllegalStateException( "network filename not yet set. Check in advance using \"hasNetworkFilename()\""); } return xodrNetworkFilename; } public void setXodrNetworkFilename(String xodrFilename) { this.xodrNetworkFilename = xodrFilename; } public void setXodrPath(String xodrPath) { this.xodrPath = xodrPath; } public String getXodrPath() { return xodrPath; } public boolean isInstantaneousFileOutput() { return instantaneousFileOutput; } /** * Sets the instantaneous file output. * * @param instantaneousFileOutput * the new instantaneous file output */ public void setInstantaneousFileOutput(boolean instantaneousFileOutput) { this.instantaneousFileOutput = instantaneousFileOutput; } public boolean isXmlFromResources() { return xmlFromResources; } /** * Sets the xml from resources. Xml config files are read from resources. * * @param xmlFromResources * the new xml from resources */ public void setXmlFromResources(boolean xmlFromResources) { this.xmlFromResources = xmlFromResources; } /** * @return the parseFromInputstream */ public boolean isParseFromInputstream() { return parseFromInputstream; } /** * @param parseFromInputstream * the parseFromInputstream to set */ public void setParseFromInputstream(boolean parseFromInputstream) { this.parseFromInputstream = parseFromInputstream; } /** * @return the movsimXml */ public InputStream getMovsimXml() { return movsimXml; } /** * @param movsimXml * the movsimXml to set */ public void setMovsimXml(InputStream movsimXml) { this.movsimXml = movsimXml; } /** * @return the networkXml */ public InputStream getNetworkXml() { return networkXml; } /** * @param networkXml * the networkXml to set */ public void setNetworkXml(InputStream networkXml) { this.networkXml = networkXml; } /** * @return the projectProperties */ public InputStream getProjectProperties() { return projectProperties; } /** * @param projectProperties * the projectProperties to set */ public void setProjectProperties(InputStream projectProperties) { this.projectProperties = projectProperties; } public File getInputFile() { return new File(getPathToProjectFile(), getProjectName() + MOVSIM_CONFIG_FILE_ENDING); } public boolean hasConsumptionFilename() { return consumptionFilename != null && !consumptionFilename.isEmpty(); } public String getConsumptionFilename() { if (!hasConsumptionFilename()) { throw new IllegalStateException("consumption file not set. Check in advance using \"has...()\" method"); } return consumptionFilename; } public String getConsumptionPath() { return consumptionPath; } public void setConsumptionFilename(String consumptionFilename) { this.consumptionFilename = consumptionFilename; } public void setConsumptionPath(String consumptionPath) { this.consumptionPath = consumptionPath; } public static String getMovsimConfigFileEnding() { return MOVSIM_CONFIG_FILE_ENDING; } public static String getLog4jFilename() { return LOG4J_FILENAME; } public static String getLog4jFilenameWithPath() { return File.separator + MOVSIM_COMMON_LOG_PATH + File.separator + LOG4J_FILENAME; } public long getTimeOffsetMillis() { return timeOffsetMillis; } public void setTimeOffsetMillis(long timeOffsetMillis) { this.timeOffsetMillis = timeOffsetMillis; } public String getFormatedTimeWithOffset(double simulationTime) { DateTime dateTime = new DateTime(timeOffsetMillis + Math.round(1000 * simulationTime), DateTimeZone.UTC); return ISODateTimeFormat.dateTimeNoMillis().print(dateTime); } }