Commit aaf13b99 authored by cdanger's avatar cdanger

Fixed javadoc comments

parent 28fd3dd0
/** /**
* *
* Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* *
* 1. Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 1. Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* *
* 2. Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or * 2. Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution. * other materials provided with the distribution.
* *
* Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without * Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without
* specific prior written permission. * specific prior written permission.
* *
* This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED * This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED
* WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS * WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS
* SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL * SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES. * POSSIBILITY OF SUCH DAMAGES.
* *
* You acknowledge that this software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility. * You acknowledge that this software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility.
*/ */
package com.sun.xacml; package com.sun.xacml;
import java.util.Collections; import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.List; import java.util.List;
import org.ow2.authzforce.core.pdp.api.Datatype; import org.ow2.authzforce.core.pdp.api.Datatype;
import org.ow2.authzforce.core.pdp.api.Expression; import org.ow2.authzforce.core.pdp.api.Expression;
import org.ow2.authzforce.core.pdp.api.FirstOrderFunction; import org.ow2.authzforce.core.pdp.api.FirstOrderFunction;
import org.ow2.authzforce.core.pdp.api.FirstOrderFunctionCall; import org.ow2.authzforce.core.pdp.api.FirstOrderFunctionCall;
import org.ow2.authzforce.core.pdp.api.IndeterminateEvaluationException; import org.ow2.authzforce.core.pdp.api.IndeterminateEvaluationException;
import org.ow2.authzforce.core.pdp.impl.value.BooleanValue; import org.ow2.authzforce.core.pdp.impl.value.BooleanValue;
import org.ow2.authzforce.core.pdp.impl.value.DatatypeConstants; import org.ow2.authzforce.core.pdp.impl.value.DatatypeConstants;
/** /**
* A class that implements the not function. This function takes one boolean argument and returns the logical negation of that value. If the argument evaluates * A class that implements the not function. This function takes one boolean argument and returns the logical negation of that value. If the argument evaluates
* to indeterminate, an indeterminate result is returned. * to indeterminate, an indeterminate result is returned.
* *
* @since 1.0 * @since 1.0
* @author Steve Hanna * @author Steve Hanna
* @author Seth Proctor * @author Seth Proctor
*/ * @version $Id: $
public final class NotFunction extends FirstOrderFunction.SingleParameterTyped<BooleanValue, BooleanValue> */
{ public final class NotFunction extends FirstOrderFunction.SingleParameterTyped<BooleanValue, BooleanValue>
{
/**
* Standard identifier for the not function. /**
*/ * Standard identifier for the not function.
public static final String NAME_NOT = XACML_NS_1_0 + "not"; */
public static final String NAME_NOT = XACML_NS_1_0 + "not";
/**
* Singleton instance of "not" logical function /**
*/ * Singleton instance of "not" logical function
public static final NotFunction INSTANCE = new NotFunction(); */
public static final NotFunction INSTANCE = new NotFunction();
private NotFunction()
{ private NotFunction()
super(NAME_NOT, DatatypeConstants.BOOLEAN.TYPE, false, Collections.singletonList(DatatypeConstants.BOOLEAN.TYPE)); {
} super(NAME_NOT, DatatypeConstants.BOOLEAN.TYPE, false, Collections.singletonList(DatatypeConstants.BOOLEAN.TYPE));
}
@Override
public FirstOrderFunctionCall<BooleanValue> newCall(List<Expression<?>> argExpressions, Datatype<?>... remainingArgTypes) throws IllegalArgumentException /** {@inheritDoc} */
{ @Override
return new FirstOrderFunctionCall.EagerSinglePrimitiveTypeEval<BooleanValue, BooleanValue>(functionSignature, argExpressions, remainingArgTypes) public FirstOrderFunctionCall<BooleanValue> newCall(List<Expression<?>> argExpressions, Datatype<?>... remainingArgTypes) throws IllegalArgumentException
{ {
@Override return new FirstOrderFunctionCall.EagerSinglePrimitiveTypeEval<BooleanValue, BooleanValue>(functionSignature, argExpressions, remainingArgTypes)
protected BooleanValue evaluate(Deque<BooleanValue> args) throws IndeterminateEvaluationException {
{ @Override
return args.getFirst().not(); protected BooleanValue evaluate(Deque<BooleanValue> args) throws IndeterminateEvaluationException
} {
return args.getFirst().not();
}; }
}
};
} }
}
/** /**
* *
* Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* *
* 1. Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 1. Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* *
* 2. Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or * 2. Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution. * other materials provided with the distribution.
* *
* Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without * Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without
* specific prior written permission. * specific prior written permission.
* *
* This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED * This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED
* WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS * WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS
* SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL * SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES. * POSSIBILITY OF SUCH DAMAGES.
* *
* You acknowledge that this software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility. * You acknowledge that this software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility.
*/ */
package com.sun.xacml; package com.sun.xacml;
import java.util.Objects; import java.util.Objects;
/** /**
* This class represents a port range as specified in the <code>dnsName</code> and <code>ipAddress</code> datatypes. The range may have upper and lower bounds, * This class represents a port range as specified in the <code>dnsName</code> and <code>ipAddress</code> datatypes. The range may have upper and lower bounds,
* be specified by a single port number, or may be unbound. * be specified by a single port number, or may be unbound.
*/ *
public final class PortRange * @author cdangerv
{ * @version $Id: $
*/
/** public final class PortRange
* Constant used to specify that the range is unbound on one side. {
*/
private static final int UNBOUND = -1; /**
* Constant used to specify that the range is unbound on one side.
// the port bound values */
private final int lowerBound; private static final int UNBOUND = -1;
private final int upperBound;
// the port bound values
/** private final int lowerBound;
* Default constructor used to represent an unbound range. This is typically used when an address has no port information. private final int upperBound;
*/
public PortRange() /**
{ * Default constructor used to represent an unbound range. This is typically used when an address has no port information.
this(UNBOUND, UNBOUND); */
} public PortRange()
{
/** this(UNBOUND, UNBOUND);
* Creates a <code>PortRange</code> with upper and lower bounds. Either of the parameters may have the value <code>UNBOUND</code> meaning that there is no }
* bound at the respective end.
* /**
* @param lowerBound * Creates a <code>PortRange</code> with upper and lower bounds. Either of the parameters may have the value <code>UNBOUND</code> meaning that there is no
* the lower-bound port number or <code>UNBOUND</code> * bound at the respective end.
* @param upperBound *
* the upper-bound port number or <code>UNBOUND</code> * @param lowerBound
*/ * the lower-bound port number or <code>UNBOUND</code>
private PortRange(int lowerBound, int upperBound) * @param upperBound
{ * the upper-bound port number or <code>UNBOUND</code>
this.lowerBound = lowerBound; */
this.upperBound = upperBound; private PortRange(int lowerBound, int upperBound)
} {
this.lowerBound = lowerBound;
/** this.upperBound = upperBound;
* Creates an instance of <code>PortRange</code> based on the given value. }
*
* @param value /**
* a <code>String</code> representing the range * Creates an instance of <code>PortRange</code> based on the given value.
* *
* @return a new <code>PortRange</code> * @param value
* * a <code>String</code> representing the range
* @throws NumberFormatException * @return a new <code>PortRange</code>
* if a port value isn't an integer * @throws java.lang.NumberFormatException
*/ * if a port value isn't an integer
public static PortRange getInstance(String value) */
{ public static PortRange getInstance(String value)
int lowerBound = UNBOUND; {
int upperBound = UNBOUND; int lowerBound = UNBOUND;
int upperBound = UNBOUND;
// first off, make sure there's actually content here
if (value.length() == 0 || value.equals("-")) // first off, make sure there's actually content here
{ if (value.length() == 0 || value.equals("-"))
return new PortRange(); {
} return new PortRange();
}
// there's content, so figure where the '-' is, if at all
int dashPos = value.indexOf('-'); // there's content, so figure where the '-' is, if at all
int dashPos = value.indexOf('-');
if (dashPos == -1)
{ if (dashPos == -1)
// there's no dash, so it's just a single number {
lowerBound = upperBound = Integer.parseInt(value); // there's no dash, so it's just a single number
} else if (dashPos == 0) lowerBound = upperBound = Integer.parseInt(value);
{ } else if (dashPos == 0)
// it starts with a dash, so it's just upper-range bound {
upperBound = Integer.parseInt(value.substring(1)); // it starts with a dash, so it's just upper-range bound
} else upperBound = Integer.parseInt(value.substring(1));
{ } else
// it's a number followed by a dash, so get the lower-bound... {
lowerBound = Integer.parseInt(value.substring(0, dashPos)); // it's a number followed by a dash, so get the lower-bound...
int len = value.length(); lowerBound = Integer.parseInt(value.substring(0, dashPos));
int len = value.length();
// ... and see if there is a second port number
if (dashPos != len - 1) // ... and see if there is a second port number
{ if (dashPos != len - 1)
// the dash wasn't at the end, so there's an upper-bound {
upperBound = Integer.parseInt(value.substring(dashPos + 1, len)); // the dash wasn't at the end, so there's an upper-bound
} upperBound = Integer.parseInt(value.substring(dashPos + 1, len));
} }
}
return new PortRange(lowerBound, upperBound);
} return new PortRange(lowerBound, upperBound);
}
/**
* Returns the lower-bound port value. If the range is not lower-bound, then this returns <code>UNBOUND</code>. If the range is actually a single port /**
* number, then this returns the same value as <code>getUpperBound</code>. * Returns the lower-bound port value. If the range is not lower-bound, then this returns <code>UNBOUND</code>. If the range is actually a single port
* * number, then this returns the same value as <code>getUpperBound</code>.
* @return the upper-bound *
*/ * @return the upper-bound
public int getLowerBound() */
{ public int getLowerBound()
return lowerBound; {
} return lowerBound;
}
/**
* Returns the upper-bound port value. If the range is not upper-bound, then this returns <code>UNBOUND</code>. If the range is actually a single port /**
* number, then this returns the same value as <code>getLowerBound</code>. * Returns the upper-bound port value. If the range is not upper-bound, then this returns <code>UNBOUND</code>. If the range is actually a single port
* * number, then this returns the same value as <code>getLowerBound</code>.
* @return the upper-bound *
*/ * @return the upper-bound
public int getUpperBound() */
{ public int getUpperBound()
return upperBound; {
} return upperBound;
}
/**
* Returns whether the range is bounded by a lower port number. /**
* * Returns whether the range is bounded by a lower port number.
* @return true if lower-bounded, false otherwise *
*/ * @return true if lower-bounded, false otherwise
public boolean isLowerBounded() */
{ public boolean isLowerBounded()
return lowerBound != UNBOUND; {
} return lowerBound != UNBOUND;
}
/**
* Returns whether the range is bounded by an upper port number. /**
* * Returns whether the range is bounded by an upper port number.
* @return true if upper-bounded, false otherwise *
*/ * @return true if upper-bounded, false otherwise
public boolean isUpperBounded() */
{ public boolean isUpperBounded()
return upperBound != UNBOUND; {
} return upperBound != UNBOUND;
}
/**
* Returns whether the range is actually a single port number. /**
* * Returns whether the range is actually a single port number.
* @return true if the range is a single port number, false otherwise *
*/ * @return true if the range is a single port number, false otherwise
public boolean isSinglePort() */
{ public boolean isSinglePort()
return lowerBound == upperBound && lowerBound != UNBOUND; {
} return lowerBound == upperBound && lowerBound != UNBOUND;
}
/**
* Returns whether the range is unbound, which means that it specifies no port number or range. This is typically used with addresses that include no port /**
* information. * Returns whether the range is unbound, which means that it specifies no port number or range. This is typically used with addresses that include no port
* * information.
* @return true if the range is unbound, false otherwise *
*/ * @return true if the range is unbound, false otherwise
public boolean isUnbound() */
{ public boolean isUnbound()
return lowerBound == UNBOUND && upperBound == UNBOUND; {
} return lowerBound == UNBOUND && upperBound == UNBOUND;
}
private transient volatile int hashCode = 0; // Effective Java - Item 9
private transient volatile int hashCode = 0; // Effective Java - Item 9
@Override
public int hashCode() /** {@inheritDoc} */
{ @Override
if (hashCode == 0) public int hashCode()
{ {
hashCode = Objects.hash(lowerBound, upperBound); if (hashCode == 0)
} {
hashCode = Objects.hash(lowerBound, upperBound);
return hashCode; }
}
return hashCode;
/** }
* Returns true if the input is an instance of this class and if its value equals the value contained in this class.
* /**
* @param o * {@inheritDoc}
* the object to compare *
* * Returns true if the input is an instance of this class and if its value equals the value contained in this class.
* @return true if this object and the input represent the same value */
*/ @Override
@Override public boolean equals(Object o)
public boolean equals(Object o) {
{ if (this == o)
if (this == o) {
{ return true;
return true; }
}
if (!(o instanceof PortRange))
if (!(o instanceof PortRange)) {
{ return false;
return false; }
}
final PortRange other = (PortRange) o;
final PortRange other = (PortRange) o; return lowerBound == other.lowerBound && upperBound == other.upperBound;
return lowerBound == other.lowerBound && upperBound == other.upperBound; }
}
/**
/** * <p>encode</p>
* @return encoded port range *
* * @return encoded port range
*/ */
public String encode() public String encode()
{ {
if (isUnbound()) if (isUnbound())
return ""; return "";
if (isSinglePort()) if (isSinglePort())