gee-svn Mailing List for Group Experiments Environment (Page 2)
Status: Alpha
Brought to you by:
alllee
You can subscribe to this list here.
2006 |
Jan
|
Feb
(14) |
Mar
(47) |
Apr
(4) |
May
(14) |
Jun
(10) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
---|
From: <al...@us...> - 2006-05-16 23:58:18
|
Revision: 173 Author: alllee Date: 2006-05-16 16:58:06 -0700 (Tue, 16 May 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=173&view=rev Log Message: ----------- renaming ExperimentConfigurationDao => HibernateExperimentConfigurationDao, adding latest spring/webwork jars Modified Paths: -------------- trunk/gee/.classpath trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java trunk/gee/war/WEB-INF/applicationContext.xml trunk/gee/war/WEB-INF/lib/rife-continuations.jar trunk/gee/war/WEB-INF/lib/spring.jar trunk/gee/war/WEB-INF/lib/xwork.jar trunk/gee/war/WEB-INF/web.xml trunk/gee/war/index.jsp Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/service/HibernateExperimentConfigurationDao.java Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java Modified: trunk/gee/.classpath =================================================================== --- trunk/gee/.classpath 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/.classpath 2006-05-16 23:58:06 UTC (rev 173) @@ -15,5 +15,6 @@ <classpathentry kind="lib" path="war/WEB-INF/lib/hibernate3.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/hibernate-annotations.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/spring.jar"/> + <classpathentry kind="lib" path="war/WEB-INF/lib/spring-hibernate3.jar"/> <classpathentry kind="output" path="build"/> </classpath> Modified: trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-05-16 23:58:06 UTC (rev 173) @@ -39,8 +39,14 @@ private C configuration; private ExperimentRoundParameters currentParameters; + public AbstractExperiment() { + channel = new EventChannel(); + dispatcher = DispatcherFactory.getInstance().createServerDispatcher(channel); + } + public AbstractExperiment(Class<C> configurationClass, C defaultConfiguration, ExperimentConfigurationService configurationService) { + this(); // FIXME: alas, this doesn't seem to be easy to do it the way I'd like // to, i.e., // C persistedConfiguration = configurationService.find(defaultConfiguration); @@ -52,8 +58,6 @@ else { setConfiguration(persistedConfiguration); } - channel = new EventChannel(); - dispatcher = DispatcherFactory.getInstance().createServerDispatcher(channel); } public C getConfiguration() { Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-05-16 23:58:06 UTC (rev 173) @@ -82,7 +82,6 @@ } } } - private void sendRegistrationEvent(Identifier id) { transmit(new RegistrationEvent(id, timeToNextRound.start(), getNextRoundInstructions())); } Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java 2006-05-16 23:58:06 UTC (rev 173) @@ -1,27 +1,23 @@ package edu.indiana.psych.gee.service; -import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.springframework.transaction.annotation.Transactional; import edu.indiana.psych.gee.ConsentForm; /** - * $Id: Exp $ + * $Id: Exp$ * - * Hibernate data access object for consent forms. + * Data access object for consent forms. * * @author <a href='al...@cs...'>Allen Lee</a> * @version $Revision: $ */ -public class ConsentFormDao extends HibernateDaoSupport { +@Transactional +public interface ConsentFormDao { + public ConsentForm find(Integer id); - public ConsentForm find(Integer id) { - return (ConsentForm) getHibernateTemplate().get(ConsentForm.class, id); - } + public void persist(ConsentForm consentForm); - public void persist(ConsentForm consentForm) { - getHibernateTemplate().saveOrUpdate(consentForm); - } - } Deleted: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-05-16 23:58:06 UTC (rev 173) @@ -1,49 +0,0 @@ -package edu.indiana.psych.gee.service; - -import org.springframework.orm.hibernate3.support.HibernateDaoSupport; -import org.hibernate.Criteria; -import org.hibernate.HibernateException; -import org.hibernate.Session; -import org.hibernate.criterion.Restrictions; -import org.springframework.orm.hibernate3.HibernateCallback; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.indiana.psych.gee.ExperimentConfiguration; - -/** - * $Id: Exp $ - * - * Data access object for persisting experiment configurations, should also - * take care of experiment round parameters. - * - * @author <a href='al...@cs...'>Allen Lee</a> - * @version $Revision: $ - */ - -public class ExperimentConfigurationDao extends HibernateDaoSupport { - - private final Log logger = LogFactory.getLog(getClass()); - - public <E extends ExperimentConfiguration> E find(Class<E> configurationClass, Integer id) { - return configurationClass.cast(getHibernateTemplate().get(configurationClass, id)); - } - - public <E extends ExperimentConfiguration> E find(final Class<E> configurationClass, final String experimentName) { - return configurationClass.cast( - getHibernateTemplate().execute(new HibernateCallback() { - public Object doInHibernate(Session session) throws HibernateException { - logger.warn("doInHibernate session is: " + session.hashCode()); - Criteria criteria = session.createCriteria(configurationClass); - criteria.add(Restrictions.eq("experimentName", experimentName)); - return criteria.uniqueResult(); - } - })); - } - - public void persist(ExperimentConfiguration configuration) { - getHibernateTemplate().saveOrUpdate(configuration); - } - -} Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-05-16 23:58:06 UTC (rev 173) @@ -17,7 +17,7 @@ public class ExperimentConfigurationService { - private ExperimentConfigurationDao experimentConfigurationDao; + private HibernateExperimentConfigurationDao experimentConfigurationDao; private ConsentFormDao consentFormDao; public <E extends ExperimentConfiguration> E load(Class<E> configurationClass, InputStream stream) { @@ -48,7 +48,7 @@ experimentConfigurationDao.persist(configuration); } - public void setExperimentConfigurationDao(ExperimentConfigurationDao experimentConfigurationDao) { + public void setExperimentConfigurationDao(HibernateExperimentConfigurationDao experimentConfigurationDao) { this.experimentConfigurationDao = experimentConfigurationDao; } Copied: trunk/gee/src/java/edu/indiana/psych/gee/service/HibernateExperimentConfigurationDao.java (from rev 170, trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java) =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/HibernateExperimentConfigurationDao.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/HibernateExperimentConfigurationDao.java 2006-05-16 23:58:06 UTC (rev 173) @@ -0,0 +1,48 @@ +package edu.indiana.psych.gee.service; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.Criteria; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.hibernate.criterion.Restrictions; +import org.springframework.orm.hibernate3.HibernateCallback; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +import edu.indiana.psych.gee.ExperimentConfiguration; + +/** + * $Id: Exp $ + * + * Data access object for persisting experiment configurations, should also + * take care of experiment round parameters. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public class HibernateExperimentConfigurationDao extends HibernateDaoSupport implements ExperimentConfigurationDao { + + private final Log logger = LogFactory.getLog(getClass()); + + public <E extends ExperimentConfiguration> E find(Class<E> configurationClass, Integer id) { + return configurationClass.cast(getHibernateTemplate().get(configurationClass, id)); + } + + public <E extends ExperimentConfiguration> E find(final Class<E> configurationClass, final String experimentName) { + return configurationClass.cast( + getHibernateTemplate().execute(new HibernateCallback() { + public Object doInHibernate(Session session) throws HibernateException { + logger.warn("doInHibernate session is: " + session.hashCode()); + Criteria criteria = session.createCriteria(configurationClass); + criteria.add(Restrictions.eq("experimentName", experimentName)); + return criteria.uniqueResult(); + } + })); + } + + public void persist(ExperimentConfiguration configuration) { + getHibernateTemplate().saveOrUpdate(configuration); + } + +} Modified: trunk/gee/war/WEB-INF/applicationContext.xml =================================================================== --- trunk/gee/war/WEB-INF/applicationContext.xml 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/war/WEB-INF/applicationContext.xml 2006-05-16 23:58:06 UTC (rev 173) @@ -14,6 +14,20 @@ <property name="beanName" value="mysqlDataSource"/> </bean> + <!-- spring AOP components providing automagic transaction management for + any classes/interfaces marked as javax.persistence.@Transactional + --> + <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> + <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> + <property name="transactionInterceptor" ref="txInterceptor"/> + </bean> + <bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> + <property name="transactionManager" ref="transactionManager"/> + <property name="transactionAttributeSource"> + <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/> + </property> + </bean> + <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/${db.name}"/> @@ -21,6 +35,7 @@ <property name="password" value="${db.password}"/> </bean> + <!-- hibernate beans, session factory and transaction manager --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml"/> @@ -41,7 +56,7 @@ <bean id="experimentConfigurationDao" class="edu.indiana.psych.gee.service.ExperimentConfigurationDao"> <property name="sessionFactory" ref="sessionFactory"/> </bean> - <bean id="consentFormDao" class="edu.indiana.psych.gee.service.ConsentFormDao"> + <bean id="consentFormDao" class="edu.indiana.psych.gee.service.HibernateConsentFormDao"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- application layer beans --> Modified: trunk/gee/war/WEB-INF/lib/rife-continuations.jar =================================================================== (Binary files differ) Modified: trunk/gee/war/WEB-INF/lib/spring.jar =================================================================== (Binary files differ) Modified: trunk/gee/war/WEB-INF/lib/xwork.jar =================================================================== (Binary files differ) Modified: trunk/gee/war/WEB-INF/web.xml =================================================================== --- trunk/gee/war/WEB-INF/web.xml 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/war/WEB-INF/web.xml 2006-05-16 23:58:06 UTC (rev 173) @@ -8,7 +8,7 @@ <description> The Group Experiments Environment, a framework for building online Java experiments. - </description> + </description> <servlet> <servlet-name>dwr</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> @@ -17,7 +17,17 @@ <servlet-name>dwr</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> + <filter> + <filter-name>springFilter</filter-name> + <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> + </filter> + <filter> + <filter-name>hibernateFilter</filter-name> +<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> + </filter> + + <filter> <filter-name>webwork-cleanup</filter-name> <filter-class>com.opensymphony.webwork.dispatcher.ActionContextCleanUp</filter-class> </filter> @@ -27,16 +37,15 @@ <!--<filter-class>com.opensymphony.webwork.sitemesh.FreeMarkerPageFilter</filter-class>--> </filter> <filter> - <filter-name>hibernateFilter</filter-name> - <filter-class>edu.indiana.psych.gee.filter.FlushingOpenSessionInViewFilter</filter-class> -<!-- <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> --> - </filter> - <filter> <filter-name>webwork</filter-name> <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> + <filter-name>springFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <filter-mapping> <filter-name>webwork-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Modified: trunk/gee/war/index.jsp =================================================================== --- trunk/gee/war/index.jsp 2006-04-25 18:49:38 UTC (rev 172) +++ trunk/gee/war/index.jsp 2006-05-16 23:58:06 UTC (rev 173) @@ -60,7 +60,6 @@ <div id="scrollingTableWrapper"> <table> <tbody style="padding: 10px;"> -<tr> <@ww.iterator value="experiments" status="rowStatus" id="experiment"> <#if rowStatus.odd> <tr class="displayodd"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-04-25 18:49:44
|
Revision: 172 Author: alllee Date: 2006-04-25 11:49:38 -0700 (Tue, 25 Apr 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=172&view=rev Log Message: ----------- Generifying the WeakHashMap used for caching canonical Durations. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/time/Duration.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/time/Duration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/time/Duration.java 2006-04-23 03:38:39 UTC (rev 171) +++ trunk/gee/src/java/edu/indiana/psych/gee/time/Duration.java 2006-04-25 18:49:38 UTC (rev 172) @@ -142,12 +142,12 @@ */ private static class DurationPool { private final static DurationPool INSTANCE = new DurationPool(); - private final Map map; + private final Map<Long, Duration> map; private DurationPool() { this(23); } private DurationPool(int cacheSize) { - map = new WeakHashMap(cacheSize); + map = new WeakHashMap<Long, Duration>(cacheSize); } private static DurationPool getInstance() { return INSTANCE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-04-23 03:38:49
|
Revision: 171 Author: alllee Date: 2006-04-22 20:38:39 -0700 (Sat, 22 Apr 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=171&view=rev Log Message: ----------- better namage for reusing this webapplication structure down the road. Modified Paths: -------------- trunk/gee/war/WEB-INF/applicationContext.xml trunk/gee/war/WEB-INF/jdbc.properties.example Modified: trunk/gee/war/WEB-INF/applicationContext.xml =================================================================== --- trunk/gee/war/WEB-INF/applicationContext.xml 2006-04-13 00:46:54 UTC (rev 170) +++ trunk/gee/war/WEB-INF/applicationContext.xml 2006-04-23 03:38:39 UTC (rev 171) @@ -16,9 +16,9 @@ <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> - <property name="url" value="jdbc:mysql://localhost/${geedb.name}"/> - <property name="username" value="${geedb.user}"/> - <property name="password" value="${geedb.password}"/> + <property name="url" value="jdbc:mysql://localhost/${db.name}"/> + <property name="username" value="${db.user}"/> + <property name="password" value="${db.password}"/> </bean> <!-- hibernate beans, session factory and transaction manager --> Modified: trunk/gee/war/WEB-INF/jdbc.properties.example =================================================================== --- trunk/gee/war/WEB-INF/jdbc.properties.example 2006-04-13 00:46:54 UTC (rev 170) +++ trunk/gee/war/WEB-INF/jdbc.properties.example 2006-04-23 03:38:39 UTC (rev 171) @@ -1,7 +1,7 @@ # replace these with custom database user/pass # the database name -geedb.name=gee +db.name=gee # a username with privileges to admin experiments -geedb.user=dummy-user +db.user=dummy-user # admin's db password -geedb.password=dummy-password +db.password=dummy-password This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-04-13 00:47:00
|
Revision: 170 Author: alllee Date: 2006-04-12 17:46:54 -0700 (Wed, 12 Apr 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=170&view=rev Log Message: ----------- webwork 2.2.2 Modified Paths: -------------- trunk/gee/war/WEB-INF/lib/webwork.jar Modified: trunk/gee/war/WEB-INF/lib/webwork.jar =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-04-12 17:55:37
|
Revision: 169 Author: alllee Date: 2006-04-12 10:55:31 -0700 (Wed, 12 Apr 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=169&view=rev Log Message: ----------- using updated xwork DTD, reduces verbosity of XML description Modified Paths: -------------- trunk/gee/war/WEB-INF/classes/xwork.xml Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-23 06:43:54 UTC (rev 168) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-04-12 17:55:31 UTC (rev 169) @@ -2,7 +2,7 @@ <!-- vim:sts=2:sw=2: --> -<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.1.dtd"> +<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"> <xwork> <include file="webwork-default.xml"/> <package name="default" extends="webwork-default"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-23 06:44:06
|
Revision: 168 Author: alllee Date: 2006-03-22 22:43:54 -0800 (Wed, 22 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=168&view=rev Log Message: ----------- adding ExperimentConfiguration interface back into the mix now that I sort of understand how to use WW to automagically populate form parameters for instances of ExperimentConfiguration - use the Preparable interface for that. Still have some residual problems though... of course. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/action/GeeAction.java trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/war/WEB-INF/classes/gee-admin.xml trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/WEB-INF/hibernate.cfg.xml trunk/gee/war/WEB-INF/sitemesh.xml Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java Deleted: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-23 06:43:54 UTC (rev 168) @@ -1,188 +0,0 @@ -package edu.indiana.psych.gee; - -import java.net.InetSocketAddress; -import java.util.Iterator; -import java.util.List; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; - -import edu.indiana.psych.gee.time.Duration; - -/** - * $Id$ - * - * Provides hibernate object/relational annotations for fields common to most - * ExperimentConfigurations, things like consent forms, experiment names, and - * a Collection of ExperimentRoundParameters. - * - * - * @author Allen Lee - * @version $Revision$ - */ - -@Entity -@Inheritance(strategy=InheritanceType.JOINED) -@Table(name="experiment_configuration") -public class ExperimentConfiguration<T extends ExperimentRoundParameters> { - - // this should be a configurable property.. - private final static String DEFAULT_SERVER_HOST_NAME = "groups.psych.indiana.edu"; - - // persistent fields - private Long id = Long.valueOf(-1); - private String description; - private String experimentName; - private String clientJarName; - private String clientMainClass; - private int worldHeight; - private int worldWidth; - private ConsentForm consentForm; - private int serverPort; - private String serverName; - private boolean triggeredExperiment; - // generated transient fields, no need to persist. - private transient InetSocketAddress serverAddress; - private transient T currentParameters; - private transient Iterator<T> parametersIterator; - - public ExperimentConfiguration() { - this(DEFAULT_SERVER_HOST_NAME, -1); - } - - public ExperimentConfiguration(String serverName, int port) { - setServerName(serverName); - setServerPort(port); - } - - @Transient - public synchronized InetSocketAddress getServerAddress() { - // FIXME: return configuration address instead? - if (serverAddress == null) { - serverAddress = new InetSocketAddress(serverName, getServerPort()); - if (serverAddress.isUnresolved()) { - // default should be specified via config file. - serverAddress = new InetSocketAddress(DEFAULT_SERVER_HOST_NAME, getServerPort()); - } - } - return serverAddress; - } - - @Id @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public int getServerPort() { - return serverPort; - } - - public void setServerPort(int serverPort) { - this.serverPort = serverPort; - } - - public String getServerName() { - return serverName; - } - - public void setServerName(String serverName) { - this.serverName = serverName; - } - - public boolean isTriggeredExperiment() { - // TODO Auto-generated method stub - return triggeredExperiment; - } - - public void setTriggeredExperiment(boolean triggeredExperiment) { - this.triggeredExperiment = triggeredExperiment; - } - - @ManyToOne - public ConsentForm getConsentForm() { - return consentForm; - } - public void setConsentForm(ConsentForm consentForm) { - this.consentForm = consentForm; - } - - // advances the parameters iterator or resets it. - public void updateCurrentParameters() { - if (parametersIterator == null || ! parametersIterator.hasNext()) { - parametersIterator = getAllParameters().iterator(); - } - currentParameters = parametersIterator.next(); - } - - @Transient - public synchronized T getCurrentParameters() { - List<T> allParameters = getAllParameters(); - if (currentParameters == null) { - if (allParameters.isEmpty()) { - throw new ExperimentLifecycleException("No experiment round parameters available for : " + getExperimentName()); - } - currentParameters = allParameters.get(0); - } - return currentParameters; - } - - - @Transient - public List<T> getAllParameters() { - throw new UnsupportedOperationException("Subclasses must override getAllParameters."); - } - - @Transient - public void setAllParameters(List<T> allParameters) { - throw new UnsupportedOperationException("Subclasses must override setAllParameters."); - } - - public String getClientJarName() { - return clientJarName; - } - - public void setClientJarName(String clientJarName) { - this.clientJarName = clientJarName; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getExperimentName() { - return experimentName; - } - - public void setExperimentName(String experimentName) { - this.experimentName = experimentName; - } - - public String getClientMainClass() { - return clientMainClass; - } - - public void setClientMainClass(String clientMainClass) { - this.clientMainClass = clientMainClass; - } - - @Transient - public Duration getDelayBetweenRounds() { - return Duration.create(30); - } -} Added: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-23 06:43:54 UTC (rev 168) @@ -0,0 +1,47 @@ +package edu.indiana.psych.gee; + +import java.util.List; +import java.net.InetSocketAddress; + +import edu.indiana.psych.gee.time.Duration; + +/** + * $Id: Exp $ + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public interface ExperimentConfiguration<T extends ExperimentRoundParameters> { + + public List<T> getAllParameters(); + public void setAllParameters(List<T> allParameters); + public T getCurrentParameters(); + + public String getServerName(); + public void setServerName(String serverName); + + public String getExperimentName(); + public void setExperimentName(String experimentName); + + public int getServerPort(); + public void setServerPort(int serverPort); + + public ConsentForm getConsentForm(); + public void setConsentForm(ConsentForm consentForm); + + public Duration getDelayBetweenRounds(); + + public String getDescription(); + public void setDescription(String description); + + public boolean isTriggeredExperiment(); + public void setTriggeredExperiment(boolean triggered); + + public InetSocketAddress getServerAddress(); + +} +/* + * $Log: $ + */ + Copied: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java (from rev 166, trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java) =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-23 06:43:54 UTC (rev 168) @@ -0,0 +1,191 @@ +package edu.indiana.psych.gee; + +import java.net.InetSocketAddress; +import java.util.Iterator; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Transient; + +import edu.indiana.psych.gee.time.Duration; + +/** + * $Id$ + * + * Provides hibernate object/relational annotations for fields common to most + * ExperimentConfigurations, things like consent forms, experiment names, and + * a Collection of ExperimentRoundParameters. + * + * + * @author Allen Lee + * @version $Revision$ + */ + +@Entity +@Inheritance(strategy=InheritanceType.JOINED) +@Table(name="experiment_configuration") +public abstract class ExperimentConfigurationEntity<T extends ExperimentRoundParameters> +implements ExperimentConfiguration<T> { + + // this should be a configurable property.. + private final static String DEFAULT_SERVER_HOST_NAME = "groups.psych.indiana.edu"; + + // persistent fields + private Long id = Long.valueOf(-1); + private String description; + private String experimentName; + private String clientJarName; + private String clientMainClass; + private int worldHeight; + private int worldWidth; + private ConsentForm consentForm; + private int serverPort; + private String serverName; + private boolean triggeredExperiment; + // generated transient fields, no need to persist. + private transient InetSocketAddress serverAddress; + private transient T currentParameters; + private transient Iterator<T> parametersIterator; + + public ExperimentConfigurationEntity() { + this(DEFAULT_SERVER_HOST_NAME, -1); + } + + public ExperimentConfigurationEntity(String serverName, int port) { + setServerName(serverName); + setServerPort(port); + } + + @Transient + public synchronized InetSocketAddress getServerAddress() { + // FIXME: return configuration address instead? + if (serverAddress == null) { + serverAddress = new InetSocketAddress(serverName, getServerPort()); + if (serverAddress.isUnresolved()) { + // default should be specified via config file. + serverAddress = new InetSocketAddress(DEFAULT_SERVER_HOST_NAME, getServerPort()); + } + } + return serverAddress; + } + + @Id @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public int getServerPort() { + return serverPort; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } + + public String getServerName() { + return serverName; + } + + public void setServerName(String serverName) { + this.serverName = serverName; + } + + public boolean isTriggeredExperiment() { + // TODO Auto-generated method stub + return triggeredExperiment; + } + + public void setTriggeredExperiment(boolean triggeredExperiment) { + this.triggeredExperiment = triggeredExperiment; + } + + @ManyToOne + public ConsentForm getConsentForm() { + return consentForm; + } + public void setConsentForm(ConsentForm consentForm) { + this.consentForm = consentForm; + } + + // advances the parameters iterator or resets it. + public void updateCurrentParameters() { + if (parametersIterator == null || ! parametersIterator.hasNext()) { + parametersIterator = getAllParameters().iterator(); + } + currentParameters = parametersIterator.next(); + } + + @Transient + public synchronized T getCurrentParameters() { + List<T> allParameters = getAllParameters(); + if (currentParameters == null) { + if (allParameters.isEmpty()) { + throw new ExperimentLifecycleException("No experiment round parameters available for : " + getExperimentName()); + } + currentParameters = allParameters.get(0); + } + return currentParameters; + } + + + /* + @Transient + public List<T> getAllParameters() { + throw new UnsupportedOperationException("Subclasses must override getAllParameters."); + } + + @Transient + public void setAllParameters(List<T> allParameters) { + throw new UnsupportedOperationException("Subclasses must override setAllParameters."); + } + */ + + public String getClientJarName() { + return clientJarName; + } + + public void setClientJarName(String clientJarName) { + this.clientJarName = clientJarName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getExperimentName() { + return experimentName; + } + + public void setExperimentName(String experimentName) { + this.experimentName = experimentName; + } + + public String getClientMainClass() { + return clientMainClass; + } + + public void setClientMainClass(String clientMainClass) { + this.clientMainClass = clientMainClass; + } + + @Transient + public Duration getDelayBetweenRounds() { + return Duration.create(30); + } +} Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/GeeAction.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/GeeAction.java 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/GeeAction.java 2006-03-23 06:43:54 UTC (rev 168) @@ -6,6 +6,7 @@ import com.opensymphony.xwork.ActionSupport; import edu.indiana.psych.gee.service.ExperimentService; +import edu.indiana.psych.gee.service.ExperimentConfigurationService; /** * $Id$ @@ -22,16 +23,26 @@ private final Log logger = LogFactory.getLog(getClass()); private ExperimentService experimentService; + private ExperimentConfigurationService configurationService; protected Log getLogger() { return logger; } - + protected ExperimentService getExperimentService() { return experimentService; } + protected ExperimentConfigurationService getConfigurationService() { + return configurationService; + } + public void setExperimentService(ExperimentService experimentService) { this.experimentService = experimentService; } + + public void setConfigurationService(ExperimentConfigurationService configurationService) { + this.configurationService = configurationService; + } + } Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-23 06:43:54 UTC (rev 168) @@ -2,6 +2,8 @@ import java.util.List; +import com.opensymphony.xwork.Preparable; + import edu.indiana.psych.gee.Experiment; import edu.indiana.psych.gee.ExperimentRoundParameters; import edu.indiana.psych.gee.ExperimentConfiguration; @@ -10,11 +12,13 @@ /** * $Id: Exp $ * + * WW action handling changes made to experiment configurations. + * * @author <a href='al...@cs...'>Allen Lee</a> * @version $Revision: $ */ -public class UpdateExperimentConfiguration extends GeeAction { +public class UpdateExperimentConfiguration extends GeeAction implements Preparable { private String experimentName; @@ -22,26 +26,26 @@ public String execute() { getLogger().debug("XXX: updating experiment configuration: " + configuration); + getConfigurationService().persist(configuration); return SUCCESS; } + public void prepare() throws Exception { + this.configuration = getExperimentService().find(experimentName).getConfiguration(); + } + public ExperimentConfiguration getConfiguration() { return configuration; } - public List<? extends ExperimentRoundParameters> getAllParameters() { - getLogger().warn("XXX: Returning: " + configuration.getAllParameters()); - return configuration.getAllParameters(); - } - + /* public void setConfiguration(ExperimentConfiguration configuration) { this.configuration = configuration; } + */ public void setExperimentName(String experimentName) { getLogger().warn("XXX: setting experiment name: " + experimentName); this.experimentName = experimentName; - this.configuration = getExperimentService().find(experimentName).getConfiguration(); - } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-23 06:43:54 UTC (rev 168) @@ -10,7 +10,7 @@ import javax.persistence.Table; import javax.persistence.Transient; -import edu.indiana.psych.gee.ExperimentConfiguration; +import edu.indiana.psych.gee.ExperimentConfigurationEntity; /** * $Id$ @@ -24,7 +24,7 @@ @Entity @PrimaryKeyJoinColumn(name="experiment_configuration_id") @Table(name="forager_configuration") -public class ForagerConfiguration extends ExperimentConfiguration<ForagerExperimentParameters> { +public class ForagerConfiguration extends ExperimentConfigurationEntity<ForagerExperimentParameters> { private List<ForagerExperimentParameters> allParameters; Modified: trunk/gee/war/WEB-INF/classes/gee-admin.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-23 06:43:54 UTC (rev 168) @@ -30,6 +30,7 @@ <result name="success" type="freemarker">listExperiments.jsp</result> </action> <action name="updateExperimentConfiguration" class="edu.indiana.psych.gee.action.UpdateExperimentConfiguration"> + <interceptor-ref name="prepareStack"/> <result name="success" type="freemarker">configureExperiment.jsp</result> </action> </package> Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-23 06:43:54 UTC (rev 168) @@ -5,30 +5,35 @@ <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.1.dtd"> <xwork> <include file="webwork-default.xml"/> - <package name="default" extends="webwork-default"> <interceptors> - <interceptor-stack name="geeDefaultStack"> - <interceptor-ref name="exception"/> + <interceptor-stack name="prepareStack"> + <interceptor-ref name="params"/> + <interceptor-ref name="prepare"/> + <interceptor-ref name="exception"/> + <interceptor-ref name="servlet-config"/> + <interceptor-ref name="params"/> + </interceptor-stack> + <interceptor-stack name="geeDefaultStack"> + <interceptor-ref name="exception"/> <!-- <interceptor-ref name="alias"/> --> - <interceptor-ref name="servlet-config"/> - <interceptor-ref name="prepare"/> + <interceptor-ref name="servlet-config"/> + <interceptor-ref name="prepare"/> <!-- <interceptor-ref name="i18n"/> --> - <interceptor-ref name="chain"/> + <interceptor-ref name="chain"/> <!-- <interceptor-ref name="model-driven"/> --> <!-- <interceptor-ref name="fileUpload"/> --> - <interceptor-ref name="static-params"/> - <interceptor-ref name="params"/> - <interceptor-ref name="conversionError"/> - <interceptor-ref name="validation"> - <param name="excludeMethods">input,back,cancel</param> - </interceptor-ref> - <interceptor-ref name="workflow"> - <param name="excludeMethods">input,back,cancel</param> - </interceptor-ref> - </interceptor-stack> - </interceptors> - +<!-- <interceptor-ref name="static-params"/> --> + <interceptor-ref name="params"/> + <interceptor-ref name="conversionError"/> + <interceptor-ref name="validation"> + <param name="excludeMethods">input,back,cancel</param> + </interceptor-ref> + <interceptor-ref name="workflow"> + <param name="excludeMethods">input,back,cancel</param> + </interceptor-ref> + </interceptor-stack> + </interceptors> <default-interceptor-ref name="geeDefaultStack"/> <!-- the start page lists all available experiments --> <action name="index" class="edu.indiana.psych.gee.action.ListExperiments"> @@ -45,8 +50,6 @@ <result name="input">consent.jsp</result> </action> </package> - <include file="gee-ajax.xml"/> <include file="gee-admin.xml"/> - </xwork> Modified: trunk/gee/war/WEB-INF/hibernate.cfg.xml =================================================================== --- trunk/gee/war/WEB-INF/hibernate.cfg.xml 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/war/WEB-INF/hibernate.cfg.xml 2006-03-23 06:43:54 UTC (rev 168) @@ -9,7 +9,7 @@ <session-factory> <mapping package="edu.indiana.psych.gee"/> <mapping class="edu.indiana.psych.gee.ConsentForm"/> - <mapping class="edu.indiana.psych.gee.ExperimentConfiguration"/> + <mapping class="edu.indiana.psych.gee.ExperimentConfigurationEntity"/> <mapping package="edu.indiana.psych.gee.forager"/> <mapping class="edu.indiana.psych.gee.forager.ForagerAgentConfiguration"/> <mapping class="edu.indiana.psych.gee.forager.ForagerConfiguration"/> Modified: trunk/gee/war/WEB-INF/sitemesh.xml =================================================================== --- trunk/gee/war/WEB-INF/sitemesh.xml 2006-03-23 05:38:49 UTC (rev 167) +++ trunk/gee/war/WEB-INF/sitemesh.xml 2006-03-23 06:43:54 UTC (rev 168) @@ -3,21 +3,15 @@ vim:sts=2:sw=2: --> <sitemesh> - <property name="decorators.file" value="/WEB-INF/decorators.xml" /> - <excludes file="${decorators.file}" /> - - <page-parsers> - <parser content-type="text/html" - class="com.opensymphony.module.sitemesh.parser.FastPageParser" /> - <parser content-type="text/html;charset=ISO-8859-1" - class="com.opensymphony.module.sitemesh.parser.FastPageParser" /> - </page-parsers> - - <decorator-mappers> - <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"> - <param name="config" value="${decorators.file}" /> - </mapper> - </decorator-mappers> + <property name="decorators.file" value="/WEB-INF/decorators.xml"/> + <excludes file="${decorators.file}"/> + <page-parsers> + <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/> + <parser content-type="text/html;charset=ISO-8859-1" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/> + </page-parsers> + <decorator-mappers> + <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"> + <param name="config" value="${decorators.file}"/> + </mapper> + </decorator-mappers> </sitemesh> - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-23 05:38:58
|
Revision: 167 Author: alllee Date: 2006-03-22 21:38:49 -0800 (Wed, 22 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=167&view=rev Log Message: ----------- disabled lazy initialization for the time being on ForagerConfiguration's getAllParameters method. Going to try to replace ExperimentConfiguration bean with ExperimentConfiguration interface here in a little bit now that I think I know what I'm doing... Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/war/admin/configureExperiment.jsp Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentParametersEntity.java Deleted: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentParametersEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentParametersEntity.java 2006-03-13 06:44:37 UTC (rev 166) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentParametersEntity.java 2006-03-23 05:38:49 UTC (rev 167) @@ -1,26 +0,0 @@ -package edu.indiana.psych.gee; - -import javax.persistence.Entity; -import javax.persistence.Table; - -/** - * $Id: Exp$ - * - * - * - * @author <a href='al...@cs...'>Allen Lee</a> - * @version $Revision: $ - */ - -@Entity -@Table(name="experiment_parameters") -public abstract class ExperimentParametersEntity<T extends ExperimentConfiguration> -implements ExperimentRoundParameters { - - private long id = -1; - - - - - -} Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-13 06:44:37 UTC (rev 166) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-23 05:38:49 UTC (rev 167) @@ -1,9 +1,11 @@ package edu.indiana.psych.gee.action; +import java.util.List; import java.util.Set; import edu.indiana.psych.gee.Experiment; import edu.indiana.psych.gee.ExperimentConfiguration; +import edu.indiana.psych.gee.ExperimentRoundParameters; /** * $Id$ @@ -32,6 +34,9 @@ } public String configure() { + for (ExperimentRoundParameters parameter: getAllParameters()) { + getLogger().warn("XXX: Returning: " + parameter); + } // load experiment and various pieces of configuration information? return SUCCESS; } @@ -67,6 +72,10 @@ return getExperiment().getConfiguration(); } + public List<? extends ExperimentRoundParameters> getAllParameters() { + return getConfiguration().getAllParameters(); + } + public Set<Experiment> getExperiments() { if (experiments == null || experiments.isEmpty()) { experiments = getExperimentService().getAllExperiments(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-13 06:44:37 UTC (rev 166) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-23 05:38:49 UTC (rev 167) @@ -1,6 +1,9 @@ package edu.indiana.psych.gee.action; +import java.util.List; + import edu.indiana.psych.gee.Experiment; +import edu.indiana.psych.gee.ExperimentRoundParameters; import edu.indiana.psych.gee.ExperimentConfiguration; import edu.indiana.psych.gee.service.ExperimentService; @@ -26,11 +29,17 @@ return configuration; } + public List<? extends ExperimentRoundParameters> getAllParameters() { + getLogger().warn("XXX: Returning: " + configuration.getAllParameters()); + return configuration.getAllParameters(); + } + public void setConfiguration(ExperimentConfiguration configuration) { this.configuration = configuration; } public void setExperimentName(String experimentName) { + getLogger().warn("XXX: setting experiment name: " + experimentName); this.experimentName = experimentName; this.configuration = getExperimentService().find(experimentName).getConfiguration(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-13 06:44:37 UTC (rev 166) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-23 05:38:49 UTC (rev 167) @@ -3,6 +3,7 @@ import java.util.List; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.PrimaryKeyJoinColumn; @@ -35,7 +36,7 @@ super(serverName, port); } - @OneToMany + @OneToMany(fetch=FetchType.EAGER) @JoinColumn(name="configuration_id") public List<ForagerExperimentParameters> getAllParameters() { return allParameters; Modified: trunk/gee/war/admin/configureExperiment.jsp =================================================================== --- trunk/gee/war/admin/configureExperiment.jsp 2006-03-13 06:44:37 UTC (rev 166) +++ trunk/gee/war/admin/configureExperiment.jsp 2006-03-23 05:38:49 UTC (rev 167) @@ -7,6 +7,7 @@ Configuring the <span class="highlight">${configuration.experimentName}</span> experiment: </p> <@ww.form action="updateExperimentConfiguration"> + <@ww.hidden name="experimentName" value="${configuration.experimentName}"/> <@ww.textfield size=40 label="Server port" name="configuration.serverPort"/> <@ww.textfield size=40 label="Experiment name" name="configuration.experimentName"/> <@ww.textfield size=40 label="Server name" name="configuration.serverName"/> @@ -14,9 +15,9 @@ <@ww.checkbox label="Triggered?" name="configuration.triggeredExperiment"/> <@ww.submit value="Modify"/> </@ww.form> -<#if configuration.allParameters?has_content> +<#if allParameters?has_content> <ul> - <#list configuration.allParameters as experimentParameters> + <#list allParameters as experimentParameters> <li>Board size: ${experimentParameters.boardSize}</li> <li>Special instructions: ${experimentParameters.specialInstructions}</li> </#list> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-13 06:44:48
|
Revision: 166 Author: alllee Date: 2006-03-12 22:44:37 -0800 (Sun, 12 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=166&view=rev Log Message: ----------- Trying to debug a nasty lazy initialization error when loading allParameters for a given ExperimentConfiguration. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java trunk/gee/war/WEB-INF/applicationContext.xml trunk/gee/war/WEB-INF/classes/gee-admin.xml trunk/gee/war/WEB-INF/classes/gee-ajax.xml trunk/gee/war/WEB-INF/classes/log4j.properties trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/WEB-INF/hibernate.cfg.xml trunk/gee/war/WEB-INF/web.xml trunk/gee/war/admin/configureExperiment.jsp Modified: trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-13 06:44:37 UTC (rev 166) @@ -23,7 +23,7 @@ * @author <a href='al...@cs...'>Allen Lee</a> * @version $Revision$ */ -public abstract class AbstractExperiment<C extends ExperimentConfigurationEntity> implements Experiment<C> { +public abstract class AbstractExperiment<C extends ExperimentConfiguration> implements Experiment<C> { private final Log logger = LogFactory.getLog(getClass()); private final EventChannel channel; Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-13 06:44:37 UTC (rev 166) @@ -11,6 +11,7 @@ import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; @@ -21,9 +22,7 @@ * * Provides hibernate object/relational annotations for fields common to most * ExperimentConfigurations, things like consent forms, experiment names, and - * a Collection of ExperimentRoundParameters. If you don't want to store your - * configuration information in a database, subclass - * ExperimentConfigurationFile instead (which isn't written yet ;-). + * a Collection of ExperimentRoundParameters. * * * @author Allen Lee @@ -38,7 +37,6 @@ // this should be a configurable property.. private final static String DEFAULT_SERVER_HOST_NAME = "groups.psych.indiana.edu"; - private List<ForagerExperimentParameters> allParameters; // persistent fields private Long id = Long.valueOf(-1); private String description; @@ -56,11 +54,11 @@ private transient T currentParameters; private transient Iterator<T> parametersIterator; - public ExperimentConfigurationEntity() { + public ExperimentConfiguration() { this(DEFAULT_SERVER_HOST_NAME, -1); } - public ExperimentConfigurationEntity(String serverName, int port) { + public ExperimentConfiguration(String serverName, int port) { setServerName(serverName); setServerPort(port); } @@ -140,25 +138,16 @@ return currentParameters; } - @OneToMany(mappedBy="configuration") - @JoinColumn(name="configuration_id") - public List<ForagerExperimentParameters> getAllParameters() { - return allParameters; - } - public void setAllParameters(List<ForagerExperimentParameters> allParameters) { - this.allParameters = allParameters; - } - - /* + @Transient public List<T> getAllParameters() { throw new UnsupportedOperationException("Subclasses must override getAllParameters."); } + @Transient public void setAllParameters(List<T> allParameters) { throw new UnsupportedOperationException("Subclasses must override setAllParameters."); } - */ public String getClientJarName() { return clientJarName; Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-13 06:44:37 UTC (rev 166) @@ -26,6 +26,10 @@ return configuration; } + public void setConfiguration(ExperimentConfiguration configuration) { + this.configuration = configuration; + } + public void setExperimentName(String experimentName) { this.experimentName = experimentName; this.configuration = getExperimentService().find(experimentName).getConfiguration(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-13 06:44:37 UTC (rev 166) @@ -9,10 +9,7 @@ import javax.persistence.Table; import javax.persistence.Transient; -import org.hibernate.annotations.Proxy; - import edu.indiana.psych.gee.ExperimentConfiguration; -import edu.indiana.psych.gee.ExperimentConfigurationEntity; /** * $Id$ @@ -26,15 +23,26 @@ @Entity @PrimaryKeyJoinColumn(name="experiment_configuration_id") @Table(name="forager_configuration") -@Proxy(proxyClass=ExperimentConfiguration.class) -public class ForagerConfiguration extends ExperimentConfigurationEntity<ForagerExperimentParameters> { +public class ForagerConfiguration extends ExperimentConfiguration<ForagerExperimentParameters> { + private List<ForagerExperimentParameters> allParameters; + public ForagerConfiguration() { } public ForagerConfiguration(String serverName, int port) { super(serverName, port); } + + @OneToMany + @JoinColumn(name="configuration_id") + public List<ForagerExperimentParameters> getAllParameters() { + return allParameters; + } + + public void setAllParameters(List<ForagerExperimentParameters> allParameters) { + this.allParameters = allParameters; + } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java 2006-03-13 06:44:37 UTC (rev 166) @@ -9,6 +9,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-13 06:44:37 UTC (rev 166) @@ -7,8 +7,10 @@ import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.HibernateCallback; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import edu.indiana.psych.gee.ExperimentConfiguration; -import edu.indiana.psych.gee.ExperimentConfigurationEntity; /** * $Id: Exp $ @@ -22,14 +24,17 @@ public class ExperimentConfigurationDao extends HibernateDaoSupport { - public <E extends ExperimentConfigurationEntity> E find(Class<E> configurationClass, Integer id) { + private final Log logger = LogFactory.getLog(getClass()); + + public <E extends ExperimentConfiguration> E find(Class<E> configurationClass, Integer id) { return configurationClass.cast(getHibernateTemplate().get(configurationClass, id)); } - public <E extends ExperimentConfigurationEntity> E find(final Class<E> configurationClass, final String experimentName) { + public <E extends ExperimentConfiguration> E find(final Class<E> configurationClass, final String experimentName) { return configurationClass.cast( getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { + logger.warn("doInHibernate session is: " + session.hashCode()); Criteria criteria = session.createCriteria(configurationClass); criteria.add(Restrictions.eq("experimentName", experimentName)); return criteria.uniqueResult(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-13 06:44:37 UTC (rev 166) @@ -3,7 +3,6 @@ import java.io.InputStream; import edu.indiana.psych.gee.ExperimentConfiguration; -import edu.indiana.psych.gee.ExperimentConfigurationEntity; /** * $Id: Exp $ @@ -26,7 +25,7 @@ return null; } - public <E extends ExperimentConfigurationEntity> E find(Class<E> configurationClass, Integer id) { + public <E extends ExperimentConfiguration> E find(Class<E> configurationClass, Integer id) { return experimentConfigurationDao.find(configurationClass, id); } @@ -36,12 +35,12 @@ * enough type constraint (you get Class<? extends Object> which upsets * the type inferencer). This in turn ruins our ability to safely cast * back to the original type after it gets munged by Hibernate. Argh. - public <E extends ExperimentConfigurationEntity> E find(E defaultConfiguration) { + public <E extends ExperimentConfiguration> E find(E defaultConfiguration) { return find(defaultConfiguration.getClass(), defaultConfiguration.getExperimentName()); } */ - public <E extends ExperimentConfigurationEntity> E find(Class<E> configurationClass, String experimentName) { + public <E extends ExperimentConfiguration> E find(Class<E> configurationClass, String experimentName) { return experimentConfigurationDao.find(configurationClass, experimentName); } Modified: trunk/gee/war/WEB-INF/applicationContext.xml =================================================================== --- trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-13 06:44:37 UTC (rev 166) @@ -22,7 +22,7 @@ </bean> <!-- hibernate beans, session factory and transaction manager --> - <bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> + <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml"/> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/> <property name="hibernateProperties"> @@ -34,17 +34,15 @@ </property> <property name="dataSource" ref="mysqlDataSource"/> </bean> - <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> - <property name="sessionFactory"> - <ref local="hibernateSessionFactory"/> - </property> + <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> + <property name="sessionFactory" ref="sessionFactory"/> </bean> - <!-- persistence layer beans --> + <!-- persistence layer daos--> <bean id="experimentConfigurationDao" class="edu.indiana.psych.gee.service.ExperimentConfigurationDao"> - <property name="sessionFactory" ref="hibernateSessionFactory"/> + <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="consentFormDao" class="edu.indiana.psych.gee.service.ConsentFormDao"> - <property name="sessionFactory" ref="hibernateSessionFactory"/> + <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- application layer beans --> <bean id="experimentService" class="edu.indiana.psych.gee.service.ExperimentService"/> @@ -67,6 +65,7 @@ <property name="description" value="The in-house Forager experiment explores how individuals allocate themselves in a world with scarce resources under a facilitator's guidance in controlled settings."/> <property name='clientJarName' value='forager-client.jar'/> <property name='clientMainClass' value='edu.indiana.psych.gee.forager.client.ForagerApplet'/> + <property name='triggeredExperiment' value='true'/> </bean> <bean id="forager-web" class="edu.indiana.psych.gee.forager.ForagerExperiment"> <constructor-arg ref="defaultForagerWebConfiguration"/> Modified: trunk/gee/war/WEB-INF/classes/gee-admin.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-13 06:44:37 UTC (rev 166) @@ -4,11 +4,10 @@ --> <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"> <xwork> - <include file="webwork-default.xml"/> <!-- admin package o' actions and urls. define the login filter here? --> - <package name="admin" extends="webwork-default" namespace="/admin"> + <package name="admin" extends="default" namespace="/admin"> <action name="index" class="edu.indiana.psych.gee.action.AdminAction" method="authenticate"> <result name="success" type="freemarker">listExperiments.jsp</result> <result name="error">error.jsp</result> @@ -31,7 +30,7 @@ <result name="success" type="freemarker">listExperiments.jsp</result> </action> <action name="updateExperimentConfiguration" class="edu.indiana.psych.gee.action.UpdateExperimentConfiguration"> - <result name="success" type="freemarker">listExperiments.jsp</result> + <result name="success" type="freemarker">configureExperiment.jsp</result> </action> </package> </xwork> Modified: trunk/gee/war/WEB-INF/classes/gee-ajax.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-ajax.xml 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/classes/gee-ajax.xml 2006-03-13 06:44:37 UTC (rev 166) @@ -5,14 +5,14 @@ <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"> <xwork> - <include file="webwork-default.xml"/> <!-- ajax package, created to avoid SiteMesh templation as its results get interpolated directly into a div somewhere and we don't want that interpolation to come attached with a header/footer/etc. --> - <package name="ajax" extends="webwork-default" namespace="/ajax"> - <action name="status" class="edu.indiana.psych.gee.action.AdminAction" method="status"> + <package name="ajax" extends="default" namespace="/ajax"> + <default-interceptor-ref name="basicStack"/> + <action name="status"> <result name="success" type="freemarker">status.ajax</result> </action> </package> Modified: trunk/gee/war/WEB-INF/classes/log4j.properties =================================================================== --- trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-13 06:44:37 UTC (rev 166) @@ -5,7 +5,7 @@ log4j.logger.com.opensymphony.webwork=DEBUG # Spring Stuff -log4j.logger.org.springframework=INFO +log4j.logger.org.springframework=DEBUG # turn off introspection crap from freemarker beans log4j.logger.freemarker.beans=WARN Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-13 06:44:37 UTC (rev 166) @@ -5,11 +5,31 @@ <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.1.dtd"> <xwork> <include file="webwork-default.xml"/> - <include file="gee-ajax.xml"/> - <include file="gee-admin.xml"/> <package name="default" extends="webwork-default"> - <default-interceptor-ref name="defaultStack"/> + <interceptors> + <interceptor-stack name="geeDefaultStack"> + <interceptor-ref name="exception"/> +<!-- <interceptor-ref name="alias"/> --> + <interceptor-ref name="servlet-config"/> + <interceptor-ref name="prepare"/> +<!-- <interceptor-ref name="i18n"/> --> + <interceptor-ref name="chain"/> +<!-- <interceptor-ref name="model-driven"/> --> +<!-- <interceptor-ref name="fileUpload"/> --> + <interceptor-ref name="static-params"/> + <interceptor-ref name="params"/> + <interceptor-ref name="conversionError"/> + <interceptor-ref name="validation"> + <param name="excludeMethods">input,back,cancel</param> + </interceptor-ref> + <interceptor-ref name="workflow"> + <param name="excludeMethods">input,back,cancel</param> + </interceptor-ref> + </interceptor-stack> + </interceptors> + + <default-interceptor-ref name="geeDefaultStack"/> <!-- the start page lists all available experiments --> <action name="index" class="edu.indiana.psych.gee.action.ListExperiments"> <result name="success" type="freemarker">index.jsp</result> @@ -21,10 +41,12 @@ <action name="consent" class="edu.indiana.psych.gee.action.StartExperiment" method="prepare"> <!-- FIXME: do not use a validating stack here --> <interceptor-ref name="basicStack"/> - <result name="success">getConsent.jsp</result> - <result name="input">getConsent.jsp</result> + <result name="success">consent.jsp</result> + <result name="input">consent.jsp</result> </action> </package> + <include file="gee-ajax.xml"/> + <include file="gee-admin.xml"/> </xwork> Modified: trunk/gee/war/WEB-INF/hibernate.cfg.xml =================================================================== --- trunk/gee/war/WEB-INF/hibernate.cfg.xml 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/hibernate.cfg.xml 2006-03-13 06:44:37 UTC (rev 166) @@ -9,7 +9,7 @@ <session-factory> <mapping package="edu.indiana.psych.gee"/> <mapping class="edu.indiana.psych.gee.ConsentForm"/> - <mapping class="edu.indiana.psych.gee.ExperimentConfigurationEntity"/> + <mapping class="edu.indiana.psych.gee.ExperimentConfiguration"/> <mapping package="edu.indiana.psych.gee.forager"/> <mapping class="edu.indiana.psych.gee.forager.ForagerAgentConfiguration"/> <mapping class="edu.indiana.psych.gee.forager.ForagerConfiguration"/> Modified: trunk/gee/war/WEB-INF/web.xml =================================================================== --- trunk/gee/war/WEB-INF/web.xml 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/WEB-INF/web.xml 2006-03-13 06:44:37 UTC (rev 166) @@ -21,20 +21,21 @@ <filter-name>webwork-cleanup</filter-name> <filter-class>com.opensymphony.webwork.dispatcher.ActionContextCleanUp</filter-class> </filter> -<!-- - <filter> - <filter-name>sitemesh</filter-name> - <filter-class>com.opensymphony.webwork.sitemesh.FreeMarkerPageFilter</filter-class> - </filter> - --> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> + <!--<filter-class>com.opensymphony.webwork.sitemesh.FreeMarkerPageFilter</filter-class>--> </filter> <filter> + <filter-name>hibernateFilter</filter-name> + <filter-class>edu.indiana.psych.gee.filter.FlushingOpenSessionInViewFilter</filter-class> +<!-- <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> --> + </filter> + <filter> <filter-name>webwork</filter-name> <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class> </filter> + <filter-mapping> <filter-name>webwork-cleanup</filter-name> <url-pattern>/*</url-pattern> @@ -44,9 +45,14 @@ <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> + <filter-name>hibernateFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <filter-mapping> <filter-name>webwork</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> + <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> Modified: trunk/gee/war/admin/configureExperiment.jsp =================================================================== --- trunk/gee/war/admin/configureExperiment.jsp 2006-03-11 23:08:12 UTC (rev 165) +++ trunk/gee/war/admin/configureExperiment.jsp 2006-03-13 06:44:37 UTC (rev 166) @@ -1,6 +1,6 @@ <head> <meta name="lastModifiedDate" content="$Date: 2006-02-23 13:12:23 -0500 (Thu, 23 Feb 2006) $"/> -<title>Configuring [ ${experiment.name} ]</title> +<title>Configuring [ ${configuration.experimentName} ]</title> </head> <body> <p> @@ -11,10 +11,10 @@ <@ww.textfield size=40 label="Experiment name" name="configuration.experimentName"/> <@ww.textfield size=40 label="Server name" name="configuration.serverName"/> <@ww.textarea cols=37 rows=6 label="Description" name="configuration.description"/> - <@ww.checkbox label="Triggered?" name="configuration.triggered"/> + <@ww.checkbox label="Triggered?" name="configuration.triggeredExperiment"/> <@ww.submit value="Modify"/> </@ww.form> -<#if configuration.allParameters?exists> +<#if configuration.allParameters?has_content> <ul> <#list configuration.allParameters as experimentParameters> <li>Board size: ${experimentParameters.boardSize}</li> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-11 23:08:15
|
Revision: 165 Author: alllee Date: 2006-03-11 15:08:12 -0800 (Sat, 11 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=165&view=rev Log Message: ----------- replacing ExperimentConfiguration interface with a bean class (used to be ExperimentConfigurationEntity) to ease integration with WW. Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java Copied: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java (from rev 164, trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java) =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-11 23:08:12 UTC (rev 165) @@ -0,0 +1,199 @@ +package edu.indiana.psych.gee; + +import java.net.InetSocketAddress; +import java.util.Iterator; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Transient; + +import edu.indiana.psych.gee.time.Duration; + +/** + * $Id$ + * + * Provides hibernate object/relational annotations for fields common to most + * ExperimentConfigurations, things like consent forms, experiment names, and + * a Collection of ExperimentRoundParameters. If you don't want to store your + * configuration information in a database, subclass + * ExperimentConfigurationFile instead (which isn't written yet ;-). + * + * + * @author Allen Lee + * @version $Revision$ + */ + +@Entity +@Inheritance(strategy=InheritanceType.JOINED) +@Table(name="experiment_configuration") +public class ExperimentConfiguration<T extends ExperimentRoundParameters> { + + // this should be a configurable property.. + private final static String DEFAULT_SERVER_HOST_NAME = "groups.psych.indiana.edu"; + + private List<ForagerExperimentParameters> allParameters; + // persistent fields + private Long id = Long.valueOf(-1); + private String description; + private String experimentName; + private String clientJarName; + private String clientMainClass; + private int worldHeight; + private int worldWidth; + private ConsentForm consentForm; + private int serverPort; + private String serverName; + private boolean triggeredExperiment; + // generated transient fields, no need to persist. + private transient InetSocketAddress serverAddress; + private transient T currentParameters; + private transient Iterator<T> parametersIterator; + + public ExperimentConfigurationEntity() { + this(DEFAULT_SERVER_HOST_NAME, -1); + } + + public ExperimentConfigurationEntity(String serverName, int port) { + setServerName(serverName); + setServerPort(port); + } + + @Transient + public synchronized InetSocketAddress getServerAddress() { + // FIXME: return configuration address instead? + if (serverAddress == null) { + serverAddress = new InetSocketAddress(serverName, getServerPort()); + if (serverAddress.isUnresolved()) { + // default should be specified via config file. + serverAddress = new InetSocketAddress(DEFAULT_SERVER_HOST_NAME, getServerPort()); + } + } + return serverAddress; + } + + @Id @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public int getServerPort() { + return serverPort; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } + + public String getServerName() { + return serverName; + } + + public void setServerName(String serverName) { + this.serverName = serverName; + } + + public boolean isTriggeredExperiment() { + // TODO Auto-generated method stub + return triggeredExperiment; + } + + public void setTriggeredExperiment(boolean triggeredExperiment) { + this.triggeredExperiment = triggeredExperiment; + } + + @ManyToOne + public ConsentForm getConsentForm() { + return consentForm; + } + public void setConsentForm(ConsentForm consentForm) { + this.consentForm = consentForm; + } + + // advances the parameters iterator or resets it. + public void updateCurrentParameters() { + if (parametersIterator == null || ! parametersIterator.hasNext()) { + parametersIterator = getAllParameters().iterator(); + } + currentParameters = parametersIterator.next(); + } + + @Transient + public synchronized T getCurrentParameters() { + List<T> allParameters = getAllParameters(); + if (currentParameters == null) { + if (allParameters.isEmpty()) { + throw new ExperimentLifecycleException("No experiment round parameters available for : " + getExperimentName()); + } + currentParameters = allParameters.get(0); + } + return currentParameters; + } + + @OneToMany(mappedBy="configuration") + @JoinColumn(name="configuration_id") + public List<ForagerExperimentParameters> getAllParameters() { + return allParameters; + } + + public void setAllParameters(List<ForagerExperimentParameters> allParameters) { + this.allParameters = allParameters; + } + + /* + public List<T> getAllParameters() { + throw new UnsupportedOperationException("Subclasses must override getAllParameters."); + } + + public void setAllParameters(List<T> allParameters) { + throw new UnsupportedOperationException("Subclasses must override setAllParameters."); + } + */ + + public String getClientJarName() { + return clientJarName; + } + + public void setClientJarName(String clientJarName) { + this.clientJarName = clientJarName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getExperimentName() { + return experimentName; + } + + public void setExperimentName(String experimentName) { + this.experimentName = experimentName; + } + + public String getClientMainClass() { + return clientMainClass; + } + + public void setClientMainClass(String clientMainClass) { + this.clientMainClass = clientMainClass; + } + + @Transient + public Duration getDelayBetweenRounds() { + return Duration.create(30); + } +} Deleted: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-11 23:07:17 UTC (rev 164) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-11 23:08:12 UTC (rev 165) @@ -1,199 +0,0 @@ -package edu.indiana.psych.gee; - -import java.net.InetSocketAddress; -import java.util.Iterator; -import java.util.List; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Transient; - -import edu.indiana.psych.gee.time.Duration; - -/** - * $Id$ - * - * Provides hibernate object/relational annotations for fields common to most - * ExperimentConfigurations, things like consent forms, experiment names, and - * a Collection of ExperimentRoundParameters. If you don't want to store your - * configuration information in a database, subclass - * ExperimentConfigurationFile instead (which isn't written yet ;-). - * - * - * @author Allen Lee - * @version $Revision$ - */ - -@Entity -@Inheritance(strategy=InheritanceType.JOINED) -@Table(name="experiment_configuration") -public class ExperimentConfiguration<T extends ExperimentRoundParameters> { - - // this should be a configurable property.. - private final static String DEFAULT_SERVER_HOST_NAME = "groups.psych.indiana.edu"; - - private List<ForagerExperimentParameters> allParameters; - // persistent fields - private Long id = Long.valueOf(-1); - private String description; - private String experimentName; - private String clientJarName; - private String clientMainClass; - private int worldHeight; - private int worldWidth; - private ConsentForm consentForm; - private int serverPort; - private String serverName; - private boolean triggeredExperiment; - // generated transient fields, no need to persist. - private transient InetSocketAddress serverAddress; - private transient T currentParameters; - private transient Iterator<T> parametersIterator; - - public ExperimentConfigurationEntity() { - this(DEFAULT_SERVER_HOST_NAME, -1); - } - - public ExperimentConfigurationEntity(String serverName, int port) { - setServerName(serverName); - setServerPort(port); - } - - @Transient - public synchronized InetSocketAddress getServerAddress() { - // FIXME: return configuration address instead? - if (serverAddress == null) { - serverAddress = new InetSocketAddress(serverName, getServerPort()); - if (serverAddress.isUnresolved()) { - // default should be specified via config file. - serverAddress = new InetSocketAddress(DEFAULT_SERVER_HOST_NAME, getServerPort()); - } - } - return serverAddress; - } - - @Id @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public int getServerPort() { - return serverPort; - } - - public void setServerPort(int serverPort) { - this.serverPort = serverPort; - } - - public String getServerName() { - return serverName; - } - - public void setServerName(String serverName) { - this.serverName = serverName; - } - - public boolean isTriggeredExperiment() { - // TODO Auto-generated method stub - return triggeredExperiment; - } - - public void setTriggeredExperiment(boolean triggeredExperiment) { - this.triggeredExperiment = triggeredExperiment; - } - - @ManyToOne - public ConsentForm getConsentForm() { - return consentForm; - } - public void setConsentForm(ConsentForm consentForm) { - this.consentForm = consentForm; - } - - // advances the parameters iterator or resets it. - public void updateCurrentParameters() { - if (parametersIterator == null || ! parametersIterator.hasNext()) { - parametersIterator = getAllParameters().iterator(); - } - currentParameters = parametersIterator.next(); - } - - @Transient - public synchronized T getCurrentParameters() { - List<T> allParameters = getAllParameters(); - if (currentParameters == null) { - if (allParameters.isEmpty()) { - throw new ExperimentLifecycleException("No experiment round parameters available for : " + getExperimentName()); - } - currentParameters = allParameters.get(0); - } - return currentParameters; - } - - @OneToMany(mappedBy="configuration") - @JoinColumn(name="configuration_id") - public List<ForagerExperimentParameters> getAllParameters() { - return allParameters; - } - - public void setAllParameters(List<ForagerExperimentParameters> allParameters) { - this.allParameters = allParameters; - } - - /* - public List<T> getAllParameters() { - throw new UnsupportedOperationException("Subclasses must override getAllParameters."); - } - - public void setAllParameters(List<T> allParameters) { - throw new UnsupportedOperationException("Subclasses must override setAllParameters."); - } - */ - - public String getClientJarName() { - return clientJarName; - } - - public void setClientJarName(String clientJarName) { - this.clientJarName = clientJarName; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getExperimentName() { - return experimentName; - } - - public void setExperimentName(String experimentName) { - this.experimentName = experimentName; - } - - public String getClientMainClass() { - return clientMainClass; - } - - public void setClientMainClass(String clientMainClass) { - this.clientMainClass = clientMainClass; - } - - @Transient - public Duration getDelayBetweenRounds() { - return Duration.create(30); - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-11 23:07:25
|
Revision: 164 Author: alllee Date: 2006-03-11 15:07:17 -0800 (Sat, 11 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=164&view=rev Log Message: ----------- about to replace ExperimentConfiguration with ExperimentConfigurationEntity since we're having trouble getting WW to write to ExperimentConfiguration as an interface. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java trunk/gee/src/java/edu/indiana/psych/gee/ExperimentRoundParameters.java trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-11 23:07:17 UTC (rev 164) @@ -47,6 +47,7 @@ C persistedConfiguration = configurationService.find(configurationClass, defaultConfiguration.getExperimentName()); if (persistedConfiguration == null) { setConfiguration(defaultConfiguration); + configurationService.persist(defaultConfiguration); } else { setConfiguration(persistedConfiguration); Deleted: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-11 23:07:17 UTC (rev 164) @@ -1,60 +0,0 @@ -package edu.indiana.psych.gee; - -import java.net.InetSocketAddress; -import java.util.List; - -import edu.indiana.psych.gee.time.Duration; - -/** - * $Id$ - * - * Global configuration parameters for a given Experiment server instance. - * - * @author <a href='al...@cs...'>Allen Lee</a> - * @version $Revision$ - */ - -public interface ExperimentConfiguration<P extends ExperimentRoundParameters> { - - - /** - * Returns the port that the experiment server with this configuration is - * listening. A convenience method for getServerAddress().getPort(); - * - * @return - */ - public int getServerPort(); - public void setServerPort(int serverPort); - - /** - * Returns the fully qualified InetSocketAddress (hostname and port) on - * the server with this configuration is running. - * @return - */ - public InetSocketAddress getServerAddress(); - - public boolean isTriggeredExperiment(); - public void setTriggeredExperiment(boolean triggeredExperiment); - - public List<P> getAllParameters(); - - public P getCurrentParameters(); - - public String getDescription(); - public void setDescription(String description); - - public String getExperimentName(); - public void setExperimentName(String experimentName); - - public String getClientJarName(); - public void setClientJarName(String clientJarName); - - public String getClientMainClass(); - public void setClientMainClass(String clientMainClass); - - public ConsentForm getConsentForm(); - public void setConsentForm(ConsentForm consentForm); - - public Duration getDelayBetweenRounds(); - -} Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-11 23:07:17 UTC (rev 164) @@ -14,7 +14,7 @@ import javax.persistence.Table; import javax.persistence.Transient; -import org.hibernate.annotations.Proxy; +import edu.indiana.psych.gee.time.Duration; /** * $Id$ @@ -33,12 +33,12 @@ @Entity @Inheritance(strategy=InheritanceType.JOINED) @Table(name="experiment_configuration") -@Proxy(proxyClass=ExperimentConfiguration.class) -public abstract class ExperimentConfigurationEntity<T extends ExperimentRoundParameters> -implements ExperimentConfiguration<T> { - - private final static String DEFAULT_SERVER_ADDRESS = "groups.psych.indiana.edu"; - +public class ExperimentConfiguration<T extends ExperimentRoundParameters> { + + // this should be a configurable property.. + private final static String DEFAULT_SERVER_HOST_NAME = "groups.psych.indiana.edu"; + + private List<ForagerExperimentParameters> allParameters; // persistent fields private Long id = Long.valueOf(-1); private String description; @@ -55,6 +55,10 @@ private transient InetSocketAddress serverAddress; private transient T currentParameters; private transient Iterator<T> parametersIterator; + + public ExperimentConfigurationEntity() { + this(DEFAULT_SERVER_HOST_NAME, -1); + } public ExperimentConfigurationEntity(String serverName, int port) { setServerName(serverName); @@ -68,17 +72,12 @@ serverAddress = new InetSocketAddress(serverName, getServerPort()); if (serverAddress.isUnresolved()) { // default should be specified via config file. - serverAddress = new InetSocketAddress(getDefaultServerAddress(), getServerPort()); + serverAddress = new InetSocketAddress(DEFAULT_SERVER_HOST_NAME, getServerPort()); } } return serverAddress; } - public static String getDefaultServerAddress() { - // be configurable. - return DEFAULT_SERVER_ADDRESS; - } - @Id @GeneratedValue public Long getId() { return id; @@ -141,6 +140,26 @@ return currentParameters; } + @OneToMany(mappedBy="configuration") + @JoinColumn(name="configuration_id") + public List<ForagerExperimentParameters> getAllParameters() { + return allParameters; + } + + public void setAllParameters(List<ForagerExperimentParameters> allParameters) { + this.allParameters = allParameters; + } + + /* + public List<T> getAllParameters() { + throw new UnsupportedOperationException("Subclasses must override getAllParameters."); + } + + public void setAllParameters(List<T> allParameters) { + throw new UnsupportedOperationException("Subclasses must override setAllParameters."); + } + */ + public String getClientJarName() { return clientJarName; } @@ -172,4 +191,9 @@ public void setClientMainClass(String clientMainClass) { this.clientMainClass = clientMainClass; } + + @Transient + public Duration getDelayBetweenRounds() { + return Duration.create(30); + } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentRoundParameters.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentRoundParameters.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentRoundParameters.java 2006-03-11 23:07:17 UTC (rev 164) @@ -22,6 +22,7 @@ public Dimension getBoardSize(); public T getConfiguration(); + public void setConfiguration(T configuration); public Duration getRoundDuration(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-11 23:07:17 UTC (rev 164) @@ -33,7 +33,6 @@ public String configure() { // load experiment and various pieces of configuration information? - this.configuration = getExperiment().getConfiguration(); return SUCCESS; } @@ -64,6 +63,10 @@ return SUCCESS; } + public ExperimentConfiguration getConfiguration() { + return getExperiment().getConfiguration(); + } + public Set<Experiment> getExperiments() { if (experiments == null || experiments.isEmpty()) { experiments = getExperimentService().getAllExperiments(); @@ -71,19 +74,13 @@ return experiments; } - public ExperimentConfiguration getConfiguration() { - return configuration; - } - public Experiment getExperiment() { - if (experiment == null) { - experiment = getExperimentService().find(experimentName); - } return experiment; } public void setExperimentName(String experimentName) { this.experimentName = experimentName; + this.experiment = getExperimentService().find(experimentName); } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-11 23:07:17 UTC (rev 164) @@ -1,6 +1,8 @@ package edu.indiana.psych.gee.action; -import edu.indiana.psych.gee.ExperimentConfigurationEntity; +import edu.indiana.psych.gee.Experiment; +import edu.indiana.psych.gee.ExperimentConfiguration; +import edu.indiana.psych.gee.service.ExperimentService; /** * $Id: Exp $ @@ -11,18 +13,22 @@ public class UpdateExperimentConfiguration extends GeeAction { - private ExperimentConfigurationEntity configuration; + private String experimentName; + private ExperimentConfiguration configuration; + public String execute() { getLogger().debug("XXX: updating experiment configuration: " + configuration); return SUCCESS; } - public ExperimentConfigurationEntity getConfiguration() { + public ExperimentConfiguration getConfiguration() { return configuration; } - public void setConfiguration(ExperimentConfigurationEntity configuration) { - this.configuration = configuration; + public void setExperimentName(String experimentName) { + this.experimentName = experimentName; + this.configuration = getExperimentService().find(experimentName).getConfiguration(); + } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-11 23:07:17 UTC (rev 164) @@ -13,7 +13,6 @@ import edu.indiana.psych.gee.ExperimentConfiguration; import edu.indiana.psych.gee.ExperimentConfigurationEntity; -import edu.indiana.psych.gee.time.Duration; /** * $Id$ @@ -30,25 +29,12 @@ @Proxy(proxyClass=ExperimentConfiguration.class) public class ForagerConfiguration extends ExperimentConfigurationEntity<ForagerExperimentParameters> { - private List<ForagerExperimentParameters> allParameters; + public ForagerConfiguration() { + } public ForagerConfiguration(String serverName, int port) { super(serverName, port); } - @Transient - public Duration getDelayBetweenRounds() { - return Duration.create(30); - } - - @OneToMany(mappedBy="configuration") - @JoinColumn(name="configuration_id") - public List<ForagerExperimentParameters> getAllParameters() { - return allParameters; - } - - public void setAllParameters(List<ForagerExperimentParameters> allParameters) { - this.allParameters = allParameters; - } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java 2006-03-11 23:07:17 UTC (rev 164) @@ -20,7 +20,7 @@ return (ConsentForm) getHibernateTemplate().get(ConsentForm.class, id); } - public void update(ConsentForm consentForm) { + public void persist(ConsentForm consentForm) { getHibernateTemplate().saveOrUpdate(consentForm); } Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java 2006-03-11 23:07:17 UTC (rev 164) @@ -22,8 +22,8 @@ return null; } - public void update(ConsentForm consentForm) { - consentFormDao.update(consentForm); + public void persist(ConsentForm consentForm) { + consentFormDao.persist(consentForm); } public void setConsentFormDao(ConsentFormDao consentFormDao) { Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-11 23:07:17 UTC (rev 164) @@ -37,7 +37,7 @@ })); } - public void update(ExperimentConfiguration configuration) { + public void persist(ExperimentConfiguration configuration) { getHibernateTemplate().saveOrUpdate(configuration); } Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-11 05:53:54 UTC (rev 163) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-11 23:07:17 UTC (rev 164) @@ -45,8 +45,8 @@ return experimentConfigurationDao.find(configurationClass, experimentName); } - public void update(ExperimentConfiguration configuration) { - experimentConfigurationDao.update(configuration); + public void persist(ExperimentConfiguration configuration) { + experimentConfigurationDao.persist(configuration); } public void setExperimentConfigurationDao(ExperimentConfigurationDao experimentConfigurationDao) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-11 05:54:09
|
Revision: 163 Author: alllee Date: 2006-03-10 21:53:54 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=163&view=rev Log Message: ----------- updating build path and some mindless hygiene on forager client classes. Modified Paths: -------------- trunk/gee/.classpath trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerApplet.java trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java trunk/gee/src/java/edu/indiana/psych/gee/net/ClientSocketDispatcher.java Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/net/Handle.java Modified: trunk/gee/.classpath =================================================================== --- trunk/gee/.classpath 2006-03-11 05:29:10 UTC (rev 162) +++ trunk/gee/.classpath 2006-03-11 05:53:54 UTC (rev 163) @@ -14,5 +14,6 @@ <classpathentry kind="lib" path="war/WEB-INF/lib/commons-collections.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/hibernate3.jar"/> <classpathentry kind="lib" path="war/WEB-INF/lib/hibernate-annotations.jar"/> + <classpathentry kind="lib" path="war/WEB-INF/lib/spring.jar"/> <classpathentry kind="output" path="build"/> </classpath> Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerApplet.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerApplet.java 2006-03-11 05:29:10 UTC (rev 162) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerApplet.java 2006-03-11 05:53:54 UTC (rev 163) @@ -27,7 +27,7 @@ * @author <a href='mailto:al...@cs...'>Allen Lee</a> * @version $Revision$ */ - +@SuppressWarnings("serial") public class ForagerApplet extends JApplet implements EventHandler { private final static String EXPERIMENT_HOSTNAME_KEY = "experiment-hostname"; Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java 2006-03-11 05:29:10 UTC (rev 162) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java 2006-03-11 05:53:54 UTC (rev 163) @@ -3,6 +3,7 @@ import java.awt.Dimension; import java.net.InetSocketAddress; import java.util.LinkedList; +import java.util.List; import javax.swing.JFrame; import javax.swing.SwingUtilities; @@ -12,6 +13,7 @@ import edu.indiana.psych.gee.event.EndRoundEvent; import edu.indiana.psych.gee.event.Event; import edu.indiana.psych.gee.event.EventChannel; +import edu.indiana.psych.gee.event.EventProcessor; import edu.indiana.psych.gee.event.EventTypeProcessor; import edu.indiana.psych.gee.event.RegistrationEvent; import edu.indiana.psych.gee.event.RoundStartedEvent; @@ -88,8 +90,9 @@ // the 'ready to join' button and is ready to actually join the next // running round. At this point, we set our own internal state to READY // and then transmit the ClientReadyEvent across the network. - channel.add(new EventTypeProcessor(ClientReadyEvent.class) { - public void handle(Event event) { + List<EventProcessor> processors = channel.register(this); + processors.add(new EventTypeProcessor<ClientReadyEvent>(ClientReadyEvent.class) { + public void handle(ClientReadyEvent event) { // FIXME: should state change should happen in a consistent way // by a consistent class? state = READY; @@ -102,19 +105,19 @@ } } }); - channel.add(new EventTypeProcessor(ExperimentUpdateEvent.class) { - public void handle(Event event) { + processors.add(new EventTypeProcessor<ExperimentUpdateEvent>(ExperimentUpdateEvent.class) { + public void handle(ExperimentUpdateEvent event) { process( (ExperimentUpdateEvent) event); } }); - channel.add(new EventTypeProcessor(AbortExperimentRequest.class) { - public void handle(Event event) { + processors.add(new EventTypeProcessor<AbortExperimentRequest>(AbortExperimentRequest.class) { + public void handle(AbortExperimentRequest event) { info("attempting to abort experiment"); dispatcher.transmit(event); } }); - channel.add(new EventTypeProcessor(StartExperimentRoundRequest.class) { - public void handle(Event event) { + processors.add(new EventTypeProcessor<StartExperimentRoundRequest>(StartExperimentRoundRequest.class) { + public void handle(StartExperimentRoundRequest event) { if (shouldWaitForParticipants) { // only dispatch the event if we're in // collect-participants-mode @@ -123,8 +126,8 @@ } } }); - // FIXME: do we need this method? -// channel.add(new EventTypeProcessor(ClientRejoinEvent.class) { + // FIXME: do we need this? +// processors.add(new EventTypeProcessor(ClientRejoinEvent.class) { // public void handle(Event event) { // error("reconnecting, received reset event: " + event); // disconnect(); @@ -174,9 +177,13 @@ dispatcher.disconnect(id); messageQueueHandler.clearMessages(); state = PRECONNECT; - - } + } + public void shutdown() { + channel.unregister(this); + channel.unregister(messageQueueHandler); + } + public void process(ExperimentUpdateEvent event) { // FIXME: maybe in the future if we add a lot more states we can // implement the State pattern for this. As it stands now it's a @@ -236,18 +243,16 @@ } // private void initializeGameWindow(RegistrationEvent event) { +// the forager game window now inits itself by listening to the EventChannel itself. // foragerGameWindow.init(event); // shouldWaitForParticipants = (event.getWaitTime() == -1); // } - // FIXME: get rid of me soon! +// FIXME: how best to do client side logging with an Applet? private static void info(String message) { System.out.println(message); } - private static void error(String message) { - // FIXME: in the future this should be doing something like - // logger.warn or logger.debug etc., once I move over to log4j. System.err.println(message); } @@ -283,11 +288,12 @@ private Thread clientMessageQueueThread; // LinkedList<Event> - private final LinkedList messages = new LinkedList(); + private final LinkedList<ClientUpdateEvent> messages = + new LinkedList<ClientUpdateEvent>(); private ClientMessageQueueHandler(EventChannel channel) { - channel.add(new EventTypeProcessor(ClientUpdateEvent.class) { - public void handle(Event event) { + channel.add(new EventTypeProcessor<ClientUpdateEvent>(ClientUpdateEvent.class) { + public void handle(ClientUpdateEvent event) { assert event.id().equals(ForagerClient.this.id); if (ForagerClient.this.state != RUNNING) { info("game is currently not running, ignoring: " + event + " state: " + ForagerClient.this.state); @@ -298,7 +304,7 @@ }); } - private void enqueue(Event event) { + private void enqueue(ClientUpdateEvent event) { synchronized(messages) { if (messages.size() > MAX_QUEUED_MESSAGES) { messages.removeFirst(); @@ -308,8 +314,8 @@ } } - private Event dequeue() { - return (Event) messages.removeFirst(); + private ClientUpdateEvent dequeue() { + return messages.removeFirst(); } void clearMessages() { Modified: trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java 2006-03-11 05:29:10 UTC (rev 162) +++ trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java 2006-03-11 05:53:54 UTC (rev 163) @@ -119,8 +119,8 @@ } private void performConnectionMaintenance() { - for (Iterator iter = disconnectedClients.iterator(); iter.hasNext(); ) { - Identifier id = (Identifier) iter.next(); + for (Iterator<Identifier> iter = disconnectedClients.iterator(); iter.hasNext(); ) { + Identifier id = iter.next(); logger.debug("Disconnecting client: " + id); disconnect(id); iter.remove(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/net/ClientSocketDispatcher.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/net/ClientSocketDispatcher.java 2006-03-11 05:29:10 UTC (rev 162) +++ trunk/gee/src/java/edu/indiana/psych/gee/net/ClientSocketDispatcher.java 2006-03-11 05:53:54 UTC (rev 163) @@ -32,8 +32,8 @@ public ClientSocketDispatcher(EventChannel channel) { super(channel); - channel.add(new EventTypeProcessor(DisconnectionRequest.class) { - public void handle(Event event) { + channel.add(new EventTypeProcessor<DisconnectionRequest>(DisconnectionRequest.class) { + public void handle(DisconnectionRequest event) { disconnect(event.id()); } }); Added: trunk/gee/src/java/edu/indiana/psych/gee/net/Handle.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/net/Handle.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/net/Handle.java 2006-03-11 05:53:54 UTC (rev 163) @@ -0,0 +1,23 @@ +package edu.indiana.psych.gee.net; + +import edu.indiana.psych.gee.Identifier; +import edu.indiana.psych.gee.event.Event; + +/** + * $Id: Exp $ + * + * Zoran's refactoring of Dispatcher will have the Server deal with client Handles + * instead of plain Identifiers - handles are attached to the SelectionKeys + * directly via the attach() method. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public interface Handle { + + public Identifier id(); + + public void transmit(Event event); + +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-11 05:29:23
|
Revision: 162 Author: alllee Date: 2006-03-10 21:29:10 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=162&view=rev Log Message: ----------- * adding Spring wiring for experiment configuration and consent form daos into the ExperimentConfigurationService. * adding UpdateExperimentConfiguration action stub that will eventually process the form inputs and so on and so forth, probably also handle adding new experiment parameters? Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java trunk/gee/war/WEB-INF/applicationContext.xml trunk/gee/war/WEB-INF/classes/gee-admin.xml trunk/gee/war/WEB-INF/web.xml trunk/gee/war/admin/configureExperiment.jsp trunk/gee/war/admin/listExperiments.jsp Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-11 05:29:10 UTC (rev 162) @@ -10,6 +10,7 @@ import edu.indiana.psych.gee.net.DispatcherFactory; import edu.indiana.psych.gee.net.ServerDispatcher; import edu.indiana.psych.gee.service.ExperimentService; +import edu.indiana.psych.gee.service.ExperimentConfigurationService; import edu.indiana.psych.gee.time.Duration; /** @@ -22,7 +23,7 @@ * @author <a href='al...@cs...'>Allen Lee</a> * @version $Revision$ */ -public abstract class AbstractExperiment<C extends ExperimentConfiguration> implements Experiment<C> { +public abstract class AbstractExperiment<C extends ExperimentConfigurationEntity> implements Experiment<C> { private final Log logger = LogFactory.getLog(getClass()); private final EventChannel channel; @@ -31,13 +32,25 @@ private Thread serverThread; private boolean running; - private ExperimentService service; + private ExperimentService experimentService; + private ExperimentConfigurationService configurationService; private String name; private C configuration; private ExperimentRoundParameters currentParameters; - public AbstractExperiment() { + public AbstractExperiment(Class<C> configurationClass, C defaultConfiguration, + ExperimentConfigurationService configurationService) { + // FIXME: alas, this doesn't seem to be easy to do it the way I'd like + // to, i.e., + // C persistedConfiguration = configurationService.find(defaultConfiguration); + C persistedConfiguration = configurationService.find(configurationClass, defaultConfiguration.getExperimentName()); + if (persistedConfiguration == null) { + setConfiguration(defaultConfiguration); + } + else { + setConfiguration(persistedConfiguration); + } channel = new EventChannel(); dispatcher = DispatcherFactory.getInstance().createServerDispatcher(channel); } @@ -156,15 +169,14 @@ return allParameters.get(nextIndex).getSpecialInstructions(); } - public void setExperimentService(ExperimentService service) { - if (this.service != null) { - this.service.remove(this); + public void setExperimentService(ExperimentService experimentService) { + if (this.experimentService != null) { + this.experimentService.remove(this); } - this.service = service; - service.add(this); + this.experimentService = experimentService; + experimentService.add(this); } - - + protected void transmit(Event event) { dispatcher.transmit(event); } Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfiguration.java 2006-03-11 05:29:10 UTC (rev 162) @@ -24,6 +24,7 @@ * @return */ public int getServerPort(); + public void setServerPort(int serverPort); /** * Returns the fully qualified InetSocketAddress (hostname and port) on @@ -33,18 +34,26 @@ public InetSocketAddress getServerAddress(); public boolean isTriggeredExperiment(); + public void setTriggeredExperiment(boolean triggeredExperiment); public List<P> getAllParameters(); public P getCurrentParameters(); public String getDescription(); + public void setDescription(String description); public String getExperimentName(); + public void setExperimentName(String experimentName); public String getClientJarName(); + public void setClientJarName(String clientJarName); + + public String getClientMainClass(); + public void setClientMainClass(String clientMainClass); public ConsentForm getConsentForm(); + public void setConsentForm(ConsentForm consentForm); public Duration getDelayBetweenRounds(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-11 05:29:10 UTC (rev 162) @@ -2,9 +2,8 @@ import java.util.Set; -import com.opensymphony.webwork.ServletActionContext; - import edu.indiana.psych.gee.Experiment; +import edu.indiana.psych.gee.ExperimentConfiguration; /** * $Id$ @@ -25,6 +24,8 @@ private Experiment experiment; private String experimentName; + private ExperimentConfiguration configuration; + public String authenticate() { return SUCCESS; @@ -32,6 +33,7 @@ public String configure() { // load experiment and various pieces of configuration information? + this.configuration = getExperiment().getConfiguration(); return SUCCESS; } @@ -46,11 +48,6 @@ return SUCCESS; } - public String updateExperimentConfiguration() { - getLogger().debug("Updating experiment configuration: " + experimentName); - return SUCCESS; - } - public String stop() { Experiment experiment = getExperiment(); getLogger().debug("Stopping: " + experimentName + ": " + experiment); @@ -74,6 +71,10 @@ return experiments; } + public ExperimentConfiguration getConfiguration() { + return configuration; + } + public Experiment getExperiment() { if (experiment == null) { experiment = getExperimentService().find(experimentName); Added: trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/UpdateExperimentConfiguration.java 2006-03-11 05:29:10 UTC (rev 162) @@ -0,0 +1,28 @@ +package edu.indiana.psych.gee.action; + +import edu.indiana.psych.gee.ExperimentConfigurationEntity; + +/** + * $Id: Exp $ + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public class UpdateExperimentConfiguration extends GeeAction { + + private ExperimentConfigurationEntity configuration; + + public String execute() { + getLogger().debug("XXX: updating experiment configuration: " + configuration); + return SUCCESS; + } + + public ExperimentConfigurationEntity getConfiguration() { + return configuration; + } + + public void setConfiguration(ExperimentConfigurationEntity configuration) { + this.configuration = configuration; + } +} Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-11 05:29:10 UTC (rev 162) @@ -45,15 +45,6 @@ @OneToMany(mappedBy="configuration") @JoinColumn(name="configuration_id") public List<ForagerExperimentParameters> getAllParameters() { - /* - if (allParameters == null) { - allParameters = new java.util.ArrayList<ForagerExperimentParameters>(); - ForagerExperimentParameters params = new ForagerExperimentParameters(); - params.setConfiguration(this); - params.setSpecialInstructions("Very special forager instructions... very special indeed."); - allParameters.add(params); - } - */ return allParameters; } Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-11 05:29:10 UTC (rev 162) @@ -26,6 +26,7 @@ import edu.indiana.psych.gee.net.ClientReadyEvent; import edu.indiana.psych.gee.net.ConnectionEvent; import edu.indiana.psych.gee.net.Dispatcher; +import edu.indiana.psych.gee.service.ExperimentConfigurationService; import edu.indiana.psych.gee.time.Duration; import edu.indiana.psych.gee.util.GeeUtils; @@ -44,7 +45,6 @@ private ForagerServerGameState foragerGameState; private Duration currentRoundDuration; - private Duration delayBetweenRounds; private Duration timeToNextRound; // participants that have just connected to the server, still reading the @@ -66,11 +66,11 @@ // FIXME: instead, need to find configurations from // ExperimentConfigurationDao, yes? - public ForagerExperiment(ForagerConfiguration configuration) { + public ForagerExperiment(ForagerConfiguration defaultConfiguration, + ExperimentConfigurationService configurationService) { + super(ForagerConfiguration.class, defaultConfiguration, configurationService); addEventProcessors(); - getLogger().debug("Creating a new ForagerExperiment with configuration: " + configuration); - setConfiguration(configuration); - this.delayBetweenRounds = configuration.getDelayBetweenRounds(); + getLogger().debug("Creating a new ForagerExperiment with configuration: " + defaultConfiguration); } private void sendRegistrationEvent(Collection<Identifier> identifiers) { @@ -218,7 +218,7 @@ private Duration getTimeToNextRound() { if (roundRunning) { - return delayBetweenRounds.plus(timeRemaining()); + return getDelayBetweenRounds().plus(timeRemaining()); } else if (getConfiguration().isTriggeredExperiment()) { // we are in the model where rounds don't start automatically - @@ -264,7 +264,7 @@ public void execute(Dispatcher dispatcher) { switch (state) { case WAITING: - timeToNextRound = delayBetweenRounds.start(); + timeToNextRound = getDelayBetweenRounds().start(); getLogger().debug(String.format("current time: [%d], time of next round: [%d]", timeToNextRound.getStartTime().getMillisecondsSinceEpoch(), timeToNextRound.getEndTime().getMillisecondsSinceEpoch())); Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-11 05:29:10 UTC (rev 162) @@ -1,6 +1,11 @@ package edu.indiana.psych.gee.service; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.hibernate.Criteria; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.hibernate.criterion.Restrictions; +import org.springframework.orm.hibernate3.HibernateCallback; import edu.indiana.psych.gee.ExperimentConfiguration; import edu.indiana.psych.gee.ExperimentConfigurationEntity; @@ -21,6 +26,17 @@ return configurationClass.cast(getHibernateTemplate().get(configurationClass, id)); } + public <E extends ExperimentConfigurationEntity> E find(final Class<E> configurationClass, final String experimentName) { + return configurationClass.cast( + getHibernateTemplate().execute(new HibernateCallback() { + public Object doInHibernate(Session session) throws HibernateException { + Criteria criteria = session.createCriteria(configurationClass); + criteria.add(Restrictions.eq("experimentName", experimentName)); + return criteria.uniqueResult(); + } + })); + } + public void update(ExperimentConfiguration configuration) { getHibernateTemplate().saveOrUpdate(configuration); } Modified: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-11 05:29:10 UTC (rev 162) @@ -19,6 +19,7 @@ public class ExperimentConfigurationService { private ExperimentConfigurationDao experimentConfigurationDao; + private ConsentFormDao consentFormDao; public <E extends ExperimentConfiguration> E load(Class<E> configurationClass, InputStream stream) { @@ -29,7 +30,21 @@ return experimentConfigurationDao.find(configurationClass, id); } + /* FIXME: figure out if it is even possible to support this sort of + * generic method using generics, currently causes compile errors. A + * shame, stems from the fact that getClass() doesn't return a rigid + * enough type constraint (you get Class<? extends Object> which upsets + * the type inferencer). This in turn ruins our ability to safely cast + * back to the original type after it gets munged by Hibernate. Argh. + public <E extends ExperimentConfigurationEntity> E find(E defaultConfiguration) { + return find(defaultConfiguration.getClass(), defaultConfiguration.getExperimentName()); + } + */ + public <E extends ExperimentConfigurationEntity> E find(Class<E> configurationClass, String experimentName) { + return experimentConfigurationDao.find(configurationClass, experimentName); + } + public void update(ExperimentConfiguration configuration) { experimentConfigurationDao.update(configuration); } @@ -38,4 +53,8 @@ this.experimentConfigurationDao = experimentConfigurationDao; } + public void setConsentFormDao(ConsentFormDao consentFormDao) { + this.consentFormDao = consentFormDao; + } + } Modified: trunk/gee/war/WEB-INF/applicationContext.xml =================================================================== --- trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-11 05:29:10 UTC (rev 162) @@ -32,17 +32,26 @@ <prop key="hibernate.show_sql">true</prop> </props> </property> - <property name="dataSource"> - <ref bean="mysqlDataSource"/> - </property> + <property name="dataSource" ref="mysqlDataSource"/> </bean> <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="hibernateSessionFactory"/> </property> </bean> + <!-- persistence layer beans --> + <bean id="experimentConfigurationDao" class="edu.indiana.psych.gee.service.ExperimentConfigurationDao"> + <property name="sessionFactory" ref="hibernateSessionFactory"/> + </bean> + <bean id="consentFormDao" class="edu.indiana.psych.gee.service.ConsentFormDao"> + <property name="sessionFactory" ref="hibernateSessionFactory"/> + </bean> <!-- application layer beans --> <bean id="experimentService" class="edu.indiana.psych.gee.service.ExperimentService"/> + <bean id="configurationService" class="edu.indiana.psych.gee.service.ExperimentConfigurationService"> + <property name="experimentConfigurationDao" ref="experimentConfigurationDao"/> + <property name="consentFormDao" ref="consentFormDao"/> + </bean> <bean id="defaultForagerWebConfiguration" class="edu.indiana.psych.gee.forager.ForagerConfiguration"> <constructor-arg value="groups.psych.indiana.edu"/> <constructor-arg type="int"><value>26000</value></constructor-arg> @@ -61,10 +70,12 @@ </bean> <bean id="forager-web" class="edu.indiana.psych.gee.forager.ForagerExperiment"> <constructor-arg ref="defaultForagerWebConfiguration"/> + <constructor-arg ref="configurationService"/> <property name="experimentService" ref="experimentService"/> </bean> <bean id="forager-experiment" class="edu.indiana.psych.gee.forager.ForagerExperiment"> <constructor-arg ref="defaultForagerExperimentConfiguration"/> + <constructor-arg ref="configurationService"/> <property name="experimentService" ref="experimentService"/> </bean> </beans> Modified: trunk/gee/war/WEB-INF/classes/gee-admin.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-11 05:29:10 UTC (rev 162) @@ -30,8 +30,8 @@ <action name="stop" class="edu.indiana.psych.gee.action.AdminAction" method="stop"> <result name="success" type="freemarker">listExperiments.jsp</result> </action> - <action name="update" class="edu.indiana.psych.gee.action.UpdateExperimentConfiguration"> - <result name="success" type="freemarker">configureExperiment.jsp</result> + <action name="updateExperimentConfiguration" class="edu.indiana.psych.gee.action.UpdateExperimentConfiguration"> + <result name="success" type="freemarker">listExperiments.jsp</result> </action> </package> </xwork> Modified: trunk/gee/war/WEB-INF/web.xml =================================================================== --- trunk/gee/war/WEB-INF/web.xml 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/war/WEB-INF/web.xml 2006-03-11 05:29:10 UTC (rev 162) @@ -6,7 +6,7 @@ <web-app> <display-name>Percepts and Concepts Laboratory</display-name> <description> - Group Experiments Environment, a framework for building online Java + The Group Experiments Environment, a framework for building online Java experiments. </description> <servlet> Modified: trunk/gee/war/admin/configureExperiment.jsp =================================================================== --- trunk/gee/war/admin/configureExperiment.jsp 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/war/admin/configureExperiment.jsp 2006-03-11 05:29:10 UTC (rev 162) @@ -4,18 +4,19 @@ </head> <body> <p> -Configuring the <span class="highlight">${experiment.name}</span> experiment: +Configuring the <span class="highlight">${configuration.experimentName}</span> experiment: </p> <@ww.form action="updateExperimentConfiguration"> - <@ww.textfield size="40" label="Server port" name="experiment.serverPort"/> - <@ww.textfield size="40" label="Experiment name" name="experiment.name"/> - <@ww.textfield size="40" label="Server name" name="experiment.configuration.serverName"/> - <@ww.textarea cols="37" rows="6" label="Description" name="experiment.description"/> + <@ww.textfield size=40 label="Server port" name="configuration.serverPort"/> + <@ww.textfield size=40 label="Experiment name" name="configuration.experimentName"/> + <@ww.textfield size=40 label="Server name" name="configuration.serverName"/> + <@ww.textarea cols=37 rows=6 label="Description" name="configuration.description"/> + <@ww.checkbox label="Triggered?" name="configuration.triggered"/> <@ww.submit value="Modify"/> </@ww.form> -<#if experiment.configuration.allParameters?exists> +<#if configuration.allParameters?exists> <ul> - <#list experiment.configuration.allParameters as experimentParameters> + <#list configuration.allParameters as experimentParameters> <li>Board size: ${experimentParameters.boardSize}</li> <li>Special instructions: ${experimentParameters.specialInstructions}</li> </#list> @@ -23,13 +24,12 @@ <#else> <h3> <div id="Error"> -No experiment parameters associated with ${experiment.name}, please add some! +No experiment parameters associated with ${configuration.experimentName}, please add some! </div> </h3> </#if> <hr/> -<@ww.form> -<!-- FIXME: use ajax to load crap in the form above --> +<@ww.form action="addExperimentParameters" method="POST" enctype="multipart/form-data"> <@ww.file label="Add experiment parameters from file: " name="'experimentParametersFile'"/> <@ww.submit value="Load"/> </@ww.form> Modified: trunk/gee/war/admin/listExperiments.jsp =================================================================== --- trunk/gee/war/admin/listExperiments.jsp 2006-03-11 01:30:40 UTC (rev 161) +++ trunk/gee/war/admin/listExperiments.jsp 2006-03-11 05:29:10 UTC (rev 162) @@ -21,7 +21,7 @@ <#else> <tr class="displayeven"> </#if> - <td width="10%">${name}</td> + <td width="10%"><span class='highlight'>${name}</span></td> <td width="50%">${description}</td> <td width="15%"> <@ww.div id="status" href="/ajax/status.action?experimentName=${name}" listenTopics="start, stop"> @@ -45,4 +45,6 @@ </tr> </@ww.iterator> </table> +<hr/> +Available consent forms: </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-11 01:30:58
|
Revision: 161 Author: alllee Date: 2006-03-10 17:30:40 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=161&view=rev Log Message: ----------- renamed getConsent.jsp => consent.jsp, and changing startExperiment.jsp to use freemarker instead. Should make freemarker the default in webwork.properties. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/startExperiment.jsp Added Paths: ----------- trunk/gee/war/consent.jsp Removed Paths: ------------- trunk/gee/war/getConsent.jsp Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-10 20:21:07 UTC (rev 160) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-11 01:30:40 UTC (rev 161) @@ -45,6 +45,8 @@ private String experimentName; private String clientJarName; private String clientMainClass; + private int worldHeight; + private int worldWidth; private ConsentForm consentForm; private int serverPort; private String serverName; Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-10 20:21:07 UTC (rev 160) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-11 01:30:40 UTC (rev 161) @@ -32,14 +32,11 @@ private List<ForagerExperimentParameters> allParameters; + public ForagerConfiguration(String serverName, int port) { super(serverName, port); } - public static ForagerConfiguration getDefaultConfiguration() { - return new ForagerConfiguration("groups.psych.indiana.edu", 25000); - } - @Transient public Duration getDelayBetweenRounds() { return Duration.create(30); Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java 2006-03-10 20:21:07 UTC (rev 160) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/client/ForagerClient.java 2006-03-11 01:30:40 UTC (rev 161) @@ -65,11 +65,6 @@ private ClientDispatcher dispatcher; private Identifier id; - - public ForagerClient(Dimension screenSize) { - this(screenSize, ForagerConfiguration.getDefaultConfiguration()); - } - public ForagerClient(Dimension screenSize, ForagerConfiguration configuration) { setConfiguration(configuration); @@ -256,10 +251,11 @@ System.err.println(message); } + /* public static void main(String[] args) { Runnable createGuiRunnable = new Runnable() { public void run() { - Dimension defaultDimension = new Dimension(500, 500); + Dimension defaultDimension = new Dimension(600, 600); JFrame frame = new JFrame(); ForagerClient client = new ForagerClient(defaultDimension); client.connect(); @@ -272,6 +268,7 @@ }; SwingUtilities.invokeLater(createGuiRunnable); } + */ /** Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-10 20:21:07 UTC (rev 160) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-11 01:30:40 UTC (rev 161) @@ -15,8 +15,8 @@ <result name="success" type="freemarker">index.jsp</result> </action> <action name="start" class="edu.indiana.psych.gee.action.StartExperiment" method="start"> - <result name="success">startExperiment.jsp</result> - <result name="input">getConsent.jsp</result> + <result name="success" type="freemarker">startExperiment.jsp</result> + <result name="input">consent.jsp</result> </action> <action name="consent" class="edu.indiana.psych.gee.action.StartExperiment" method="prepare"> <!-- FIXME: do not use a validating stack here --> Copied: trunk/gee/war/consent.jsp (from rev 152, trunk/gee/war/getConsent.jsp) =================================================================== --- trunk/gee/war/consent.jsp (rev 0) +++ trunk/gee/war/consent.jsp 2006-03-11 01:30:40 UTC (rev 161) @@ -0,0 +1,154 @@ +<%@ taglib prefix="ww" uri="webwork" %> +<head> +<title> Consent Form for [ <ww:property value="experimentName"/> ]</title> + <% + String commitDate = "$Date$"; + java.util.StringTokenizer toke = new java.util.StringTokenizer(commitDate, " "); + toke.nextToken(); + String lastModifiedDate = toke.nextToken(); + %> +<meta name="lastModifiedDate" content="<%= commitDate %>"/> +</head> + +<TABLE BGCOLOR="#A4B5C5" CELLPADDING="4" CELLSPACING="0" WIDTH="100%" BORDER="0"> + <TR> + <TD WIDTH="100%"> + <H3><ww:property value="experimentName"/> consent form</H3> + </TD> + <TD ALIGN="right" VALIGN="top" BGCOLOR="#A4B5C5" WIDTH="70%" style="white-space: nowrap;"> + <b>Study #04-9064</b><br/> + <small>Last Modified: <%= lastModifiedDate %></small> + </TD> + </TR> +</TABLE> + +<TABLE CELLPADDING="4" CELLSPACING="2" BORDER="0"> + <TR> + <TD> + + <B>Forager</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + You are invited to participate in a research study, entitled Group Behavior. The purpose of the study is to investigate how people think, act, and make decisions in groups. You will be given a full debriefing at the end of the experiment. Each of the experiments will take 5-10 minutes to complete. The particular instructions for an experiment will be displayed on the computer screen. During the experiment, you will be interacting with a group of humans or artificial intelligence agents. You will see the choices they make, and they will see your choices. <P> + + <B>Deception</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + No deception is used in this study.<P> + + <B>Confidentiality</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + The information in the study records will be kept confidential. Data will be made available only to persons conducting the study. No reference will be made in verbal or written form which could link your name to the study. Your name is not recorded with your data. <P> + + <B>Compensation</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + There is no monetary compensation for participating in this study.<P> + + <B>Risks</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + There are no anticipated risks associated with the experiments.<P> + + <B>Benefits</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + +Society benefits from this research because an understanding of how groups behave can help us to predict the behaviors of complex organizations and develop technologies that promote the efficient and accurate flow of information within groups. You benefit from this experience because you learn something about how group psychology experiments are designed and conducted, what issues are of interest to cognitive scientists, and what kinds of group behaviors emerge when individuals try to reach their goals in an environment that consists largely of other individuals. In addition, many people find the experiments to be fun and intriguing. At the end of the experiment, you will be shown your own performance compared to the average performance of others in your group, a debriefing that describes what the experiment was about, and links to related research. <P> + + + <B>Contact</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + If you have questions at any time about the study or the procedures, you may + contact the researcher, Robert Goldstone, at: <P> + + <TABLE CELLPADDING="1" CELLSPACING="0" BORDER="0"> + <TR><TD BGCOLOR="#5566AA"> + <TABLE CELLPADDING="10" CELLSPACING="0" BORDER="0"> + <TR><TD BGCOLOR="#F0F4FF"> + <PRE> +Dr. Robert Goldstone +338 Psychology Building +Indiana University +Bloomington, IN, 47405 +Phone: 812-855-4853 +Email: <a href='mailto:rgo...@in...'>rgo...@in...</a></PRE> + </TD></TR> + </TABLE> + </TD></TR></TABLE> + + <P> + If you have questions about your rights as a subject, contact the + office for the Human Subjects Committee at:<P> + + <TABLE CELLPADDING="1" CELLSPACING="0" BORDER="0"> + <TR><TD BGCOLOR="#5566AA"> + <TABLE CELLPADDING="10" CELLSPACING="0" BORDER="0"> + <TR><TD BGCOLOR="#F0F4FF"> + <PRE> +Human Subjects Committee +Indiana University Carmichael Center L03 +530 E. Kirkwood Ave +Bloomington, IN 47408 +Phone: 812-855-3067 +Email: <a href='mailto:iu...@in...'>iu...@in...</a></PRE> + </TD></TR> + </TABLE> + </TD></TR></TABLE> + <P> + + <B>Participation</B><BR> + <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> + <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> + </TABLE> + + Your participation in this study is purely voluntary. You may decline to participate. + If you decide to participate, you may withdraw from the study at any time without + penalty or loss of benefits. If you withdraw from the study prior to the completion + of your session your data will not be saved. <P> + + + + </TD> + </TR> +</TABLE> + +<p style="font-weight: bolder; background-color: #FFE303;">I have read and +understand the information presented above. I agree to participate in this +study.</p> +<ww:form method="post" validate="true" action='start'> + <ww:select label="Age" name="participantAge" required="true" + list="#{'17':'Under 18', '18':'18-24', '25':'25-36', '37':'37-55', '55':'Over 55'}" + value="'18'"/> + <ww:textfield label="Name" name="participantName" required="true" /> + <ww:hidden name="experimentName"/> + <ww:submit/> +</ww:form> +<hr /> +<small> +IRB Approved +<br/> +<ww:text name="approval.date"> + <ww:param name="value" value="%{consentForm.irbDateApproved}"/> +</ww:text> +<br/> +<ww:text name="approval.expiration.date"> + <ww:param name="value" value="%{consentForm.irbDateApprovalExpires}"/> +</ww:text> +</small> + Deleted: trunk/gee/war/getConsent.jsp =================================================================== --- trunk/gee/war/getConsent.jsp 2006-03-10 20:21:07 UTC (rev 160) +++ trunk/gee/war/getConsent.jsp 2006-03-11 01:30:40 UTC (rev 161) @@ -1,154 +0,0 @@ -<%@ taglib prefix="ww" uri="webwork" %> -<head> -<title> Consent Form for [ <ww:property value="experimentName"/> ]</title> - <% - String commitDate = "$Date$"; - java.util.StringTokenizer toke = new java.util.StringTokenizer(commitDate, " "); - toke.nextToken(); - String lastModifiedDate = toke.nextToken(); - %> -<meta name="lastModifiedDate" content="<%= commitDate %>"/> -</head> - -<TABLE BGCOLOR="#A4B5C5" CELLPADDING="4" CELLSPACING="0" WIDTH="100%" BORDER="0"> - <TR> - <TD WIDTH="100%"> - <H3><ww:property value="experimentName"/> consent form</H3> - </TD> - <TD ALIGN="right" VALIGN="top" BGCOLOR="#A4B5C5" WIDTH="70%" style="white-space: nowrap;"> - <b>Study #04-9064</b><br/> - <small>Last Modified: <%= lastModifiedDate %></small> - </TD> - </TR> -</TABLE> - -<TABLE CELLPADDING="4" CELLSPACING="2" BORDER="0"> - <TR> - <TD> - - <B>Forager</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - You are invited to participate in a research study, entitled Group Behavior. The purpose of the study is to investigate how people think, act, and make decisions in groups. You will be given a full debriefing at the end of the experiment. Each of the experiments will take 5-10 minutes to complete. The particular instructions for an experiment will be displayed on the computer screen. During the experiment, you will be interacting with a group of humans or artificial intelligence agents. You will see the choices they make, and they will see your choices. <P> - - <B>Deception</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - No deception is used in this study.<P> - - <B>Confidentiality</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - The information in the study records will be kept confidential. Data will be made available only to persons conducting the study. No reference will be made in verbal or written form which could link your name to the study. Your name is not recorded with your data. <P> - - <B>Compensation</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - There is no monetary compensation for participating in this study.<P> - - <B>Risks</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - There are no anticipated risks associated with the experiments.<P> - - <B>Benefits</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - -Society benefits from this research because an understanding of how groups behave can help us to predict the behaviors of complex organizations and develop technologies that promote the efficient and accurate flow of information within groups. You benefit from this experience because you learn something about how group psychology experiments are designed and conducted, what issues are of interest to cognitive scientists, and what kinds of group behaviors emerge when individuals try to reach their goals in an environment that consists largely of other individuals. In addition, many people find the experiments to be fun and intriguing. At the end of the experiment, you will be shown your own performance compared to the average performance of others in your group, a debriefing that describes what the experiment was about, and links to related research. <P> - - - <B>Contact</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - If you have questions at any time about the study or the procedures, you may - contact the researcher, Robert Goldstone, at: <P> - - <TABLE CELLPADDING="1" CELLSPACING="0" BORDER="0"> - <TR><TD BGCOLOR="#5566AA"> - <TABLE CELLPADDING="10" CELLSPACING="0" BORDER="0"> - <TR><TD BGCOLOR="#F0F4FF"> - <PRE> -Dr. Robert Goldstone -338 Psychology Building -Indiana University -Bloomington, IN, 47405 -Phone: 812-855-4853 -Email: <a href='mailto:rgo...@in...'>rgo...@in...</a></PRE> - </TD></TR> - </TABLE> - </TD></TR></TABLE> - - <P> - If you have questions about your rights as a subject, contact the - office for the Human Subjects Committee at:<P> - - <TABLE CELLPADDING="1" CELLSPACING="0" BORDER="0"> - <TR><TD BGCOLOR="#5566AA"> - <TABLE CELLPADDING="10" CELLSPACING="0" BORDER="0"> - <TR><TD BGCOLOR="#F0F4FF"> - <PRE> -Human Subjects Committee -Indiana University Carmichael Center L03 -530 E. Kirkwood Ave -Bloomington, IN 47408 -Phone: 812-855-3067 -Email: <a href='mailto:iu...@in...'>iu...@in...</a></PRE> - </TD></TR> - </TABLE> - </TD></TR></TABLE> - <P> - - <B>Participation</B><BR> - <TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="100%"> - <TR><TD WIDTH="100%" BGCOLOR="#A4B5C5" HEIGHT="5"><IMG SRC="/images/blank.gif" WIDTH="1" HEIGHT="1"></TD></TR> - </TABLE> - - Your participation in this study is purely voluntary. You may decline to participate. - If you decide to participate, you may withdraw from the study at any time without - penalty or loss of benefits. If you withdraw from the study prior to the completion - of your session your data will not be saved. <P> - - - - </TD> - </TR> -</TABLE> - -<p style="font-weight: bolder; background-color: #FFE303;">I have read and -understand the information presented above. I agree to participate in this -study.</p> -<ww:form method="post" validate="true" action='start'> - <ww:select label="Age" name="participantAge" required="true" - list="#{'17':'Under 18', '18':'18-24', '25':'25-36', '37':'37-55', '55':'Over 55'}" - value="'18'"/> - <ww:textfield label="Name" name="participantName" required="true" /> - <ww:hidden name="experimentName"/> - <ww:submit/> -</ww:form> -<hr /> -<small> -IRB Approved -<br/> -<ww:text name="approval.date"> - <ww:param name="value" value="%{consentForm.irbDateApproved}"/> -</ww:text> -<br/> -<ww:text name="approval.expiration.date"> - <ww:param name="value" value="%{consentForm.irbDateApprovalExpires}"/> -</ww:text> -</small> - Modified: trunk/gee/war/startExperiment.jsp =================================================================== --- trunk/gee/war/startExperiment.jsp 2006-03-10 20:21:07 UTC (rev 160) +++ trunk/gee/war/startExperiment.jsp 2006-03-11 01:30:40 UTC (rev 161) @@ -1,7 +1,6 @@ <!-- vim:sts=2:sw=2: --> -<%@ taglib prefix="ww" uri="webwork" %> <head> <meta name="lastModifiedDate" content="$Date$"/> </head> @@ -9,16 +8,17 @@ If you experience any problems, please read the <a href='<ww:url action="faq"/>'> FAQ </a> or <a href='<ww:url action="contact"/>'>contact us.</a> </p> - <p>Currently participating in the <span class="highlight"><ww:property value="experiment.name"/></span> experiment. + <@ww.push value="experiment"> + <p>Currently participating in the <span class="highlight">${name}</span> experiment. </p> <!-- FIXME: add instructions to the right panel --> - <!-- FIXME: make width/height configurable later? --> - <applet code='<ww:property value="experiment.configuration.clientMainClass"/>' width="600" height="600" - archive='<ww:property value="experiment.configuration.clientJarName"/>'> - <param name='experiment-hostname' value="<ww:property value='experiment.configuration.serverAddress.hostName'/>" /> - <param name='experiment-port' value="<ww:property value='experiment.serverPort'/>" /> + <applet code='${configuration.clientMainClass}' width="600" height="600" + archive='${configuration.clientJarName}'> + <param name='experiment-hostname' value="${configuration.serverAddress.hostName}" /> + <param name='experiment-port' value="${serverPort?c}" /> </applet> + </@ww.push> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-10 20:21:11
|
Revision: 160 Author: alllee Date: 2006-03-10 12:21:07 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=160&view=rev Log Message: ----------- switched index.jsp to freemarker as it simplifies the output considerably. Modified Paths: -------------- trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/index.jsp Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-10 04:23:41 UTC (rev 159) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-10 20:21:07 UTC (rev 160) @@ -12,14 +12,14 @@ <default-interceptor-ref name="defaultStack"/> <!-- the start page lists all available experiments --> <action name="index" class="edu.indiana.psych.gee.action.ListExperiments"> - <result name="success">index.jsp</result> + <result name="success" type="freemarker">index.jsp</result> </action> <action name="start" class="edu.indiana.psych.gee.action.StartExperiment" method="start"> <result name="success">startExperiment.jsp</result> <result name="input">getConsent.jsp</result> </action> <action name="consent" class="edu.indiana.psych.gee.action.StartExperiment" method="prepare"> -<!-- FIXME: make sure the stack doesn't validate --> +<!-- FIXME: do not use a validating stack here --> <interceptor-ref name="basicStack"/> <result name="success">getConsent.jsp</result> <result name="input">getConsent.jsp</result> Modified: trunk/gee/war/index.jsp =================================================================== --- trunk/gee/war/index.jsp 2006-03-10 04:23:41 UTC (rev 159) +++ trunk/gee/war/index.jsp 2006-03-10 20:21:07 UTC (rev 160) @@ -1,5 +1,3 @@ -<%@ taglib prefix="ww" uri="webwork" %> - <head> <meta name="lastModifiedDate" content="$Date$"/> </head> @@ -63,41 +61,21 @@ <table> <tbody style="padding: 10px;"> <tr> -<%-- iterate through ListExperiments experiments property and emit its description and link --%> -<ww:iterator value="experiments" status="rowStatus" id="experiment"> - <ww:if test="#rowStatus.odd == true"> - <tr class="displayodd"> - </ww:if> - <ww:else> - <tr class="displayeven"> - </ww:else> +<@ww.iterator value="experiments" status="rowStatus" id="experiment"> + <#if rowStatus.odd> + <tr class="displayodd"> + <#else> + <tr class="displayeven"> + </#if> <td style="white-space: nowrap;"> - <a href=' - <ww:url action="consent"> - <ww:param name="experimentName" value="name"/> - </ww:url> - '> - <span class="highlight"> - [ <ww:property value="name"/> ] - </span> - </a> + <a href='consent.action?experimentName=${name}'> + <span class="highlight">[ ${name} ]</span> + </a> </td> - <td> - <ww:property value="description"/> - </td> - <td> - <a href=' - <ww:url action="consent"> - <ww:param name="experimentName" value="name"/> - </ww:url> - '> - <i> - start - </i> - </a> - </td> + <td>${description}</td> + <td><a href='consent.action?experimentName=${name}'><i>start</i></a></td> </tr> -</ww:iterator> +</@ww.iterator> </tbody> </table> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-10 04:23:47
|
Revision: 159 Author: alllee Date: 2006-03-09 20:23:41 -0800 (Thu, 09 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=159&view=rev Log Message: ----------- using java builtin transient keyword to mark non-persistable fields in ExperimentConfigurationEntity fleshing out experiment configuration some more, still need to work out how to initially bootstrap experiment configurations... Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java trunk/gee/war/WEB-INF/applicationContext.xml trunk/gee/war/WEB-INF/classes/gee-admin.xml trunk/gee/war/admin/listExperiments.jsp trunk/gee/war/css/gee.css Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-09 06:32:06 UTC (rev 158) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-10 04:23:41 UTC (rev 159) @@ -49,12 +49,10 @@ private int serverPort; private String serverName; private boolean triggeredExperiment; - // transient fields (vaguely remember reading somewhere that it's better - // to place these on the accessor methods instead, figure out if this is - // the case) - private InetSocketAddress serverAddress; - private T currentParameters; - private @Transient Iterator<T> parametersIterator; + // generated transient fields, no need to persist. + private transient InetSocketAddress serverAddress; + private transient T currentParameters; + private transient Iterator<T> parametersIterator; public ExperimentConfigurationEntity(String serverName, int port) { setServerName(serverName); Modified: trunk/gee/war/WEB-INF/applicationContext.xml =================================================================== --- trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-09 06:32:06 UTC (rev 158) +++ trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-10 04:23:41 UTC (rev 159) @@ -43,16 +43,28 @@ </bean> <!-- application layer beans --> <bean id="experimentService" class="edu.indiana.psych.gee.service.ExperimentService"/> - <bean id="defaultForagerConfiguration" class="edu.indiana.psych.gee.forager.ForagerConfiguration"> + <bean id="defaultForagerWebConfiguration" class="edu.indiana.psych.gee.forager.ForagerConfiguration"> <constructor-arg value="groups.psych.indiana.edu"/> <constructor-arg type="int"><value>26000</value></constructor-arg> - <property name="experimentName" value="forager"/> - <property name="description" value="The Forager experiment explores how individuals allocate themselves in a world with scarce resources."/> + <property name="experimentName" value="forager-web"/> + <property name="description" value="The Forager web experiment explores how individuals allocate themselves in a world with scarce resources via an always-available applet."/> <property name='clientJarName' value='forager-client.jar'/> <property name='clientMainClass' value='edu.indiana.psych.gee.forager.client.ForagerApplet'/> </bean> + <bean id="defaultForagerExperimentConfiguration" class="edu.indiana.psych.gee.forager.ForagerConfiguration"> + <constructor-arg value="groups.psych.indiana.edu"/> + <constructor-arg type="int"><value>26001</value></constructor-arg> + <property name="experimentName" value="forager-experiment"/> + <property name="description" value="The in-house Forager experiment explores how individuals allocate themselves in a world with scarce resources under a facilitator's guidance in controlled settings."/> + <property name='clientJarName' value='forager-client.jar'/> + <property name='clientMainClass' value='edu.indiana.psych.gee.forager.client.ForagerApplet'/> + </bean> <bean id="forager-web" class="edu.indiana.psych.gee.forager.ForagerExperiment"> - <constructor-arg ref="defaultForagerConfiguration"/> + <constructor-arg ref="defaultForagerWebConfiguration"/> <property name="experimentService" ref="experimentService"/> </bean> + <bean id="forager-experiment" class="edu.indiana.psych.gee.forager.ForagerExperiment"> + <constructor-arg ref="defaultForagerExperimentConfiguration"/> + <property name="experimentService" ref="experimentService"/> + </bean> </beans> Modified: trunk/gee/war/WEB-INF/classes/gee-admin.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-09 06:32:06 UTC (rev 158) +++ trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-10 04:23:41 UTC (rev 159) @@ -30,7 +30,7 @@ <action name="stop" class="edu.indiana.psych.gee.action.AdminAction" method="stop"> <result name="success" type="freemarker">listExperiments.jsp</result> </action> - <action name="update" class="edu.indiana.psych.gee.action.AdminAction" method="updateExperimentConfiguration"> + <action name="update" class="edu.indiana.psych.gee.action.UpdateExperimentConfiguration"> <result name="success" type="freemarker">configureExperiment.jsp</result> </action> </package> Modified: trunk/gee/war/admin/listExperiments.jsp =================================================================== --- trunk/gee/war/admin/listExperiments.jsp 2006-03-09 06:32:06 UTC (rev 158) +++ trunk/gee/war/admin/listExperiments.jsp 2006-03-10 04:23:41 UTC (rev 159) @@ -4,6 +4,10 @@ <title>Experiment Statuses</title> </head> <body> +<p> +Welcome to the facilitator interface. From here you should be able to start, +stop, reconfigure, or attach to a currently running experiment as an observer +(not implemented yet). <table> <tr> <th>Name</th> @@ -11,30 +15,34 @@ <th>Status</th> <th>Action</th> </tr> - <#list experiments as experiment> - <tr> - <td width="10%">${experiment.name}</td> - <td width="50%">${experiment.description}</td> + <@ww.iterator value="experiments" status="rowStatus" id="experiment"> + <#if rowStatus.odd> + <tr class="displayodd"> + <#else> + <tr class="displayeven"> + </#if> + <td width="10%">${name}</td> + <td width="50%">${description}</td> <td width="15%"> - <@ww.div id="status" href="/ajax/status.action?experimentName=${experiment.name}" listenTopics="start, stop"> - ${experiment.running?string("running", "not running")} + <@ww.div id="status" href="/ajax/status.action?experimentName=${name}" listenTopics="start, stop"> + ${running?string("running", "not running")} </@ww.div> </td> <td width="25%"> ( - <@ww.a id="start" href="start.action?experimentName=${experiment.name}" notifyTopics="start"> + <@ww.a id="start" href="start.action?experimentName=${name}" notifyTopics="start"> Start </@ww.a> | - <@ww.a id="stop" href='stop.action?experimentName=${experiment.name}' notifyTopics="stop" > + <@ww.a id="stop" href='stop.action?experimentName=${name}' notifyTopics="stop" > Stop </@ww.a> | - <a href='<@ww.url action="configure" experimentName="${experiment.name}" />'> + <a href='<@ww.url action="configure" experimentName="${name}" />'> Edit</a> ) </td> </tr> - </#list> + </@ww.iterator> </table> </body> Modified: trunk/gee/war/css/gee.css =================================================================== --- trunk/gee/war/css/gee.css 2006-03-09 06:32:06 UTC (rev 158) +++ trunk/gee/war/css/gee.css 2006-03-10 04:23:41 UTC (rev 159) @@ -39,46 +39,9 @@ a:hover { text-decoration:underline; + background-color:#FEE5AC; } -.navBar { - padding-top: 20px; - background-color: #F5F5F5; -} - -.navTabActive { - font-weight: bold; - border-top: 1px #333 solid; - border-left: 1px #333 solid; - border-right: 1px #333 solid; - background-color: #899; - padding-top: 3px; - padding-bottom: 3px; - padding-left: 6px; - padding-right: 6px; -} - -.navTabInactive { - border-bottom: 1px #333 solid; - background-color: #ccd; - padding-top: 3px; - padding-bottom: 3px; - padding-left: 6px; - padding-right: 6px; -} - -.navTop { - border-bottom: 1px #333 solid; - background-color: #a5b2ba; -} - -.navBottom { - border-bottom: 1px #000 solid; - background-color: #899; -} - - - .highlight { color: #8B2500; font-family: arial, helvetica, sans-serif; @@ -94,10 +57,6 @@ padding: 5px 5px 3px 5px } -#scrollingTableWrapper { - width: 100%; -} - .displayodd { background: #EEE; border-bottom: none; @@ -107,15 +66,13 @@ padding: 5px 5px 3px 5px; } -#scrollingTableWrapper th { -/* make the TH elements pretty */ -/* FIXME: change background to something that 'matches' the rest of the app */ +th { background: #C96; border-left: 1px solid #EB8; border-right: 1px solid #B74; border-top: 1px solid #EB8; - font-weight: normal; - color: white; + border-style: groove; + font-weight: bolder; padding: 4px 3px; white-space: nowrap; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-09 06:32:08
|
Revision: 158 Author: alllee Date: 2006-03-08 22:32:06 -0800 (Wed, 08 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=158&view=rev Log Message: ----------- apparently my FIXME was right - hibernate throws NPEs if I move the @Transient annotations from the accessors to the field itself (except for the Iterator, which doesn't have an accessor) Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-09 06:24:27 UTC (rev 157) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-09 06:32:06 UTC (rev 158) @@ -52,18 +52,16 @@ // transient fields (vaguely remember reading somewhere that it's better // to place these on the accessor methods instead, figure out if this is // the case) - @Transient private InetSocketAddress serverAddress; - @Transient private T currentParameters; - @Transient - private Iterator<T> parametersIterator; + private @Transient Iterator<T> parametersIterator; public ExperimentConfigurationEntity(String serverName, int port) { setServerName(serverName); setServerPort(port); } + @Transient public synchronized InetSocketAddress getServerAddress() { // FIXME: return configuration address instead? if (serverAddress == null) { @@ -131,6 +129,7 @@ currentParameters = parametersIterator.next(); } + @Transient public synchronized T getCurrentParameters() { List<T> allParameters = getAllParameters(); if (currentParameters == null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-09 06:24:29
|
Revision: 157 Author: alllee Date: 2006-03-08 22:24:27 -0800 (Wed, 08 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=157&view=rev Log Message: ----------- forgot to add the consent form service apparently. Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java Added: trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormService.java 2006-03-09 06:24:27 UTC (rev 157) @@ -0,0 +1,33 @@ +package edu.indiana.psych.gee.service; + +import java.util.List; + +import edu.indiana.psych.gee.ConsentForm; + +/** + * $Id: Exp $ + * + * Service managing access to and persistence of all consent forms. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public class ConsentFormService { + + private ConsentFormDao consentFormDao; + + // FIXME: write the HQL to generate this. + public List<ConsentForm> findAll() { + return null; + } + + public void update(ConsentForm consentForm) { + consentFormDao.update(consentForm); + } + + public void setConsentFormDao(ConsentFormDao consentFormDao) { + this.consentFormDao = consentFormDao; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-09 06:16:03
|
Revision: 156 Author: alllee Date: 2006-03-08 22:15:53 -0800 (Wed, 08 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=156&view=rev Log Message: ----------- adding services and DAOs for consent forms and experiment configuration, minor hygiene on ExperimentConfigurationEntity. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/ConsentForm.java trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java trunk/gee/war/WEB-INF/classes/log4j.properties Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-09 05:27:32 UTC (rev 155) +++ trunk/gee/src/java/edu/indiana/psych/gee/AbstractExperiment.java 2006-03-09 06:15:53 UTC (rev 156) @@ -52,7 +52,7 @@ } if ( isRunning() ) { throw new UnsupportedOperationException("AbstractExperiment does " + - "not support hot-reconfiguration yet"); + "not support reconfiguration while running yet"); } this.configuration = configuration; } Modified: trunk/gee/src/java/edu/indiana/psych/gee/ConsentForm.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ConsentForm.java 2006-03-09 05:27:32 UTC (rev 155) +++ trunk/gee/src/java/edu/indiana/psych/gee/ConsentForm.java 2006-03-09 06:15:53 UTC (rev 156) @@ -24,7 +24,8 @@ @Table(name="consent_form") public class ConsentForm { - private int id = -1; + // are longs overkill? + private Long id = Long.valueOf(-1); private String description; private String deception; @@ -38,10 +39,10 @@ private Date irbDateApproved; @Id @GeneratedValue - public int getId() { + public Long getId() { return id; } - public void setId(int id) { + public void setId(Long id) { this.id = id; } public String getBenefits() { Modified: trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-09 05:27:32 UTC (rev 155) +++ trunk/gee/src/java/edu/indiana/psych/gee/ExperimentConfigurationEntity.java 2006-03-09 06:15:53 UTC (rev 156) @@ -19,8 +19,11 @@ /** * $Id$ * - * Helps specific ExperimentConfiguration-S read in their configuration data - * from a variety of sources. + * Provides hibernate object/relational annotations for fields common to most + * ExperimentConfigurations, things like consent forms, experiment names, and + * a Collection of ExperimentRoundParameters. If you don't want to store your + * configuration information in a database, subclass + * ExperimentConfigurationFile instead (which isn't written yet ;-). * * * @author Allen Lee @@ -37,7 +40,7 @@ private final static String DEFAULT_SERVER_ADDRESS = "groups.psych.indiana.edu"; // persistent fields - private long id = -1; + private Long id = Long.valueOf(-1); private String description; private String experimentName; private String clientJarName; @@ -46,17 +49,21 @@ private int serverPort; private String serverName; private boolean triggeredExperiment; - // transient fields + // transient fields (vaguely remember reading somewhere that it's better + // to place these on the accessor methods instead, figure out if this is + // the case) + @Transient private InetSocketAddress serverAddress; + @Transient private T currentParameters; - private @Transient Iterator<T> parametersIterator; + @Transient + private Iterator<T> parametersIterator; public ExperimentConfigurationEntity(String serverName, int port) { setServerName(serverName); setServerPort(port); } - @Transient public synchronized InetSocketAddress getServerAddress() { // FIXME: return configuration address instead? if (serverAddress == null) { @@ -75,11 +82,11 @@ } @Id @GeneratedValue - public long getId() { + public Long getId() { return id; } - public void setId(long id) { + public void setId(Long id) { this.id = id; } @@ -108,8 +115,7 @@ this.triggeredExperiment = triggeredExperiment; } - @ManyToOne(targetEntity=ConsentForm.class) - @JoinColumn(name="consent_id") + @ManyToOne public ConsentForm getConsentForm() { return consentForm; } @@ -125,7 +131,6 @@ currentParameters = parametersIterator.next(); } - @Transient public synchronized T getCurrentParameters() { List<T> allParameters = getAllParameters(); if (currentParameters == null) { Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-09 05:27:32 UTC (rev 155) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-09 06:15:53 UTC (rev 156) @@ -64,6 +64,8 @@ private boolean roundRunning; + // FIXME: instead, need to find configurations from + // ExperimentConfigurationDao, yes? public ForagerExperiment(ForagerConfiguration configuration) { addEventProcessors(); getLogger().debug("Creating a new ForagerExperiment with configuration: " + configuration); Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java 2006-03-09 05:27:32 UTC (rev 155) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java 2006-03-09 06:15:53 UTC (rev 156) @@ -23,7 +23,7 @@ private ForagerAgentConfiguration agentConfiguration; private ForagerConfiguration configuration; - private long id = -1; + private Long id = Long.valueOf(-1L); private String name; private int foodSpoilDuration; private double foodRate; @@ -37,11 +37,11 @@ private String specialInstructions; @Id @GeneratedValue - public long getId() { + public Long getId() { return id; } - public void setId(long id) { + public void setId(Long id) { this.id = id; } Added: trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ConsentFormDao.java 2006-03-09 06:15:53 UTC (rev 156) @@ -0,0 +1,27 @@ +package edu.indiana.psych.gee.service; + +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +import edu.indiana.psych.gee.ConsentForm; + +/** + * $Id: Exp $ + * + * Hibernate data access object for consent forms. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public class ConsentFormDao extends HibernateDaoSupport { + + + public ConsentForm find(Integer id) { + return (ConsentForm) getHibernateTemplate().get(ConsentForm.class, id); + } + + public void update(ConsentForm consentForm) { + getHibernateTemplate().saveOrUpdate(consentForm); + } + +} Added: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationDao.java 2006-03-09 06:15:53 UTC (rev 156) @@ -0,0 +1,28 @@ +package edu.indiana.psych.gee.service; + +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +import edu.indiana.psych.gee.ExperimentConfiguration; +import edu.indiana.psych.gee.ExperimentConfigurationEntity; + +/** + * $Id: Exp $ + * + * Data access object for persisting experiment configurations, should also + * take care of experiment round parameters. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public class ExperimentConfigurationDao extends HibernateDaoSupport { + + public <E extends ExperimentConfigurationEntity> E find(Class<E> configurationClass, Integer id) { + return configurationClass.cast(getHibernateTemplate().get(configurationClass, id)); + } + + public void update(ExperimentConfiguration configuration) { + getHibernateTemplate().saveOrUpdate(configuration); + } + +} Added: trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/service/ExperimentConfigurationService.java 2006-03-09 06:15:53 UTC (rev 156) @@ -0,0 +1,41 @@ +package edu.indiana.psych.gee.service; + +import java.io.InputStream; + +import edu.indiana.psych.gee.ExperimentConfiguration; +import edu.indiana.psych.gee.ExperimentConfigurationEntity; + +/** + * $Id: Exp $ + * + * Handles requests for manipulating experiment configurations, this includes + * database and flat file persistence, uploading new experiment + * configurations, and other editing, etc. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision: $ + */ + +public class ExperimentConfigurationService { + + private ExperimentConfigurationDao experimentConfigurationDao; + + public <E extends ExperimentConfiguration> E load(Class<E> configurationClass, InputStream stream) { + + return null; + } + + public <E extends ExperimentConfigurationEntity> E find(Class<E> configurationClass, Integer id) { + return experimentConfigurationDao.find(configurationClass, id); + } + + + public void update(ExperimentConfiguration configuration) { + experimentConfigurationDao.update(configuration); + } + + public void setExperimentConfigurationDao(ExperimentConfigurationDao experimentConfigurationDao) { + this.experimentConfigurationDao = experimentConfigurationDao; + } + +} Modified: trunk/gee/war/WEB-INF/classes/log4j.properties =================================================================== --- trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-09 05:27:32 UTC (rev 155) +++ trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-09 06:15:53 UTC (rev 156) @@ -7,6 +7,9 @@ # Spring Stuff log4j.logger.org.springframework=INFO +# turn off introspection crap from freemarker beans +log4j.logger.freemarker.beans=WARN + # commons digester crap log4j.logger.org.apache.commons.digester=ERROR log4j.logger.org.hibernate=DEBUG This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-09 05:27:40
|
Revision: 155 Author: alllee Date: 2006-03-08 21:27:32 -0800 (Wed, 08 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=155&view=rev Log Message: ----------- factoring out ajax and admin actions into their own xwork configuration files to be included by the main xwork.xml file, adding login authentication to the admin package next. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java trunk/gee/war/WEB-INF/classes/log4j.properties trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/admin/configureExperiment.jsp trunk/gee/war/admin/listExperiments.jsp trunk/gee/war/css/gee.css Added Paths: ----------- trunk/gee/war/WEB-INF/classes/gee-admin.xml trunk/gee/war/WEB-INF/classes/gee-ajax.xml Modified: trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java 2006-03-09 05:27:32 UTC (rev 155) @@ -46,6 +46,11 @@ return SUCCESS; } + public String updateExperimentConfiguration() { + getLogger().debug("Updating experiment configuration: " + experimentName); + return SUCCESS; + } + public String stop() { Experiment experiment = getExperiment(); getLogger().debug("Stopping: " + experimentName + ": " + experiment); Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerConfiguration.java 2006-03-09 05:27:32 UTC (rev 155) @@ -48,6 +48,15 @@ @OneToMany(mappedBy="configuration") @JoinColumn(name="configuration_id") public List<ForagerExperimentParameters> getAllParameters() { + /* + if (allParameters == null) { + allParameters = new java.util.ArrayList<ForagerExperimentParameters>(); + ForagerExperimentParameters params = new ForagerExperimentParameters(); + params.setConfiguration(this); + params.setSpecialInstructions("Very special forager instructions... very special indeed."); + allParameters.add(params); + } + */ return allParameters; } Added: trunk/gee/war/WEB-INF/classes/gee-admin.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-admin.xml (rev 0) +++ trunk/gee/war/WEB-INF/classes/gee-admin.xml 2006-03-09 05:27:32 UTC (rev 155) @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- +vim:sts=2:sw=2: +--> +<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"> +<xwork> + <include file="webwork-default.xml"/> + <!-- + admin package o' actions and urls. define the login filter here? + --> + <package name="admin" extends="webwork-default" namespace="/admin"> + <action name="index" class="edu.indiana.psych.gee.action.AdminAction" method="authenticate"> + <result name="success" type="freemarker">listExperiments.jsp</result> + <result name="error">error.jsp</result> + </action> + <action name="configure" class="edu.indiana.psych.gee.action.AdminAction" method="configure"> + <result name="success" type="freemarker">configureExperiment.jsp</result> + </action> + <action name="list" class="edu.indiana.psych.gee.action.AdminAction" method="listExperiments"> + <result name="success" type="freemarker">listExperiments.jsp</result> + <result name="error">error.jsp</result> + </action> + <action name="create" class="edu.indiana.psych.gee.action.AdminAction" method="createExperiment"> + <result name="success" type="redirect">listExperiments.jsp</result> + <result name="input">createExperiment.jsp</result> + </action> + <action name="start" class="edu.indiana.psych.gee.action.AdminAction" method="start"> + <result name="success" type="freemarker">listExperiments.jsp</result> + </action> + <action name="stop" class="edu.indiana.psych.gee.action.AdminAction" method="stop"> + <result name="success" type="freemarker">listExperiments.jsp</result> + </action> + <action name="update" class="edu.indiana.psych.gee.action.AdminAction" method="updateExperimentConfiguration"> + <result name="success" type="freemarker">configureExperiment.jsp</result> + </action> + </package> +</xwork> Added: trunk/gee/war/WEB-INF/classes/gee-ajax.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/gee-ajax.xml (rev 0) +++ trunk/gee/war/WEB-INF/classes/gee-ajax.xml 2006-03-09 05:27:32 UTC (rev 155) @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<!-- +vim:sts=2:sw=2: +--> +<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"> + +<xwork> + <include file="webwork-default.xml"/> + <!-- + ajax package, created to avoid SiteMesh templation as its results get + interpolated directly into a div somewhere and we don't want that + interpolation to come attached with a header/footer/etc. + --> + <package name="ajax" extends="webwork-default" namespace="/ajax"> + <action name="status" class="edu.indiana.psych.gee.action.AdminAction" method="status"> + <result name="success" type="freemarker">status.ajax</result> + </action> + </package> +</xwork> Modified: trunk/gee/war/WEB-INF/classes/log4j.properties =================================================================== --- trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-09 05:27:32 UTC (rev 155) @@ -1,7 +1,16 @@ -log4j.rootLogger=,stdout,rolling -log4j.logger.org.apache.commons.digester=error -log4j.logger.org.hibernate=debug +log4j.rootLogger=WARN,stdout,rolling +# OpenSymphony Stuff +log4j.logger.com.opensymphony=INFO +log4j.logger.com.opensymphony.webwork=DEBUG + +# Spring Stuff +log4j.logger.org.springframework=INFO + +# commons digester crap +log4j.logger.org.apache.commons.digester=ERROR +log4j.logger.org.hibernate=DEBUG + log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} - %p %c - %m%n Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-09 05:27:32 UTC (rev 155) @@ -5,14 +5,9 @@ <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.1.dtd"> <xwork> <include file="webwork-default.xml"/> -<!-- FIXME: cannot find the following - <include file="config-browser.xml"/> - <include file="xwork-validation.xml" /> - <include file="xwork-actionchaining.xml" /> - <include file="xwork-ajax.xml" /> - <include file="xwork-continuations.xml"/> - <include file="xwork-tags.xml"/> - --> + <include file="gee-ajax.xml"/> + <include file="gee-admin.xml"/> + <package name="default" extends="webwork-default"> <default-interceptor-ref name="defaultStack"/> <!-- the start page lists all available experiments --> @@ -30,32 +25,6 @@ <result name="input">getConsent.jsp</result> </action> </package> - <package name="ajax" extends="default" namespace="/ajax"> - <action name="status" class="edu.indiana.psych.gee.action.AdminAction" method="status"> - <result name="success" type="freemarker">status.ajax</result> - </action> - </package> - <package name="admin" extends="default" namespace="/admin"> - <action name="index" class="edu.indiana.psych.gee.action.AdminAction" method="authenticate"> - <result name="success" type="freemarker">listExperiments.jsp</result> - <result name="error">error.jsp</result> - </action> - <action name="configure" class="edu.indiana.psych.gee.action.AdminAction" method="configure"> - <result name="success" type="freemarker">configureExperiment.jsp</result> - </action> - <action name="list" class="edu.indiana.psych.gee.action.AdminAction" method="listExperiments"> - <result name="success" type="freemarker">listExperiments.jsp</result> - <result name="error">error.jsp</result> - </action> - <action name="create" class="edu.indiana.psych.gee.action.AdminAction" method="createExperiment"> - <result name="success" type="redirect">listExperiments.jsp</result> - <result name="input">createExperiment.jsp</result> - </action> - <action name="start" class="edu.indiana.psych.gee.action.AdminAction" method="start"> - <result name="success" type="freemarker">listExperiments.jsp</result> - </action> - <action name="stop" class="edu.indiana.psych.gee.action.AdminAction" method="stop"> - <result name="success" type="freemarker">listExperiments.jsp</result> - </action> - </package> + + </xwork> Modified: trunk/gee/war/admin/configureExperiment.jsp =================================================================== --- trunk/gee/war/admin/configureExperiment.jsp 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/war/admin/configureExperiment.jsp 2006-03-09 05:27:32 UTC (rev 155) @@ -9,12 +9,28 @@ <@ww.form action="updateExperimentConfiguration"> <@ww.textfield size="40" label="Server port" name="experiment.serverPort"/> <@ww.textfield size="40" label="Experiment name" name="experiment.name"/> - <@ww.textfield size="40" label="Server Address" name="experiment.configuration.serverAddress"/> + <@ww.textfield size="40" label="Server name" name="experiment.configuration.serverName"/> <@ww.textarea cols="37" rows="6" label="Description" name="experiment.description"/> - <@ww.submit label="Load from file:" value="Submit"/> + <@ww.submit value="Modify"/> </@ww.form> +<#if experiment.configuration.allParameters?exists> +<ul> + <#list experiment.configuration.allParameters as experimentParameters> + <li>Board size: ${experimentParameters.boardSize}</li> + <li>Special instructions: ${experimentParameters.specialInstructions}</li> + </#list> +</ul> +<#else> +<h3> +<div id="Error"> +No experiment parameters associated with ${experiment.name}, please add some! +</div> +</h3> +</#if> +<hr/> <@ww.form> <!-- FIXME: use ajax to load crap in the form above --> - <@ww.file name="'foragerConfigurationFile'"/> + <@ww.file label="Add experiment parameters from file: " name="'experimentParametersFile'"/> + <@ww.submit value="Load"/> </@ww.form> </body> Modified: trunk/gee/war/admin/listExperiments.jsp =================================================================== --- trunk/gee/war/admin/listExperiments.jsp 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/war/admin/listExperiments.jsp 2006-03-09 05:27:32 UTC (rev 155) @@ -11,7 +11,7 @@ <th>Status</th> <th>Action</th> </tr> -<#list experiments as experiment> + <#list experiments as experiment> <tr> <td width="10%">${experiment.name}</td> <td width="50%">${experiment.description}</td> @@ -35,6 +35,6 @@ ) </td> </tr> -</#list> + </#list> </table> </body> Modified: trunk/gee/war/css/gee.css =================================================================== --- trunk/gee/war/css/gee.css 2006-03-08 16:42:46 UTC (rev 154) +++ trunk/gee/war/css/gee.css 2006-03-09 05:27:32 UTC (rev 155) @@ -6,7 +6,7 @@ } #Error { - color: #EE7942; + color: #802A2A; font-weight: bold; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-08 16:42:52
|
Revision: 154 Author: alllee Date: 2006-03-08 08:42:46 -0800 (Wed, 08 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=154&view=rev Log Message: ----------- Creating an ajax directory and package for all ajax page results to live in. The reason for this is so we can configure SiteMesh not to decorate these page results - in order to do this we have to make requests to WebWork Actions that live in a separate namespace, e.g., /ajax/status.action and so on. Modified Paths: -------------- trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/WEB-INF/decorators.xml trunk/gee/war/admin/listExperiments.jsp trunk/gee/war/css/gee.css Added Paths: ----------- trunk/gee/war/ajax/ trunk/gee/war/ajax/status.ajax Modified: trunk/gee/war/WEB-INF/classes/xwork.xml =================================================================== --- trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-08 01:53:28 UTC (rev 153) +++ trunk/gee/war/WEB-INF/classes/xwork.xml 2006-03-08 16:42:46 UTC (rev 154) @@ -30,6 +30,11 @@ <result name="input">getConsent.jsp</result> </action> </package> + <package name="ajax" extends="default" namespace="/ajax"> + <action name="status" class="edu.indiana.psych.gee.action.AdminAction" method="status"> + <result name="success" type="freemarker">status.ajax</result> + </action> + </package> <package name="admin" extends="default" namespace="/admin"> <action name="index" class="edu.indiana.psych.gee.action.AdminAction" method="authenticate"> <result name="success" type="freemarker">listExperiments.jsp</result> @@ -38,9 +43,6 @@ <action name="configure" class="edu.indiana.psych.gee.action.AdminAction" method="configure"> <result name="success" type="freemarker">configureExperiment.jsp</result> </action> - <action name="status" class="edu.indiana.psych.gee.action.AdminAction" method="status"> - <result>status.jsp</result> - </action> <action name="list" class="edu.indiana.psych.gee.action.AdminAction" method="listExperiments"> <result name="success" type="freemarker">listExperiments.jsp</result> <result name="error">error.jsp</result> Modified: trunk/gee/war/WEB-INF/decorators.xml =================================================================== --- trunk/gee/war/WEB-INF/decorators.xml 2006-03-08 01:53:28 UTC (rev 153) +++ trunk/gee/war/WEB-INF/decorators.xml 2006-03-08 16:42:46 UTC (rev 154) @@ -3,6 +3,9 @@ vim:sts=2:sw=2: --> <decorators defaultdir="/"> + <excludes> + <pattern>/ajax/*</pattern> + </excludes> <decorator name="main" page="template.jsp"> <pattern>/*</pattern> </decorator> Modified: trunk/gee/war/admin/listExperiments.jsp =================================================================== --- trunk/gee/war/admin/listExperiments.jsp 2006-03-08 01:53:28 UTC (rev 153) +++ trunk/gee/war/admin/listExperiments.jsp 2006-03-08 16:42:46 UTC (rev 154) @@ -16,17 +16,17 @@ <td width="10%">${experiment.name}</td> <td width="50%">${experiment.description}</td> <td width="15%"> - <@ww.div id="status" href="status.action?experimentName=${experiment.name}" listenTopics="start, stop"> + <@ww.div id="status" href="/ajax/status.action?experimentName=${experiment.name}" listenTopics="start, stop"> ${experiment.running?string("running", "not running")} </@ww.div> </td> <td width="25%"> ( - <@ww.a id="start" href="start.action" notifyTopics="start" experimentName="${experiment.name}"> + <@ww.a id="start" href="start.action?experimentName=${experiment.name}" notifyTopics="start"> Start </@ww.a> | - <@ww.a id="stop" href='stop.action' notifyTopics="stop" experimentName="${experiment.name}"> + <@ww.a id="stop" href='stop.action?experimentName=${experiment.name}' notifyTopics="stop" > Stop </@ww.a> | Added: trunk/gee/war/ajax/status.ajax =================================================================== --- trunk/gee/war/ajax/status.ajax (rev 0) +++ trunk/gee/war/ajax/status.ajax 2006-03-08 16:42:46 UTC (rev 154) @@ -0,0 +1 @@ +<font color='brown'>${experiment.running?string("running", "not running")}</font> Modified: trunk/gee/war/css/gee.css =================================================================== --- trunk/gee/war/css/gee.css 2006-03-08 01:53:28 UTC (rev 153) +++ trunk/gee/war/css/gee.css 2006-03-08 16:42:46 UTC (rev 154) @@ -115,7 +115,6 @@ border-right: 1px solid #B74; border-top: 1px solid #EB8; font-weight: normal; - font: Arial, Helvetica, sans-serif; color: white; padding: 4px 3px; white-space: nowrap; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-08 01:53:39
|
Revision: 153 Author: alllee Date: 2006-03-07 17:53:28 -0800 (Tue, 07 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=153&view=rev Log Message: ----------- moving servlet-api.jar from WEB-INF/lib to the top level lib directory as it doesn't need to be packaged up with the deployed web app. Modified Paths: -------------- trunk/gee/build.xml trunk/gee/lib/javazoom.jar trunk/gee/src/java/edu/indiana/psych/gee/action/AdminAction.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperimentParameters.java trunk/gee/war/WEB-INF/classes/xwork.xml trunk/gee/war/admin/configureExperiment.jsp trunk/gee/war/admin/listExperiments.jsp Added Paths: ----------- trunk/gee/lib/servlet-api.jar Removed Paths: ------------- trunk/gee/lib/jnlp.jar trunk/gee/war/WEB-INF/lib/servlet-api.jar Modified: trunk/gee/build.xml =================================================================== --- trunk/gee/build.xml 2006-03-06 04:42:38 UTC (rev 152) +++ trunk/gee/build.xml 2006-03-08 01:53:28 UTC (rev 153) @@ -33,8 +33,11 @@ <path id="build.classpath"> <pathelement location="." /> + <fileset dir='${lib.dir}'> + <include name='**/*.jar'/> + </fileset> <fileset dir="${web.lib.dir}"> - <include name="**/*.jar" /> + <include name="**/*.jar" /> </fileset> <pathelement location="${build.classes.dir}" /> <pathelement location="${test.build.dir}"/> Modified: trunk/gee/lib/javazoom.jar =================================================================== (Binary files differ) Deleted: trunk/gee/lib/jnlp.jar =================================================================== --- trunk/gee/lib/jnlp.jar 2006-03-06 04:42:38 UTC (rev 152) +++ trunk/gee/lib/jnlp.jar 2006-03-08 01:53:28 UTC (rev 153) @@ -1,60 +0,0 @@ -PK |
From: <al...@us...> - 2006-03-06 04:42:45
|
Revision: 152 Author: alllee Date: 2006-03-05 20:42:38 -0800 (Sun, 05 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=152&view=rev Log Message: ----------- added transaction manager and manually specifying the bean name for PropertyPlaceholderConfigurer to configurate our mysql data source (replacing ${geedb.(name|user|password)} with the appropriate values from jdbc.properties. Modified Paths: -------------- trunk/gee/build.xml trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java trunk/gee/war/WEB-INF/applicationContext.xml trunk/gee/war/WEB-INF/classes/log4j.properties trunk/gee/war/admin/configureExperiment.jsp Modified: trunk/gee/build.xml =================================================================== --- trunk/gee/build.xml 2006-03-05 21:36:36 UTC (rev 151) +++ trunk/gee/build.xml 2006-03-06 04:42:38 UTC (rev 152) @@ -158,7 +158,7 @@ <target name='post-deploy'> <chmod dir='${webapp.deploy.dir}' perm='664' type='file' includes='**'/> - <chmod dir='${webapp.deploy.dir}' perm='755' type='dir' includes='**'/> + <chmod dir='${build.dir}' perm='755' type='dir' includes='**'/> </target> Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-05 21:36:36 UTC (rev 151) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-06 04:42:38 UTC (rev 152) @@ -121,9 +121,19 @@ }); } + + /** + * Naive throttling mechanism to prevent bots from moving too quickly. + */ + private boolean shouldAgentMove() { + float agentMovementRate = + getConfiguration().getCurrentParameters().getAgentConfiguration().getMovementRate(); + return Math.random() > agentMovementRate; + } + /** - * Processes all the clients message queues. + * Processes all clients message queues. */ private void process() { // update ForagerGameState with the next command for each and every client @@ -140,12 +150,10 @@ // motion.. currentParticipantHeadings.put(id, null); } - // update ForagerGameState with the bot's current decisions. - float agentMovementRate = getCurrentParameters().getAgentConfiguration().getMovementRate(); for (ForagerAgent agent: agents) { - // this line must be outside the if so that the for will progress - // and not keep iterating until Math.random() < botMovementRate - if (Math.random() < agentMovementRate) { + if ( shouldAgentMove() ) { + // update ForagerGameState with the bot's next move if the bot + // gets a move. foragerGameState.moveClient(agent.id(), agent.nextMove()); } } @@ -301,7 +309,7 @@ } // initialize per-round objects. getConfiguration().updateCurrentParameters(); - ForagerExperimentParameters parameters = getCurrentParameters(); + ForagerExperimentParameters parameters = getConfiguration().getCurrentParameters(); // FIXME: move this configuration into its own method or // something. debriefingAssistant = new DebriefingAssistant(getEventChannel(), currentParticipantHeadings.keySet()); @@ -416,17 +424,13 @@ } } - private ForagerExperimentParameters getCurrentParameters() { - return getConfiguration().getCurrentParameters(); - } - private void saveExperiment() { if (persister == null) { getLogger().error("null persister, cannot save experiment!"); throw new IllegalStateException("Null persister, couldn't save experiment data."); } try { - if (getCurrentParameters().shouldPersist(currentParticipantHeadings.size())) { + if (getConfiguration().getCurrentParameters().shouldPersist(currentParticipantHeadings.size())) { doSaveExperiment(SAVED_DATA_DIRECTORY); } else { Modified: trunk/gee/war/WEB-INF/applicationContext.xml =================================================================== --- trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-05 21:36:36 UTC (rev 151) +++ trunk/gee/war/WEB-INF/applicationContext.xml 2006-03-06 04:42:38 UTC (rev 152) @@ -3,20 +3,27 @@ vim:sts=2:sw=2: --> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> -<beans default-autowire="autodetect"> - <!-- persistence layer beans --> +<beans> + <!-- XXX persistence layer beans XXX --> + + <!-- property configurer interpolates the appropriate database name, user, + and password into the mysql data source from the jdbc.properties file --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="/WEB-INF/jdbc.properties"/> + <property name="beanName" value="mysqlDataSource"/> </bean> + <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> - <property name="url" value="jdbc:mysql://localhost:3306/${geedb.name}"/> + <property name="url" value="jdbc:mysql://localhost/${geedb.name}"/> <property name="username" value="${geedb.user}"/> <property name="password" value="${geedb.password}"/> </bean> + + <!-- hibernate beans, session factory and transaction manager --> <bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> - <property name="configLocation" value="WEB-INF/hibernate.cfg.xml"/> + <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml"/> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/> <property name="hibernateProperties"> <props> @@ -29,17 +36,20 @@ <ref bean="mysqlDataSource"/> </property> </bean> + <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> + <property name="sessionFactory"> + <ref local="hibernateSessionFactory"/> + </property> + </bean> <!-- application layer beans --> <bean id="experimentService" class="edu.indiana.psych.gee.service.ExperimentService"/> <bean id="defaultForagerConfiguration" class="edu.indiana.psych.gee.forager.ForagerConfiguration"> <constructor-arg value="groups.psych.indiana.edu"/> <constructor-arg type="int"><value>26000</value></constructor-arg> <property name="experimentName" value="forager"/> - <property name="description" - value="The Forager experiment explores how individuals allocate themselves - in a world with scarce resources"/> - <property name='clientJarName' value='forager-client.jar'/> - <property name='clientMainClass' value='edu.indiana.psych.gee.forager.ForagerApplet'/> + <property name="description" value="The Forager experiment explores how individuals allocate themselves in a world with scarce resources."/> + <property name='clientJarName' value='forager-client.jar'/> + <property name='clientMainClass' value='edu.indiana.psych.gee.forager.client.ForagerApplet'/> </bean> <bean id="forager-web" class="edu.indiana.psych.gee.forager.ForagerExperiment"> <constructor-arg ref="defaultForagerConfiguration"/> Modified: trunk/gee/war/WEB-INF/classes/log4j.properties =================================================================== --- trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-05 21:36:36 UTC (rev 151) +++ trunk/gee/war/WEB-INF/classes/log4j.properties 2006-03-06 04:42:38 UTC (rev 152) @@ -1,4 +1,5 @@ log4j.rootLogger=,stdout,rolling +log4j.logger.org.apache.commons.digester=error log4j.logger.org.hibernate=debug log4j.appender.stdout=org.apache.log4j.ConsoleAppender Modified: trunk/gee/war/admin/configureExperiment.jsp =================================================================== --- trunk/gee/war/admin/configureExperiment.jsp 2006-03-05 21:36:36 UTC (rev 151) +++ trunk/gee/war/admin/configureExperiment.jsp 2006-03-06 04:42:38 UTC (rev 152) @@ -7,10 +7,10 @@ Configuring the <span class="highlight">${experiment.name}</span> experiment: </p> <@ww.form action="updateExperimentConfiguration"> - <@ww.textfield label="Server port" name="experiment.serverPort"/> - <@ww.textfield label="Name" name="experiment.name"/> - <@ww.textfield label="Server Address" name="experiment.configuration.serverAddress"/> - <@ww.textfield label="Description" name="experiment.description"/> + <@ww.textfield size="40" label="Server port" name="experiment.serverPort"/> + <@ww.textfield size="40" label="Experiment name" name="experiment.name"/> + <@ww.textfield size="40" label="Server Address" name="experiment.configuration.serverAddress"/> + <@ww.textarea cols="37" rows="6" label="Description" name="experiment.description"/> <@ww.submit value="Submit"/> </@ww.form> </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-05 21:36:46
|
Revision: 151 Author: alllee Date: 2006-03-05 13:36:36 -0800 (Sun, 05 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=151&view=rev Log Message: ----------- was considering implementing stream handling in the NioDispatcher, decided against it. Should instead open an AudioInputStream on with a serialized URL, though this might have security implications. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/event/EventChannel.java trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractDispatcher.java trunk/gee/src/java/edu/indiana/psych/gee/net/NioDispatcher.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/event/EventChannel.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/EventChannel.java 2006-03-05 20:39:40 UTC (rev 150) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/EventChannel.java 2006-03-05 21:36:36 UTC (rev 151) @@ -13,7 +13,7 @@ * @author Allen Lee * @version $Revision$ */ -public final class EventChannel implements EventGenerator, EventHandler { +public final class EventChannel implements EventGenerator, EventHandler<Event> { private final static EventChannel INSTANCE = new EventChannel(); Modified: trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractDispatcher.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractDispatcher.java 2006-03-05 20:39:40 UTC (rev 150) +++ trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractDispatcher.java 2006-03-05 21:36:36 UTC (rev 151) @@ -2,6 +2,7 @@ import edu.indiana.psych.gee.Identifier; +import edu.indiana.psych.gee.event.Event; import edu.indiana.psych.gee.event.EventChannel; import edu.indiana.psych.gee.event.EventHandler; @@ -26,7 +27,7 @@ this.channel = channel; } - public EventHandler getLocalEventHandler() { + public EventHandler<Event> getLocalEventHandler() { return channel; } Modified: trunk/gee/src/java/edu/indiana/psych/gee/net/NioDispatcher.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/net/NioDispatcher.java 2006-03-05 20:39:40 UTC (rev 150) +++ trunk/gee/src/java/edu/indiana/psych/gee/net/NioDispatcher.java 2006-03-05 21:36:36 UTC (rev 151) @@ -422,8 +422,7 @@ } public void report() { - StringBuffer msg = new StringBuffer(); - + StringBuilder msg = new StringBuilder(); msg.append(this + " has " + selector.keys().size() + " channels\n"); for (SocketChannel channel : channels) { // SocketChannel channel = (SocketChannel) iter.next(); @@ -431,7 +430,6 @@ msg.append(channel.toString()); msg.append('\n'); } - getLogger().debug(msg); } @@ -468,10 +466,9 @@ while (running) { // check to see if we have any new incoming channels. synchronized (channels) { - for (Iterator iter = channels.iterator(); - iter.hasNext(); ) + for (Iterator<SocketChannel> iter = channels.iterator(); iter.hasNext(); ) { - SocketChannel incoming = (SocketChannel) iter.next(); + SocketChannel incoming = iter.next(); iter.remove(); try { incoming.configureBlocking(false); @@ -488,10 +485,10 @@ // handle incoming data. try { if ( selector.select() >= 0 ) { - for (Iterator iterator = selector.selectedKeys().iterator(); + for (Iterator<SelectionKey> iterator = selector.selectedKeys().iterator(); iterator.hasNext(); ) { - SelectionKey key = (SelectionKey) iterator.next(); + SelectionKey key = iterator.next(); NioDispatcher.this.readData(key, buffer); iterator.remove(); } @@ -507,6 +504,4 @@ } } } - - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-05 20:39:47
|
Revision: 150 Author: alllee Date: 2006-03-05 12:39:40 -0800 (Sun, 05 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=150&view=rev Log Message: ----------- moving generic EventTypeProcessor into the event package. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/event/EventInstanceofConstraint.java trunk/gee/src/java/edu/indiana/psych/gee/forager/DebriefingAssistant.java trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java Added Paths: ----------- trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/event/generics/ Modified: trunk/gee/src/java/edu/indiana/psych/gee/event/EventInstanceofConstraint.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/EventInstanceofConstraint.java 2006-03-05 19:24:36 UTC (rev 149) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/EventInstanceofConstraint.java 2006-03-05 20:39:40 UTC (rev 150) @@ -5,40 +5,34 @@ * the constructor is the same as or a superinterface/superclass of the * <code>Class</code> of a defendant <code>Event</code>. * - * @author alllee + * @author <a href='al...@cs...'>Allen Lee</a> * @version $Revision$ */ public class EventInstanceofConstraint implements EventConstraint { /** - * The target type. + * The targetClass type. */ - private Class target; - + private final Class<? extends Event> targetClass; + /** - * Creates a new EventInstanceofConstraint that will match all GamespaceEvents - * that are of the given type, this includes subtypes. + * Creates a new EventInstanceofConstraint matching all Events that pass the + * (event instanceof targetClass) check. * - * @param target The type to target. - * @throws IllegalArgumentException if target is null or target is not an + * @param targetClass The type to targetClass. + * @throws IllegalArgumentException if targetClass is null or targetClass is not an * Event class. * @see java.lang.Class#isAssignableFrom(Class) */ - public EventInstanceofConstraint(Class target) { - if (target == null) { - throw new IllegalArgumentException("Given a null class."); + public EventInstanceofConstraint(Class<? extends Event> targetClass) { + if (targetClass == null) { + throw new IllegalArgumentException("Given a null class"); } - - if ( !Event.class.isAssignableFrom(target) ) { - throw new IllegalArgumentException( - "Given class must be an Event, instead was: " + target); - } - - this.target = target; + this.targetClass = targetClass; } /** - * Returns true if the Event is a superclass or superinterface of the - * target Class passed into the constructor of this constraint. + * Returns true if the Event is an instance of the targetClass used to + * instantiate this constraint. * * @param defendant An Event to check. * @@ -46,6 +40,6 @@ * @see java.lang.Class#isInstance(Object) */ public boolean accepts(Event defendant) { - return target.isInstance(defendant); + return targetClass.isInstance(defendant); } } Copied: trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java (from rev 149, trunk/gee/src/java/edu/indiana/psych/gee/event/generics/EventTypeProcessor.java) =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java (rev 0) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java 2006-03-05 20:39:40 UTC (rev 150) @@ -0,0 +1,33 @@ +package edu.indiana.psych.gee.event; + + +/** + * $Id$ + * + * Generified version of EventTypeProcessor. + * + * @author <a href='al...@cs...'>Allen Lee</a> + * @version $Revision$ + */ + +public abstract class EventTypeProcessor<E extends Event> implements EventProcessor<E> { + + private final EventConstraint constraint; + + /** + * FIXME: find a way to get around having to specify the type of the class + * twice, if possible. E.g., we have to do something like this currently: + * new EventTypeProcessor<ConnectionEvent>(ConnectionEvent.class) { ... } + * + * Wish there was a way to infer the type variable for the entire class + * from the constructor. + */ + public EventTypeProcessor(Class<E> eventClass) { + this.constraint = new EventInstanceofConstraint(eventClass); + } + + public boolean accepts(Event event) { + return constraint.accepts(event); + } + +} Property changes on: trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/DebriefingAssistant.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/DebriefingAssistant.java 2006-03-05 19:24:36 UTC (rev 149) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/DebriefingAssistant.java 2006-03-05 20:39:40 UTC (rev 150) @@ -12,8 +12,8 @@ import edu.indiana.psych.gee.event.Event; import edu.indiana.psych.gee.event.EventChannel; import edu.indiana.psych.gee.event.EventProcessor; +import edu.indiana.psych.gee.event.EventTypeProcessor; import edu.indiana.psych.gee.event.PersistableEvent; -import edu.indiana.psych.gee.event.generics.EventTypeProcessor; import edu.indiana.psych.gee.forager.event.FoodAddedEvent; @@ -52,7 +52,7 @@ public boolean accepts(Event event) { return super.accepts(event) && ! (event.id() instanceof AgentIdentifier); } - public void process(PersistableEvent event) { + public void handle(PersistableEvent event) { if (event instanceof FoodAddedEvent) { // give it to every client. for (TreeSet<PersistableEvent> actions : clientActions.values()) { @@ -84,7 +84,7 @@ public synchronized void clear() { clientActions.clear(); - channel.remove(this); + channel.unregister(this); } } Modified: trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-05 19:24:36 UTC (rev 149) +++ trunk/gee/src/java/edu/indiana/psych/gee/forager/ForagerExperiment.java 2006-03-05 20:39:40 UTC (rev 150) @@ -17,9 +17,9 @@ import edu.indiana.psych.gee.event.BeginExperimentRequest; import edu.indiana.psych.gee.event.EndRoundEvent; import edu.indiana.psych.gee.event.EventProcessor; +import edu.indiana.psych.gee.event.EventTypeProcessor; import edu.indiana.psych.gee.event.RegistrationEvent; import edu.indiana.psych.gee.event.RoundStartedEvent; -import edu.indiana.psych.gee.event.generics.EventTypeProcessor; import edu.indiana.psych.gee.forager.ForagerAgentFactory.ForagerAgent; import edu.indiana.psych.gee.forager.event.ClientPositionUpdateEvent; import edu.indiana.psych.gee.forager.event.ClientUpdateEvent; @@ -87,13 +87,14 @@ private void addEventProcessors() { List<EventProcessor> processors = getEventChannel().register(this); + processors.add(new EventTypeProcessor<AbortExperimentRequest>(AbortExperimentRequest.class) { - public void process(AbortExperimentRequest event) { + public void handle(AbortExperimentRequest event) { } }); processors.add(new EventTypeProcessor<ClientReadyEvent>(ClientReadyEvent.class) { - public void process(ClientReadyEvent event) { + public void handle(ClientReadyEvent event) { synchronized (queuedParticipants) { if ( queuedParticipants.remove(event.id()) ) { readyToJoinParticipants.add(event.id()); @@ -103,7 +104,7 @@ } }); processors.add(new EventTypeProcessor<ClientUpdateEvent>(ClientUpdateEvent.class) { - public void process(ClientUpdateEvent event) { + public void handle(ClientUpdateEvent event) { synchronized (currentParticipantHeadings) { currentParticipantHeadings.put(event.id(), event.getDirection()); } @@ -111,7 +112,7 @@ }); // handles incoming connections. processors.add(new EventTypeProcessor<ConnectionEvent>(ConnectionEvent.class) { - public void process(ConnectionEvent event) { + public void handle(ConnectionEvent event) { synchronized (queuedParticipants) { queuedParticipants.add(event.id()); } @@ -195,15 +196,11 @@ } } } - - - - + protected StateMachine getStateMachine() { return foragerStateMachine; } - private long timeRemaining() { // return roundStopTime - getCurrentTime(); return currentRoundDuration.getTimeLeft(); @@ -241,7 +238,7 @@ state = ForagerState.WAITING; timeToNextRound = getTimeToNextRound(); getEventChannel().add(new EventTypeProcessor<BeginExperimentRequest>(BeginExperimentRequest.class) { - public void process(BeginExperimentRequest event) { + public void handle(BeginExperimentRequest event) { startRound(); } }); Modified: trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java 2006-03-05 19:24:36 UTC (rev 149) +++ trunk/gee/src/java/edu/indiana/psych/gee/net/AbstractServerDispatcher.java 2006-03-05 20:39:40 UTC (rev 150) @@ -10,7 +10,7 @@ import edu.indiana.psych.gee.Identifier; import edu.indiana.psych.gee.event.EventChannel; -import edu.indiana.psych.gee.event.generics.EventTypeProcessor; +import edu.indiana.psych.gee.event.EventTypeProcessor; /** * $Id$ @@ -35,7 +35,7 @@ public AbstractServerDispatcher(EventChannel channel) { super(channel); channel.add(this, new EventTypeProcessor<DisconnectionRequest>(DisconnectionRequest.class) { - public void process(DisconnectionRequest request) { + public void handle(DisconnectionRequest request) { logger.warn("disconnecting: " + request.id(), request.getException()); disconnectedClients.add( request.id() ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <al...@us...> - 2006-03-05 19:24:43
|
Revision: 149 Author: alllee Date: 2006-03-05 11:24:36 -0800 (Sun, 05 Mar 2006) ViewCVS: http://svn.sourceforge.net/gabel/?rev=149&view=rev Log Message: ----------- making generics/EventTypeProcessor the default. Modified Paths: -------------- trunk/gee/src/java/edu/indiana/psych/gee/event/EventHandler.java trunk/gee/src/java/edu/indiana/psych/gee/event/EventProcessor.java trunk/gee/src/java/edu/indiana/psych/gee/event/generics/EventTypeProcessor.java Removed Paths: ------------- trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java Modified: trunk/gee/src/java/edu/indiana/psych/gee/event/EventHandler.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/EventHandler.java 2006-03-05 18:16:20 UTC (rev 148) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/EventHandler.java 2006-03-05 19:24:36 UTC (rev 149) @@ -8,12 +8,12 @@ * @author alllee * @version $Revision$ */ -public interface EventHandler { +public interface EventHandler<E extends Event> { /** * Handles the given Event. * * @param event */ - public void handle(Event event); + public void handle(E event); } Modified: trunk/gee/src/java/edu/indiana/psych/gee/event/EventProcessor.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/EventProcessor.java 2006-03-05 18:16:20 UTC (rev 148) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/EventProcessor.java 2006-03-05 19:24:36 UTC (rev 149) @@ -10,6 +10,6 @@ * @version $Revision$ */ -public interface EventProcessor extends EventHandler, EventConstraint { +public interface EventProcessor<E extends Event> extends EventHandler<E>, EventConstraint { } Deleted: trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java 2006-03-05 18:16:20 UTC (rev 148) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/EventTypeProcessor.java 2006-03-05 19:24:36 UTC (rev 149) @@ -1,22 +0,0 @@ -package edu.indiana.psych.gee.event; - - -/** - * $Id$ - * - * Support class for processing events by type. - * - * @author <a href='al...@cs...'>Allen Lee</a> - * @version $Revision$ - */ - -public abstract class EventTypeProcessor implements EventProcessor { - private final EventConstraint constraint; - public EventTypeProcessor(Class eventClass) { - constraint = new EventInstanceofConstraint(eventClass); - } - - public boolean accepts(Event event) { - return constraint.accepts(event); - } -} Modified: trunk/gee/src/java/edu/indiana/psych/gee/event/generics/EventTypeProcessor.java =================================================================== --- trunk/gee/src/java/edu/indiana/psych/gee/event/generics/EventTypeProcessor.java 2006-03-05 18:16:20 UTC (rev 148) +++ trunk/gee/src/java/edu/indiana/psych/gee/event/generics/EventTypeProcessor.java 2006-03-05 19:24:36 UTC (rev 149) @@ -14,10 +14,9 @@ * @version $Revision$ */ -public abstract class EventTypeProcessor<E extends Event> implements EventProcessor { +public abstract class EventTypeProcessor<E extends Event> implements EventProcessor<E> { - private final Class<E> eventClass; - private EventConstraint constraint; + private final EventConstraint constraint; /** * FIXME: find a way to get around having to specify the type of the class @@ -28,22 +27,11 @@ * Which sucks. */ public EventTypeProcessor(Class<E> eventClass) { - this.eventClass = eventClass; + this.constraint = new EventInstanceofConstraint(eventClass); } public boolean accepts(Event event) { - if (constraint == null) { - constraint = new EventInstanceofConstraint(eventClass); - } +// return event instanceof E; return constraint.accepts(event); } - - public void handle(Event event) { - assert eventClass.isInstance(event); - process( eventClass.cast(event) ); - } - - // there must be a better way to do this. - protected abstract void process(E event); - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |