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

Commit 57a8aa7

Browse files
authored
Merge pull request #493 from marklogic/feature/cascade
DEVEXP-527 Added properties for cascading collections and permissions
2 parents 8526037 + 7bd9eae commit 57a8aa7

File tree

10 files changed

+108
-2
lines changed

10 files changed

+108
-2
lines changed

src/main/java/com/marklogic/appdeployer/AppConfig.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@ public class AppConfig {
155155
private String cpfDatabaseName;
156156
private String schemasDatabaseName;
157157

158+
// Since 4.6.0; affects loading of modules, schemas, and data.
159+
// Disabled by default for backwards compatibility; will likely default to true in 5.0.0 release.
160+
private boolean cascadeCollections;
161+
private boolean cascadePermissions;
162+
158163
private List<String> modulePaths;
159164
private boolean staticCheckAssets = false;
160165
private boolean staticCheckLibraryAssets = false;
@@ -1535,4 +1540,20 @@ public String getAppServicesSamlToken() {
15351540
public void setAppServicesSamlToken(String appServicesSamlToken) {
15361541
this.appServicesSamlToken = appServicesSamlToken;
15371542
}
1543+
1544+
public boolean isCascadeCollections() {
1545+
return cascadeCollections;
1546+
}
1547+
1548+
public void setCascadeCollections(boolean cascadeCollections) {
1549+
this.cascadeCollections = cascadeCollections;
1550+
}
1551+
1552+
public boolean isCascadePermissions() {
1553+
return cascadePermissions;
1554+
}
1555+
1556+
public void setCascadePermissions(boolean cascadePermissions) {
1557+
this.cascadePermissions = cascadePermissions;
1558+
}
15381559
}

src/main/java/com/marklogic/appdeployer/DefaultAppConfigFactory.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,16 @@ public void initialize() {
791791
config.setModulesLoaderBatchSize(Integer.parseInt(prop));
792792
});
793793

794+
propertyConsumerMap.put("mlCascadeCollections", (config, prop) -> {
795+
logger.info("Cascade collections.properties configuration when loading data, modules, and schemas: " + prop);
796+
config.setCascadeCollections(Boolean.parseBoolean(prop));
797+
});
798+
799+
propertyConsumerMap.put("mlCascadePermissions", (config, prop) -> {
800+
logger.info("Cascade permissions.properties configuration when loading data, modules, and schemas: " + prop);
801+
config.setCascadePermissions(Boolean.parseBoolean(prop));
802+
});
803+
794804
/**
795805
* The following properties are all for generating Entity Services artifacts.
796806
*/

