/*
* Copyright 2009 Niclas Hedhman.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.qi4j.entitystore.jndi;
import org.qi4j.spi.entity.EntityState;
import org.qi4j.spi.entity.EntityStatus;
import org.qi4j.spi.entity.EntityDescriptor;
import org.qi4j.spi.entity.ManyAssociationState;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.common.TypeName;
import org.qi4j.api.common.QualifiedName;
import java.util.Map;
import java.util.List;
import java.util.HashMap;
public class JndiEntityState
implements EntityState
{
private JndiUow unitOfWork;
protected EntityStatus status;
protected String version;
protected long lastModified;
private final EntityReference identity;
private final EntityDescriptor entityDescriptor;
protected final Map<QualifiedName, Object> properties;
protected final Map<QualifiedName, EntityReference> associations;
protected final Map<QualifiedName, List<EntityReference>> manyAssociations;
public JndiEntityState( JndiUow unitOfWork, EntityReference identity, EntityDescriptor entityDescriptor)
{
this( unitOfWork, "",
System.currentTimeMillis(),
identity,
EntityStatus.NEW,
entityDescriptor,
new HashMap<QualifiedName, Object>(),
new HashMap<QualifiedName, EntityReference>(),
new HashMap<QualifiedName, List<EntityReference>>() );
}
public JndiEntityState( JndiUow unitOfWork,
String version,
long lastModified,
EntityReference identity,
EntityStatus status,
EntityDescriptor entityDescriptor,
Map<QualifiedName, Object> properties,
Map<QualifiedName, EntityReference> associations,
Map<QualifiedName, List<EntityReference>> manyAssociations )
{
this.unitOfWork = unitOfWork;
this.version = version;
this.lastModified = lastModified;
this.identity = identity;
this.status = status;
this.entityDescriptor = entityDescriptor;
this.properties = properties;
this.associations = associations;
this.manyAssociations = manyAssociations;
}
public EntityReference identity()
{
return identity;
}
public String version()
{
return version;
}
public long lastModified()
{
return lastModified;
}
public void remove()
{
}
public EntityStatus status()
{
return status;
}
public boolean isOfType( TypeName type )
{
return false;
}
public EntityDescriptor entityDescriptor()
{
return entityDescriptor;
}
public Object getProperty( QualifiedName stateName )
{
return properties.get( stateName );
}
public void setProperty( QualifiedName stateName, Object json )
{
properties.put( stateName, json );
}
public EntityReference getAssociation( QualifiedName stateName )
{
return associations.get( stateName );
}
public void setAssociation( QualifiedName stateName, EntityReference newEntity )
{
associations.put( stateName, newEntity );
}
public ManyAssociationState getManyAssociation( QualifiedName stateName )
{
return null;
}
public void refresh()
{
}
public void hasBeenApplied()
{
status = EntityStatus.LOADED;
version = unitOfWork.identity();
}
@Override
public String toString()
{
return identity + "(" +
properties.size() + " properties, " +
associations.size() + " associations, " +
manyAssociations.size() + " many-associations)";
}
}