super(session);
this.searchProvider = searchProvider;
}
public long saveProcessInstance(ProcessInstance processInstance) {
UserData creator = processInstance.getCreator();
if (creator != null) {
if (creator.getId() != null) {
processInstance.setCreator((UserData) session.get(UserData.class, creator.getId()));
} else {
List users = session.createCriteria(UserData.class)
.add(eq("login", creator.getLogin())).list();
if (users.isEmpty()) {
session.saveOrUpdate(creator);
} else {
processInstance.setCreator((UserData) users.get(0));
}
}
}
if (processInstance.getToDelete() != null) {
for (Object o : processInstance.getToDelete()) {
session.delete(o);
}
}
Set<ProcessInstanceAttribute> procAttrib = processInstance.getProcessAttributes();
for (ProcessInstanceAttribute attrib:procAttrib){
if (attrib instanceof ProcessInstanceAttachmentAttribute && attrib.getId()!=null){
session.evict(session.get(attrib.getClass(), attrib.getId()));
}
}
session.saveOrUpdate(processInstance);
session.flush();
long time = System.currentTimeMillis();
//update search indexes
ProcessInstanceSearchData searchData = new ProcessInstanceSearchData(processInstance.getId());
//put some default search attributes
if (creator != null) {
searchData.addSearchAttribute(new ProcessInstanceSearchAttribute("creator_login", creator.getLogin()));
searchData.addSearchAttribute(new ProcessInstanceSearchAttribute("creator_email", creator.getEmail()));
searchData.addSearchAttribute(new ProcessInstanceSearchAttribute("creator_realname", creator.getRealName()));
}
searchData.addSearchAttributes(new String[][]{
{"instance_key", processInstance.getExternalKey()},
{"definition_name", processInstance.getDefinitionName()},
{"instance_description", processInstance.getDescription()},