You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by im...@apache.org on 2007/02/22 18:25:50 UTC

svn commit: r510598 [1/6] - in /myfaces/fusion/trunk: ./ core/ core/src/ core/src/main/ core/src/main/java/ core/src/main/java/org/ core/src/main/java/org/apache/ core/src/main/java/org/apache/myfaces/ core/src/main/java/org/apache/myfaces/fusion/ core...

Author: imario
Date: Thu Feb 22 09:25:41 2007
New Revision: 510598

URL: http://svn.apache.org/viewvc?view=rev&rev=510598
Log:
initial import of new MyFaces Fusion project


Added:
    myfaces/fusion/trunk/core/
    myfaces/fusion/trunk/core/pom.xml   (with props)
    myfaces/fusion/trunk/core/src/
    myfaces/fusion/trunk/core/src/main/
    myfaces/fusion/trunk/core/src/main/java/
    myfaces/fusion/trunk/core/src/main/java/org/
    myfaces/fusion/trunk/core/src/main/java/org/apache/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/EndConversationTag.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/EnsureConversationTag.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/SeparateConversationContextTag.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/UIEndConversation.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/UIEnsureConversation.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/UISeparateConversationContext.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/lib/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/lib/EndConversationMethodBindingFacade.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/spring/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/spring/PersistenceContext.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/spring/PersistenceContextConversationInterceptor.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/spring/PersistenceContextFactory.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/spring/PersistentContextCloser.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/spring/SpringConversationScope.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/lib/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/lib/FakeMap.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/listeners/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/listeners/FusionPhaseListener.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/requestParameterProvider/
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/requestParameterProvider/RequestParameterProvider.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/requestParameterProvider/RequestParameterProviderManager.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/requestParameterProvider/RequestParameterResponseWrapper.java   (with props)
    myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/requestParameterProvider/RequestParameterServletFilter.java   (with props)
    myfaces/fusion/trunk/core/src/main/resources/
    myfaces/fusion/trunk/core/src/site/
    myfaces/fusion/trunk/core/src/test/
    myfaces/fusion/trunk/core/src/test/java/
    myfaces/fusion/trunk/core15/
    myfaces/fusion/trunk/core15/pom.xml   (with props)
    myfaces/fusion/trunk/core15/src/
    myfaces/fusion/trunk/core15/src/main/
    myfaces/fusion/trunk/core15/src/main/java/
    myfaces/fusion/trunk/core15/src/main/java/org/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/jsf/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/jsf/Converter.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/DataProvider.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/DisplayOnly.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/IgnoreProperty.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/Length.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/Max.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/Min.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/NotNull.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/Range.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/ReadOnly.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/Temporal.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/annot/ui/UIComponent.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaConfig.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaConfigTag.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaConfigs.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaConfigsTag.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaForm.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaFormRenderer.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/component/dynaForm/DynaFormTag.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/ComponentEnum.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/GuiBuilder.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/Slipstream.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/JsfGuiBuilder.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/JsfGuiBuilderDecorator.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/JsfGuiBuilderFactory.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/JsfGuiElementBuilder.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/NewComponentListener.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/jsf/ValueBindingDataSourceAdapter.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/myfaces/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/myfaces/MyFacesCheck.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/myfaces/MyFacesGuiBuilder.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/guiBuilder/impl/myfaces/SuggestSelectListMethodWrapper.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/jsfext/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/jsfext/ComponentUtils.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/jsfext/UIComponentTagUtils.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/ConditionEnum.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/DefaultValueMap.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/DynaFormException.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/MatchModeEnum.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/NullObject.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/ObjectSerializationConverter.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/OrderDirectionEnum.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/SelectionSourceEnum.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/SelectionTypeEnum.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/lib/ViewType.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/Extractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/FieldInterface.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/MetaData.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/MetaDataInterface.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/RelationType.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/Selection.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/ejb/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/ejb/BcelHelper.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/ejb/ClassHelper.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/ejb/ClassHelperFactory.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/ejb/EjbExtractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/ejb/JavaHelper.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/hibernate/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/hibernate/HibernateExtractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/jsf/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/jsf/AbstractJsfExtractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/jsf/JsfExclusiveExtractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/jsf/JsfExtractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/impl/jsf/JsfRequestFieldExtractor.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/utils/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/metadata/utils/TypeInfos.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/uri/
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/uri/FacesUriResolver.java   (with props)
    myfaces/fusion/trunk/core15/src/main/java/org/apache/myfaces/fusion/dynaForm/uri/UriResolver.java   (with props)
    myfaces/fusion/trunk/core15/src/main/resources/
    myfaces/fusion/trunk/core15/src/main/resources/META-INF/
    myfaces/fusion/trunk/core15/src/main/resources/META-INF/dynaForm-default.xml   (with props)
    myfaces/fusion/trunk/core15/src/main/resources/META-INF/faces-config.xml   (with props)
    myfaces/fusion/trunk/core15/src/main/tld/
    myfaces/fusion/trunk/core15/src/main/tld/misc/
    myfaces/fusion/trunk/core15/src/main/tld/misc/resolve_entities-tlddoc.xsl   (with props)
    myfaces/fusion/trunk/core15/src/main/tld/misc/resolve_entities.xsl   (with props)
    myfaces/fusion/trunk/core15/src/main/tld/myfaces_fusion15.tld
    myfaces/fusion/trunk/core15/src/test/
    myfaces/fusion/trunk/core15/src/test/java/
    myfaces/fusion/trunk/examples/
    myfaces/fusion/trunk/examples/pom.xml   (with props)
    myfaces/fusion/trunk/examples/src/
    myfaces/fusion/trunk/examples/src/main/
    myfaces/fusion/trunk/examples/src/main/java/
    myfaces/fusion/trunk/examples/src/main/resources/
    myfaces/fusion/trunk/examples/src/main/webapp/
    myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/
    myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/applicationContext.xml   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/faces-config.xml   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/web.xml   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/configurator/
    myfaces/fusion/trunk/examples/src/main/webapp/configurator/Checkout.jsp   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/configurator/Configurator.jsp   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/default.css   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/error.jsp   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/footer.jspf
    myfaces/fusion/trunk/examples/src/main/webapp/header.jspf
    myfaces/fusion/trunk/examples/src/main/webapp/images/
    myfaces/fusion/trunk/examples/src/main/webapp/index.jsp   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/start.jsp   (with props)
    myfaces/fusion/trunk/examples/src/main/webapp/web.xml   (with props)
    myfaces/fusion/trunk/examples/src/site/
    myfaces/fusion/trunk/pom.xml   (with props)

