001: /* Copyright 2004 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal.container.binding;
007:
008: import java.util.Iterator;
009: import java.util.Locale;
010:
011: import org.apache.pluto.om.common.Description;
012: import org.apache.pluto.om.common.DescriptionSet;
013: import org.apache.pluto.om.common.DisplayName;
014: import org.apache.pluto.om.common.DisplayNameSet;
015: import org.apache.pluto.om.common.Parameter;
016: import org.apache.pluto.om.common.SecurityRole;
017: import org.apache.pluto.om.common.SecurityRoleSet;
018: import org.apache.pluto.om.servlet.ServletDefinitionList;
019: import org.apache.pluto.om.servlet.WebApplicationDefinition;
020: import org.jasig.portal.container.om.common.ParameterSetImpl;
021: import org.jasig.portal.container.om.common.SecurityRoleRefImpl;
022: import org.jasig.portal.container.om.common.SecurityRoleRefSetImpl;
023: import org.jasig.portal.container.om.servlet.AuthConstraintImpl;
024: import org.jasig.portal.container.om.servlet.DistributableImpl;
025: import org.jasig.portal.container.om.servlet.EjbLocalRefImpl;
026: import org.jasig.portal.container.om.servlet.EjbRefImpl;
027: import org.jasig.portal.container.om.servlet.EnvEntryImpl;
028: import org.jasig.portal.container.om.servlet.ErrorPageImpl;
029: import org.jasig.portal.container.om.servlet.FilterImpl;
030: import org.jasig.portal.container.om.servlet.FilterMappingImpl;
031: import org.jasig.portal.container.om.servlet.FormLoginConfigImpl;
032: import org.jasig.portal.container.om.servlet.IconImpl;
033: import org.jasig.portal.container.om.servlet.ListenerImpl;
034: import org.jasig.portal.container.om.servlet.LoginConfigImpl;
035: import org.jasig.portal.container.om.servlet.MimeMappingImpl;
036: import org.jasig.portal.container.om.servlet.ResourceEnvRefImpl;
037: import org.jasig.portal.container.om.servlet.ResourceRefImpl;
038: import org.jasig.portal.container.om.servlet.RunAsImpl;
039: import org.jasig.portal.container.om.servlet.SecurityConstraintImpl;
040: import org.jasig.portal.container.om.servlet.ServletDefinitionImpl;
041: import org.jasig.portal.container.om.servlet.ServletMappingImpl;
042: import org.jasig.portal.container.om.servlet.ServletMappingListImpl;
043: import org.jasig.portal.container.om.servlet.SessionConfigImpl;
044: import org.jasig.portal.container.om.servlet.TagLibImpl;
045: import org.jasig.portal.container.om.servlet.TagLibListImpl;
046: import org.jasig.portal.container.om.servlet.UserDataConstraintImpl;
047: import org.jasig.portal.container.om.servlet.WebApplicationDefinitionImpl;
048: import org.jasig.portal.container.om.servlet.WebResourceCollectionImpl;
049: import org.jasig.portal.container.om.servlet.WelcomeFileListImpl;
050: import org.jasig.portal.serialize.Serializer;
051: import org.jasig.portal.utils.DocumentFactory;
052: import org.w3c.dom.Document;
053: import org.w3c.dom.Element;
054:
055: /**
056: * Produces a <code>web.xml</code> file based on a WebApplicationDefinition object.
057: * @author Ken Weiner, kweiner@unicon.net
058: * @version $Revision: 35258 $
059: */
060: public class WebApplicationMarshaller {
061:
062: private WebApplicationDefinition webApplicationDefinition;
063: private Serializer serializer;
064:
065: public void init(WebApplicationDefinition webApplicationDefinition,
066: Serializer serializer) {
067: this .webApplicationDefinition = webApplicationDefinition;
068: this .serializer = serializer;
069: }
070:
071: public void marshall() throws Exception {
072: Document doc = DocumentFactory.getNewDocument();
073: buildDocument(webApplicationDefinition, doc);
074: serializer.asDOMSerializer().serialize(doc);
075: }
076:
077: private void buildDocument(
078: WebApplicationDefinition webApplicationDefinition,
079: Document doc) {
080: WebApplicationDefinitionImpl webAppImpl = (WebApplicationDefinitionImpl) webApplicationDefinition;
081:
082: // <web-app>
083: Element webAppE = doc.createElement("web-app");
084:
085: // <icon>
086: addIcon(webAppE, webAppImpl.getIcon());
087:
088: // <display-name>
089: addDisplayNames(webAppE, webAppImpl.getDisplayNames());
090:
091: // <description>
092: addDescriptions(webAppE, webAppImpl.getDescriptions());
093:
094: // <distributable>
095: DistributableImpl distributable = webAppImpl.getDistributable();
096: if (distributable != null) {
097: Element distributableE = doc.createElement("distributable");
098: webAppE.appendChild(distributableE);
099: }
100:
101: // <context-param>
102: addParameters(webAppE, "context-param",
103: (ParameterSetImpl) webAppImpl.getInitParameterSet());
104:
105: // <filter>
106: FilterImpl[] filters = webAppImpl.getFilters();
107: if (filters != null) {
108: for (int i = 0; i < filters.length; i++) {
109: FilterImpl filter = filters[i];
110: Element filterE = doc.createElement("filter");
111: addIcon(filterE, filter.getIcon());
112: addTextElement(filterE, "filter-name", filter
113: .getFilterName());
114: addDisplayNames(filterE, filter.getDisplayNames());
115: addDescriptions(filterE, filter.getDescriptions());
116: addTextElement(filterE, "filter-class", filter
117: .getFilterClass());
118: addParameters(filterE, "init-param",
119: (ParameterSetImpl) webAppImpl
120: .getInitParameterSet());
121: webAppE.appendChild(filterE);
122: }
123: }
124:
125: // <filter-mapping>
126: FilterMappingImpl[] filterMappings = webAppImpl
127: .getFilterMappings();
128: if (filterMappings != null) {
129: for (int i = 0; i < filterMappings.length; i++) {
130: FilterMappingImpl filterMapping = filterMappings[i];
131: Element filterMappingE = doc
132: .createElement("filter-mapping");
133: addTextElement(filterMappingE, "filter-name",
134: filterMapping.getFilterName());
135: addTextElement(filterMappingE, "url-pattern",
136: filterMapping.getUrlPattern());
137: addTextElement(filterMappingE, "servlet-name",
138: filterMapping.getServletName());
139: webAppE.appendChild(filterMappingE);
140: }
141: }
142:
143: // <listener>
144: ListenerImpl[] listeners = webAppImpl.getListeners();
145: if (listeners != null) {
146: for (int i = 0; i < listeners.length; i++) {
147: ListenerImpl listener = listeners[i];
148: Element listenerE = doc.createElement("listener");
149: addTextElement(listenerE, "listener-class", listener
150: .getListenerClass());
151: webAppE.appendChild(listenerE);
152: }
153: }
154:
155: // <servlet>
156: ServletDefinitionList servletDefinitions = webAppImpl
157: .getServletDefinitionList();
158: if (servletDefinitions != null) {
159: for (Iterator iter = servletDefinitions.iterator(); iter
160: .hasNext();) {
161: Element servletE = doc.createElement("servlet");
162: ServletDefinitionImpl servletDefinition = (ServletDefinitionImpl) iter
163: .next();
164: addIcon(servletE, servletDefinition.getIcon());
165: addTextElement(servletE, "servlet-name",
166: servletDefinition.getServletName());
167: addDisplayNames(servletE, servletDefinition
168: .getDisplayNames());
169: addDescriptions(servletE, servletDefinition
170: .getDescriptions());
171: addTextElement(servletE, "servlet-class",
172: servletDefinition.getServletClass());
173: addTextElement(servletE, "jsp-file", servletDefinition
174: .getJspFile());
175: addParameters(servletE, "init-param",
176: (ParameterSetImpl) servletDefinition
177: .getInitParameterSet());
178: addTextElement(servletE, "load-on-startup",
179: servletDefinition.getLoadOnStartup());
180: RunAsImpl runAs = servletDefinition.getRunAs();
181: if (runAs != null) {
182: Element runAsE = doc.createElement("run-as");
183: addDescriptions(runAsE, runAs.getDescritpions());
184: addTextElement(runAsE, "role-name", runAs
185: .getRoleName());
186: servletE.appendChild(runAsE);
187: }
188: SecurityRoleRefSetImpl securityRoleRefs = (SecurityRoleRefSetImpl) servletDefinition
189: .getSecurityRoleRefs();
190: if (securityRoleRefs != null) {
191: for (Iterator iter2 = securityRoleRefs.iterator(); iter2
192: .hasNext();) {
193: SecurityRoleRefImpl securityRoleRef = (SecurityRoleRefImpl) iter2
194: .next();
195: Element securityRoleRefE = doc
196: .createElement("security-role-ref");
197: addDescriptions(securityRoleRefE,
198: securityRoleRef.getDescriptions());
199: addTextElement(securityRoleRefE, "role-name",
200: securityRoleRef.getRoleName());
201: addTextElement(securityRoleRefE, "role-link",
202: securityRoleRef.getRoleLink());
203: servletE.appendChild(securityRoleRefE);
204: }
205: }
206: webAppE.appendChild(servletE);
207: }
208: }
209:
210: // <servlet-mapping>
211: ServletMappingListImpl servletMappings = webAppImpl
212: .getServletMappings();
213: if (servletMappings != null) {
214: for (Iterator iter = servletMappings.iterator(); iter
215: .hasNext();) {
216: ServletMappingImpl servletMapping = (ServletMappingImpl) iter
217: .next();
218: Element servletMappingE = doc
219: .createElement("servlet-mapping");
220: addTextElement(servletMappingE, "servlet-name",
221: servletMapping.getServletName());
222: addTextElement(servletMappingE, "url-pattern",
223: servletMapping.getUrlPattern());
224: webAppE.appendChild(servletMappingE);
225: }
226: }
227:
228: // <session-config>
229: SessionConfigImpl sessionConfig = webAppImpl.getSessionConfig();
230: if (sessionConfig != null) {
231: Element sessionConfigE = doc
232: .createElement("session-config");
233: addTextElement(sessionConfigE, "session-timeout",
234: sessionConfig.getSessionTimeout());
235: webAppE.appendChild(sessionConfigE);
236: }
237:
238: // <mime-mapping>
239: MimeMappingImpl[] mimeMappings = webAppImpl.getMimeMappings();
240: if (mimeMappings != null) {
241: for (int i = 0; i < mimeMappings.length; i++) {
242: MimeMappingImpl mimeMapping = mimeMappings[i];
243: Element mimeMappingE = doc
244: .createElement("mime-mapping");
245: addTextElement(mimeMappingE, "extension", mimeMapping
246: .getExtension());
247: addTextElement(mimeMappingE, "mime-type", mimeMapping
248: .getMimeType());
249: webAppE.appendChild(mimeMappingE);
250: }
251: }
252:
253: // <welcome-file-list>
254:
255: WelcomeFileListImpl welcomeFiles = webAppImpl.getWelcomeFiles();
256: if (welcomeFiles != null) {
257: Element welcomeFileListE = doc
258: .createElement("welcome-file-list");
259: for (Iterator iter = welcomeFiles.iterator(); iter
260: .hasNext();) {
261: String welcomeFile = (String) iter.next();
262: addTextElement(welcomeFileListE, "welcome-file",
263: welcomeFile);
264: }
265: webAppE.appendChild(welcomeFileListE);
266: }
267:
268: // <error-page>
269: ErrorPageImpl[] errorPages = webAppImpl.getErrorPages();
270: if (errorPages != null) {
271: for (int i = 0; i < errorPages.length; i++) {
272: ErrorPageImpl errorPage = errorPages[i];
273: Element errorPageE = doc.createElement("error-page");
274: addTextElement(errorPageE, "error-code", errorPage
275: .getErrorCode());
276: addTextElement(errorPageE, "exception-type", errorPage
277: .getExceptionType());
278: addTextElement(errorPageE, "location", errorPage
279: .getLocation());
280: webAppE.appendChild(errorPageE);
281: }
282: }
283:
284: // <taglib>
285: TagLibListImpl tagLibs = webAppImpl.getTagLibs();
286: if (tagLibs != null) {
287: for (Iterator iter = tagLibs.iterator(); iter.hasNext();) {
288: TagLibImpl tagLib = (TagLibImpl) iter.next();
289: Element tagLibE = doc.createElement("taglib");
290: addTextElement(tagLibE, "taglib-uri", tagLib
291: .getTaglibUri());
292: addTextElement(tagLibE, "taglib-location", tagLib
293: .getTaglibLocation());
294: webAppE.appendChild(tagLibE);
295: }
296: }
297:
298: // <resource-env-ref>
299: ResourceEnvRefImpl[] resourceEnvRefs = webAppImpl
300: .getResourceEnvRefs();
301: if (resourceEnvRefs != null) {
302: for (int i = 0; i < resourceEnvRefs.length; i++) {
303: ResourceEnvRefImpl resourceEnvRef = resourceEnvRefs[i];
304: Element resourceEnvRefE = doc
305: .createElement("resource-env-ref");
306: addDescriptions(resourceEnvRefE, resourceEnvRef
307: .getDescriptions());
308: addTextElement(resourceEnvRefE,
309: "resource-env-ref-name", resourceEnvRef
310: .getResourceEnvRefName());
311: addTextElement(resourceEnvRefE,
312: "resource-env-ref-type", resourceEnvRef
313: .getResourceEnvRefType());
314: webAppE.appendChild(resourceEnvRefE);
315: }
316: }
317:
318: // <resource-ref>
319: ResourceRefImpl[] resourceRefs = webAppImpl.getResourceRefs();
320: if (resourceRefs != null) {
321: for (int i = 0; i < resourceRefs.length; i++) {
322: ResourceRefImpl resourceRef = resourceRefs[i];
323: Element resourceRefE = doc
324: .createElement("resource-ref");
325: addDescriptions(resourceRefE, resourceRef
326: .getDescriptions());
327: addTextElement(resourceRefE, "res-ref-name",
328: resourceRef.getResRefName());
329: addTextElement(resourceRefE, "res-type", resourceRef
330: .getResType());
331: addTextElement(resourceRefE, "res-auth", resourceRef
332: .getResAuth());
333: addTextElement(resourceRefE, "res-sharing-scope",
334: resourceRef.getResSharingScope());
335: webAppE.appendChild(resourceRefE);
336: }
337: }
338:
339: // <security-constraint>
340: SecurityConstraintImpl[] securityConstraints = webAppImpl
341: .getSecurityConstraints();
342: if (securityConstraints != null) {
343: for (int i = 0; i < securityConstraints.length; i++) {
344: SecurityConstraintImpl securityConstraint = securityConstraints[i];
345: Element securityConstraintE = doc
346: .createElement("security-constraint");
347: addDisplayNames(securityConstraintE, securityConstraint
348: .getDisplayNames());
349: WebResourceCollectionImpl[] webResourceCollections = securityConstraint
350: .getWebResourceCollections();
351: if (webResourceCollections != null) {
352: for (int j = 0; j < webResourceCollections.length; j++) {
353: WebResourceCollectionImpl webResourceCollection = webResourceCollections[j];
354: Element webResourceCollectionE = doc
355: .createElement("web-resource-collection");
356: addTextElement(webResourceCollectionE,
357: "web-resource-name",
358: webResourceCollection
359: .getWebResourceName());
360: addDescriptions(webResourceCollectionE,
361: webResourceCollection.getDescriptions());
362: String[] urlPatterns = webResourceCollection
363: .getUrlPatterns();
364: for (int k = 0; k < urlPatterns.length; k++) {
365: addTextElement(webResourceCollectionE,
366: "url-pattern", urlPatterns[k]);
367: }
368: String[] httpMethods = webResourceCollection
369: .getHttpMethods();
370: for (int k = 0; k < httpMethods.length; k++) {
371: addTextElement(webResourceCollectionE,
372: "http-method", httpMethods[k]);
373: }
374: securityConstraintE
375: .appendChild(webResourceCollectionE);
376: }
377: }
378: AuthConstraintImpl authConstraint = securityConstraint
379: .getAuthConstraint();
380: if (authConstraint != null) {
381: Element authConstraintE = doc
382: .createElement("auth-constraint");
383: addDescriptions(authConstraintE, authConstraint
384: .getDescriptions());
385: String[] roleNames = authConstraint.getRoleNames();
386: for (int j = 0; j < roleNames.length; j++) {
387: addTextElement(authConstraintE, "role-name",
388: roleNames[j]);
389: }
390: securityConstraintE.appendChild(authConstraintE);
391: }
392: UserDataConstraintImpl userDataConstraint = securityConstraint
393: .getUserDataConstraint();
394: if (userDataConstraint != null) {
395: Element userDataConstraintE = doc
396: .createElement("user-data-constraint");
397: addDescriptions(userDataConstraintE,
398: userDataConstraint.getDescriptions());
399: addTextElement(userDataConstraintE,
400: "transport-guarantee", userDataConstraint
401: .getTransportGuarantee());
402: securityConstraintE
403: .appendChild(userDataConstraintE);
404: }
405: webAppE.appendChild(securityConstraintE);
406: }
407: }
408:
409: // <login-config>
410: LoginConfigImpl loginConfig = webAppImpl.getLoginConfig();
411: if (loginConfig != null) {
412: Element loginConfigE = doc.createElement("login-config");
413: addTextElement(loginConfigE, "auth-method", loginConfig
414: .getAuthMethod());
415: addTextElement(loginConfigE, "realm-name", loginConfig
416: .getRealmName());
417: FormLoginConfigImpl formLoginConfigImpl = loginConfig
418: .getFormLoginConfig();
419: if (formLoginConfigImpl != null) {
420: Element formLoginConfigE = doc
421: .createElement("form-login-config");
422: addTextElement(formLoginConfigE, "form-login-page",
423: formLoginConfigImpl.getFormLoginPage());
424: addTextElement(formLoginConfigE, "form-error-page",
425: formLoginConfigImpl.getFormErrorPage());
426: loginConfigE.appendChild(formLoginConfigE);
427: }
428: webAppE.appendChild(loginConfigE);
429: }
430:
431: // <security-role>
432: SecurityRoleSet securityRoles = webAppImpl.getSecurityRoles();
433: if (securityRoles != null) {
434: for (Iterator iter = securityRoles.iterator(); iter
435: .hasNext();) {
436: SecurityRole securityRole = (SecurityRole) iter.next();
437: Element securityRoleE = doc
438: .createElement("security-role");
439: addTextElement(securityRoleE, "description",
440: securityRole.getDescription());
441: addTextElement(securityRoleE, "role-name", securityRole
442: .getRoleName());
443: webAppE.appendChild(securityRoleE);
444: }
445: }
446:
447: // <env-entry>
448: EnvEntryImpl[] envEntries = webAppImpl.getEnvEntries();
449: if (envEntries != null) {
450: for (int i = 0; i < envEntries.length; i++) {
451: Element envEntryE = doc.createElement("env-entry");
452: EnvEntryImpl envEntry = envEntries[i];
453: addDescriptions(envEntryE, envEntry.getDescriptions());
454: addTextElement(envEntryE, "env-entry-name", envEntry
455: .getEnvEntryName());
456: addTextElement(envEntryE, "env-entry-value", envEntry
457: .getEnvEntryValue());
458: addTextElement(envEntryE, "env-entry-type", envEntry
459: .getEnvEntryType());
460: webAppE.appendChild(envEntryE);
461: }
462: }
463:
464: // <ejb-ref>
465: EjbRefImpl[] ejbRefs = webAppImpl.getEjbRefs();
466: if (ejbRefs != null) {
467: for (int i = 0; i < ejbRefs.length; i++) {
468: Element ejbRefE = doc.createElement("ejb-ref");
469: EjbRefImpl ejbRef = ejbRefs[i];
470: addDescriptions(ejbRefE, ejbRef.getDescriptions());
471: addTextElement(ejbRefE, "ejb-ref-name", ejbRef
472: .getEjbRefName());
473: addTextElement(ejbRefE, "ejb-ref-type", ejbRef
474: .getEjbRefType());
475: addTextElement(ejbRefE, "home", ejbRef.getHome());
476: addTextElement(ejbRefE, "remote", ejbRef.getRemote());
477: addTextElement(ejbRefE, "ejb-link", ejbRef.getEjbLink());
478: webAppE.appendChild(ejbRefE);
479: }
480: }
481:
482: // <ejb-local-ref>
483: EjbLocalRefImpl[] ejbLocalRefs = webAppImpl.getEjbLocalRefs();
484: if (ejbLocalRefs != null) {
485: for (int i = 0; i < ejbLocalRefs.length; i++) {
486: Element ejbLocalRefE = doc
487: .createElement("ejb-local-ref");
488: EjbLocalRefImpl ejbLocalRef = ejbLocalRefs[i];
489: addDescriptions(ejbLocalRefE, ejbLocalRef
490: .getDescriptions());
491: addTextElement(ejbLocalRefE, "ejb-ref-name",
492: ejbLocalRef.getEjbRefName());
493: addTextElement(ejbLocalRefE, "ejb-ref-type",
494: ejbLocalRef.getEjbRefType());
495: addTextElement(ejbLocalRefE, "local-home", ejbLocalRef
496: .getLocalHome());
497: addTextElement(ejbLocalRefE, "local", ejbLocalRef
498: .getLocal());
499: addTextElement(ejbLocalRefE, "ejb-link", ejbLocalRef
500: .getEjbLink());
501: webAppE.appendChild(ejbLocalRefE);
502: }
503: }
504:
505: doc.appendChild(webAppE);
506: }
507:
508: private void addTextElement(Element parent, String elementName,
509: String text) {
510: if (text != null && text.length() > 0) {
511: Document doc = parent.getOwnerDocument();
512: Element e = doc.createElement(elementName);
513: e.appendChild(doc.createTextNode(text));
514: parent.appendChild(e);
515: }
516: }
517:
518: private void addDisplayNames(Element parent,
519: DisplayNameSet displayNames) {
520: DisplayName displayName = displayNames.get(Locale.getDefault());
521: if (displayName != null) {
522: addTextElement(parent, "display-name", displayName
523: .getDisplayName());
524: }
525: }
526:
527: private void addDescriptions(Element parent,
528: DescriptionSet descriptions) {
529: Description description = descriptions.get(Locale.getDefault());
530: if (description != null) {
531: addTextElement(parent, "description", description
532: .getDescription());
533: }
534: }
535:
536: private void addParameters(Element parent, String paramElementName,
537: ParameterSetImpl parameters) {
538: if (parameters != null && parameters.size() > 0) {
539: for (Iterator iter = parameters.iterator(); iter.hasNext();) {
540: Parameter parameter = (Parameter) iter.next();
541: Document doc = parent.getOwnerDocument();
542: Element paramE = doc.createElement(paramElementName);
543: addTextElement(paramE, "param-name", parameter
544: .getName());
545: addTextElement(paramE, "param-value", parameter
546: .getValue());
547: Description paramDescription = parameter
548: .getDescription(Locale.getDefault());
549: if (paramDescription != null) {
550: addTextElement(paramE, "description",
551: paramDescription.getDescription());
552: }
553: parent.appendChild(paramE);
554: }
555: }
556: }
557:
558: private void addIcon(Element parent, IconImpl icon) {
559: if (icon != null) {
560: Document doc = parent.getOwnerDocument();
561: Element iconE = doc.createElement("icon");
562: addTextElement(iconE, "small-icon", icon.getSmallIcon());
563: addTextElement(iconE, "large-icon", icon.getLargeIcon());
564: parent.appendChild(iconE);
565: }
566: }
567:
568: }
|