001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package org.apache.geronimo.util.asn1;
020
021 import java.io.IOException;
022
023 public class DERBoolean
024 extends DERObject
025 {
026 byte value;
027
028 public static final DERBoolean FALSE = new DERBoolean(false);
029 public static final DERBoolean TRUE = new DERBoolean(true);
030
031 /**
032 * return a boolean from the passed in object.
033 *
034 * @exception IllegalArgumentException if the object cannot be converted.
035 */
036 public static DERBoolean getInstance(
037 Object obj)
038 {
039 if (obj == null || obj instanceof DERBoolean)
040 {
041 return (DERBoolean)obj;
042 }
043
044 if (obj instanceof ASN1OctetString)
045 {
046 return new DERBoolean(((ASN1OctetString)obj).getOctets());
047 }
048
049 if (obj instanceof ASN1TaggedObject)
050 {
051 return getInstance(((ASN1TaggedObject)obj).getObject());
052 }
053
054 throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
055 }
056
057 /**
058 * return a DERBoolean from the passed in boolean.
059 */
060 public static DERBoolean getInstance(
061 boolean value)
062 {
063 return (value ? TRUE : FALSE);
064 }
065
066 /**
067 * return a Boolean from a tagged object.
068 *
069 * @param obj the tagged object holding the object we want
070 * @param explicit true if the object is meant to be explicitly
071 * tagged false otherwise.
072 * @exception IllegalArgumentException if the tagged object cannot
073 * be converted.
074 */
075 public static DERBoolean getInstance(
076 ASN1TaggedObject obj,
077 boolean explicit)
078 {
079 return getInstance(obj.getObject());
080 }
081
082 public DERBoolean(
083 byte[] value)
084 {
085 this.value = value[0];
086 }
087
088 public DERBoolean(
089 boolean value)
090 {
091 this.value = (value) ? (byte)0xff : (byte)0;
092 }
093
094 public boolean isTrue()
095 {
096 return (value != 0);
097 }
098
099 void encode(
100 DEROutputStream out)
101 throws IOException
102 {
103 byte[] bytes = new byte[1];
104
105 bytes[0] = value;
106
107 out.writeEncoded(BOOLEAN, bytes);
108 }
109
110 public boolean equals(
111 Object o)
112 {
113 if ((o == null) || !(o instanceof DERBoolean))
114 {
115 return false;
116 }
117
118 return (value == ((DERBoolean)o).value);
119 }
120
121 public int hashCode()
122 {
123 return value;
124 }
125
126 }