package org.orienteer.bpm.camunda.handler;
import java.util.List;
import org.camunda.bpm.engine.impl.db.DbEntity;
import org.camunda.bpm.engine.impl.db.entitymanager.operation.DbBulkOperation;
import org.orienteer.bpm.camunda.OPersistenceSession;
import org.orienteer.core.util.OSchemaHelper;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.hook.ORecordHook.RESULT;
import com.orientechnologies.orient.core.hook.ORecordHook.TYPE;
import com.orientechnologies.orient.core.metadata.schema.OImmutableClass;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* Interface for any kind of handlers of {@link DbEntity}
* @param <T>
*/
public interface IEntityHandler<T extends DbEntity> {
public static final String BPM_ENTITY_CLASS = "BPMEntity";
public void create(T entity, OPersistenceSession session);
public T read(String id, OPersistenceSession session);
public void update(T entity, OPersistenceSession session);
public void delete(T entity, OPersistenceSession session);
public ODocument readAsDocument(String id, OPersistenceSession session);
public T mapToEntity(ODocument doc, T entity, OPersistenceSession session);
public ODocument mapToODocument(T entity, ODocument doc, OPersistenceSession session);
public boolean hasNeedInCache();
public Class<T> getEntityClass();
public String getSchemaClass();
public String getPkField();
public boolean supportsStatement(String statement);
public void applySchema(OSchemaHelper helper);
public void applyRelationships(OSchemaHelper helper);
public List<T> selectList(String statement, Object parameter, OPersistenceSession session);
public T selectOne(String statement, Object parameter, OPersistenceSession session);
public void lock(String statement, Object parameter, OPersistenceSession session);
public void deleteBulk(DbBulkOperation operation, OPersistenceSession session);
public void updateBulk(DbBulkOperation operation, OPersistenceSession session);
public RESULT onTrigger(ODatabaseDocument db, ODocument doc, TYPE iType);
}