package net.ms.designer.projectbuilder.service; import java.io.Serializable; import java.util.List; import java.util.Set; import org.basuyi.xflow.model.ActionParameter; import org.basuyi.xflow.model.Activity; import org.basuyi.xflow.model.ActivityAction; import org.basuyi.xflow.model.Parameter; import org.basuyi.xflow.model.WfAction; import org.basuyi.xflow.model.WfActivity; import org.basuyi.xflow.model.WfActivityParam; import org.basuyi.xflow.model.WfActivityTran; import org.basuyi.xflow.model.WfCondition; import org.basuyi.xflow.model.WfDefination; import org.basuyi.xflow.model.WfTransCondition; import net.ms.designer.projectbuilder.dao.ProjectBuilderDAO; import net.ms.designer.projectbuilder.model.ComAttr; import net.ms.designer.projectbuilder.model.ComDetail; import net.ms.designer.projectbuilder.model.ComDetailPosition; import net.ms.designer.projectbuilder.model.ComDetailRelation; import net.ms.designer.projectbuilder.model.ComPosition; import net.ms.designer.projectbuilder.model.ComWorkflow; import net.ms.designer.projectbuilder.model.Company; import net.ms.designer.projectbuilder.model.Component; import net.ms.designer.projectbuilder.model.Package; import net.ms.designer.projectbuilder.model.PackagePosition; import net.ms.designer.projectbuilder.model.Position; import net.ms.designer.projectbuilder.model.Project; import net.ms.designer.projectbuilder.model.WfActivityPosition; import net.ms.designer.projectbuilder.model.WorkflowPosition; public class DBProjectBuilder implements ProjectBuilder, DBProjectBuilderDaoAware { private ProjectBuilderDAO dao; public void saveProject(Project newProject) { List companyList = dao.getEntityByModel(newProject.getCompany()); if (companyList != null) { for (Company company : (List<Company>)companyList) { dao.removeEntity(company); } } dao.saveEntity(newProject.getCompany()); List projectList = dao.getEntityByModel(newProject); if (projectList != null) { for (Project project : (List<Project>)projectList) { dao.removeEntity(project); } } dao.saveEntity(newProject); } public void savePackage(Package comPackage) { List comPackageList = dao.getEntityByModel(comPackage); if (comPackageList != null) { for (Package pack : (List<Package>)comPackageList) { dao.removeEntity(pack); } } dao.saveEntity(comPackage); PackagePosition position = comPackage.getPackagePosition(); if (position != null) { position.setPackageId(comPackage.getPackageId()); List positionList = dao.getEntityByModel(position); if (positionList != null) { for (Position pos : (List<Position>)positionList) { dao.removeEntity(pos); } } dao.saveEntity(position); } } public void saveComponent(Component component) { List comList = dao.getEntityByModel(component); if (comList != null) { for (Component com : (List<Component>)comList) { dao.removeEntity(com); } } dao.saveEntity(component); ComPosition position = component.getComPosition(); if (position != null) { position.setComponentId(component.getComponentId()); List positionList = dao.getEntityByModel(position); if (positionList != null) { for (Position pos : (List<Position>)positionList) { dao.removeEntity(pos); } } dao.saveEntity(position); } } public void saveComponentDetail(ComDetail comDetail) { List comDetailList = dao.getEntityByModel(comDetail); if (comDetailList != null) { for (ComDetail cd : (List<ComDetail>)comDetailList) { dao.removeEntity(cd); } } dao.saveEntity(comDetail); ComDetailPosition position = comDetail.getComDetailPosition(); if (position != null) { position.setComDetailId(comDetail.getComDetailId()); List positionList = dao.getEntityByModel(position); if (positionList != null) { for (Position pos : (List<Position>)positionList) { dao.removeEntity(pos); } } dao.saveEntity(position); } } public void saveComAttr(ComAttr comAttr) { List comAttrList = dao.getEntityByModel(comAttr); if (comAttrList != null) { for (ComAttr ca : (List<ComAttr>)comAttrList) { dao.removeEntity(ca); } } dao.saveEntity(comAttr); } public void saveComWorkflow(ComWorkflow comWorkflow) { List comWorkflowList = dao.getEntityByModel(comWorkflow); if (comWorkflowList != null) { for (ComWorkflow cw : (List<ComWorkflow>)comWorkflowList) { dao.removeEntity(cw); } } dao.saveEntity(comWorkflow); WorkflowPosition position = comWorkflow.getWorkflowPosition(); if (position != null) { position.setComWorkflowId(comWorkflow.getComWorkflowId()); List positionList = dao.getEntityByModel(position); if (positionList != null) { for (Position pos : (List<Position>)positionList) { dao.removeEntity(pos); } } dao.saveEntity(position); } } public WfDefination getWorkflow(WfDefination workflow) { WfDefination _workflow = (WfDefination)dao.getEntityById(WfDefination.class, workflow.getWorkflowId()); return _workflow; } public void saveWorkflow(WfDefination workflow) { //ɾ���������� clearWfDefination(workflow); Set<Parameter> wfParams = workflow.getWfParameters(); if (wfParams != null) { for (Parameter param : wfParams) { dao.saveEntity(param); } } dao.saveEntity(workflow); } private void clearWfDefination(WfDefination workflow) { String workflowId = workflow.getWorkflowId(); WfActivity wfAct = new WfActivity(); wfAct.setWorkflowId(workflowId); //ɾ��workflow-activity��ϵ�� dao.removeEntity(wfAct); List wfActList = dao.getEntityByModel(wfAct); if (wfActList != null) { for (WfActivity _wfAct : (List<WfActivity>)wfActList) { String activityId = _wfAct.getActivityId(); Long wfActivityId = _wfAct.getWfActivityId(); //ɾ��activity-action��ϵ�� ActivityAction aa = new ActivityAction(); aa.setActivityId(activityId); dao.removeEntity(aa); //ɾ��activity trans WfActivityTran wfTran = new WfActivityTran(); wfTran.setFromWfActivityId(wfActivityId); //dao.removeEntity(wfTran); List wfTranList = dao.getEntityByModel(wfTran); if (wfTranList != null) { for (WfActivityTran _wfTran : (List<WfActivityTran>)wfTranList) { Long wfTransId = _wfTran.getActivityTransId(); dao.removeEntity(_wfTran); //ɾ��wfTrans - condition WfTransCondition wfCondition = new WfTransCondition(); wfCondition.setActivityTransId(wfTransId); dao.removeEntity(wfCondition); } } //ɾ��activity trans wfTran = new WfActivityTran(); wfTran.setToWfActivityId(wfActivityId); //dao.removeEntity(wfTran); wfTranList = dao.getEntityByModel(wfTran); if (wfTranList != null) { for (WfActivityTran _wfTran : (List<WfActivityTran>)wfTranList) { Long wfTransId = _wfTran.getActivityTransId(); dao.removeEntity(_wfTran); //ɾ��wfTrans - condition WfTransCondition wfCondition = new WfTransCondition(); wfCondition.setActivityTransId(wfTransId); dao.removeEntity(wfCondition); } } } } } public void setServiceTx(ProjectBuilderDAO dao) { this.dao = dao; } public void saveCompany(Company company) { List companyList = dao.getEntityByModel(company); if (companyList != null) { for (Company comp : (List<Company>)companyList) { dao.removeEntity(comp); } } dao.saveEntity(company); } public List<Project> getProjectByModel(Project project) { return dao.getEntityByModel(project); } public List<Package> getPackageByModel(Package comPackage) { // TODO Auto-generated method stub return dao.getEntityByModel(comPackage); } public List<Component> getComponentByModel(Component com) { // TODO Auto-generated method stub return dao.getEntityByModel(com); } public List<ComDetail> getCompDetailByModel(ComDetail comDetail) { // TODO Auto-generated method stub return dao.getEntityByModel(comDetail); } public void saveComDetailRelation(ComDetailRelation comDetailRelation) { dao.saveEntity(comDetailRelation); } public void saveWfActivity(WfActivity wfActivity) { // TODO Auto-generated method stub dao.saveEntity(wfActivity); WfActivityPosition position = wfActivity.getWfActivityPosition(); if (position != null) { position.setWfActivityId(wfActivity.getWfActivityId()); List positionList = dao.getEntityByModel(position); if (positionList != null) { for (Position pos : (List<Position>)positionList) { dao.removeEntity(pos); } } dao.saveEntity(position); } } public void saveActivity(Activity activity) { // TODO Auto-generated method stub Set<WfAction> wfActions = activity.getActivityActions(); Set<Parameter> wfParams = activity.getWfActivityParams(); // Activity _activity = new Activity(); // _activity.setActivityId(activity.getActivityId()); // _activity.setActivityName(activity.getActivityName()); // _activity.setActivityDesc(activity.getActivityDesc()); // _activity.setActivityType(activity.getActivityType()); // activity.setActivityActions(null); // activity.setWfActivityParams(null); Activity _activity = (Activity)dao.getEntityById(Activity.class, activity.getActivityId()); if (_activity != null) { //activity = _activity; return; } dao.saveEntity(activity); if (wfParams != null) { for (Parameter param : wfParams) { dao.saveEntity(param); WfActivityParam act_param = new WfActivityParam(); act_param.setActivityId(activity.getActivityId()); act_param.setParamId(param.getParamId()); dao.saveEntity(act_param); } } if (wfActions != null) { int cnt = 0; for (WfAction action : wfActions) { WfAction _action = (WfAction)dao.getEntityById(WfAction.class, action.getActionId()); if (_action == null) { Set<Parameter> action_arams = action.getActionParams(); if (action_arams != null) { for (Parameter param : action_arams) { dao.saveEntity(param); ActionParameter action_param = new ActionParameter(); action_param.setActionId(action.getActionId()); action_param.setParamId(param.getParamId()); dao.saveEntity(action_param); } } dao.saveEntity(action); } ActivityAction act_action = new ActivityAction(); act_action.setActionId(action.getActionId()); act_action.setActivityId(activity.getActivityId()); act_action.setSortNo(new Long(cnt++)); dao.saveEntity(act_action); } } } public List<WfActivity> getWfActivityByModel(WfActivity wfActivity) { // TODO Auto-generated method stub return dao.getEntityByModel(wfActivity); } public void saveWfActivityTran(WfActivityTran wfActivityTran) { // TODO Auto-generated method stub WfActivityTran _wfActivityTran = new WfActivityTran(); _wfActivityTran.setConditionPolicy(wfActivityTran.getConditionPolicy()); _wfActivityTran.setFromWfActivityId(wfActivityTran.getFromWfActivityId()); _wfActivityTran.setToWfActivityId(wfActivityTran.getToWfActivityId()); dao.saveEntity(_wfActivityTran); Set<WfCondition> conditions = wfActivityTran.getWfTranConditions(); if (conditions != null) { int cnt = 0; for (WfCondition condition : conditions) { WfCondition _condition = (WfCondition)dao.getEntityById(WfCondition.class, condition.getConditionId()); if (_condition == null) { Set<Parameter> condition_arams = condition.getConditionParams(); if (condition_arams != null) { for (Parameter param : condition_arams) { dao.saveEntity(param); } } dao.saveEntity(condition); } WfTransCondition trans_con = new WfTransCondition(); trans_con.setConditionId(condition.getConditionId()); trans_con.setActivityTransId(_wfActivityTran.getActivityTransId()); trans_con.setSortNo(new Long(cnt++)); dao.saveEntity(trans_con); } } } public Set<WfAction> getActivityActions(Activity activity) { Activity _activity = (Activity)dao.getEntityById(Activity.class, activity.getActivityId()); Set<WfAction> actions = (Set<WfAction>)_activity.getActivityActions(); return actions; } public void saveEntity(Object entity) { dao.saveEntity(entity); } public List getEntityByModel(Object model) { // TODO Auto-generated method stub return dao.getEntityByModel(model); } public Object getEntityById(Class cls, Serializable id) { // TODO Auto-generated method stub return dao.getEntityById(cls, id); } public void removeEntity(Object entity) { dao.removeEntity(entity); } }