Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit e3bb5cd

Browse files
committed
#237 Can now export triggers
1 parent 8cfa7d7 commit e3bb5cd

File tree

7 files changed

+105
-2
lines changed

7 files changed

+105
-2
lines changed

src/main/java/com/marklogic/appdeployer/export/Exporter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.marklogic.appdeployer.export.security.RoleExporter;
1313
import com.marklogic.appdeployer.export.security.UserExporter;
1414
import com.marklogic.appdeployer.export.tasks.TaskExporter;
15+
import com.marklogic.appdeployer.export.triggers.TriggerExporter;
1516
import com.marklogic.client.ext.helper.LoggingObject;
1617
import com.marklogic.mgmt.ManageClient;
1718
import com.marklogic.mgmt.selector.ResourceSelection;
@@ -55,12 +56,14 @@ public Exporter select(ResourceSelector selector) {
5556
cpfConfigs(triggersDatabase, selection.getCpfConfigNames());
5657
databases(selection.getDatabaseNames());
5758
domains(triggersDatabase, selection.getDomainNames());
59+
groups(selection.getGroupNames());
5860
pipelines(triggersDatabase, selection.getPipelineNames());
5961
privilegesExecute(selection.getPrivilegeExecuteNames());
6062
privilegesUri(selection.getPrivilegeUriNames());
6163
roles(selection.getRoleNames());
6264
servers(selection.getServerNames());
6365
tasks(selection.getTaskNames());
66+
triggers(triggersDatabase, selection.getTriggerNames());
6467
users(selection.getUserNames());
6568
return this;
6669
}
@@ -157,6 +160,10 @@ public Exporter tasks(String... taskNames) {
157160
return this;
158161
}
159162

163+
public Exporter triggers(String databaseIdOrName, String... triggerNames) {
164+
return (triggerNames != null && triggerNames.length > 0) ? add(new TriggerExporter(manageClient, databaseIdOrName, triggerNames)) : null;
165+
}
166+
160167
public Exporter users(String... usernames) {
161168
return (usernames != null && usernames.length > 0) ? add(new UserExporter(manageClient, usernames)) : null;
162169
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.marklogic.appdeployer.export.triggers;
2+
3+
import com.marklogic.appdeployer.ConfigDir;
4+
import com.marklogic.appdeployer.export.impl.AbstractNamedResourceExporter;
5+
import com.marklogic.appdeployer.export.impl.ExportInputs;
6+
import com.marklogic.mgmt.ManageClient;
7+
import com.marklogic.mgmt.resource.ResourceManager;
8+
import com.marklogic.mgmt.resource.triggers.TriggerManager;
9+
10+
import java.io.File;
11+
12+
public class TriggerExporter extends AbstractNamedResourceExporter {
13+
14+
private String databaseIdOrName;
15+
16+
public TriggerExporter(ManageClient manageClient, String databaseIdOrName, String... triggerNames) {
17+
super(manageClient, triggerNames);
18+
this.databaseIdOrName = databaseIdOrName;
19+
}
20+
21+
@Override
22+
protected String[] getExportMessages() {
23+
return new String[]{"Each exported trigger has the 'id' field removed from it, as that field should be generated by MarkLogic."};
24+
}
25+
26+
@Override
27+
protected String beforeResourceWrittenToFile(ExportInputs exportInputs, String payload) {
28+
return removeJsonKeyFromPayload(payload, "id");
29+
}
30+
31+
@Override
32+
protected ResourceManager newResourceManager(ManageClient manageClient) {
33+
return new TriggerManager(manageClient, databaseIdOrName);
34+
}
35+
36+
@Override
37+
protected File getResourceDirectory(File baseDir) {
38+
return new ConfigDir(baseDir).getTriggersDir();
39+
}
40+
41+
}

src/main/java/com/marklogic/mgmt/selector/MapResourceSelection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ public String[] getTaskNames() {
8484
return getSelectedResourceNames(TASKS);
8585
}
8686

87+
@Override
88+
public String[] getTriggerNames() {
89+
return getSelectedResourceNames(TRIGGERS);
90+
}
91+
8792
@Override
8893
public String[] getUserNames() {
8994
return getSelectedResourceNames(USERS);

src/main/java/com/marklogic/mgmt/selector/ResourceSelection.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public interface ResourceSelection {
1313
String ROLES = "roles";
1414
String SERVERS = "servers";
1515
String TASKS = "tasks";
16+
String TRIGGERS = "triggers";
1617
String USERS = "users";
1718

1819
String[] getCpfConfigNames();
@@ -35,6 +36,8 @@ public interface ResourceSelection {
3536

3637
String[] getTaskNames();
3738

39+
String[] getTriggerNames();
40+
3841
String[] getUserNames();
3942

4043
/**

src/test/java/com/marklogic/appdeployer/command/triggers/ManageTriggersTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class ManageTriggersTest extends AbstractManageResourceTest {
1313
@Override
1414
protected void initializeAndDeploy() {
1515
initializeAppDeployer(new DeploySchemasDatabaseCommand(), new DeployTriggersDatabaseCommand(),
16-
new DeployContentDatabasesCommand(), newCommand());
16+
new DeployContentDatabasesCommand(1), newCommand());
1717
appDeployer.deploy(appConfig);
1818
}
1919

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.marklogic.appdeployer.export;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.marklogic.appdeployer.command.databases.DeployContentDatabasesCommand;
5+
import com.marklogic.appdeployer.command.databases.DeploySchemasDatabaseCommand;
6+
import com.marklogic.appdeployer.command.databases.DeployTriggersDatabaseCommand;
7+
import com.marklogic.appdeployer.command.triggers.DeployTriggersCommand;
8+
import com.marklogic.mgmt.selector.PropertiesResourceSelector;
9+
import org.junit.After;
10+
import org.junit.Test;
11+
12+
import java.io.File;
13+
import java.util.Properties;
14+
15+
public class ExportTriggersTest extends AbstractExportTest {
16+
17+
@After
18+
public void teardown() {
19+
undeploySampleApp();
20+
}
21+
22+
@Test
23+
public void test() throws Exception {
24+
initializeAppDeployer(new DeploySchemasDatabaseCommand(), new DeployTriggersDatabaseCommand(),
25+
new DeployContentDatabasesCommand(1), new DeployTriggersCommand());
26+
appDeployer.deploy(appConfig);
27+
28+
Properties props = new Properties();
29+
props.setProperty("triggers", "my-trigger");
30+
31+
ExportedResources resources = new Exporter(manageClient)
32+
.withTriggersDatabase(appConfig.getTriggersDatabaseName())
33+
.select(new PropertiesResourceSelector(props))
34+
.export(exportDir);
35+
36+
assertEquals(1, resources.getMessages().size());
37+
assertEquals("Each exported trigger has the 'id' field removed from it, as that field should be generated by MarkLogic.",
38+
resources.getMessages().get(0));
39+
40+
assertEquals(1, resources.getFiles().size());
41+
42+
File triggerFile = new File(exportDir, "triggers/my-trigger.json");
43+
JsonNode json = objectMapper.readTree(triggerFile);
44+
assertNull(json.get("id"));
45+
assertEquals("my-trigger", json.get("name").asText());
46+
}
47+
}

src/test/resources/sample-app/src/main/ml-config/triggers/my-trigger.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@
1919
"enabled": true,
2020
"recursive": true,
2121
"task-priority": "normal"
22-
}
22+
}

0 commit comments

Comments
 (0)