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

Commit 4188b49

Browse files
committed
#374 Database resources can now be associated with a database via a matching filename
1 parent d835dda commit 4188b49

File tree

17 files changed

+96
-15
lines changed

17 files changed

+96
-15
lines changed

src/main/java/com/marklogic/appdeployer/command/AbstractCommand.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.marklogic.appdeployer.command;
22

33
import com.fasterxml.jackson.databind.node.ObjectNode;
4+
import com.marklogic.appdeployer.ConfigDir;
45
import com.marklogic.client.ext.helper.LoggingObject;
56
import com.marklogic.mgmt.PayloadParser;
67
import com.marklogic.mgmt.SaveReceipt;
@@ -13,6 +14,7 @@
1314
import com.marklogic.mgmt.mapper.DefaultResourceMapper;
1415
import com.marklogic.mgmt.mapper.ResourceMapper;
1516
import com.marklogic.mgmt.resource.ResourceManager;
17+
import com.marklogic.mgmt.resource.databases.DatabaseManager;
1618
import com.marklogic.mgmt.util.ObjectMapperFactory;
1719
import com.marklogic.rest.util.JsonNodeUtil;
1820
import com.marklogic.rest.util.PropertyBasedBiPredicate;
@@ -504,6 +506,44 @@ protected void setIncrementalMode(boolean incrementalMode) {
504506
}
505507
}
506508

509+
/**
510+
* By default, the name of a database resource directory is assumed to be the name of the database that the resources
511+
* within the directory should be associated with. But starting in 3.16.0, if the name of the directory doesn't
512+
* match that of an existing database, then a check is made to see if there's a database file in the given ConfigDir
513+
* that has the same name, minus its extension, as the database directory name. If so, then the database-name is
514+
* extracted from that file and used as the database name. If not, an exception is thrown.
515+
*
516+
* @param context
517+
* @param configDir
518+
* @param databaseResourceDir
519+
* @return
520+
*/
521+
protected String determineDatabaseNameForDatabaseResourceDirectory(CommandContext context, ConfigDir configDir, File databaseResourceDir) {
522+
final String dirName = databaseResourceDir.getName();
523+
524+
if (new DatabaseManager(context.getManageClient()).exists(dirName)) {
525+
return dirName;
526+
}
527+
528+
File databasesDir = configDir.getDatabasesDir();
529+
for (File f : listFilesInDirectory(databasesDir)) {
530+
String name = f.getName();
531+
int index = name.lastIndexOf('.');
532+
name = index > 0 ? name.substring(0, index) : name;
533+
if (dirName.equals(name)) {
534+
logger.info("Found database file with same name, minus its extension, as the database resource directory; " +
535+
"file: " + f);
536+
String payload = copyFileToString(f, context);
537+
String databaseName = new PayloadParser().getPayloadFieldValue(payload, "database-name");
538+
logger.info("Associating database resource directory with database: " + databaseName);
539+
return databaseName;
540+
}
541+
}
542+
543+
throw new RuntimeException("Could not determine database to associate with database resource directory: " +
544+
databaseResourceDir);
545+
}
546+
507547
public void setPayloadTokenReplacer(PayloadTokenReplacer payloadTokenReplacer) {
508548
this.payloadTokenReplacer = payloadTokenReplacer;
509549
}

src/main/java/com/marklogic/appdeployer/command/AbstractResourceCommand.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.marklogic.appdeployer.ConfigDir;
66
import com.marklogic.mgmt.SaveReceipt;
77
import com.marklogic.mgmt.api.configuration.Configuration;
8-
import com.marklogic.mgmt.api.configuration.Configurations;
98
import com.marklogic.mgmt.resource.ResourceManager;
109

1110
import java.io.File;

src/main/java/com/marklogic/appdeployer/command/alert/DeployAlertActionsCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ public void execute(CommandContext context) {
3333
AppConfig appConfig = context.getAppConfig();
3434
for (ConfigDir configDir : appConfig.getConfigDirs()) {
3535
deployActions(context, configDir, appConfig.getContentDatabaseName());
36-
3736
for (File dir : configDir.getDatabaseResourceDirectories()) {
38-
deployActions(context, new ConfigDir(dir), dir.getName());
37+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
38+
deployActions(context, new ConfigDir(dir), databaseName);
3939
}
4040
}
4141
}

