package org.neo4j.kernel.impl.core;
import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.graphdb.event.PropertyEntry;
class PropertyEntryImpl<T extends PropertyContainer>
implements PropertyEntry<T>
{
private final T entity;
private final String key;
private final Object value;
private final Object valueBeforeTransaction;
private PropertyEntryImpl( T entity, String key, Object value,
Object valueBeforeTransaction )
{
this.entity = entity;
this.key = key;
this.value = value;
this.valueBeforeTransaction = valueBeforeTransaction;
}
static <T extends PropertyContainer> PropertyEntry<T> assigned( T entity,
String key, Object value, Object valueBeforeTransaction )
{
if ( value == null )
{
throw new IllegalArgumentException( "Null value" );
}
return new PropertyEntryImpl<T>( entity, key, value, valueBeforeTransaction );
}
static <T extends PropertyContainer> PropertyEntry<T> removed( T entity,
String key, Object valueBeforeTransaction )
{
return new PropertyEntryImpl<T>( entity, key, null, valueBeforeTransaction );
}
public T entity()
{
return this.entity;
}
public String key()
{
return this.key;
}
public Object previouslyCommitedValue()
{
return this.valueBeforeTransaction;
}
public Object value()
{
if ( this.value == null )
{
throw new IllegalStateException( "PropertyEntry[" + entity + ", "
+ key + "] has no value, it represents a removed property" );
}
return this.value;
}
@Override
public String toString()
{
return "PropertyEntry[entity:" + entity + ", key:" + key + ", value:" + value +
", valueBeforeTx:" + valueBeforeTransaction + "]";
}
}