SDSS WAYF patch for multi-federation support
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / metadata / MetadataProviderFactory.java
1 package edu.internet2.middleware.shibboleth.metadata;
2
3 /*
4  * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.apache.log4j.Logger;
20 import org.w3c.dom.Element;
21
22 public class MetadataProviderFactory {
23
24         private static Logger log = Logger.getLogger(MetadataProviderFactory.class.getName());
25
26         public static Metadata loadProvider(Element e) throws MetadataException {
27
28                 String className = e.getAttribute("type");
29                 if (className == null || className.equals("")) {
30                         log.error("Metadata Provider requires specification of the attribute \"type\".");
31                         throw new MetadataException("Failed to initialize Metadata Provider.");
32                 } else {
33                         try {
34                                 Class[] params = {Class.forName("org.w3c.dom.Element"),};
35                                 return (Metadata) Class.forName(className).getConstructor(params).newInstance(new Object[]{e});
36                         } catch (Exception loaderException) {
37                                 log.error("Failed to load Metadata Provider implementation class: " + loaderException);
38                                 Throwable cause = loaderException.getCause();
39                                 while (cause != null) {
40                                         log.error("caused by: " + cause);
41                                         cause = cause.getCause();
42                                 }
43                                 throw new MetadataException("Failed to initialize Metadata Provider.");
44                         }
45                 }
46         }
47 }