⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portletwindowthread.java.svn-base

📁 portal越来越流行了
💻 SVN-BASE
字号:
/* * Copyright 2006 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.pluto.driver.services.container;import java.io.IOException;import java.io.Serializable;import java.io.StringReader;import java.util.ArrayList;import java.util.List;import javax.portlet.Event;import javax.portlet.PortletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBElement;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import javax.xml.namespace.QName;import javax.xml.parsers.FactoryConfigurationError;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamReader;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.pluto.EventContainer;import org.apache.pluto.PortletContainerException;import org.apache.pluto.PortletWindow;import org.apache.pluto.driver.core.PortalServletRequest;import org.apache.pluto.internal.impl.EventImpl;import org.apache.pluto.om.portlet.EventDefinition;import org.apache.pluto.om.portlet.PortletApplicationDefinition;import org.apache.pluto.spi.optional.PortletContextService;public class PortletWindowThread extends Thread {		/** Logger. */    private static final Log LOG = LogFactory.getLog(PortletWindowThread.class);    	private EventProviderImpl eventProvider;		private PortletWindow portletWindow;		private EventContainer eventContainer;		/** PortletRegistryService used to obtain PortletApplicationConfig objects */	private PortletContextService portletContextService;		private List<Event> events = new ArrayList<Event>();	public PortletWindowThread(ThreadGroup group, String name,			EventProviderImpl eventProvider, PortletWindow window, EventContainer eventContainer, PortletContextService portletContextService) {		super(group, name);		this.eventProvider = eventProvider;		this.portletWindow = window;		this.eventContainer = eventContainer;		this.portletContextService = portletContextService;	}	/* (non-Javadoc)	 * @see java.lang.Thread#run()	 */	@Override	public void run() {		super.run();		while (events.size() > 0) {			HttpServletRequest req = new PortalServletRequest(eventProvider.getRequest(), this.portletWindow);			HttpServletResponse res = eventProvider.getResponse();			try {//				synchronized (this) {					Event event = events.remove(0);			        Object value = event.getValue();			        			        XMLStreamReader xml = null;					try {						if (value instanceof String) {							String in = (String) value; 							xml = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(in));						}								}  					catch (XMLStreamException e1) {						throw new IllegalStateException(e1);					} catch (FactoryConfigurationError e1) {						throw new IllegalStateException(e1);					}			        			        if (xml != null) {			        	//XMLStreamReader xml = (XMLStreamReader) event.getValue();			        				        		//provider.getEventDefinition(event.getQName());			        	try {			        		// now test if object is jaxb			        		EventDefinition eventDefinitionDD = getEventDefintion(event.getQName()); 			        					        		ClassLoader loader = portletContextService.getClassLoader(portletWindow.getPortletEntity().getPortletDefinition().getApplication().getName());			        		Class<? extends Serializable> clazz = loader.loadClass(eventDefinitionDD.getValueType()).asSubclass(Serializable.class);			        		JAXBContext jc = JAXBContext.newInstance(clazz);			        		Unmarshaller unmarshaller  = jc.createUnmarshaller();//			        		unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());			        		JAXBElement result = unmarshaller.unmarshal(xml,clazz);			        		event =  new EventImpl(event.getQName(),(Serializable) result.getValue());			        	} catch (JAXBException e) {			        		throw new IllegalStateException(e);			        	} catch (ClassCastException e) {			        		throw new IllegalStateException(e);			        	} catch (ClassNotFoundException e) {			        		throw new IllegalStateException(e);			        	} catch (PortletContainerException e) {			        		throw new IllegalStateException(e);						}			        }										eventContainer.fireEvent(req, res, portletWindow, event);	//				}			} catch (PortletException e) {				LOG.warn(e);			} catch (IOException e) {				LOG.warn(e);			} catch (PortletContainerException e) {				LOG.warn(e);			}			}	}	public void addEvent(Event event) {		this.events.add(event);		}	private EventDefinition getEventDefintion(QName name) throws PortletContainerException {		PortletApplicationDefinition appDD = portletWindow.getPortletEntity().getPortletDefinition().getApplication();		for (EventDefinition def : appDD.getEventDefinitions()){			if (def.getQName() != null){				if (def.getQName().equals(name))					return def;			}			else{				QName tmp = new QName(appDD.getDefaultNamespace(),def.getName());				if (tmp.equals(name))					return def;			}		}		throw new IllegalStateException();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -