/*
* This file is part of the OSMembrane project.
* More informations under www.osmembrane.de
*
* The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0.
* for more details about the license see http://www.osmembrane.de/license/
*
* Source: $HeadURL$ ($Revision$)
* Last changed: $Date$
*/
package de.osmembrane.model.persistence;
import java.util.HashMap;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
/**
* Factory for generating an instance of a given {@link AbstractPersistence}.
*
* @author jakob_jarosch
*/
public class PersistenceFactory extends Observable implements Observer {
/**
* Saves the instances from {@link AbstractPersistence} of this object.
*/
private Map<Class<? extends AbstractPersistence>, AbstractPersistence> persistences = new HashMap<Class<? extends AbstractPersistence>, AbstractPersistence>();
/**
* Implements the Singleton pattern.
*/
private static PersistenceFactory instance = new PersistenceFactory();
/**
* Initializes the PersistenceFactory.
*/
private PersistenceFactory() {
}
/**
* Getter for the Singleton pattern.
*
* @return the one and only instance of PersistenceFactory
*/
public static PersistenceFactory getInstance() {
return instance;
}
/**
* Returns a given {@link AbstractPersistence} for the given class name.
*
* @param persistence
* class name of the AbstractPersistence
* @return an instance of the given AbstractPersistence
*/
public AbstractPersistence getPersistence(
Class<? extends AbstractPersistence> persistence) {
if (!persistences.containsKey(persistence)) {
try {
AbstractPersistence persistenceInstance = persistence
.newInstance();
addObserver(persistenceInstance);
persistences.put(persistence, persistenceInstance);
} catch (Exception e) {
/*
* If that happens, the method will later return NULL. Happens
* if constructor is not public or something like that.
*/
}
}
return persistences.get(persistence);
}
@Override
public void update(Observable o, Object arg) {
setChanged();
notifyObservers(arg);
}
}