package org.orienteer.bpm.component.widget; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.event.Broadcast; import org.apache.wicket.event.IEvent; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.util.string.Strings; import org.camunda.bpm.BpmPlatform; import org.camunda.bpm.engine.ProcessEngine; import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.task.Task; import org.camunda.bpm.engine.variable.impl.VariableMapImpl; import org.orienteer.bpm.camunda.handler.ProcessDefinitionEntityHandler; import org.orienteer.bpm.camunda.handler.TaskEntityHandler; import org.orienteer.bpm.component.command.CompleteTaskCommand; import org.orienteer.core.component.FAIcon; import org.orienteer.core.component.FAIconType; import org.orienteer.core.component.command.EditODocumentCommand; import org.orienteer.core.component.command.SaveODocumentCommand; import org.orienteer.core.component.meta.ODocumentMetaPanel; import org.orienteer.core.component.structuretable.OrienteerStructureTable; import org.orienteer.core.component.widget.document.ODocumentPropertiesWidget; import org.orienteer.core.event.ActionPerformedEvent; import org.orienteer.core.service.IOClassIntrospector; import org.orienteer.core.web.ODocumentPage; import org.orienteer.core.widget.AbstractModeAwareWidget; import org.orienteer.core.widget.AbstractWidget; import org.orienteer.core.widget.Widget; import com.google.inject.Inject; import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.record.impl.ODocument; import ru.ydn.wicket.wicketorientdb.model.NvlModel; import ru.ydn.wicket.wicketorientdb.model.ODocumentModel; import ru.ydn.wicket.wicketorientdb.model.ODocumentPropertyModel; /** * Widget showing a form for a user task */ @Widget(id="user-task-form", domain="document", selector=TaskEntityHandler.OCLASS_NAME, autoEnable=true, tab="form") public class TaskFormWidget extends AbstractFormWidget { private SaveODocumentCommand saveODocumentCommand; public TaskFormWidget(String id, IModel<ODocument> model, IModel<ODocument> widgetDocumentModel) { super(id, model, widgetDocumentModel); } @Override protected void onInitialize() { super.onInitialize(); propertiesStructureTable.addCommand(new EditODocumentCommand(propertiesStructureTable, getModeModel())); propertiesStructureTable.addCommand(saveODocumentCommand = new SaveODocumentCommand(propertiesStructureTable, getModeModel()){ public void onClick(AjaxRequestTarget target) { super.onClick(target); associateTaskWithDocument(); }; }.setForceCommit(true)); propertiesStructureTable.addCommand(new CompleteTaskCommand(propertiesStructureTable, getModel(), getModeModel(), formKey)); } @Override protected FormKey obtainFormKey() { ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine(); TaskService taskService = processEngine.getTaskService(); Task task = taskService.createTaskQuery() .taskId((String)getModelObject().field("id")) .initializeFormKeys() .singleResult(); return FormKey.parse(task.getFormKey()); } @Override protected ODocument resolveODocument(FormKey formKey) { return formKey.calculateODocument(BpmPlatform.getDefaultProcessEngine(), (String)getModelObject().field("id")); } protected void associateTaskWithDocument() { associateTaskWithDocument((String)getModelObject().field("id"), formDocumentModel.getObject()); } protected void associateTaskWithDocument(String taskId, ODocument doc) { ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine(); TaskService taskService = processEngine.getTaskService(); String var = formKey.getVariableName(); taskService.setVariable(taskId, var, doc.getIdentity().toString()); } @Override protected IModel<String> getDefaultTitleModel() { return new NvlModel<>(new ODocumentPropertyModel<String>(getModel(), "name"), new ResourceModel("widget.form")); } }