1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.content.action;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.importexport.DataTransporter;
38 import info.magnolia.importexport.postprocessors.ActivationStatusImportPostProcessor;
39 import info.magnolia.task.Task;
40 import info.magnolia.task.TasksManager;
41 import info.magnolia.ui.admincentral.shellapp.pulse.task.DefaultTaskDetailPresenter;
42 import info.magnolia.ui.admincentral.shellapp.pulse.task.action.ResolveTaskAction;
43 import info.magnolia.ui.admincentral.shellapp.pulse.task.action.ResolveTaskActionDefinition;
44 import info.magnolia.ui.api.shell.Shell;
45
46 import java.io.File;
47 import java.util.Map;
48
49 import javax.inject.Inject;
50 import javax.jcr.Session;
51
52 import org.apache.commons.lang3.StringUtils;
53
54
55
56
57
58 public class BootstrapAction extends ResolveTaskAction {
59
60 private final Context context;
61
62 @Inject
63 public BootstrapAction(Context context, ResolveTaskActionDefinition definition,
64 Task task, TasksManager taskManager,
65 DefaultTaskDetailPresenter taskPresenter, Shell shell) {
66 super(definition, task, taskManager, taskPresenter, shell);
67 this.context = context;
68 }
69
70 @Override
71 protected void executeTask(TasksManager taskManager, Task task) {
72 super.executeTask(taskManager, task);
73 Map<String, Object> taskContent = task.getContent();
74 String modifiedFilePath = (String) taskContent.get("path");
75 String repository = (String) taskContent.get("repository");
76
77 bootstrapImport(new File(modifiedFilePath), repository);
78 }
79
80
81
82
83 private void bootstrapImport(File file, String repository) {
84 try {
85 DataTransporter.executeBootstrapImport(file, repository);
86 Session session = context.getJCRSession(repository);
87 String node = getNodePathFor(file);
88 new ActivationStatusImportPostProcessor().postProcessNode(session.getNode(node));
89 session.save();
90 } catch (Exception e) {
91 throw new RuntimeException("Failed to import bootstrap content from '{" + file.getPath() + "}'", e);
92 }
93 }
94
95
96
97
98
99
100
101
102 private String getNodePathFor(File file) {
103 String nodeNameWithoutExtension = StringUtils.substringBeforeLast(file.getName(), ".");
104 String nodeNameWithSlashes = StringUtils.replace(nodeNameWithoutExtension, ".", "/");
105 return "/" + StringUtils.substringAfter(nodeNameWithSlashes, "/");
106 }
107 }