| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package java.security; |
| |
| import java.io.Serializable; |
| import java.security.cert.CertPath; |
| import java.util.Date; |
| |
| /** |
| * {@code Timestamp} represents a signed time stamp. {@code Timestamp} is |
| * immutable. |
| */ |
| public final class Timestamp implements Serializable { |
| |
| private static final long serialVersionUID = -5502683707821851294L; |
| |
| private Date timestamp; |
| |
| private CertPath signerCertPath; |
| |
| // Cached hash |
| private transient int hash; |
| |
| /** |
| * Constructs a new instance of {@code Timestamp} with the specified {@code |
| * timestamp} and the given certificate path. |
| * |
| * @param timestamp |
| * date and time. |
| * @param signerCertPath |
| * the certificate path. |
| * @throws NullPointerException |
| * if {@code timestamp} is {@code null} or if {@code |
| * signerCertPath} is {@code null}. |
| */ |
| public Timestamp(Date timestamp, CertPath signerCertPath) { |
| if (timestamp == null) { |
| throw new NullPointerException("timestamp == null"); |
| } |
| if (signerCertPath == null) { |
| throw new NullPointerException("signerCertPath == null"); |
| } |
| // Clone timestamp to prevent modifications |
| this.timestamp = new Date(timestamp.getTime()); |
| this.signerCertPath = signerCertPath; |
| } |
| |
| /** |
| * Compares the specified object with this {@code Timestamp} for equality |
| * and returns {@code true} if the specified object is equal, {@code false} |
| * otherwise. The given object is equal to this {@code Timestamp}, if it is |
| * an instance of {@code Timestamp}, the two timestamps have an equal date |
| * and time and their certificate paths are equal. |
| * |
| * @param obj |
| * object to be compared for equality with this {@code |
| * Timestamp}. |
| * @return {@code true} if the specified object is equal to this {@code |
| * Timestamp}, otherwise {@code false}. |
| * @see #hashCode |
| */ |
| @Override |
| public boolean equals(Object obj) { |
| if (obj == this) { |
| return true; |
| } |
| if (obj instanceof Timestamp) { |
| Timestamp that = (Timestamp) obj; |
| return timestamp.equals(that.timestamp) |
| && signerCertPath.equals(that.signerCertPath); |
| } |
| return false; |
| } |
| |
| /** |
| * Returns the certificate path of this {@code Timestamp}. |
| * |
| * @return the certificate path of this {@code Timestamp}. |
| */ |
| public CertPath getSignerCertPath() { |
| return signerCertPath; |
| } |
| |
| /** |
| * Returns the date and time of this {@code Timestamp}. |
| * |
| * @return the date and time of this {@code Timestamp}. |
| */ |
| public Date getTimestamp() { |
| return (Date) timestamp.clone(); |
| } |
| |
| /** |
| * Returns the hash code value for this {@code Timestamp}. Returns the same |
| * hash code for {@code Timestamp}s that are equal to each other as |
| * required by the general contract of {@link Object#hashCode}. |
| * |
| * @return the hash code value for this {@code Timestamp}. |
| * @see Object#equals(Object) |
| * @see Timestamp#equals(Object) |
| */ |
| @Override |
| public int hashCode() { |
| if (hash == 0) { |
| hash = timestamp.hashCode() ^ signerCertPath.hashCode(); |
| } |
| return hash; |
| } |
| |
| /** |
| * Returns a string containing a concise, human-readable description of this |
| * {@code Timestamp}. |
| * |
| * @return a printable representation for this {@code Timestamp}. |
| */ |
| @Override |
| public String toString() { |
| StringBuilder buf = new StringBuilder(256); |
| // Dump only the first certificate |
| buf.append("Timestamp [").append(timestamp).append(" certPath="); |
| buf.append(signerCertPath.getCertificates().get(0)).append("]"); |
| return buf.toString(); |
| } |
| } |