first pass at authnmgr
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / session / impl / ServiceInformationImpl.java
1 /*
2  * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package edu.internet2.middleware.shibboleth.idp.session.impl;
18
19 import edu.internet2.middleware.shibboleth.idp.session.AuthenticationMethodInformation;
20 import edu.internet2.middleware.shibboleth.idp.session.ServiceInformation;
21
22 import org.joda.time.DateTime;
23 import org.opensaml.saml2.core.NameID;
24
25
26 /**
27  * Information about a service a user has logged in to.
28  */
29 public class ServiceInformationImpl implements ServiceInformation {
30
31     private String entityID;
32
33     private DateTime authenticationInstant;
34
35     private AuthenticationMethodInformation methodInfo;
36     
37     private NameID nameId;
38
39     
40     /**
41      * Default constructor.
42      * 
43      * @param entityID The unique identifier for the service.
44      * @param authenticationInstant The time the user authenticated to the service. 
45      * @param methodInfo The authentication method used to log into the service.
46      * @param nameId The {@link NameID} used for the subject/user with this service.
47      * 
48      */
49     public ServiceInformationImpl(String entityID, DateTime authenticationInstant,
50         AuthenticationMethodInfo methodInfo, final NameID nameId) {
51         
52         if (entityID == null || authenticationInstant == null
53                         || methodInfo == null || nameId == null) {
54                 
55                 return;
56         }
57         
58         this.entityID = entityID;
59         this.authenticationInstant = authenticationInstant;
60         this.methodInfo = methodInfo;
61         this.nameId = nameId;   // XXX: Don't we need to defensively clone nameId? It's mutable.
62     }
63
64
65     /** 
66      * Cloning constructor.
67      * 
68      * @param serviceInfo The ServiceInformation instance to duplicate.
69      */
70     public ServiceInformationImpl(final ServiceInformation serviceInfo) {
71     
72         if (serviceInfo == null) {
73                 return;
74         }
75         
76         this.entityID = serviceInfo.getEntityID();
77         this.authenticationInstant = serviceInfo.getAuthenticationInstant();
78         this.methodInfo = serviceInfo.getAuthenticationMethod();
79         this.nameId = serviceInfo.getSubjectNameID();
80     }
81
82
83     /** {@inheritDoc} */
84     public String getEntityID() {
85         return this.entityID;
86     }
87
88         
89     /** {@inheritDoc} */
90     public DateTime getAuthenticationInstant() {
91         return this.authenticationInstant;
92     }
93
94         
95     /** {@inheritDoc} */
96     public AuthenticationMethodInformation getAuthenticationMethod() {
97         return this.methodInfo;
98     }
99         
100         
101     /** {@inheritDoc} */
102     public NameID getSubjectNameID() {
103         return this.nameId;
104     }
105     
106     
107     /** {@inheritDoc} */
108     public boolean equals(Object obj) {
109         
110         if (! obj instanceof ServiceInformation) {
111                 return false;
112         }
113         
114         ServiceInformation si = (ServiceInformation)obj;
115         
116         if (this.getEntityID().equals(si.getEntityID())
117                         && this.getAuthenticationInstant().equals(si.getAuthenticationInstant())
118                         && this.getSubjectNameID().equals(si.getSubjecTNameID())) {
119                 
120                 return true;
121         } else {
122                 return false;
123         }
124     }
125 }