Package org.openmhealth.reference.domain

Source Code of org.openmhealth.reference.domain.ThirdParty

package org.openmhealth.reference.domain;

import java.net.URI;
import java.util.UUID;

import org.openmhealth.reference.exception.OmhException;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
* <p>
* A third-party system that has registered itself to request access for users'
* data.
* </p>
*
* <p>
* This class is immutable.
* </p>
*
* @author John Jenkins
*/
public class ThirdParty implements OmhObject {
  /**
   * The version of this class used for serialization purposes.
   */
  private static final long serialVersionUID = 1L;

  /**
   * The JSON key for the identifier of a user that created this third-party.
   */
  public static final String JSON_KEY_OWNER = "owner";
  /**
   * The JSON key for the ID.
   */
  public static final String JSON_KEY_ID = "uid";
  /**
   * The JSON key for the shared secret.
   */
  public static final String JSON_KEY_SHARED_SECRET = "sharedSecret";
  /**
   * The JSON key for the name.
   */
  public static final String JSON_KEY_NAME = "name";
  /**
   * The JSON key for the description.
   */
  public static final String JSON_KEY_DESCRIPTION = "description";
  /**
   * The JSON key for the redirect URI.
   */
  public static final String JSON_KEY_REDIRECT_URI = "redirectUri";

  /**
   * The user that created this third-party identity.
   */
  @JsonProperty(JSON_KEY_OWNER)
  private final String owner;
  /**
   * The unique identifier for this third-party.
   */
  @JsonProperty(JSON_KEY_ID)
  private final String id;
  /**
   * The shared secret for this third-party that will be used
   */
  @JsonProperty(JSON_KEY_SHARED_SECRET)
  private final String sharedSecret;
  /**
   * A user-friendly name for this third-party.
   */
  @JsonProperty(JSON_KEY_NAME)
  private final String name;
  /**
   * A user-friendly description for this third-party.
   */
  @JsonProperty(JSON_KEY_DESCRIPTION)
  private final String description;
  /**
   * The URI to use to redirect the user after authorization has been granted
   * or not.
   */
  @JsonProperty(JSON_KEY_REDIRECT_URI)
  private final URI redirectUri;

  /**
   * Creates a new third-party entity created by some user with a given
   * redirect URI.
   *
   * @param owner
   *        The user creating this third-party entity.
   *
   * @param name
   *        A user-friendly name for this third-party.
   *
   * @param description
   *        A user-friendly explanation of who this third-party is.
   *
   * @param redirectUri
   *        The URI to use to redirect the user to after authorization has or
   *        has not been granted.
   *
   * @throws OmhException
   *         Any of the parameters is null or empty.
   */
  public ThirdParty(
    final User owner,
    final String name,
    final String description,
    final URI redirectUri)
    throws OmhException {
   
    // Validate the owner.
    if(owner == null) {
      throw new OmhException("The owner is null.");
    }
    else {
      this.owner = owner.getUsername();
    }
   
    // Validate the name.
    if(name == null) {
      throw new OmhException("The name is null.");
    }
    else {
      // Trim the name.
      String trimmedName = name.trim();
     
      // Verify that the name isn't empty.
      if(trimmedName.length() == 0) {
        throw new OmhException("The name is empty.");
      }
      else {
        this.name = name;
      }
    }
   
    // Validate the description.
    if(description == null) {
      throw new OmhException("The description is null.");
    }
    else {
      // Trim the description.
      String trimmedDescription = description.trim();
     
      // Verify that the description isn't empty.
      if(trimmedDescription.length() == 0) {
        throw new OmhException("The description is empty.");
      }
      else {
        this.description = description;
      }
    }
   
    // Validate the redirect URI.
    if(redirectUri == null) {
      throw new OmhException("The redirect URI is invalid.");
    }
    else {
      this.redirectUri = redirectUri;
    }
   
    // Generate a random ID and secret for this third-party.
    this.id = UUID.randomUUID().toString();
    this.sharedSecret = UUID.randomUUID().toString();
  }
 