Added: myfaces/fusion/trunk/core/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/pom.xml?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/pom.xml (added)
+++ myfaces/fusion/trunk/core/pom.xml Thu Feb 22 09:25:41 2007
@@ -0,0 +1,343 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>org.apache.myfaces.fusion</groupId>
+	<artifactId>myfaces-fusion-core</artifactId>
+	<packaging>jar</packaging>
+	<name>MyFaces Fusion Core</name>
+
+	<parent>
+		<groupId>org.apache.myfaces.fusion</groupId>
+		<artifactId>myfaces-fusion-project</artifactId>
+		<version>1.0-SNAPSHOT</version>
+	</parent>
+
+	<scm>
+		<connection>scm:svn:http://svn.apache.org/repos/asf/myfaces/fusion/trunk/core</connection>
+		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/myfaces/fusion/trunk/core</developerConnection>
+		<url>http://svn.apache.org/viewcvs.cgi/myfaces/fusion/trunk/core</url>
+	</scm>
+
+	<dependencies>
+
+		<!-- compile dependencies -->
+
+		<dependency>
+			<groupId>commons-logging</groupId>
+			<artifactId>commons-logging</artifactId>
+			<version>1.0.4</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<!-- provided dependencies -->
+
+		<dependency>
+			<groupId>org.apache.myfaces.core</groupId>
+			<artifactId>myfaces-api</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.myfaces.shared</groupId>
+			<artifactId>myfaces-shared-fusion</artifactId>
+			<scope>provided</scope>
+			<!-- because we add all classes to the jar directly -->
+		</dependency>
+
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>jsp-api</artifactId>
+			<version>2.0</version>
+			<scope>provided</scope>
+		</dependency>
+
+
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.3</version>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring</artifactId>
+			<version>2.0.1</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<!-- test dependencies -->
+
+	</dependencies>
+
+	<build>
+
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+			</resource>
+		</resources>
+
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<excludes>
+						<exclude>**/Abstract*.java</exclude>
+					</excludes>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>dependency-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>unpack-shared-fusion</id>
+						<phase>process-classes</phase>
+						<goals>
+							<goal>unpack</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>org.apache.myfaces.shared</groupId>
+									<artifactId>myfaces-shared-fusion</artifactId>
+									<version>${myfaces-shared.version}</version>
+								</artifactItem>
+							</artifactItems>
+							<outputDirectory>${project.build.directory}/classes</outputDirectory>
+						</configuration>
+					</execution>
+					<!-- unpack the shared sources into target/shared_sources-->
+					<execution>
+						<id>unpack-shared-impl-sources</id>
+						<phase>process-sources</phase>
+						<goals>
+							<goal>unpack</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>org.apache.myfaces.shared</groupId>
+									<artifactId>myfaces-shared-fusion</artifactId>
+									<version>${myfaces-shared.version}</version>
+									<classifier>sources</classifier>
+								</artifactItem>
+							</artifactItems>
+							<outputDirectory>${project.build.directory}/shared_sources</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<!-- the following will add the unpacked shared sources directory as source directory into the pom,
+					   so also the shared sources are automaticaly included by the attach source plugin -->
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>add-source</id>
+						<phase>process-sources</phase>
+						<goals>
+							<goal>add-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>${project.build.directory}/shared_sources</source>
+							</sources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+
+	</build>
+
+	<reporting>
+
+		<plugins>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>changelog-maven-plugin</artifactId>
+				<version>2.0-beta-1</version>
+				<reportSets>
+					<reportSet>
+						<id>dual-report</id>
+						<configuration>
+							<type>range</type>
+							<range>30</range>
+						</configuration>
+						<reports>
+							<report>changelog</report>
+							<report>file-activity</report>
+							<report>dev-activity</report>
+						</reports>
+					</reportSet>
+				</reportSets>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.0-beta-3</version>
+			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>jxr-maven-plugin</artifactId>
+			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>taglist-maven-plugin</artifactId>
+				<version>2.0</version>
+			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>surefire-report-maven-plugin</artifactId>
+			</plugin>
+
+		</plugins>
+
+	</reporting>
+
+	<profiles>
+		<profile>
+			<id>generate-site</id>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.codehaus.mojo</groupId>
+						<artifactId>xslt-maven-plugin</artifactId>
+						<version>1.0</version>
+						<executions>
+							<execution>
+								<id>generate-tld-for-tlddoc</id>
+								<goals>
+									<goal>transform</goal>
+								</goals>
+								<configuration>
+									<xslFile>src/main/tld/misc/resolve_entities-tlddoc.xsl</xslFile>
+									<srcIncludes>**/*.tld</srcIncludes>
+									<srcDir>src/main/tld</srcDir>
+									<destDir>target/tlddoc-site</destDir>
+								</configuration>
+							</execution>
+							<execution>
+								<id>generate-tld-for-jar</id>
+								<goals>
+									<goal>transform</goal>
+								</goals>
+								<configuration>
+									<xslFile>src/main/tld/misc/resolve_entities.xsl</xslFile>
+									<srcIncludes>**/*.tld</srcIncludes>
+									<srcDir>src/main/tld</srcDir>
+									<destDir>target/classes/META-INF</destDir>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+
+			</build>
+			<reporting>
+				<plugins>
+					<plugin>
+						<groupId>net.sourceforge.maven-taglib</groupId>
+						<artifactId>maven-taglib-plugin</artifactId>
+						<configuration>
+							<taglib.src.dir>${basedir}/target/tlddoc-site</taglib.src.dir>
+							<tldDocDir>${basedir}/target/site/tlddoc</tldDocDir>
+						</configuration>
+					</plugin>
+				</plugins>
+			</reporting>
+		</profile>
+		<profile>
+			<id>generate-assembly</id>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.codehaus.mojo</groupId>
+						<artifactId>xslt-maven-plugin</artifactId>
+						<version>1.0</version>
+						<executions>
+							<execution>
+								<id>generate-tld-for-tlddoc</id>
+								<goals>
+									<goal>transform</goal>
+								</goals>
+								<configuration>
+									<xslFile>src/main/tld/misc/resolve_entities-tlddoc.xsl</xslFile>
+									<srcIncludes>**/*.tld</srcIncludes>
+									<srcDir>src/main/tld</srcDir>
+									<destDir>target/tlddoc-site</destDir>
+								</configuration>
+							</execution>
+							<execution>
+								<id>generate-tld-for-jar</id>
+								<goals>
+									<goal>transform</goal>
+								</goals>
+								<configuration>
+									<xslFile>src/main/tld/misc/resolve_entities.xsl</xslFile>
+									<srcIncludes>**/*.tld</srcIncludes>
+									<srcDir>src/main/tld</srcDir>
+									<destDir>target/classes/META-INF</destDir>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-javadoc-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>attach-javadoc</id>
+								<goals>
+									<goal>jar</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+					<plugin>
+						<groupId>net.sourceforge.maven-taglib</groupId>
+						<artifactId>maven-taglib-plugin</artifactId>
+						<configuration>
+							<taglib.src.dir>${basedir}/target/tlddoc-site</taglib.src.dir>
+							<tldDocDir>${basedir}/target/tlddoc</tldDocDir>
+						</configuration>
+						<executions>
+							<execution>
+								<id>attach-javadoc</id>
+								<goals>
+									<goal>taglibdocjar</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-source-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>attach-source</id>
+								<goals>
+									<goal>jar</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+
+</project>

