blob: 02f49ccce6d92502461c368c5e24e230b99253ec [file] [log] [blame]
// IdentfiableSpecificationFactory.java
package org.eclipse.stem.internal.data.specifications;
/*******************************************************************************
* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018
* IBM Corporation, BfR, and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* IBM Corporation - initial API and implementation and new features
* Bundesinstitut für Risikobewertung - Pajek Graph interface, new Veterinary Models
*******************************************************************************/
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
/**
* This class is a factory that creates instances of
* {@link IdentifiableSpecification}s
*/
public class IdentfiableSpecificationFactory {
/**
* A static instance of the factory
*/
public static final IdentfiableSpecificationFactory INSTANCE = new IdentfiableSpecificationFactory();
/**
* @param propertiesFile
* a *.properties file that contains the properties that define a
* {@link org.eclipse.stem.core.graph.Graph}
* @return a {@link IdentifiableSpecification} initialized from the
* properties contained in the file.
*/
public IdentifiablePropertyFileSpecification createIdentifiablePropertyFileSpecification(
final File propertiesFile) {
IdentifiablePropertyFileSpecification retValue = null;
if (propertiesFile.isFile() && propertiesFile.canRead()) {
// Yes
final Properties dataSetProperties = new Properties();
BufferedInputStream propertiesInputStream = null;
try {
propertiesInputStream = new BufferedInputStream(
new FileInputStream(propertiesFile));
dataSetProperties.load(propertiesInputStream);
propertiesInputStream.close();
// The properties file contains the name of the class that knows
// how to process the rest of the properties to create a Graph.
String recordClassName = (String) dataSetProperties
.get(IdentifiablePropertyFileSpecification.RECORD_CLASSNAME_PROPERTY);
// Did we get the class name?
if (recordClassName != null) {
// Yes
recordClassName = recordClassName.trim();
try {
retValue = (IdentifiablePropertyFileSpecification) Class
.forName(recordClassName).getDeclaredConstructor().newInstance();
// Let the GraphRecord figure out what to do with the
// rest of the properties.
retValue.collectPropertyDataSet(dataSetProperties);
} catch (final Exception e) {
System.err
.println("Error while reading the properties file \""
+ propertiesFile.getName()
+ "\", creating an instance of the class \""
+ recordClassName
+ "\" caused the following error.");
e.printStackTrace();
} catch (final Error e) {
System.err
.println("Error while reading the properties file \""
+ propertiesFile.getName()
+ "\", creating an instance of the class \""
+ recordClassName
+ "\" caused the following error.");
e.printStackTrace();
} // catch NoClassDefFoundError
} // if got class name
else {
// No
System.err
.println("The properties file \""
+ propertiesFile.getName()
+ "\" did not contain the property \""
+ IdentifiablePropertyFileSpecification.RECORD_CLASSNAME_PROPERTY
+ "\" the defines the name of the class that processes the contents of the file.\"");
}
} catch (final FileNotFoundException e) {
System.err.println(e.getMessage());
} catch (final IOException e) {
System.err.println(e.getMessage());
}
} // if can read the properties file
else {
System.err.println("The file \"" + propertiesFile.getAbsolutePath()
+ "\" is not a file or can't be read.");
}
return retValue;
} // createIdentifiablePropertyFileSpecification
} // IdentfiableSpecificationFactory