|
29 | 29 | import com.cognifide.apm.core.Apm;
|
30 | 30 | import com.cognifide.apm.core.Property;
|
31 | 31 | import com.cognifide.apm.core.launchers.ApmInstallService;
|
| 32 | +import com.cognifide.apm.core.ui.models.ScriptsRowModel; |
32 | 33 | import com.cognifide.apm.core.utils.sling.SlingHelper;
|
| 34 | +import com.day.cq.commons.jcr.JcrConstants; |
33 | 35 | import java.text.SimpleDateFormat;
|
34 | 36 | import java.util.Dictionary;
|
35 | 37 | import java.util.HashMap;
|
|
38 | 40 | import java.util.Map;
|
39 | 41 | import java.util.Objects;
|
40 | 42 | import org.apache.commons.lang3.StringUtils;
|
| 43 | +import org.apache.sling.api.resource.ModifiableValueMap; |
| 44 | +import org.apache.sling.api.resource.ValueMap; |
41 | 45 | import org.apache.sling.api.resource.observation.ResourceChange;
|
42 | 46 | import org.apache.sling.api.resource.observation.ResourceChangeListener;
|
43 | 47 | import org.osgi.framework.Bundle;
|
@@ -96,38 +100,48 @@ public void onChange(List<ResourceChange> changes) {
|
96 | 100 | Bundle currentBundle = FrameworkUtil.getBundle(ScriptsResourceChangeListener.class);
|
97 | 101 | BundleContext bundleContext = currentBundle.getBundleContext();
|
98 | 102 |
|
99 |
| - SlingHelper.operateTraced(resolverProvider, resolver -> |
100 |
| - changes.stream() |
101 |
| - .filter(change -> StringUtils.endsWith(change.getPath(), Apm.FILE_EXT)) |
102 |
| - .forEach(change -> { |
103 |
| - if (change.getType() == ResourceChange.ChangeType.ADDED) { |
104 |
| - Script script = scriptFinder.find(change.getPath(), resolver); |
| 103 | + SlingHelper.operateTraced(resolverProvider, resolver -> { |
| 104 | + // rename copy/paste folders |
| 105 | + changes.stream() |
| 106 | + .filter(change -> change.getType() == ResourceChange.ChangeType.ADDED) |
| 107 | + .map(change -> resolver.getResource(change.getPath())) |
| 108 | + .filter(ScriptsRowModel::isFolder) |
| 109 | + .forEach(resource -> { |
| 110 | + ValueMap valueMap = resource.adaptTo(ModifiableValueMap.class); |
| 111 | + valueMap.put(JcrConstants.JCR_TITLE, resource.getName()); |
| 112 | + }); |
| 113 | + //register schedule or cron expression scripts |
| 114 | + changes.stream() |
| 115 | + .filter(change -> StringUtils.endsWith(change.getPath(), Apm.FILE_EXT)) |
| 116 | + .forEach(change -> { |
| 117 | + if (change.getType() == ResourceChange.ChangeType.ADDED) { |
| 118 | + Script script = scriptFinder.find(change.getPath(), resolver); |
| 119 | + if (onScheduleOrCronExpression(runModesProvider).test(script)) { |
| 120 | + registerScript(script, bundleContext); |
| 121 | + } |
| 122 | + } else if (change.getType() == ResourceChange.ChangeType.REMOVED) { |
| 123 | + RegisterScript registeredScript = registeredScripts.get(change.getPath()); |
| 124 | + if (registeredScript != null) { |
| 125 | + registeredScript.registration.unregister(); |
| 126 | + registeredScripts.remove(change.getPath()); |
| 127 | + } |
| 128 | + } else if (change.getType() == ResourceChange.ChangeType.CHANGED) { |
| 129 | + Script script = scriptFinder.find(change.getPath(), resolver); |
| 130 | + RegisterScript registeredScript = registeredScripts.get(change.getPath()); |
| 131 | + if (registeredScript == null) { |
105 | 132 | if (onScheduleOrCronExpression(runModesProvider).test(script)) {
|
106 | 133 | registerScript(script, bundleContext);
|
107 | 134 | }
|
108 |
| - } else if (change.getType() == ResourceChange.ChangeType.REMOVED) { |
109 |
| - RegisterScript registeredScript = registeredScripts.get(change.getPath()); |
110 |
| - if (registeredScript != null) { |
111 |
| - registeredScript.registration.unregister(); |
112 |
| - registeredScripts.remove(change.getPath()); |
113 |
| - } |
114 |
| - } else if (change.getType() == ResourceChange.ChangeType.CHANGED) { |
115 |
| - Script script = scriptFinder.find(change.getPath(), resolver); |
116 |
| - RegisterScript registeredScript = registeredScripts.get(change.getPath()); |
117 |
| - if (registeredScript == null) { |
118 |
| - if (onScheduleOrCronExpression(runModesProvider).test(script)) { |
119 |
| - registerScript(script, bundleContext); |
120 |
| - } |
121 |
| - } else if (!Objects.equals(script, registeredScript.script)) { |
122 |
| - registeredScript.registration.unregister(); |
123 |
| - registeredScripts.remove(change.getPath()); |
124 |
| - if (onScheduleOrCronExpression(runModesProvider).test(script)) { |
125 |
| - registerScript(script, bundleContext); |
126 |
| - } |
| 135 | + } else if (!Objects.equals(script, registeredScript.script)) { |
| 136 | + registeredScript.registration.unregister(); |
| 137 | + registeredScripts.remove(change.getPath()); |
| 138 | + if (onScheduleOrCronExpression(runModesProvider).test(script)) { |
| 139 | + registerScript(script, bundleContext); |
127 | 140 | }
|
128 | 141 | }
|
129 |
| - }) |
130 |
| - ); |
| 142 | + } |
| 143 | + }); |
| 144 | + }); |
131 | 145 | }
|
132 | 146 |
|
133 | 147 | private void registerScript(Script script, BundleContext bundleContext) {
|
|
0 commit comments