001: /*
002: * Copyright (c) 2001 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, modify and redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: * @Author: Silvere Martin-Michiellot
032: *
033: */
034:
035: package com.db.server;
036:
037: import java.security.PublicKey;
038: import java.security.cert.Certificate;
039: import java.util.HashSet;
040: import java.util.Iterator;
041: import javax.jdo.*;
042:
043: /**
044: * There exists a Java Class named Certificate. We have therefore choosen to use the synonym Pass. While Java Certificates act as Internet based certificates, these Pass are used in a client-server architecture, the server monitoring the correct use of these pass.
045: */
046:
047: public class Pass {
048:
049: private String name;
050: private long startDate;
051: private long endDate;
052: private Avatar sender;
053: private Avatar receiver;
054: private Object object;
055:
056: //everything must be set at construction time to ensure noone will cunterfeit the pass
057: //name is optional but cool
058: //avatars are used as a whole to check identity but PublicKey from avatar would be enough
059: //it is however very easy to get the PublicKey of a user given its avatar
060: //as for tickets pass should be stored in pair with a copy for the sender (and the "real" pass for the receiver).
061: //tickets however never disappear while their validity is over (it's up to the server to do that).
062: //duration is actually a timestamp base on universeServer time
063: public Pass(String name, long startDate, long endDate,
064: Avatar sender, Avatar receiver, Object object) {
065:
066: if ((sender != null) && (receiver != null)) {
067: if (startDate < endDate) {
068: if ((object instanceof VirtualElement)
069: || (object instanceof Avatar)) {
070: this .name = name;
071: this .startDate = startDate;
072: this .endDate = endDate;
073: this .sender = sender;
074: this .receiver = receiver;
075: this .object = object;
076: } else {
077: throw new IllegalArgumentException(
078: "object filtered must be an instance of VirtualElement or Avatar.");
079: }
080: } else {
081: throw new IllegalArgumentException(
082: "start date is not less than end date.");
083: }
084: } else {
085: throw new IllegalArgumentException("Null argument.");
086: }
087:
088: }
089:
090: public String getName() {
091:
092: return this .name;
093:
094: }
095:
096: public long getStartDate() {
097:
098: return this .startDate;
099:
100: }
101:
102: public long getEndDate() {
103:
104: return this .endDate;
105:
106: }
107:
108: public Avatar getSender() {
109:
110: return this .sender;
111:
112: }
113:
114: public Avatar getReceiver() {
115:
116: return this .receiver;
117:
118: }
119:
120: public Object getObject() {
121:
122: return this.object;
123:
124: }
125:
126: }
|