Propchange: myfaces/fusion/trunk/core/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,221 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * handle conversation related stuff like beans
+ *
+ * @author imario@apache.org
+ */
+public class Conversation
+{
+	private final static ThreadLocal CURRENT_CONVERSATION = new ThreadLocal();
+
+	private final static Log log = LogFactory.getLog(Conversation.class);
+
+	private final String name;
+
+	private final Map beans = new TreeMap();
+
+	private boolean invalid = false;
+	private boolean queueInvalid = false;
+
+	private long lastAccess;
+
+	private Object activeCountMutex = new Object();
+	private int activeCount;
+
+	protected Conversation(String name)
+	{
+		this.name = name;
+
+		if (log.isDebugEnabled())
+		{
+			log.debug("start conversation:" + name);
+		}
+
+		touch();
+	}
+
+	protected void touch()
+	{
+		lastAccess = System.currentTimeMillis();
+	}
+
+	public long getLastAccess()
+	{
+		return lastAccess;
+	}
+
+	/**
+	 * Add the given bean to the conversation scope
+	 */
+	public void setAttribute(String name, Object value)
+	{
+		checkValid();
+
+		if (name.indexOf('.') > -1)
+		{
+			throw new IllegalArgumentException("you cant put a property under conversation control. name: " + name);
+		}
+
+		if (beans.containsKey(name))
+		{
+			// already there
+			return;
+		}
+
+		if (log.isDebugEnabled())
+		{
+			log.debug("put bean to conversation:" + name + "(bean=" + name + ")");
+		}
+
+		beans.put(name, value);
+	}
+
+	private void checkValid()
+	{
+		if (isInvalid())
+		{
+			throw new IllegalStateException("conversation " + getName() + " closed");
+		}
+	}
+
+	/**
+	 * the conversation name
+	 */
+	public String getName()
+	{
+		checkValid();
+
+		return name;
+	}
+
+	public void invalidate()
+	{
+		if (!isActive())
+		{
+			destroy();
+		}
+		else
+		{
+			queueInvalid = true;
+		}
+	}
+
+	public boolean isInvalid()
+	{
+		return invalid;
+	}
+
+	boolean isQueueInvalid()
+	{
+		return queueInvalid;
+	}
+
+	/**
+	 * end this conversation <br />
+	 * <ul>
+	 * <li>inform all beans implementing the {@link ConversationEndListener} about the conversation end</li>
+	 * <li>free all beans</li>
+	 * </ul>
+	 */
+	public void destroy()
+	{
+		invalid = true;
+
+		if (log.isDebugEnabled())
+		{
+			log.debug("end conversation:" + name);
+		}
+
+		Iterator iterBeans = beans.values().iterator();
+		while (iterBeans.hasNext())
+		{
+			Object bean = iterBeans.next();
+			if (bean instanceof ConversationEndListener)
+			{
+				((ConversationEndListener) bean).conversationEnded();
+			}
+		}
+		beans.clear();
+	}
+
+	public boolean hasAttribute(String name)
+	{
+		return beans.containsKey(name);
+	}
+
+	public Object getAttribute(String name)
+	{
+		return beans.get(name);
+	}
+
+	public Object removeBean(String name)
+	{
+		return beans.remove(name);
+	}
+
+	public static Conversation getCurrentInstance()
+	{
+		Conversation conversation = (Conversation) CURRENT_CONVERSATION.get();
+		if (conversation != null)
+		{
+			conversation.touch();
+		}
+		return conversation;
+	}
+
+	static void setCurrentInstance(Conversation conversation)
+	{
+		CURRENT_CONVERSATION.set(conversation);
+	}
+
+	void enterConversation()
+	{
+		synchronized (activeCountMutex)
+		{
+			activeCount++;
+		}
+	}
+
+	void leaveConversation()
+	{
+		synchronized (activeCountMutex)
+		{
+			activeCount--;
+		}
+	}
+
+	private boolean isActive()
+	{
+		synchronized (activeCountMutex)
+		{
+			return activeCount > 0;
+		}
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/Conversation.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+public interface ConversationAware
+{
+	public void setConversation(Conversation conversation);
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationAware.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * The ConversationContext handles all conversations within the current context
+ *
+ * @author imario@apache.org
+ */
+public class ConversationContext
+{
+	private final static Log log = LogFactory.getLog(ConversationContext.class);
+
+	private final long id;
+
+	private final Object mutex = new Object();
+	private final Map conversations = new TreeMap();
+
+	private long lastAccess;
+
+	protected ConversationContext(long id)
+	{
+		this.id = id;
+		touch();
+	}
+
+	public long getId()
+	{
+		return id;
+	}
+
+	protected void touch()
+	{
+		lastAccess = System.currentTimeMillis();
+	}
+
+	public long getLastAccess()
+	{
+		return lastAccess;
+	}
+
+	public void shutdownContext()
+	{
+		synchronized (mutex)
+		{
+			Iterator iterConversation = conversations.values().iterator();
+			while (iterConversation.hasNext())
+			{
+				Conversation conversation = (Conversation) iterConversation.next();
+				conversation.invalidate();
+			}
+
+			conversations.clear();
+		}
+	}
+
+	/**
+	 * Start a conversation if not already started.<br />
+	 * All nested conversations (if any) are closed if the conversation already existed.
+	 *
+	 * @param name
+	 */
+	public void startConversation(String name)
+	{
+		synchronized (mutex)
+		{
+			touch();
+			Conversation conversation = (Conversation) conversations.get(name);
+			if (conversation == null)
+			{
+				conversation = new Conversation(name);
+				conversations.put(name, conversation);
+			}
+		}
+	}
+
+	/**
+	 * End the given conversation
+	 */
+	protected void endConversation(Conversation conversation)
+	{
+		synchronized (mutex)
+		{
+			touch();
+			conversation.invalidate();
+			conversations.remove(conversation.getName());
+		}
+	}
+
+	/**
+	 * End the conversation with given name.<br />
+	 * This also automatically closes all nested conversations.
+	 */
+	public void endConversation(String name)
+	{
+		synchronized (mutex)
+		{
+			touch();
+			Conversation conversation = (Conversation) conversations.get(name);
+			if (conversation != null)
+			{
+				endConversation(conversation);
+			}
+		}
+	}
+
+	/**
+	 * see if there is a conversation
+	 */
+	public boolean hasConversations()
+	{
+		synchronized (mutex)
+		{
+			touch();
+			return conversations.size() > 0;
+		}
+	}
+
+	/**
+	 * check if the given conversation exists
+	 */
+	public boolean hasConversation(String name)
+	{
+		synchronized (mutex)
+		{
+			touch();
+			return conversations.get(name) != null;
+		}
+	}
+
+	/**
+	 * get a conversation by name
+	 */
+	public Conversation getConversation(String name)
+	{
+		synchronized (mutex)
+		{
+			touch();
+
+			Conversation conv = (Conversation) conversations.get(name);
+			conv.touch();
+
+			return conv;
+		}
+	}
+
+	public void checkConversationTimeout()
+	{
+		synchronized (mutex)
+		{
+			long timeToLive = 30 * 60 * 1000;
+			long checkTime = System.currentTimeMillis();
+
+			Iterator iterConversations = conversations.values().iterator();
+			while (iterConversations.hasNext())
+			{
+				Conversation conversation = (Conversation) iterConversations.next();
+
+				if (conversation.getLastAccess() + timeToLive < checkTime)
+				{
+					if (log.isDebugEnabled())
+					{
+						log.debug("end conversation due to timeout: " + conversation.getName());
+					}
+
+					conversation.invalidate();
+					iterConversations.remove();
+				}
+			}
+		}
+	}
+}
\ No newline at end of file

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationContext.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+/**
+ * all beans implementing this listener will get informed if a conversation ends
+ *
+ * @author imario@apache.org
+ */
+public interface ConversationEndListener
+{
+	public void conversationEnded();
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationEndListener.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,425 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.fusion.requestParameterProvider.RequestParameterProviderManager;
+import org.apache.myfaces.shared_fusion.util.ClassUtils;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * The manager will deal with the various contexts in the current session.
+ * A new context will be created if the current window has none associated.
+ *
+ * @author imario@apache.org
+ */
+public class ConversationManager implements Serializable
+{
+	private final static Log log = LogFactory.getLog(ConversationManager.class);
+
+	public final static String CONVERSATION_CONTEXT_PARAM = "conversationContext";
+
+	private final static String INIT_MESSAGER = "org.apache.myfaces.conversation.MESSAGER";
+
+	private final static String CONVERSATION_MANAGER_KEY = "org.apache.myfaces.ConversationManager";
+	private final static String CONVERSATION_CONTEXT_REQ = "org.apache.myfaces.ConversationManager.conversationContext";
+
+	private static long NEXT_CONVERSATION_CONTEXT = 1;
+
+	private ConversationMessager conversationMessager;
+
+	private final Map conversationContexts = new HashMap();
+
+	// private final List registeredEndConversations = new ArrayList(10);
+
+	private class ConversationWiperThread extends Thread
+	{
+		private final static long CHECK_TIME = 5 * 60 * 1000; // every 5 min
+
+		public ConversationWiperThread()
+		{
+			setDaemon(true);
+			setName(ConversationWiperThread.class.getName());
+		}
+
+		public void run()
+		{
+			while (!isInterrupted())
+			{
+				checkTimeouts();
+
+				try
+				{
+					Thread.sleep(CHECK_TIME);
+				}
+				catch (InterruptedException e)
+				{
+					log.warn(e.getLocalizedMessage(), e);
+				}
+			}
+		}
+	}
+
+	private ConversationWiperThread wiperThread = new ConversationWiperThread();
+
+	protected ConversationManager()
+	{
+		wiperThread.start();
+	}
+
+	/**
+	 * Get the conversation manager
+	 */
+	public static ConversationManager getInstance()
+	{
+		FacesContext context = FacesContext.getCurrentInstance();
+		if (context == null)
+		{
+			throw new IllegalStateException("no faces context available");
+		}
+		return getInstance(context);
+	}
+
+	/**
+	 * Get the conversation manager
+	 */
+	public static ConversationManager getInstance(FacesContext context)
+	{
+		ConversationManager conversationManager = (ConversationManager) context.getExternalContext().getSessionMap().get(CONVERSATION_MANAGER_KEY);
+		if (conversationManager == null)
+		{
+			conversationManager = createConversationManager();
+
+			// initialize environmental systems
+			RequestParameterProviderManager.getInstance(context).register(new ConversationRequestParameterProvider());
+
+			// set mark
+			context.getExternalContext().getSessionMap().put(CONVERSATION_MANAGER_KEY, conversationManager);
+		}
+
+		return conversationManager;
+	}
+
+	protected static ConversationManager createConversationManager()
+	{
+		ConversationManager conversationManager;
+
+		// create manager
+		conversationManager = new ConversationManager();
+
+		// initialize the messager
+		conversationManager.createMessager();
+
+		return conversationManager;
+	}
+
+	/**
+	 * Get the conversation manager from the http session. This will <b>not</b> create a conversation manager if none exists.
+	 */
+	public static ConversationManager getInstance(HttpSession session)
+	{
+		if (session == null)
+		{
+			return null;
+		}
+		return (ConversationManager) session.getAttribute(CONVERSATION_MANAGER_KEY);
+	}
+
+	/**
+	 * Get the current, or create a new unique conversationContextId.<br />
+	 * The current conversationContextId will retrieved from the request parameters, if we cant find it there
+	 * a new one will be created. In either case the result will be stored within the request for faster lookup.
+	 */
+	public Long getConversationContextId()
+	{
+		Map requestMap;
+		Map requestParameterMap;
+
+		FacesContext context = FacesContext.getCurrentInstance();
+		if (context != null)
+		{
+			requestMap = context.getExternalContext().getRequestMap();
+			requestParameterMap = context.getExternalContext().getRequestParameterMap();
+		}
+		else
+		{
+			throw new IllegalStateException("no facesContext");
+		}
+
+		Long conversationContextId = (Long) requestMap.get(CONVERSATION_CONTEXT_REQ);
+		if (conversationContextId == null)
+		{
+			if (requestParameterMap.containsKey(CONVERSATION_CONTEXT_PARAM))
+			{
+				String urlConversationContextId = requestParameterMap.get(CONVERSATION_CONTEXT_PARAM).toString();
+				conversationContextId = new Long(Long.parseLong(urlConversationContextId, Character.MAX_RADIX));
+			}
+			else
+			{
+				synchronized (ConversationManager.class)
+				{
+					conversationContextId = new Long(NEXT_CONVERSATION_CONTEXT);
+					NEXT_CONVERSATION_CONTEXT++;
+				}
+			}
+
+			requestMap.put(CONVERSATION_CONTEXT_REQ, conversationContextId);
+		}
+
+		return conversationContextId;
+	}
+
+	/**
+	 * Get the conversation context for the given id
+	 */
+	protected ConversationContext getConversationContext(Long conversationContextId)
+	{
+		synchronized (conversationContexts)
+		{
+			return (ConversationContext) conversationContexts.get(conversationContextId);
+		}
+	}
+
+	/**
+	 * Get the conversation context for the given id. <br />
+	 * If there is no conversation context a new one will be created
+	 */
+	protected ConversationContext getOrCreateConversationContext(Long conversationContextId)
+	{
+		synchronized (conversationContexts)
+		{
+			ConversationContext conversationContext = (ConversationContext) conversationContexts.get(conversationContextId);
+			if (conversationContext == null)
+			{
+				conversationContext = new ConversationContext(conversationContextId.longValue());
+				conversationContexts.put(conversationContextId, conversationContext);
+			}
+
+			return conversationContext;
+		}
+	}
+
+	/**
+	 * Destroy the given conversation context
+	 */
+	protected void destroyConversationContext(Long conversationContextId)
+	{
+		synchronized (conversationContexts)
+		{
+			conversationContexts.remove(conversationContextId);
+		}
+	}
+
+	/**
+	 * Start a conversation
+	 *
+	 * @see ConversationContext#startConversation(String)
+	 */
+	public void startConversation(String name)
+	{
+		Long conversationContextId = getConversationContextId();
+		ConversationContext conversationContext = getOrCreateConversationContext(conversationContextId);
+		conversationContext.startConversation(name);
+	}
+
+	/**
+	 * End a conversation
+	 *
+	 * @see ConversationContext#endConversation(String)
+	 */
+	public void endConversation(String name)
+	{
+		Long conversationContextId = getConversationContextId();
+		ConversationContext conversationContext = getConversationContext(conversationContextId);
+		if (conversationContext != null)
+		{
+			conversationContext.endConversation(name);
+		}
+	}
+
+	/**
+	 * Get the conversation with the given name
+	 *
+	 * @return null if no conversation context is active or if the conversation did not exist.
+	 */
+	public Conversation getConversation(String name)
+	{
+		ConversationContext conversationContext = getConversationContext();
+		if (conversationContext == null)
+		{
+			return null;
+		}
+		return conversationContext.getConversation(name);
+	}
+
+	/**
+	 * check if the given conversation is active
+	 */
+	public boolean hasConversation(String name)
+	{
+		ConversationContext conversationContext = getConversationContext();
+		if (conversationContext == null)
+		{
+			return false;
+		}
+		return conversationContext.hasConversation(name);
+	}
+
+	/**
+	 * Get the current conversation context.
+	 *
+	 * @return null if there is no context active
+	 */
+	protected ConversationContext getConversationContext()
+	{
+		Long conversationContextId = getConversationContextId();
+		ConversationContext conversationContext = getConversationContext(conversationContextId);
+		return conversationContext;
+	}
+
+	/**
+	 * Register the conversation to be ended after the cycle
+	 protected void registerEndConversation(String conversationName)
+	 {
+	 synchronized (registeredEndConversations)
+	 {
+	 registeredEndConversations.add(conversationName);
+	 }
+	 }
+	 */
+
+	/**
+	 * Get all registered conversations
+	 protected List getRegisteredEndConversations()
+	 {
+	 return registeredEndConversations;
+	 }
+	 */
+
+	/**
+	 * check if we have a conversation context
+	 */
+	public boolean hasConversationContext()
+	{
+		FacesContext context = FacesContext.getCurrentInstance();
+
+		return
+			(context.getExternalContext().getRequestMap().containsKey(CONVERSATION_CONTEXT_REQ) ||
+				context.getExternalContext().getRequestParameterMap().containsKey(CONVERSATION_CONTEXT_PARAM)) &&
+				getConversationContext() != null;
+	}
+
+	/**
+	 * Get the Messager used to inform the user about anomalies.<br />
+	 * The factory can be configured in your web.xml using the init parameter named
+	 * <code>org.apache.myfaces.conversation.MESSAGER</code>
+	 */
+	public ConversationMessager getMessager()
+	{
+		return conversationMessager;
+	}
+
+	/**
+	 * Create the Messager used to inform the user about anomalies.<br />
+	 * The factory can be configured in your web.xml using the init parameter named
+	 * <code>org.apache.myfaces.conversation.MESSAGER</code>
+	 */
+	protected void createMessager()
+	{
+		String conversationMessagerName = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(INIT_MESSAGER);
+		if (conversationMessagerName == null)
+		{
+			conversationMessager = new DefaultConversationMessager();
+		}
+		else
+		{
+			try
+			{
+				conversationMessager = (ConversationMessager) ClassUtils.classForName(conversationMessagerName).newInstance();
+			}
+			catch (InstantiationException e)
+			{
+				throw new FacesException("error creating messager: " + conversationMessagerName, e);
+			}
+			catch (IllegalAccessException e)
+			{
+				throw new FacesException("error creating messager: " + conversationMessagerName, e);
+			}
+			catch (ClassNotFoundException e)
+			{
+				throw new FacesException("error creating messager: " + conversationMessagerName, e);
+			}
+		}
+	}
+
+	protected void checkTimeouts()
+	{
+		synchronized (conversationContexts)
+		{
+			long timeToLive = 30 * 60 * 1000;
+			long checkTime = System.currentTimeMillis();
+
+			Iterator iterContexts = conversationContexts.values().iterator();
+			while (iterContexts.hasNext())
+			{
+				ConversationContext conversationContext = (ConversationContext) iterContexts.next();
+				conversationContext.checkConversationTimeout();
+
+				if (conversationContext.getLastAccess() + timeToLive < checkTime)
+				{
+					if (log.isDebugEnabled())
+					{
+						log.debug("end conversation context due to timeout: " + conversationContext.getId());
+					}
+
+					conversationContext.shutdownContext();
+					iterContexts.remove();
+				}
+			}
+		}
+	}
+
+	private void writeObject(java.io.ObjectOutputStream out) throws IOException
+	{
+		// the conversation manager is not (yet) serializable, we just implement it
+		// to make it work with distributed sessions
+	}
+
+	private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException
+	{
+		// nothing written, so nothing to read
+	}
+
+	private Object readResolve() throws ObjectStreamException
+	{
+		// do not return a real object, that way on first request a new conversation manager will be created
+		return null;
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationManager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * methods required to inform the user about some anomalies
+ *
+ * @author imario@apache.org
+ */
+public interface ConversationMessager
+{
+	/**
+	 * exception happened e.g. during invalidate action
+	 */
+	public void setConversationException(FacesContext context, Throwable t);
+
+	/**
+	 * message about a not active conversation (close before the redirect)
+	 */
+	public void setConversationNotActive(FacesContext context, String name);
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationMessager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import org.apache.myfaces.fusion.conversation.jsf.components.UISeparateConversationContext;
+import org.apache.myfaces.fusion.requestParameterProvider.RequestParameterProvider;
+
+/**
+ * adds the required fields (conversationContext) to the request parameters.
+ *
+ * @author imario@apache.org
+ */
+public class ConversationRequestParameterProvider implements RequestParameterProvider
+{
+	private final static String[] REQUEST_PARAMETERS = new String[]
+		{
+			ConversationManager.CONVERSATION_CONTEXT_PARAM
+		};
+
+	public String getFieldValue(String field)
+	{
+		if (UISeparateConversationContext.isInSeparationMode())
+		{
+			return null;
+		}
+
+		ConversationManager conversationManager = ConversationManager.getInstance();
+		if (conversationManager == null)
+		{
+			throw new IllegalStateException("can find the conversationManager");
+		}
+		if (!conversationManager.hasConversationContext())
+		{
+			return null;
+		}
+
+		return Long.toString(conversationManager.getConversationContextId().longValue(), Character.MAX_RADIX);
+	}
+
+	public String[] getFields()
+	{
+		if (UISeparateConversationContext.isInSeparationMode())
+		{
+			return null;
+		}
+
+		ConversationManager conversationManager = ConversationManager.getInstance();
+		if (conversationManager == null)
+		{
+			throw new IllegalStateException("can find the conversationManager");
+		}
+		if (!conversationManager.hasConversationContext())
+		{
+			return null;
+		}
+
+		return REQUEST_PARAMETERS;
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationRequestParameterProvider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import org.apache.myfaces.fusion.conversation.jsf.components.AbstractConversationComponent;
+import org.apache.myfaces.fusion.conversation.jsf.components.UIEndConversation;
+
+import javax.faces.component.UICommand;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.ValueBinding;
+import java.util.Iterator;
+
+public class ConversationUtils
+{
+	private ConversationUtils()
+	{
+	}
+
+	/**
+	 * Find the first parent which is a command
+	 */
+	public static UICommand findParentCommand(UIComponent base)
+	{
+		UIComponent parent = base;
+		do
+		{
+			parent = parent.getParent();
+			if (parent instanceof UICommand)
+			{
+				return (UICommand) parent;
+			}
+		}
+		while (parent != null);
+
+		return null;
+	}
+
+	/**
+	 * Find a child start or end conversation component for the given conversation name
+	 */
+	public static AbstractConversationComponent findEndConversationComponent(UIComponent component, String conversationName)
+	{
+		Iterator iterComponents = component.getFacetsAndChildren();
+		while (iterComponents.hasNext())
+		{
+			Object child = iterComponents.next();
+			AbstractConversationComponent conversation;
+
+			if (child instanceof UIEndConversation)
+			{
+				conversation = (AbstractConversationComponent) child;
+				if (conversation.getName().equals(conversationName))
+				{
+					return conversation;
+				}
+			}
+			else if (child instanceof UIComponent)
+			{
+				conversation = findEndConversationComponent((UIComponent) child, conversationName);
+				if (conversation != null)
+				{
+					return conversation;
+				}
+			}
+		}
+
+		return null;
+	}
+
+	public static String extractBeanName(ValueBinding vb)
+	{
+		String valueBinding = vb.getExpressionString();
+		return valueBinding.substring(2, valueBinding.length() - 1);
+	}
+
+	/**
+	 * end and restart a conversation
+	 */
+	public static void endAndRestartConversation(FacesContext context, String conversationName, Boolean restart, MethodBinding restartAction)
+	{
+		ConversationManager conversationManager = ConversationManager.getInstance(context);
+		Conversation conversation = conversationManager.getConversation(conversationName);
+
+		conversationManager.endConversation(conversationName);
+
+		if (restart != null && restart.booleanValue() && conversation != null)
+		{
+			conversationManager.startConversation(conversationName);
+
+			if (restartAction != null)
+			{
+				restartAction.invoke(context, null);
+			}
+		}
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/ConversationUtils.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+
+public class CurrentConversationAdvice implements MethodInterceptor
+{
+	private final Conversation conversation;
+
+	public CurrentConversationAdvice(Conversation conversation)
+	{
+		this.conversation = conversation;
+	}
+
+	public Object invoke(MethodInvocation methodInvocation) throws Throwable
+	{
+		Conversation previous = Conversation.getCurrentInstance();
+		Conversation.setCurrentInstance(conversation);
+
+		try
+		{
+			conversation.enterConversation();
+
+			return methodInvocation.proceed();
+		}
+		finally
+		{
+			conversation.leaveConversation();
+
+			if (conversation.isQueueInvalid())
+			{
+				conversation.destroy();
+			}
+
+			Conversation.setCurrentInstance(previous);
+		}
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/CurrentConversationAdvice.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * methods required to inform the user about some anomalies
+ *
+ * @author imario@apache.org
+ */
+public class DefaultConversationMessager implements ConversationMessager
+{
+	public void setConversationException(FacesContext context, Throwable t)
+	{
+		context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, t.getLocalizedMessage(), getThrowableText(t)));
+	}
+
+	public void setConversationNotActive(FacesContext context, String name)
+	{
+		String message = "Conversation not active";
+		String messageDtl = "Conversation not active. Please start over. (Conversation Name:" + name + ")";
+
+		context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, message, messageDtl));
+	}
+
+	protected String getThrowableText(Throwable t)
+	{
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
+		t.printStackTrace(pw);
+		pw.close();
+		return sw.toString();
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/DefaultConversationMessager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation.jsf.components;
+
+import org.apache.myfaces.fusion.conversation.ConversationUtils;
+
+import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+
+/**
+ * base class to handle actions events
+ *
+ * @author imario@apache.org
+ */
+public abstract class AbstractConversationActionListener implements ActionListener, StateHolder
+{
+	private String conversationName;
+
+	private transient boolean isTransient;
+
+	public AbstractConversationActionListener()
+	{
+	}
+
+	/**
+	 * @return the conversation name this listener is associated to
+	 */
+	public String getConversationName()
+	{
+		return conversationName;
+	}
+
+	/**
+	 * set the conversation name this listener should be associated to
+	 *
+	 * @param conversationName
+	 */
+	public void setConversationName(String conversationName)
+	{
+		this.conversationName = conversationName;
+	}
+
+
+	public Object saveState(FacesContext context)
+	{
+		return new Object[]
+			{
+				conversationName
+			};
+	}
+
+	public void restoreState(FacesContext context, Object state)
+	{
+		Object[] states = (Object[]) state;
+		conversationName = (String) states[0];
+	}
+
+	public boolean isTransient()
+	{
+		return isTransient;
+	}
+
+	public void setTransient(boolean newTransientValue)
+	{
+		isTransient = newTransientValue;
+	}
+
+	public void processAction(ActionEvent actionEvent) throws AbortProcessingException
+	{
+		AbstractConversationComponent startOrEndconversation = ConversationUtils.findEndConversationComponent(actionEvent.getComponent(), getConversationName());
+
+		doConversationAction(startOrEndconversation);
+	}
+
+	/**
+	 * override this to do your conversation action
+	 */
+	public abstract void doConversationAction(AbstractConversationComponent abstractConversationComponent);
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationActionListener.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation.jsf.components;
+
+import javax.faces.component.UICommand;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+
+/**
+ * base class for all the conversation components
+ *
+ * @author imario@apache.org
+ */
+public class AbstractConversationComponent extends UICommand
+{
+	public static final String COMPONENT_FAMILY = "javax.faces.Component";
+
+	private String name;
+
+	public AbstractConversationComponent()
+	{
+		setRendererType(null);
+	}
+
+	public String getFamily()
+	{
+		return COMPONENT_FAMILY;
+	}
+
+	public void restoreState(FacesContext context, Object state)
+	{
+		Object[] states = (Object[]) state;
+
+		super.restoreState(context, states[0]);
+		name = (String) states[1];
+	}
+
+	public Object saveState(FacesContext context)
+	{
+		return new Object[]
+			{
+				super.saveState(context),
+				name
+			};
+	}
+
+	/**
+	 * the conversation name
+	 */
+	public String getName()
+	{
+		if (name != null)
+		{
+			return name;
+		}
+		ValueBinding vb = getValueBinding("name");
+		if (vb == null)
+		{
+			return null;
+		}
+		return (String) vb.getValue(getFacesContext());
+	}
+
+	/**
+	 * the conversation name
+	 */
+	public void setName(String name)
+	{
+		this.name = name;
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationComponent.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java?view=auto&rev=510598
==============================================================================
--- myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java (added)
+++ myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java Thu Feb 22 09:25:41 2007
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.fusion.conversation.jsf.components;
+
+import org.apache.myfaces.shared_fusion.taglib.UIComponentTagBase;
+
+import javax.faces.component.UIComponent;
+
+/**
+ * base class for all conversation tags
+ *
+ * @author im
+ */
+public abstract class AbstractConversationTag extends UIComponentTagBase
+{
+	private String name;
+
+	public String getRendererType()
+	{
+		return null;
+	}
+
+	protected void setProperties(UIComponent component)
+	{
+		super.setProperties(component);
+		setStringProperty(component, "name", name);
+	}
+
+	/**
+	 * the conversation name
+	 */
+	public String getName()
+	{
+		return name;
+	}
+
+	/**
+	 * the conversation name
+	 */
+	public void setName(String alias)
+	{
+		this.name = alias;
+	}
+}

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/fusion/trunk/core/src/main/java/org/apache/myfaces/fusion/conversation/jsf/components/AbstractConversationTag.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain