Created
April 20, 2011 08:27
-
-
Save vietj/930718 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public PortletApplication20MetaData build(InputStream is) throws Exception | |
{ | |
PortletApplication20MetaData md = new PortletApplication20MetaData(); | |
XMLInputFactory factory = XMLInputFactory.newInstance(); | |
XMLStreamReader stream = factory.createXMLStreamReader(is); | |
StaxNavigator<Element> nav = new StaxNavigatorImpl<Element>(new Naming.Enumerated<Element>(Element.class), stream); | |
nav.setTrimContent(true); | |
// For now we do it this way | |
// but it's not correct | |
String defaultNS = nav.getNamespaceByPrefix(""); | |
int version; | |
if (PORTLET_1_0.equals(defaultNS)) | |
{ | |
md.setVersion("1.0"); | |
version = 1; | |
} | |
else if (PORTLET_2_0.equals(defaultNS)) | |
{ | |
md.setVersion("2.0"); | |
version = 2; | |
} | |
else | |
{ | |
throw new UnsupportedOperationException(); | |
} | |
// | |
assert Element.portlet_app == nav.getName(); | |
// | |
for (StaxNavigator<Element> portletNav : nav.fork(Element.portlet)) | |
{ | |
PortletMetaData portletMD = new PortletMetaData(); | |
// | |
portletMD.setId(portletNav.getAttribute("id")); | |
portletMD.setDescription(readLocalizedString(portletNav, Element.description)); | |
portletMD.setPortletName(getContent(portletNav, Element.portlet_name)); | |
portletMD.setDisplayName(readLocalizedString(portletNav, Element.display_name)); | |
portletMD.setPortletClass(getContent(portletNav, Element.portlet_class)); | |
// | |
for (InitParamMetaData initParamMD : readInitParams(portletNav)) | |
{ | |
portletMD.addInitParam(initParamMD); | |
} | |
// | |
if (portletNav.next(Element.expiration_cache)) | |
{ | |
portletMD.setExpirationCache(Integer.parseInt(portletNav.getContent())); | |
} | |
if (portletNav.next(Element.cache_scope)) | |
{ | |
portletMD.setCacheScope(PortletCacheScopeEnum.valueOf(portletNav.getContent())); | |
} | |
// | |
while (portletNav.next(Element.supports)) | |
{ | |
SupportsMetaData supportsMD = new SupportsMetaData(); | |
supportsMD.setId(portletNav.getAttribute("id")); | |
supportsMD.setMimeType(getContent(portletNav, Element.mime_type)); | |
while (portletNav.next(Element.portlet_mode)) { | |
PortletModeMetaData portletModeMD = new PortletModeMetaData(); | |
portletModeMD.setPortletMode(Mode.create(portletNav.getContent())); | |
supportsMD.addPortletMode(portletModeMD); | |
} | |
while (portletNav.next(Element.window_state)) { | |
WindowStateMetaData windowStateMD = new WindowStateMetaData(); | |
windowStateMD.setWindowState(WindowState.create(portletNav.getContent())); | |
supportsMD.addWindowState(windowStateMD); | |
} | |
portletMD.addSupport(supportsMD); | |
} | |
// | |
while (portletNav.next(Element.supported_locale)) | |
{ | |
SupportedLocaleMetaData supportedLocaleMD = new SupportedLocaleMetaData(); | |
supportedLocaleMD.setLocale(portletNav.getContent()); | |
portletMD.addSupportedLocale(supportedLocaleMD); | |
} | |
if (portletNav.next(Element.resource_bundle)) | |
{ | |
portletMD.setResourceBundle(portletNav.getContent()); | |
} | |
// | |
if (portletNav.next(Element.portlet_info)) | |
{ | |
PortletInfoMetaData portletInfoMD = new PortletInfoMetaData(); | |
if (portletNav.next(Element.title)) | |
{ | |
portletInfoMD.setTitle(portletNav.getContent()); | |
} | |
if (portletNav.next(Element.short_title)) | |
{ | |
portletInfoMD.setShortTitle(portletNav.getContent()); | |
} | |
if (portletNav.next(Element.keywords)) | |
{ | |
portletInfoMD.setKeywords(portletNav.getContent()); | |
} | |
portletMD.setPortletInfo(portletInfoMD); | |
} | |
// | |
if (portletNav.next(Element.portlet_preferences)) | |
{ | |
PortletPreferencesMetaData portletPreferencesMD = new PortletPreferencesMetaData(); | |
while (portletNav.next(Element.preference)) | |
{ | |
PortletPreferenceMetaData portletPreferenceMD = new PortletPreferenceMetaData(); | |
portletPreferenceMD.setName(getContent(portletNav, Element.name)); | |
while (portletNav.next(Element.value)) | |
{ | |
portletPreferenceMD.addValue(portletNav.getContent()); | |
} | |
if (portletNav.next(Element.read_only)) | |
{ | |
portletPreferenceMD.setReadOnly(portletNav.parseContent(ValueType.BOOLEAN)); | |
} | |
portletPreferencesMD.addPortletPreference(portletPreferenceMD); | |
} | |
if (portletNav.next(Element.preferences_validator)) | |
{ | |
portletPreferencesMD.setPreferenceValidator(portletNav.getContent()); | |
} | |
portletMD.setPortletPreferences(portletPreferencesMD); | |
} | |
// | |
while (portletNav.next(Element.security_role_ref)) | |
{ | |
SecurityRoleRefMetaData securityRoleRefMD = new SecurityRoleRefMetaData(); | |
securityRoleRefMD.setDescription(readLocalizedString(portletNav, Element.description)); | |
securityRoleRefMD.setRoleName(getContent(portletNav, Element.role_name)); | |
if (portletNav.next(Element.role_link)) | |
{ | |
securityRoleRefMD.setRoleLink(portletNav.getContent()); | |
} | |
portletMD.addSecurityRoleRef(securityRoleRefMD); | |
} | |
// | |
while (portletNav.next(Element.supported_processing_event) || portletNav.next(Element.supported_publishing_event)) | |
{ | |
boolean processing = portletNav.getName() == Element.supported_processing_event; | |
EventDefinitionReferenceMetaData eventDefinitionReferenceMD = new EventDefinitionReferenceMetaData(); | |
switch (portletNav.next(NAME_OR_QNAME)) | |
{ | |
case name: | |
eventDefinitionReferenceMD.setName(portletNav.getContent()); | |
break; | |
case qname: | |
eventDefinitionReferenceMD.setQname(readQName(portletNav)); | |
break; | |
} | |
if (processing) | |
{ | |
portletMD.addSupportedProcessingEvent(eventDefinitionReferenceMD); | |
} | |
else | |
{ | |
portletMD.addSupportedPublishingEvent(eventDefinitionReferenceMD); | |
} | |
} | |
while (portletNav.next(Element.supported_public_render_parameter)) | |
{ | |
portletMD.addSupportedPublicRenderParameter(portletNav.getContent()); | |
} | |
while (portletNav.next(Element.container_runtime_option)) | |
{ | |
ContainerRuntimeMetaData containerRuntimeOptionMD = new ContainerRuntimeMetaData(); | |
containerRuntimeOptionMD.setName(getContent(portletNav, Element.name)); | |
while (portletNav.next(Element.value)) | |
{ | |
containerRuntimeOptionMD.addValue(portletNav.getContent()); | |
} | |
portletMD.addContainerRuntime(containerRuntimeOptionMD); | |
} | |
// | |
md.addPortlet(portletMD); | |
} | |
// | |
for (StaxNavigator<Element> customPortletModeNav : nav.fork(Element.custom_portlet_mode)) | |
{ | |
CustomPortletModeMetaData customPortletModeMD = new CustomPortletModeMetaData(); | |
customPortletModeMD.setId(customPortletModeNav .getAttribute("id")); | |
customPortletModeMD.setDescription(readLocalizedString(customPortletModeNav , Element.description)); | |
customPortletModeMD.setPortletMode(getContent(customPortletModeNav, Element.portlet_mode)); | |
if (customPortletModeNav .next(Element.portal_managed)) | |
{ | |
customPortletModeMD.setPortalManaged(customPortletModeNav .parseContent(ValueType.BOOLEAN)); | |
} | |
md.addCustomPortletMode(customPortletModeMD); | |
} | |
// | |
for (StaxNavigator<Element> customWindowStateNav : nav.fork(Element.custom_window_state)) | |
{ | |
CustomWindowStateMetaData customWindowStateMD = new CustomWindowStateMetaData(); | |
customWindowStateMD.setId(customWindowStateNav.getAttribute("id")); | |
customWindowStateMD.setDescription(readLocalizedString(customWindowStateNav, Element.description)); | |
customWindowStateMD.setWindowState(getContent(customWindowStateNav, Element.window_state)); | |
md.addCustomWindowState(customWindowStateMD); | |
} | |
// | |
for (StaxNavigator<Element> userAttributeNav : nav.fork(Element.user_attribute)) | |
{ | |
UserAttributeMetaData userAttributeMD = new UserAttributeMetaData(); | |
userAttributeMD.setId(userAttributeNav.getAttribute("id")); | |
userAttributeMD.setDescription(readLocalizedString(userAttributeNav, Element.description)); | |
userAttributeMD.setName(getContent(userAttributeNav, Element.name)); | |
md.addUserAttribute(userAttributeMD); | |
} | |
// | |
for (StaxNavigator<Element> securityConstraintNav : nav.fork(Element.security_constraint)) | |
{ | |
SecurityConstraintMetaData securityConstraintMD = new SecurityConstraintMetaData(); | |
securityConstraintMD.setId(securityConstraintNav.getAttribute("id")); | |
securityConstraintMD.setDisplayName(readLocalizedString(securityConstraintNav, Element.display_name)); | |
if (securityConstraintNav.next() != Element.portlet_collection) | |
{ | |
throw new StaxNavException(nav.getLocation(), "Was expecting a portlet-collection element instead of " + securityConstraintNav.getName()); | |
} | |
PortletCollectionMetaData portletCollectionMD = new PortletCollectionMetaData(); | |
while (securityConstraintNav.next(Element.portlet_name)) | |
{ | |
portletCollectionMD.addPortletname(securityConstraintNav.getContent()); | |
} | |
securityConstraintMD.setPortletList(portletCollectionMD); | |
if (securityConstraintNav.next() != Element.user_data_constraint) | |
{ | |
throw new StaxNavException(nav.getLocation(), "Was expecting a security-constraint element instead of " + securityConstraintNav.getName()); | |
} | |
UserDataConstraintMetaData userDataConstraintMD = new UserDataConstraintMetaData(); | |
userDataConstraintMD.setDescription(readLocalizedString(securityConstraintNav, Element.description)); | |
if (securityConstraintNav.next() != Element.transport_guarantee) | |
{ | |
throw new StaxNavException(nav.getLocation(), "Was expecting a transport-guarantee element instead of " + securityConstraintNav.getName()); | |
} | |
userDataConstraintMD.setTransportGuarantee(securityConstraintNav.parseContent(TRANSPORT_GUARANTEE)); | |
securityConstraintMD.setUserDataConstraint(userDataConstraintMD); | |
md.addSecurityConstraint(securityConstraintMD); | |
} | |
// | |
if (nav.find(Element.resource_bundle)) | |
{ | |
md.setResourceBundle(nav.getContent()); | |
nav.next(); | |
} | |
// | |
for (StaxNavigator<Element> filterNav : nav.fork(Element.filter)) | |
{ | |
if (version < 2) | |
{ | |
throw new Exception("Cannot declare filter with " + PORTLET_1_0 + " descriptor"); | |
} | |
FilterMetaData filterMD = new FilterMetaData(); | |
filterMD.setDescription(readLocalizedString(filterNav, Element.description)); | |
filterMD.setDisplayName(readLocalizedString(filterNav, Element.display_name)); | |
filterMD.setFilterName(getContent(filterNav, Element.filter_name)); | |
filterMD.setFilterClass(getContent(filterNav, Element.filter_class)); | |
while (filterNav.next(Element.lifecycle)) | |
{ | |
filterMD.addLifecycle(filterNav.parseContent(LIFE_CYCLE)); | |
} | |
for (InitParamMetaData initParamMD : readInitParams(filterNav)) | |
{ | |
filterMD.addInitParam(initParamMD); | |
} | |
md.addFilter(filterMD); | |
} | |
// | |
for (StaxNavigator<Element> filterMappingNav : nav.fork(Element.filter_mapping)) | |
{ | |
if (version < 2) | |
{ | |
throw new Exception("Cannot declare filter mapping with " + PORTLET_1_0 + " descriptor"); | |
} | |
FilterMappingMetaData filterMappingMD = new FilterMappingMetaData(); | |
filterMappingMD.setName(getContent(filterMappingNav, Element.filter_name)); | |
while (filterMappingNav.next(Element.portlet_name)) | |
{ | |
filterMappingMD.addPortletName(filterMappingNav.getContent()); | |
} | |
md.addFilterMapping(filterMappingMD); | |
} | |
// | |
if (nav.find(Element.default_namespace)) | |
{ | |
md.setDefaultNamespace(new URI(nav.getContent())); | |
nav.next(); | |
} | |
// | |
for (StaxNavigator<Element> eventDefinitionNav : nav.fork(Element.event_definition)) | |
{ | |
EventDefinitionMetaData eventDefinitionMD = new EventDefinitionMetaData(); | |
eventDefinitionMD.setId(eventDefinitionNav.getAttribute("id")); | |
eventDefinitionMD.setDescription(readLocalizedString(eventDefinitionNav, Element.description)); | |
switch (eventDefinitionNav.next(NAME_OR_QNAME)) | |
{ | |
case name: | |
eventDefinitionMD.setName(eventDefinitionNav.getContent()); | |
break; | |
case qname: | |
eventDefinitionMD.setQname(readQName(eventDefinitionNav)); | |
break; | |
} | |
while (eventDefinitionNav.next(Element.alias)) | |
{ | |
QName name = readQName(eventDefinitionNav); | |
eventDefinitionMD.addAlias(name); | |
} | |
if (eventDefinitionNav.next(Element.value_type)) | |
{ | |
eventDefinitionMD.setValueType(eventDefinitionNav.getContent()); | |
} | |
md.addEventDefinition(eventDefinitionMD); | |
} | |
// | |
for (StaxNavigator<Element> publicRenderParameterNav : nav.fork(Element.public_render_parameter)) | |
{ | |
PublicRenderParameterMetaData publicRenderParameterMD = new PublicRenderParameterMetaData(); | |
publicRenderParameterMD.setId(publicRenderParameterNav.getAttribute("id")); | |
publicRenderParameterMD.setDescription(readLocalizedString(publicRenderParameterNav, Element.description)); | |
publicRenderParameterMD.setIdentifier(getContent(publicRenderParameterNav, Element.identifier)); | |
switch (publicRenderParameterNav.next(NAME_OR_QNAME)) | |
{ | |
case name: | |
publicRenderParameterMD.setName(publicRenderParameterNav.getContent()); | |
break; | |
case qname: | |
publicRenderParameterMD.setQname(readQName(publicRenderParameterNav)); | |
break; | |
} | |
while (publicRenderParameterNav.next(Element.alias)) | |
{ | |
QName name = readQName(publicRenderParameterNav); | |
publicRenderParameterMD.addAlias(name); | |
} | |
md.addPublicRenderParameter(publicRenderParameterMD); | |
} | |
// | |
for (StaxNavigator<Element> listenerNav : nav.fork(Element.listener)) | |
{ | |
ListenerMetaData listenerMD = new ListenerMetaData(); | |
listenerMD.setId(listenerNav.getAttribute("id")); | |
listenerMD.setDescription(readLocalizedString(listenerNav, Element.description)); | |
listenerMD.setDisplayName(readLocalizedString(listenerNav, Element.display_name)); | |
listenerMD.setListenerClass(getContent(listenerNav, Element.listener_class)); | |
md.addListener(listenerMD); | |
} | |
// | |
for (StaxNavigator<Element> containerRuntimeNav : nav.fork(Element.container_runtime_option)) | |
{ | |
ContainerRuntimeMetaData containerRuntimeOptionMD = new ContainerRuntimeMetaData(); | |
containerRuntimeOptionMD.setName(getContent(containerRuntimeNav, Element.name)); | |
while (containerRuntimeNav.next(Element.value)) | |
{ | |
containerRuntimeOptionMD.addValue(containerRuntimeNav.getContent()); | |
} | |
md.addContainerRuntime(containerRuntimeOptionMD); | |
} | |
// | |
return md; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment