1 /* 2 * The contents of this file are subject to the terms of the Common Development and 3 * Distribution License (the License). You may not use this file except in compliance with the 4 * License. 5 * 6 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 7 * specific language governing permission and limitations under the License. 8 * 9 * When distributing Covered Software, include this CDDL Header Notice in each file and include 10 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 11 * Header, with the fields enclosed by brackets [] replaced by your own identifying 12 * information: "Portions Copyright [year] [name of copyright owner]". 13 * 14 * Copyright 2012-2015 ForgeRock AS. 15 */ 16 17 package org.forgerock.json.resource; 18 19 import java.util.List; 20 21 import org.forgerock.json.JsonPointer; 22 import org.forgerock.json.JsonValue; 23 import org.forgerock.util.promise.Promise; 24 25 /** 26 * A resource, comprising of a resource ID, a revision (etag), and its JSON 27 * content. 28 */ 29 public interface ResourceResponse extends Response { 30 31 /** 32 * The name of the field which contains the resource ID in the JSON 33 * representation. 34 * <p> 35 * <b>Note:</b> when encoding the resource ID as part of a resource's 36 * content the field name {@link #FIELD_CONTENT_ID} should be used. 37 */ 38 String FIELD_ID = "id"; 39 40 /** 41 * The name of the field which contains the resource version in the JSON 42 * representation. 43 * <p> 44 * <b>Note:</b> when encoding the resource revision as part of a resource's 45 * content the field name {@link #FIELD_CONTENT_REVISION} should be used. 46 */ 47 String FIELD_REVISION = "revision"; 48 49 /** 50 * The name of the field in the resource content which contains the resource 51 * ID. This field is semantically equivalent to {@link #FIELD_ID} and is 52 * intended for use in cases where a commons REST API wishes to expose the 53 * resource ID as part of the resource content. 54 */ 55 String FIELD_CONTENT_ID = "_id"; 56 57 /** 58 * The name of the field in the resource content which contains the resource 59 * revision. This field is semantically equivalent to 60 * {@link #FIELD_REVISION} and is intended for use in cases where a commons 61 * REST API wishes to expose the resource revision as part of the resource 62 * content. 63 */ 64 String FIELD_CONTENT_REVISION = "_rev"; 65 66 /** 67 * The name of the field which contains the resource content in the JSON 68 * representation. 69 */ 70 String FIELD_CONTENT = "content"; 71 72 /** 73 * Returns the JSON content of this resource. 74 * 75 * @return The JSON content of this resource. 76 */ 77 JsonValue getContent(); 78 79 /** 80 * Returns the ID of this resource, if applicable. 81 * 82 * @return The ID of this resource, or {@code null} if this resource does 83 * not have an ID. 84 */ 85 String getId(); 86 87 /** 88 * Returns the revision of this resource, if known. 89 * 90 * @return The revision of this resource, or {@code null} if the version is 91 * not known. 92 */ 93 String getRevision(); 94 95 /** 96 * Returns the list of fields which should be included in this JSON resource 97 * after field filtering has occurred. This list will override the list of 98 * fields that is included in the request. An empty list indicates that the 99 * original list of fields in the request should be used for filtering the 100 * response. 101 * 102 * @return The list of fields which should be included in this JSON resource 103 * after field filtering has occurred. 104 */ 105 List<JsonPointer> getFields(); 106 107 /** 108 * Returns true if any fields have been added, indicating that the list of 109 * fields in this response should be included in this JSON resource after 110 * field filtering has occurred, otherwise returns false indicating that the 111 * original list of fields in the request should be used for filtering the 112 * response. 113 * 114 * @return true if any fields have been added, false otherwise. 115 */ 116 boolean hasFields(); 117 118 /** 119 * Adds a field to the list of fields which should be included in this JSON 120 * resource after field filtering has occurred. This list will override the 121 * list of fields that is included in the request. 122 * 123 * @param fields a {@link JsonPointer} representing the field to add. 124 */ 125 void addField(JsonPointer... fields); 126 127 /** 128 * Return this response as a result Promise. 129 * 130 * @return A Promise whose result is this ResourceResponse object. 131 */ 132 Promise<ResourceResponse, ResourceException> asPromise(); 133 134 /** 135 * Returns {@code true} if the provided object is a resource having the same 136 * resource ID and revision as this resource. 137 * <p> 138 * {@inheritDoc} 139 */ 140 @Override 141 boolean equals(final Object obj); 142 143 /** 144 * Returns the hash code for this resource. Two resources are guaranteed to 145 * have the same hash code if they share the same resource ID and revision. 146 * <p> 147 * {@inheritDoc} 148 */ 149 @Override 150 int hashCode(); 151 }