src/main/java/com/marklogic/appdeployer/command/data/LoadDataCommand.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ protected FileLoader buildFileLoader(AppConfig appConfig) {
7070
final DatabaseClient client = determineDatabaseClient(appConfig);
7171
final GenericFileLoader loader = new GenericFileLoader(client);
7272

73+
loader.setCascadeCollections(appConfig.isCascadeCollections());
74+
loader.setCascadePermissions(appConfig.isCascadePermissions());
75+
7376
DataConfig dataConfig = appConfig.getDataConfig();
7477

7578
final Integer batchSize = dataConfig.getBatchSize();

src/main/java/com/marklogic/appdeployer/command/modules/DefaultModulesLoaderFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public ModulesLoader newModulesLoader(AppConfig appConfig) {
5959
RestBatchWriter assetBatchWriter = new RestBatchWriter(modulesDatabaseClient, false);
6060
assetBatchWriter.setThreadCount(threadCount);
6161
AssetFileLoader assetFileLoader = new AssetFileLoader(assetBatchWriter, modulesManager);
62+
assetFileLoader.setCascadeCollections(appConfig.isCascadeCollections());
63+
assetFileLoader.setCascadePermissions(appConfig.isCascadePermissions());
6264
if (appConfig.getModulesLoaderBatchSize() != null) {
6365
assetFileLoader.setBatchSize(appConfig.getModulesLoaderBatchSize());
6466
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ protected SchemasLoader buildSchemasLoader(CommandContext context, DatabaseClien
124124
}
125125

126126
DefaultSchemasLoader schemasLoader = new DefaultSchemasLoader(client, tdeValidationDatabase);
127+
schemasLoader.setCascadeCollections(appConfig.isCascadeCollections());
128+
schemasLoader.setCascadePermissions(appConfig.isCascadePermissions());
127129
FileFilter filter = appConfig.getSchemasFileFilter();
128130
if (filter != null) {
129131
schemasLoader.addFileFilter(filter);

src/test/java/com/marklogic/appdeployer/AbstractAppDeployerTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,8 @@ protected final void configureRestServersToNotRequireSSL() {
144144
payload.put("server-name", SAMPLE_APP_NAME + "-test");
145145
mgr.save(payload.toString());
146146
}
147+
148+
protected final CommandContext newCommandContext() {
149+
return new CommandContext(appConfig, manageClient, adminManager);
150+
}
147151
}

src/test/java/com/marklogic/appdeployer/DefaultAppConfigFactoryTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,10 @@ public void mostProperties() {
393393

394394
p.setProperty("mlUpdateMimetypeWhenPropertiesAreEqual", "true");
395395

396+
// 4.6.0
397+
p.setProperty("mlCascadeCollections", "true");
398+
p.setProperty("mlCascadePermissions", "true");
399+
396400
sut = new DefaultAppConfigFactory(new SimplePropertySource(p));
397401
AppConfig config = sut.newAppConfig();
398402

@@ -565,6 +569,9 @@ public void mostProperties() {
565569
assertEquals("other-group", map.get("host2"));
566570

567571
assertTrue(config.isUpdateMimetypeWhenPropertiesAreEqual());
572+
573+
assertTrue(config.isCascadeCollections());
574+
assertTrue(config.isCascadePermissions());
568575
}
569576

570577
/**

src/test/java/com/marklogic/appdeployer/command/data/LoadDataTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,19 @@
2020
import com.marklogic.appdeployer.command.restapis.DeployRestApiServersCommand;
2121
import com.marklogic.client.DatabaseClient;
2222
import com.marklogic.client.document.GenericDocumentManager;
23+
import com.marklogic.client.ext.file.GenericFileLoader;
2324
import com.marklogic.client.io.DocumentMetadataHandle;
2425
import org.junit.jupiter.api.AfterEach;
2526
import org.junit.jupiter.api.Test;
2627

2728
import java.io.File;
2829
import java.util.Set;
2930

30-
import static org.junit.jupiter.api.Assertions.*;
31+
import static org.junit.jupiter.api.Assertions.assertEquals;
32+
import static org.junit.jupiter.api.Assertions.assertFalse;
33+
import static org.junit.jupiter.api.Assertions.assertNotNull;
34+
import static org.junit.jupiter.api.Assertions.assertNull;
35+
import static org.junit.jupiter.api.Assertions.assertTrue;
3136

3237
public class LoadDataTest extends AbstractAppDeployerTest {
3338

@@ -92,4 +97,18 @@ public void databaseNameIsSet() {
9297
assertEquals(appConfig.getAppServicesPort(), client.getPort());
9398
client.release();
9499
}
100+
101+
/**
102+
* Just verifies the config; we assume that ml-javaclient-util will work properly if cascade is set to true.
103+
*/
104+
@Test
105+
void cascadeCollectionsAndPermissions() {
106+
appConfig.setCascadePermissions(true);
107+
appConfig.setCascadeCollections(true);
108+
109+
GenericFileLoader loader = (GenericFileLoader) new LoadDataCommand().buildFileLoader(appConfig);
110+
111+
assertTrue(loader.isCascadeCollections());
112+
assertTrue(loader.isCascadePermissions());
113+
}
95114
}

src/test/java/com/marklogic/appdeployer/command/modules/DefaultsModulesLoaderFactoryTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import org.junit.jupiter.api.Test;
2222

2323
import static org.junit.jupiter.api.Assertions.assertEquals;
24+
import static org.junit.jupiter.api.Assertions.assertFalse;
2425
import static org.junit.jupiter.api.Assertions.assertNull;
26+
import static org.junit.jupiter.api.Assertions.assertTrue;
2527

2628
public class DefaultsModulesLoaderFactoryTest extends AbstractAppDeployerTest {
2729

@@ -43,4 +45,20 @@ public void dontUseHost() {
4345
PropertiesModuleManager manager = (PropertiesModuleManager) loader.getModulesManager();
4446
assertNull(manager.getHost());
4547
}
48+
49+
@Test
50+
void cascadeCollectionsAndPermissions() {
51+
DefaultModulesLoader loader = (DefaultModulesLoader) factory.newModulesLoader(appConfig);
52+
53+
// Should default to false in the 4.x timeframe
54+
assertFalse(loader.getAssetFileLoader().isCascadeCollections());
55+
assertFalse(loader.getAssetFileLoader().isCascadePermissions());
56+
57+
appConfig.setCascadeCollections(true);
58+
appConfig.setCascadePermissions(true);
59+
60+
loader = (DefaultModulesLoader) factory.newModulesLoader(appConfig);
61+
assertTrue(loader.getAssetFileLoader().isCascadeCollections());
62+
assertTrue(loader.getAssetFileLoader().isCascadePermissions());
63+
}
4664
}

src/test/java/com/marklogic/appdeployer/command/schemas/LoadSchemasTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.marklogic.appdeployer.command.databases.DeployOtherDatabasesCommand;
2121
import com.marklogic.client.DatabaseClient;
2222
import com.marklogic.client.document.GenericDocumentManager;
23+
import com.marklogic.client.ext.schemasloader.impl.DefaultSchemasLoader;
2324
import com.marklogic.client.io.BytesHandle;
2425
import com.marklogic.client.io.DocumentMetadataHandle;
2526
import org.junit.jupiter.api.AfterEach;
@@ -28,7 +29,11 @@
2829
import java.io.File;
2930
import java.io.FileFilter;
3031

31-
import static org.junit.jupiter.api.Assertions.*;
32+
import static org.junit.jupiter.api.Assertions.assertEquals;
33+
import static org.junit.jupiter.api.Assertions.assertNotNull;
34+
import static org.junit.jupiter.api.Assertions.assertNull;
35+
import static org.junit.jupiter.api.Assertions.assertTrue;
36+
import static org.junit.jupiter.api.Assertions.fail;
3237

3338
public class LoadSchemasTest extends AbstractAppDeployerTest {
3439

@@ -162,6 +167,21 @@ public void multipleSchemaPaths() {
162167
assertTrue(docMgr.readMetadata("/tde/template2.json", new DocumentMetadataHandle()).getCollections().contains("http://marklogic.com/xdmp/tde"));
163168
}
164169

170+
/**
171+
* Just verifies the config; we assume that ml-javaclient-util will work properly if cascade is set to true.
172+
*/
173+
@Test
174+
void cascadeCollectionsAndPermissions() {
175+
appConfig.setCascadePermissions(true);
176+
appConfig.setCascadeCollections(true);
177+
178+
DefaultSchemasLoader loader = (DefaultSchemasLoader) new LoadSchemasCommand().buildSchemasLoader(
179+
newCommandContext(), appConfig.newSchemasDatabaseClient(), null);
180+
181+
assertTrue(loader.isCascadeCollections());
182+
assertTrue(loader.isCascadePermissions());
183+
}
184+
165185
private Command newCommand() {
166186
return new LoadSchemasCommand();
167187
}

0 commit comments

Comments
 (0)