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 import java.util.Map; 21 22 import org.forgerock.http.routing.Version; 23 import org.forgerock.json.JsonPointer; 24 import org.forgerock.json.JsonValue; 25 import org.forgerock.util.i18n.PreferredLocales; 26 27 /** 28 * A request to update a JSON resource by replacing its existing content with new content. 29 */ 30 public interface UpdateRequest extends Request { 31 32 /** 33 * The name of the field which contains the resource content in the JSON representation. 34 */ 35 String FIELD_CONTENT = "content"; 36 37 /** 38 * The name of the field which contains the resource version in the JSON representation. 39 */ 40 String FIELD_REVISION = "revision"; 41 42 43 @Override 44 <R, P> R accept(final RequestVisitor<R, P> v, final P p); 45 46 47 @Override 48 UpdateRequest addField(JsonPointer... fields); 49 50 51 @Override 52 UpdateRequest addField(String... fields); 53 54 55 @Override 56 String getAdditionalParameter(String name); 57 58 59 @Override 60 Map<String, String> getAdditionalParameters(); 61 62 /** 63 * Returns the content of the JSON resource to be replaced. 64 * 65 * @return The content of the JSON resource to be replaced. 66 */ 67 JsonValue getContent(); 68 69 70 @Override 71 List<JsonPointer> getFields(); 72 73 74 @Override 75 PreferredLocales getPreferredLocales(); 76 77 78 @Override 79 RequestType getRequestType(); 80 81 @Override 82 String getResourcePath(); 83 84 @Override 85 ResourcePath getResourcePathObject(); 86 87 @Override 88 Version getResourceVersion(); 89 90 /** 91 * Returns the expected version information associated with the JSON resource to be updated. Version information can 92 * be used in order to implement multi-version concurrency control (MVCC). 93 * <p> 94 * The returned version information may be {@code null} indicating that the client does not care if the resource has 95 * been modified concurrently. If the version information is non-{@code null}, and it does not match the current 96 * version of the targeted JSON resource, then the update request will be rejected by the provider. 97 * 98 * @return The expected version information associated with the JSON resource to be updated. 99 */ 100 String getRevision(); 101 102 @Override 103 UpdateRequest setAdditionalParameter(String name, String value) throws BadRequestException; 104 105 /** 106 * Sets the content of the JSON resource to be replaced. 107 * 108 * @param content 109 * The content of the JSON resource to be replaced. 110 * @return This update request. 111 * @throws UnsupportedOperationException 112 * If this update request does not permit changes to the content. 113 */ 114 UpdateRequest setContent(JsonValue content); 115 116 117 @Override 118 UpdateRequest setPreferredLocales(PreferredLocales preferredLocales); 119 120 121 @Override 122 UpdateRequest setResourcePath(String path); 123 124 125 @Override 126 UpdateRequest setResourcePath(ResourcePath path); 127 128 129 @Override 130 UpdateRequest setResourceVersion(Version resourceVersion); 131 132 /** 133 * Sets the expected version information associated with the JSON resource to be updated. Version information can be 134 * used in order to implement multi-version concurrency control (MVCC). 135 * <p> 136 * The provided version information may be {@code null} indicating that the client does not care if the resource has 137 * been modified concurrently. If the version information is non-{@code null}, and it does not match the current 138 * version of the targeted JSON resource, then the update request will be rejected by the provider. 139 * 140 * @param version 141 * The expected version information associated with the JSON resource to be updated. 142 * @return This patch request. 143 * @throws UnsupportedOperationException 144 * If this update request does not permit changes to the version information. 145 */ 146 UpdateRequest setRevision(String version); 147 148 149 @Override 150 JsonValue toJsonValue(); 151 }