package mil.nga.giat.geowave.analytic; import java.io.IOException; import java.io.Serializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.store.CloseableIterator; import mil.nga.giat.geowave.core.store.adapter.AdapterStore; import mil.nga.giat.geowave.core.store.adapter.DataAdapter; /** * * Support for adapter stores that are Serializable. Rather than for an adapter * store to serialize its state, wrap an adapter store. If the adapter store is * not serializable, then log a warning message upon serialization. * * */ public class SerializableAdapterStore implements AdapterStore, Serializable { /** * */ private static final long serialVersionUID = 1L; final static Logger LOGGER = LoggerFactory.getLogger(SerializableAdapterStore.class); transient AdapterStore adapterStore; public SerializableAdapterStore() { } public SerializableAdapterStore( AdapterStore adapterStore ) { super(); this.adapterStore = adapterStore; } private AdapterStore getAdapterStore() { if (adapterStore == null) { throw new IllegalStateException( "AdapterStore has not been initialized"); } return adapterStore; } @Override public void addAdapter( final DataAdapter<?> adapter ) { getAdapterStore().addAdapter( adapter); } @Override public DataAdapter<?> getAdapter( final ByteArrayId adapterId ) { return getAdapterStore().getAdapter( adapterId); } @Override public boolean adapterExists( final ByteArrayId adapterId ) { return getAdapterStore().adapterExists( adapterId); } @Override public CloseableIterator<DataAdapter<?>> getAdapters() { return getAdapterStore().getAdapters(); } @Override public void removeAll() { getAdapterStore().removeAll(); } private void writeObject( final java.io.ObjectOutputStream out ) throws IOException { if (adapterStore instanceof Serializable) { out.writeBoolean(true); out.writeObject(adapterStore); } else { out.writeBoolean(false); } } private void readObject( final java.io.ObjectInputStream in ) throws IOException, ClassNotFoundException { if (in.readBoolean()) { adapterStore = (AdapterStore) in.readObject(); } else { LOGGER.warn("Unable to initialized AdapterStore; the store is not serializable"); } } }