NPE in taglib processing.
[java-idp.git] / src / main / java / edu / internet2 / middleware / shibboleth / idp / ui / ServiceTagSupport.java
1 /*\r
2  * Copyright 2011 University Corporation for Advanced Internet Development, Inc.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package edu.internet2.middleware.shibboleth.idp.ui;\r
18 \r
19 import javax.servlet.ServletContext;\r
20 import javax.servlet.http.HttpServletRequest;\r
21 import javax.servlet.jsp.tagext.BodyTagSupport;\r
22 \r
23 import org.opensaml.saml2.common.Extensions;\r
24 import org.opensaml.saml2.metadata.EntityDescriptor;\r
25 import org.opensaml.saml2.metadata.RoleDescriptor;\r
26 import org.opensaml.saml2.metadata.SPSSODescriptor;\r
27 import org.opensaml.samlext.saml2mdui.UIInfo;\r
28 import org.opensaml.xml.XMLObject;\r
29 \r
30 import edu.internet2.middleware.shibboleth.common.relyingparty.RelyingPartyConfigurationManager;\r
31 import edu.internet2.middleware.shibboleth.idp.authn.LoginContext;\r
32 import edu.internet2.middleware.shibboleth.idp.util.HttpServletHelper;\r
33 \r
34 \r
35 /**\r
36  * Display the serviceName.\r
37  * \r
38  * This is taken in order\r
39  *  1) From the mdui\r
40  *  2) AttributeConsumeService\r
41  *  3) HostName from the EntityId\r
42  *  4) EntityId.\r
43  */\r
44 public class ServiceTagSupport extends BodyTagSupport{\r
45 \r
46     /**\r
47      * checkstyle requires this serialization info.\r
48      */\r
49     private static final long serialVersionUID = 7988646597267865255L;\r
50 \r
51     /** Bean storage. class reference*/\r
52     private String cssClass;\r
53     /** Bean storage. id reference*/\r
54     private String cssId;\r
55     /** Bean storage. style reference*/\r
56     private String cssStyle;\r
57 \r
58     /** Bean setter.\r
59      * @param value what to set\r
60      */\r
61     public void setCssClass(String value) {\r
62         cssClass = value;\r
63     }\r
64     /** Bean setter.\r
65      * @param value what to set\r
66      */\r
67     public void setCssId(String value) {\r
68         cssId = value;\r
69     }\r
70 \r
71     /** Bean setter.\r
72      * @param value what to set\r
73      */\r
74     public void setCssStyle(String value) {\r
75         cssStyle = value;\r
76     }\r
77 \r
78     /**\r
79      * Add the class and Id if present.\r
80      * @param sb the stringbuilder to asdd to.\r
81      */\r
82     protected void addClassAndId(StringBuilder sb) {\r
83         if (cssClass != null) {\r
84             sb.append(" class=\"").append(cssClass).append('"');\r
85         }\r
86         if (cssId != null) {\r
87             sb.append(" id=\"").append(cssId).append('"');\r
88         }\r
89         if (cssStyle != null) {\r
90             sb.append(" style=\"").append(cssStyle).append('"');\r
91         }\r
92     }\r
93     \r
94     /**\r
95      * build a hyperlink from the parameters.\r
96      * @param url the URL\r
97      * @param text what to embed\r
98      * @return the hyperlink.\r
99      */\r
100     protected String buildHyperLink(String url, String text) {\r
101         StringBuilder sb = new StringBuilder("<a href=\"");\r
102         sb.append(url).append('"');\r
103         addClassAndId(sb);\r
104         sb.append(">").append(text).append("</a>");\r
105         return sb.toString();\r
106     }\r
107     \r
108     /**\r
109      * Get the EntityDescriptor for the relying party.\r
110      * @return the SPs EntityDescriptor\r
111      */\r
112     protected EntityDescriptor getSPEntityDescriptor() {\r
113         LoginContext loginContext;\r
114         HttpServletRequest request;\r
115         ServletContext application;\r
116         RelyingPartyConfigurationManager rpConfigMngr;\r
117         EntityDescriptor spEntity;\r
118         \r
119         //\r
120         // Populate up those things that jsp gives us.\r
121         //\r
122         request = (HttpServletRequest) pageContext.getRequest();\r
123         application = pageContext.getServletContext();\r
124         \r
125         if (request == null || application == null) {\r
126            return null;\r
127         }\r
128         //\r
129         // grab the login context and the RP config mgr.\r
130         //\r
131         loginContext = HttpServletHelper.getLoginContext(HttpServletHelper.getStorageService(application),\r
132                 application, request);\r
133         rpConfigMngr = HttpServletHelper.getRelyingPartyConfigurationManager(application);\r
134         if (loginContext == null || rpConfigMngr == null) {\r
135             return null;\r
136         }\r
137         spEntity = HttpServletHelper.getRelyingPartyMetadata(loginContext.getRelyingPartyId(), rpConfigMngr);\r
138 \r
139         return spEntity;\r
140     }\r
141     /**\r
142      * Traverse the SP's EntityDescriptor and pick out the UIInfo.\r
143      * @return the first UIInfo for the SP.\r
144      */\r
145     protected UIInfo getSPUIInfo() {\r
146         EntityDescriptor spEntity = getSPEntityDescriptor();\r
147         Extensions exts;\r
148         \r
149         if (null == spEntity) {\r
150             //\r
151             // all done\r
152             //\r
153             return null;\r
154         }\r
155 \r
156         for (RoleDescriptor role:spEntity.getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME)) {\r
157             exts = role.getExtensions();\r
158             if (exts != null) {\r
159                 for (XMLObject object:exts.getOrderedChildren()) {\r
160                     if (object instanceof UIInfo) {\r
161                         return (UIInfo) object;\r
162                     }\r
163                 }\r
164             }\r
165         }\r
166         return null;\r
167     }\r
168             \r
169     /**\r
170      * Pluck the language from the browser.\r
171      * @return the two letter language\r
172      */\r
173     protected String getBrowserLanguage() {\r
174         HttpServletRequest request;\r
175         request = (HttpServletRequest) pageContext.getRequest();\r
176         \r
177         return request.getLocale().getLanguage();\r
178     }\r
179        \r
180 }\r