Search in sources :

Example 1 with HttpRequestDenominator

use of com.robo4j.socket.http.message.HttpRequestDenominator in project robo4j by Robo4J.

the class RoboRequestCallable method call.

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public HttpResponseProcess call() throws Exception {
    final HttpResponseProcessBuilder resultBuilder = HttpResponseProcessBuilder.Builder();
    final ServerPathConfig pathConfig = serverContext.getPathConfig(decoratedRequest.getPathMethod());
    if (isValidPath(pathConfig)) {
        resultBuilder.setMethod(pathConfig.getMethod());
        resultBuilder.setPath(pathConfig.getPath());
        switch(pathConfig.getMethod()) {
            case GET:
                if (pathConfig.getPath().equals(UTF8_SOLIDUS)) {
                    resultBuilder.setCode(StatusCode.OK);
                    resultBuilder.setResult(factory.processGet(context));
                } else {
                    resultBuilder.setTarget(pathConfig.getRoboUnit().getId());
                    final Object unitDescription;
                    // the system needs to have one more worker thread to evaluate Future get
                    final HttpRequestDenominator denominator = (HttpRequestDenominator) decoratedRequest.getDenominator();
                    final Set<String> requestAttributes = denominator.getAttributes().get(HttpPathUtils.ATTRIBUTES_PATH_VALUE);
                    if (requestAttributes == null) {
                        unitDescription = factory.processGet(pathConfig);
                    } else if (requestAttributes.isEmpty()) {
                        RoboReference<?> unit = context.getReference(pathConfig.getRoboUnit().getId());
                        PathAttributeListDTO pathAttributes = new PathAttributeListDTO();
                        unit.getKnownAttributes().forEach(a -> {
                            PathAttributeDTO attributeDescriptor = new PathAttributeDTO();
                            attributeDescriptor.setName(a.getAttributeName());
                            attributeDescriptor.setValue(a.getAttributeType().getCanonicalName());
                            pathAttributes.addAttribute(attributeDescriptor);
                        });
                        unitDescription = ReflectUtils.createJson(pathAttributes);
                    } else {
                        RoboReference<?> unit = context.getReference(pathConfig.getRoboUnit().getId());
                        List<PathAttributeDTO> attributes = new ArrayList<>();
                        for (AttributeDescriptor attr : unit.getKnownAttributes()) {
                            if (requestAttributes.contains(attr.getAttributeName())) {
                                PathAttributeDTO attribute = new PathAttributeDTO();
                                String valueString = String.valueOf(unit.getAttribute(attr).get());
                                attribute.setValue(valueString);
                                attribute.setName(attr.getAttributeName());
                                attributes.add(attribute);
                            }
                        }
                        if (attributes.size() == 1) {
                            Map<String, ClassGetSetDTO> responseAttributeDescriptorMap = ReflectUtils.getFieldsTypeMap(PathAttributeDTO.class);
                            unitDescription = JsonUtil.toJson(responseAttributeDescriptorMap, attributes.get(0));
                        } else {
                            unitDescription = JsonUtil.toJsonArray(attributes);
                        }
                    }
                    resultBuilder.setCode(StatusCode.OK);
                    resultBuilder.setResult(unitDescription);
                }
                break;
            case POST:
                if (pathConfig.getPath().equals(UTF8_SOLIDUS)) {
                    resultBuilder.setCode(StatusCode.BAD_REQUEST);
                } else {
                    resultBuilder.setTarget(pathConfig.getRoboUnit().getId());
                    Object respObj = factory.processPost(pathConfig.getRoboUnit(), decoratedRequest.getMessage());
                    if (respObj == null) {
                        resultBuilder.setCode(StatusCode.BAD_REQUEST);
                    } else {
                        resultBuilder.setCode(StatusCode.ACCEPTED);
                        resultBuilder.setResult(respObj);
                    }
                }
                break;
            default:
                resultBuilder.setCode(StatusCode.BAD_REQUEST);
                SimpleLoggingUtil.debug(getClass(), "not implemented method: " + decoratedRequest.getPathMethod());
        }
    } else {
        resultBuilder.setCode(StatusCode.BAD_REQUEST);
    }
    return resultBuilder.build();
}
Also used : HttpPathUtils(com.robo4j.socket.http.util.HttpPathUtils) SimpleLoggingUtil(com.robo4j.logging.SimpleLoggingUtil) HttpRequestDenominator(com.robo4j.socket.http.message.HttpRequestDenominator) ServerPathConfig(com.robo4j.socket.http.units.ServerPathConfig) Set(java.util.Set) Callable(java.util.concurrent.Callable) PathAttributeDTO(com.robo4j.socket.http.dto.PathAttributeDTO) PathAttributeListDTO(com.robo4j.socket.http.dto.PathAttributeListDTO) AttributeDescriptor(com.robo4j.AttributeDescriptor) HttpDecoratedRequest(com.robo4j.socket.http.message.HttpDecoratedRequest) ArrayList(java.util.ArrayList) JsonUtil(com.robo4j.socket.http.util.JsonUtil) Objects(java.util.Objects) ServerContext(com.robo4j.socket.http.units.ServerContext) List(java.util.List) UTF8_SOLIDUS(com.robo4j.util.Utf8Constant.UTF8_SOLIDUS) StatusCode(com.robo4j.socket.http.enums.StatusCode) Map(java.util.Map) RoboContext(com.robo4j.RoboContext) ClassGetSetDTO(com.robo4j.socket.http.dto.ClassGetSetDTO) RoboReference(com.robo4j.RoboReference) ReflectUtils(com.robo4j.socket.http.util.ReflectUtils) ServerPathConfig(com.robo4j.socket.http.units.ServerPathConfig) AttributeDescriptor(com.robo4j.AttributeDescriptor) PathAttributeDTO(com.robo4j.socket.http.dto.PathAttributeDTO) RoboReference(com.robo4j.RoboReference) PathAttributeListDTO(com.robo4j.socket.http.dto.PathAttributeListDTO) ArrayList(java.util.ArrayList) List(java.util.List) HttpRequestDenominator(com.robo4j.socket.http.message.HttpRequestDenominator) Map(java.util.Map)

