Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) SiteWhere, LLC. All rights reserved. http://www.sitewhere.com
   *
   * The software in this package is published under the terms of the CPAL v1.0
   * license, a copy of which has been included with this distribution in the
   * LICENSE.txt file.
   */
  package com.sitewhere.server.asset.scim;
  
 import java.util.List;
 import java.util.Map;
 
 
 
Asset module that interacts with an external WSO2 Identity Server via SCIM.

Author(s):
dadams
 
 public class Wso2ScimAssetModule extends LifecycleComponent implements IAssetModule<PersonAsset> {

Static logger instance
 
 	private static Logger LOGGER = Logger.getLogger(Wso2ScimAssetModule.class);

Module id
 
 	private static final String MODULE_ID = "wso2scim";

Module name
 
 	private static final String MODULE_NAME = "WSO2 Identity Management";

Default base url for user operations
 
 	private static final String DEFAULT_URL = "https://localhost:9443/wso2/scim/Users";

Default username for basic auth
 
 	private static final String DEFAULT_AUTH_USERNAME = "admin";

Default password for basic auth
 
 	private static final String DEFAULT_AUTH_PASSWORD = "admin";

URL used to access user info
 
 	private String userUrl = ;

Use CXF web client to send requests
 
 	private WebClient client;

Jackson JSON factory
 
 	private ObjectMapper mapper = new ObjectMapper();

Cached asset map
 
 	private Map<StringPersonAssetassetCache = new HashMap<StringPersonAsset>();

Matcher used for searches
 
 	protected AssetMatcher matcher = new AssetMatcher();
 
 	public Wso2ScimAssetModule() {
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see com.sitewhere.spi.server.lifecycle.ILifecycleComponent#start()
 	 */
 	public void start() throws SiteWhereException {
 		.info("Connecting to WSO2 Identity Server instance at: " + getUserUrl());
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see com.sitewhere.spi.server.lifecycle.ILifecycleComponent#getLogger()
 	 */
 	public Logger getLogger() {
		return ;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.server.lifecycle.ILifecycleComponent#stop()
	 */
	public void stop() throws SiteWhereException {
		this. = null;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.asset.IAssetModule#getId()
	 */
	public String getId() {
		return ;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.asset.IAssetModule#getName()
	 */
	public String getName() {
		return ;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.asset.IAssetModule#getAssetType()
	 */
	public AssetType getAssetType() {
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.asset.IAssetModule#getAssetById(java.lang.String)
	 */
		return .get(id);
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.asset.IAssetModule#search(java.lang.String)
	 */
	public List<PersonAssetsearch(String criteriathrows SiteWhereException {
		criteria = criteria.toLowerCase();
		List<PersonAssetresults = new ArrayList<PersonAsset>();
		if (criteria.length() == 0) {
			return results;
		}
		for (PersonAsset asset : .values()) {
			if (.isPersonMatch(assetcriteria)) {
				results.add(asset);
			}
		}
		return results;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.sitewhere.spi.asset.IAssetModule#refresh()
	 */
		try {
			return cacheAssetData();
catch (SiteWhereException e) {
		}
	}

Simplifies comparing possibly null non-case sensitive values.

Parameters:
field
value
Returns:
	protected boolean contains(String fieldString value) {
		if (field == null) {
			return false;
		}
		return field.trim().toLowerCase().indexOf(value) != -1;
	}

Make remote call to list all user assets, then parse and cache them.

		.info("Caching search data.");
		int totalAssets = 0;
		long startTime = System.currentTimeMillis();
		WebClient caller = WebClient.fromClient();
		Response response = caller.get();
		Object entity = response.getEntity();
		try {
			JsonNode json = .readTree((InputStreamentity);
			JsonNode resources = json.get(.);
			if (resources == null) {
				String message = "SCIM JSON response did not contain a 'resources' section.";
				.info(message);
				return new CommandResponse(.message);
			}
			Iterator<JsonNodeit = resources.elements();
			while (it.hasNext()) {
				JsonNode resource = it.next();
				PersonAsset asset = parse(resource);
				.put(asset.getId(), asset);
				totalAssets++;
			}
catch (JsonParseException e) {
			throw new SiteWhereException("Unable to parse asset response."e);
catch (IOException e) {
			throw new SiteWhereException("Unable to read asset response."e);
		}
		long totalTime = System.currentTimeMillis() - startTime;
		String message = "Cached " + totalAssets + " assets in " + totalTime + "ms.";
		.info(message);
		return new CommandResponse(.message);
	}

Parse the JSON branch that holds a SCIM resource.

Parameters:
resource
Returns:
	protected PersonAsset parse(JsonNode resourcethrows SiteWhereException {
		PersonAsset asset = new PersonAsset();
		JsonNode id = resource.get(.);
		if (id == null) {
			throw new SiteWhereException("SCIM resource does not have an id.");
		}
		JsonNode username = resource.get(.);
		if (username != null) {
		}
		JsonNode profileUrl = resource.get(.);
		if (profileUrl != null) {
		}
		parseName(resourceasset);
		parseEmail(resourceasset);
		return asset;
	}

Parse name fields.

Parameters:
resource
asset
	protected void parseName(JsonNode resourcePersonAsset asset) {
		JsonNode name = resource.get(.);
		if (name != null) {
			String full = "";
			if (given != null) {
				String givenValue = given.textValue();
				full += givenValue + " ";
				asset.setProperty(.givenValue);
			}
			if (family != null) {
				String familyValue = family.textValue();
				full += familyValue;
				asset.setProperty(.familyValue);
			}
		}
	}

Parse email fields.

Parameters:
resource
asset
	protected void parseEmail(JsonNode resourcePersonAsset asset) {
		JsonNode emails = resource.get(.);
		if (emails != null) {
			int index = 1;
			Iterator<JsonNodeit = emails.elements();
			while (it.hasNext()) {
				String email = it.next().textValue();
				asset.setProperty("emailAddress" + indexemail);
			}
		}
	}
	public String getUserUrl() {
		return ;
	}
	public void setUserUrl(String userUrl) {
		this. = userUrl;
	}
New to GrepCode? Check out our FAQ X