Committed by
Gerrit Code Review
CORD Subscriber GUI - Created XosManagerRestUtils (based on OnosXOSIntegrationManager).
- refactored XosManager appropriately. Change-Id: I34c4627b5f5b55f56b46ead65e7da8b16bf07e54
Showing
4 changed files
with
269 additions
and
33 deletions
| ... | @@ -48,8 +48,18 @@ | ... | @@ -48,8 +48,18 @@ |
| 48 | <artifactId>jersey-servlet</artifactId> | 48 | <artifactId>jersey-servlet</artifactId> |
| 49 | <version>1.19</version> | 49 | <version>1.19</version> |
| 50 | </dependency> | 50 | </dependency> |
| 51 | + <dependency> | ||
| 52 | + <groupId>com.sun.jersey</groupId> | ||
| 53 | + <artifactId>jersey-client</artifactId> | ||
| 54 | + <version>1.19</version> | ||
| 55 | + </dependency> | ||
| 51 | 56 | ||
| 52 | <dependency> | 57 | <dependency> |
| 58 | + <groupId>com.google.sitebricks</groupId> | ||
| 59 | + <artifactId>slf4j</artifactId> | ||
| 60 | + <version>0.8.3</version> | ||
| 61 | + </dependency> | ||
| 62 | + <dependency> | ||
| 53 | <groupId>commons-io</groupId> | 63 | <groupId>commons-io</groupId> |
| 54 | <artifactId>commons-io</artifactId> | 64 | <artifactId>commons-io</artifactId> |
| 55 | <version>2.4</version> | 65 | <version>2.4</version> | ... | ... |
| ... | @@ -21,6 +21,8 @@ import org.onosproject.cord.gui.model.Bundle; | ... | @@ -21,6 +21,8 @@ import org.onosproject.cord.gui.model.Bundle; |
| 21 | import org.onosproject.cord.gui.model.SubscriberUser; | 21 | import org.onosproject.cord.gui.model.SubscriberUser; |
| 22 | import org.onosproject.cord.gui.model.XosFunction; | 22 | import org.onosproject.cord.gui.model.XosFunction; |
| 23 | import org.onosproject.cord.gui.model.XosFunctionDescriptor; | 23 | import org.onosproject.cord.gui.model.XosFunctionDescriptor; |
| 24 | +import org.slf4j.Logger; | ||
| 25 | +import org.slf4j.LoggerFactory; | ||
| 24 | 26 | ||
| 25 | import java.util.Set; | 27 | import java.util.Set; |
| 26 | 28 | ||
| ... | @@ -29,20 +31,21 @@ import java.util.Set; | ... | @@ -29,20 +31,21 @@ import java.util.Set; |
| 29 | */ | 31 | */ |
| 30 | public class XosManager { | 32 | public class XosManager { |
| 31 | 33 | ||
| 32 | - private static final String XOS_HOST = "10.254.1.22"; | 34 | + private static final String URI_BASE = "/rs/subscriber/"; |
| 33 | - private static final String XOS_PORT = "8000"; | ||
| 34 | - | ||
| 35 | - private static final String URL_FMT = "http://%s:%s/xoslib/rs/subscriber/"; | ||
| 36 | - | ||
| 37 | - private static final String BASE_URL = | ||
| 38 | - String.format(URL_FMT, XOS_HOST, XOS_PORT); | ||
| 39 | 35 | ||
| 36 | + private final XosManagerRestUtils xosUtils = new XosManagerRestUtils(URI_BASE); | ||
| 37 | + private final Logger log = LoggerFactory.getLogger(getClass()); | ||
| 40 | 38 | ||
| 41 | /** | 39 | /** |
| 42 | * No instantiation (except via unit test). | 40 | * No instantiation (except via unit test). |
| 43 | */ | 41 | */ |
| 44 | XosManager() {} | 42 | XosManager() {} |
| 45 | 43 | ||
| 44 | + | ||
| 45 | + private String subId(int subscriberId) { | ||
| 46 | + return String.format("%d/", subscriberId); | ||
| 47 | + } | ||
| 48 | + | ||
| 46 | /** | 49 | /** |
| 47 | * Configure XOS to enable the functions that compose the given bundle, | 50 | * Configure XOS to enable the functions that compose the given bundle, |
| 48 | * and disable all the others, for the given subscriber. | 51 | * and disable all the others, for the given subscriber. |
| ... | @@ -51,12 +54,14 @@ public class XosManager { | ... | @@ -51,12 +54,14 @@ public class XosManager { |
| 51 | * @param bundle new bundle to set | 54 | * @param bundle new bundle to set |
| 52 | */ | 55 | */ |
| 53 | public void setNewBundle(int subscriberId, Bundle bundle) { | 56 | public void setNewBundle(int subscriberId, Bundle bundle) { |
| 54 | - System.out.println("\n>> Set New Bundle : " + bundle.descriptor().id()); | 57 | + log.info("\n>> Set New Bundle : " + bundle.descriptor().id()); |
| 55 | 58 | ||
| 56 | - String urlFmt = xosUrl(subscriberId) + "services/%s/%s"; | 59 | + String uriFmt = subId(subscriberId) + "services/%s/%s"; |
| 57 | Set<XosFunctionDescriptor> inBundle = bundle.descriptor().functions(); | 60 | Set<XosFunctionDescriptor> inBundle = bundle.descriptor().functions(); |
| 58 | for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) { | 61 | for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) { |
| 59 | - xosEnableFunction(urlFmt, xfd, inBundle.contains(xfd)); | 62 | + String uri = String.format(uriFmt, xfd.id(), inBundle.contains(xfd)); |
| 63 | + String result = xosUtils.putRest(uri); | ||
| 64 | + // TODO: convert JSON result to object and check (if we care) | ||
| 60 | } | 65 | } |
| 61 | } | 66 | } |
| 62 | 67 | ||
| ... | @@ -69,35 +74,17 @@ public class XosManager { | ... | @@ -69,35 +74,17 @@ public class XosManager { |
| 69 | * @param user user (containing function state) | 74 | * @param user user (containing function state) |
| 70 | */ | 75 | */ |
| 71 | public void apply(int subscriberId, XosFunction func, SubscriberUser user) { | 76 | public void apply(int subscriberId, XosFunction func, SubscriberUser user) { |
| 72 | - System.out.println("\n>> Apply : " + func + " for " + user); | 77 | + log.info("\n>> Apply : " + func + " for " + user); |
| 73 | 78 | ||
| 74 | - String urlPrefix = xosUrl(subscriberId) + "users/" + user.id() + "/"; | 79 | + String uriPrefix = subId(subscriberId) + "users/" + user.id() + "/"; |
| 75 | - String url = urlPrefix + func.xosUrlApply(user); | 80 | + String uri = uriPrefix + func.xosUrlApply(user); |
| 76 | - restPut(url); | 81 | + String result = xosUtils.putRest(uri); |
| 82 | + // TODO: convert JSON result to object and check (if we care) | ||
| 77 | } | 83 | } |
| 78 | 84 | ||
| 79 | 85 | ||
| 80 | // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | 86 | // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
| 81 | 87 | ||
| 82 | - private String xosUrl(int subscriberId) { | ||
| 83 | - return BASE_URL + String.format("%d/", subscriberId); | ||
| 84 | - } | ||
| 85 | - | ||
| 86 | - private void xosEnableFunction(String urlFmt, XosFunctionDescriptor xfd, | ||
| 87 | - boolean enable) { | ||
| 88 | - String url = String.format(urlFmt, xfd.id(), enable); | ||
| 89 | - restPut(url); | ||
| 90 | - } | ||
| 91 | - | ||
| 92 | - // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||
| 93 | - | ||
| 94 | - private void restPut(String url) { | ||
| 95 | - // TODO: wire up to Jackson client... | ||
| 96 | - System.out.println("<<PUT>> " + url); | ||
| 97 | - } | ||
| 98 | - | ||
| 99 | - // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||
| 100 | - | ||
| 101 | /** | 88 | /** |
| 102 | * Singleton instance. | 89 | * Singleton instance. |
| 103 | */ | 90 | */ | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2015 Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + * | ||
| 16 | + */ | ||
| 17 | + | ||
| 18 | +package org.onosproject.cord.gui; | ||
| 19 | + | ||
| 20 | +import com.sun.jersey.api.client.Client; | ||
| 21 | +import com.sun.jersey.api.client.ClientHandlerException; | ||
| 22 | +import com.sun.jersey.api.client.ClientResponse; | ||
| 23 | +import com.sun.jersey.api.client.WebResource; | ||
| 24 | +import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; | ||
| 25 | +import org.slf4j.Logger; | ||
| 26 | + | ||
| 27 | +import static com.google.common.net.MediaType.JSON_UTF_8; | ||
| 28 | +import static java.net.HttpURLConnection.*; | ||
| 29 | +import static org.slf4j.LoggerFactory.getLogger; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Utility RESTful methods for dealing with the XOS server. | ||
| 33 | + */ | ||
| 34 | +public class XosManagerRestUtils { | ||
| 35 | + private static final String TEST_XOS_SERVER_ADDRESS = "10.254.1.22"; | ||
| 36 | + private static final int TEST_XOS_SERVER_PORT = 8000; | ||
| 37 | + private static final String XOSLIB = "/xoslib"; | ||
| 38 | + private static final String AUTH_USER = "padmin@vicci.org"; | ||
| 39 | + private static final String AUTH_PASS = "letmein"; | ||
| 40 | + | ||
| 41 | + private static final String UTF_8 = JSON_UTF_8.toString(); | ||
| 42 | + | ||
| 43 | + private final Logger log = getLogger(getClass()); | ||
| 44 | + | ||
| 45 | + private final String xosServerAddress; | ||
| 46 | + private final int xosServerPort; | ||
| 47 | + private final String baseUri; | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * Constructs a utility class for the default server address and port, | ||
| 51 | + * using the given base URI. | ||
| 52 | + * <p> | ||
| 53 | + * Note that the uri should start and end with a slash; for example: | ||
| 54 | + * {@code "/volttenant/"}. This example would result in URIs of the form: | ||
| 55 | + * <pre> | ||
| 56 | + * "http://10.254.1.22:8000/xoslib/volttenant/" | ||
| 57 | + * </pre> | ||
| 58 | + * | ||
| 59 | + * @param baseUri base URI | ||
| 60 | + */ | ||
| 61 | + public XosManagerRestUtils(String baseUri) { | ||
| 62 | + this(TEST_XOS_SERVER_ADDRESS, TEST_XOS_SERVER_PORT, baseUri); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * Constructs a utility class, using the supplied server address and port, | ||
| 67 | + * using the given base URI. | ||
| 68 | + * <p> | ||
| 69 | + * Note that the uri should start and end with a slash; for example: | ||
| 70 | + * {@code "/volttenant/"}. This example would result in URIs of the form: | ||
| 71 | + * <pre> | ||
| 72 | + * "http://[server]:[port]/xoslib/volttenant/" | ||
| 73 | + * </pre> | ||
| 74 | + * | ||
| 75 | + * @param xosServerAddress server IP address | ||
| 76 | + * @param xosServerPort server port | ||
| 77 | + * @param baseUri base URI | ||
| 78 | + */ | ||
| 79 | + public XosManagerRestUtils(String xosServerAddress, int xosServerPort, | ||
| 80 | + String baseUri) { | ||
| 81 | + this.xosServerAddress = xosServerAddress; | ||
| 82 | + this.xosServerPort = xosServerPort; | ||
| 83 | + this.baseUri = baseUri; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + // build the base URL from the pieces we know... | ||
| 87 | + private String baseUrl() { | ||
| 88 | + return "http://" + xosServerAddress + ":" + | ||
| 89 | + Integer.toString(xosServerPort) + XOSLIB + baseUri; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + /** | ||
| 93 | + * Gets a client web resource builder for the base XOS REST API | ||
| 94 | + * with no additional URI. | ||
| 95 | + * | ||
| 96 | + * @return web resource builder | ||
| 97 | + */ | ||
| 98 | + public WebResource.Builder getClientBuilder() { | ||
| 99 | + return getClientBuilder(""); | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + /** | ||
| 103 | + * Gets a client web resource builder for the base XOS REST API | ||
| 104 | + * with an optional additional URI. | ||
| 105 | + * | ||
| 106 | + * @param uri URI suffix to append to base URI | ||
| 107 | + * @return web resource builder | ||
| 108 | + */ | ||
| 109 | + public WebResource.Builder getClientBuilder(String uri) { | ||
| 110 | + Client client = Client.create(); | ||
| 111 | + client.addFilter(new HTTPBasicAuthFilter(AUTH_USER, AUTH_PASS)); | ||
| 112 | + WebResource resource = client.resource(baseUrl() + uri); | ||
| 113 | + return resource.accept(UTF_8).type(UTF_8); | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + /** | ||
| 117 | + * Performs a REST GET operation on the base XOS REST URI. | ||
| 118 | + * | ||
| 119 | + * @return JSON string fetched by the GET operation | ||
| 120 | + */ | ||
| 121 | + public String getRest() { | ||
| 122 | + return getRest(""); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + /** | ||
| 126 | + * Performs a REST GET operation on the base XOS REST URI with | ||
| 127 | + * an optional additional URI. | ||
| 128 | + * | ||
| 129 | + * @param uri URI suffix to append to base URI | ||
| 130 | + * @return JSON string fetched by the GET operation | ||
| 131 | + */ | ||
| 132 | + public String getRest(String uri) { | ||
| 133 | + WebResource.Builder builder = getClientBuilder(uri); | ||
| 134 | + ClientResponse response = builder.get(ClientResponse.class); | ||
| 135 | + | ||
| 136 | + if (response.getStatus() != HTTP_OK) { | ||
| 137 | + log.info("REST GET request returned error code {}", | ||
| 138 | + response.getStatus()); | ||
| 139 | + } | ||
| 140 | + String jsonString = response.getEntity(String.class); | ||
| 141 | + log.info("JSON read:\n{}", jsonString); | ||
| 142 | + | ||
| 143 | + return jsonString; | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + /** | ||
| 147 | + * Performs a REST PUT operation on the base XOS REST URI. | ||
| 148 | + * | ||
| 149 | + * @return JSON string returned by the PUT operation | ||
| 150 | + */ | ||
| 151 | + public String putRest() { | ||
| 152 | + return putRest(""); | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + /** | ||
| 156 | + * Performs a REST PUT operation on the base XOS REST URI with | ||
| 157 | + * an optional additional URI. | ||
| 158 | + * | ||
| 159 | + * @param uri URI suffix to append to base URI | ||
| 160 | + * @return JSON string returned by the PUT operation | ||
| 161 | + */ | ||
| 162 | + public String putRest(String uri) { | ||
| 163 | + WebResource.Builder builder = getClientBuilder(uri); | ||
| 164 | + ClientResponse response; | ||
| 165 | + | ||
| 166 | + try { | ||
| 167 | + response = builder.put(ClientResponse.class); | ||
| 168 | + } catch (ClientHandlerException e) { | ||
| 169 | + log.warn("Unable to contact REST server: {}", e.getMessage()); | ||
| 170 | + return ""; | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + if (response.getStatus() != HTTP_OK) { | ||
| 174 | + log.info("REST PUT request returned error code {}", | ||
| 175 | + response.getStatus()); | ||
| 176 | + } | ||
| 177 | + String jsonString = response.getEntity(String.class); | ||
| 178 | + log.info("JSON read:\n{}", jsonString); | ||
| 179 | + | ||
| 180 | + return jsonString; | ||
| 181 | + } | ||
| 182 | + | ||
| 183 | + /** | ||
| 184 | + * Performs a REST POST operation of a json string on the base | ||
| 185 | + * XOS REST URI with an optional additional URI. | ||
| 186 | + * | ||
| 187 | + * @param json JSON string to post | ||
| 188 | + */ | ||
| 189 | + public void postRest(String json) { | ||
| 190 | + postRest("", json); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + /** | ||
| 194 | + * Performs a REST POST operation of a json string on the base | ||
| 195 | + * XOS REST URI with an optional additional URI suffix. | ||
| 196 | + * | ||
| 197 | + * @param uri URI suffix to append to base URI | ||
| 198 | + * @param json JSON string to post | ||
| 199 | + */ | ||
| 200 | + public void postRest(String uri, String json) { | ||
| 201 | + WebResource.Builder builder = getClientBuilder(uri); | ||
| 202 | + ClientResponse response; | ||
| 203 | + | ||
| 204 | + try { | ||
| 205 | + response = builder.post(ClientResponse.class, json); | ||
| 206 | + } catch (ClientHandlerException e) { | ||
| 207 | + log.warn("Unable to contact REST server: {}", e.getMessage()); | ||
| 208 | + return; | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + if (response.getStatus() != HTTP_CREATED) { | ||
| 212 | + log.info("REST POST request returned error code {}", | ||
| 213 | + response.getStatus()); | ||
| 214 | + } | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + /** | ||
| 218 | + * Performs a REST DELETE operation on the base | ||
| 219 | + * XOS REST URI with an optional additional URI. | ||
| 220 | + * | ||
| 221 | + * @param uri URI suffix to append to base URI | ||
| 222 | + */ | ||
| 223 | + public void deleteRest(String uri) { | ||
| 224 | + WebResource.Builder builder = getClientBuilder(uri); | ||
| 225 | + ClientResponse response = builder.delete(ClientResponse.class); | ||
| 226 | + | ||
| 227 | + if (response.getStatus() != HTTP_NO_CONTENT) { | ||
| 228 | + log.info("REST DELETE request returned error code {}", | ||
| 229 | + response.getStatus()); | ||
| 230 | + } | ||
| 231 | + } | ||
| 232 | + | ||
| 233 | +} |
| ... | @@ -176,6 +176,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { | ... | @@ -176,6 +176,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { |
| 176 | * | 176 | * |
| 177 | * @return web resource builder | 177 | * @return web resource builder |
| 178 | */ | 178 | */ |
| 179 | + @Deprecated | ||
| 179 | private WebResource.Builder getClientBuilder() { | 180 | private WebResource.Builder getClientBuilder() { |
| 180 | return getClientBuilder(""); | 181 | return getClientBuilder(""); |
| 181 | } | 182 | } |
| ... | @@ -186,6 +187,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { | ... | @@ -186,6 +187,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { |
| 186 | * | 187 | * |
| 187 | * @return web resource builder | 188 | * @return web resource builder |
| 188 | */ | 189 | */ |
| 190 | + @Deprecated | ||
| 189 | private WebResource.Builder getClientBuilder(String uri) { | 191 | private WebResource.Builder getClientBuilder(String uri) { |
| 190 | String baseUrl = "http://" + xosServerAddress + ":" | 192 | String baseUrl = "http://" + xosServerAddress + ":" |
| 191 | + Integer.toString(xosServerPort); | 193 | + Integer.toString(xosServerPort); |
| ... | @@ -202,6 +204,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { | ... | @@ -202,6 +204,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { |
| 202 | * | 204 | * |
| 203 | * @return JSON string fetched by the GET operation | 205 | * @return JSON string fetched by the GET operation |
| 204 | */ | 206 | */ |
| 207 | + @Deprecated | ||
| 205 | private String getRest() { | 208 | private String getRest() { |
| 206 | return getRest(""); | 209 | return getRest(""); |
| 207 | } | 210 | } |
| ... | @@ -212,6 +215,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { | ... | @@ -212,6 +215,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { |
| 212 | * | 215 | * |
| 213 | * @return JSON string fetched by the GET operation | 216 | * @return JSON string fetched by the GET operation |
| 214 | */ | 217 | */ |
| 218 | + @Deprecated | ||
| 215 | private String getRest(String uri) { | 219 | private String getRest(String uri) { |
| 216 | WebResource.Builder builder = getClientBuilder(uri); | 220 | WebResource.Builder builder = getClientBuilder(uri); |
| 217 | ClientResponse response = builder.get(ClientResponse.class); | 221 | ClientResponse response = builder.get(ClientResponse.class); |
| ... | @@ -232,6 +236,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { | ... | @@ -232,6 +236,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { |
| 232 | * | 236 | * |
| 233 | * @param json JSON string to post | 237 | * @param json JSON string to post |
| 234 | */ | 238 | */ |
| 239 | + @Deprecated | ||
| 235 | private void postRest(String json) { | 240 | private void postRest(String json) { |
| 236 | WebResource.Builder builder = getClientBuilder(); | 241 | WebResource.Builder builder = getClientBuilder(); |
| 237 | ClientResponse response; | 242 | ClientResponse response; |
| ... | @@ -255,6 +260,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { | ... | @@ -255,6 +260,7 @@ public class OnosXOSIntegrationManager implements VoltTenantService { |
| 255 | * | 260 | * |
| 256 | * @param uri optional additional URI | 261 | * @param uri optional additional URI |
| 257 | */ | 262 | */ |
| 263 | + @Deprecated | ||
| 258 | private void deleteRest(String uri) { | 264 | private void deleteRest(String uri) { |
| 259 | WebResource.Builder builder = getClientBuilder(uri); | 265 | WebResource.Builder builder = getClientBuilder(uri); |
| 260 | ClientResponse response = builder.delete(ClientResponse.class); | 266 | ClientResponse response = builder.delete(ClientResponse.class); | ... | ... |
-
Please register or login to post a comment