PortRange.java
package gov.nist.secauto.oscal.lib.model;
import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValue;
import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValues;
import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
import gov.nist.secauto.metaschema.binding.model.annotations.Expect;
import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
import gov.nist.secauto.metaschema.binding.model.annotations.ValueConstraints;
import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
import gov.nist.secauto.metaschema.model.common.datatype.adapter.NonNegativeIntegerAdapter;
import gov.nist.secauto.metaschema.model.common.datatype.adapter.TokenAdapter;
import java.lang.Override;
import java.lang.String;
import java.math.BigInteger;
import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
/**
* Where applicable this is the IPv4 port range on which the service operates.
*/
@MetaschemaAssembly(
formalName = "Port Range",
description = "Where applicable this is the IPv4 port range on which the service operates.",
name = "port-range",
metaschema = OscalImplementationCommonMetaschema.class,
remarks = "To be validated as a natural number (integer \\>= 1). A single port uses the same value for start and end. Use multiple 'port-range' entries for non-contiguous ranges."
)
@ValueConstraints(
expect = {
@Expect(id = "port-range-start-and-end-not-specified", level = IConstraint.Level.WARNING, test = "exists(@start) and exists(@end)", message = "If a protocol is defined, it should include a start and end port range. To define a single port, the start and end should be the same value."),
@Expect(id = "port-range-start-specified-with-no-end", level = IConstraint.Level.WARNING, test = "exists(@start) and not(exists(@end))", message = "A start port exists, but an end point does not. To define a single port, the start and end should be the same value."),
@Expect(id = "port-range-end-specified-with-no-start", level = IConstraint.Level.WARNING, test = "not(exists(@start)) and exists(@end)", message = "An end point exists, but a start port does not. To define a single port, the start and end should be the same value."),
@Expect(id = "port-range-end-date-is-before-start-date", level = IConstraint.Level.WARNING, test = "@start <= @end", message = "The port range specified has an end port that is less than the start port.")
}
)
public class PortRange {
@BoundFlag(
formalName = "Start",
description = "Indicates the starting port number in a port range",
useName = "start",
typeAdapter = NonNegativeIntegerAdapter.class,
remarks = "Should be a number within a permitted range"
)
private BigInteger _start;
@BoundFlag(
formalName = "End",
description = "Indicates the ending port number in a port range",
useName = "end",
typeAdapter = NonNegativeIntegerAdapter.class,
remarks = "Should be a number within a permitted range"
)
private BigInteger _end;
@BoundFlag(
formalName = "Transport",
description = "Indicates the transport type.",
useName = "transport",
typeAdapter = TokenAdapter.class
)
@ValueConstraints(
allowedValues = @AllowedValues(level = IConstraint.Level.ERROR, values = {@AllowedValue(value = "TCP", description = "Transmission Control Protocol"), @AllowedValue(value = "UDP", description = "User Datagram Protocol")})
)
private String _transport;
public PortRange() {
}
public BigInteger getStart() {
return _start;
}
public void setStart(BigInteger value) {
_start = value;
}
public BigInteger getEnd() {
return _end;
}
public void setEnd(BigInteger value) {
_end = value;
}
public String getTransport() {
return _transport;
}
public void setTransport(String value) {
_transport = value;
}
@Override
public String toString() {
return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
}
}