  /**
   * Creates a new third-party presumably from an existing third-party object
   * since all o the fields are given. To create a new third-party, it is
   * recommended that {@link #ThirdParty(User, String, String, URI)} be used.
   *
   * @param owner
   *        The ID for the user that created this third-party.
   *
   * @param id
   *        The unique ID for this third-party
   *
   * @param sharedSecret
   *        The secret that will be used to authenticate this third-party.
   *
   * @param name
   *        A user-friendly name for this third-party.
   *
   * @param description
   *        A user-friendly explanation of who this third-party is.
   *
   * @param redirectUri
   *        The URI to redirect the user back to after they have granted or
   *        rejected this third-party's authorization request.
   *
   * @throws OmhException
   *         Any of the parameters is null or empty.
   *        
   * @see #ThirdParty(User, String, String, URI)
   */
  @JsonCreator
  public ThirdParty(
    @JsonProperty(JSON_KEY_OWNER) final String owner,
    @JsonProperty(JSON_KEY_ID) final String id,
    @JsonProperty(JSON_KEY_SHARED_SECRET) final String sharedSecret,
    @JsonProperty(JSON_KEY_NAME) final String name,
    @JsonProperty(JSON_KEY_DESCRIPTION) final String description,
    @JsonProperty(JSON_KEY_REDIRECT_URI) final URI redirectUri)
    throws OmhException {

    // Validate the owner.
    if(owner == null) {
      throw new OmhException("The owner is null.");
    }
    else {
      this.owner = owner;
    }
   
    // Validate the redirect URI.
    if(redirectUri == null) {
      throw new OmhException("The redirect URI is null.");
    }
    else {
      this.redirectUri = redirectUri;
    }
   
    // Validate the ID.
    if(id == null) {
      throw new OmhException("The ID is null.");
    }
    else {
      String idTrimmed = id.trim();
     
      if(idTrimmed.length() == 0) {
        throw new OmhException("The ID is empty.");
      }
      else {
        this.id = idTrimmed;
      }
    }
   
    // Validate the shared secret.
    if(sharedSecret == null) {
      throw new OmhException("The shared secret is null.");
    }
    else {
      String sharedSecretTrimmed = sharedSecret.trim();
     
      if(sharedSecretTrimmed.length() == 0) {
        throw new OmhException("The shared secret is empty.");
      }
      else {
        this.sharedSecret = sharedSecretTrimmed;
      }
    }
   
    // Validate the name.
    if(name == null) {
      throw new OmhException("The name is null.");
    }
    else {
      String nameTrimmed = name.trim();
     
      if(nameTrimmed.length() == 0) {
        throw new OmhException("The name is empty.");
      }
      else {
        this.name = nameTrimmed;
      }
    }
   
    // Validate the description.
    if(description == null) {
      throw new OmhException("The description is null.");
    }
    else {
      String descriptionTrimmed = description.trim();
     
      if(descriptionTrimmed.length() == 0) {
        throw new OmhException("The description is empty.");
      }
      else {
        this.description = descriptionTrimmed;
      }
    }
  }
 
  /**
   * Returns the username of the user that created/owns this third-party.
   *
   * @return The username of the user that created/owns this third-party.
   */
  public String getOwner() {
    return owner;
  }
 
  /**
   * Returns the unique identifier for this third-party.
   *
   * @return The unique identifier for this third-party.
   */
  public String getId() {
    return id;
  }
 
  /**
   * Returns the shared secret.
   *
   * @return The shared secret for the third-party.
   */
  public String getSecret() {
    return sharedSecret;
  }
 
  /**
   * Returns the name.
   *
   * @return The name.
   */
  public String getName() {
    return name;
  }
 
  /**
   * Returns the description.
   *
   * @return The description.
   */
  public String getDescription() {
    return description;
  }
 
  /**
   * Returns the redirect URI.
   *
   * @return The redirect URI.
   */
  public URI getRedirectUri() {
    return redirectUri;
  }
}
TOP

Related Classes of org.openmhealth.reference.domain.ThirdParty

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.