use of org.jboss.hal.ballroom.tree.Node in project console by hal.
the class ReadChildren method load.
@Override
@SuppressWarnings("unchecked")
public void load(final Node<Context> node, final ResultCallback<Context> callback) {
if (node.data.isFullyQualified()) {
Operation operation = new Operation.Builder(node.data.getAddress(), READ_CHILDREN_TYPES_OPERATION).param(INCLUDE_SINGLETONS, true).build();
dispatcher.execute(operation, result -> {
List<ModelNode> modelNodes = result.asList();
Multimap<String, String> resources = HashMultimap.create();
for (ModelNode modelNode : modelNodes) {
String name = modelNode.asString();
if (name.contains("=")) {
List<String> parts = Splitter.on('=').limit(2).splitToList(name);
resources.put(parts.get(0), parts.get(1));
} else {
resources.put(name, NO_SINGLETON);
}
}
List<Node<Context>> children = new ArrayList<>();
for (Map.Entry<String, Collection<String>> entry : resources.asMap().entrySet()) {
String name = entry.getKey();
Set<String> singletons = new HashSet<>(entry.getValue());
if (singletons.size() == 1 && singletons.contains(NO_SINGLETON)) {
singletons = Collections.emptySet();
}
ResourceAddress address = new ResourceAddress(node.data.getAddress()).add(name, "*");
Context context = new Context(address, singletons);
// ids need to be unique!
Node.Builder<Context> builder = new Node.Builder<>(uniqueId(node, name), name, context).asyncFolder();
if (!singletons.isEmpty()) {
builder.icon(fontAwesome("list-ul"));
}
children.add(builder.build());
}
callback.result(children.toArray(new Node[children.size()]));
});
} else {
ResourceAddress parentAddress = node.data.getAddress().getParent();
Operation operation = new Operation.Builder(parentAddress, READ_CHILDREN_NAMES_OPERATION).param(CHILD_TYPE, node.text).build();
dispatcher.execute(operation, result -> {
List<ModelNode> modelNodes = result.asList();
List<Node<Context>> children = new ArrayList<>();
SortedSet<String> singletons = new TreeSet<>(node.data.getSingletons());
// Add existing children
for (ModelNode modelNode : modelNodes) {
String name = SafeHtmlUtils.fromString(modelNode.asString()).asString();
singletons.remove(name);
ResourceAddress address = new ResourceAddress(parentAddress).add(node.text, name);
Context context = new Context(address, Collections.emptySet());
Node<Context> child = new Node.Builder<>(uniqueId(node, name), name, context).asyncFolder().icon(fontAwesome("file-text-o")).build();
children.add(child);
}
// Add non-existing singletons
for (String singleton : singletons) {
ResourceAddress address = new ResourceAddress(parentAddress).add(node.text, singleton);
Context context = new Context(address, Collections.emptySet());
Node<Context> child = new Node.Builder<>(uniqueId(node, singleton), singleton, context).icon(fontAwesome("file-o")).disabled().build();
children.add(child);
}
callback.result(children.toArray(new Node[children.size()]));
});
}
}
use of org.jboss.hal.ballroom.tree.Node in project console by hal.
the class ResourcePanel method update.
void update(Node<Context> node, ResourceAddress address, Metadata metadata) {
SafeHtml safeHtml = SafeHtmlUtils.fromSafeConstant(metadata.getDescription().getDescription());
Elements.innerHtml(this.description, safeHtml);
tabs.setContent(dataId, PLACE_HOLDER_ELEMENT);
tabs.setContent(attributesId, PLACE_HOLDER_ELEMENT);
tabs.setContent(operationsId, PLACE_HOLDER_ELEMENT);
Elements.setVisible(tabs.element(), description.hasAttributes());
Elements.setVisible(empty, !description.hasAttributes());
if (description.hasAttributes()) {
Operation operation = new Operation.Builder(address, READ_RESOURCE_OPERATION).param(INCLUDE_RUNTIME, true).build();
dispatcher.execute(operation, result -> {
List<String> plainObjects = new ArrayList<>();
flattenDescription(metadata.getDescription().get(ATTRIBUTES), plainObjects);
flattenModel(result, plainObjects);
ModelNodeForm<ModelNode> form = new ModelNodeForm.Builder<>(Ids.build(Ids.MODEL_BROWSER, node.id, Ids.FORM), metadata).includeRuntime().showDeprecated().onSave((f, changedValues) -> modelBrowser.save(address, changedValues, metadata)).prepareReset(f -> modelBrowser.reset(address, f, metadata)).build();
tabs.setContent(dataId, form.element());
PatternFly.initComponents();
form.attach();
form.view(result);
});
tabs.setContent(attributesId, new AttributesTable(metadata.getDescription().getAttributes(ATTRIBUTES), resources).element());
if (!metadata.getDescription().getOperations().isEmpty()) {
tabs.setContent(operationsId, new OperationsTable(metadata.getDescription().getOperations(), resources).element());
}
}
}
use of org.jboss.hal.ballroom.tree.Node in project console by hal.
the class JndiView method update.
@Override
@SuppressWarnings("HardCodedStringLiteral")
public void update(ModelNode jndi) {
JndiParser jndiParser = new JndiParser();
JsArray<Node<JndiContext>> nodes = new JsArray<>();
if (jndi.hasDefined(JAVA_CONTEXTS)) {
JndiContext jndiContext = new JndiContext();
Node<JndiContext> root = new Node.Builder<>(Ids.JNDI_TREE_JAVA_CONTEXTS_ROOT, "Java Contexts", jndiContext).root().folder().open().build();
jndiParser.parse(nodes, root, jndi.get(JAVA_CONTEXTS).asPropertyList());
}
if (jndi.hasDefined(APPLICATIONS)) {
JndiContext jndiContext = new JndiContext();
Node<JndiContext> root = new Node.Builder<>(Ids.JNDI_TREE_APPLICATIONS_ROOT, "Applications", jndiContext).root().folder().open().build();
jndiParser.parse(nodes, root, jndi.get(APPLICATIONS).asPropertyList());
}
tree = new Tree<>(Ids.JNDI_TREE, nodes);
Elements.removeChildrenFrom(treeContainer);
treeContainer.appendChild(tree.element());
tree.attach();
tree.onSelectionChange((event, selectionContext) -> {
if (!"ready".equals(selectionContext.action)) {
boolean hasSelection = selectionContext.selected.length != 0;
boolean validSelection = hasSelection && selectionContext.node.data.hasDetails;
setVisible(hint, !validSelection);
setVisible(details.element(), validSelection);
if (validSelection) {
JndiContext jndiContext = selectionContext.node.data;
ModelNode modelNode = new ModelNode();
if (jndiContext.uri != null) {
modelNode.get("uri").set(jndiContext.uri);
}
if (jndiContext.className != null) {
modelNode.get(CLASS_NAME).set(jndiContext.className);
}
if (jndiContext.value != null) {
modelNode.get(VALUE).set(jndiContext.value);
}
details.view(modelNode);
}
}
});
setVisible(hint, true);
setVisible(details.element(), false);
}
use of org.jboss.hal.ballroom.tree.Node in project console by hal.
the class ModelBrowser method add.
void add(Node<Context> parent, List<String> children) {
if (parent.data.hasSingletons()) {
if (parent.data.getSingletons().size() == children.size()) {
MessageEvent.fire(eventBus, Message.warning(resources.messages().allSingletonsExist()));
} else if (parent.data.getSingletons().size() - children.size() == 1) {
// no need to show a wizard - find the missing singleton
HashSet<String> singletons = Sets.newHashSet(parent.data.getSingletons());
singletons.removeAll(children);
String singleton = singletons.iterator().next();
ResourceAddress singletonAddress = parent.data.getAddress().getParent().add(parent.text, singleton);
AddressTemplate template = asGenericTemplate(parent, singletonAddress);
String id = Ids.build(parent.id, "singleton", Ids.ADD);
crud.addSingleton(id, singleton, template, address -> refresh(parent));
} else {
// open wizard to choose the singleton
Wizard<SingletonContext, SingletonState> wizard = new Wizard.Builder<SingletonContext, SingletonState>(resources.messages().addResourceTitle(parent.text), new SingletonContext(parent, children)).addStep(CHOOSE, new ChooseSingletonStep(parent, children, resources)).addStep(CREATE, new CreateSingletonStep(parent, metadataProcessor, progress, eventBus, resources)).onBack((context, currentState) -> currentState == CREATE ? CHOOSE : null).onNext((context, currentState) -> currentState == CHOOSE ? CREATE : null).onFinish((wzrd, context) -> {
Operation.Builder builder = new Operation.Builder(fqAddress(parent, context.singleton), ADD);
if (context.modelNode != null) {
builder.payload(context.modelNode);
}
dispatcher.execute(builder.build(), result -> {
MessageEvent.fire(eventBus, Message.success(resources.messages().addResourceSuccess(parent.text, context.singleton)));
refresh(parent);
});
}).build();
wizard.show();
}
} else {
AddressTemplate template = asGenericTemplate(parent, parent.data.getAddress());
metadataProcessor.lookup(template, progress.get(), new SuccessfulMetadataCallback(eventBus, resources) {
@Override
public void onMetadata(Metadata metadata) {
flattenDescription(metadata.getDescription().get(OPERATIONS).get(ADD).get(REQUEST_PROPERTIES));
String title = new LabelBuilder().label(parent.text);
NameItem nameItem = new NameItem();
String id = Ids.build(parent.id, "add");
ModelNodeForm<ModelNode> form = new ModelNodeForm.Builder<>(id, metadata).unboundFormItem(nameItem, 0).fromRequestProperties().panelForOptionalAttributes().build();
AddResourceDialog dialog = new AddResourceDialog(resources.messages().addResourceTitle(title), form, (name1, model) -> {
unflattenModel(model);
crud.add(title, nameItem.getValue(), fqAddress(parent, nameItem.getValue()), model, (n, a) -> refresh(parent));
});
dialog.show();
}
});
}
}
use of org.jboss.hal.ballroom.tree.Node in project console by hal.
the class ModelBrowser method emptyTree.
@SuppressWarnings("unchecked")
private void emptyTree() {
Context context = new Context(ResourceAddress.root(), Collections.emptySet());
Node<Context> rootNode = new Node.Builder<>(MODEL_BROWSER_ROOT, Names.NOT_AVAILABLE, context).asyncFolder().build();
tree = new Tree<>(Ids.MODEL_BROWSER, rootNode, (node, callback) -> callback.result(new Node[0]));
Elements.removeChildrenFrom(treeContainer);
treeContainer.appendChild(tree.element());
tree.attach();
childrenPanel.hide();
resourcePanel.hide();
}
Aggregations