src/main/java/com/marklogic/appdeployer/command/alert/DeployAlertConfigsCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public void execute(CommandContext context) {
2525
for (ConfigDir configDir : appConfig.getConfigDirs()) {
2626
deployAlertConfigs(context, configDir, appConfig.getContentDatabaseName());
2727
for (File dir : configDir.getDatabaseResourceDirectories()) {
28-
deployAlertConfigs(context, new ConfigDir(dir), dir.getName());
28+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
29+
deployAlertConfigs(context, new ConfigDir(dir), databaseName);
2930
}
3031
}
3132
}

src/main/java/com/marklogic/appdeployer/command/alert/DeployAlertRulesCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public void execute(CommandContext context) {
2727
for (ConfigDir configDir : appConfig.getConfigDirs()) {
2828
deployRules(context, configDir, appConfig.getContentDatabaseName());
2929
for (File dir : configDir.getDatabaseResourceDirectories()) {
30-
deployRules(context, new ConfigDir(dir), dir.getName());
30+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
31+
deployRules(context, new ConfigDir(dir), databaseName);
3132
}
3233
}
3334
}

src/main/java/com/marklogic/appdeployer/command/flexrep/DeployConfigsCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ public void execute(CommandContext context) {
3232
for (ConfigDir configDir : appConfig.getConfigDirs()) {
3333
deployConfigs(context, configDir, appConfig.getContentDatabaseName());
3434
for (File dir : configDir.getDatabaseResourceDirectories()) {
35-
deployConfigs(context, new ConfigDir(dir), dir.getName());
35+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
36+
deployConfigs(context, new ConfigDir(dir), databaseName);
3637
}
3738
}
3839
}

src/main/java/com/marklogic/appdeployer/command/flexrep/DeployPullsCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ public void execute(CommandContext context) {
3434
for (ConfigDir configDir : appConfig.getConfigDirs()) {
3535
deployFlexRepPulls(context, configDir, appConfig.getContentDatabaseName());
3636
for (File dir : configDir.getDatabaseResourceDirectories()) {
37-
deployFlexRepPulls(context, new ConfigDir(dir), dir.getName());
37+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
38+
deployFlexRepPulls(context, new ConfigDir(dir), databaseName);
3839
}
3940
}
4041
}

src/main/java/com/marklogic/appdeployer/command/flexrep/DeployTargetsCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public void execute(CommandContext context) {
3636
for (ConfigDir configDir : appConfig.getConfigDirs()) {
3737
deployTargets(context, configDir, appConfig.getContentDatabaseName());
3838
for (File dir : configDir.getDatabaseResourceDirectories()) {
39-
deployTargets(context, new ConfigDir(dir), dir.getName());
39+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
40+
deployTargets(context, new ConfigDir(dir), databaseName);
4041
}
4142
}
4243
}

src/main/java/com/marklogic/appdeployer/command/schemas/LoadSchemasCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ protected void loadSchemasFromDatabaseSpecificPaths(CommandContext context) {
5454
configDir.getDatabaseResourceDirectories().forEach(dir -> {
5555
File schemasDir = new File(dir, "schemas");
5656
if (schemasDir.exists()) {
57-
loadSchemas(schemasDir.getAbsolutePath(), dir.getName(), context);
57+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
58+
loadSchemas(schemasDir.getAbsolutePath(), databaseName, context);
5859
}
5960
});
6061
});

src/main/java/com/marklogic/appdeployer/command/temporal/DeployTemporalAxesCommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public void execute(CommandContext context) {
2727
for (ConfigDir configDir : appConfig.getConfigDirs()) {
2828
deployTemporalAxes(context, configDir, appConfig.getContentDatabaseName());
2929
for (File dir : configDir.getDatabaseResourceDirectories()) {
30-
deployTemporalAxes(context, new ConfigDir(dir), dir.getName());
30+
String databaseName = determineDatabaseNameForDatabaseResourceDirectory(context, configDir, dir);
31+
deployTemporalAxes(context, new ConfigDir(dir), databaseName);
3132
}
3233
}
3334
}

0 commit comments

Comments
 (0)