Example 2 with HttpRequestDenominator

use of com.robo4j.socket.http.message.HttpRequestDenominator in project robo4j by Robo4J.

the class RoboHttpDynamicTests method pingExternalSystem.

/**
 * testing ping external system
 *
 * @throws Exception
 *             exception
 */
@Disabled("intent to run manual")
@Test
void pingExternalSystem() throws Exception {
    RoboBuilder pingSystemBuilder = getHttpClientRobotBuilder("127.0.0.1", 8080);
    pingSystemBuilder.add(StringConsumer.class, StringConsumer.NAME);
    RoboContext pingSystemContext = pingSystemBuilder.build();
    pingSystemContext.start();
    System.out.println("PingSystem state after start:");
    System.out.println(SystemUtil.printStateReport(pingSystemContext));
    RoboReference<HttpDecoratedRequest> httpClient = pingSystemContext.getReference(ID_CLIENT_UNIT);
    Thread.sleep(1000);
    for (int i = 0; i < 1; i++) {
        HttpRequestDenominator denominator = new HttpRequestDenominator(HttpMethod.GET, "/noparams", HttpVersion.HTTP_1_1);
        HttpDecoratedRequest request = new HttpDecoratedRequest(denominator);
        request.addCallback(StringConsumer.NAME);
        httpClient.sendMessage(request);
    }
    Thread.sleep(1000);
    pingSystemContext.stop();
    System.out.println("PingSystem state after stop:");
    System.out.println(SystemUtil.printStateReport(pingSystemContext));
}
Also used : HttpDecoratedRequest(com.robo4j.socket.http.message.HttpDecoratedRequest) RoboBuilder(com.robo4j.RoboBuilder) RoboContext(com.robo4j.RoboContext) HttpRequestDenominator(com.robo4j.socket.http.message.HttpRequestDenominator) Test(org.junit.jupiter.api.Test) Disabled(org.junit.jupiter.api.Disabled)

Example 3 with HttpRequestDenominator

use of com.robo4j.socket.http.message.HttpRequestDenominator in project robo4j by Robo4J.

the class ByteBufferTests method byteBufferFromRequestTest.

@Test
void byteBufferFromRequestTest() {
    String bodyMessage = "this is test message";
    String host = "localhost";
    String clientPath = "/test";
    HttpDenominator denominator = new HttpRequestDenominator(HttpMethod.POST, clientPath, HttpVersion.HTTP_1_1);
    String postMessage = HttpMessageBuilder.Build().setDenominator(denominator).addHeaderElement(HttpHeaderFieldNames.CONTENT_LENGTH, String.valueOf(bodyMessage.length())).addHeaderElement(HttpHeaderFieldNames.HOST, RoboHttpUtils.createHost(host, ProtocolType.HTTP.getPort())).build(bodyMessage);
    HttpDecoratedRequest decoratedRequest = ChannelBufferUtils.extractDecoratedRequestByStringMessage(postMessage);
    assertNotNull(postMessage);
    assertEquals(postMessage.length(), decoratedRequest.getLength());
    assertEquals(clientPath, decoratedRequest.getPathMethod().getPath());
    assertEquals(bodyMessage, decoratedRequest.getMessage());
}
Also used : HttpDecoratedRequest(com.robo4j.socket.http.message.HttpDecoratedRequest) HttpDenominator(com.robo4j.socket.http.message.HttpDenominator) HttpRequestDenominator(com.robo4j.socket.http.message.HttpRequestDenominator) Test(org.junit.jupiter.api.Test)

