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.net.URI; 32 import java.util.Objects; 33 34 public class LinkBuilder extends AbstractLanguageSpecificBuilder<LinkBuilder> { 35 36 public static LinkBuilder create() { 37 return new LinkBuilder(); 38 } 39 40 private String artifact; 41 private URI href; 42 private String media; 43 private LinkOwnership ownership; 44 private String rel; 45 private String mediaType; 46 private LinkUse use; 47 48 protected LinkBuilder() { 49 super(); 50 } 51 52 @Override 53 public void reset() { 54 this.artifact = null; 55 this.href = null; 56 this.media = null; 57 this.ownership = null; 58 this.rel = null; 59 this.mediaType = null; 60 this.use = null; 61 } 62 63 public String getArtifact() { 64 return artifact; 65 } 66 67 public URI getHref() { 68 return href; 69 } 70 71 public String getMedia() { 72 return media; 73 } 74 75 public LinkOwnership getOwnership() { 76 return ownership; 77 } 78 79 public String getRel() { 80 return rel; 81 } 82 83 public String getMediaType() { 84 return mediaType; 85 } 86 87 public LinkUse getUse() { 88 return use; 89 } 90 91 /** 92 * For use with rel="installationmedia" to identify the canonical name for an installation media 93 * resource. 94 * 95 * @param artifact 96 * a cononical name for the installation media 97 * @return the same builder instance 98 */ 99 public LinkBuilder artifact(String artifact) { 100 Util.requireNonEmpty(artifact, "artifact"); 101 this.artifact = artifact; 102 return this; 103 } 104 105 /** 106 * Sets the to-be-built link's href to the provided value. 107 * 108 * @param uri 109 * a URI identifying the linked resource 110 * @return the same builder instance 111 */ 112 public LinkBuilder href(URI uri) { 113 Objects.requireNonNull(uri, "url"); 114 this.href = uri; 115 return this; 116 } 117 118 /** 119 * Sets the to-be-built link's media to the provided value. 120 * 121 * @param query 122 * a media query as defined by ISO/IEC 19770-2:2015 123 * @return the same builder instance 124 */ 125 public LinkBuilder media(String query) { 126 Util.requireNonEmpty(query, "query"); 127 this.media = query; 128 return this; 129 } 130 131 /** 132 * Sets the to-be-built link's ownership to the provided value. 133 * 134 * @param ownership 135 * a valid non-null enumeration value 136 * @return the same builder instance 137 */ 138 public LinkBuilder ownership(LinkOwnership ownership) { 139 Objects.requireNonNull(ownership, "ownership"); 140 this.ownership = ownership; 141 return this; 142 } 143 144 /** 145 * Sets the to-be-built link's rel to the provided value. 146 * 147 * @param rel 148 * the link relation type 149 * @return the same builder instance 150 */ 151 public LinkBuilder rel(String rel) { 152 Util.requireNonEmpty(rel, "rel"); 153 this.rel = rel; 154 return this; 155 } 156 157 /** 158 * Provide the IANA MediaType for the resource targeted by the href attribute; this provides the 159 * consumer with knowledge of the format of the referenced resource. 160 * 161 * The <a href="http://www.iana.org/assignments/media-types/media-types.xhtml">The IANA Media Type 162 * Registry</a> provides more details on possible values. 163 * 164 * @param mediaType 165 * a valid media type value 166 * @return the same builder instance 167 */ 168 public LinkBuilder mediaType(String mediaType) { 169 Util.requireNonEmpty(mediaType, "mediaType"); 170 this.mediaType = mediaType; 171 return this; 172 } 173 174 /** 175 * Sets the to-be-built link's use to the provided value. 176 * 177 * @param use 178 * a valid, non-null enumeration value 179 * @return the same builder instance 180 */ 181 public LinkBuilder use(LinkUse use) { 182 Objects.requireNonNull(use, "use"); 183 this.use = use; 184 return this; 185 } 186 187 @Override 188 public void validate() throws ValidationException { 189 super.validate(); 190 validateNonNull("href", href); 191 validateNonEmpty("href", href.toString()); 192 validateNonEmpty("href", rel); 193 } 194 }