package org.activiti.engine.impl.db; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.activiti.engine.impl.persistence.entity.AttachmentEntity; import org.activiti.engine.impl.persistence.entity.ByteArrayEntity; import org.activiti.engine.impl.persistence.entity.CommentEntity; import org.activiti.engine.impl.persistence.entity.CompensateEventSubscriptionEntity; import org.activiti.engine.impl.persistence.entity.DeploymentEntity; import org.activiti.engine.impl.persistence.entity.EventLogEntryEntity; import org.activiti.engine.impl.persistence.entity.EventSubscriptionEntity; import org.activiti.engine.impl.persistence.entity.ExecutionEntity; import org.activiti.engine.impl.persistence.entity.GroupEntity; import org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntity; import org.activiti.engine.impl.persistence.entity.HistoricDetailAssignmentEntity; import org.activiti.engine.impl.persistence.entity.HistoricDetailEntity; import org.activiti.engine.impl.persistence.entity.HistoricDetailTransitionInstanceEntity; import org.activiti.engine.impl.persistence.entity.HistoricDetailVariableInstanceUpdateEntity; import org.activiti.engine.impl.persistence.entity.HistoricFormPropertyEntity; import org.activiti.engine.impl.persistence.entity.HistoricIdentityLinkEntity; import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntity; import org.activiti.engine.impl.persistence.entity.HistoricScopeInstanceEntity; import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity; import org.activiti.engine.impl.persistence.entity.HistoricVariableInstanceEntity; import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity; import org.activiti.engine.impl.persistence.entity.IdentityLinkEntity; import org.activiti.engine.impl.persistence.entity.JobEntity; import org.activiti.engine.impl.persistence.entity.MembershipEntity; import org.activiti.engine.impl.persistence.entity.MessageEntity; import org.activiti.engine.impl.persistence.entity.MessageEventSubscriptionEntity; import org.activiti.engine.impl.persistence.entity.ModelEntity; import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity; import org.activiti.engine.impl.persistence.entity.PropertyEntity; import org.activiti.engine.impl.persistence.entity.ResourceEntity; import org.activiti.engine.impl.persistence.entity.SignalEventSubscriptionEntity; import org.activiti.engine.impl.persistence.entity.TaskEntity; import org.activiti.engine.impl.persistence.entity.TimerEntity; import org.activiti.engine.impl.persistence.entity.UserEntity; import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity; /** * Maintains a list of all the entities in order of dependency. */ public class EntityDependencyOrder { public static List<Class<? extends PersistentObject>> DELETE_ORDER = new ArrayList<Class<? extends PersistentObject>>(); public static List<Class<? extends PersistentObject>> INSERT_ORDER = new ArrayList<Class<? extends PersistentObject>>(); static { /* * In the comments below: * * 'FK to X' : X should be BELOW the entity * * 'FK from X': X should be ABOVE the entity * */ /* No FK */ DELETE_ORDER.add(PropertyEntity.class); /* No FK */ DELETE_ORDER.add(AttachmentEntity.class); /* No FK */ DELETE_ORDER.add(CommentEntity.class); /* No FK */ DELETE_ORDER.add(EventLogEntryEntity.class); /* * FK to Deployment * FK to ByteArray */ DELETE_ORDER.add(ModelEntity.class); /* Subclass of JobEntity */ DELETE_ORDER.add(MessageEntity.class); /* Subclass of TimerEntity */ DELETE_ORDER.add(TimerEntity.class); /* * FK to ByteArray */ DELETE_ORDER.add(JobEntity.class); /* * FK to ByteArray * FK to Exeution */ DELETE_ORDER.add(VariableInstanceEntity.class); /* * FK from ModelEntity * FK from JobEntity * FK from VariableInstanceEntity * * FK to DeploymentEntity */ DELETE_ORDER.add(ByteArrayEntity.class); /* * FK from ModelEntity * FK from JobEntity * FK from VariableInstanceEntity * * FK to DeploymentEntity */ DELETE_ORDER.add(ResourceEntity.class); /* * FK from ByteArray */ DELETE_ORDER.add(DeploymentEntity.class); /* * FK to Execution */ DELETE_ORDER.add(EventSubscriptionEntity.class); /* * FK to Execution */ DELETE_ORDER.add(CompensateEventSubscriptionEntity.class); /* * FK to Execution */ DELETE_ORDER.add(MessageEventSubscriptionEntity.class); /* * FK to Execution */ DELETE_ORDER.add(SignalEventSubscriptionEntity.class); /* * FK to process definition * FK to Execution * FK to Task */ DELETE_ORDER.add(IdentityLinkEntity.class); /* * FK from IdentityLink * * FK to Execution * FK to process definition */ DELETE_ORDER.add(TaskEntity.class); /* * FK from VariableInstance * FK from EventSubscription * FK from IdentityLink * FK from Task * * FK to ProcessDefinition */ DELETE_ORDER.add(ExecutionEntity.class); /* * FK from Task * FK from IdentityLink * FK from execution */ DELETE_ORDER.add(ProcessDefinitionEntity.class); /* * FK to User * FK to Group */ DELETE_ORDER.add(MembershipEntity.class); /* * Fk from Membership */ DELETE_ORDER.add(UserEntity.class); /* * FK from Membership */ DELETE_ORDER.add(GroupEntity.class); // History entities have no FK's DELETE_ORDER.add(HistoricIdentityLinkEntity.class); DELETE_ORDER.add(IdentityInfoEntity.class); DELETE_ORDER.add(HistoricActivityInstanceEntity.class); DELETE_ORDER.add(HistoricProcessInstanceEntity.class); DELETE_ORDER.add(HistoricTaskInstanceEntity.class); DELETE_ORDER.add(HistoricScopeInstanceEntity.class); DELETE_ORDER.add(HistoricVariableInstanceEntity.class); DELETE_ORDER.add(HistoricDetailAssignmentEntity.class); DELETE_ORDER.add(HistoricDetailTransitionInstanceEntity.class); DELETE_ORDER.add(HistoricDetailVariableInstanceUpdateEntity.class); DELETE_ORDER.add(HistoricFormPropertyEntity.class); DELETE_ORDER.add(HistoricDetailEntity.class); INSERT_ORDER = new ArrayList<Class<? extends PersistentObject>>(DELETE_ORDER); Collections.reverse(INSERT_ORDER); } }