/** * Queries a single link and populates the object with its settings * * @param The query parameters * @throws SynchronizationException if getting and initializing the link details fail */ private void getLink(JsonValue query) throws SynchronizationException { JsonValue results = linkQuery( mapping.getService().getServerContext(), mapping.getService().getConnectionFactory(), query); if (results.size() == 1) { fromJsonValue(results.get(0)); } else if (results.size() > 1) { // shouldn't happen if index is unique throw new SynchronizationException("More than one link found"); } }
/** * Loads the configuration properties in the configuration property file associated with the * framework installation; these properties are accessible to the framework and to bundles and are * intended for configuration purposes. By default, the configuration property file is located in * the <tt>conf/</tt> directory and is called " <tt>config.properties</tt>". * * @return A <tt>Map<String, Object></tt> instance or <tt>null</tt> if there was an error. */ protected Map<String, String> loadConfigProperties( JsonValue configuration, URI projectDirectory) { JsonValue systemProperties = configuration.get(CONFIG_PROPERTIES_PROP); if (systemProperties.isMap()) { // Substitute all variables systemProperties = systemProperties.copy(); } else { Properties props = loadPropertyFile( projectDirectory, systemProperties .expect(String.class) .defaultTo(CONFIG_PROPERTIES_FILE_VALUE) .asString()); if (props == null) return new HashMap<String, String>(0); // Perform variable substitution on specified properties. systemProperties = (new JsonValue(props, null, Arrays.asList(transformer))).copy(); } Map<String, String> config = new HashMap<String, String>(systemProperties.size()); for (Map.Entry<String, Object> entry : systemProperties.asMap().entrySet()) { if (entry.getValue() instanceof String) { // Excluce the null and non String values config.put(entry.getKey(), (String) entry.getValue()); } } return config; }
@Test public void shouldGetWithSSL() throws ResourceException { // Given setSslConfiguration(); final String uri = "URI"; final Map<String, String> queryParameters = new HashMap<String, String>(); final Map<String, String> headers = new HashMap<String, String>(); final Context context = mock(Context.class); final ConcurrentHashMap<String, Object> requestAttributes = new ConcurrentHashMap<String, Object>(); final JSONObject restResponse = mock(JSONObject.class); given(resource.getContext()).willReturn(context); given(context.getAttributes()).willReturn(requestAttributes); given(resource.get(JSONObject.class)).willReturn(restResponse); given(restResponse.toString()).willReturn("{}"); // When final JsonValue response = restClient.get(uri, queryParameters, headers); // Then verify(resource, never()).addQueryParameter(anyString(), anyString()); verify(requestHeaders, never()).set(anyString(), anyString()); verify(resource).getContext(); assertTrue(requestAttributes.containsKey("sslContextFactory")); assertEquals(response.size(), 0); }
@Test public void shouldGetWithEmptyQueryParameters() throws ResourceException { // Given final String uri = "URI"; final Map<String, String> queryParameters = new HashMap<String, String>(); final Map<String, String> headers = new HashMap<String, String>(); final JSONObject restResponse = mock(JSONObject.class); given(resource.get(JSONObject.class)).willReturn(restResponse); given(restResponse.toString()).willReturn("{}"); // When final JsonValue response = restClient.get(uri, queryParameters, headers); // Then verify(resource, never()).addQueryParameter(anyString(), anyString()); verify(requestHeaders, never()).set(anyString(), anyString()); verify(resource, never()).getContext(); assertEquals(response.size(), 0); }
/** * Returns a JSON object containing only the specified fields from the provided JSON value. If the * list of fields is empty then the value is returned unchanged. * * <p><b>NOTE:</b> this method only performs a shallow copy of extracted fields, so changes to the * filtered JSON value may impact the original JSON value, and vice-versa. * * @param resource The JSON value whose fields are to be filtered. * @param fields The list of fields to be extracted. * @return The filtered JSON value. */ public static JsonValue filterResource( final JsonValue resource, final Collection<JsonPointer> fields) { if (fields.isEmpty() || resource.isNull() || resource.size() == 0) { return resource; } else { final Map<String, Object> filtered = new LinkedHashMap<String, Object>(fields.size()); for (JsonPointer field : fields) { if (field.isEmpty()) { // Special case - copy resource fields (assumes Map). filtered.putAll(resource.asMap()); } else { // FIXME: what should we do if the field refers to an array element? final JsonValue value = resource.get(field); if (value != null) { final String key = field.leaf(); filtered.put(key, value.getObject()); } } } return new JsonValue(filtered); } }