Search in sources :

Example 36 with Property

use of org.jboss.hal.dmr.Property in project console by hal.

the class Dispatcher method operationUrl.

private String operationUrl(Operation operation) {
    StringBuilder builder = new StringBuilder();
    builder.append(endpoints.dmr()).append("/");
    // 1. address
    ResourceAddress address = operation.getAddress();
    if (!address.isEmpty()) {
        String path = address.asPropertyList().stream().map(property -> encodeURIComponent(property.getName()) + "/" + encodeURIComponent(property.getValue().asString())).collect(joining("/"));
        builder.append(path);
    }
    // 2. operation
    String name = operation.getName();
    if (GetOperation.isSupported(name)) {
        GetOperation getOperation = GetOperation.get(name);
        name = getOperation.httpGetOperation();
    }
    builder.append("?").append(OP).append("=").append(name);
    // 3. parameter
    if (operation.hasParameter()) {
        operation.getParameter().asPropertyList().forEach(property -> {
            builder.append("&").append(encodeURIComponent(property.getName()));
            if (property.getValue().isDefined()) {
                builder.append("=").append(encodeURIComponent(property.getValue().asString()));
            }
        });
    }
    // 4. bearer token
    String token = getBearerToken();
    if (token != null) {
        builder.append("&access_token=").append(token);
    }
    // TODO operation headers
    return builder.toString();
}
Also used : FormData(elemental2.dom.FormData) Global.encodeURIComponent(elemental2.core.Global.encodeURIComponent) Environment(org.jboss.hal.config.Environment) Endpoints(org.jboss.hal.config.Endpoints) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) LoggerFactory(org.slf4j.LoggerFactory) Action(org.jboss.hal.dmr.macro.Action) BlobPropertyBag(elemental2.dom.BlobPropertyBag) Blob(elemental2.dom.Blob) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) AppendValueUnionType(elemental2.dom.FormData.AppendValueUnionType) CONTENT_TYPE(org.jboss.hal.dmr.dispatch.RequestHeader.CONTENT_TYPE) Single(rx.Single) Sets.difference(com.google.common.collect.Sets.difference) RESPONSE_HEADERS(org.jboss.hal.dmr.ModelDescriptionConstants.RESPONSE_HEADERS) MacroOptions(org.jboss.hal.dmr.macro.MacroOptions) Message(org.jboss.hal.spi.Message) POST(org.jboss.hal.dmr.dispatch.Dispatcher.HttpMethod.POST) ConstructorBlobPartsArrayUnionType(elemental2.dom.Blob.ConstructorBlobPartsArrayUnionType) Settings(org.jboss.hal.config.Settings) Set(java.util.Set) MacroFinishedEvent(org.jboss.hal.dmr.macro.MacroFinishedEvent) Macros(org.jboss.hal.dmr.macro.Macros) Collectors.joining(java.util.stream.Collectors.joining) OP(org.jboss.hal.dmr.ModelDescriptionConstants.OP) List(java.util.List) Header(org.jboss.hal.dmr.dispatch.ResponseHeadersProcessor.Header) RESULT(org.jboss.hal.dmr.ModelDescriptionConstants.RESULT) DESCRIPTION(org.jboss.hal.dmr.ModelDescriptionConstants.DESCRIPTION) RESPONSE(org.jboss.hal.dmr.ModelDescriptionConstants.RESPONSE) QUERY(org.jboss.hal.dmr.ModelDescriptionConstants.QUERY) HOST(org.jboss.hal.dmr.ModelDescriptionConstants.HOST) ModelNode(org.jboss.hal.dmr.ModelNode) MessageEvent(org.jboss.hal.spi.MessageEvent) SingleSubscriber(rx.SingleSubscriber) RecordingEvent(org.jboss.hal.dmr.macro.RecordingEvent) JsMethod(jsinterop.annotations.JsMethod) DomGlobal.navigator(elemental2.dom.DomGlobal.navigator) OPERATION(org.jboss.hal.dmr.ModelDescriptionConstants.OPERATION) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Property(org.jboss.hal.dmr.Property) JsFunction(jsinterop.annotations.JsFunction) EsParam(org.jboss.hal.spi.EsParam) JsType(jsinterop.annotations.JsType) ACCEPT(org.jboss.hal.dmr.dispatch.RequestHeader.ACCEPT) Logger(org.slf4j.Logger) CompositeResult(org.jboss.hal.dmr.CompositeResult) RecordingHandler(org.jboss.hal.dmr.macro.RecordingEvent.RecordingHandler) GET(org.jboss.hal.dmr.dispatch.Dispatcher.HttpMethod.GET) Operation(org.jboss.hal.dmr.Operation) MacroOperationEvent(org.jboss.hal.dmr.macro.MacroOperationEvent) File(elemental2.dom.File) EventBus(com.google.web.bindery.event.shared.EventBus) Consumer(java.util.function.Consumer) Composite(org.jboss.hal.dmr.Composite) XMLHttpRequest(elemental2.dom.XMLHttpRequest) JsIgnore(jsinterop.annotations.JsIgnore) SERVER_GROUPS(org.jboss.hal.dmr.ModelDescriptionConstants.SERVER_GROUPS) Resources(org.jboss.hal.resources.Resources) Macro(org.jboss.hal.dmr.macro.Macro) RUN_AS(org.jboss.hal.config.Settings.Key.RUN_AS) X_MANAGEMENT_CLIENT_NAME(org.jboss.hal.dmr.dispatch.RequestHeader.X_MANAGEMENT_CLIENT_NAME) ResourceAddress(org.jboss.hal.dmr.ResourceAddress)

