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 * An implementation specific action, or operation, upon a JSON resource.
29 */
30 public interface ActionRequest extends Request {
31 /**
32 * The name of the action which is reserved for performing "create" operations.
33 */
34 String ACTION_ID_CREATE = "create";
35
36 /**
37 * The name of the field which contains the action ID in the JSON representation.
38 */
39 String FIELD_ACTION = "action";
40
41 /**
42 * The name of the field which contains the action content in the JSON representation.
43 */
44 String FIELD_CONTENT = "content";
45
46
47 @Override
48 <R, P> R accept(final RequestVisitor<R, P> v, final P p);
49
50
51 @Override
52 ActionRequest addField(JsonPointer... fields);
53
54
55 @Override
56 ActionRequest addField(String... fields);
57
58 /**
59 * Returns the ID of the action to be performed by this action request.
60 *
61 * @return The ID of the action to be performed by this action request.
62 */
63 String getAction();
64
65 /**
66 * Returns the ID of the action to be performed by this action request as a enum constant of the specified enum
67 * type. The action ID string and enum constants are compared, ignoring case considerations.
68 *
69 * @param <T>
70 * the enum type sub-class.
71 * @param type
72 * the enum type to match constants with the value.
73 * @return the enum constant represented by the Id of the action to be performed by this action request.
74 * @throws IllegalArgumentException
75 * if {@code type} does not represent an enum type, or if the ID does not match any of the enum's
76 * constants.
77 * @throws NullPointerException
78 * if {@code type} is {@code null}.
79 */
80 <T extends Enum<T>> T getActionAsEnum(Class<T> type);
81
82
83 @Override
84 String getAdditionalParameter(String name);
85
86
87 @Override
88 Map<String, String> getAdditionalParameters();
89
90 /**
91 * Returns the content of this action request. The structure of the content is defined by the action.
92 *
93 * @return The content of this action request.
94 */
95 JsonValue getContent();
96
97 @Override
98 List<JsonPointer> getFields();
99
100
101 @Override
102 PreferredLocales getPreferredLocales();
103
104
105 @Override
106 RequestType getRequestType();
107
108
109 @Override
110 String getResourcePath();
111
112
113 @Override
114 ResourcePath getResourcePathObject();
115
116
117 @Override
118 Version getResourceVersion();
119
120 /**
121 * Sets the ID of the action to be performed by this action request.
122 *
123 * @param id
124 * The ID of the action to be performed by this action request.
125 * @return This action request.
126 * @throws UnsupportedOperationException
127 * If this action request does not permit changes to the action ID.
128 */
129 ActionRequest setAction(String id);
130
131
132 @Override
133 ActionRequest setAdditionalParameter(String name, String value) throws BadRequestException;
134
135 /**
136 * Sets the content of this action request. The structure of the content is defined by the action.
137 *
138 * @param content
139 * The content of this action request.
140 * @return This action request.
141 * @throws UnsupportedOperationException
142 * If this action request does not permit changes to the content.
143 */
144 ActionRequest setContent(JsonValue content);
145
146
147 @Override
148 ActionRequest setPreferredLocales(PreferredLocales preferredLocales);
149
150
151 @Override
152 ActionRequest setResourcePath(ResourcePath path);
153
154
155 @Override
156 ActionRequest setResourcePath(String path);
157
158
159 @Override
160 ActionRequest setResourceVersion(Version resourceVersion);
161
162
163 @Override
164 JsonValue toJsonValue();
165 }