Example 4 with HttpRequestDenominator

use of com.robo4j.socket.http.message.HttpRequestDenominator in project robo4j by Robo4J.

the class RoboHttpUnitGetTestApp method twoKnownAttributesTest.

/**
 * Run the system with known attributes
 *
 * @throws Exception
 *             exception
 */
public void twoKnownAttributesTest() throws Exception {
    RoboContext systemGetProvider = twoAttributesSystem();
    RoboContext systemGetAccessor = attributeRequestSystem();
    systemGetProvider.start();
    System.out.println("systemGetProvider: State after start:");
    System.out.println(SystemUtil.printStateReport(systemGetProvider));
    systemGetAccessor.start();
    System.out.println("systemGetAccessor: State after start:");
    System.out.println(SystemUtil.printStateReport(systemGetAccessor));
    RoboReference<HttpDecoratedRequest> httpClient = systemGetAccessor.getReference(UNIT_ID_HTTP_CLIENT);
    HttpRequestDenominator denominator = new HttpRequestDenominator(HttpMethod.GET, "/units/controller?attributes=number", HttpVersion.HTTP_1_1);
    HttpDecoratedRequest request = new HttpDecoratedRequest(denominator);
    request.addCallback(StringConsumer.NAME);
    httpClient.sendMessage(request);
    System.out.println("Press <Enter>...");
    System.in.read();
    systemGetProvider.shutdown();
}
Also used : HttpDecoratedRequest(com.robo4j.socket.http.message.HttpDecoratedRequest) RoboContext(com.robo4j.RoboContext) HttpRequestDenominator(com.robo4j.socket.http.message.HttpRequestDenominator)

Example 5 with HttpRequestDenominator

use of com.robo4j.socket.http.message.HttpRequestDenominator in project robo4j by Robo4J.

the class SocketMessageDecoratedProducerUnit method getHttpRequest.

private HttpDecoratedRequest getHttpRequest(ClientPathConfig pathConfig) {
    HttpRequestDenominator denominator = new HttpRequestDenominator(pathConfig.getMethod(), pathConfig.getPath(), HttpVersion.HTTP_1_1);
    HttpDecoratedRequest result = new HttpDecoratedRequest(denominator);
    switch(pathConfig.getMethod()) {
        case GET:
            result.addCallbacks(pathConfig.getCallbacks());
            break;
        case POST:
            result.addMessage(message);
            break;
        default:
            throw new IllegalStateException("not allowed state: " + pathConfig);
    }
    return result;
}
Also used : HttpDecoratedRequest(com.robo4j.socket.http.message.HttpDecoratedRequest) HttpRequestDenominator(com.robo4j.socket.http.message.HttpRequestDenominator)

Aggregations

HttpRequestDenominator (com.robo4j.socket.http.message.HttpRequestDenominator)9 HttpDecoratedRequest (com.robo4j.socket.http.message.HttpDecoratedRequest)8 RoboContext (com.robo4j.RoboContext)3 Test (org.junit.jupiter.api.Test)3 HttpDenominator (com.robo4j.socket.http.message.HttpDenominator)2 AttributeDescriptor (com.robo4j.AttributeDescriptor)1 RoboBuilder (com.robo4j.RoboBuilder)1 RoboReference (com.robo4j.RoboReference)1 SimpleLoggingUtil (com.robo4j.logging.SimpleLoggingUtil)1 HttpMethod (com.robo4j.socket.http.HttpMethod)1 ClassGetSetDTO (com.robo4j.socket.http.dto.ClassGetSetDTO)1 PathAttributeDTO (com.robo4j.socket.http.dto.PathAttributeDTO)1 PathAttributeListDTO (com.robo4j.socket.http.dto.PathAttributeListDTO)1 StatusCode (com.robo4j.socket.http.enums.StatusCode)1 ServerContext (com.robo4j.socket.http.units.ServerContext)1 ServerPathConfig (com.robo4j.socket.http.units.ServerPathConfig)1 HttpPathUtils (com.robo4j.socket.http.util.HttpPathUtils)1 JsonUtil (com.robo4j.socket.http.util.JsonUtil)1 ReflectUtils (com.robo4j.socket.http.util.ReflectUtils)1 UTF8_SOLIDUS (com.robo4j.util.Utf8Constant.UTF8_SOLIDUS)1