Example 37 with Property

use of org.jboss.hal.dmr.Property in project console by hal.

the class Dispatcher method collectHeaders.

// ------------------------------------------------------ response headers in domain
private Header[] collectHeaders(ModelNode serverGroups) {
    List<Header> headers = new ArrayList<>();
    for (Property serverGroup : serverGroups.asPropertyList()) {
        ModelNode serverGroupValue = serverGroup.getValue();
        if (serverGroupValue.hasDefined(HOST)) {
            List<Property> hosts = serverGroupValue.get(HOST).asPropertyList();
            for (Property host : hosts) {
                ModelNode hostValue = host.getValue();
                List<Property> servers = hostValue.asPropertyList();
                for (Property server : servers) {
                    ModelNode serverResponse = server.getValue().get(RESPONSE);
                    if (serverResponse.hasDefined(RESPONSE_HEADERS)) {
                        headers.add(new Header(serverGroup.getName(), host.getName(), server.getName(), serverResponse.get(RESPONSE_HEADERS)));
                    }
                }
            }
        }
    }
    return headers.toArray(new Header[0]);
}
Also used : Header(org.jboss.hal.dmr.dispatch.ResponseHeadersProcessor.Header) ArrayList(java.util.ArrayList) ModelNode(org.jboss.hal.dmr.ModelNode) Property(org.jboss.hal.dmr.Property)

Example 38 with Property

use of org.jboss.hal.dmr.Property in project console by hal.

the class EndpointPreview method update.

