package org.milipede.storage.layer.internal;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.milipede.storage.layer.PersistenceControllerService;
import org.millipede.router.vo.ProviderVO;
import quickbase.MultiMapDatabase;
import quickbase.exception.BasicFileOperationDatabaseException;
import quickbase.exception.DatabaseClosedDatabaseException;
import quickbase.exception.DatabaseException;
import quickbase.exception.IgnoreExceptionsStrategy;
import quickbase.serializer.ByteArraySerializer;
import quickbase.serializer.StringSerializer;
import quickbase.service.IPersistedMap;
public class PersistenceController { // implements PersistenceControllerService
// {
private MultiMapDatabase multi;
private IPersistedMap<String, byte[]> storageMap;
private IPersistedMap<String, byte[]> mailMap;
private IPersistedMap<String, byte[]> hosterMap;
private boolean started = false;
public PersistenceController() throws BasicFileOperationDatabaseException {
multi = new MultiMapDatabase(new IgnoreExceptionsStrategy(), new File(
"test"), "multi");
storageMap = multi.createMap((byte) 0, new StringSerializer(),
new ByteArraySerializer());
mailMap = multi.createMap((byte) 1, new StringSerializer(),
new ByteArraySerializer());
hosterMap = multi.createMap((byte) 2, new StringSerializer(),
new ByteArraySerializer());
}
private static PersistenceController instance;
public static PersistenceController getInstance()
throws BasicFileOperationDatabaseException {
if (instance != null) {
return instance;
} else {
instance = new PersistenceController();
return instance;
}
}
// making provider persistent
/*
* (non-Javadoc)
*
* @see
* org.milipede.storage.layer.internal.PersistenceControllerService#shutdown
* ()
*/
/*
* (non-Javadoc)
*
* @see
* org.milipede.storage.layer.internal.PersistenceControllerService#shutdown
* ()
*/
public void shutdown() throws DatabaseException {
for (Iterator<ProviderVO> i = ProviderController.getInstance()
.getStorage().iterator(); i.hasNext();) {
ProviderVO s = i.next();
storageMap.put(s.getTitle(), s.getBytes());
}
for (Iterator<ProviderVO> i = ProviderController.getInstance()
.getMail().iterator(); i.hasNext();) {
ProviderVO s = i.next();
mailMap.put(s.getTitle(), s.getBytes());
}
for (Iterator<ProviderVO> i = ProviderController.getInstance()
.getHoster().iterator(); i.hasNext();) {
ProviderVO s = i.next();
hosterMap.put(s.getTitle(), s.getBytes());
}
}
/*
* (non-Javadoc)
*
* @see
* org.milipede.storage.layer.internal.PersistenceControllerService#startup
* ()
*/
/*
* (non-Javadoc)
*
* @see
* org.milipede.storage.layer.internal.PersistenceControllerService#startup
* ()
*/
public void startup() throws DatabaseException {
if (started == true) {
return;
} else {
Collection<byte[]> values = (Collection<byte[]>) storageMap
.values();
for (byte[] t : values)
ProviderController.getInstance().getStorage().add(
ProviderVO.getProviderVO(t));
values = (Collection<byte[]>) mailMap.values();
for (Iterator<byte[]> i = values.iterator(); i.hasNext();) {
ProviderController.getInstance().getMail().add(
ProviderVO.getProviderVO(i.next()));
}
values = (Collection<byte[]>) hosterMap.values();
for (Iterator<byte[]> i = values.iterator(); i.hasNext();) {
ProviderController.getInstance().getHoster().add(
ProviderVO.getProviderVO(i.next()));
}
}
started = true;
}
/*
* (non-Javadoc)
*
* @see
* org.milipede.storage.layer.internal.PersistenceControllerService#addProvider
* (org.millipede.router.vo.ProviderVO)
*/
/*
* (non-Javadoc)
*
* @see
* org.milipede.storage.layer.internal.PersistenceControllerService#addProvider
* (org.millipede.router.vo.ProviderVO)
*/
public boolean addProvider(ProviderVO provider) throws DatabaseException {
if (provider.getCategory().equals("storage")) {
if (storageMap.contains(provider.getTitle())) {
return false;
} else {
storageMap.put(provider.getTitle(), provider.getBytes());
return true;
}
}
return false;
}
/*
* (non-Javadoc)
*
* @seeorg.milipede.storage.layer.internal.PersistenceControllerService#
* removeProvider(org.millipede.router.vo.ProviderVO)
*/
/*
* (non-Javadoc)
*
* @seeorg.milipede.storage.layer.internal.PersistenceControllerService#
* removeProvider(org.millipede.router.vo.ProviderVO)
*/
public boolean removeProvider(ProviderVO provider) throws DatabaseException {
if (provider.getCategory().equals("storage")) {
storageMap.remove(provider.getTitle());
return true;
} else
return false;
}
public ProviderVO getProvider() throws DatabaseClosedDatabaseException,
BasicFileOperationDatabaseException {
ProviderVO provider = null;
return provider;
}
public List<ProviderVO> getProviders()
throws DatabaseClosedDatabaseException,
BasicFileOperationDatabaseException {
ProviderVO provider;
List<ProviderVO> providers = new ArrayList<ProviderVO>();
Collection<byte[]> values = (Collection<byte[]>) storageMap.values();
for (byte[] t : values) {
provider = ProviderVO.getProviderVO(t);
providers.add(provider);
}
return providers;
}
}