if (isStandalone)
{
throw new IllegalStateException(
"DeploymentStore.loadContentRepository() must not be called in standalone mode!");
}
final ContentRepository contentRepository = new ContentRepository();
// load deployments, server groups and assignments in one composite
ModelNode operation = new ModelNode();
operation.get(ADDRESS).setEmptyList();
operation.get(OP).set(COMPOSITE);
List<ModelNode> steps = new LinkedList<ModelNode>();
ModelNode deploymentsOp = new ModelNode();
deploymentsOp.get(ADDRESS).setEmptyList();
deploymentsOp.get(OP).set(READ_CHILDREN_RESOURCES_OPERATION);
deploymentsOp.get(CHILD_TYPE).set("deployment");
steps.add(deploymentsOp);
ModelNode serverGroupsOp = new ModelNode();
serverGroupsOp.get(OP).set(READ_CHILDREN_RESOURCES_OPERATION);
serverGroupsOp.get(CHILD_TYPE).set("server-group");
steps.add(serverGroupsOp);
ModelNode assignmentOp = new ModelNode();
assignmentOp.get(ADDRESS).add("server-group", "*");
assignmentOp.get(ADDRESS).add("deployment", "*");
assignmentOp.get(OP).set(READ_RESOURCE_OPERATION);
steps.add(assignmentOp);
operation.get(STEPS).set(steps);
dispatcher.execute(new DMRAction(operation), new AsyncCallback<DMRResponse>()
{
@Override
public void onFailure(final Throwable caught)
{
callback.onFailure(caught);
}
@Override
public void onSuccess(final DMRResponse result)
{
ModelNode response = result.get();
if (response.isFailure())
{
callback.onFailure(new RuntimeException("Failed to load contents: "+response.getFailureDescription()));
}
else
{
ModelNode stepsResult = response.get(RESULT);
List<ModelNode> nodes = stepsResult.get("step-1").get(RESULT).asList();
for (ModelNode node : nodes)
{
DeploymentRecord deployment = mapDeployment(null, null, node);
contentRepository.addDeployment(deployment);
}
nodes = stepsResult.get("step-2").get(RESULT).asList();
for (ModelNode node : nodes)
{
Property property = node.asProperty();
ModelNode serverGroupNode = property.getValue().asObject();
ServerGroupRecord serverGroup = serverGroupRecordEntityAdapter.fromDMR(serverGroupNode);
serverGroup.setName(property.getName());
contentRepository.addServerGroup(serverGroup);
}
nodes = stepsResult.get("step-3").get(RESULT).asList();
for (ModelNode node : nodes)
{
String groupName = node.get(ADDRESS).asList().get(0).get("server-group").asString();
String deploymentName = node.get(ADDRESS).asList().get(1).get("deployment").asString();
DeploymentRecord dr = contentRepository.getDeployment(deploymentName);
dr.setServerGroup(groupName);
// The state of the deployment (enabled/disabled) is taken from this step!
dr.setEnabled(node.get(RESULT).get("enabled").asBoolean());
dr.setAddress(addressFor("server-group", groupName, "deployment", deploymentName));
contentRepository.assignDeploymentToServerGroup(deploymentName, groupName);
}
callback.onSuccess(contentRepository);
}