package com.buschmais.xo.impl.proxy.entity.object;
import com.buschmais.xo.api.proxy.ProxyMethod;
import com.buschmais.xo.spi.session.InstanceManager;
import com.buschmais.xo.impl.SessionContext;
import com.buschmais.xo.spi.datastore.DatastoreEntityMetadata;
import com.buschmais.xo.spi.datastore.DatastoreRelationMetadata;
import com.buschmais.xo.spi.datastore.DatastoreSession;
public class EqualsMethod<Entity> implements ProxyMethod<Entity> {
private final SessionContext<?, Entity, ?, ?, ?, ?, ?, ?, ?> sessionContext;
public EqualsMethod(SessionContext<?, Entity, ?, ?, ?, ?, ?, ?, ?> sessionContext) {
this.sessionContext = sessionContext;
}
@Override
public Object invoke(Entity entity, Object instance, Object[] args) {
Object other = args[0];
InstanceManager<?, Entity> entityInstanceManager = sessionContext.getEntityInstanceManager();
if (entityInstanceManager.isInstance(other)) {
Entity otherEntity = entityInstanceManager.getDatastoreType(other);
DatastoreSession<?, Entity, ? extends DatastoreEntityMetadata<?>, ?, ?, ?, ? extends DatastoreRelationMetadata<?>, ?, ?> datastoreSession = sessionContext.getDatastoreSession();
return datastoreSession.getDatastoreEntityManager().getEntityId(otherEntity).equals(datastoreSession.getDatastoreEntityManager().getEntityId(entity));
}
return Boolean.FALSE;
}
}