Index: lams_common/src/java/org/lamsfoundation/lams/lesson/lessonApplicationContext.xml =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/lesson/lessonApplicationContext.xml (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/lessonApplicationContext.xml (revision 0b2737221177ec6fb88f447aa647f9413f4373f8) @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + Index: lams_common/src/java/org/lamsfoundation/lams/test/AbstractLamsStrutsTestCase.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/test/AbstractLamsStrutsTestCase.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/test/AbstractLamsStrutsTestCase.java (revision 0b2737221177ec6fb88f447aa647f9413f4373f8) @@ -0,0 +1,138 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ***********************************************************************/ + +package org.lamsfoundation.lams.test; + +import javax.servlet.http.HttpSession; + +import junit.framework.TestCase; + + +import net.sf.hibernate.HibernateException; +import net.sf.hibernate.Session; +import net.sf.hibernate.SessionFactory; + +import org.springframework.orm.hibernate.SessionFactoryUtils; +import org.springframework.orm.hibernate.SessionHolder; +import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.web.context.ContextLoader; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; +import org.springframework.web.context.support.XmlWebApplicationContext; + +import servletunit.HttpServletRequestSimulator; +import servletunit.struts.MockStrutsTestCase; + + +/** + * The abstract test case that initialize the Spring context using context + * loader. It also use a session holder to simulate the + * OpenSessionInViewFilter. Without this session holder, we can + * not run integration testing with lazy loading hibernate object configured. + * + * @author Jacky Fang + * @since 2005-3-8 + * @version 1.0 + * + */ +public abstract class AbstractLamsStrutsTestCase extends MockStrutsTestCase +{ + //protected ApplicationContext context; + //private String CONFIG_LOCATIONS; + protected HttpServletRequestSimulator httpRequest; + protected HttpSession httpSession ; + protected WebApplicationContext wac; + + /** + * @param arg0 + */ + public AbstractLamsStrutsTestCase(String testName) + { + super(testName); + //this.CONFIG_LOCATIONS = location; + + } + + /** + * Set up spring context and hibernate session holder into mock servlet + * context. + * + * @see TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + ContextLoader ctxLoader = new ContextLoader(); + context.setInitParameter(ContextLoader.CONTEXT_CLASS_PARAM, + XmlWebApplicationContext.class.getName()); + context.setInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, + getContextConfigLocation()); + ctxLoader.initWebApplicationContext(context); + + wac = WebApplicationContextUtils.getRequiredWebApplicationContext(context); + initializeHibernateSession(); + httpRequest = (HttpServletRequestSimulator)getRequest(); + httpSession = getSession(); + } + + /** + * @see MockStrutsTestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + } + + /** + * @throws HibernateException + */ + protected void initializeHibernateSession() throws HibernateException + { + //hold the hibernate session + SessionFactory sessionFactory = (SessionFactory) this.wac.getBean(getHibernateSessionFactoryBeanName()); + Session s = sessionFactory.openSession(); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s)); + } + + /** + * @throws HibernateException + */ + protected void finalizeHibernateSession() throws HibernateException + { + //clean the hibernate session + SessionFactory sessionFactory = (SessionFactory)this.wac.getBean(getHibernateSessionFactoryBeanName()); + SessionHolder holder = (SessionHolder)TransactionSynchronizationManager.getResource(sessionFactory); + if (holder != null) { + Session s = holder.getSession(); + s.flush(); + TransactionSynchronizationManager.unbindResource(sessionFactory); + SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory); + } + } + + /** + * @return + */ + protected abstract String getHibernateSessionFactoryBeanName(); + + protected abstract String getContextConfigLocation(); +} Index: lams_common/src/java/org/lamsfoundation/lams/test/AbstractLamsTestCase.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/test/AbstractLamsTestCase.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/test/AbstractLamsTestCase.java (revision 0b2737221177ec6fb88f447aa647f9413f4373f8) @@ -0,0 +1,165 @@ +/* ******************************************************************************** + * Copyright Notice + * ================= + * This file contains propriety information of LAMS Foundation. + * Copying or reproduction with prior written permission is prohibited. + * Copyright (c) 2005 + * Created on 2/02/2005 + ******************************************************************************** */ + +package org.lamsfoundation.lams.test; + +import java.util.Map; + +import junit.framework.TestCase; +import net.sf.hibernate.HibernateException; +import net.sf.hibernate.Session; +import net.sf.hibernate.SessionFactory; + +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.orm.hibernate.SessionFactoryUtils; +import org.springframework.orm.hibernate.SessionHolder; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +import com.allaire.wddx.WddxDeserializationException; + + +/** + * + * @author Jacky Fang 2/02/2005 + * + */ +public abstract class AbstractLamsTestCase extends TestCase +{ + protected ApplicationContext context; + + private boolean shouldFlush = true; + /** + * + */ + public AbstractLamsTestCase(String name) + { + super(name); + } + + /** + * @see TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + context = new ClassPathXmlApplicationContext(getContextConfigLocation()); + initializeHibernateSession(); + } + + protected abstract String[] getContextConfigLocation(); + + /** + * @return + */ + protected abstract String getHibernateSessionFactoryName(); + + /** + * @see TestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + finalizeHibernateSession(); + } + + /** + * @throws HibernateException + */ + protected void initializeHibernateSession() throws HibernateException + { + //hold the hibernate session + SessionFactory sessionFactory = (SessionFactory) this.context.getBean(getHibernateSessionFactoryName()); + Session s = sessionFactory.openSession(); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s)); + } + + + /** + * @throws HibernateException + */ + protected void finalizeHibernateSession() throws HibernateException + { + //clean the hibernate session + SessionFactory sessionFactory = (SessionFactory)this.context.getBean(getHibernateSessionFactoryName()); + SessionHolder holder = (SessionHolder)TransactionSynchronizationManager.getResource(sessionFactory); + if (holder != null&&shouldFlush) { + Session s = holder.getSession(); + s.flush(); + TransactionSynchronizationManager.unbindResource(sessionFactory); + SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory); + } + } + + protected Session getSession() + { + SessionFactory sessionFactory = (SessionFactory)this.context.getBean(getHibernateSessionFactoryName()); + SessionHolder holder = (SessionHolder)TransactionSynchronizationManager.getResource(sessionFactory); + if (holder != null) + return holder.getSession(); + else + return null; + } + /** + * @param shouldFlush The shouldFlush to set. + */ + public void setShouldFlush(boolean shouldFlush) + { + this.shouldFlush = shouldFlush; + } + + /** + * Given a WDDX packet in our normal format, return the map object in the + * messageValue parameter. This should contain any returned ids. + * + * @param wddxPacket + * @return Map + */ + public Map extractIdMapFromWDDXPacket(String wddxPacket) { + + Object obj = null; + try { + obj = WDDXProcessor.deserialize(wddxPacket); + } catch (WddxDeserializationException e1) { + fail("WddxDeserializationException "+e1.getMessage()); + e1.printStackTrace(); + } + + Map map = (Map) obj; + Object messageValueObj = map.get("messageValue"); + assertNotNull("messageValue object found", messageValueObj); + if ( ! Map.class.isInstance( messageValueObj ) ) { + fail("messageValue is not a Map - try extractIdFromWDDXPacket(packet)"); + } + + return (Map) messageValueObj; + } + + /** + * Given a WDDX packet in our normal format, gets the id number from within + * the <var name='messageValue'><number>num</number></var> + * @param wddxPacket + * @return id + */ + public Long extractIdFromWDDXPacket(String wddxPacket) { + int indexMessageValue = wddxPacket.indexOf(""); + assertTrue(" string found", indexMessageValue > 0); + int endIndexMessageValue = wddxPacket.indexOf(".0",indexMessageValue); + String idString = wddxPacket.substring(indexMessageValue+33, endIndexMessageValue); + try { + long id = Long.parseLong(idString); + return new Long(id); + } catch (NumberFormatException e) { + fail("Unable to get id number from WDDX packet. Format exception. String was "+idString); + } + return null; + } + +} Index: lams_common/src/java/org/lamsfoundation/lams/tool/toolApplicationContext.xml =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/tool/toolApplicationContext.xml (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/tool/toolApplicationContext.xml (revision 0b2737221177ec6fb88f447aa647f9413f4373f8) @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + PROPAGATION_REQUIRES_NEW,ISOLATION_READ_COMMITTED + + + + + + + + + + + + + + + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED + PROPAGATION_REQUIRED,readOnly + + + + + + + + + + + + + + PROPAGATION_REQUIRED,readOnly + + + + + + + + + Fisheye: Tag 5bd9057d6aa08bfa1bb1e6c240d5b3707743c3d7 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/workspace/WorkspaceFolderContent.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 5bd9057d6aa08bfa1bb1e6c240d5b3707743c3d7 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/workspace/dao/IWorkspaceFolderContentDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 5bd9057d6aa08bfa1bb1e6c240d5b3707743c3d7 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/workspace/dao/hibernate/WorkspaceFolderContentDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 5bd9057d6aa08bfa1bb1e6c240d5b3707743c3d7 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/workspace/dto/FolderContentDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 0b2737221177ec6fb88f447aa647f9413f4373f8 refers to a dead (removed) revision in file `lams_common/test/java/org/lamsfoundation/lams/AbstractLamsStrutsTestCase.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 0b2737221177ec6fb88f447aa647f9413f4373f8 refers to a dead (removed) revision in file `lams_common/test/java/org/lamsfoundation/lams/AbstractLamsTestCase.java'. Fisheye: No comparison available. Pass `N' to diff?