use of org.apache.pluto.container.om.portlet.EventDefinition in project uPortal by Jasig.
the class PortletEventCoordinatationServiceTest method testSupportedEventResolution.
@Test
public void testSupportedEventResolution() throws Exception {
final QName searchRequestName = new QName("https://source.jasig.org/schemas/uportal/search", "SearchRequest");
final QName searchResultsName = new QName("https://source.jasig.org/schemas/uportal/search", "SearchResults");
//org.apereo.portal.search.SearchQuery
final Event event = mock(Event.class);
final MockPortletDefinitionId portletDefinitionId = new MockPortletDefinitionId(1);
final PortletApplicationDefinition portletApplicationDefinition = mock(PortletApplicationDefinition.class);
final PortletDefinition portletDefinition = mock(PortletDefinition.class);
final EventDefinitionReference searchRequestEventDefinitionReference = mock(EventDefinitionReference.class);
final EventDefinitionReference searchResultsEventDefinitionReference = mock(EventDefinitionReference.class);
final EventDefinition searchRequestEventDefinition = mock(EventDefinition.class);
final EventDefinition searchResultsEventDefinition = mock(EventDefinition.class);
when(event.getQName()).thenReturn(searchRequestName);
when(searchRequestEventDefinitionReference.getQualifiedName(anyString())).thenReturn(searchRequestName);
when(searchRequestEventDefinitionReference.getQName()).thenReturn(searchRequestName);
when(searchResultsEventDefinitionReference.getQualifiedName(anyString())).thenReturn(searchResultsName);
when(searchResultsEventDefinitionReference.getQName()).thenReturn(searchResultsName);
when(searchRequestEventDefinition.getQName()).thenReturn(searchRequestName);
when(searchRequestEventDefinition.getQualifiedName(anyString())).thenReturn(searchRequestName);
when(searchResultsEventDefinition.getQName()).thenReturn(searchResultsName);
when(searchResultsEventDefinition.getQualifiedName(anyString())).thenReturn(searchResultsName);
when(this.portletDefinitionRegistry.getParentPortletApplicationDescriptor(portletDefinitionId)).thenReturn(portletApplicationDefinition);
when(this.portletDefinitionRegistry.getParentPortletDescriptor(portletDefinitionId)).thenReturn(portletDefinition);
final List<? extends EventDefinition> eventDefinitions = Arrays.asList(searchRequestEventDefinition, searchResultsEventDefinition);
when(portletApplicationDefinition.getEventDefinitions()).thenReturn((List) eventDefinitions);
final List<? extends EventDefinitionReference> supportedProcessingEvents = Collections.singletonList(searchRequestEventDefinitionReference);
when(portletDefinition.getSupportedProcessingEvents()).thenReturn((List) supportedProcessingEvents);
final boolean supportsEvent = portletEventCoordinatationService.supportsEvent(event, portletDefinitionId);
assertTrue(supportsEvent);
}
use of org.apache.pluto.container.om.portlet.EventDefinition in project uPortal by Jasig.
the class EventProviderImpl method isValueInstanceOfDefinedClass.
private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value) {
final PortletDefinition portletDefinition = this.portletWindow.getPlutoPortletWindow().getPortletDefinition();
final PortletApplicationDefinition app = portletDefinition.getApplication();
final List<? extends EventDefinition> events = app.getEventDefinitions();
if (events == null) {
return true;
}
final String defaultNamespace = app.getDefaultNamespace();
for (final EventDefinition eventDefinition : events) {
if (eventDefinition.getQName() != null) {
if (eventDefinition.getQName().equals(qname)) {
final Class<? extends Serializable> valueClass = value.getClass();
return valueClass.getName().equals(eventDefinition.getValueType());
}
} else {
final QName tmp = new QName(defaultNamespace, eventDefinition.getName());
if (tmp.equals(qname)) {
final Class<? extends Serializable> valueClass = value.getClass();
return valueClass.getName().equals(eventDefinition.getValueType());
}
}
}
// event not declared
return true;
}
use of org.apache.pluto.container.om.portlet.EventDefinition in project uPortal by Jasig.
the class PortletEventCoordinatationService method unmarshall.
protected Event unmarshall(IPortletWindow portletWindow, Event event) {
//TODO make two types of Event impls, one for marshalled data and one for unmarshalled data
String value = (String) event.getValue();
final XMLInputFactory xmlInputFactory = this.xmlUtilities.getXmlInputFactory();
final XMLStreamReader xml;
try {
xml = xmlInputFactory.createXMLStreamReader(new StringReader(value));
} catch (XMLStreamException e) {
throw new IllegalStateException("Failed to create XMLStreamReader for portlet event: " + event, e);
}
// now test if object is jaxb
final EventDefinition eventDefinitionDD = getEventDefintion(portletWindow, event.getQName());
final PortletDefinition portletDefinition = portletWindow.getPlutoPortletWindow().getPortletDefinition();
final PortletApplicationDefinition application = portletDefinition.getApplication();
final String portletApplicationName = application.getName();
final ClassLoader loader;
try {
loader = portletContextService.getClassLoader(portletApplicationName);
} catch (PortletContainerException e) {
throw new IllegalStateException("Failed to get ClassLoader for portlet application: " + portletApplicationName, e);
}
final String eventType = eventDefinitionDD.getValueType();
final Class<? extends Serializable> clazz;
try {
clazz = loader.loadClass(eventType).asSubclass(Serializable.class);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("Declared event type '" + eventType + "' cannot be found in portlet application: " + portletApplicationName, e);
}
//TODO cache JAXBContext in registered portlet application
final JAXBElement<? extends Serializable> result;
try {
final JAXBContext jc = JAXBContext.newInstance(clazz);
final Unmarshaller unmarshaller = jc.createUnmarshaller();
result = unmarshaller.unmarshal(xml, clazz);
} catch (JAXBException e) {
throw new IllegalArgumentException("Cannot create JAXBContext for event type '" + eventType + "' from portlet application: " + portletApplicationName, e);
}
return new EventImpl(event.getQName(), result.getValue());
}
use of org.apache.pluto.container.om.portlet.EventDefinition in project uPortal by Jasig.
the class PortletEventCoordinatationService method getAllAliases.
protected Set<QName> getAllAliases(QName eventName, PortletApplicationDefinition portletApplicationDefinition) {
final List<? extends EventDefinition> eventDefinitions = portletApplicationDefinition.getEventDefinitions();
if (eventDefinitions == null || eventDefinitions.isEmpty()) {
return Collections.emptySet();
}
final String defaultNamespace = portletApplicationDefinition.getDefaultNamespace();
for (final EventDefinition eventDefinition : eventDefinitions) {
final QName defQName = eventDefinition.getQualifiedName(defaultNamespace);
if (defQName != null && defQName.equals(eventName)) {
final List<QName> aliases = eventDefinition.getAliases();
if (aliases == null || aliases.isEmpty()) {
return Collections.emptySet();
}
return new LinkedHashSet<QName>(aliases);
}
}
return Collections.emptySet();
}
Aggregations