Skip to content

Commit

Permalink
#27 Now loading assets with XCC by default and using XccAssetLoader
Browse files Browse the repository at this point in the history
  • Loading branch information
rjrudin committed Jun 15, 2015
1 parent 268f0af commit 9b9dcba
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 12 deletions.
29 changes: 27 additions & 2 deletions src/main/java/com/marklogic/appdeployer/AppConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,14 @@ public class AppConfig {
private String host = "localhost";

// User/password for authenticating against the REST API
private String username = "admin";
private String password = "admin";
private String username;
private String password;
private Authentication authentication = Authentication.DIGEST;

// User/password for making XDBC calls, usually against port 8000
private String xdbcUsername;
private String xdbcPassword;

private Integer restPort;
private Integer testRestPort;

Expand All @@ -36,6 +40,11 @@ public AppConfig(String defaultModulePath) {
modulePaths = new ArrayList<String>();
modulePaths.add(defaultModulePath);
configDir = new ConfigDir();

this.username = "admin";
this.password = "admin";
this.xdbcUsername = username;
this.xdbcPassword = password;
}

public boolean isTestPortSet() {
Expand Down Expand Up @@ -186,4 +195,20 @@ public void setDependencyConfigDirs(List<ConfigDir> dependencyConfigDirs) {
this.dependencyConfigDirs = dependencyConfigDirs;
}

public String getXdbcUsername() {
return xdbcUsername;
}

public void setXdbcUsername(String xdbcUsername) {
this.xdbcUsername = xdbcUsername;
}

public String getXdbcPassword() {
return xdbcPassword;
}

public void setXdbcPassword(String xdbcPassword) {
this.xdbcPassword = xdbcPassword;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.marklogic.appdeployer.command.modules;

import com.marklogic.appdeployer.AppConfig;
import com.marklogic.appdeployer.command.AbstractCommand;
import com.marklogic.appdeployer.command.CommandContext;
import com.marklogic.appdeployer.command.SortOrderConstants;
import com.marklogic.clientutil.modulesloader.impl.XccAssetLoader;

/**
* Command for loading assets via XCC from a directory that doesn't fit the REST API structure, where assets are
* expected to be in a directory named "ext".
*/
public class LoadAssetsViaXccCommand extends AbstractCommand {

// The list of asset paths to load modules from
private String[] assetPaths;

// Default permissions and collections for each module
private String permissions = "rest-admin,read,rest-admin,update,rest-extension-user,execute";
private String[] collections;

public LoadAssetsViaXccCommand(String... assetPaths) {
this.assetPaths = assetPaths;
}

@Override
public Integer getExecuteSortOrder() {
return SortOrderConstants.LOAD_MODULES_ORDER - 10;
}

@Override
public void execute(CommandContext context) {
AppConfig config = context.getAppConfig();

XccAssetLoader loader = new XccAssetLoader();
loader.setUsername(config.getXdbcUsername());
loader.setPassword(config.getXdbcPassword());
loader.setHost(config.getHost());
loader.setDatabaseName(config.getModulesDatabaseName());
if (permissions != null) {
loader.setPermissions(permissions);
}
if (collections != null) {
loader.setCollections(collections);
}

loader.loadAssetsViaXcc(assetPaths);
}

public void setPermissions(String permissions) {
this.permissions = permissions;
}

public void setCollections(String[] collections) {
this.collections = collections;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,19 @@
import com.marklogic.client.DatabaseClient;
import com.marklogic.client.DatabaseClientFactory;
import com.marklogic.clientutil.modulesloader.ModulesLoader;
import com.marklogic.clientutil.modulesloader.impl.DefaultExtensionLibraryDescriptorBuilder;
import com.marklogic.clientutil.modulesloader.impl.DefaultModulesLoader;
import com.marklogic.clientutil.modulesloader.impl.XccAssetLoader;

/**
* By default, uses XCC to load modules, as that's normally much faster than using the /v1/ext REST API endpoint.
*/
public class LoadModulesCommand extends AbstractCommand {

private ModulesLoader modulesLoader;
private String assetRolesAndCapabilities;

// As defined by the REST API
private String defaultAssetRolesAndCapabilities = "rest-admin,read,rest-admin,update,rest-extension-user,execute";
private String customAssetRolesAndCapabilities;

@Override
public Integer getExecuteSortOrder() {
Expand All @@ -26,11 +32,7 @@ public Integer getExecuteSortOrder() {
public void execute(CommandContext context) {
if (modulesLoader == null) {
DefaultModulesLoader l = new DefaultModulesLoader();
if (assetRolesAndCapabilities != null) {
logger.info("Will load asset modules with roles and capabilities of: " + assetRolesAndCapabilities);
l.setExtensionLibraryDescriptorBuilder(new DefaultExtensionLibraryDescriptorBuilder(
assetRolesAndCapabilities));
}
l.setXccAssetLoader(newXccAssetLoader(context));
this.modulesLoader = l;
}

Expand All @@ -45,11 +47,40 @@ public void execute(CommandContext context) {
}
}

protected XccAssetLoader newXccAssetLoader(CommandContext context) {
XccAssetLoader l = new XccAssetLoader();
AppConfig config = context.getAppConfig();
l.setHost(config.getHost());
l.setUsername(config.getXdbcUsername());
l.setPassword(config.getXdbcPassword());
l.setDatabaseName(config.getModulesDatabaseName());

String permissions = null;
if (defaultAssetRolesAndCapabilities != null) {
permissions = defaultAssetRolesAndCapabilities;
if (customAssetRolesAndCapabilities != null) {
permissions += "," + customAssetRolesAndCapabilities;
}
} else {
permissions = customAssetRolesAndCapabilities;
}

if (permissions != null) {
logger.info("Will load asset modules with roles and capabilities of: " + permissions);
l.setPermissions(permissions);
}
return l;
}

public void setModulesLoader(ModulesLoader modulesLoader) {
this.modulesLoader = modulesLoader;
}

public void setAssetRolesAndCapabilities(String modulePermissions) {
this.assetRolesAndCapabilities = modulePermissions;
public void setCustomAssetRolesAndCapabilities(String customAssetRolesAndCapabilities) {
this.customAssetRolesAndCapabilities = customAssetRolesAndCapabilities;
}

public void setDefaultAssetRolesAndCapabilities(String defaultAssetRolesAndCapabilities) {
this.defaultAssetRolesAndCapabilities = defaultAssetRolesAndCapabilities;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void loadModulesFromMultiplePaths() {
@Test
public void loadModulesWithCustomPermissions() {
LoadModulesCommand c = new LoadModulesCommand();
c.setAssetRolesAndCapabilities("app-user,execute");
c.setCustomAssetRolesAndCapabilities("app-user,execute");

initializeAppDeployer(new CreateRestApiServersCommand(), c);

Expand Down

0 comments on commit 9b9dcba

Please sign in to comment.