001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.apache.isis.viewer.restfulobjects.rendering.domaintypes; 020 021import java.util.Collection; 022 023import org.apache.isis.core.metamodel.spec.ObjectSpecification; 024import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation; 025import org.apache.isis.viewer.restfulobjects.applib.Rel; 026import org.apache.isis.viewer.restfulobjects.applib.RepresentationType; 027import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder; 028import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs; 029import org.apache.isis.viewer.restfulobjects.rendering.RendererContext; 030import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract; 031 032public class TypeListReprRenderer extends ReprRendererAbstract<TypeListReprRenderer, Collection<ObjectSpecification>> { 033 034 private Collection<ObjectSpecification> specifications; 035 036 public TypeListReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) { 037 super(resourceContext, linkFollower, RepresentationType.TYPE_LIST, representation); 038 } 039 040 @Override 041 public TypeListReprRenderer with(final Collection<ObjectSpecification> specifications) { 042 this.specifications = specifications; 043 return this; 044 } 045 046 @Override 047 public JsonRepresentation render() { 048 049 // self 050 if (includesSelf) { 051 withLink(Rel.SELF, "domain-types"); 052 } 053 054 final JsonRepresentation specList = JsonRepresentation.newArray(); 055 for (final ObjectSpecification objectSpec : specifications) { 056 final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.DOMAIN_TYPE.getName(), RepresentationType.DOMAIN_TYPE, "domain-types/%s", objectSpec.getSpecId().asString()); 057 specList.arrayAdd(linkBuilder.build()); 058 } 059 060 representation.mapPut("values", specList); 061 062 getExtensions(); // empty 063 064 return representation; 065 } 066 067}