@Override protected void addLinksIsisProprietary() { if (objectMember.isContributed()) { final ObjectAdapter serviceAdapter = contributingServiceAdapter(); final JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.CONTRIBUTED_BY, serviceAdapter).build(); getLinks().arrayAdd(contributedByLink); } }
private Object argValueFor(final int i) { if (objectMember.isContributed()) { final ObjectActionParameter actionParameter = objectMember.getParameters().get(i); if (actionParameter.getSpecification().isOfType(objectAdapter.getSpecification())) { return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, objectAdapter).build(); } } // force a null into the map return NullNode.getInstance(); }
@Override protected ObjectAdapterLinkTo linkToForMutatorInvoke() { if (!objectMember.isContributed()) { return super.linkToForMutatorInvoke(); } final DomainServiceLinkTo linkTo = new DomainServiceLinkTo(); return linkTo.usingResourceContext(getResourceContext()).with(contributingServiceAdapter()); }
private static void initializeFields(final RequestContext context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields) { final List<ObjectActionParameter> parameters = action.getParameters(); for (int i = 0; i < fields.length; i++) { final InputField field = fields[i]; final ObjectActionParameter param = parameters.get(i); if (action.isContributed() && i == 0) { // fields[i].setValue(context.mapObject(object, // Scope.INTERACTION)); fields[i].setType(InputField.REFERENCE); fields[i].setHidden(true); } else { fields[i].setHelpReference("xxxhelp"); final ObjectAdapter[] optionsForParameter = action.getChoices(object)[i]; FieldFactory.initializeField(context, object, param, optionsForParameter, !param.isOptional(), field); } } }
private static void writeMethods(final Request request, final ObjectAdapter adapter, List<ObjectAction> actions, final String objectId, final boolean showForms, final InclusionList inclusionList, final String cancelTo) { actions = inclusionList.includedActions(actions); for (int j = 0; j < actions.size(); j++) { final ObjectAction action = actions.get(j); if (action instanceof ObjectActionSet) { request.appendHtml("<div class=\"actions\">"); writeMethods(request, adapter, action.getActions(), objectId, showForms, inclusionList, cancelTo); request.appendHtml("</div>"); } else if (action.isContributed()) { if (action.getParameterCount() == 1 && adapter.getSpecification().isOfType(action.getParameters().get(0).getSpecification())) { if (objectId != null) { final ObjectAdapter target = request.getContext().getMappedObject(objectId); final ObjectAdapter realTarget = action.realTarget(target); final String realTargetId = request.getContext().mapObject(realTarget, Scope.INTERACTION); writeMethod(request, adapter, new String[] { objectId }, action, realTargetId, showForms, cancelTo); } else { request.appendHtml("<div class=\"action\">"); request.appendAsHtmlEncoded(action.getName()); request.appendHtml("???</div>"); } } else if (!adapter.getSpecification().isService()) { writeMethod(request, adapter, new String[0], action, objectId, showForms, cancelTo); } } else { writeMethod(request, adapter, new String[0], action, objectId, showForms, cancelTo); } } }
@Override public ObjectAdapter that(final PerformContext performContext) throws ScenarioBoundValueException { final ObjectAdapter onAdapter = performContext.getOnAdapter(); final ObjectMember nakedObjectMember = performContext.getObjectMember(); final CellBinding onMemberBinding = performContext.getPeer().getOnMemberBinding(); final List<ScenarioCell> argumentCells = performContext.getArgumentCells(); final ObjectAction nakedObjectAction = (ObjectAction) nakedObjectMember; final int parameterCount = nakedObjectAction.getParameterCount(); final boolean isContributedOneArgAction = nakedObjectAction.isContributed() && parameterCount == 1; if (isContributedOneArgAction) { return null; } // lookup arguments final ObjectAdapter[] proposedArguments = performContext.getPeer().getAdapters(onAdapter, nakedObjectAction, onMemberBinding, argumentCells); // validate arguments final Consent argSetValid = nakedObjectAction.isProposedArgumentSetValid(onAdapter, proposedArguments); if (argSetValid.isVetoed()) { throw ScenarioBoundValueException.current(onMemberBinding, argSetValid.getReason()); } // execute return null; }
@Override public ObjectAdapter that(final PerformContext performContext) throws ScenarioBoundValueException { final ObjectAdapter onAdapter = performContext.getOnAdapter(); final ObjectMember nakedObjectMember = performContext.getObjectMember(); final CellBinding onMemberBinding = performContext.getPeer().getOnMemberBinding(); final List<ScenarioCell> argumentCells = performContext.getArgumentCells(); final ObjectAction nakedObjectAction = (ObjectAction) nakedObjectMember; final int parameterCount = nakedObjectAction.getParameterCount(); final boolean isContributedOneArgAction = nakedObjectAction.isContributed() && parameterCount == 1; if (isContributedOneArgAction) { return null; } // lookup arguments final ObjectAdapter[] proposedArguments = performContext.getPeer().getAdapters(onAdapter, nakedObjectAction, onMemberBinding, argumentCells); // validate arguments final Consent argSetValid = nakedObjectAction.isProposedArgumentSetValid(onAdapter, proposedArguments); if (argSetValid.isAllowed()) { final CellBinding thatItBinding = performContext.getPeer().getThatItBinding(); throw ScenarioBoundValueException.current(thatItBinding, "(valid)"); } // execute return null; }
@Override public void doHandle(final PerformContext performContext) throws ScenarioBoundValueException { final ObjectAdapter onAdapter = performContext.getOnAdapter(); final ObjectMember objectMember = performContext.getObjectMember(); final CellBinding onMemberBinding = performContext.getPeer().getOnMemberBinding(); final List<ScenarioCell> argumentCells = performContext.getArgumentCells(); final ObjectAction objectAction = (ObjectAction) objectMember; final int parameterCount = objectAction.getParameterCount(); final boolean isContributedOneArgAction = objectAction.isContributed() && parameterCount == 1; ObjectAdapter[] proposedArguments; if (!isContributedOneArgAction) { // lookup arguments proposedArguments = performContext.getPeer().getAdapters(onAdapter, objectAction, onMemberBinding, argumentCells); // validate arguments final Consent argSetValid = objectAction.isProposedArgumentSetValid(onAdapter, proposedArguments); if (argSetValid.isVetoed()) { throw ScenarioBoundValueException.current(onMemberBinding, argSetValid.getReason()); } } else { proposedArguments = new ObjectAdapter[] { onAdapter }; } // execute result = objectAction.execute(onAdapter, proposedArguments); // all OK. }
@Override public void process(final Request request) { final RequestContext context = request.getContext(); final String objectId = request.getOptionalProperty(OBJECT); final ObjectAdapter object = MethodsUtils.findObject(context, objectId); final String methodName = request.getRequiredProperty(METHOD); final ObjectAction action = MethodsUtils.findAction(object, methodName); final String variableName = request.getOptionalProperty(RESULT_NAME); final String scopeName = request.getOptionalProperty(SCOPE); final ActionContent parameterBlock = new ActionContent(action); request.setBlockContent(parameterBlock); request.processUtilCloseTag(); final ObjectAdapter[] parameters = parameterBlock.getParameters(request); if (!MethodsUtils.isVisibleAndUsable(object, action)) { throw new ForbiddenException(action, ForbiddenException.VISIBLE_AND_USABLE); } // swap null parameter of the object's type to run a contributed method if (action.isContributed()) { final List<ObjectActionParameter> parameterSpecs = action.getParameters(); for (int i = 0; i < parameters.length; i++) { if (parameters[i] == null && object.getSpecification().isOfType(parameterSpecs.get(i).getSpecification())) { parameters[i] = object; break; } } } final Scope scope = RequestContext.scope(scopeName, Scope.REQUEST); MethodsUtils.runMethod(context, action, object, parameters, variableName, scope); request.popBlockContent(); }
} else { final String version = request.getContext().mapVersion(adapter); if (action.getParameterCount() == 0 || (action.isContributed() && action.getParameterCount() == 1)) { ActionButton.write(request, adapter, action, parameters, objectId, version, "_generic." + Dispatcher.EXTENSION, null, null, null, null, null, null, null, null, null); } else if (showForms) {