Fix background thread cleanup.
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / common / BaseNameIdentifierMapping.java
1 /*
2  * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
3  * All rights reserved
4  * 
5  * 
6  * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
7  * following conditions are met:
8  * 
9  * Redistributions of source code must retain the above copyright notice, this list of conditions and the following
10  * disclaimer.
11  * 
12  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
13  * disclaimer in the documentation and/or other materials provided with the distribution, if any, must include the
14  * following acknowledgment: "This product includes software developed by the University Corporation for Advanced
15  * Internet Development <http://www.ucaid.edu> Internet2 Project. Alternately, this acknowledegement may appear in the
16  * software itself, if and wherever such third-party acknowledgments normally appear.
17  * 
18  * Neither the name of Shibboleth nor the names of its contributors, nor Internet2, nor the University Corporation for
19  * Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote products derived from this software
20  * without specific prior written permission. For written permission, please contact shibboleth@shibboleth.org
21  * 
22  * Products derived from this software may not be called Shibboleth, Internet2, UCAID, or the University Corporation
23  * for Advanced Internet Development, nor may Shibboleth appear in their name, without prior written permission of the
24  * University Corporation for Advanced Internet Development.
25  * 
26  * 
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR
28  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
29  * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE,
30  * ACCURACY, AND EFFORT IS WITH LICENSEE. IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
31  * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
33  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37
38 package edu.internet2.middleware.shibboleth.common;
39
40 import java.net.URI;
41 import java.net.URISyntaxException;
42
43 import org.apache.log4j.Logger;
44 import org.w3c.dom.Element;
45
46 import edu.internet2.middleware.shibboleth.hs.HSNameIdentifierMapping;
47
48 /**
49  * Base class for processing name identifier mapping configuration.
50  * 
51  * @author Walter Hoehn
52  */
53 public abstract class BaseNameIdentifierMapping implements NameIdentifierMapping {
54
55         private static Logger log = Logger.getLogger(BaseNameIdentifierMapping.class.getName());
56         private URI format;
57
58         public BaseNameIdentifierMapping(Element config) throws NameIdentifierMappingException {
59
60                 if (!config.getLocalName().equals("NameMapping")) {
61                         throw new IllegalArgumentException();
62                 }
63
64                 String rawFormat = ((Element) config).getAttribute("format");
65                 if (rawFormat == null || rawFormat.equals("")) {
66                         log.error("Name Mapping requires a \"format\" attribute.");
67                         throw new NameIdentifierMappingException("Invalid mapping information specified.");
68                 }
69
70                 try {
71                         format = new URI(rawFormat);
72                 } catch (URISyntaxException e) {
73                         log.error("Name Mapping attribute \"format\" is not a valid URI: " + e);
74                         throw new NameIdentifierMappingException("Invalid mapping information specified.");
75                 }
76
77                 String id = ((Element) config).getAttribute("id");
78                 if (id != null && (!id.equals("")) && (!(this instanceof HSNameIdentifierMapping))) {
79                         log.error(
80                                 "\"id\" attribute is not valid for Name Mapping implementations that do are not used for Name Identifer Creation.");
81                         throw new NameIdentifierMappingException("Invalid mapping information specified.");
82                 }
83         }
84
85         public URI getNameIdentifierFormat() {
86                 return format;
87         }
88
89         public void destroy() {
90                 //nothing to do
91         }
92 }