Skip to content

Commit 3bcfa7b

Browse files
committed
Further adjustments
1 parent 67aaf88 commit 3bcfa7b

File tree

1 file changed

+41
-29
lines changed

1 file changed

+41
-29
lines changed

Kitodo/src/main/java/org/kitodo/production/forms/WorkflowForm.java

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -121,18 +121,19 @@ public void setWorkflowStatus(WorkflowStatus workflowStatus) {
121121
public void readXMLDiagram() {
122122
URI xmlDiagramURI = new File(
123123
ConfigCore.getKitodoDiagramDirectory() + encodeXMLDiagramName(this.workflow.getTitle())).toURI();
124-
125-
try (InputStream inputStream = fileService.read(xmlDiagramURI);
126-
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
127-
StringBuilder sb = new StringBuilder();
128-
String line = bufferedReader.readLine();
129-
while (Objects.nonNull(line)) {
130-
sb.append(line).append("\n");
131-
line = bufferedReader.readLine();
124+
if (fileService.fileExist(xmlDiagramURI)) {
125+
try (InputStream inputStream = fileService.read(xmlDiagramURI);
126+
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
127+
StringBuilder sb = new StringBuilder();
128+
String line = bufferedReader.readLine();
129+
while (Objects.nonNull(line)) {
130+
sb.append(line).append("\n");
131+
line = bufferedReader.readLine();
132+
}
133+
xmlDiagram = sb.toString();
134+
} catch (IOException e) {
135+
Helper.setErrorMessage(e.getLocalizedMessage(), logger, e);
132136
}
133-
xmlDiagram = sb.toString();
134-
} catch (IOException e) {
135-
Helper.setErrorMessage(e.getLocalizedMessage(), logger, e);
136137
}
137138
}
138139

@@ -352,7 +353,9 @@ private void saveWorkflow() throws DataException {
352353
* @return page
353354
*/
354355
public String newWorkflow() {
355-
return workflowEditPath + "&id=0";
356+
this.workflow = new Workflow();
357+
this.workflow.setClient(ServiceManager.getUserService().getSessionClientOfAuthenticatedUser());
358+
return workflowEditPath + "&id=" + (Objects.isNull(this.workflow.getId()) ? 0 : this.workflow.getId());
356359
}
357360

358361
/**
@@ -371,27 +374,29 @@ public String duplicate(Integer itemId) {
371374
Map<String, URI> diagramsUris = getDiagramUris(baseWorkflow.getTitle());
372375

373376
URI xmlDiagramURI = diagramsUris.get(XML_DIAGRAM_URI);
377+
URI svgDiagramURI = diagramsUris.get(SVG_DIAGRAM_URI);
374378

375379
this.workflow = ServiceManager.getWorkflowService().duplicateWorkflow(baseWorkflow);
376380
setWorkflowStatus(WorkflowStatus.DRAFT);
377-
Map<String, URI> diagramsCopyUris = getDiagramUris();
378-
379-
URI xmlDiagramCopyURI = diagramsCopyUris.get(XML_DIAGRAM_URI);
380381

382+
// Read XML diagram
381383
try (InputStream xmlInputStream = ServiceManager.getFileService().read(xmlDiagramURI)) {
382384
this.xmlDiagram = IOUtils.toString(xmlInputStream, StandardCharsets.UTF_8);
383-
saveFile(xmlDiagramCopyURI, this.xmlDiagram);
384-
} catch (IOException e) {
385-
Helper.setErrorMessage("unableToDuplicateWorkflow", logger, e);
386-
return this.stayOnCurrentPage;
385+
}
386+
// Read SVG diagram (use a separate input stream)
387+
try (InputStream svgInputStream = ServiceManager.getFileService().read(svgDiagramURI)) {
388+
this.svgDiagram = IOUtils.toString(svgInputStream, StandardCharsets.UTF_8);
387389
}
388390
// Store duplicated workflow in Flash scope
389391
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
390392
externalContext.getFlash().put("duplicatedWorkflow", this.workflow);
393+
externalContext.getFlash().put("xmlDiagram", this.xmlDiagram);
394+
externalContext.getFlash().put("svgDiagram", this.svgDiagram);
391395

392396
return workflowEditPath + "&id=0";
393397

394-
} catch (DAOException e) {
398+
399+
} catch (IOException | DAOException e) {
395400
Helper.setErrorMessage(ERROR_DUPLICATE, new Object[] {ObjectType.WORKFLOW.getTranslationSingular() },
396401
logger, e);
397402
return this.stayOnCurrentPage;
@@ -423,21 +428,28 @@ public void setWorkflowById(int id) {
423428
*/
424429
public void load(int id) {
425430
try {
426-
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
427-
Map<String, Object> flash = externalContext.getFlash();
428-
// Check if duplicated workflow is stored in Flash scope
429-
if (flash.containsKey("duplicatedWorkflow")) {
430-
this.workflow = (Workflow) flash.get("duplicatedWorkflow");
431-
setWorkflowStatus(workflow.getStatus());
432-
readXMLDiagram();
433-
this.dataEditorSettingsDefined = this.dataEditorSettingService.areDataEditorSettingsDefinedForWorkflow(workflow);
434-
} else if (id > 0) {
431+
if (id > 0) {
435432
// Normal case: Load workflow from database
436433
Workflow workflow = ServiceManager.getWorkflowService().getById(id);
437434
setWorkflow(workflow);
438435
setWorkflowStatus(workflow.getStatus());
439436
readXMLDiagram();
440437
this.dataEditorSettingsDefined = this.dataEditorSettingService.areDataEditorSettingsDefinedForWorkflow(workflow);
438+
} else {
439+
// Check if duplicated workflow is stored in Flash scope
440+
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
441+
Map<String, Object> flash = externalContext.getFlash();
442+
443+
if (flash.containsKey("duplicatedWorkflow")) {
444+
this.workflow = (Workflow) flash.get("duplicatedWorkflow");
445+
this.xmlDiagram = (String) flash.get("xmlDiagram");
446+
this.svgDiagram = (String) flash.get("svgDiagram");
447+
setWorkflowStatus(workflow.getStatus());
448+
this.dataEditorSettingsDefined = this.dataEditorSettingService.areDataEditorSettingsDefinedForWorkflow(workflow);
449+
}
450+
if (this.workflow.getClient() == null) {
451+
this.workflow.setClient(ServiceManager.getUserService().getSessionClientOfAuthenticatedUser());
452+
}
441453
}
442454
setSaveDisabled(false);
443455
} catch (DAOException e) {

0 commit comments

Comments
 (0)