@Override
public void update(DeploymentResource item) {
    // the endpoint name (last value of address) contains %3A character separator
    // however the dispatcher.execute call performs a http call, then the url is encoded, the %3A becomes %253A
    // in the endpointa name, causing a HTTP 500 address not found.
    // Then, read the parent resoource and interate over the endpoint results to match the endpoint name.
    String endpointName = item.getAddress().lastValue();
    Operation operation = new Operation.Builder(item.getAddress().getParent(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, ENDPOINT).param(INCLUDE_RUNTIME, true).build();
    dispatcher.execute(operation, result -> {
        for (Property prop : result.asPropertyList()) {
            if (prop.getName().equals(endpointName)) {
                ModelNode node = prop.getValue();
                DeploymentResource n = new DeploymentResource(item.getAddress(), node);
                previewAttributes.refresh(n);
                Map<String, Long> processingTimes = new HashMap<>();
                processingTimes.put(MIN_PROCESSING_TIME, node.get(MIN_PROCESSING_TIME).asLong());
                processingTimes.put(AVERAGE_PROCESSING_TIME, node.get(AVERAGE_PROCESSING_TIME).asLong());
                processingTimes.put(MAX_PROCESSING_TIME, node.get(MAX_PROCESSING_TIME).asLong());
                processingTime.update(processingTimes);
                totalProcessingTimeAttribute.refresh(n);
                Map<String, Long> metricUpdates = new HashMap<>(7);
                metricUpdates.put(REQUEST_COUNT, node.get(REQUEST_COUNT).asLong());
                metricUpdates.put(FAULT_COUNT, node.get(FAULT_COUNT).asLong());
                requests.update(metricUpdates);
                responseAttribute.refresh(n);
                break;
            }
        }
    });
}
Also used : HashMap(java.util.HashMap) DeploymentResource(org.jboss.hal.core.deployment.DeploymentResource) Operation(org.jboss.hal.dmr.Operation) ModelNode(org.jboss.hal.dmr.ModelNode) Property(org.jboss.hal.dmr.Property)

Example 39 with Property

use of org.jboss.hal.dmr.Property in project console by hal.

the class OperationFactory method asValueNode.

@SuppressWarnings("rawtypes")
private ModelNode asValueNode(String name, Object value, ResourceDescription resourceDescription) {
    ModelNode valueNode = new ModelNode();
    Property attribute = resourceDescription.findAttribute(ATTRIBUTES, name);
    if (attribute != null) {
        String stringValue = String.valueOf(value);
        ModelNode attributeDescription = attribute.getValue();
        ModelType type = attributeDescription.get(TYPE).asType();
        if (attributeDescription.hasDefined(EXPRESSIONS_ALLOWED) && attributeDescription.get(EXPRESSIONS_ALLOWED).asBoolean() && Expression.isExpression(stringValue) && type != ModelType.LIST) {
            valueNode.setExpression(stringValue);
        } else {
            try {
                switch(type) {
                    case BIG_DECIMAL:
                        valueNode.set(BigDecimal.valueOf(Double.parseDouble(stringValue)));
                        break;
                    case BIG_INTEGER:
                        valueNode.set(BigInteger.valueOf(Long.parseLong(stringValue)));
                        break;
                    case BOOLEAN:
                        valueNode.set(Boolean.parseBoolean(stringValue));
                        break;
                    case BYTES:
                        valueNode.set((byte[]) value);
                        break;
                    case DOUBLE:
                        valueNode.set(Double.parseDouble(stringValue));
                        break;
                    case EXPRESSION:
                        valueNode.setExpression(stringValue);
                        break;
                    case INT:
                        valueNode.set(Long.valueOf(stringValue).intValue());
                        break;
                    case LIST:
                        {
                            ModelNode valueTypeNode = attributeDescription.get(VALUE_TYPE);
                            ModelType typeOfValueType = valueTypeNode.getType();
                            if (typeOfValueType == ModelType.TYPE) {
                                ModelType valueType = attributeDescription.get(VALUE_TYPE).asType();
                                if (valueType == ModelType.STRING) {
                                    valueNode.clear();
                                    List l = (List) value;
                                    for (Object o : l) {
                                        valueNode.add(String.valueOf(o));
                                    }
                                } else {
                                    logger.error("Unsupported value type {} for attribute {} of type {}", valueType, name, type);
                                }
                            } else if (typeOfValueType == ModelType.OBJECT) {
                                valueNode = (ModelNode) value;
                            } else {
                                logger.error("Unsupported value type for attribute {} of type {}", name, type);
                            }
                            break;
                        }
                    case LONG:
                        valueNode.set(Long.parseLong(stringValue));
                        break;
                    case OBJECT:
                        ModelNode valueTypeNode = attributeDescription.get(VALUE_TYPE);
                        ModelType typeOfValueType = valueTypeNode.getType();
                        if (typeOfValueType == ModelType.TYPE) {
                            ModelType valueType = attributeDescription.get(VALUE_TYPE).asType();
                            if (valueType == ModelType.STRING) {
                                valueNode.clear();
                                Map map = (Map) value;
                                for (Object k : map.keySet()) {
                                    valueNode.get(String.valueOf(k)).set(String.valueOf(map.get(k)));
                                }
                            } else {
                                valueNode = (ModelNode) value;
                                logger.warn("Unsupported value type {} for attribute {} of type {}. Will try to save anyway.", valueType, name, type);
                            }
                        } else if (typeOfValueType == ModelType.OBJECT) {
                            valueNode = (ModelNode) value;
                        } else {
                            logger.error("Unsupported value type for attribute {} of type {}", name, type);
                        }
                        break;
                    case STRING:
                        valueNode.set(stringValue);
                        break;
                    case PROPERTY:
                    case TYPE:
                    case UNDEFINED:
                        valueNode = null;
                        logger.error("Unsupported type {} for attribute {}", type, name);
                        break;
                    default:
                        break;
                }
            } catch (ClassCastException ignored) {
                logger.error("Unable to cast attribute {} as {}", name, type);
            }
        }
    } else {
        Class<?> clazz = value.getClass();
        logger.warn("Unable to get type information for attribute {}. Will use its class instead ({})", name, clazz);
        try {
            if (String.class == clazz) {
                String stringValue = (String) value;
                if (Expression.isExpression(stringValue)) {
                    valueNode.setExpression(stringValue);
                } else {
                    valueNode.set(stringValue);
                }
            } else if (Boolean.class == clazz) {
                valueNode.set((Boolean) value);
            } else if (Integer.class == clazz) {
                valueNode.set((Integer) value);
            } else if (Double.class == clazz) {
                valueNode.set((Double) value);
            } else if (Long.class == clazz) {
                valueNode.set((Long) value);
            } else if (Float.class == clazz) {
                valueNode.set((Float) value);
            } else if (ArrayList.class == clazz) {
                valueNode.clear();
                List l = (List) value;
                for (Object o : l) {
                    valueNode.add(String.valueOf(o));
                }
            } else if (HashMap.class == clazz) {
                valueNode.clear();
                Map map = (Map) value;
                for (Object k : map.keySet()) {
                    valueNode.get(String.valueOf(k)).set(String.valueOf(map.get(k)));
                }
            } else if (ModelNode.class == clazz) {
                valueNode.set((ModelNode) value);
            } else {
                valueNode = null;
                logger.error("Unsupported class {} for attribute {}", clazz, name);
            }
        } catch (ClassCastException ignored) {
            logger.error("Unable to cast attribute {} as {}", name, clazz);
        }
    }
    return valueNode;
}
Also used : HashMap(java.util.HashMap) ModelType(org.jboss.hal.dmr.ModelType) ArrayList(java.util.ArrayList) ModelNodeHelper.failSafeList(org.jboss.hal.dmr.ModelNodeHelper.failSafeList) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) ModelNode(org.jboss.hal.dmr.ModelNode) Property(org.jboss.hal.dmr.Property) HashMap(java.util.HashMap) Collectors.toMap(java.util.stream.Collectors.toMap) Map(java.util.Map)

Aggregations

Property (org.jboss.hal.dmr.Property)39 ModelNode (org.jboss.hal.dmr.ModelNode)26 Operation (org.jboss.hal.dmr.Operation)15 ResourceAddress (org.jboss.hal.dmr.ResourceAddress)15 Ids (org.jboss.hal.resources.Ids)9 ArrayList (java.util.ArrayList)8 List (java.util.List)8 Inject (javax.inject.Inject)6 Composite (org.jboss.hal.dmr.Composite)6 ModelType (org.jboss.hal.dmr.ModelType)6 Metadata (org.jboss.hal.meta.Metadata)6 Resources (org.jboss.hal.resources.Resources)6 Map (java.util.Map)5 Form (org.jboss.hal.ballroom.form.Form)5 EventBus (com.google.web.bindery.event.shared.EventBus)4 HashMap (java.util.HashMap)4 Collectors.toList (java.util.stream.Collectors.toList)4 Collectors.toMap (java.util.stream.Collectors.toMap)4 PropertiesItem (org.jboss.hal.ballroom.form.PropertiesItem)4 Environment (org.jboss.hal.config.Environment)4