001// Generated by delombok at Mon Oct 12 22:51:05 BST 2020 002/* 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 */ 020package org.apache.isis.viewer.restfulobjects.rendering.domaintypes; 021 022import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet; 023import org.apache.isis.core.metamodel.spec.ObjectSpecification; 024import org.apache.isis.core.metamodel.spec.feature.ObjectAction; 025import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; 026import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation; 027import org.apache.isis.viewer.restfulobjects.applib.Rel; 028import org.apache.isis.viewer.restfulobjects.applib.RepresentationType; 029import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext; 030import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder; 031import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs; 032 033public class ActionDescriptionReprRenderer extends AbstractTypeMemberReprRenderer<ActionDescriptionReprRenderer, ObjectAction> { 034 public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final ObjectAction objectAction) { 035 final String domainType = objectSpecification.getSpecId().asString(); 036 final String actionId = objectAction.getId(); 037 final String url = "domain-types/" + domainType + "/actions/" + actionId; 038 return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.ACTION_DESCRIPTION, url); 039 } 040 041 public ActionDescriptionReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) { 042 super(resourceContext, linkFollower, RepresentationType.ACTION_DESCRIPTION, representation); 043 } 044 045 @Override 046 protected void addLinksSpecificToFeature() { 047 addParameters(); 048 addLinkToReturnTypeIfAny(); 049 addLinkToElementTypeIfAny(); 050 } 051 052 private void addParameters() { 053 final JsonRepresentation parameterList = JsonRepresentation.newArray(); 054 final org.apache.isis.commons.collections.Can<org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter> parameters = getObjectFeature().getParameters(); 055 for (final ObjectActionParameter parameter : parameters) { 056 final LinkBuilder linkBuilder = ActionParameterDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ACTION_PARAM, objectSpecification, parameter); 057 parameterList.arrayAdd(linkBuilder.build()); 058 } 059 representation.mapPut("parameters", parameterList); 060 } 061 062 protected void addLinkToElementTypeIfAny() { 063 final TypeOfFacet facet = getObjectFeature().getFacet(TypeOfFacet.class); 064 if (facet == null) { 065 return; 066 } 067 final ObjectSpecification typeOfSpec = facet.valueSpec(); 068 final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ELEMENT_TYPE, typeOfSpec); 069 getLinks().arrayAdd(linkBuilder.build()); 070 } 071 072 private void addLinkToReturnTypeIfAny() { 073 final ObjectSpecification returnType = getObjectFeature().getReturnType(); 074 if (returnType == null) { 075 return; 076 } 077 final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.RETURN_TYPE, returnType); 078 getLinks().arrayAdd(linkBuilder.build()); 079 } 080 081 @Override 082 protected void putExtensionsSpecificToFeature() { 083 putExtensionsName(); 084 putExtensionsDescriptionIfAvailable(); 085 } 086}