001// Generated from: ../../../../../../../../oscal/src/metaschema/oscal_assessment-results_metaschema.xml 002// Do not edit - changes will be lost when regenerated. 003package dev.metaschema.oscal.lib.model; 004 005import dev.metaschema.core.datatype.adapter.UuidAdapter; 006import dev.metaschema.core.datatype.markup.MarkupMultiline; 007import dev.metaschema.core.datatype.markup.MarkupMultilineAdapter; 008import dev.metaschema.core.model.IBoundObject; 009import dev.metaschema.core.model.IMetaschemaData; 010import dev.metaschema.core.model.JsonGroupAsBehavior; 011import dev.metaschema.core.model.constraint.IConstraint; 012import dev.metaschema.core.util.ObjectUtils; 013import dev.metaschema.databind.model.annotations.AssemblyConstraints; 014import dev.metaschema.databind.model.annotations.BoundAssembly; 015import dev.metaschema.databind.model.annotations.BoundField; 016import dev.metaschema.databind.model.annotations.BoundFlag; 017import dev.metaschema.databind.model.annotations.GroupAs; 018import dev.metaschema.databind.model.annotations.Index; 019import dev.metaschema.databind.model.annotations.IsUnique; 020import dev.metaschema.databind.model.annotations.KeyField; 021import dev.metaschema.databind.model.annotations.Let; 022import dev.metaschema.databind.model.annotations.MetaschemaAssembly; 023import dev.metaschema.databind.model.annotations.ValueConstraints; 024import edu.umd.cs.findbugs.annotations.NonNull; 025import edu.umd.cs.findbugs.annotations.Nullable; 026import java.util.LinkedList; 027import java.util.List; 028import java.util.UUID; 029import org.apache.commons.lang3.builder.ReflectionToStringBuilder; 030import org.apache.commons.lang3.builder.ToStringStyle; 031 032/** 033 * Security assessment results, such as those provided by a FedRAMP assessor in the FedRAMP Security Assessment Report. 034 */ 035@MetaschemaAssembly( 036 formalName = "Security Assessment Results (SAR)", 037 description = "Security assessment results, such as those provided by a FedRAMP assessor in the FedRAMP Security Assessment Report.", 038 name = "assessment-results", 039 moduleClass = OscalArModule.class, 040 rootName = "assessment-results", 041 valueConstraints = @ValueConstraints(lets = @Let(name = "all-imports", target = "recurse-depth('.[import-ap]/doc(resolve-uri(Q{http://csrc.nist.gov/ns/oscal/1.0}resolve-reference(import-ap/@href)))/assessment-plan|.[import-ssp]/doc(resolve-uri(Q{http://csrc.nist.gov/ns/oscal/1.0}resolve-reference(import-ssp/@href)))/system-security-plan|.[import-profile]/resolve-profile(doc(resolve-uri(Q{http://csrc.nist.gov/ns/oscal/1.0}resolve-reference(import-profile/@href))))/catalog')")), 042 modelConstraints = @AssemblyConstraints(index = {@Index(id = "oscal-ar-index-metadata-scoped-role-id", formalName = "In-Scope Role Identifiers", description = "An index of role identifiers that are in-scope for the assessment-result model. Roles are collected from imported assessment-plans, which in turn includes referenced system-securtity-plans, which in turn includes referenced profiles and catalogs. For a given role @id, a locally declared role takes precedence over a role that is imported, the role that was last imported.", level = IConstraint.Level.ERROR, target = "map:merge($all-imports/metadata/role ! map:entry(@id,.))?*", name = "index-imports-metadata-role-id", keyFields = @KeyField(target = "@id")), @Index(id = "oscal-ar-index-metadata-scoped-location-uuid", level = IConstraint.Level.ERROR, target = "map:merge($all-imports/metadata/location ! map:entry(@uuid,.))?*", name = "index-imports-metadata-location-uuid", keyFields = @KeyField(target = "@uuid")), @Index(id = "oscal-ar-index-metadata-scoped-party-uuid", level = IConstraint.Level.ERROR, target = "map:merge($all-imports/metadata/party ! map:entry(@uuid,.))?*", name = "index-imports-metadata-party-uuid", keyFields = @KeyField(target = "@uuid")), @Index(id = "oscal-ar-index-metadata-scoped-party-organization-uuid", level = IConstraint.Level.ERROR, target = "map:merge($all-imports/metadata/party[@type='organization'] ! map:entry(@uuid,.))?*", name = "index-imports-metadata-party-organization-uuid", keyFields = @KeyField(target = "@uuid")), @Index(id = "oscal-ar-index-metadata-scoped-property-uuid", level = IConstraint.Level.ERROR, target = "map:merge($all-imports//prop[@uuid] ! map:entry(@uuid,.))?*", name = "index-imports-metadata-property-uuid", keyFields = @KeyField(target = "@uuid"))}, unique = {@IsUnique(id = "oscal-unique-document-id", formalName = "Unique Document Identifier", description = "Ensure all document identifiers have a unique combination of @scheme and value.", level = IConstraint.Level.ERROR, target = "document-id", keyFields = {@KeyField(target = "@scheme"), @KeyField}), @IsUnique(id = "oscal-unique-property-in-context-location", formalName = "Unique Properties", description = "Ensure all properties are unique for a given location using a unique combination of @ns, @name, @class. @group. and @value.", level = IConstraint.Level.ERROR, target = ".//prop", keyFields = {@KeyField(target = "path(..)"), @KeyField(target = "@name"), @KeyField(target = "@ns"), @KeyField(target = "@class"), @KeyField(target = "@group"), @KeyField(target = "@value")}), @IsUnique(id = "oscal-unique-link-in-context-location", formalName = "Unique Links", description = "Ensure all links are unique for a given location using a unique combination of @href, @rel, and @media-type.", level = IConstraint.Level.ERROR, target = ".//link", keyFields = {@KeyField(target = "path(..)"), @KeyField(target = "@href"), @KeyField(target = "@rel"), @KeyField(target = "@media-type"), @KeyField(target = "@resource-fragment")}), @IsUnique(id = "oscal-unique-responsibility-in-context-location", formalName = "Unique Responsibilities", description = "Ensure all responsible-roles and responsible-parties are unique for a given location using a unique combination of @role-id and the combination of @party-uuid values.", level = IConstraint.Level.ERROR, target = ".//(responsible-party|responsible-role)", keyFields = {@KeyField(target = "path(..)"), @KeyField(target = "@role-id"), @KeyField(target = "@party-uuid")}, remarks = "Since `responsible-party` and `responsible-role` associate multiple `party-uuid` entries with a single `role-id`, each role-id must be referenced only once.")}) 043) 044public class AssessmentResults extends AbstractOscalInstance implements IBoundObject { 045 private final IMetaschemaData __metaschemaData; 046 047 /** 048 * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a>, <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique">globally unique</a> identifier with <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance">cross-instance</a> scope that can be used to reference this assessment results instance in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#ar-identifiers">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>assessment result</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document. 049 */ 050 @BoundFlag( 051 formalName = "Assessment Results Universally Unique Identifier", 052 description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented), [globally unique](https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique) identifier with [cross-instance](https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance) scope that can be used to reference this assessment results instance in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ar-identifiers). The locally defined *UUID* of the `assessment result` can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned [per-subject](https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency), which means it should be consistently used to identify the same subject across revisions of the document.", 053 name = "uuid", 054 required = true, 055 typeAdapter = UuidAdapter.class 056 ) 057 private UUID _uuid; 058 059 /** 060 * Provides information about the containing document, and defines concepts that are shared across the document. 061 */ 062 @BoundAssembly( 063 formalName = "Document Metadata", 064 description = "Provides information about the containing document, and defines concepts that are shared across the document.", 065 useName = "metadata", 066 minOccurs = 1 067 ) 068 private Metadata _metadata; 069 070 /** 071 * Used by assessment-results to import information about the original plan for assessing the system. 072 */ 073 @BoundAssembly( 074 formalName = "Import Assessment Plan", 075 description = "Used by assessment-results to import information about the original plan for assessing the system.", 076 useName = "import-ap", 077 remarks = "Used by the SAR to import information about the original plan for assessing the system.", 078 minOccurs = 1 079 ) 080 private ImportAp _importAp; 081 082 /** 083 * Used to define data objects that are used in the assessment plan, that do not appear in the referenced SSP. 084 */ 085 @BoundAssembly( 086 formalName = "Local Definitions", 087 description = "Used to define data objects that are used in the assessment plan, that do not appear in the referenced SSP.", 088 useName = "local-definitions" 089 ) 090 private LocalDefinitions _localDefinitions; 091 092 /** 093 * Used by the assessment results and POA&M. In the assessment results, this identifies all of the assessment observations and findings, initial and residual risks, deviations, and disposition. In the POA&M, this identifies initial and residual risks, deviations, and disposition. 094 */ 095 @BoundAssembly( 096 formalName = "Assessment Result", 097 description = "Used by the assessment results and POA\\&M. In the assessment results, this identifies all of the assessment observations and findings, initial and residual risks, deviations, and disposition. In the POA\\&M, this identifies initial and residual risks, deviations, and disposition.", 098 useName = "result", 099 minOccurs = 1, 100 maxOccurs = -1, 101 groupAs = @GroupAs(name = "results", inJson = JsonGroupAsBehavior.LIST) 102 ) 103 private List<Result> _results; 104 105 /** 106 * A collection of resources that may be referenced from within the OSCAL document instance. 107 */ 108 @BoundAssembly( 109 formalName = "Back matter", 110 description = "A collection of resources that may be referenced from within the OSCAL document instance.", 111 useName = "back-matter" 112 ) 113 private BackMatter _backMatter; 114 115 /** 116 * Constructs a new {@code dev.metaschema.oscal.lib.model.AssessmentResults} instance with no metadata. 117 */ 118 public AssessmentResults() { 119 this(null); 120 } 121 122 /** 123 * Constructs a new {@code dev.metaschema.oscal.lib.model.AssessmentResults} instance with the specified metadata. 124 * 125 * @param data 126 * the metaschema data, or {@code null} if none 127 */ 128 public AssessmentResults(IMetaschemaData data) { 129 this.__metaschemaData = data; 130 } 131 132 @Override 133 public IMetaschemaData getMetaschemaData() { 134 return __metaschemaData; 135 } 136 137 /** 138 * Get the "{@literal Assessment Results Universally Unique Identifier}". 139 * 140 * <p> 141 * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a>, <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique">globally unique</a> identifier with <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance">cross-instance</a> scope that can be used to reference this assessment results instance in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#ar-identifiers">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>assessment result</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document. 142 * 143 * @return the uuid value 144 */ 145 @NonNull 146 public UUID getUuid() { 147 return _uuid; 148 } 149 150 /** 151 * Set the "{@literal Assessment Results Universally Unique Identifier}". 152 * 153 * <p> 154 * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a>, <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique">globally unique</a> identifier with <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance">cross-instance</a> scope that can be used to reference this assessment results instance in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#ar-identifiers">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>assessment result</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document. 155 * 156 * @param value 157 * the uuid value to set 158 */ 159 public void setUuid(@NonNull UUID value) { 160 _uuid = value; 161 } 162 163 /** 164 * Get the "{@literal Document Metadata}". 165 * 166 * <p> 167 * Provides information about the containing document, and defines concepts that are shared across the document. 168 * 169 * @return the metadata value 170 */ 171 @NonNull 172 public Metadata getMetadata() { 173 return _metadata; 174 } 175 176 /** 177 * Set the "{@literal Document Metadata}". 178 * 179 * <p> 180 * Provides information about the containing document, and defines concepts that are shared across the document. 181 * 182 * @param value 183 * the metadata value to set 184 */ 185 public void setMetadata(@NonNull Metadata value) { 186 _metadata = value; 187 } 188 189 /** 190 * Get the "{@literal Import Assessment Plan}". 191 * 192 * <p> 193 * Used by assessment-results to import information about the original plan for assessing the system. 194 * 195 * @return the import-ap value 196 */ 197 @NonNull 198 public ImportAp getImportAp() { 199 return _importAp; 200 } 201 202 /** 203 * Set the "{@literal Import Assessment Plan}". 204 * 205 * <p> 206 * Used by assessment-results to import information about the original plan for assessing the system. 207 * 208 * @param value 209 * the import-ap value to set 210 */ 211 public void setImportAp(@NonNull ImportAp value) { 212 _importAp = value; 213 } 214 215 /** 216 * Get the "{@literal Local Definitions}". 217 * 218 * <p> 219 * Used to define data objects that are used in the assessment plan, that do not appear in the referenced SSP. 220 * 221 * @return the local-definitions value, or {@code null} if not set 222 */ 223 @Nullable 224 public LocalDefinitions getLocalDefinitions() { 225 return _localDefinitions; 226 } 227 228 /** 229 * Set the "{@literal Local Definitions}". 230 * 231 * <p> 232 * Used to define data objects that are used in the assessment plan, that do not appear in the referenced SSP. 233 * 234 * @param value 235 * the local-definitions value to set, or {@code null} to clear 236 */ 237 public void setLocalDefinitions(@Nullable LocalDefinitions value) { 238 _localDefinitions = value; 239 } 240 241 /** 242 * Get the "{@literal Assessment Result}". 243 * 244 * <p> 245 * Used by the assessment results and POA&M. In the assessment results, this identifies all of the assessment observations and findings, initial and residual risks, deviations, and disposition. In the POA&M, this identifies initial and residual risks, deviations, and disposition. 246 * 247 * @return the result value 248 */ 249 @NonNull 250 public List<Result> getResults() { 251 if (_results == null) { 252 _results = new LinkedList<>(); 253 } 254 return ObjectUtils.notNull(_results); 255 } 256 257 /** 258 * Set the "{@literal Assessment Result}". 259 * 260 * <p> 261 * Used by the assessment results and POA&M. In the assessment results, this identifies all of the assessment observations and findings, initial and residual risks, deviations, and disposition. In the POA&M, this identifies initial and residual risks, deviations, and disposition. 262 * 263 * @param value 264 * the result value to set 265 */ 266 public void setResults(@NonNull List<Result> value) { 267 _results = value; 268 } 269 270 /** 271 * Add a new {@link Result} item to the underlying collection. 272 * @param item the item to add 273 * @return {@code true} 274 */ 275 public boolean addResult(Result item) { 276 Result value = ObjectUtils.requireNonNull(item,"item cannot be null"); 277 if (_results == null) { 278 _results = new LinkedList<>(); 279 } 280 return _results.add(value); 281 } 282 283 /** 284 * Remove the first matching {@link Result} item from the underlying collection. 285 * @param item the item to remove 286 * @return {@code true} if the item was removed or {@code false} otherwise 287 */ 288 public boolean removeResult(Result item) { 289 Result value = ObjectUtils.requireNonNull(item,"item cannot be null"); 290 return _results != null && _results.remove(value); 291 } 292 293 /** 294 * Get the "{@literal Back matter}". 295 * 296 * <p> 297 * A collection of resources that may be referenced from within the OSCAL document instance. 298 * 299 * @return the back-matter value, or {@code null} if not set 300 */ 301 @Nullable 302 public BackMatter getBackMatter() { 303 return _backMatter; 304 } 305 306 /** 307 * Set the "{@literal Back matter}". 308 * 309 * <p> 310 * A collection of resources that may be referenced from within the OSCAL document instance. 311 * 312 * @param value 313 * the back-matter value to set, or {@code null} to clear 314 */ 315 public void setBackMatter(@Nullable BackMatter value) { 316 _backMatter = value; 317 } 318 319 @Override 320 public String toString() { 321 return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString()); 322 } 323 324 /** 325 * Used to define data objects that are used in the assessment plan, that do not appear in the referenced SSP. 326 */ 327 @MetaschemaAssembly( 328 formalName = "Local Definitions", 329 description = "Used to define data objects that are used in the assessment plan, that do not appear in the referenced SSP.", 330 name = "local-definitions", 331 moduleClass = OscalArModule.class 332 ) 333 public static class LocalDefinitions implements IBoundObject { 334 private final IMetaschemaData __metaschemaData; 335 336 /** 337 * A local definition of a control objective for this assessment. Uses catalog syntax for control objective and assessment actions. 338 */ 339 @BoundAssembly( 340 formalName = "Assessment-Specific Control Objective", 341 description = "A local definition of a control objective for this assessment. Uses catalog syntax for control objective and assessment actions.", 342 useName = "objectives-and-methods", 343 maxOccurs = -1, 344 groupAs = @GroupAs(name = "objectives-and-methods", inJson = JsonGroupAsBehavior.LIST) 345 ) 346 private List<LocalObjective> _objectivesAndMethods; 347 348 /** 349 * Identifies an assessment or related process that can be performed. In the assessment plan, this is an intended activity which may be associated with an assessment task. In the assessment results, this an activity that was actually performed as part of an assessment. 350 */ 351 @BoundAssembly( 352 formalName = "Activity", 353 description = "Identifies an assessment or related process that can be performed. In the assessment plan, this is an intended activity which may be associated with an assessment task. In the assessment results, this an activity that was actually performed as part of an assessment.", 354 useName = "activity", 355 maxOccurs = -1, 356 groupAs = @GroupAs(name = "activities", inJson = JsonGroupAsBehavior.LIST) 357 ) 358 private List<Activity> _activities; 359 360 /** 361 * Additional commentary about the containing object. 362 */ 363 @BoundField( 364 formalName = "Remarks", 365 description = "Additional commentary about the containing object.", 366 useName = "remarks", 367 typeAdapter = MarkupMultilineAdapter.class 368 ) 369 private MarkupMultiline _remarks; 370 371 /** 372 * Constructs a new {@code dev.metaschema.oscal.lib.model.AssessmentResults.LocalDefinitions} instance with no metadata. 373 */ 374 public LocalDefinitions() { 375 this(null); 376 } 377 378 /** 379 * Constructs a new {@code dev.metaschema.oscal.lib.model.AssessmentResults.LocalDefinitions} instance with the specified metadata. 380 * 381 * @param data 382 * the metaschema data, or {@code null} if none 383 */ 384 public LocalDefinitions(IMetaschemaData data) { 385 this.__metaschemaData = data; 386 } 387 388 @Override 389 public IMetaschemaData getMetaschemaData() { 390 return __metaschemaData; 391 } 392 393 /** 394 * Get the "{@literal Assessment-Specific Control Objective}". 395 * 396 * <p> 397 * A local definition of a control objective for this assessment. Uses catalog syntax for control objective and assessment actions. 398 * 399 * @return the objectives-and-methods value 400 */ 401 @NonNull 402 public List<LocalObjective> getObjectivesAndMethods() { 403 if (_objectivesAndMethods == null) { 404 _objectivesAndMethods = new LinkedList<>(); 405 } 406 return ObjectUtils.notNull(_objectivesAndMethods); 407 } 408 409 /** 410 * Set the "{@literal Assessment-Specific Control Objective}". 411 * 412 * <p> 413 * A local definition of a control objective for this assessment. Uses catalog syntax for control objective and assessment actions. 414 * 415 * @param value 416 * the objectives-and-methods value to set 417 */ 418 public void setObjectivesAndMethods(@NonNull List<LocalObjective> value) { 419 _objectivesAndMethods = value; 420 } 421 422 /** 423 * Add a new {@link LocalObjective} item to the underlying collection. 424 * @param item the item to add 425 * @return {@code true} 426 */ 427 public boolean addObjectivesAndMethods(LocalObjective item) { 428 LocalObjective value = ObjectUtils.requireNonNull(item,"item cannot be null"); 429 if (_objectivesAndMethods == null) { 430 _objectivesAndMethods = new LinkedList<>(); 431 } 432 return _objectivesAndMethods.add(value); 433 } 434 435 /** 436 * Remove the first matching {@link LocalObjective} item from the underlying collection. 437 * @param item the item to remove 438 * @return {@code true} if the item was removed or {@code false} otherwise 439 */ 440 public boolean removeObjectivesAndMethods(LocalObjective item) { 441 LocalObjective value = ObjectUtils.requireNonNull(item,"item cannot be null"); 442 return _objectivesAndMethods != null && _objectivesAndMethods.remove(value); 443 } 444 445 /** 446 * Get the "{@literal Activity}". 447 * 448 * <p> 449 * Identifies an assessment or related process that can be performed. In the assessment plan, this is an intended activity which may be associated with an assessment task. In the assessment results, this an activity that was actually performed as part of an assessment. 450 * 451 * @return the activity value 452 */ 453 @NonNull 454 public List<Activity> getActivities() { 455 if (_activities == null) { 456 _activities = new LinkedList<>(); 457 } 458 return ObjectUtils.notNull(_activities); 459 } 460 461 /** 462 * Set the "{@literal Activity}". 463 * 464 * <p> 465 * Identifies an assessment or related process that can be performed. In the assessment plan, this is an intended activity which may be associated with an assessment task. In the assessment results, this an activity that was actually performed as part of an assessment. 466 * 467 * @param value 468 * the activity value to set 469 */ 470 public void setActivities(@NonNull List<Activity> value) { 471 _activities = value; 472 } 473 474 /** 475 * Add a new {@link Activity} item to the underlying collection. 476 * @param item the item to add 477 * @return {@code true} 478 */ 479 public boolean addActivity(Activity item) { 480 Activity value = ObjectUtils.requireNonNull(item,"item cannot be null"); 481 if (_activities == null) { 482 _activities = new LinkedList<>(); 483 } 484 return _activities.add(value); 485 } 486 487 /** 488 * Remove the first matching {@link Activity} item from the underlying collection. 489 * @param item the item to remove 490 * @return {@code true} if the item was removed or {@code false} otherwise 491 */ 492 public boolean removeActivity(Activity item) { 493 Activity value = ObjectUtils.requireNonNull(item,"item cannot be null"); 494 return _activities != null && _activities.remove(value); 495 } 496 497 /** 498 * Get the "{@literal Remarks}". 499 * 500 * <p> 501 * Additional commentary about the containing object. 502 * 503 * @return the remarks value, or {@code null} if not set 504 */ 505 @Nullable 506 public MarkupMultiline getRemarks() { 507 return _remarks; 508 } 509 510 /** 511 * Set the "{@literal Remarks}". 512 * 513 * <p> 514 * Additional commentary about the containing object. 515 * 516 * @param value 517 * the remarks value to set, or {@code null} to clear 518 */ 519 public void setRemarks(@Nullable MarkupMultiline value) { 520 _remarks = value; 521 } 522 523 @Override 524 public String toString() { 525 return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString()); 526 } 527 } 528}