// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.database;
import org.openstreetmap.osmosis.core.store.GenericObjectReader;
import org.openstreetmap.osmosis.core.store.GenericObjectWriter;
import org.openstreetmap.osmosis.core.store.StoreClassRegister;
import org.openstreetmap.osmosis.core.store.StoreReader;
import org.openstreetmap.osmosis.core.store.StoreWriter;
import org.openstreetmap.osmosis.core.store.Storeable;
/**
* A data class for representing a database record for an entity feature. This
* aggregates a standard entity feature type with a field relating it to the
* owning entity.
*
* @author Brett Henderson
* @param <T>
* The feature type to be encapsulated.
*/
public class DbFeature<T extends Storeable> implements Storeable {
private long entityId;
private T feature;
/**
* Creates a new instance.
*
* @param entityId
* The owning entity id.
* @param feature
* The feature being referenced.
*/
public DbFeature(long entityId, T feature) {
this.entityId = entityId;
this.feature = feature;
}
/**
* Creates a new instance.
*
* @param sr
* The store to read state from.
* @param scr
* Maintains the mapping between classes and their identifiers
* within the store.
*/
@SuppressWarnings("unchecked")
public DbFeature(StoreReader sr, StoreClassRegister scr) {
this(
sr.readLong(),
(T) new GenericObjectReader(sr, scr).readObject()
);
}
/**
* {@inheritDoc}
*/
public void store(StoreWriter sw, StoreClassRegister scr) {
sw.writeLong(entityId);
new GenericObjectWriter(sw, scr).writeObject(feature);
}
/**
* @return The entity id.
*/
public long getEntityId() {
return entityId;
}
/**
* @return The entity feature.
*/
public T getFeature() {
return feature;
}
}