private List<SirenField> toSirenFields(ActionDescriptor actionDescriptor) { List<SirenField> ret = new ArrayList<SirenField>(); if (actionDescriptor.hasRequestBody()) { recurseBeanCreationParams(ret, actionDescriptor.getRequestBody() .getParameterType(), actionDescriptor, actionDescriptor.getRequestBody(), actionDescriptor .getRequestBody() .getValue(), "", Collections.<String>emptySet()); } else { Collection<String> paramNames = actionDescriptor.getRequestParamNames(); for (String paramName : paramNames) { ActionInputParameter inputParameter = actionDescriptor.getActionInputParameter(paramName); Object[] possibleValues = inputParameter.getPossibleValues(actionDescriptor); ret.add(createSirenField(paramName, inputParameter.getValueFormatted(), inputParameter, possibleValues)); } } return ret; }
final String semanticActionType = actionDescriptor.getSemanticActionType(); if (semanticActionType != null) { jgen.writeStringField("@type", semanticActionType); jgen.writeStringField("hydra:method", actionDescriptor.getHttpMethod()); final ActionInputParameter requestBodyInputParameter = actionDescriptor.getRequestBody(); if (requestBodyInputParameter != null) {
private List<String> getRequiredArgNames(List<ActionDescriptor> actionDescriptors) { List<String> ret = new ArrayList<String>(); for (ActionDescriptor actionDescriptor : actionDescriptors) { Map<String, ActionInputParameter> required = actionDescriptor.getRequiredParameters(); for (ActionInputParameter actionInputParameter : required.values()) { ret.add(actionInputParameter.getParameterName()); } } return ret; } }
private static String getModelProperty(String href, ActionDescriptor actionDescriptor) { RequestMethod httpMethod = RequestMethod.valueOf(actionDescriptor.getHttpMethod()); StringBuffer model = new StringBuffer(); switch (httpMethod) { case POST: case PUT: case PATCH: { List<UberField> uberFields = new ArrayList<UberField>(); recurseBeanCreationParams(uberFields, actionDescriptor.getRequestBody() .getParameterType(), actionDescriptor, actionDescriptor.getRequestBody(), actionDescriptor .getRequestBody() .getValue(), "", Collections.<String>emptySet()); for (UberField uberField : uberFields) { if (model.length() > 0) { model.append("&"); } model.append(String.format(MODEL_FORMAT, uberField.getName(), uberField.getName())); } break; } default: } return model.length() == 0 ? null : model.toString(); }
String formName = actionDescriptor.getActionName(); RequestMethod httpMethod = RequestMethod.valueOf(actionDescriptor.getHttpMethod()); if (actionDescriptor.hasRequestBody()) { // parameter bean ActionInputParameter requestBody = actionDescriptor.getRequestBody(); Class<?> parameterType = requestBody.getParameterType(); recurseBeanProperties(parameterType, actionDescriptor, requestBody, requestBody.getValue(), ""); } else { // plain parameter list Collection<String> requestParams = actionDescriptor.getRequestParamNames(); for (String requestParamName : requestParams) { ActionInputParameter actionInputParameter = actionDescriptor.getActionInputParameter(requestParamName);
@Nullable private ActionDescriptor getActionDescriptorForHttpGet(Link templatedAffordance) { if (!(templatedAffordance instanceof Affordance)) { return null; } final List<ActionDescriptor> actionDescriptors = ((Affordance) templatedAffordance).getActionDescriptors(); ActionDescriptor actionDescriptorGet = null; for (ActionDescriptor actionDescriptor : actionDescriptors) { String httpMethod = actionDescriptor.getHttpMethod(); if ("GET".equalsIgnoreCase(httpMethod)) { actionDescriptorGet = actionDescriptor; } } return actionDescriptorGet; }
@Test public void testActionDescriptorForRequestBody() { final Affordance affordance = AffordanceBuilder.linkTo(AffordanceBuilder.methodOn(DummyController.class) .updateThing(1, (Thing) null)) .rel("event") .build(); Assert.assertEquals("Link: <http://example.com/things/1>; rel=\"event\"", affordance.toString()); final ActionDescriptor actionDescriptor = affordance.getActionDescriptors() .get(0); final ActionInputParameter thingParameter = actionDescriptor.getRequestBody(); Assert.assertEquals("Thing", ((Class) thingParameter.getGenericParameterType()).getSimpleName()); Assert.assertThat(thingParameter.isRequestBody(), Matchers.is(true)); Assert.assertEquals("updateThing", actionDescriptor.getActionName()); }
if (!"GET".equals(actionDescriptor.getHttpMethod()) || affordance.isTemplated()) { String href; if (affordance.isTemplated()) { SirenAction sirenAction = new SirenAction(null, actionDescriptor.getActionName(), null, actionDescriptor.getHttpMethod(), href, requestMediaType, fields); ret.add(sirenAction);
@Test public void testActionDescriptorForRequestParams() { final Affordance affordance = AffordanceBuilder.linkTo(AffordanceBuilder.methodOn(DummyController.class) .updateThing(1, (EventStatusType) null)) .rel("eventStatus") .build(); Assert.assertEquals("Link-Template: <http://example.com/things/1/eventStatus{?eventStatus}>; " + "rel=\"eventStatus\"", affordance.toString()); final ActionDescriptor actionDescriptor = affordance.getActionDescriptors() .get(0); Assert.assertThat((EventStatusType[]) actionDescriptor.getActionInputParameter("eventStatus") .getPossibleValues(actionDescriptor), Matchers.arrayContainingInAnyOrder( EventStatusType.EVENT_CANCELLED, EventStatusType.EVENT_POSTPONED, EventStatusType.EVENT_RESCHEDULED, EventStatusType.EVENT_SCHEDULED)); Assert.assertEquals("updateThing", actionDescriptor.getActionName()); }
private void writeHydraVariableMapping(JsonGenerator jgen, @Nullable ActionDescriptor annotatedParameters, Collection<String> variableNames) throws IOException { if (annotatedParameters != null) { for (String variableName : variableNames) { // TODO: find also @Input ActionInputParameter annotatedParameter = annotatedParameters.getActionInputParameter(variableName); // TODO access @Input parameter, too // only unsatisfied parameters become hydra variables if (annotatedParameter != null && annotatedParameter.getValue() == null) { jgen.writeStartObject(); jgen.writeStringField("@type", "hydra:IriTemplateMapping"); jgen.writeStringField("hydra:variable", annotatedParameter.getParameterName()); jgen.writeBooleanField("hydra:required", annotatedParameter .isRequired()); jgen.writeStringField("hydra:property", getExposedPropertyOrParamName(annotatedParameter)); jgen.writeEndObject(); } } } }
RequestMethod httpMethod = RequestMethod.valueOf(actionDescriptor.getHttpMethod()); for (ActionDescriptor actionDescriptor : actionDescriptors) { if ("GET".equals(actionDescriptor.getHttpMethod()) && actionDescriptor.getRequestParamNames() .isEmpty()) { beginDiv();
if (Cardinality.COLLECTION == actionDescriptor.getCardinality()) { this.cardinality = Cardinality.COLLECTION; break;
String formName = actionDescriptor.getActionName(); RequestMethod httpMethod = RequestMethod.valueOf(actionDescriptor.getHttpMethod()); if (actionDescriptor.hasRequestBody()) { // parameter bean ActionInputParameter requestBody = actionDescriptor.getRequestBody(); Class<?> parameterType = requestBody.getParameterType(); recurseBeanProperties(parameterType, actionDescriptor, requestBody, requestBody.getValue(), ""); } else { // plain parameter list Collection<String> requestParams = actionDescriptor.getRequestParamNames(); for (String requestParamName : requestParams) { ActionInputParameter actionInputParameter = actionDescriptor.getActionInputParameter(requestParamName);
private static String getModelProperty(String href, ActionDescriptor actionDescriptor) { RequestMethod httpMethod = RequestMethod.valueOf(actionDescriptor.getHttpMethod()); StringBuffer model = new StringBuffer(); switch (httpMethod) { case POST: case PUT: case PATCH: { List<UberField> uberFields = new ArrayList<UberField>(); recurseBeanCreationParams(uberFields, actionDescriptor.getRequestBody() .getParameterType(), actionDescriptor, actionDescriptor.getRequestBody(), actionDescriptor .getRequestBody() .getValue(), "", Collections.<String>emptySet()); for (UberField uberField : uberFields) { if (model.length() > 0) { model.append("&"); } model.append(String.format(MODEL_FORMAT, uberField.getName(), uberField.getName())); } break; } default: } return model.length() == 0 ? null : model.toString(); }
private List<Link> getEmbeddedLinks(List<Link> links) { List<Link> ret = new ArrayList<Link>(); for (Link link : links) { if (!navigationalRels.contains(link.getRel())) { if (link instanceof Affordance) { Affordance affordance = (Affordance) link; List<ActionDescriptor> actionDescriptors = affordance.getActionDescriptors(); for (ActionDescriptor actionDescriptor : actionDescriptors) { if ("GET".equals(actionDescriptor.getHttpMethod()) && !affordance.isTemplated()) { ret.add(link); } } } else { // templated links are actions, not embedded links if(!link.isTemplated()) { ret.add(link); } } } } return ret; }
if (!"GET".equals(actionDescriptor.getHttpMethod()) || affordance.isTemplated()) { String href; if (affordance.isTemplated()) { SirenAction sirenAction = new SirenAction(null, actionDescriptor.getActionName(), null, actionDescriptor.getHttpMethod(), href, requestMediaType, fields); ret.add(sirenAction);
ActionInputParameter parameterValue = actionDescriptor.getActionInputParameter(paramName); if (parameterValue != null) { from.add(parameterValue.getValue());
RequestMethod httpMethod = RequestMethod.valueOf(actionDescriptor.getHttpMethod()); for (ActionDescriptor actionDescriptor : actionDescriptors) { if ("GET".equals(actionDescriptor.getHttpMethod()) && actionDescriptor.getRequestParamNames() .isEmpty()) { beginDiv();
if (Cardinality.COLLECTION == actionDescriptor.getCardinality()) { this.cardinality = Cardinality.COLLECTION; break;
private List<SirenField> toSirenFields(ActionDescriptor actionDescriptor) { List<SirenField> ret = new ArrayList<SirenField>(); if (actionDescriptor.hasRequestBody()) { recurseBeanCreationParams(ret, actionDescriptor.getRequestBody() .getParameterType(), actionDescriptor, actionDescriptor.getRequestBody(), actionDescriptor .getRequestBody() .getValue(), "", Collections.<String>emptySet()); } else { Collection<String> paramNames = actionDescriptor.getRequestParamNames(); for (String paramName : paramNames) { ActionInputParameter inputParameter = actionDescriptor.getActionInputParameter(paramName); Object[] possibleValues = inputParameter.getPossibleValues(actionDescriptor); ret.add(createSirenField(paramName, inputParameter.getValueFormatted(), inputParameter, possibleValues)); } } return ret; }