use of com.robo4j.socket.http.dto.PathAttributeDTO 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();
}
use of com.robo4j.socket.http.dto.PathAttributeDTO in project robo4j by Robo4J.
the class HttpPathUtilTests method createJsonArrayByList.
@Test
void createJsonArrayByList() {
PathAttributeDTO attributeDTO = new PathAttributeDTO("number", "42");
Map<String, ClassGetSetDTO> descriptorMap = ReflectUtils.getFieldsTypeMap(PathAttributeDTO.class);
System.out.println("result: " + JsonUtil.toJson(descriptorMap, attributeDTO));
}
use of com.robo4j.socket.http.dto.PathAttributeDTO in project robo4j by Robo4J.
the class ReflectUtilTests method pathAttributesListToJsonTest.
@Test
void pathAttributesListToJsonTest() {
final String expectedJson = "{\"attributes\":[{\"name\":\"name\",\"value\":\"java.lang.String\"},{\"name\":\"values\",\"value\":\"java.util.HashMap\"}]}";
PathAttributeListDTO attributes = new PathAttributeListDTO();
attributes.addAttribute(new PathAttributeDTO("name", "java.lang.String"));
attributes.addAttribute(new PathAttributeDTO("values", "java.util.HashMap"));
String result = ReflectUtils.createJson(attributes);
System.out.println("result:" + result);
assertEquals(expectedJson, result);
}
use of com.robo4j.socket.http.dto.PathAttributeDTO in project robo4j by Robo4J.
the class ReflectUtilTests method complexObjectToJsonTest.
@Test
void complexObjectToJsonTest() {
String expectedJson = "{\"name\":\"object\",\"value\":42,\"textList\":[\"one\",\"two\"],\"dictionary\":{\"one\":\"one1\",\"two\":\"two2\"},\"attributes\":{\"one\":{\"name\":\"name\",\"value\":\"test name\"},\"two\":{\"name\":\"value\",\"value\":\"42\"}}}";
TestListMapValues obj = new TestListMapValues();
obj.setName("object");
obj.setValue(42);
obj.setTextList(Arrays.asList("one", "two"));
Map<String, String> textMap = new HashMap<>();
textMap.put("one", "one1");
textMap.put("two", "two2");
obj.setDictionary(textMap);
Map<String, PathAttributeDTO> attributes = new HashMap<>();
attributes.put("one", new PathAttributeDTO("name", "test name"));
attributes.put("two", new PathAttributeDTO("value", "42"));
obj.setAttributes(attributes);
String result = ReflectUtils.createJson(obj);
System.out.println("result:" + result);
assertEquals(expectedJson, result);
}
use of com.robo4j.socket.http.dto.PathAttributeDTO in project robo4j by Robo4J.
the class ReflectUtilTests method createJsonByObjectListCollectionTest.
@Test
void createJsonByObjectListCollectionTest() {
Throwable exception = assertThrows(RoboReflectException.class, () -> {
List<PathAttributeDTO> list = new ArrayList<>();
list.add(new PathAttributeDTO("one", "1"));
list.add(new PathAttributeDTO("two", "2"));
ReflectUtils.createJson(list);
});
assertTrue(exception.getMessage().startsWith("object getter value"));
}
Aggregations