1 /** 2 * Portions of this software was developed by employees of the National Institute 3 * of Standards and Technology (NIST), an agency of the Federal Government and is 4 * being made available as a public service. Pursuant to title 17 United States 5 * Code Section 105, works of NIST employees are not subject to copyright 6 * protection in the United States. This software may be subject to foreign 7 * copyright. Permission in the United States and in foreign countries, to the 8 * extent that NIST may hold copyright, to use, copy, modify, create derivative 9 * works, and distribute this software and its documentation without fee is hereby 10 * granted on a non-exclusive basis, provided that this notice and disclaimer 11 * of warranty appears in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER 14 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY 15 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM 17 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE 18 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT 19 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, 20 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, 21 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, 22 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR 23 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT 24 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER. 25 */ 26 27 package gov.nist.secauto.swid.builder; 28 29 import gov.nist.secauto.swid.builder.util.Util; 30 31 import java.util.LinkedList; 32 import java.util.List; 33 import java.util.Objects; 34 35 public class EntityBuilder extends AbstractLanguageSpecificBuilder<EntityBuilder> { 36 private String name; 37 private String regid; 38 private List<Role> roles; 39 private String thumbprint; 40 41 protected EntityBuilder() { 42 super(); 43 } 44 45 @Override 46 public void reset() { 47 super.reset(); 48 name = null; 49 regid = null; 50 roles = new LinkedList<>(); 51 thumbprint = null; 52 } 53 54 public static EntityBuilder create() { 55 return new EntityBuilder(); 56 } 57 58 public String getName() { 59 return name; 60 } 61 62 public String getRegid() { 63 return (regid == null ? SWIDConstants.ENTITY_REGID_DEFAULT : regid); 64 } 65 66 public List<Role> getRoles() { 67 return roles; 68 } 69 70 public String getThumbprint() { 71 return thumbprint; 72 } 73 74 /** 75 * Set the name of the entity. 76 * 77 * @param name 78 * a non-{@code null} name value 79 * @return the sane builder instance 80 */ 81 public EntityBuilder name(String name) { 82 Util.requireNonEmpty(name); 83 this.name = name; 84 return this; 85 } 86 87 /** 88 * Sets the to-be-built entity's regid to the provided value. 89 * 90 * @param regid 91 * the regid value 92 * @return the same builder instance 93 */ 94 public EntityBuilder regid(String regid) { 95 if (SWIDConstants.ENTITY_REGID_DEFAULT.equals(regid)) { 96 this.regid = null; 97 } else { 98 this.regid = regid; 99 } 100 return this; 101 } 102 103 public EntityBuilder thumbprint(String thumbprint) { 104 this.thumbprint = thumbprint; 105 return this; 106 } 107 108 /** 109 * Assigns the identified role to the entity. 110 * 111 * @see Role#assignPrivateRole(int, String) 112 * @see Role#lookupByIndex(int) 113 * @see Role#lookupByName(String) 114 * @param role 115 * the role to assign 116 * @return the same builder instance 117 */ 118 public EntityBuilder addRole(Role role) { 119 Objects.requireNonNull(role, "role"); 120 this.roles.add(role); 121 return this; 122 } 123 124 @Override 125 public void validate() throws ValidationException { 126 super.validate(); 127 validateNonEmpty("name", name); 128 validateNonEmpty("role", roles); 129 } 130 }