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 create a new JSON resource. 29 */ 30 public interface CreateRequest extends Request { 31 32 /** 33 * The name of the action which is reserved for performing "create" operations. 34 */ 35 String ACTION_ID_CREATE = CreateRequest.ACTION_ID_CREATE; 36 37 /** 38 * The name of the field which contains the resource content in the JSON representation. 39 */ 40 String FIELD_CONTENT = "content"; 41 42 /** 43 * The name of the field which contains the new resource ID in the JSON representation. 44 */ 45 String FIELD_NEW_RESOURCE_ID = "newResourceId"; 46 47 48 @Override 49 <R, P> R accept(final RequestVisitor<R, P> v, final P p); 50 51 52 @Override 53 CreateRequest addField(JsonPointer... fields); 54 55 56 @Override 57 CreateRequest addField(String... fields); 58 59 60 @Override 61 String getAdditionalParameter(String name); 62 63 64 @Override 65 Map<String, String> getAdditionalParameters(); 66 67 /** 68 * Returns the content of the JSON resource to be created. 69 * 70 * @return The content of the JSON resource to be created. 71 */ 72 JsonValue getContent(); 73 74 75 @Override 76 List<JsonPointer> getFields(); 77 78 /** 79 * Returns the client provided ID of the resource to be created. The new resource ID will be appended to the 80 * resource path in order to obtain the full path of the new resource. 81 * <p> 82 * The new resource ID is optional and should be used in cases where the client wishes to determine the path of the 83 * resource to be created. If the new resource ID is not provided then the server will be responsible for generating 84 * the ID of the new resource. 85 * 86 * @return The client provided ID of the resource to be created, or {@code null} if the server should be responsible 87 * for generating the resource ID. 88 * @see #getResourcePath() 89 */ 90 String getNewResourceId(); 91 92 93 @Override 94 PreferredLocales getPreferredLocales(); 95 96 97 @Override 98 RequestType getRequestType(); 99 100 /** 101 * Returns the path of the JSON resource container beneath which the new resource should be created. 102 * <p> 103 * The path of the newly created resource will be the concatenation of the resource path and either the client 104 * provided resource ID, if provided, or a server generated resource ID. 105 * 106 * @return The path of the JSON resource container beneath which the new resource should be created. 107 * @see #getNewResourceId() 108 */ 109 @Override 110 String getResourcePath(); 111 112 113 @Override 114 ResourcePath getResourcePathObject(); 115 116 117 @Override 118 Version getResourceVersion(); 119 120 121 @Override 122 CreateRequest setAdditionalParameter(String name, String value) throws BadRequestException; 123 124 /** 125 * Sets the content of the JSON resource to be created. 126 * 127 * @param content 128 * The content of the JSON resource to be created. 129 * @return This create request. 130 * @throws UnsupportedOperationException 131 * If this create request does not permit changes to the content. 132 */ 133 CreateRequest setContent(JsonValue content); 134 135 /** 136 * Sets the client provided ID of the resource to be created. The new resource ID will be appended to the resource 137 * path in order to obtain the full path of the new resource. 138 * <p> 139 * The new resource ID is optional and should be used in cases where the client wishes to determine the path of the 140 * resource to be created. If the new resource ID is not provided then the server will be responsible for generating 141 * the ID of the new resource. 142 * 143 * @param id 144 * The client provided ID of the resource to be created, or {@code null} if the server should be responsible 145 * for generating the resource ID. 146 * @return This create request. 147 * @throws UnsupportedOperationException 148 * If this create request does not permit changes to the new resource ID. 149 * @see #setResourcePath(String) 150 */ 151 CreateRequest setNewResourceId(String id); 152 153 154 @Override 155 CreateRequest setPreferredLocales(PreferredLocales preferredLocales); 156 157 /** 158 * Sets the path of the JSON resource container beneath which the new resource should be created. 159 * <p> 160 * The path of the newly created resource will be the concatenation of the resource path and either the client 161 * provided resource ID, if provided, or a server generated resource ID. 162 * 163 * @param path 164 * The path of the JSON resource container beneath which the new resource should be created. 165 * @return This create request. 166 * @throws UnsupportedOperationException 167 * If this create request does not permit changes to the resource path. 168 * @see #setNewResourceId(String) 169 */ 170 @Override 171 CreateRequest setResourcePath(String path); 172 173 174 @Override 175 CreateRequest setResourcePath(ResourcePath path); 176 177 178 @Override 179 CreateRequest setResourceVersion(Version resourceVersion); 180 181 182 @Override 183 JsonValue toJsonValue(); 184 }