package org.milipede; import java.io.File; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import org.milipede.storage.layer.PersistenceControllerService; import org.milipede.storage.layer.internal.ProviderController; 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.exception.SerializationDatabaseException; 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; public PersistenceController() throws BasicFileOperationDatabaseException{ // try { multi = new MultiMapDatabase(new IgnoreExceptionsStrategy(), new File("test"), "multi"); // } catch (BasicFileOperationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } 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()); } public static void main(String[] args) throws DatabaseException { PersistenceController test = new PersistenceController(); test.startup(); test.addProvider(new ProviderVO()); } //making provider persistent /* (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(); // try { storageMap.put(s.getTitle(), s.getBytes()); // } catch (DatabaseClosedDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (SerializationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (BasicFileOperationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } } for ( Iterator<ProviderVO> i = ProviderController.getInstance().getMail().iterator(); i.hasNext(); ) { ProviderVO s = i.next(); // try { mailMap.put(s.getTitle(), s.getBytes()); // } catch (DatabaseClosedDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (SerializationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (BasicFileOperationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } } for ( Iterator<ProviderVO> i = ProviderController.getInstance().getHoster().iterator(); i.hasNext(); ) { ProviderVO s = i.next(); // try { hosterMap.put(s.getTitle(), s.getBytes()); // } catch (DatabaseClosedDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (SerializationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (BasicFileOperationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } } } /* (non-Javadoc) * @see org.milipede.storage.layer.internal.PersistenceControllerService#startup() */ public void startup() throws DatabaseException { // try { for (Iterator<byte[]> i = storageMap.values().iterator(); i.hasNext();) { ProviderController.getInstance().getStorage().add(ProviderVO.getProviderVO(i.next())); } for (Iterator<byte[]> i = mailMap.values().iterator(); i.hasNext();) { ProviderController.getInstance().getMail().add(ProviderVO.getProviderVO(i.next())); } for (Iterator<byte[]> i = hosterMap.values().iterator(); i.hasNext();) { ProviderController.getInstance().getHoster().add(ProviderVO.getProviderVO(i.next())); } // } catch (DatabaseClosedDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } catch (BasicFileOperationDatabaseException ex) { // Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); // } } /* (non-Javadoc) * @see org.milipede.storage.layer.internal.PersistenceControllerService#addProvider(org.millipede.router.vo.ProviderVO) */ public void addProvider(ProviderVO provider) { if(provider.getCategory().equals("storage")) { try { storageMap.put(provider.getTitle(), provider.getBytes()); } catch (DatabaseClosedDatabaseException ex) { Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); } catch (SerializationDatabaseException ex) { Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); } catch (BasicFileOperationDatabaseException ex) { Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); } } } /* (non-Javadoc) * @see org.milipede.storage.layer.internal.PersistenceControllerService#removeProvider(org.millipede.router.vo.ProviderVO) */ public void removeProvider(ProviderVO provider) { if(provider.getCategory().equals("storage")) { try { storageMap.remove(provider.getTitle()); } catch (DatabaseClosedDatabaseException ex) { Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); } catch (SerializationDatabaseException ex) { Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); } catch (BasicFileOperationDatabaseException ex) { Logger.getLogger(PersistenceController.class.getName()).log(Level.SEVERE, null, ex); } } } }