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