package at.gv.egovernment.moa.spss.server.config; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import at.gv.egovernment.moa.logging.LogMsg; import at.gv.egovernment.moa.logging.Logger; import at.gv.egovernment.moa.spss.util.MessageProvider; /** * A class containing information about a CRL distribution point. * * @author Sven Aigner * @author Patrick Peck * @version $Id$ */ public class DistributionPoint { private static Map RC_MAPPING = new HashMap(); static { // create the mapping between reason code strings and their integer values RC_MAPPING.put( "unused", new Integer(iaik.asn1.structures.DistributionPoint.unused)); RC_MAPPING.put( "keyCompromise", new Integer(iaik.asn1.structures.DistributionPoint.keyCompromise)); RC_MAPPING.put( "cACompromise", new Integer(iaik.asn1.structures.DistributionPoint.cACompromise)); RC_MAPPING.put( "affiliationChanged", new Integer(iaik.asn1.structures.DistributionPoint.affiliationChanged)); RC_MAPPING.put( "superseded", new Integer(iaik.asn1.structures.DistributionPoint.superseded)); RC_MAPPING.put( "cessationOfOperation", new Integer(iaik.asn1.structures.DistributionPoint.cessationOfOperation)); RC_MAPPING.put( "certificateHold", new Integer(iaik.asn1.structures.DistributionPoint.certificateHold)); RC_MAPPING.put( "privilegeWithdrawn", new Integer(iaik.asn1.structures.DistributionPoint.privilegeWithdrawn)); RC_MAPPING.put( "aACompromise", new Integer(iaik.asn1.structures.DistributionPoint.aACompromise)); } /** The distribution point URI. */ private String uri; /** The reason codes applicable for the distribution point. */ private int reasonCodes; /** * Create a DistributionPoint with a URI and a list of reason * codes. * * @param uri The URI of the distribution point. * @param reasonCodeStr A list of reason codes (a space-separated * enumeration). */ public DistributionPoint(String uri, String reasonCodeStr) { this.uri = uri; this.reasonCodes = extractReasonCodes(reasonCodeStr); } /** * Convert a list of reason codes provided as a String to a * binary representation. * * @param reasonCodeStr A String containing a blank-separated, * textual representation of reason codes. * @return int A binary representation of reason codes. * @see iaik.asn1.structures.DistributionPoint */ private int extractReasonCodes(String reasonCodeStr) { int codes = 0; StringTokenizer tokenizer = new StringTokenizer(reasonCodeStr); String token; Integer reasonCode; while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); reasonCode = (Integer) RC_MAPPING.get(token); if (reasonCode != null) { codes |= reasonCode.intValue(); } else { MessageProvider msg = MessageProvider.getInstance(); Logger.warn( new LogMsg(msg.getMessage("config.07", new Object[] { token }))); } } // If reasonCodeStr is empty, set all possible reason codes if (codes == 0) codes = iaik.asn1.structures.DistributionPoint.unused | iaik.asn1.structures.DistributionPoint.keyCompromise | iaik.asn1.structures.DistributionPoint.cACompromise | iaik.asn1.structures.DistributionPoint.affiliationChanged | iaik.asn1.structures.DistributionPoint.superseded | iaik.asn1.structures.DistributionPoint.cessationOfOperation | iaik.asn1.structures.DistributionPoint.certificateHold | iaik.asn1.structures.DistributionPoint.privilegeWithdrawn | iaik.asn1.structures.DistributionPoint.aACompromise; return codes; } /** * Return the URI of the distribution point. * * @return The URI of the distribution point. */ public String getUri() { return uri; } /** * Return a binary representation of the reason codes of this distribution * point. * * @return The binary representation of the reason codes. */ public int getReasonCodes() { return reasonCodes; } /** * Return a String representation of this distribution point. * * @return The String representation of this distribution point. * @see java.lang.Object#toString() */ public String toString() { return "(DistributionPoint - " + ("URI<" + getUri()) + ("> REASONCODES<" + getReasonCodes() + ">)"); } }