Response invokeActionQueryOnly(final String actionId, final JsonRepresentation arguments, Where where) { final ObjectAction action = getObjectActionThatIsVisibleForIntent(actionId, Intent.MUTATE, where); final ActionSemantics.Of actionSemantics = action.getSemantics(); if (actionSemantics != ActionSemantics.Of.SAFE) { throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "Method not allowed; action '%s' is not query only", action.getId()); } return invokeActionUsingAdapters(action, arguments, SelfLink.INCLUDED); }
private static Mode determineActionMode(final ObjectAction noAction, final ObjectAdapter contextAdapter) { final int parameterCount = noAction.getParameterCount(); if (parameterCount == 0) { return Mode.RESULTS; } if (parameterCount > 1) { return Mode.PARAMETERS; } // no need to prompt for contributed actions (ie if have a context // adapter) final ObjectActionParameter actionParam = noAction.getParameters().get(0); return ActionParams.compatibleWith(contextAdapter, actionParam) ? Mode.RESULTS : Mode.PARAMETERS; }
/** * Bookmarkable if the {@link ObjectAction action} has a {@link BookmarkPolicyFacet bookmark} policy * of {@link BookmarkPolicy#AS_ROOT root}, and has safe {@link ObjectAction#getSemantics() semantics}. */ public boolean isBookmarkable() { final ObjectAction action = getAction(); final BookmarkPolicyFacet bookmarkPolicy = action.getFacet(BookmarkPolicyFacet.class); final boolean safeSemantics = action.getSemantics().isSafeInNature(); return bookmarkPolicy.value() == BookmarkPolicy.AS_ROOT && safeSemantics; }
private static String determineActionId(final ObjectAction objectAction) { final Identifier identifier = objectAction.getIdentifier(); if (identifier != null) { return identifier.toNameParmsIdentityString(); } // fallback (used for action sets) return objectAction.getId(); }
private static void actionDetails(final ObjectAction objectAction, final int indent, final int count, final DebugBuilder debugBuilder) { debugBuilder.appendln((count + 1) + "." + objectAction.getId() + " (" + objectAction.getClass().getName() + ")"); debugBuilder.indent(); final int newIndent = indent + 4; try { final List<ObjectAction> debActions = objectAction.getActions(); if (debActions.size() > 0) { for (int i = 0; i < debActions.size(); i++) { if (objectAction.getDescription() != null && !objectAction.getDescription().equals("")) { debugBuilder.appendln("Description", objectAction.getDescription()); debugBuilder.appendln("ID", objectAction.getId()); debugBuilder.appendln(objectAction.debugData()); debugBuilder.appendln("Target", objectAction.getTarget()); debugBuilder.appendln("On type", objectAction.getOnType()); final Class<? extends Facet>[] facets = objectAction.getFacetTypes(); if (facets.length > 0) { debugBuilder.appendln("Facets"); debugBuilder.indent(); for (final Class<? extends Facet> facet : facets) { debugBuilder.appendln(objectAction.getFacet(facet).toString()); final ObjectSpecification returnType = objectAction.getReturnType(); debugBuilder.appendln("Returns", returnType == null ? "VOID" : returnType.toString()); final List<ObjectActionParameter> parameters = objectAction.getParameters(); if (parameters.size() == 0) {
public ActionMemento(final ObjectAction action) { this(new SpecMemento(action.getOnType()), action.getType(), action.getIdentifier().toNameParmsIdentityString()); this.action = action; }
@Override public void addActionArgs( final ObjectAction objectAction, final ActionDto actionDto, final ObjectAdapter[] argAdapters) { final String actionId = CommandUtil.memberIdentifierFor(objectAction); final ObjectSpecification onType = objectAction.getOnType(); final String objectType = onType.getSpecId().asString(); final String localId = objectAction.getIdentifier().toNameIdentityString(); actionDto.setLogicalMemberIdentifier(objectType + "#" + localId); actionDto.setMemberIdentifier(actionId); List<ObjectActionParameter> actionParameters = objectAction.getParameters(); for (int paramNum = 0; paramNum < actionParameters.size(); paramNum++) { final ObjectActionParameter actionParameter = actionParameters.get(paramNum); final String parameterName = actionParameter.getName(); final Class<?> paramType = actionParameter.getSpecification().getCorrespondingClass(); final ObjectAdapter argAdapter = argAdapters[paramNum]; final Object arg = argAdapter != null? argAdapter.getObject(): null; final ParamsDto parameters = CommandDtoUtils.parametersFor(actionDto); final List<ParamDto> parameterList = parameters.getParameter(); ParamDto paramDto = CommonDtoUtils.newParamDto( parameterName, paramType, arg, bookmarkService); parameterList.add(paramDto); } }
@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. }
private static ObjectActionParameter actionParameterFor( final ActionMemento actionMemento, final int number, final SpecificationLoader specificationLoader) { final ObjectAction action = actionMemento.getAction(specificationLoader); return action.getParameters().get(number); }
@Override public ObjectAction getObjectAction(final ActionType type, final String name, final List<ObjectSpecification> parameters) { if (action != null && action.getId().equals(name)) { return action; } return null; }
final List<ObjectActionParameter> parameters = action.getParameters(); for (int i = 0; i < parameters.size(); i++) { final ObjectActionParameter parameter = parameters.get(i); final Consent consent = action.isProposedArgumentSetValid(objectAdapter, argArray); if (consent.isVetoed()) { throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_ACCEPTABLE, consent.getReason()); final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray);
private FormState validateParameters(final RequestContext context, final ObjectAction action, final ObjectAdapter object) { final FormState formState = new FormState(); final List<ObjectActionParameter> parameters2 = action.getParameters(); final int parameterCount = action.getParameterCount(); for (int i = 0; i < parameterCount; i++) { final String fieldName = parameterName(i); final Consent consent = action.isProposedArgumentSetValid(object, parameters); if (consent != null && consent.isVetoed()) { formState.setError(consent.getReason());
/** * Factory method for creating {@link PageParameters}. * * see {@link #ActionModel(PageParameters, SpecificationLoader)} */ public static PageParameters createPageParameters( final ObjectAdapter adapter, final ObjectAction objectAction, final ConcurrencyChecking concurrencyChecking) { final PageParameters pageParameters = PageParametersUtils.newPageParameters(); final String oidStr = concurrencyChecking == ConcurrencyChecking.CHECK? adapter.getOid().enString(): adapter.getOid().enStringNoVersion(); PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr); final ActionType actionType = objectAction.getType(); PageParameterNames.ACTION_TYPE.addEnumTo(pageParameters, actionType); final ObjectSpecification actionOnTypeSpec = objectAction.getOnType(); if (actionOnTypeSpec != null) { PageParameterNames.ACTION_OWNING_SPEC.addStringTo(pageParameters, actionOnTypeSpec.getFullIdentifier()); } final String actionId = determineActionId(objectAction); PageParameterNames.ACTION_ID.addStringTo(pageParameters, actionId); return pageParameters; }
@Override public String getCssClass(final ScalarModel scalarModel) { final ObjectAdapterMemento adapterMemento = scalarModel.getObjectAdapterMemento(); if (adapterMemento == null) { // shouldn't happen return null; } final ObjectActionParameter actionParameter = scalarModel.getParameterMemento() .getActionParameter(scalarModel.getSpecificationLoader()); final ObjectAction action = actionParameter.getAction(); final String objectSpecId = action.getOnType().getSpecId().asString().replace(".", "-"); final String parmId = actionParameter.getId(); return "isis-" + objectSpecId + "-" + action.getId() + "-" + parmId; }
@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; }
public static boolean runMethod(final RequestContext context, final ObjectAction action, final ObjectAdapter target, final ObjectAdapter[] parameters, String variable, Scope scope) { scope = scope == null ? Scope.REQUEST : scope; variable = variable == null ? RequestContext.RESULT : variable; final ObjectAdapter result = action.execute(target, parameters == null ? new ObjectAdapter[0] : parameters); if (result == null) { return false; } else { final String mappedId = context.mapObject(result, scope); context.addVariable(variable, mappedId, scope); // context.addVariable(variable + "_type", // action.getFacet(TypeOfFacet.class), scope); return true; } }
@Before public void setUp() throws Exception { BasicConfigurator.configure(); LogManager.getRootLogger().setLevel(Level.OFF); mockAuthenticationManager = mockery.mock(AuthenticationManager.class); mockEncoder = mockery.mock(ObjectEncoderDecoder.class); server = new ServerFacadeImpl(mockAuthenticationManager); server.setEncoder(mockEncoder); server.init(); system = new TestProxySystem(); system.init(); adapter = system.createPersistentTestObject(); oid = adapter.getOid(); targetData = new DummyIdentityData(oid, TestProxyAdapter.class.getName(), new TestProxyVersion(1)); parameterData = new ReferenceData[] {}; final TestProxySpecification proxySpecification = (TestProxySpecification) adapter.getSpecification(); mockAction = mockery.mock(ObjectAction.class); proxySpecification.setupAction(mockAction); mockery.checking(new Expectations() { { one(mockAction).getId(); will(returnValue("action")); one(mockAction).execute(with(equalTo(adapter)), with(equalTo(new ObjectAdapter[0]))); will(returnValue(adapter)); } }); }
@Override protected void putExtensionsIsisProprietary() { getExtensions().mapPut("actionType", objectMember.getType().name().toLowerCase()); final ActionSemantics.Of semantics = objectMember.getSemantics(); getExtensions().mapPut("actionSemantics", semantics.getCamelCaseName()); }
private void addActions(final ObjectAdapter objectAdapter, final List<ObjectAction> actions, final JsonRepresentation members) { for (final ObjectAction action : actions) { final Consent visibility = action.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere()); if (!visibility.isAllowed()) { continue; } final LinkFollowSpecs linkFollowSpecs = getLinkFollowSpecs().follow("members["+action.getId()+"]"); final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(getRendererContext(), linkFollowSpecs, action.getId(), JsonRepresentation.newMap()); renderer.with(new ObjectAndAction(objectAdapter, action)).usingLinkTo(linkToBuilder); members.mapPut(action.getId(), renderer.render()); } }