use of org.jboss.hal.ballroom.form.TextBoxItem in project console by hal.
the class MailSessionPresenter method launchAddServer.
void launchAddServer() {
SortedSet<String> availableServers = new TreeSet<>(asList(SMTP.toUpperCase(), IMAP.toUpperCase(), POP3.toUpperCase()));
ResourceAddress selectedSessionAddress = SELECTED_MAIL_SESSION_TEMPLATE.resolve(statementContext);
Operation serverNamesOp = new Operation.Builder(selectedSessionAddress, READ_CHILDREN_NAMES_OPERATION).param(CHILD_TYPE, SERVER).build();
dispatcher.execute(serverNamesOp, serversResult -> {
Set<String> existingServers = serversResult.asList().stream().map(node -> node.asString().toUpperCase()).collect(toSet());
availableServers.removeAll(existingServers);
if (availableServers.isEmpty()) {
MessageEvent.fire(getEventBus(), Message.error(resources.messages().allMailServersExist()));
} else {
FormItem<String> serverTypeItem;
if (availableServers.size() == 1) {
serverTypeItem = new TextBoxItem(ModelDescriptionConstants.SERVER_TYPE, resources.constants().type());
serverTypeItem.setValue(availableServers.first());
serverTypeItem.setEnabled(false);
} else {
serverTypeItem = new SingleSelectBoxItem(ModelDescriptionConstants.SERVER_TYPE, resources.constants().type(), new ArrayList<>(availableServers), false);
serverTypeItem.setRequired(true);
}
Metadata metadata = metadataRegistry.lookup(AddressTemplates.SERVER_TEMPLATE);
Form<ModelNode> form = new ModelNodeForm.Builder<>(Ids.MAIL_SERVER_DIALOG, metadata).unboundFormItem(serverTypeItem, 0).include(OUTBOUND_SOCKET_BINDING_REF, USERNAME, PASSWORD, "ssl", "tls").fromRequestProperties().requiredOnly().unsorted().build();
form.getFormItem(OUTBOUND_SOCKET_BINDING_REF).registerSuggestHandler(new ReadChildrenAutoComplete(dispatcher, statementContext, AddressTemplates.SOCKET_BINDING_TEMPLATE));
AddResourceDialog dialog = new AddResourceDialog(resources.messages().addResourceTitle(Names.SERVER), form, (name, modelNode) -> {
String serverType = serverTypeItem.getValue().toLowerCase();
ResourceAddress address = SELECTED_MAIL_SESSION_TEMPLATE.append(SERVER + EQUALS + serverType).resolve(statementContext);
Operation operation = new Operation.Builder(address, ModelDescriptionConstants.ADD).payload(modelNode).build();
dispatcher.execute(operation, result -> {
MessageEvent.fire(getEventBus(), Message.success(resources.messages().addResourceSuccess(Names.SERVER, serverType)));
reload();
});
});
dialog.show();
}
});
}
use of org.jboss.hal.ballroom.form.TextBoxItem in project console by hal.
the class JcaPresenter method launchAddThreadPool.
// ------------------------------------------------------ thread pools (for normal and distributed work managers)
/**
* Used to bring up the dialog to add thread pools for the normal and the distributed work managers.
* <p>
* Only one long and one short running thread pool is allowed per (distributed) work manager. This method takes care of
* showing the right attributes in the dialog. If there are already long and short running thread pools attached to the work
* manager an error message is shown.
*/
void launchAddThreadPool(AddressTemplate workmanagerTemplate, String workmanager) {
dispatcher.execute(threadPoolsOperation(workmanagerTemplate, workmanager), (CompositeResult cr) -> {
boolean lrtPresent = !cr.step(0).get(RESULT).asPropertyList().isEmpty();
boolean srtPresent = !cr.step(1).get(RESULT).asPropertyList().isEmpty();
if (lrtPresent && srtPresent) {
MessageEvent.fire(getEventBus(), Message.error(resources.messages().allThreadPoolsExist()));
} else {
FormItem<String> typeItem;
if (!lrtPresent && !srtPresent) {
typeItem = new SingleSelectBoxItem(TYPE, resources.constants().type(), asList(Names.LONG_RUNNING, Names.SHORT_RUNNING), false);
typeItem.setRequired(true);
} else {
typeItem = new TextBoxItem(TYPE, resources.constants().type());
typeItem.setValue(lrtPresent ? Names.SHORT_RUNNING : Names.LONG_RUNNING);
typeItem.setEnabled(false);
}
// for the metadata it doesn't matter whether we use the LRT or SRT template nor
// whether we use the normal or distributed workmanager version
Metadata metadata = metadataRegistry.lookup(WORKMANAGER_LRT_TEMPLATE);
Form<ModelNode> form = new ModelNodeForm.Builder<>(Ids.JCA_THREAD_POOL_ADD, metadata).fromRequestProperties().unboundFormItem(typeItem, 0).include(MAX_THREADS, QUEUE_LENGTH, THREAD_FACTORY).unsorted().build();
AddResourceDialog dialog = new AddResourceDialog(resources.messages().addResourceTitle(THREAD_POOL), form, (name, modelNode) -> {
String type = typeItem.getValue();
AddressTemplate tpTemplate = Names.LONG_RUNNING.equals(type) ? workmanagerTemplate.append(WORKMANAGER_LRT_TEMPLATE.lastName() + EQUALS + workmanager) : workmanagerTemplate.append(WORKMANAGER_SRT_TEMPLATE.lastName() + EQUALS + workmanager);
ResourceAddress address = tpTemplate.resolve(statementContext, workmanager);
Operation operation = new Operation.Builder(address, ADD).payload(modelNode).build();
dispatcher.execute(operation, result -> {
MessageEvent.fire(getEventBus(), Message.success(resources.messages().addResourceSuccess(THREAD_POOL, name)));
loadThreadPools(workmanagerTemplate, workmanager);
});
});
dialog.show();
}
});
}
use of org.jboss.hal.ballroom.form.TextBoxItem in project console by hal.
the class JGroupsPresenter method addStack.
// stack resources
@SuppressWarnings("ConstantConditions")
void addStack() {
Metadata metadata = metadataRegistry.lookup(STACK_TEMPLATE);
Metadata transportMetadata = metadataRegistry.lookup(TRANSPORT_TEMPLATE).forOperation(ADD);
transportMetadata.copyAttribute(SOCKET_BINDING, metadata);
metadata.makeWritable(SOCKET_BINDING);
NameItem nameItem = new NameItem();
String transportLabel = new LabelBuilder().label(TRANSPORT);
TextBoxItem transportItem = new TextBoxItem(TRANSPORT, transportLabel);
transportItem.setRequired(true);
String id = Ids.build(Ids.JGROUPS_STACK_CONFIG, Ids.ADD);
ModelNodeForm<ModelNode> form = new ModelNodeForm.Builder<>(id, metadata).unboundFormItem(nameItem, 0).unboundFormItem(transportItem, 2).unsorted().requiredOnly().build();
AddResourceDialog dialog = new AddResourceDialog(Names.STACK, form, (name, model) -> {
ResourceAddress stackAddress = STACK_TEMPLATE.resolve(filterStatementContext, name);
String transport = transportItem.getValue();
ResourceAddress transportAddress = TRANSPORT_TEMPLATE.resolve(filterStatementContext, name, transport);
Operation addStackOperation = new Operation.Builder(stackAddress, ADD).build();
Operation addTransportOperation = new Operation.Builder(transportAddress, ADD).payload(model).build();
Composite composite = new Composite(addStackOperation, addTransportOperation);
dispatcher.execute(composite, (CompositeResult result) -> {
MessageEvent.fire(eventBus, Message.success(resources.messages().addResourceSuccess(Names.STACK, name)));
reload();
});
});
dialog.show();
}
use of org.jboss.hal.ballroom.form.TextBoxItem in project console by hal.
the class BrowseContentElement method addContent.
private void addContent() {
TextBoxItem targetPathItem = new TextBoxItem(TARGET_PATH);
targetPathItem.setRequired(true);
Form<ModelNode> form = new ModelNodeForm.Builder<>(Ids.CONTENT_NEW, Metadata.empty()).unboundFormItem(targetPathItem).addOnly().build();
AddResourceDialog dialog = new AddResourceDialog(resources.constants().newContent(), form, (name, model) -> {
String path = targetPathItem.getValue();
ResourceAddress address = new ResourceAddress().add(DEPLOYMENT, content.getName());
ModelNode contentNode = new ModelNode();
contentNode.get(INPUT_STREAM_INDEX).set(0);
contentNode.get(TARGET_PATH).set(path);
Operation operation = new Operation.Builder(address, ADD_CONTENT).param(CONTENT, new ModelNode().add(contentNode)).build();
dispatcher.upload(file(filename(path), ""), operation).toCompletable().andThen(browseContent()).andThen(awaitTreeReady()).subscribe(() -> {
MessageEvent.fire(eventBus, Message.success(resources.messages().newContentSuccess(content.getName(), path)));
tree.selectNode(NODE_ID.apply(path));
});
});
targetPathItem.setValue(selectedPath());
dialog.show();
}
use of org.jboss.hal.ballroom.form.TextBoxItem in project console by hal.
the class ConfigurePasswordStep method onShow.
@Override
protected void onShow(PasswordContext context) {
AddressTemplate template = metadata.getTemplate();
Metadata passwordMetadata = metadata.forOperation(SET_PASSWORD).forComplexAttribute(context.type.name);
LabelBuilder labelBuilder = new LabelBuilder();
header.textContent = labelBuilder.label(context.type.name);
description.textContent = passwordMetadata.getDescription().getDescription();
String id = Ids.build(template.lastName(), SET_PASSWORD, FORM);
ModelNodeForm.Builder<ModelNode> builder = new ModelNodeForm.Builder<>(id, passwordMetadata).onSave((form1, changedValues) -> this.changedValues = changedValues);
passwordMetadata.getDescription().getAttributes(ATTRIBUTES).forEach(attr -> {
if (ModelType.BYTES.equals(attr.getValue().get(TYPE).asType())) {
builder.customFormItem(attr.getName(), desc -> {
TextBoxItem saltItem = new TextBoxItem(attr.getName(), labelBuilder.label(attr.getName()));
saltItem.setRequired(desc.getValue().get(REQUIRED).asBoolean());
saltItem.addValidationHandler(value -> {
ValidationResult result = ValidationResult.OK;
// accordingly to the :set-password operation, the salt must be exactly 16 bytes
if (value.length() != 16) {
result = ValidationResult.invalid(resources.messages().invalidLength());
}
return result;
});
return saltItem;
});
}
});
form = builder.build();
HTMLElement formElement = form.element();
form.attach();
form.edit(new ModelNode());
// as the form is dynamically added to the section, we must remove the previous form element
if (section.childElementCount > 2) {
section.removeChild(section.lastChild);
}
section.appendChild(formElement);
}
Aggregations