[jbpm-commits] JBoss JBPM SVN: r2646 - in projects/jsf-console/branches/jsf-console-3.2.x: console/src/main/webapp/WEB-INF and 25 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Oct 28 09:39:18 EDT 2008
Author: heiko.braun at jboss.com
Date: 2008-10-28 09:39:17 -0400 (Tue, 28 Oct 2008)
New Revision: 2646
Added:
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/access.properties
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/classes/
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/classes/messages.properties
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/faces-config.xml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jboss-web.xml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jbpm4jsf-config.xml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/web.xml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/background.gif
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/bullet.gif
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/info.gif
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/index.jsp
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/deployproc.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/group.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/identities.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/jobs.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procdef.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/processes.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procins.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_comments.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_loggedin.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_pager.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_processinstances.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tasks.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tokens.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_vars.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/task.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/tasks.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/token.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/user.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/jbpm.css
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login-example.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/t_base.xhtml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmJsfContext.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/CoreLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AddCommentActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ApplyVariableMapActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AssignTaskActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CancelActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CompleteTaskActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeleteActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeployProcessActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetDiagramInfoActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetProcessLogsActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetTaskFormInfoActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableMapActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LazyJbpmActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListJobsActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessInstancesActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessesActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForActorActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessInstanceActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTokensActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadJobActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessInstanceActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTaskActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTokenActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/MoveTokenActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/RemoveVariableActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ResumeActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SignalActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartProcessActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartTaskActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SuspendActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/TaskFormButtonActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateTaskStartActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateVariableActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/Configuration.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/ConfigurationLocator.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AbstractHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AddCommentHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ApplyVariableMapHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AssignTaskHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CancelHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CompleteTaskHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeleteHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeployProcessHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetDiagramInfoHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetProcessLogsHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetTaskFormInfoHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableMapHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/IncludeProcessFileHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/JbpmActionListenerHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListJobsHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessInstancesHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessesHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForActorHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessInstanceHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTokensHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadJobHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessInstanceHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTaskHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTokenHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/MoveTokenHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/RemoveVariableHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ResumeHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SignalHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartProcessHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartTaskHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SuspendHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/TaskFormHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateTaskStartHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateVariableHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmActionListenerWrapper.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmJsfContextImpl.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/UpdatesHashMap.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/package-info.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/JbpmPhaseListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/ProcessFilePhaseListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/ui/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/ui/UITaskForm.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/IdentityLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/AddMembershipActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateGroupActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateUserActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteGroupActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteMembershipActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteUserActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListGroupsActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListUsersActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupByNameActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadUserActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/VerifyUserActionListener.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/AddMembershipHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateGroupHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateUserHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteGroupHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteMembershipHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteUserHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListGroupsHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListUsersHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupByNameHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadUserHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/VerifyUserHandler.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/package-info.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormBaseLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormCompatLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/package-info.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormButtonBase.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormCancelButton.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormSaveButton.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormTransitionButton.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutBaseLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutCompatLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutLibrary.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/package-info.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/renderer/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/renderer/DataFormRenderer.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataArea.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataCell.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataForm.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataSection.java
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/core.taglib.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/faces-config.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/identity.taglib.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf-compat.taglib.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf.taglib.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl-compat.taglib.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl.taglib.xml
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/core.tld
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/identity.tld
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tf.tld
projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tfl.tld
Log:
Import sources from https://svn.jboss.org/repos/jbpm/jbpm3/tags/jpdl-3.2.2.GA -r 2639. Related modules are 'console' and 'jbpm4jsf'
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/access.properties
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/access.properties (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/access.properties 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,42 @@
+# Security configuration for jBPM Administration Console.
+#
+# Customize the properties in this file to define security permissions
+# for different components within the console.
+
+# Require one of the given roles for identity management functionality.
+# Insert a bogus role name to disable identity management (if you are not
+# using the jBPM identity module, for example).
+role.identities=manager
+
+# Fine-grained controls for different levels of identity management.
+role.identities.user=admin
+role.identities.user.add=
+role.identities.user.delete=
+role.identities.user.modify=
+
+role.identities.group=admin
+role.identities.group.add=
+role.identities.group.delete=
+role.identities.group.modify=
+
+# Process definition operations
+role.process.deploy=manager,admin
+role.process.delete=admin
+role.process.start=manager
+
+# Process instance and token operations
+role.execution.suspend=
+role.execution.edit=
+role.execution.delete=
+role.execution.end=
+
+# Task management operations
+role.tasks=
+role.task.assign=manager
+role.task.assign.any=manager
+role.task.modify=
+
+# Job management operations
+role.jobs=admin
+role.jobs.delete=
+
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/classes/messages.properties
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/classes/messages.properties (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/classes/messages.properties 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,136 @@
+
+# Unauthorized access
+
+unauthorized=You are not authorized to access this resource.
+
+# Confirmation alert boxes
+
+confirm.process.delete=Are you sure you want to permanently delete this process? This operation cannot be undone.
+confirm.token.move=Are you sure you want to move this token?
+
+# Top menu
+
+title=JBoss jBPM Administration Console
+msg.fatal=Fatal Error
+msg.error=Error
+msg.warn=Warning
+msg.info=Information
+
+top.loggedinas=Logged in as: {0}
+top.logout=Log Out
+topmenu.caption=Manage:
+topmenu.processes=Processes
+topmenu.tasks=Tasks
+topmenu.jobs=Jobs
+topmenu.identities=Identities
+
+# Conventions
+# heading.* or *.heading.* - These are headings of tabluar columns
+# action.* or *.action.* - These are actions that appear in action lists, or in the left-hand menu
+# action.*.beforelink or *.action.*.beforelink - This is the text that is rendered before the clickable part of an action link
+# action.*.link or *.action.*.link - This is the clickable part of an action link
+# action.*.afterlink or *.action.*.afterlink - This is the text that is rendered after the clickable part of an action link
+# view.* or *.view.* - This is the name of a view, as it appears in the left-hand menu
+# status.* - These are statuses of various executable elements
+# status.abbr.* - These are the one-character abbreviations for statuses of various executable elements
+# confirm.* or *.confirm.* - These are the text contents of various confirmation dialogs
+# filter.* or *.filter.* - These are text items used to control search filters
+# prompt.* or *.prompt.* - These are prompts for input fields
+# label.* or *.label.* - These are labels for output fields
+# button.* or *.button.* - These are captions for buttons
+# message.* or *.message.* - These are messages for required/converter/validation fields
+
+# General pages
+
+menu.heading.actions=Actions
+menu.heading.views=Views
+
+action.examine=Examine
+
+heading.actions=Actions
+
+filter.apply=Apply Filter
+filter.clear=Clear Filter
+
+status.notstarted=Not Started
+status.notstarted.suspended=(suspended)
+status.running=Running
+status.suspended=Suspended
+status.ended=Ended
+status.ended.suspended=(was suspended)
+
+status.abbr.notstarted=N
+status.abbr.running=R
+status.abbr.suspended=S
+status.abbr.ended=E
+
+# Deploy process page
+
+deploy.heading=Deploy New Process Definition
+deploy.prompt=File to upload:
+deploy.button=Deploy
+
+# Identities page
+
+identities.action.adduser.beforelink=
+identities.action.adduser.link=Add
+identities.action.adduser.afterlink=a new user
+
+identities.action.addgroup.beforelink=
+identities.action.addgroup.link=Add
+identities.action.addgroup.afterlink=a new group
+
+identities.view.users=Users
+identities.view.groups=Groups
+identities.view.adduser=Add User
+identities.view.addgroup=Add Group
+
+identities.users.heading.id=User ID
+identities.users.heading.name=User Name
+identities.users.heading.email=Email Address
+identities.users.heading.memberships=Memberships
+
+identities.users.confirm.delete=Are you sure you want to delete this user? This operation cannot be undone.
+
+identities.adduser.prompt.name=User Name
+identities.adduser.prompt.password=Password
+identities.adduser.prompt.passwordconfirm=Password (Confirm)
+identities.adduser.prompt.email=Email Address
+
+identities.adduser.button=Add User
+
+identities.groups.heading.id=Group ID
+identities.groups.heading.name=Group Name
+identities.groups.heading.type=Group Type
+identities.groups.heading.parent=Parent Group Name
+
+identities.groups.confirm.delete=Are you sure you want to delete this group and all of its child groups? This operation cannot be undone.
+
+identities.addgroup.prompt.name=Group Name
+identities.addgroup.prompt.type=Group Type
+identities.addgroup.prompt.parent=Parent Group Name
+
+identities.addgroup.button=Add Group
+
+# Processes page
+
+processes.heading.id=Process ID
+processes.heading.name=Process Name
+processes.heading.version=Version
+
+processes.examine=Examine
+processes.delete=Delete
+processes.start=Start
+
+processes.action.deploy.beforelink=
+processes.action.deploy.link=Deploy
+processes.action.deploy.afterlink=a new process
+
+# Process page
+
+# Process Instance page
+
+# Task page
+
+# Token page
+
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/faces-config.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/faces-config.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
+ version="1.2">
+
+ <application>
+
+ <locale-config>
+ <default-locale>en</default-locale>
+ </locale-config>
+
+ <!--
+ Use Facelets as the primary view handler. Since we have bookmarkable URLs,
+ add Gravel's query preserving view handler to the list.
+ -->
+ <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
+ <view-handler>org.jboss.gravel.QueryPreservingViewHandler</view-handler>
+
+ <!--
+ Use Gravel's navigation model.
+ -->
+ <navigation-handler>org.jboss.gravel.navigation.GravelNavigationHandler</navigation-handler>
+ </application>
+</faces-config>
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jboss-web.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jboss-web.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jboss-web.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE jboss-web PUBLIC
+ "-//JBoss//DTD Web Application 2.4//EN"
+ "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
+
+<jboss-web>
+ <!--
+ Specify the security domain to use. This will be java:/jaas/<name> where <name> is one of the names configured in your login-config.xml.
+ -->
+ <security-domain>java:/jaas/jbpm-console</security-domain>
+ <context-root>jbpm-console</context-root>
+
+ <resource-ref>
+ <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
+ <jndi-name>java:/JbpmDS</jndi-name>
+ </resource-ref>
+
+ <resource-ref>
+ <res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
+ <jndi-name>java:JmsXA</jndi-name>
+ </resource-ref>
+
+ <!-- workaround for "mapped-name is required" exception in JBoss 5.0.0.CR1 -->
+ <message-destination-ref>
+ <message-destination-ref-name>jms/JobQueue</message-destination-ref-name>
+ <jndi-name>queue/JbpmJobQueue</jndi-name>
+ </message-destination-ref>
+
+</jboss-web>
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jbpm4jsf-config.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jbpm4jsf-config.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/jbpm4jsf-config.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<jbpm4jsf-config xmlns="http://jbpm.org/jbpm4jsf/config">
+
+ <!-- This entry controls whether to map JSF user authentication to
+ actor IDs. Set to false if the authentication scheme used by
+ the administration console is not related to the set of actors
+ that is used by your processes.
+ -->
+ <authentication-service>
+ <use-jsf-actor>true</use-jsf-actor>
+ </authentication-service>
+
+ <!-- This entry facilitates the usage of process image URLs -->
+ <process-file-matcher>
+ <pattern>^/sa/pi/(\d+).jpg$</pattern>
+ <file-name>processimage.jpg</file-name>
+ <content-type>image/jpg</content-type>
+ </process-file-matcher>
+
+</jbpm4jsf-config>
+
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/web.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/web.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/WEB-INF/web.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.4"
+ xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
+
+ <servlet>
+ <description>Enable the JSF servlet. See faces-config.xml for Faces-specific configuration</description>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <!-- Mapping for all plain pages. -->
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.jsf</url-pattern>
+ </servlet-mapping>
+
+ <!-- This mapping is for the process images. -->
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>/sa/pi/*</url-pattern>
+ </servlet-mapping>
+
+ <context-param>
+ <description> Use Documents Saved as *.xhtml </description>
+ <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+ <param-value>.xhtml</param-value>
+ </context-param>
+
+ <context-param>
+ <description> Facelets debug output </description>
+ <param-name>facelets.DEVELOPMENT</param-name>
+ <param-value>false</param-value>
+ </context-param>
+
+ <!-- A simple JSP to redirect to the basic search page. -->
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+
+ <servlet>
+ <description> This is the GDP's deployer servlet </description>
+ <servlet-name>GDP Deployer Servlet</servlet-name>
+ <servlet-class>org.jbpm.web.ProcessUploadServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>GDP Deployer Servlet</servlet-name>
+ <url-pattern>/upload/*</url-pattern>
+ </servlet-mapping>
+
+ <!--
+ This role list should be changed to include all the relevant roles for your
+ environment.
+ -->
+ <security-role>
+ <role-name>admin</role-name>
+ </security-role>
+ <security-role>
+ <role-name>user</role-name>
+ </security-role>
+
+ <!--
+ Security constraints - optionally customize the role name to require
+ a login before access is allowed to the application.
+
+ Also, be sure to edit jboss-web.xml to configure the security domain if you are
+ deploying inside JBoss AS.
+ -->
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Secure Area</web-resource-name>
+ <url-pattern>/sa/*</url-pattern>
+ <http-method>GET</http-method>
+ <http-method>POST</http-method>
+ </web-resource-collection>
+ <auth-constraint>
+ <role-name>user</role-name>
+ </auth-constraint>
+ </security-constraint>
+
+ <!-- Example Login page - lists user names -->
+ <login-config>
+ <auth-method>FORM</auth-method>
+ <form-login-config>
+ <form-login-page>/ua/login-example.jsf</form-login-page>
+ <form-error-page>/ua/login-example.jsf?error=true</form-error-page>
+ </form-login-config>
+ </login-config>
+
+ <!-- Login configuration option #1 - use the login page ==>
+ <login-config>
+ <auth-method>FORM</auth-method>
+ <form-login-config>
+ <form-login-page>/ua/login.jsf</form-login-page>
+ <form-error-page>/ua/login.jsf?error=true</form-error-page>
+ </form-login-config>
+ </login-config>
+ <!== Login configuration option #1 -->
+
+ <!-- Login configuration option #2 - use basic auth ==>
+ <login-config>
+ <auth-method>BASIC</auth-method>
+ <realm-name>jBPM Administration Console</realm-name>
+ </login-config>
+ <!== Login configuration option #2 -->
+
+ <!-- Job executor launcher ==>
+ <listener>
+ <description>
+ Starts the job executor on servlet context initialization and stops it on
+ servlet context destruction.
+ </description>
+ <listener-class>org.jbpm.web.JobExecutorLauncher</listener-class>
+ </listener>
+ <!== Job executor launcher -->
+
+ <listener>
+ <description>
+ Closes the jBPM configuration on servlet context destruction, releasing
+ application resources. This listener should appear after the job executor
+ launcher to avoid reopening the configuration.
+ </description>
+ <listener-class>org.jbpm.web.JbpmConfigurationCloser</listener-class>
+ </listener>
+
+ <!-- Job executor servlet ==>
+ <servlet>
+ <description>
+ This servlet has the purpose of executing pending jobs. Deprecated,
+ replaced by JobExecutorLauncher.
+ </description>
+ <servlet-name>JobExecutorServlet</servlet-name>
+ <servlet-class>org.jbpm.job.executor.JobExecutorServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>JobExecutorServlet</servlet-name>
+ <url-pattern>/jobs</url-pattern>
+ </servlet-mapping>
+ <!== Job executor servlet -->
+
+ <resource-ref>
+ <description>
+ Logical name of the data source that provides connections to the persistence service.
+ Must match the hibernate.connection.datasource property in the Hibernate
+ configuration file.
+ </description>
+ <res-ref-name>jdbc/JbpmDataSource</res-ref-name>
+ <res-type>javax.sql.DataSource</res-type>
+ <res-auth>Container</res-auth>
+ </resource-ref>
+
+ <resource-ref>
+ <description>
+ Logical name of the factory that provides JMS connections to the message service.
+ Required for processes that contain asynchronous continuations.
+ </description>
+ <res-ref-name>jms/JbpmConnectionFactory</res-ref-name>
+ <res-type>javax.jms.ConnectionFactory</res-type>
+ <res-auth>Container</res-auth>
+ </resource-ref>
+
+ <ejb-local-ref>
+ <description>
+ Link to the local entity bean that implements the scheduler service. Required for
+ processes that contain timers.
+ </description>
+ <ejb-ref-name>ejb/TimerEntityBean</ejb-ref-name>
+ <ejb-ref-type>Entity</ejb-ref-type>
+ <local-home>org.jbpm.ejb.LocalTimerEntityHome</local-home>
+ <local>org.jbpm.ejb.LocalTimerEntity</local>
+ <ejb-link>TimerEntityBean</ejb-link>
+ </ejb-local-ref>
+
+ <message-destination-ref>
+ <description>
+ The message service sends job messages to the queue referenced here. To ensure
+ this is the same queue from which the JobListenerBean receives messages, the
+ message-destination-link element points to a common logical destination, JobQueue.
+ </description>
+ <message-destination-ref-name>jms/JobQueue</message-destination-ref-name>
+ <message-destination-type>javax.jms.Queue</message-destination-type>
+ <message-destination-usage>Produces</message-destination-usage>
+ <message-destination-link>JobQueue</message-destination-link>
+ </message-destination-ref>
+
+</web-app>
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/background.gif
===================================================================
(Binary files differ)
Property changes on: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/background.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/bullet.gif
===================================================================
(Binary files differ)
Property changes on: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/bullet.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/info.gif
===================================================================
(Binary files differ)
Property changes on: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/images/info.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/index.jsp
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/index.jsp (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/index.jsp 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,10 @@
+<%
+ final String queryString = request.getQueryString();
+ final String contextRoot = request.getContextPath();
+ final String target = contextRoot + "/sa/processes.jsf";
+ if (queryString != null && queryString.length() > 0) {
+ response.sendRedirect(target + "?" + queryString);
+ } else {
+ response.sendRedirect(target);
+ }
+%>
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/deployproc.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/deployproc.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/deployproc.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+ <ui:composition template="t_loggedin.xhtml">
+
+ <ui:define name="menu">
+ <ga:checkRole roles="#{access.role.process.deploy}" message="#{msgs.unauthorized}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenu">
+ <td colspan="2"/>
+ </tr>
+ </tbody>
+ </table>
+ </ui:define>
+
+ <ui:define name="body">
+ <ga:checkRole roles="#{access.role.process.deploy}">
+ <h:form enctype="multipart/form-data">
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="2">#{msgs['deploy.heading']}</th>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <tr>
+ <th>#{msgs['deploy.prompt']}</th>
+ <td>
+ <gd:inputFile target="#{stream}" maxSize="104857600"/>
+ </td>
+ </tr>
+ <tr>
+ <th/>
+ <td style="text-align:right;">
+ <h:commandButton value="#{msgs['deploy.button']}">
+ <j4j:deployProcess archive="#{stream}" target="#{pd}"/>
+ <n:nav outcome="success" url="procdef.jsf?id=#{pd.id}" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandButton>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </h:form>
+ </ga:checkRole>
+
+ </ui:define>
+
+ </ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/group.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/group.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/group.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ xmlns:id="http://jbpm.org/jbpm4jsf/identity"
+>
+<ui:composition template="t_loggedin.xhtml">
+<ui:define name="menu">
+<ga:responseActions>
+ <ga:checkRole roles="#{access.role.identities}">
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <ga:parameter name="view" target="#{viewMode}" default="children"/>
+ <ga:parameter name="page" target="#{page}" default="1"/>
+ <id:loadGroup id="#{id}" target="#{group}"/>
+ <gd:sort source="#{group.memberships}" target="#{members}" entryVar="e" argument="#{e.role == null ? '' : e.role}"/>
+ <gd:sort source="#{members}" target="#{members}" entryVar="e" argument="#{e.user.name == null ? '' : e.user.name}"/>
+ <gd:pager target="#{members_pager}" value="#{members}" page="#{page}"/>
+ <gd:sort source="#{group.children}" target="#{children}" entryVar="e" argument="#{e.name}"/>
+ <gd:pager target="#{children_pager}" value="#{children}" page="#{page}"/>
+ </ga:checkRole>
+ </ga:checkRole>
+</ga:responseActions>
+<gs:div style="padding:0;margin:0">
+ <ga:attribute name="rendered" value="#{group != null}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Group Summary</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>Group Link</th>
+ <td>
+ <h:outputLink style="font-weight:bold">
+ <f:param name="id" value="#{id}"/>
+ <h:outputText value="#{group.name} (ID #{id})"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu">
+ <ga:attribute name="rendered" value="#{! empty group.parent}"/>
+ <th>Parent Group</th>
+ <td>
+ <h:outputText value="#{group.parent.name}"/>
+ </td>
+ </gs:tr>
+ <tr class="leftmenu">
+ <th>Group Name</th>
+ <td>
+ <h:outputText value="#{group.name}"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Group Type</th>
+ <td>
+ <h:outputText value="#{group.type}"/>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'children' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="children"/>
+ Children
+ </h:outputLink>
+ </gs:li>
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'members' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="members"/>
+ Members
+ </h:outputLink>
+ </gs:li>
+ </ga:checkRole>
+ </gs:ul>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Actions</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <h:form>
+ <h:inputHidden value="#{id}"/>
+ <gs:ul>
+ <gs:li>
+ <h:commandLink value="Delete" onclick="return confirm('#{msgs['identities.groups.confirm.delete']}');">
+ <f:param name="xid">
+ <ga:attribute name="value" value="#{group.id}"/>
+ </f:param>
+ <ga:parameter name="xid" target="#{xid}"/>
+ <id:loadGroup id="#{xid}" target="#{xgroup}"/>
+ <id:deleteGroup group="#{xgroup}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{xuser}"/>
+ <n:nav outcome="success" url="identities.jsf?view=users" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this group"/>
+ </gs:li>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+</gs:div>
+</ui:define>
+
+<ui:define name="body">
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'children'}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="3">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:define name="pager_params">
+ <f:param name="id" value="#{id}"/>
+ </ui:define>
+ <ui:param name="pager" value="#{children_pager}"/>
+ </ui:decorate>
+ <h:outputText value="Children"/>
+ </th>
+ </tr>
+ <tr>
+ <td style="width:160px">Group Name</td>
+ <td style="width:160px">Group Type</td>
+ <td style="width:100px">Actions</td>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <gd:repeat value="#{children}" var="child" idVar="rid" first="#{children_pager.first}" limit="#{children_pager.limit}">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputText value="#{child.name}"/>
+ </td>
+ <td>
+ <h:outputText value="#{child.type}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink value="Remove" onclick="return confirm('#{msgs['identities.groups.confirm.delete']}')">
+ <f:param name="xgid">
+ <ga:attribute name="value" value="#{child.id}"/>
+ </f:param>
+ <ga:parameter name="xgid" target="#{xgid}"/>
+ <id:loadGroup id="#{xgid}" target="#{xgroup}"/>
+ <id:deleteGroup group="#{xgroup}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </table>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'members'}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="3">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:define name="pager_params">
+ <f:param name="id" value="#{id}"/>
+ </ui:define>
+ <ui:param name="pager" value="#{members_pager}"/>
+ </ui:decorate>
+ <h:outputText value="Members"/>
+ </th>
+ </tr>
+ <tr>
+ <td style="width:160px">User Name</td>
+ <td style="width:160px">Role in Group</td>
+ <td style="width:100px">Actions</td>
+ </tr>
+ </thead>
+ <gs:tbody styleClass="results">
+ <ga:attribute name="rendered" value="#{! empty members}"/>
+ <gd:repeat value="#{members}" var="member" idVar="rid" first="#{members_pager.first}" limit="#{members_pager.limit}">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputLink value="user.jsf">
+ <h:outputText value="#{member.user.name}"/>
+ <f:param name="id">
+ <ga:attribute name="value" value="#{member.user.id}"/>
+ </f:param>
+ </h:outputLink>
+ </td>
+ <td>
+ <h:outputText value="#{member.role}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink value="Remove">
+ <f:param name="xuid">
+ <ga:attribute name="value" value="#{member.user.id}"/>
+ </f:param>
+ <f:param name="xmid">
+ <ga:attribute name="value" value="#{member.id}"/>
+ </f:param>
+ <ga:parameter name="xuid" target="#{xuid}"/>
+ <ga:parameter name="xmid" target="#{xmid}"/>
+ <id:loadUser id="#{xuid}" target="#{xuser}"/>
+ <id:deleteMembership user="#{xuser}" membershipId="#{xmid}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </gs:tbody>
+ </table>
+
+ </h:outputText>
+</ui:define>
+
+
+
+</ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/identities.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/identities.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/identities.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,469 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ xmlns:id="http://jbpm.org/jbpm4jsf/identity"
+>
+ <ui:composition template="../sa/t_loggedin.xhtml">
+ <ui:define name="actions">
+ <ga:checkRole roles="#{access.role.identities}">
+ <ga:responseActions>
+ <!-- First identify the view mode -->
+
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <f:setPropertyActionListener value="groups" target="#{viewModeDefault}"/>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <f:setPropertyActionListener value="users" target="#{viewModeDefault}"/>
+ </ga:checkRole>
+ <ga:parameter name="view" target="#{viewMode}" default="#{empty viewModeDefault ? 'users' : viewModeDefault}"/>
+ <ga:parameter name="page" target="#{page}" default="1">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+
+ <!-- User view mode actions -->
+
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <ga:parameter name="name" target="#{userName}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="email" target="#{userEmail}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <id:listUsers unless="#{viewMode != 'users'}" target="#{users}"/>
+ <gd:filter if="#{users != null}" source="#{users}" target="#{users}" entryVar="e" filter="#{userName}" filterArgument="#{e.name}"/>
+ <gd:filter if="#{users != null}" source="#{users}" target="#{users}" entryVar="e" filter="#{userEmail}" filterArgument="#{e.email}"/>
+ <gd:sort if="#{users != null}" source="#{users}" target="#{users}" entryVar="e" argument="#{e.name}"/>
+ <gd:pager target="#{users_pager}" value="#{users}" page="#{page}"/>
+ </ga:checkRole>
+
+ <!-- Group view mode actions -->
+
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <ga:parameter name="gname" target="#{groupName}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="gtype" target="#{groupType}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="gpname" target="#{groupParentName}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <id:listGroups unless="#{viewMode != 'groups'}" target="#{groups}"/>
+ <gd:filter if="#{groups != null}" source="#{groups}" target="#{groups}" entryVar="e" filter="#{groupName}" filterArgument="#{e.name}"/>
+ <gd:filter if="#{groups != null}" source="#{groups}" target="#{groups}" entryVar="e" filter="#{groupType}" filterArgument="#{e.type}"/>
+ <gd:filter if="#{groups != null}" source="#{groups}" target="#{groups}" entryVar="e" filter="#{groupParentName}" filterArgument="#{e.parent.name}"/>
+ <gd:sort if="#{groups != null}" source="#{groups}" target="#{groups}" entryVar="e" argument="#{e.name}"/>
+ <gd:pager target="#{groups_pager}" value="#{groups}" page="#{page}"/>
+ </ga:checkRole>
+ </ga:responseActions>
+ </ga:checkRole>
+ </ui:define>
+
+ <ui:define name="menu">
+ <ga:checkRole roles="#{access.role.identities}" message="#{msgs.unauthorized}">
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2"><h:outputText value="#{msgs['menu.heading.actions']}"/></th>
+ </tr>
+ <tr class="leftmenu" style="height:80px">
+ <td colspan="2">
+ <h:form>
+ <gs:ul>
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <ga:checkRole roles="#{access.role.identities.user.add}">
+ <gs:li>
+ <h:outputText value="#{msgs['identities.action.adduser.beforelink']} "/>
+ <h:outputLink>
+ <f:param name="view" value="adduser"/>
+ <h:outputText value="#{msgs['identities.action.adduser.link']}"/>
+ </h:outputLink>
+ <h:outputText value=" #{msgs['identities.action.adduser.afterlink']}"/>
+ </gs:li>
+ </ga:checkRole>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <ga:checkRole roles="#{access.role.identities.group.add}">
+ <gs:li>
+ <h:outputText value="#{msgs['identities.action.addgroup.beforelink']} "/>
+ <h:outputLink>
+ <f:param name="view" value="addgroup"/>
+ <h:outputText value="#{msgs['identities.action.addgroup.link']}"/>
+ </h:outputLink>
+ <h:outputText value=" #{msgs['identities.action.addgroup.afterlink']}"/>
+ </gs:li>
+ </ga:checkRole>
+ </ga:checkRole>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf"><h:outputText value="#{msgs['menu.heading.views']}"/></th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <gs:li>
+ <h:outputLink style="#{empty viewMode or viewMode == 'users' ? 'font-weight:bold' : ''}">
+ <f:param name="view" value="users"/>
+ <h:outputText value="#{msgs['identities.view.users']}"/>
+ </h:outputLink>
+ </gs:li>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'groups' ? 'font-weight:bold' : ''}">
+ <f:param name="view" value="groups"/>
+ <h:outputText value="#{msgs['identities.view.groups']}"/>
+ </h:outputLink>
+ </gs:li>
+ </ga:checkRole>
+ </gs:ul>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </ga:checkRole>
+ </ui:define>
+
+ <ui:define name="body">
+ <ga:checkRole roles="#{access.role.identities}">
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{users != null}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="6">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:define name="pager_params">
+ <f:param name="view" value="users"/>
+ <f:param name="name" value="#{userName}"/>
+ <f:param name="email" value="#{userEmail}"/>
+ </ui:define>
+ <ui:param name="pager" value="#{users_pager}"/>
+ </ui:decorate>
+ <h:outputText value="Users"/>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <h:outputText value="#{msgs['identities.users.heading.id']}"/>
+ </td>
+ <td style="width:100px;">
+ <h:outputText value="#{msgs['identities.users.heading.name']}"/>
+ </td>
+ <td style="width:120px;">
+ <h:outputText value="#{msgs['identities.users.heading.email']}"/>
+ </td>
+ <td style="width:260px;">
+ <h:outputText value="#{msgs['identities.users.heading.memberships']}"/>
+ </td>
+ <td colspan="2">
+ <h:outputText value="#{msgs['heading.actions']}"/>
+ </td>
+ </tr>
+ </thead>
+ <tbody class="filter">
+ <tr>
+ <td/>
+ <td>
+ <input name="name_i" type="text" style="width:90px;" value="#{userName}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td>
+ <input name="email_i" type="text" style="width:110px;" value="#{userEmail}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td/>
+ <td colspan="2" style="width:150px;">
+ <form id="sf" action="identities.jsf">
+ <input type="hidden" name="view" value="users"/>
+ <input type="hidden" name="name"/>
+ <input type="hidden" name="email"/>
+ </form>
+ <a id="apply" accesskey="a" onclick="document.getElementsByName('name')[0].value=document.getElementsByName('name_i')[0].value;document.getElementsByName('email')[0].value=document.getElementsByName('email_i')[0].value;document.getElementById('sf').submit();return false;"><h:outputText value="#{msgs['filter.apply']}"/></a>
+ <h:outputLink style="margin-left:10px">
+ <f:param name="view" value="users"/>
+ <h:outputText value="#{msgs['filter.clear']}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ </tbody>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty users}"/>
+ <tbody class="results">
+ <gd:repeat value="#{users}" var="user" idVar="rid" first="#{users_pager.first}" limit="#{users_pager.limit}">
+ <gs:tr styleClass="#{rid % 2 == 0 ? 'odd' : 'even'}">
+ <td>
+ <h:outputText value="#{user.id}"/>
+ </td>
+ <td>
+ <h:outputText value="#{user.name}"/>
+ </td>
+ <td>
+ <h:outputText value="#{user.email}"/>
+ </td>
+ <td>
+ <ga:responseActions>
+ <gd:sort source="#{user.memberships}" target="#{memberships}" entryVar="e" argument="#{e.group.name}"/>
+ <gd:sort source="#{memberships}" target="#{memberships}" entryVar="e" argument="#{e.group.type}"/>
+ </ga:responseActions>
+ <gd:repeat value="#{memberships}" var="membership">
+ <h:outputText value="Group (#{membership.group.type}): #{membership.group.name}"/>
+ <h:outputText value=", Role: #{membership.role}" rendered="#{! empty membership.role}"/>
+ <br/>
+ </gd:repeat>
+ </td>
+ <td>
+ <h:outputLink value="user.jsf?id=#{user.id}">
+ <h:outputText value="#{msgs['action.examine']}"/>
+ </h:outputLink>
+ </td>
+ <ga:checkRole roles="#{access.role.identities.user.delete}">
+ <td>
+ <h:form>
+ <h:commandLink value="Delete" onclick="return confirm('#{msgs['identities.users.confirm.delete']}')">
+ <f:param name="xid">
+ <ga:attribute name="value" value="#{user.id}"/>
+ </f:param>
+ <ga:parameter name="xid" target="#{xid}"/>
+ <id:loadUser id="#{xid}" target="#{xuser}"/>
+ <id:deleteUser user="#{xuser}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{xuser}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </ga:checkRole>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </gs:div>
+ <ga:checkRole roles="#{access.role.identities.user.add}">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{viewMode == 'adduser'}"/>
+ <h:form>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="2">
+ <h:outputText value="#{msgs['identities.view.adduser']}"/>
+ </th>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <tr>
+ <th><h:outputText value="#{msgs['identities.adduser.prompt.name']}"/></th>
+ <td><h:inputText value="#{createUserName}"/></td>
+ </tr>
+ <tr>
+ <th><h:outputText value="#{msgs['identities.adduser.prompt.password']}"/></th>
+ <td><h:inputSecret value="#{createUserPassword}"/></td>
+ </tr>
+ <tr>
+ <th><h:outputText value="#{msgs['identities.adduser.prompt.passwordconfirm']}"/></th>
+ <td><h:inputSecret value="#{createUserPasswordConfirm}"/></td>
+ </tr>
+ <tr>
+ <th><h:outputText value="#{msgs['identities.adduser.prompt.email']}"/></th>
+ <td><h:inputText value="#{createUserEmail}"/></td>
+ </tr>
+ <tr>
+ <th/>
+ <td style="text-align:right;">
+ <h:commandButton value="#{msgs['identities.adduser.button']}">
+ <id:createUser
+ userName="#{createUserName}"
+ password="#{createUserPassword}"
+ passwordConfirm="#{createUserPasswordConfirm}"
+ email="#{createUserEmail}"
+ />
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ <n:nav outcome="success" url="identities.jsf?view=users" storeMessages="true"/>
+ </h:commandButton>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </h:form>
+ </gs:div>
+ </ga:checkRole>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{groups != null}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="6">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:param name="pager" value="#{groups_pager}"/>
+ <ui:define name="pager_params">
+ <f:param name="view" value="groups"/>
+ <f:param name="gname" value="#{groupName}"/>
+ <f:param name="gtype" value="#{groupType}"/>
+ <f:param name="gpname" value="#{groupParentName}"/>
+ </ui:define>
+ </ui:decorate>
+ <h:outputText value="Groups"/>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <h:outputText value="#{msgs['identities.groups.heading.id']}"/>
+ </td>
+ <td style="width:100px;">
+ <h:outputText value="#{msgs['identities.groups.heading.name']}"/>
+ </td>
+ <td style="width:120px;">
+ <h:outputText value="#{msgs['identities.groups.heading.type']}"/>
+ </td>
+ <td style="width:120px;">
+ <h:outputText value="#{msgs['identities.groups.heading.parent']}"/>
+ </td>
+ <td colspan="2">
+ <h:outputText value="#{msgs['heading.actions']}"/>
+ </td>
+ </tr>
+ </thead>
+ <tbody class="filter">
+ <tr>
+ <td/>
+ <td>
+ <input name="gname_i" type="text" style="width:90px;" value="#{groupName}" onkeypress="keypress(event,'gapply')"/>
+ </td>
+ <td>
+ <input name="gtype_i" type="text" style="width:110px;" value="#{groupType}" onkeypress="keypress(event,'gapply')"/>
+ </td>
+ <td>
+ <input name="gpname_i" type="text" style="width:90px;" value="#{groupParentName}" onkeypress="keypress(event,'gapply')"/>
+ </td>
+ <td colspan="2" style="width:150px;">
+ <form id="gsf" action="identities.jsf">
+ <input type="hidden" name="view" value="groups"/>
+ <input type="hidden" name="gname"/>
+ <input type="hidden" name="gtype"/>
+ <input type="hidden" name="gpname"/>
+ </form>
+ <a id="gapply" accesskey="a" onclick="document.getElementsByName('gname')[0].value=document.getElementsByName('gname_i')[0].value;document.getElementsByName('gpname')[0].value=document.getElementsByName('gpname_i')[0].value;document.getElementsByName('gtype')[0].value=document.getElementsByName('gtype_i')[0].value;document.getElementById('gsf').submit();return false;"><h:outputText value="#{msgs['filter.apply']}"/></a>
+ <h:outputLink style="margin-left:10px">
+ <f:param name="view" value="groups"/>
+ <h:outputText value="#{msgs['filter.clear']}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ </tbody>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty groups}"/>
+ <tbody class="results">
+ <gd:repeat value="#{groups}" var="group" idVar="rid" first="#{groups_pager.first}" limit="#{groups_pager.limit}">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputText value="#{group.id}"/>
+ </td>
+ <td>
+ <h:outputText value="#{group.name}"/>
+ </td>
+ <td>
+ <h:outputText value="#{group.type}"/>
+ </td>
+ <td>
+ <h:outputText value="#{group.parent.name}"/>
+ </td>
+ <td>
+ <h:outputLink value="group.jsf?id=#{group.id}">
+ <h:outputText value="#{msgs['action.examine']}"/>
+ </h:outputLink>
+ </td>
+ <ga:checkRole roles="#{access.role.identities.group.delete}">
+ <td>
+ <h:form>
+ <h:commandLink value="Delete" onclick="return confirm('#{msgs['identities.groups.confirm.delete']}')">
+ <f:param name="xid">
+ <ga:attribute name="value" value="#{group.id}"/>
+ </f:param>
+ <ga:parameter name="xid" target="#{xid}"/>
+ <id:loadGroup id="#{xid}" target="#{xgroup}"/>
+ <id:deleteGroup group="#{xgroup}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{xgroup}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </ga:checkRole>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </gs:div>
+ <ga:checkRole roles="#{access.role.identities.group.add}">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{viewMode == 'addgroup'}"/>
+ <h:form>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="2">
+ <h:outputText value="#{msgs['identities.view.addgroup']}"/>
+ </th>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <tr>
+ <th><h:outputText value="#{msgs['identities.addgroup.prompt.name']}"/></th>
+ <td><h:inputText value="#{createGroupName}"/></td>
+ </tr>
+ <tr>
+ <th><h:outputText value="#{msgs['identities.addgroup.prompt.type']}"/></th>
+ <td><h:inputText value="#{createGroupType}"/></td>
+ </tr>
+ <tr>
+ <th><h:outputText value="#{msgs['identities.addgroup.prompt.parent']}"/></th>
+ <td><h:inputText value="#{createGroupParentName}"/></td>
+ </tr>
+ <tr>
+ <th/>
+ <td style="text-align:right;">
+ <h:commandButton value="#{msgs['identities.addgroup.button']}">
+ <id:loadGroupByName
+ groupName="#{createGroupParentName}"
+ target="#{parentGroup}"
+ unless="#{empty createGroupParentName}"
+ />
+ <id:createGroup
+ groupName="#{createGroupName}"
+ type="#{createGroupType}"
+ parentGroup="#{parentGroup}"
+ />
+ <n:nav outcome="success" url="identities.jsf?view=groups" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandButton>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </h:form>
+ </gs:div>
+ </ga:checkRole>
+ </ga:checkRole>
+ </ga:checkRole>
+ </ui:define>
+ </ui:composition>
+
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/jobs.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/jobs.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/jobs.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+<ui:composition template="t_loggedin.xhtml">
+ <ui:define name="menu">
+ <ga:checkRole roles="#{access.role.jobs}" message="#{msgs.unauthorized}">
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Actions</th>
+ </tr>
+ <tr class="leftmenu" style="height:80px">
+ <td colspan="2">
+ <h:form>
+ </h:form>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'all' ? 'font-weight:bold' : ''}">
+ <f:param name="view" value="all"/>
+ All Jobs
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'timers' ? 'font-weight:bold' : ''}">
+ <f:param name="view" value="timers"/>
+ Timers
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'action' ? 'font-weight:bold' : ''}">
+ <f:param name="view" value="action"/>
+ Execute Action Jobs
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'node' ? 'font-weight:bold' : ''}">
+ <f:param name="view" value="node"/>
+ Execute Node Jobs
+ </h:outputLink>
+ </gs:li>
+ </gs:ul>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </ga:checkRole>
+
+ </ui:define>
+
+ <ui:define name="actions">
+ <ga:responseActions>
+ <ga:parameter name="view" target="#{viewMode}" default="all"/>
+ <ga:parameter name="page" target="#{page}" default="1"/>
+
+ <j4j:listJobs target="#{jobs}"/>
+ <f:setPropertyActionListener value="#{viewMode == 'timers' ? 12 : viewMode == 'action' ? 9 : viewMode == 'node' ? 9 : 10}" target="#{colspan}"/>
+ <gd:filter if="#{viewMode == 'timers'}" entryVar="e" source="#{jobs}" target="#{jobs}" test="#{e.class.name == 'org.jbpm.job.Timer'}"/>
+ <gd:filter if="#{viewMode == 'action'}" entryVar="e" source="#{jobs}" target="#{jobs}" test="#{e.class.name == 'org.jbpm.job.ExecuteActionJob'}"/>
+ <gd:filter if="#{viewMode == 'node'}" entryVar="e" source="#{jobs}" target="#{jobs}" test="#{e.class.name == 'org.jbpm.job.ExecuteNodeJob'}"/>
+ <gd:pager target="#{pager}" value="#{jobs}" page="#{page}"/>
+ </ga:responseActions>
+ </ui:define>
+
+ <ui:define name="body">
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="#{colspan}">
+ <ui:decorate template="t_pager.xhtml">
+ </ui:decorate>
+ <h:outputText value="#{viewMode == 'timers' ? 'Timers' : viewMode == 'action' ? 'Execute Action Jobs' : viewMode == 'node' ? 'Execute Node Jobs' : 'All Jobs'}"/>
+ </th>
+ </tr>
+ <tr>
+ <td>ID</td>
+ <h:outputText rendered="#{viewMode == 'timers'}">
+ <td>Name</td>
+ <td>Repeat</td>
+ <td>Transition Name</td>
+ </h:outputText>
+ <h:outputText rendered="#{viewMode == 'all'}">
+ <td>Type</td>
+ </h:outputText>
+ <td>Due</td>
+ <td>Status</td>
+ <td>Process Instance</td>
+ <td>Token</td>
+ <td>Task Instance</td>
+ <td>Exception</td>
+ <td>Retries</td>
+ <td>Actions</td>
+ </tr>
+ </thead>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty jobs}"/>
+ <tbody class="results">
+ <gd:repeat var="job" idVar="rid">
+ <ga:attribute name="value" value="#{jobs}"/>
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputText value="#{job.id}"/>
+ </td>
+ <h:outputText rendered="#{viewMode == 'timers'}">
+ <td>
+ <h:outputText value="#{job.name}"/>
+ </td>
+ <td>
+ <h:outputText value="#{job.repeat}"/>
+ </td>
+ <td>
+ <h:outputText value="#{job.transitionName}"/>
+ </td>
+ </h:outputText>
+ <h:outputText rendered="#{viewMode == 'all'}">
+ <td>
+ <h:outputText value="#{job.class.name == 'org.jbpm.job.Timer' ? 'Timer' : job.class.name == 'org.jbpm.job.ExecuteActionJob' ? 'Execute Action' : job.class.name == 'org.jbpm.job.ExecuteNodeJob' ? 'Execute Node' : job.class.name}"/>
+ </td>
+ </h:outputText>
+ <td>
+ <h:outputText value="#{job.dueDate}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="Running" rendered="#{! job.suspended}" styleClass="statusRunning"/>
+ <h:outputText value="Suspended" rendered="#{job.suspended}" styleClass="statusSuspended"/>
+ </td>
+ <td>
+ <h:outputLink value="procins.jsf" rendered="#{job.processInstance != null}">
+ <f:param name="id" value="#{job.processInstance.id}"/>
+ <gs:b>
+ <h:outputText value="#{job.processInstance.processDefinition.name}"/>
+ </gs:b>
+ <h:outputText value=" ID #{job.processInstance.id}"/>
+ </h:outputLink>
+ </td>
+ <td>
+ <h:outputLink value="token.jsf" rendered="#{job.token != null}">
+ <f:param name="id" value="#{job.token.id}"/>
+ <h:outputText value="#{job.token.name}" rendered="#{! empty job.token.name}"/>
+ <h:outputText value="(Unnamed)" rendered="#{empty job.token.name}"/>
+ <h:outputText value=" ID #{job.token.id}"/>
+ </h:outputLink>
+ </td>
+ <td>
+ <h:outputLink value="task.jsf" rendered="#{job.taskInstance != null}">
+ <f:param name="id" value="#{job.taskInstance.id}"/>
+ <h:outputText value="#{job.taskInstance.name}"/>
+ </h:outputLink>
+ </td>
+ <td>
+ <h:outputText value="#{job.exception}"/>
+ </td>
+ <td>
+ <h:outputText value="#{job.retries}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink onclick="return confirm('Are you sure you want to delete this job? The operation cannot be undone.');">
+ <h:outputText value="Delete"/>
+ <j4j:loadJob id="#{job.id}" target="#{xjob}"/>
+ <j4j:delete value="#{xjob}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ <h:outputText rendered="#{empty jobs}">
+ <tbody class="filter">
+ <tr>
+ <td colspan="#{colspan}" style="text-align:center;">No results in view.</td>
+ </tr>
+ </tbody>
+ </h:outputText>
+ </table>
+ </ui:define>
+</ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procdef.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procdef.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procdef.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ >
+<ui:composition template="t_loggedin.xhtml">
+<ui:define name="menu">
+<ga:responseActions>
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <ga:parameter name="view" target="#{viewMode}" default="ins"/>
+ <!-- process intsances parameters -->
+ <ga:parameter name="pi_key" target="#{pi_key}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="fr" target="#{filter_running}" default="true"/>
+ <ga:parameter name="fs" target="#{filter_suspended}" default="true"/>
+ <ga:parameter name="fe" target="#{filter_ended}" default="false"/>
+ <!-- tasks parameters -->
+ <ga:parameter name="name" target="#{task_filter_name}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="actor" target="#{task_filter_actor}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="fn" target="#{task_filter_notstarted}" default="true"/>
+ <ga:parameter name="fr" target="#{task_filter_running}" default="true"/>
+ <ga:parameter name="fs" target="#{task_filter_suspended}" default="true"/>
+ <ga:parameter name="fe" target="#{task_filter_ended}" default="false"/>
+
+ <j4j:loadProcess id="#{id}" target="#{pd}"/>
+ <j4j:listTasksForProcess unless="#{viewMode != 'task'}" process="#{pd}" target="#{tasks}"/>
+ <j4j:listProcessInstances unless="#{viewMode != 'ins'}" target="#{piList}" processId="#{id}"/>
+ <gd:filter source="#{piList}" target="#{piList}" entryVar="entry" test="#{filter_ended and entry.end != null or entry.end == null and (filter_suspended and entry.suspended or filter_running and ! entry.suspended)}"/>
+ <gd:filter if="#{! empty pi_key}" source="#{piList}" target="#{piList}" entryVar="entry" filter="#{pi_key}" filterArgument="#{entry.key == null ? '' : entry.key}"/>
+
+ <gd:filter source="#{tasks}" target="#{tasks}" entryVar="entry" test="#{task_filter_notstarted and entry.start == null and entry.end == null or task_filter_ended and entry.end != null or (entry.start != null and entry.end == null) and (task_filter_suspended and entry.suspended or task_filter_running and ! entry.suspended)}"/>
+ <gd:filter if="#{! empty task_filter_name}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_name}" filterArgument="#{entry.name == null ? '' : entry.name}"/>
+ <gd:filter if="#{! empty task_filter_actor}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_actor}" filterArgument="#{entry.actorId == null ? '' : entry.actorId}"/>
+</ga:responseActions>
+<gs:div style="padding:0;margin:0">
+ <ga:attribute name="rendered" value="#{pd != null}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Process Summary</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>Process Link</th>
+ <td>
+ <h:outputLink value="procdef.jsf" style="font-weight:bold">
+ <f:param name="id" value="#{id}"/>
+ <h:outputText value="ID #{id}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Name</th>
+ <td>
+ <h:outputText value="#{pd.name}"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Version</th>
+ <td>
+ <h:outputText value="#{pd.version}"/>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'ins' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="ins"/>
+ Process Instances
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'task' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="task"/>
+ Tasks
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'img' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="img"/>
+ Process Image
+ </h:outputLink>
+ </gs:li>
+ </gs:ul>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Actions</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <h:form>
+ <h:inputHidden value="#{id}"/>
+ <gs:ul>
+ <gs:li>
+ <h:commandLink value="Start">
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadProcess id="#{id}" target="#{pd}"/>
+ <j4j:startProcess process="#{pd}" target="#{pi}"/>
+ <n:nav outcome="started" url="procins.jsf?id=#{pi.id}" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" a new instance of this process"/>
+ </gs:li>
+ <gs:li>
+ <h:commandLink value="Delete" onclick="return confirm('Are you sure you want to permanently delete this process? This operation cannot be undone.')">
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadProcess id="#{id}" target="#{pd}"/>
+ <j4j:delete value="#{pd}"/>
+ <n:nav outcome="success" url="processes.jsf" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this process"/>
+ </gs:li>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+</gs:div>
+</ui:define>
+
+<ui:define name="body">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{pd != null}"/>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'ins'}"/>
+ <ui:decorate template="t_processinstances.xhtml">
+ <ui:define name="processinstances_title">
+ Process Instances <b>for "#{pd.name}" v#{pd.version}</b>
+ </ui:define>
+ <ui:define name="params">
+ <f:param name="id" value="#{id}"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'task'}"/>
+ <ui:decorate template="t_tasks.xhtml">
+ <ui:define name="tasks_title">
+ Tasks <b>for "#{pd.name}" v#{pd.version}</b>
+ </ui:define>
+ <ui:define name="params">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="#{viewMode}"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'img'}"/>
+ <img alt="[Process Image Not Available]" src="pi/#{id}.jpg" style="margin-left:auto;margin-right:auto"/>
+ </h:outputText>
+ </gs:div>
+</ui:define>
+</ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/processes.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/processes.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/processes.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+ <ui:composition template="../sa/t_loggedin.xhtml">
+ <ui:define name="actions">
+ <ga:responseActions>
+ <j4j:listProcesses target="#{proclist}"/>
+ <ga:parameter name="page" target="#{page}" default="1">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <ga:parameter name="name" target="#{name}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="version" target="#{version}" default="">
+ <f:converter converterId="gravel.RangeListFilter"/>
+ </ga:parameter>
+ <gd:filter source="#{proclist}" target="#{proclist}" entryVar="entry" filter="#{name}" filterArgument="#{entry.name}"/>
+ <gd:filter source="#{proclist}" target="#{proclist}" entryVar="entry" filter="#{version}" filterArgument="#{entry.version}"/>
+ <!-- calculate action column size -->
+ <f:setPropertyActionListener value="1" target="#{actionColspan}"/>
+ <ga:checkRole roles="#{access.role.process.delete}">
+ <f:setPropertyActionListener value="#{actionColspan + 1}" target="#{actionColspan}"/>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.process.start}">
+ <f:setPropertyActionListener value="#{actionColspan + 1}" target="#{actionColspan}"/>
+ </ga:checkRole>
+ <gd:pager target="#{pager}" value="#{proclist}" page="#{page}"/>
+ </ga:responseActions>
+ </ui:define>
+
+ <ui:define name="menu">
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="#{actionColspan}">
+ <h:outputText value="#{msgs['menu.heading.actions']}"/>
+ </th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="#{actionColspan}">
+ <h:form>
+ <gs:ul>
+ <ga:checkRole roles="#{access.role.process.deploy}">
+ <gs:li>
+ <h:outputText value="#{msgs['processes.action.deploy.beforelink']} "/>
+ <h:outputLink value="deployproc.jsf">
+ <h:outputText value="#{msgs['processes.action.deploy.link']}"/>
+ </h:outputLink>
+ <h:outputText value=" #{msgs['processes.action.deploy.afterlink']}"/>
+ </gs:li>
+ </ga:checkRole>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </ui:define>
+
+ <ui:define name="body">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{proclist != null}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <gs:th>
+ <ga:attribute name="colspan" value="#{actionColspan + 3}" type="int"/>
+ <ui:decorate template="t_pager.xhtml">
+ <ui:define name="pager_params">
+ <f:param name="name" value="#{name}"/>
+ <f:param name="version" value="#{version}"/>
+ </ui:define>
+ </ui:decorate>
+ <h:outputText value="Processes"/>
+ </gs:th>
+ </tr>
+ <tr>
+ <td>
+ Process ID
+ </td>
+ <td style="width:120px;">
+ Process Name
+ </td>
+ <td style="width:50px;">
+ Version
+ </td>
+ <td colspan="#{actionColspan}">
+ Actions
+ </td>
+ </tr>
+ </thead>
+ <tbody class="filter">
+ <tr>
+ <td/>
+ <td>
+ <input name="name_i" type="text" style="width:110px;" value="#{name}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td>
+ <input name="version_i" type="text" style="width:40px;" value="#{version}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td colspan="#{actionColspan}" style="width:150px;">
+ <form id="sf" action="processes.jsf">
+ <input type="hidden" name="name"/>
+ <input type="hidden" name="version"/>
+ </form>
+ <a href="#" id="apply" accesskey="a" onclick="document.getElementsByName('name')[0].value=document.getElementsByName('name_i')[0].value;document.getElementsByName('version')[0].value=document.getElementsByName('version_i')[0].value;document.getElementById('sf').submit();return false;">Apply Filter</a>
+ <a href="?" style="margin-left:10px">Clear Filter</a>
+ </td>
+ </tr>
+ </tbody>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty proclist}"/>
+ <tbody class="results">
+ <gd:repeat value="#{proclist}" var="pd" idVar="rid" first="#{pager.first}" limit="#{pager.limit}">
+ <h:outputText rendered="#{false}">
+ <ga:attribute name="value" value="#{rid}"/>
+ </h:outputText>
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ #{pd.id}
+ </td>
+ <td>
+ <h:outputText value="#{pd.name}"/>
+ </td>
+ <td>
+ <h:outputText value="#{pd.version}"/>
+ </td>
+ <td>
+ <h:outputLink value="procdef.jsf?id=#{pd.id}">
+ Examine
+ </h:outputLink>
+ </td>
+ <ga:checkRole roles="#{access.role.process.delete}">
+ <td>
+ <h:form>
+ <h:commandLink>Delete
+ <ga:attribute name="onclick" value="return confirm('#{msgs['confirm.process.delete']}')"/>
+ <f:param name="id" value="#{pd.id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadProcess id="#{id}" target="#{pdx}"/>
+ <j4j:delete value="#{pdx}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.process.start}">
+ <td>
+ <h:form>
+ <h:commandLink>Start
+ <f:param name="id" value="#{pd.id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadProcess id="#{id}" target="#{pdx}"/>
+ <j4j:startProcess process="#{pdx}" target="#{pi}"/>
+ <n:nav outcome="started" url="procins.jsf?id=#{pi.id}" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </ga:checkRole>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </gs:div>
+ </ui:define>
+ </ui:composition>
+
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procins.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procins.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/procins.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ >
+<ui:composition template="t_loggedin.xhtml">
+
+<ui:define name="actions">
+ <ga:responseActions>
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <ga:parameter name="view" target="#{viewMode}" default="task"/>
+ <j4j:loadProcessInstance id="#{id}" target="#{pi}"/>
+ <gd:reverse source="#{pi.rootToken.comments}" target="#{comments}"/>
+ <j4j:listTokens processInstance="#{pi}" target="#{tokenList}"/>
+ <j4j:getDiagramInfo unless="#{viewMode != 'img'}" process="#{pi.processDefinition}" target="#{diagramInfo}"/>
+ <j4j:listTasksForProcessInstance unless="#{viewMode != 'task'}" target="#{tasks}" processInstance="#{pi}"/>
+ <gd:sort if="#{! empty tasks}" source="#{tasks}" target="#{tasks}" entryVar="e" argument="#{e.id}"/>
+ <j4j:getVariableMap unless="#{viewMode != 'vars'}" target="#{vars}" value="#{pi}"/>
+ <gd:sort if="#{! empty vars}" source="#{vars}" target="#{vars}" entryVar="e" argument="#{e.key}"/>
+ <!-- tasks parameters -->
+ <ga:parameter name="name" target="#{task_filter_name}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="actor" target="#{task_filter_actor}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="fn" target="#{task_filter_notstarted}" default="true"/>
+ <ga:parameter name="fr" target="#{task_filter_running}" default="true"/>
+ <ga:parameter name="fs" target="#{task_filter_suspended}" default="true"/>
+ <ga:parameter name="fe" target="#{task_filter_ended}" default="false"/>
+
+ <gd:filter source="#{tasks}" target="#{tasks}" entryVar="entry" test="#{task_filter_notstarted and entry.start == null and entry.end == null or task_filter_ended and entry.end != null or (entry.start != null and entry.end == null) and (task_filter_suspended and entry.suspended or task_filter_running and ! entry.suspended)}"/>
+ <gd:filter if="#{! empty task_filter_name}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_name}" filterArgument="#{entry.name == null ? '' : entry.name}"/>
+ <gd:filter if="#{! empty task_filter_actor}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_actor}" filterArgument="#{entry.actorId == null ? '' : entry.actorId}"/>
+ </ga:responseActions>
+</ui:define>
+
+<ui:define name="menu">
+<gs:div style="padding:0;margin:0">
+ <ga:attribute name="rendered" value="#{pi != null}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Process Instance Summary</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>Instance Link</th>
+ <td>
+ <h:outputLink style="font-weight:bold">
+ <f:param name="id" value="#{id}"/>
+ <h:outputText value="ID #{id}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Key</th>
+ <td>
+ <h:outputText value="#{pi.key}"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Process</th>
+ <td>
+ <h:outputLink value="procdef.jsf">
+ <f:param name="id" value="#{pi.processDefinition.id}"/>
+ <h:outputText value="#{pi.processDefinition.name} v#{pi.processDefinition.version}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Status</th>
+ <td>
+ <h:outputText value="Ended" styleClass="statusEnded">
+ <ga:attribute name="rendered" value="#{pi.end != null}"/>
+ </h:outputText>
+ <h:outputText value=" (was suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{pi.end != null and pi.suspended}"/>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{pi.end == null}"/>
+ <ga:attribute name="value" value="#{pi.suspended ? 'Suspended' : 'Running'}"/>
+ <ga:attribute name="styleClass" value="#{pi.suspended ? 'statusSuspended' : 'statusRunning'}"/>
+ </h:outputText>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Start Date</th>
+ <td>
+ <h:outputText value="#{pi.start}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>End Date</th>
+ <td>
+ <h:outputText value="#{pi.end}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'task' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="task"/>
+ Tasks
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'comments' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="comments"/>
+ Comments
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'token' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="token"/>
+ Tokens
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'img' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="img"/>
+ Process Image
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'vars' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="vars"/>
+ Process Variables
+ </h:outputLink>
+ </gs:li>
+ </gs:ul>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Actions</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <h:form>
+ <h:inputHidden value="#{id}"/>
+ <gs:ul>
+ <gs:li rendered="#{pi.end == null}">
+ <h:commandLink value="Suspend">
+ <ga:attribute name="rendered" value="#{! pi.suspended}"/>
+ <j4j:loadProcessInstance id="#{id}" target="#{pi}"/>
+ <j4j:suspend value="#{pi}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:commandLink value="Resume">
+ <ga:attribute name="rendered" value="#{pi.suspended}"/>
+ <j4j:loadProcessInstance id="#{id}" target="#{pi}"/>
+ <j4j:resume value="#{pi}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this process instance"/>
+ </gs:li>
+ <gs:li>
+ <ga:attribute name="rendered" value="#{pi.end == null}"/>
+ <h:commandLink value="End">
+ <j4j:loadProcessInstance id="#{id}" target="#{pi}"/>
+ <j4j:cancel value="#{pi}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this process instance"/>
+ </gs:li>
+ <gs:li>
+ <h:commandLink value="Delete" onclick="return confirm('Are you sure you want to permanently delete this process instance? This operation cannot be undone.')">
+ <j4j:loadProcessInstance id="#{id}" target="#{pi}" forUpdate="false"/>
+ <f:setPropertyActionListener value="#{pi.processDefinition.id}" target="#{pdid}"/>
+ <j4j:delete value="#{pi}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{pi}"/>
+ <n:nav outcome="success" url="procdef.jsf?id=#{pdid}" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this process instance"/>
+ </gs:li>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+</gs:div>
+</ui:define>
+
+<ui:define name="body">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{pi != null}"/>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'comments'}"/>
+ <ui:decorate template="t_comments.xhtml">
+ <ui:define name="loadTarget">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadProcessInstance id="#{id}" target="#{pi}"/>
+ <f:setPropertyActionListener value="#{pi.rootToken}" target="#{target}"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ <gs:div>
+ <ga:attribute name="style" value="position:relative;height:#{diagramInfo.height}px;width:#{diagramInfo.width}px"/>
+ <ga:attribute name="rendered" value="#{viewMode == 'img'}"/>
+ <img
+ alt=""
+ src="pi/#{pi.processDefinition.id}.jpg"
+ style="position:absolute;top:0;left:0"/>
+ <gd:repeat value="#{tokenList}" var="token">
+ <ui:fragment>
+ <ui:param name="node" value="#{diagramInfo.nodeMap[token.node.name]}"/>
+ <gs:div>
+ <ga:attribute name="style" value="top:#{node.y - 12}px;left:#{node.x + 2}px;width:#{node.width - 3}px;height:#{node.height + 11}px"/>
+ <ga:attribute name="styleClass" value="#{token.end != null ? 'pboxs_e' : token.suspended ? 'pboxs_s' : 'pboxs'}"/>
+ </gs:div>
+ <gs:div>
+ <ga:attribute name="style" value="top:#{node.y}px;left:#{node.x}px;width:#{node.width - 3}px;height:#{node.height - 3}px"/>
+ <ga:attribute name="styleClass" value="#{token.end != null ? 'pbox_e' : token.suspended ? 'pbox_s' : 'pbox'}"/>
+ </gs:div>
+ <gs:div>
+ <ga:attribute name="style" value="top:#{node.y - 14}px;left:#{node.x}px;width:#{node.width - 1}px"/>
+ <ga:attribute name="styleClass" value="pboxce"/>
+ <gs:div>
+ <ga:attribute name="styleClass" value="#{token.end != null ? 'pboxc_e' : token.suspended ? 'pboxc_s' : 'pboxc'}"/>
+ <h:outputLink value="token.jsf">
+ <f:param name="id" value="#{token.id}"/>
+ <h:outputText value="Running" rendered="#{token.end == null and ! token.suspended}"/>
+ <h:outputText value="Suspended" rendered="#{token.end == null and token.suspended}"/>
+ <h:outputText value="Ended" rendered="#{token.end != null}"/>
+ <h:outputText rendered="#{token.name != null}" value=" "#{token.name}""/>
+ </h:outputLink>
+ </gs:div>
+ </gs:div>
+ </ui:fragment>
+ </gd:repeat>
+ <gd:repeat value="#{diagramInfo.nodes}" var="node">
+ </gd:repeat>
+ </gs:div>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'task'}"/>
+ <ui:decorate template="t_tasks.xhtml">
+ <ui:define name="params">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="task"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'token'}"/>
+ <ui:decorate template="t_tokens.xhtml">
+ <ui:param name="tokens" value="#{tokenList}"/>
+ <ui:define name="params">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="token"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'vars'}"/>
+ <ui:decorate template="t_vars.xhtml">
+ <ui:define name="loadEntity">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadProcessInstance id="#{id}" target="#{entity}"/>
+ </ui:define>
+ <ui:define name="params">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="vars"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ </gs:div>
+</ui:define>
+</ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_comments.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_comments.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_comments.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ >
+<ui:component>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty comments}"/>
+ <table class="results" style="width:500px">
+ <thead>
+ <tr>
+ <th colspan="1">Comments</th>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <gd:repeat value="#{comments}" var="comment" idVar="rid">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <gs:div>
+ <h:outputText value="Anonymous comment" rendered="#{empty comment.actorId}"/>
+ <h:outputText value="Comment by " rendered="#{! empty comment.actorId}"/>
+ <h:outputText value="#{comment.actorId}" rendered="#{! empty comment.actorId}" style="font-weight:bold"/>
+ <h:outputText value=" relating to task "" rendered="#{comment.taskInstance != null}"/>
+ <h:outputText value="#{comment.taskInstance.name}" rendered="#{comment.taskInstance != null}" style="font-weight:bold"/>
+ <h:outputText value=""" rendered="#{comment.taskInstance != null}"/>
+ <h:outputText value=" on "/>
+ <h:outputText value="#{comment.time}" style="white-space:nowrap">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </gs:div>
+ <h:outputText styleClass="comment" value="#{comment.message}" escape="false">
+ <f:converter converterId="gravel.BreakingEscape"/>
+ </h:outputText>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </table>
+ <br/>
+ </h:outputText>
+ <h:form>
+ <table class="results" style="width:500px">
+ <thead>
+ <tr>
+ <th>Add a comment</th>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <tr>
+ <td>
+ <h:inputTextarea styleClass="comment" value="#{comment}"/>
+ </td>
+ </tr>
+ <tr>
+ <td style="text-align:right">
+ <h:commandButton value="Save">
+ <ui:insert name="loadTarget"/>
+ <j4j:addComment comment="#{comment}" target="#{target}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandButton>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </h:form>
+</ui:component>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_loggedin.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_loggedin.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_loggedin.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+ <ui:composition template="../ua/t_base.xhtml">
+ <ui:define name="root_actions">
+ <gd:loadProperties path="access.properties" var="access"/>
+ <ui:insert name="actions"/>
+ </ui:define>
+ <ui:define name="top">
+ <gs:span rendered="#{! empty request.remoteUser}" style="float:right;vertical-align:bottom">
+ <h:form>
+ <h:outputFormat value="#{msgs['top.loggedinas']}" style="margin-right:20px">
+ <f:param value="#{request.remoteUser}"/>
+ </h:outputFormat>
+ <h:commandLink value="#{msgs['top.logout']}">
+ <ga:logOut/>
+ <n:nav outcome="default" redirect="true"/>
+ </h:commandLink>
+ </h:form>
+ </gs:span>
+ </ui:define>
+
+ <ui:define name="header">
+ <h:outputText value="#{msgs['topmenu.caption']}" style="margin-left:30px;margin-right:10px"/>
+ <h:outputLink styleClass="headermenufirst" value="processes.jsf" style="#{view.viewId == '/sa/processes.xhtml' ? 'font-weight:bold' : ''}">
+ <h:outputText value="#{msgs['topmenu.processes']}"/>
+ </h:outputLink>
+ <h:outputLink styleClass="headermenu" value="tasks.jsf" style="#{view.viewId == '/sa/tasks.xhtml' ? 'font-weight:bold' : ''}">
+ <h:outputText value="#{msgs['topmenu.tasks']}"/>
+ </h:outputLink>
+ <ga:checkRole roles="#{access.role.jobs}">
+ <h:outputLink styleClass="headermenu" value="jobs.jsf" style="#{view.viewId == '/sa/jobs.xhtml' ? 'font-weight:bold' : ''}">
+ <h:outputText value="#{msgs['topmenu.jobs']}"/>
+ </h:outputLink>
+ </ga:checkRole>
+ <ga:checkRole roles="#{access.role.identities}">
+ <h:outputLink styleClass="headermenu" value="identities.jsf" style="#{view.viewId == '/sa/identities.xhtml' ? 'font-weight:bold' : ''}">
+ <h:outputText value="#{msgs['topmenu.identities']}"/>
+ </h:outputLink>
+ </ga:checkRole>
+ </ui:define>
+ </ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_pager.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_pager.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_pager.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+<ui:component>
+ <span style="float:right">
+ <h:outputText value="Pager is null" rendered="#{pager == null}"/>
+ <h:outputText value="No results" rendered="#{pager != null and pager.totalPages == 0}"/>
+ <h:outputText rendered="#{pager != null and pager.totalPages != 0}">
+ <h:outputLink styleClass="pager" disabled="#{pager.firstPage}">
+ <ui:insert name="pager_params"/>
+ <f:param name="page" value="1"/>
+ <h:outputText value="First"/>
+ </h:outputLink>
+ <h:outputText value=" "/>
+ <h:outputLink styleClass="pager" disabled="#{pager.firstPage}">
+ <ui:insert name="pager_params"/>
+ <f:param name="page" value="#{pager.page - 1}"/>
+ <h:outputText value="Prev"/>
+ </h:outputLink>
+ <h:outputText value=" - Page #{pager.page} of #{pager.totalPages} - "/>
+ <h:outputLink styleClass="pager" disabled="#{pager.lastPage}">
+ <ui:insert name="pager_params"/>
+ <f:param name="page" value="#{pager.page + 1}"/>
+ <h:outputText value="Next"/>
+ </h:outputLink>
+ <h:outputText value=" "/>
+ <h:outputLink styleClass="pager" disabled="#{pager.lastPage}">
+ <ui:insert name="pager_params"/>
+ <f:param name="page" value="#{pager.totalPages}"/>
+ <h:outputText value="Last"/>
+ </h:outputLink>
+ </h:outputText>
+ </span>
+</ui:component>
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_processinstances.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_processinstances.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_processinstances.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ >
+<ui:component>
+
+<ga:responseActions>
+ <ga:parameter name="page" target="#{page}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <gd:pager value="#{piList}" target="#{piList_pager}" page="#{page}"/>
+</ga:responseActions>
+<table class="results">
+<thead>
+
+ <tr>
+ <th colspan="9">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:define name="pager_params">
+ <ui:insert name="params"/>
+ <f:param name="pi_key" value="#{pi_key}"/>
+ <f:param name="fr" value="#{filter_running}"/>
+ <f:param name="fs" value="#{filter_suspended}"/>
+ <f:param name="fe" value="#{filter_ended}"/>
+ </ui:define>
+ <ui:param name="pager" value="#{piList_pager}"/>
+ </ui:decorate>
+ <ui:insert name="processinstances_title">Process Instances</ui:insert>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ Instance ID
+ </td>
+ <td style="width:120px;">
+ Key
+ </td>
+ <td style="width:110px;">
+ Status
+ </td>
+ <td style="width:150px;">
+ Start Date
+ </td>
+ <td style="width:150px;">
+ End Date
+ </td>
+ <td colspan="4">
+ Actions
+ </td>
+ </tr>
+</thead>
+<tbody class="filter">
+ <tr>
+ <td/>
+ <td>
+ <input name="key_i" type="text" style="width:110px;" value="#{pi_key}"
+ onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td style="white-space:nowrap;">
+ <h:selectBooleanCheckbox id="running_i" value="#{filter_running}"/>
+ <gs:label forId="running_i" styleClass="statusRunning">R</gs:label>
+ <h:selectBooleanCheckbox id="suspended_i" value="#{filter_suspended}"/>
+ <gs:label forId="suspended_i" styleClass="statusSuspended">S</gs:label>
+ <h:selectBooleanCheckbox id="ended_i" value="#{filter_ended}"/>
+ <gs:label forId="ended_i" styleClass="statusEnded">E</gs:label>
+ </td>
+ <td/>
+ <td/>
+ <td colspan="4" style="width:150px;">
+ <form id="sf" action="procdef.jsf">
+ <input type="hidden" name="id" value="#{id}"/>
+ <input type="hidden" name="view" value="#{viewMode}"/>
+ <input type="hidden" name="pi_key"/>
+ <input type="hidden" name="fr"/>
+ <input type="hidden" name="fs"/>
+ <input type="hidden" name="fe"/>
+ </form>
+ <a id="apply" accesskey="a"
+ onclick="document.getElementsByName('pi_key')[0].value=document.getElementsByName('key_i')[0].value;if(document.getElementById('running_i').checked) document.getElementsByName('fr')[0].value='true';if(document.getElementById('suspended_i').checked) document.getElementsByName('fs')[0].value='true';if(document.getElementById('ended_i').checked) document.getElementsByName('fe')[0].value='true';document.getElementById('sf').submit();return false;">Apply
+ Filter</a>
+ <h:outputLink style="margin-left:10px">
+ <h:outputText value="Clear Filter"/>
+ <ui:insert name="params"/>
+ </h:outputLink>
+ </td>
+ </tr>
+</tbody>
+<h:outputText>
+ <ga:attribute name="rendered" value="#{! empty piList}"/>
+ <tbody class="results">
+ <gd:repeat value="#{piList}" var="pi" idVar="rid" first="#{piList_pager.first}" limit="#{piList_pager.limit}">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ #{pi.id}
+ </td>
+ <td>
+ <h:outputText value="#{pi.key}"/>
+ </td>
+ <td>
+ <h:outputText value="Ended" styleClass="statusEnded">
+ <ga:attribute name="rendered" value="#{pi.end != null}"/>
+ </h:outputText>
+ <h:outputText value=" (was suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{pi.end != null and pi.suspended}"/>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{pi.end == null}"/>
+ <ga:attribute name="value" value="#{pi.suspended ? 'Suspended' : 'Running'}"/>
+ <ga:attribute name="styleClass" value="#{pi.suspended ? 'statusSuspended' : 'statusRunning'}"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="#{pi.start}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="#{pi.end}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputLink value="procins.jsf?id=#{pi.id}">
+ Examine
+ </h:outputLink>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink
+ onclick="return confirm('Are you sure you want to permanently delete this process? This operation cannot be undone.')">
+ Delete
+ <f:param name="pix_id" value="#{pi.id}"/>
+ <ga:parameter name="pix_id" target="#{pix_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadProcessInstance id="#{pix_id}" target="#{pix}" forUpdate="false"/>
+ <j4j:delete value="#{pix}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{pix}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink onclick="return confirm('Are you sure you want to end this process?')">End
+ <ga:attribute name="rendered" value="#{pi.end == null}"/>
+ <f:param name="pix_id" value="#{pi.id}"/>
+ <ga:parameter name="pix_id" target="#{pix_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadProcessInstance id="#{pix_id}" target="#{pix}"/>
+ <j4j:cancel value="#{pix}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink>Suspend
+ <ga:attribute name="rendered" value="#{pi.end == null and ! pi.suspended}"/>
+ <f:param name="pix_id" value="#{pi.id}"/>
+ <ga:parameter name="pix_id" target="#{pix_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadProcessInstance id="#{pix_id}" target="#{pix}"/>
+ <j4j:suspend value="#{pix}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:commandLink>Resume
+ <ga:attribute name="rendered" value="#{pi.end == null and pi.suspended}"/>
+ <f:param name="pix_id" value="#{pi.id}"/>
+ <ga:parameter name="pix_id" target="#{pix_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadProcessInstance id="#{pix_id}" target="#{pix}"/>
+ <j4j:resume value="#{pix}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+</h:outputText>
+</table>
+</ui:component>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tasks.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tasks.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tasks.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,241 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+<ui:component>
+ <ga:checkRole roles="#{access.role.tasks}">
+ <ga:responseActions>
+ <ga:parameter name="page" target="#{page}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <gd:pager value="#{tasks}" target="#{tasks_pager}" page="#{page}"/>
+ </ga:responseActions>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="10">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:param name="pager" value="#{tasks_pager}"/>
+ <ui:define name="pager_params">
+ <ui:insert name="params"/>
+ </ui:define>
+ </ui:decorate>
+ <ui:insert name="tasks_title">Tasks</ui:insert>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <h:outputText value="ID"/>
+ </td>
+ <td>
+ <h:outputText value="Name"/>
+ </td>
+ <td>
+ <h:outputText value="Pooled Actors"/>
+ </td>
+ <td>
+ <h:outputText value="Assigned To"/>
+ </td>
+ <td>
+ <h:outputText value="Status"/>
+ </td>
+ <td>
+ <h:outputText value="Start Date"/>
+ </td>
+ <td>
+ <h:outputText value="End Date"/>
+ </td>
+ <td colspan="3">
+ <h:outputText value="Actions"/>
+ </td>
+ </tr>
+ </thead>
+ <tbody class="filter">
+ <tr>
+ <td/>
+ <td>
+ <input name="name_i" type="text" style="width:150px;" value="#{task_filter_name}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td/>
+ <td>
+ <input name="actor_i" type="text" style="width:80px;" value="#{task_filter_actor}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td style="width:120px;white-space:nowrap">
+ <h:selectBooleanCheckbox id="task_notstarted_i" value="#{task_filter_notstarted}"/>
+ <gs:label forId="task_notstarted_i" styleClass="statusNotstarted">N</gs:label>
+ <h:selectBooleanCheckbox id="task_running_i" value="#{task_filter_running}"/>
+ <gs:label forId="task_running_i" styleClass="statusRunning">R</gs:label>
+ <h:selectBooleanCheckbox id="task_suspended_i" value="#{task_filter_suspended}"/>
+ <gs:label forId="task_suspended_i" styleClass="statusSuspended">S</gs:label>
+ <h:selectBooleanCheckbox id="task_ended_i" value="#{task_filter_ended}"/>
+ <gs:label forId="task_ended_i" styleClass="statusEnded">E</gs:label>
+ </td>
+ <td/>
+ <td/>
+ <td colspan="3">
+ <gs:form id="tsf">
+ <h:outputText rendered="#{id != null}">
+ <input type="hidden" name="id" value="#{id}"/>
+ </h:outputText>
+ <h:outputText rendered="#{view != null}">
+ <input type="hidden" name="view" value="#{viewMode}"/>
+ </h:outputText>
+ <input type="hidden" name="name"/>
+ <input type="hidden" name="actor"/>
+ <input type="hidden" name="fn"/>
+ <input type="hidden" name="fr"/>
+ <input type="hidden" name="fs"/>
+ <input type="hidden" name="fe"/>
+ </gs:form>
+ <a id="apply" accesskey="a"
+ onclick="copycheck('task_notstarted_i','fn');copycheck('task_running_i','fr');copycheck('task_suspended_i','fs');copycheck('task_ended_i','fe');copyinput('name_i','name');copyinput('actor_i','actor');document.getElementById('tsf').submit();return false;">Apply
+ Filter</a>
+ <h:outputLink style="margin-left:10px">Clear Filter
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="#{viewMode}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ </tbody>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty tasks}"/>
+ <tbody class="results">
+ <gd:repeat value="#{tasks}" var="task" idVar="rid" first="#{tasks_pager.first}" limit="#{tasks_pager.limit}">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputText value="#{task.id}"/>
+ </td>
+ <td>
+ <h:outputText value="#{task.name}"/>
+ </td>
+ <td>
+ <ga:responseActions>
+ <gd:sort source="#{task.pooledActors}" target="#{taskActors}" entryVar="e" argument="#{e.actorId}"/>
+ </ga:responseActions>
+ <h:form>
+ <gd:repeat>
+ <ga:attribute name="value" value="#{taskActors}"/>
+ <ga:attribute name="var" value="actor"/>
+ <ga:attribute name="rendered" value="#{! empty task.pooledActors}"/>
+ <h:outputText value="#{actor.actorId}"/>
+ <ga:checkRole roles="#{access.role.task.assign}">
+ <h:outputText value=" - " rendered="#{task.end == null and task.actorId != actor.actorId}"/>
+ <h:commandLink rendered="#{task.end == null and task.actorId != actor.actorId}">
+ <f:param name="xtaskId" value="#{task.id}"/>
+ <f:param name="xactorId" value="#{actor.actorId}"/>
+ <ga:parameter name="xtaskId" target="#{xtaskId}"/>
+ <ga:parameter name="xactorId" target="#{xactorId}"/>
+ <ga:attribute name="value" value="#{task.actorId == null ? 'Assign' : 'Reassign'}"/>
+ <j4j:loadTask id="#{xtaskId}" target="#{xtask}"/>
+ <j4j:assignTask task="#{xtask}" actorId="#{xactorId}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </ga:checkRole>
+ <br/>
+ </gd:repeat>
+ </h:form>
+ </td>
+ <td>
+ <h:outputText value="#{task.actorId}"/>
+ </td>
+ <td>
+ <h:outputText value="Ended" styleClass="statusEnded">
+ <ga:attribute name="rendered" value="#{task.end != null}"/>
+ </h:outputText>
+ <h:outputText value=" (was suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{task.end != null and task.suspended}"/>
+ </h:outputText>
+ <h:outputText value="Not Started" styleClass="statusNotstarted">
+ <ga:attribute name="rendered" value="#{task.end == null and task.start == null}"/>
+ </h:outputText>
+ <h:outputText value=" (suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{task.start == null and task.suspended}"/>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{task.end == null and task.start != null}"/>
+ <ga:attribute name="value" value="#{task.suspended ? 'Suspended' : 'Running'}"/>
+ <ga:attribute name="styleClass" value="#{task.suspended ? 'statusSuspended' : 'statusRunning'}"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="#{task.start}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="#{task.end}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputLink value="task.jsf">
+ <h:outputText value="Examine"/>
+ <f:param name="id" value="#{task.id}"/>
+ </h:outputLink>
+ </td>
+ <td style="width:50px">
+ <h:form>
+ <h:commandLink value="Suspend">
+ <ga:attribute name="rendered" value="#{! task.suspended and task.end == null}"/>
+ <j4j:loadTask id="#{task.id}" target="#{xtask}"/>
+ <j4j:suspend value="#{xtask}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:commandLink value="Resume">
+ <ga:attribute name="rendered" value="#{task.suspended and task.end == null}"/>
+ <j4j:loadTask id="#{task.id}" target="#{xtask}"/>
+ <j4j:resume value="#{xtask}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ <td style="width:90px">
+ <h:form>
+ <h:commandLink value="Start">
+ <ga:attribute name="rendered" value="#{task.start == null and task.end == null}"/>
+ <j4j:loadTask id="#{task.id}" target="#{xtask}"/>
+ <j4j:startTask task="#{xtask}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <ga:responseActions>
+ <gd:sort source="#{task.availableTransitions}" target="#{transitions}" entryVar="e" argument="#{e.name}"/>
+ </ga:responseActions>
+ <gd:repeat value="#{transitions}" var="transition">
+ <ga:attribute name="rendered" value="#{task.start != null and task.end == null and ! task.suspended}"/>
+ <h:commandLink>
+ <h:outputText value="End"/>
+ <h:outputText value=": " rendered="#{! empty transition.name}"/>
+ <gs:b>
+ <ga:attribute name="rendered" value="#{! empty transition.name}"/>
+ <h:outputText value="#{transition.name}"/>
+ </gs:b>
+ <j4j:loadTask id="#{task.id}" target="#{xtask}"/>
+ <j4j:completeTask task="#{xtask}" transition="#{transition.name}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink><br/>
+ </gd:repeat>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </ga:checkRole>
+</ui:component>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tokens.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tokens.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_tokens.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ >
+<ui:component>
+
+<ga:responseActions>
+ <ga:parameter name="page" target="#{page}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <gd:pager value="#{tokens}" target="#{tokens_pager}" page="#{page}"/>
+</ga:responseActions>
+
+<table class="results">
+<thead>
+
+ <tr>
+ <th colspan="10">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:param name="pager" value="#{tokens_pager}"/>
+ <ui:define name="pager_params">
+ <ui:insert name="params"/>
+ </ui:define>
+ </ui:decorate>
+ <ui:insert name="tokens_title">
+ <h:outputText value="Tokens"/>
+ </ui:insert>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ Token ID
+ </td>
+ <td>
+ Parent
+ </td>
+ <td>
+ Node
+ </td>
+ <td style="width:110px;">
+ Status
+ </td>
+ <td style="width:150px;">
+ Start Date
+ </td>
+ <td style="width:150px;">
+ End Date
+ </td>
+ <td colspan="4">
+ Actions
+ </td>
+ </tr>
+</thead>
+<h:outputText>
+ <ga:attribute name="rendered" value="#{! empty tokens}"/>
+ <tbody class="results">
+ <gd:repeat value="#{tokens}" var="token" idVar="rid" first="#{tokens_pager.first}" limit="#{tokens_pager.limit}">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputText value="#{token.id}"/>
+ </td>
+ <td>
+ <h:outputText value="(no parent)" style="font-style:italic" rendered="#{token.parent == null}"/>
+ <h:outputText value="#{token.parent.name} (ID #{token.parent.id})" rendered="#{token.parent != null and ! empty token.parent.name}"/>
+ <h:outputText value="ID #{token.parent.id}" rendered="#{token.parent != null and empty token.parent.name}"/>
+ </td>
+ <td>
+ <h:outputText value="#{token.node.name}"/>
+ </td>
+ <td>
+ <h:outputText value="Ended" styleClass="statusEnded">
+ <ga:attribute name="rendered" value="#{token.end != null}"/>
+ </h:outputText>
+ <h:outputText value=" (was suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{token.end != null and token.suspended}"/>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{token.end == null}"/>
+ <ga:attribute name="value" value="#{token.suspended ? 'Suspended' : 'Running'}"/>
+ <ga:attribute name="styleClass" value="#{token.suspended ? 'statusSuspended' : 'statusRunning'}"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="#{token.start}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td>
+ <h:outputText value="#{token.end}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ <td width="60">
+ <h:outputLink value="token.jsf?id=#{token.id}">
+ Examine
+ </h:outputLink>
+ </td>
+ <td width="40">
+ <h:form>
+ <ga:attribute name="rendered" value="#{token.end == null}"/>
+ <h:commandLink onclick="return confirm('Are you sure you want to end this token?')">End
+ <f:param name="xtoken_id" value="#{token.id}"/>
+ <ga:parameter name="xtoken_id" target="#{xtoken_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadToken id="#{xtoken_id}" target="#{xtoken}"/>
+ <j4j:cancel value="#{xtoken}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ <td width="60">
+ <h:form>
+ <ga:attribute name="rendered" value="#{token.end == null}"/>
+ <h:commandLink>Suspend
+ <ga:attribute name="rendered" value="#{! token.suspended}"/>
+ <f:param name="xtoken_id" value="#{token.id}"/>
+ <ga:parameter name="xtoken_id" target="#{xtoken_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadToken id="#{xtoken_id}" target="#{xtoken}"/>
+ <j4j:suspend value="#{xtoken}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:commandLink>Resume
+ <ga:attribute name="rendered" value="#{token.suspended}"/>
+ <f:param name="xtoken_id" value="#{token.id}"/>
+ <ga:parameter name="xtoken_id" target="#{xtoken_id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadToken id="#{xtoken_id}" target="#{xtoken}"/>
+ <j4j:resume value="#{xtoken}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ <td width="130">
+ <h:form>
+ <ga:attribute name="rendered" value="#{token.end == null and ! token.suspended}"/>
+ <ga:responseActions>
+ <gd:sort source="#{token.availableTransitions}" target="#{transitions}" entryVar="e" argument="#{e.name}"/>
+ </ga:responseActions>
+ <gd:repeat value="#{transitions}" var="transition">
+ <h:commandLink>
+ <h:outputText value="Signal" rendered="#{empty transition.name}"/>
+ <h:outputText value="Signal: " rendered="#{! empty transition.name}"/>
+ <gs:b rendered="#{! empty transition.name}">
+ <h:outputText value="#{transition.name}"/>
+ </gs:b>
+ <j4j:loadToken id="#{token.id}" target="#{xtoken}"/>
+ <j4j:signal value="#{xtoken}" transition="#{transition.name}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink><br/>
+ </gd:repeat>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+</h:outputText>
+</table>
+</ui:component>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_vars.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_vars.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/t_vars.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+<ui:component>
+ <ga:checkRole roles="#{access.role.vars}">
+ <ga:responseActions>
+ <ga:parameter name="page" target="#{page}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <gd:pager value="#{vars}" target="#{vars_pager}" page="#{page}"/>
+ </ga:responseActions>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="3">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:param name="pager" value="#{vars_pager}"/>
+ <ui:define name="pager_params">
+ <ui:insert name="params"/>
+ </ui:define>
+ </ui:decorate>
+ <ui:insert name="vars_title">
+ <h:outputText value="Variables"/>
+ </ui:insert>
+ </th>
+ </tr>
+ <tr>
+ <td style="width:150px">
+ <h:outputText value="Name"/>
+ </td>
+ <td style="width:180px">
+ <h:outputText value="Value"/>
+ </td>
+ <td colspan="1" style="width:90px">
+ <h:outputText value="Actions"/>
+ </td>
+ </tr>
+ </thead>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty vars}"/>
+ <tbody class="results">
+ <gd:repeat value="#{vars}" var="var" idVar="rid">
+ <gs:tr styleClass="#{rid % 2 == 0 ? 'odd' : 'even'}">
+ <td>
+ <h:outputText value="#{var.key}"/>
+ </td>
+ <td>
+ <h:outputText value="#{var.value}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink>
+ <h:outputText value="Remove"/>
+ <ui:insert name="loadEntity"/>
+ <j4j:removeVariable name="#{var.key}" entity="#{entity}"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </ga:checkRole>
+</ui:component>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/task.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/task.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/task.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,395 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+ <ui:composition template="t_loggedin.xhtml">
+ <ui:define name="actions">
+ <ga:responseActions>
+ <ga:parameter name="id" target="#{id}"/>
+ <j4j:loadTask id="#{id}" target="#{task}"/>
+ <ga:parameter name="view" target="#{viewMode}" default="#{task.end != null ? 'comments' : 'form'}"/>
+ <gd:reverse source="#{task.comments}" target="#{comments}"/>
+ <gd:sort if="#{! empty task.availableTransitions}" source="#{task.availableTransitions}" target="#{transitions}" entryVar="e" argument="#{e.name == null ? '' : e.name}"/>
+ <j4j:getVariableMap target="#{taskVariableMap}" value="#{task}"/>
+ <j4j:getTaskFormInfo process="#{task.processInstance.processDefinition}" target="#{taskForms}"/>
+ <gd:sort if="#{! empty task.pooledActors}" source="#{task.pooledActors}" target="#{taskActors}" entryVar="e" argument="#{e.actorId}"/>
+ <gd:filter if="#{! empty taskActors and ! empty task.actorId}" entryVar="e" source="#{taskActors}" target="#{taskActors}" test="#{e.actorId != task.actorId}"/>
+ </ga:responseActions>
+ <ga:keepAlive value="#{taskVariableMap}"/>
+ </ui:define>
+
+ <ui:define name="menu">
+ <gs:div style="padding:0;margin:0">
+ <ga:attribute name="rendered" value="#{task != null}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Task Summary</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>Task Link</th>
+ <td>
+ <h:outputLink value="task.jsf" style="font-weight:bold">
+ <f:param name="id" value="#{id}"/>
+ <h:outputText value="ID #{id}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu" rendered="#{! empty task.name}">
+ <th>Name</th>
+ <td>
+ <h:outputText value="#{task.name}"/>
+ </td>
+ </gs:tr>
+ <tr class="leftmenu">
+ <th>Status</th>
+ <td>
+ <h:outputText value="Ended" styleClass="statusEnded">
+ <ga:attribute name="rendered" value="#{task.end != null}"/>
+ </h:outputText>
+ <h:outputText value=" (was suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{task.end != null and task.suspended}"/>
+ </h:outputText>
+ <h:outputText value="Not Started" styleClass="statusNotstarted">
+ <ga:attribute name="rendered" value="#{task.end == null and task.start == null}"/>
+ </h:outputText>
+ <h:outputText value=" (suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{task.start == null and task.suspended}"/>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{task.end == null and task.start != null}"/>
+ <ga:attribute name="value" value="#{task.suspended ? 'Suspended' : 'Running'}"/>
+ <ga:attribute name="styleClass" value="#{task.suspended ? 'statusSuspended' : 'statusRunning'}"/>
+ </h:outputText>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu" rendered="#{! empty task.actorId}">
+ <th>Assigned To</th>
+ <td>
+ <h:outputText value="#{task.actorId}"/>
+ </td>
+ </gs:tr>
+ <gs:tr styleClass="leftmenu" rendered="#{task.token != null}">
+ <th>Token</th>
+ <td>
+ <h:outputLink value="token.jsf">
+ <f:param name="id" value="#{task.token.id}"/>
+ <gs:b>
+ <h:outputText value="ID #{task.token.id}"/>
+ </gs:b>
+ <h:outputText value=" "#{task.token.name}"" rendered="#{! empty task.token.name}"/>
+ </h:outputLink>
+ </td>
+ </gs:tr>
+ <tr class="leftmenu">
+ <th>Process Instance</th>
+ <td>
+ <h:outputLink value="procins.jsf">
+ <f:param name="id" value="#{task.processInstance.id}"/>
+ <b><h:outputText value=" ID #{task.processInstance.id}"/></b>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Process</th>
+ <td>
+ <h:outputLink value="procdef.jsf">
+ <f:param name="id" value="#{task.processInstance.processDefinition.id}"/>
+ <h:outputText value="#{task.processInstance.processDefinition.name} v#{task.processInstance.processDefinition.version}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu" rendered="#{task.create != null}">
+ <th>Created Date</th>
+ <td>
+ <h:outputText value="#{task.create}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </gs:tr>
+ <gs:tr styleClass="leftmenu" rendered="#{task.start != null}">
+ <th>Start Date</th>
+ <td>
+ <h:outputText value="#{task.start}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </gs:tr>
+ <gs:tr styleClass="leftmenu" rendered="#{task.end != null}">
+ <th>End Date</th>
+ <td>
+ <h:outputText value="#{task.end}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </gs:tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <ul>
+ <gs:li>
+ <ga:attribute name="rendered" value="#{task.end == null}"/>
+ <h:outputLink style="#{viewMode == 'form' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="form"/>
+ <gs:b writeTag="#{viewMode == 'form'}">
+ <h:outputText value="Task Form"/>
+ </gs:b>
+ </h:outputLink>
+ </gs:li>
+ <li>
+ <h:outputLink style="#{viewMode == 'comments' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="comments"/>
+ <gs:b writeTag="#{viewMode == 'comments'}">
+ <h:outputText value="Comments"/>
+ </gs:b>
+ </h:outputLink>
+ </li>
+ <li>
+ <h:outputLink>
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="vars"/>
+ <gs:b writeTag="#{viewMode == 'vars'}">
+ <h:outputText value="Variables"/>
+ </gs:b>
+ </h:outputLink>
+ </li>
+ <gs:li>
+ <ga:attribute name="rendered" value="#{! empty transitions and task.end == null}"/>
+ <h:outputLink>
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="tran"/>
+ <gs:b writeTag="#{viewMode == 'tran'}">
+ <h:outputText value="Transitions"/>
+ </gs:b>
+ </h:outputLink>
+ </gs:li>
+ </ul>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenuheader">
+ <ga:attribute name="rendered" value="#{task.end == null}"/>
+ <th colspan="2" class="nf">Actions</th>
+ </gs:tr>
+ <gs:tr styleClass="leftmenu">
+ <ga:attribute name="rendered" value="#{task.end == null}"/>
+ <td colspan="2">
+ <ul>
+ <li>
+ <h:form>
+ <h:commandLink value="Suspend">
+ <ga:attribute name="rendered" value="#{! task.suspended}"/>
+ <f:param name="id" value="#{id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{xtask}"/>
+ <j4j:suspend value="#{xtask}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:commandLink value="Resume">
+ <ga:attribute name="rendered" value="#{task.suspended}"/>
+ <f:param name="id" value="#{id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{xtask}"/>
+ <j4j:resume value="#{xtask}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this task"/>
+ </h:form>
+ </li>
+ <gs:li>
+ <ga:attribute name="rendered" value="#{task.start == null}"/>
+ <h:form>
+ <h:commandLink>
+ <h:outputText value="Start"/>
+ <f:param name="id" value="#{id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{xtask}"/>
+ <j4j:startTask task="#{xtask}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this task"/>
+ </h:form>
+ </gs:li>
+ <gs:li>
+ <ga:attribute name="rendered" value="#{task.end == null}"/>
+ <h:outputText>
+ <ga:attribute name="value" value="#{task.actorId == null ? 'Assign' : 'Reassign'} this task to:"/>
+ </h:outputText>
+ <ul>
+ <gd:repeat value="#{taskActors}" var="actor" rendered="#{! empty taskActors}">
+ <li>
+ <h:form>
+ <h:commandLink>
+ <ga:attribute name="value" value="#{actor.actorId}"/>
+ <f:param name="actorId" value="#{actor.actorId}"/>
+ <ga:parameter name="id" target="#{id}"/>
+ <ga:parameter name="actorId" target="#{xactorId}"/>
+ <j4j:loadTask id="#{id}" target="#{xtask}"/>
+ <j4j:assignTask task="#{xtask}" actorId="#{xactorId}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </li>
+ </gd:repeat>
+ <li>
+ <h:form>
+ <h:inputText value="#{actorId}" required="true" requiredMessage="No actor name specified"/>
+ <h:commandButton value="Save" style="margin-left:5px">
+ <ga:parameter name="id" target="#{id}"/>
+ <j4j:loadTask id="#{id}" target="#{xtask}"/>
+ <j4j:assignTask task="#{xtask}" actorId="#{actorId}"/>
+ <n:nav outcome="default" redirect="true" storeMessages="true"/>
+ </h:commandButton>
+ </h:form>
+ </li>
+ </ul>
+ </gs:li>
+ </ul>
+ </td>
+ </gs:tr>
+ </tbody>
+ </table>
+ </gs:div>
+ </ui:define>
+
+ <ui:define name="body">
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{task != null}"/>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'comments'}"/>
+ <ui:decorate template="t_comments.xhtml">
+ <ui:define name="loadTarget">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{task}"/>
+ <f:setPropertyActionListener value="#{task}" target="#{target}"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'tran' and ! empty transitions and task.end == null}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="4">Transitions</th>
+ </tr>
+ <tr>
+ <td style="width:40px">
+ <h:outputText value="ID"/>
+ </td>
+ <td style="width:100px">
+ <h:outputText value="Name"/>
+ </td>
+ <td style="width:160px">
+ <h:outputText value="Target Node"/>
+ </td>
+ <td style="width:90px">
+ <h:outputText value="Actions"/>
+ </td>
+ </tr>
+ </thead>
+ <h:outputText>
+ <tbody class="results">
+ <gd:repeat value="#{transitions}" var="transition" idVar="rid">
+ <gs:tr styleClass="#{rid % 2 == 0 ? 'odd' : 'even'}">
+ <td>
+ <h:outputText value="#{transition.id}"/>
+ </td>
+ <td>
+ <h:outputText value="#{transition.name}" rendered="#{! empty transition.name}"/>
+ <gs:i rendered="#{empty transition.name}">
+ <h:outputText value="(unnamed)"/>
+ </gs:i>
+ </td>
+ <td>
+ <h:outputText value="#{transition.to.name}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink>
+ <h:outputText value="End Task"/>
+ <ga:attribute name="rendered" value="#{! task.suspended}"/>
+ <f:param name="id" value="#{id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{task}"/>
+ <j4j:completeTask task="#{task}" transition="#{transition.name}"/>
+ <n:nav outcome="success" url="procins.jsf?id=#{task.processInstance.id}" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'form'}"/>
+ <h:form>
+ <j4j:taskForm transitionTarget="#{transition}" buttonTarget="#{button}">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{xtask}" navigate="false" unless="#{button == 'cancel'}"/>
+ <j4j:applyVariableMap target="#{xtask}" variableMap="#{taskVariableMap}" navigate="false" unless="#{button == 'cancel'}"/>
+ <j4j:addComment comment="#{comment}" target="#{xtask}" unless="#{empty comment or button == 'cancel'}" navigate="false"/>
+ <j4j:completeTask task="#{xtask}" transition="#{transition}" unless="#{button != 'transition'}" navigate="false"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ <n:nav outcome="save" redirect="true" storeMessages="true"/>
+ <n:nav outcome="cancel" redirect="true" storeMessages="true"/>
+ <n:nav outcome="transition" redirect="true" storeMessages="true"/>
+ <j4j:includeProcessFile file="#{taskForms[task.name]}" process="#{task.processInstance.processDefinition}">
+ <ui:param name="var" value="#{taskVariableMap}"/>
+ <ui:param name="comment" value="#{comment}"/>
+ <ui:param name="taskName" value="#{task.name}"/>
+ </j4j:includeProcessFile>
+ </j4j:taskForm>
+ </h:form>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'vars'}"/>
+ <ui:decorate template="t_vars.xhtml">
+ <ui:param name="vars" value="#{taskVariableMap}"/>
+ <ui:define name="loadEntity">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <j4j:loadTask id="#{id}" target="#{xtask}"/>
+ <f:setPropertyActionListener value="#{xtask.token}" target="#{entity}"/>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ </h:outputText>
+ </ui:define>
+ </ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/tasks.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/tasks.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/tasks.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+ <ui:composition template="../sa/t_loggedin.xhtml">
+ <ui:define name="actions">
+ <ga:responseActions>
+ <j4j:listTasks includeEnded="true" target="#{tasks}"/>
+
+ <!-- tasks parameters -->
+ <ga:parameter name="name" target="#{task_filter_name}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="actor" target="#{task_filter_actor}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="fn" target="#{task_filter_notstarted}" default="true"/>
+ <ga:parameter name="fr" target="#{task_filter_running}" default="true"/>
+ <ga:parameter name="fs" target="#{task_filter_suspended}" default="true"/>
+ <ga:parameter name="fe" target="#{task_filter_ended}" default="false"/>
+
+ <gd:filter source="#{tasks}" target="#{tasks}" entryVar="entry" test="#{task_filter_notstarted and entry.start == null and entry.end == null or task_filter_ended and entry.end != null or (entry.start != null and entry.end == null) and (task_filter_suspended and entry.suspended or task_filter_running and ! entry.suspended)}"/>
+ <gd:filter if="#{! empty task_filter_name}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_name}" filterArgument="#{entry.name == null ? '' : entry.name}"/>
+ <gd:filter if="#{! empty task_filter_actor}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_actor}" filterArgument="#{entry.actorId == null ? '' : entry.actorId}"/>
+
+ </ga:responseActions>
+ </ui:define>
+
+ <ui:define name="menu">
+ </ui:define>
+
+ <ui:define name="body">
+ <gs:div>
+ <ui:decorate template="t_tasks.xhtml"/>
+ </gs:div>
+ </ui:define>
+ </ui:composition>
+
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/token.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/token.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/token.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,301 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+ <ui:composition template="t_loggedin.xhtml">
+ <ui:define name="actions">
+ <ga:responseActions>
+ <ga:parameter name="id" target="#{id}"/>
+ <ga:parameter name="view" target="#{viewMode}" default="tran"/>
+ <j4j:loadToken id="#{id}" target="#{token}"/>
+ <gd:sort if="#{! empty token.availableTransitions}" source="#{token.availableTransitions}" target="#{transitions}" entryVar="e" argument="#{e.name == null ? '' : e.name}"/>
+ </ga:responseActions>
+ </ui:define>
+
+ <ui:define name="menu">
+ <gs:div style="padding:0;margin:0">
+ <ga:attribute name="rendered" value="#{token != null}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Token Summary</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>Token Link</th>
+ <td>
+ <h:outputLink value="token.jsf" style="font-weight:bold">
+ <f:param name="id" value="#{id}"/>
+ <h:outputText value="ID #{id}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu" rendered="#{! empty token.name}">
+ <th>Name</th>
+ <td>
+ <h:outputText value="#{token.name}"/>
+ </td>
+ </gs:tr>
+ <tr class="leftmenu">
+ <th>Current Node</th>
+ <td>
+ <h:outputText value="#{token.node.name}"/>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu" rendered="#{token.parent != null}">
+ <th>Parent Token</th>
+ <td>
+ <h:outputLink value="token.jsf">
+ <f:param name="id" value="#{token.parent.id}"/>
+ <gs:b>
+ <h:outputText value="ID #{token.parent.id}"/>
+ </gs:b>
+ <h:outputText value=" "#{token.parent.name}"" rendered="#{! empty token.parent.name}"/>
+ </h:outputLink>
+ </td>
+ </gs:tr>
+ <tr class="leftmenu">
+ <th>Process Instance</th>
+ <td>
+ <h:outputLink value="procins.jsf">
+ <f:param name="id" value="#{token.processInstance.id}"/>
+ <b><h:outputText value="ID #{token.processInstance.id}"/></b>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Process</th>
+ <td>
+ <h:outputLink value="procdef.jsf">
+ <f:param name="id" value="#{token.processInstance.processDefinition.id}"/>
+ <h:outputText value="#{token.processInstance.processDefinition.name} v#{token.processInstance.processDefinition.version}"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Status</th>
+ <td>
+ <h:outputText value="Ended" styleClass="statusEnded">
+ <ga:attribute name="rendered" value="#{token.end != null}"/>
+ </h:outputText>
+ <h:outputText value=" (was suspended)" style="font-style:italic">
+ <ga:attribute name="rendered" value="#{token.end != null and token.suspended}"/>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{token.end == null}"/>
+ <ga:attribute name="value" value="#{token.suspended ? 'Suspended' : 'Running'}"/>
+ <ga:attribute name="styleClass" value="#{token.suspended ? 'statusSuspended' : 'statusRunning'}"/>
+ </h:outputText>
+ </td>
+ </tr>
+ <gs:tr styleClass="leftmenu" rendered="#{token.start != null}">
+ <th>Start Date</th>
+ <td>
+ <h:outputText value="#{token.start}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </gs:tr>
+ <gs:tr styleClass="leftmenu" rendered="#{token.end != null}">
+ <th>End Date</th>
+ <td>
+ <h:outputText value="#{token.end}">
+ <f:convertDateTime type="both"/>
+ </h:outputText>
+ </td>
+ </gs:tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'tran' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="tran"/>
+ Transitions
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'node' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="node"/>
+ Nodes
+ </h:outputLink>
+ </gs:li>
+ </gs:ul>
+ </td>
+ </tr>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{token.end == null}"/>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Actions</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <h:form>
+ <h:inputHidden value="#{id}"/>
+ <gs:ul>
+ <gs:li>
+ <h:commandLink value="Suspend">
+ <ga:attribute name="rendered" value="#{! token.suspended}"/>
+ <j4j:loadToken id="#{id}" target="#{token}"/>
+ <j4j:suspend value="#{token}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:commandLink value="Resume">
+ <ga:attribute name="rendered" value="#{token.suspended}"/>
+ <j4j:loadToken id="#{id}" target="#{token}"/>
+ <j4j:resume value="#{token}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this token"/>
+ </gs:li>
+ <gs:li>
+ <ga:attribute name="rendered" value="#{token.end == null}"/>
+ <h:commandLink value="End">
+ <j4j:loadToken id="#{id}" target="#{token}"/>
+ <j4j:cancel value="#{token}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this token"/>
+ </gs:li>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ </h:outputText>
+ </tbody>
+ </table>
+ </gs:div>
+ </ui:define>
+
+ <ui:define name="body">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{token != null}"/>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'tran'}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="4">Transitions</th>
+ </tr>
+ <tr>
+ <td style="width:40px">
+ <h:outputText value="ID"/>
+ </td>
+ <td style="width:100px">
+ <h:outputText value="Name"/>
+ </td>
+ <td style="width:160px">
+ <h:outputText value="Target Node"/>
+ </td>
+ <td style="width:90px">
+ <h:outputText value="Actions"/>
+ </td>
+ </tr>
+ </thead>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty transitions}"/>
+ <tbody class="results">
+ <gd:repeat value="#{transitions}" var="transition" idVar="rid">
+ <gs:tr styleClass="#{rid % 2 == 0 ? 'odd' : 'even'}">
+ <td>
+ <h:outputText value="#{transition.id}"/>
+ </td>
+ <td>
+ <h:outputText value="#{transition.name}" rendered="#{! empty transition.name}"/>
+ <gs:i rendered="#{empty transition.name}">
+ <h:outputText value="(unnamed)"/>
+ </gs:i>
+ </td>
+ <td>
+ <h:outputText value="#{transition.to.name}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink>
+ <h:outputText value="Signal"/>
+ <ga:attribute name="rendered" value="#{! token.suspended}"/>
+ <f:param name="id" value="#{id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadToken id="#{id}" target="#{token}"/>
+ <j4j:signal value="#{token}" transition="#{transition.name}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'node'}"/>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="4">Nodes</th>
+ </tr>
+ <tr>
+ <td style="width:200px">
+ <h:outputText value="Name"/>
+ </td>
+ <td style="width:200px">
+ <h:outputText value="Actions"/>
+ </td>
+ </tr>
+ </thead>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty token.processInstance.processDefinition.nodes}"/>
+ <tbody class="results">
+ <gd:repeat value="#{token.processInstance.processDefinition.nodes}" var="node" idVar="rid">
+ <gs:tr styleClass="#{rid % 2 == 0 ? 'odd' : 'even'}">
+ <td>
+ <h:outputText value="#{node.name}" style="#{token.node.id == node.id ? 'font-weight:bold;' : ''}"/>
+ </td>
+ <td>
+ <h:form>
+ <ga:attribute name="rendered" value="#{token.node.id != node.id}"/>
+ <h:commandLink>
+ <ga:attribute name="onclick" value="return confirm('#{msgs['confirm.token.move']}')"/>
+ <h:outputText value="Move to this node"/>
+ <ga:attribute name="rendered" value="#{! token.suspended}"/>
+ <f:param name="id" value="#{id}"/>
+ <ga:parameter name="id" target="#{id}">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <j4j:loadToken id="#{id}" target="#{token}"/>
+ <f:setPropertyActionListener value="#{node}" target="#{token.node}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </tbody>
+ </h:outputText>
+ </table>
+ </h:outputText>
+ </gs:div>
+ </ui:define>
+ </ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/user.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/user.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/sa/user.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,281 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+ xmlns:id="http://jbpm.org/jbpm4jsf/identity"
+>
+<ui:composition template="t_loggedin.xhtml">
+<ui:define name="menu">
+<ga:responseActions>
+ <ga:checkRole roles="#{access.role.identities}">
+ <ga:checkRole roles="#{access.role.identities.user}">
+ <ga:parameter name="id" target="#{id}" required="true">
+ <f:validateLongRange minimum="0"/>
+ <f:convertNumber integerOnly="true" maxFractionDigits="0"/>
+ </ga:parameter>
+ <ga:parameter name="page" target="#{page}" default="1">
+ <f:convertNumber integerOnly="true"/>
+ </ga:parameter>
+ <ga:parameter name="view" target="#{viewMode}" default="memberships"/>
+ <ga:parameter name="gname" target="#{groupName}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="gtype" target="#{groupType}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="role" target="#{roleName}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <id:loadUser id="#{id}" target="#{user}"/>
+ <gd:filter source="#{user.memberships}" target="#{memberships}" entryVar="e" filter="#{groupName}" filterArgument="#{e.group.name}"/>
+ <gd:filter source="#{memberships}" target="#{memberships}" entryVar="e" filter="#{groupType}" filterArgument="#{e.group.type}"/>
+ <gd:filter source="#{memberships}" target="#{memberships}" entryVar="e" filter="#{roleName}" filterArgument="#{e.role}"/>
+ <gd:sort source="#{memberships}" target="#{memberships}" entryVar="e" argument="#{e.group.name}"/>
+ <gd:sort source="#{memberships}" target="#{memberships}" entryVar="e" argument="#{e.group.type}"/>
+ <gd:pager target="#{memberships_pager}" value="#{memberships}" page="#{page}"/>
+ <ga:checkRole roles="#{access.role.tasks}">
+ <j4j:listTasksForActor unless="#{viewMode != 'tasks'}" actorId="#{user.name}" target="#{tasks}"/>
+ <!-- tasks parameters -->
+ <ga:parameter name="name" target="#{task_filter_name}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="actor" target="#{task_filter_actor}" default="">
+ <f:converter converterId="gravel.StringWildcardFilter"/>
+ </ga:parameter>
+ <ga:parameter name="fn" target="#{task_filter_notstarted}" default="true"/>
+ <ga:parameter name="fr" target="#{task_filter_running}" default="true"/>
+ <ga:parameter name="fs" target="#{task_filter_suspended}" default="true"/>
+ <ga:parameter name="fe" target="#{task_filter_ended}" default="false"/>
+
+ <gd:filter source="#{tasks}" target="#{tasks}" entryVar="entry" test="#{task_filter_notstarted and entry.start == null and entry.end == null or task_filter_ended and entry.end != null or (entry.start != null and entry.end == null) and (task_filter_suspended and entry.suspended or task_filter_running and ! entry.suspended)}"/>
+ <gd:filter if="#{! empty task_filter_name}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_name}" filterArgument="#{entry.name == null ? '' : entry.name}"/>
+ <gd:filter if="#{! empty task_filter_actor}" entryVar="entry" source="#{tasks}" target="#{tasks}" filter="#{task_filter_actor}" filterArgument="#{entry.actorId == null ? '' : entry.actorId}"/>
+ </ga:checkRole>
+ </ga:checkRole>
+ </ga:checkRole>
+</ga:responseActions>
+<gs:div style="padding:0;margin:0">
+ <ga:attribute name="rendered" value="#{user != null}"/>
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">User Summary</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>User Link</th>
+ <td>
+ <h:outputLink style="font-weight:bold">
+ <f:param name="id" value="#{id}"/>
+ <h:outputText value="#{user.name} (ID #{id})"/>
+ </h:outputLink>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Email</th>
+ <td>
+ <h:outputText value="#{user.email}"/>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Views</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <gs:ul>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'memberships' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="memberships"/>
+ Memberships
+ </h:outputLink>
+ </gs:li>
+ <gs:li>
+ <h:outputLink style="#{viewMode == 'tasks' ? 'font-weight:bold' : ''}">
+ <f:param name="id" value="#{id}"/>
+ <f:param name="view" value="tasks"/>
+ Tasks
+ </h:outputLink>
+ </gs:li>
+ </gs:ul>
+ </td>
+ </tr>
+ <tr class="leftmenuheader">
+ <th colspan="2" class="nf">Actions</th>
+ </tr>
+ <tr class="leftmenu">
+ <td colspan="2">
+ <h:form>
+ <h:inputHidden value="#{id}"/>
+ <gs:ul>
+ <gs:li>
+ <h:commandLink value="Delete" onclick="return confirm('Are you sure you want to delete this user? This operation cannot be undone.')">
+ <f:param name="xid">
+ <ga:attribute name="value" value="#{user.id}"/>
+ </f:param>
+ <ga:parameter name="xid" target="#{xid}"/>
+ <id:loadUser id="#{xid}" target="#{xuser}"/>
+ <id:deleteUser user="#{xuser}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{xuser}"/>
+ <n:nav outcome="success" url="identities.jsf?view=users" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ <h:outputText value=" this user"/>
+ </gs:li>
+ </gs:ul>
+ </h:form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+</gs:div>
+</ui:define>
+
+<ui:define name="body">
+ <gs:div>
+ <ga:attribute name="rendered" value="#{user != null}"/>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'memberships'}"/>
+ <ga:checkRole roles="#{access.role.identities.group}">
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="4">
+ <ui:decorate template="t_pager.xhtml">
+ <ui:param name="pager" value="#{memberships_pager}"/>
+ <ui:define name="pager_params">
+ <f:param name="id">
+ <ga:attribute name="value" value="#{id}"/>
+ </f:param>
+ </ui:define>
+ </ui:decorate>
+ <h:outputText value="Memberships"/>
+ </th>
+ </tr>
+ <tr>
+ <td>Group Name</td>
+ <td>Group Type</td>
+ <td>Role in Group</td>
+ <td>Actions</td>
+ </tr>
+ </thead>
+ <tbody class="filter">
+ <tr>
+ <td>
+ <input name="gname_i" type="text" value="#{groupName}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td>
+ <input name="gtype_i" type="text" value="#{groupType}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td>
+ <input name="role_i" type="text" value="#{roleName}" onkeypress="keypress(event,'apply')"/>
+ </td>
+ <td>
+ <form id="sf" action="user.jsf">
+ <input type="hidden" name="id" value="#{id}"/>
+ <input type="hidden" name="gname"/>
+ <input type="hidden" name="gtype"/>
+ <input type="hidden" name="role"/>
+ </form>
+ <a id="apply" accesskey="a" onclick="copyinput('gname_i','gname');copyinput('gtype_i','gtype');copyinput('role_i','role');document.getElementById('sf').submit();return false;">Apply Filter</a>
+ <h:outputLink style="margin-left:10px">
+ <f:param name="id" value="#{id}"/>Clear Filter
+ </h:outputLink>
+ </td>
+ </tr>
+ </tbody>
+ <gs:tbody styleClass="results">
+ <ga:attribute name="rendered" value="#{! empty memberships}"/>
+ <gd:repeat value="#{memberships}" var="membership" idVar="rid">
+ <gs:tr>
+ <ga:attribute name="styleClass" value="#{rid % 2 == 0 ? 'odd' : 'even'}"/>
+ <td>
+ <h:outputLink value="group.jsf">
+ <h:outputText value="#{membership.group.name}"/>
+ <f:param name="id">
+ <ga:attribute name="value" value="#{membership.group.id}"/>
+ </f:param>
+ </h:outputLink>
+ </td>
+ <td>
+ <h:outputText value="#{membership.group.type}"/>
+ </td>
+ <td>
+ <h:outputText value="#{membership.role}"/>
+ </td>
+ <td>
+ <h:form>
+ <h:commandLink value="Remove">
+ <f:param name="xuid" value="#{id}"/>
+ <f:param name="xmid" value="#{membership.id}"/>
+ <ga:parameter name="xuid" target="#{xuid}"/>
+ <ga:parameter name="xmid" target="#{xmid}"/>
+ <id:loadUser id="#{xuid}" target="#{xuser}"/>
+ <id:deleteMembership user="#{xuser}" membershipId="#{xmid}"/>
+ <f:setPropertyActionListener value="#{null}" target="#{xuser}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ <n:nav outcome="error" redirect="true" storeMessages="true"/>
+ </h:commandLink>
+ </h:form>
+ </td>
+ </gs:tr>
+ </gd:repeat>
+ </gs:tbody>
+ </table>
+ <ga:checkRole roles="#{access.role.identities.user.modify}">
+ <h:form>
+ <table class="results" style="margin-top:10px">
+ <thead>
+ <tr>
+ <th colspan="3">Add a Membership</th>
+ </tr>
+ <tr>
+ <td>Group Name</td>
+ <td>Role in Group (optional)</td>
+ <td/>
+ </tr>
+ </thead>
+ <tbody class="filter">
+ <tr>
+ <td>
+ <h:inputText value="#{newGroupName}">
+ <f:validateLength minimum="1"/>
+ </h:inputText>
+ </td>
+ <td><h:inputText value="#{newRole}"/></td>
+ <td style="text-align:right">
+ <h:inputHidden value="#{id}"/>
+ <h:commandButton value="Add Membership">
+ <id:loadUser id="#{id}" target="#{user}"/>
+ <id:loadGroupByName groupName="#{newGroupName}" target="#{newGroup}"/>
+ <id:addMembership user="#{user}" group="#{newGroup}" role="#{newRole}"/>
+ <n:nav outcome="success" redirect="true" storeMessages="true"/>
+ </h:commandButton>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </h:form>
+ </ga:checkRole>
+ </ga:checkRole>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{viewMode == 'tasks'}"/>
+ <ui:decorate template="t_tasks.xhtml">
+ <ui:define name="tasks_title">
+ Tasks <b>for user "#{user.name}"</b>
+ </ui:define>
+ </ui:decorate>
+ </h:outputText>
+ </gs:div>
+</ui:define>
+</ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/jbpm.css
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/jbpm.css (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/jbpm.css 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,567 @@
+/**********************************************************
+ General styles
+***********************************************************/
+body {
+ font-weight:normal;
+ font-family:verdana,sans-serif;
+ font-size:10pt;
+ background-repeat:no-repeat;
+ margin:0;
+ border-width:0;
+ padding:0;
+}
+
+html {
+ background-attachment:scroll;
+ background-repeat:no-repeat;
+ margin:0;
+ padding:0;
+ border-width:0;
+}
+
+button, input, select, option, textarea {
+ font-family:arial,helvetica,sans-serif;
+ font-weight:normal;
+ font-size:10pt;
+ line-height:normal;
+}
+
+select {
+ vertical-align:top;
+}
+
+form {
+ display:inline;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ display:inline;
+}
+
+h1 {
+ font-size:16pt;
+}
+
+h2 {
+ font-size:14pt;
+}
+
+h3 {
+ font-size:12pt;
+}
+
+h4 {
+ font-size:10pt;
+}
+
+h5 {
+ font-size:8pt;
+}
+
+h6 {
+ font-size:6pt;
+}
+
+a {
+ cursor: pointer;
+ color: rgb(110, 110, 170);
+ text-decoration: underline;
+}
+
+a:hover {
+ color: rgb(160, 160, 255);
+}
+
+div.hr {
+ border-style:none;
+ border-width:0;
+ background:#c0c0c0;
+ margin-left:3px;
+ margin-right:3px;
+ height:2px;
+ font-size:0;
+ margin-top:6px;
+ margin-bottom:10px;
+}
+
+b {
+ font-weight:bold;
+}
+
+table.layout {
+ margin:0;
+ padding:0;
+ border-collapse:collapse;
+}
+
+table.layout td {
+ margin:0;
+ padding:0;
+}
+
+table.layout td.layoutmenu {
+ vertical-align:top;
+ margin:0;
+ padding:0;
+ width:240px;
+ background:#dddddd;
+ border-right-width:1px;
+ border-right-style:solid;
+ border-right-color:#000000;
+ border-top-width:1px;
+ border-top-style:solid;
+ border-top-color:#000000;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+ border-bottom-color:#000000;
+ border-collapse:collapse;
+}
+
+table.layout td.layoutbody {
+ vertical-align:top;
+ padding:10px;
+ background:#ffffff;
+ width:100%;
+ border-top-width:1px;
+ border-top-style:solid;
+ border-top-color:#000000;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+ border-bottom-color:#000000;
+ border-collapse:collapse;
+}
+
+table.layout td.layoutheader {
+ background:#dddddd;
+ border-top-width:1px;
+ border-top-style:solid;
+ border-top-color:#000000;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+ border-bottom-color:#000000;
+ border-collapse:collapse;
+}
+
+table.layout td.layoutfooter {
+ text-align:center;
+ font-size:10px;
+ background:#dddddd;
+ border-top-width:1px;
+ border-top-style:solid;
+ border-top-color:#000000;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+ border-bottom-color:#000000;
+ border-collapse:collapse;
+}
+
+table.leftmenu {
+ border-width:0;
+ border-bottom-width:1px;
+ border-collapse:collapse;
+ border-color:#000000;
+ width:200px;
+}
+
+tr.leftmenuheader th.nf {
+ border-top-width:1px;
+ border-top-style:solid;
+ border-top-color:#000000;
+}
+
+tr.leftmenuheader th {
+ padding-left:3px;
+ padding-right:3px;
+ background-color:#990000;
+ color:#ffff99;
+ font-size:12px;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+ border-bottom-color:#000000;
+}
+
+tr.leftmenu th {
+ vertical-align:top;
+ padding:3px;
+ text-align:left;
+ text-decoration:none;
+ font-size:11px;
+ white-space:nowrap;
+ background:#444444;
+ color:#ffffff;
+}
+
+tr.leftmenu td {
+ vertical-align:top;
+ padding:3px;
+ text-align:left;
+ text-decoration:none;
+ font-size:12px;
+ white-space:nowrap;
+ background:#dddddd;
+}
+
+tr.leftmenu td ul {
+ /*list-style-position:inside;*/
+ margin:0;
+ padding:0;
+ padding-left:16px;
+ vertical-align:bottom;
+ list-style-image:url( "../images/bullet.gif" );
+}
+
+.statusSuspended {
+ color:#aa6600;
+ font-weight:bold;
+}
+
+.statusRunning {
+ color:#00cc00;
+ font-weight:bold;
+}
+
+.statusEnded {
+ color:#cc0000;
+ font-weight:bold;
+}
+
+.statusNotstarted {
+ color:#0066aa;
+ font-weight:bold;
+}
+
+a.headermenu {
+ padding-left:8px;
+ padding-right:8px;
+ text-decoration:none;
+ color:#cc0000;
+ border-left-width:1px;
+ border-left-style:solid;
+ border-left-color:#888888;
+}
+
+a.headermenufirst {
+ padding-left:8px;
+ padding-right:8px;
+ text-decoration:none;
+ color:#cc0000;
+}
+
+a.headermenu:hover, a.headermenufirst:hover {
+ background:#ffffff;
+ color:#cc0000;
+}
+
+table.results {
+ border-width:1px;
+ border-style:solid;
+ border-color:#000000;
+ border-collapse:collapse;
+ margin-left:auto;
+ margin-right:auto;
+}
+
+table.results td, table.results th {
+ padding:3px;
+ font-size:11px;
+}
+
+table.results thead tr {
+ cursor:default;
+}
+
+table.results thead tr th {
+ text-align:left;
+ background-color:#990000;
+ color:#ffff99;
+ font-size:12px;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+}
+
+table.results thead tr th b {
+ font-weight:normal;
+}
+
+table.results thead tr td {
+ text-align:left;
+ background-color:#dddddd;
+ color:#990000;
+ font-weight:bold;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+}
+
+table.results tbody.results tr {
+ background-color:#dddddd;
+}
+
+table.results tbody.results tr.even {
+ background-color:#ddddbb;
+}
+
+table.results tbody.results tr.odd {
+ background-color:#ffffdd;
+}
+
+table.results tbody.filter td {
+ text-align:left;
+ font-size:10px;
+ padding-bottom:1px;
+ padding-top:1px;
+ font-weight:normal;
+ background-color:#cccccc;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+}
+
+table.results td {
+ border-right-width:1px;
+ border-right-style:solid;
+ border-right-color:#000000;
+}
+
+table.results tbody.results th {
+ padding:3px;
+ text-align:left;
+ text-decoration:none;
+ font-size:11px;
+ white-space:nowrap;
+ background:#444444;
+ color:#ffffff;
+}
+
+table.results tbody.action tr {
+ background-color:#dddddd;
+}
+
+table.results tbody.action tr td {
+ border-top-color:#000000;
+ border-top-style:solid;
+ border-top-width:1px;
+}
+
+table.msgs {
+ margin-left:auto;
+ margin-right:auto;
+ margin-bottom:15px;
+ border-width:1px;
+ border-style:solid;
+ border-collapse:collapse;
+ border-color:#000000;
+ font-size:10px;
+ width:400px;
+}
+
+table.msgs td {
+ padding-left:8px;
+ padding-right:8px;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+ border-bottom-style:dotted;
+}
+
+table.msgs thead th {
+ font-size:11px;
+}
+
+table.error thead th {
+ background-color:#cc0000;
+ color:#ffffff;
+}
+
+table.fatal thead th {
+ background-color:#cc0000;
+ color:#ffffff;
+}
+
+table.warn thead th {
+ background-color:#cccc00;
+ color:#ffffff;
+}
+
+table.info thead th {
+ background-color:#0000cc;
+ color:#ffffff;
+}
+
+.hidden {
+ display:none;
+}
+
+div.pbox, div.pbox_s, div.pbox_e {
+ position:absolute;
+ border-width:1px;
+ border-style:solid;
+}
+
+div.pbox {
+ border-color:#0000ff;
+}
+
+div.pbox_s {
+ border-color:#aa6600;
+}
+
+div.pbox_e {
+ border-color:#cc0000;
+}
+
+div.pboxs, div.pboxs_s, div.pboxs_e {
+ position:absolute;
+ border-right-width:1px;
+ border-right-style:solid;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+}
+
+div.pboxs {
+ border-right-color:#9999ff;
+ border-bottom-color:#9999ff;
+}
+
+div.pboxs_s {
+ border-right-color:#ffaa99;
+ border-bottom-color:#ffaa99;
+}
+
+div.pboxs_e {
+ border-right-color:#660000;
+ border-bottom-color:#660000;
+}
+
+div.pboxce {
+ position:absolute;
+ overflow:hidden;
+}
+
+div.pboxc, div.pboxc_s, div.pboxc_e {
+ cursor:default;
+ font-size:10px;
+ white-space:nowrap;
+ color:#ffffff;
+ padding-left:3px;
+ padding-right:3px;
+ border-width:1px;
+ border-style:solid;
+}
+
+div.pboxc {
+ border-color:#0000ff;
+ background-color:#0000ff;
+}
+
+div.pboxc_s {
+ border-color:#aa6600;
+ background-color:#aa6600;
+}
+
+div.pboxc_e {
+ border-color:#cc0000;
+ background-color:#cc0000;
+}
+
+div.pboxc a, div.pboxc_s a, div.pboxc_e a {
+ color:#ffffff;
+ text-decoration:none;
+}
+
+div.pboxc a:hover, div.pboxc_s a:hover, div.pboxc_e a:hover {
+ text-decoration:underline;
+}
+
+span.comment {
+ display:block;
+ padding-top:3px;
+ padding-bottom:3px;
+ padding-left:4px;
+ padding-right:4px;
+ border-width:1px;
+ border-color:#990000;
+ border-style:solid;
+ border-collapse:collapse;
+ margin-left:5px;
+ margin-right:5px;
+ background-color:#ffffff;
+ font-family:arial,helvetica,sans-serif;
+ margin-top:4px;
+ margin-bottom:4px;
+ overflow:auto;
+}
+
+textarea.comment {
+ width:480px;
+ height:80px;
+}
+
+/* task forms */
+
+table.dataform {
+ border-style:solid;
+ border-width:1px;
+ border-collapse:collapse;
+ border-color:#000000;
+ margin-left:auto;
+ margin-right:auto;
+}
+
+table.dataform td, table.dataform th {
+ padding-top:3px;
+ padding-bottom:3px;
+ padding-left:5px;
+ padding-right:5px;
+}
+
+table.dataform thead tr th {
+ text-align:left;
+ background-color:#990000;
+ color:#ffff99;
+ font-weight:bold;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+}
+
+table.dataform tbody th {
+ text-align:left;
+ text-decoration:none;
+ font-size:11px;
+ white-space:nowrap;
+ background:#444444;
+ color:#ffffff;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+ border-collapse:collapse;
+ width:130px;
+}
+
+table.dataform tbody td {
+ text-align:left;
+ text-decoration:none;
+ font-size:11px;
+ white-space:nowrap;
+ background:#dddddd;
+ color:#000000;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#000000;
+ border-collapse:collapse;
+ width:260px;
+}
+
+a.pager {
+ color:#aaaaff;
+}
+
+a.pager:hover {
+ color:#ffffff;
+}
+
+span.pager {
+ font-weight:normal;
+ color:#999999;
+}
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login-example.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login-example.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login-example.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+ <ui:composition template="t_base.xhtml">
+ <ui:define name="header">
+ <h:outputText value="Welcome to the jBPM Console" style="margin-left:30px;margin-right:10px"/>
+ </ui:define>
+
+ <ui:define name="menu">
+ <ga:responseActions>
+ <ga:parameter name="error" target="#{error}"/>
+ </ga:responseActions>
+ <gs:div style="padding:0;margin:0">
+ <form name="loginform" method="post" action="j_security_check">
+ <table class="leftmenu" style="border-bottom:1px black solid">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Log In</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>User Name</th>
+ <td>
+ <input name="j_username" type="text"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Password</th>
+ <td>
+ <input name="j_password" type="password"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th/>
+ <td>
+ <input type="submit" value="Log In"/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+ </gs:div>
+ </ui:define>
+
+ <ui:define name="body">
+ <gs:div rendered="#{error}">
+ <table class="msgs error">
+ <thead>
+ <tr>
+ <th>Error</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <h:outputText value="Login failed. Invalid user name or password."/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </gs:div>
+ <table class="results">
+ <thead>
+ <tr>
+ <th colspan="3">Log In as an Example User</th>
+ </tr>
+ </thead>
+ <tbody class="results">
+ <tr style="border-bottom-width:1px;border-bottom-style:solid">
+ <td colspan="3">
+ Choose an example user from the list to log in as:
+ </td>
+ </tr>
+ <tr>
+ <th width="180"><b><u>User Name</u></b></th>
+ <th width="180"><b><u>Password</u></b></th>
+ <th width="180"><b><u>Group(s)</u></b></th>
+ </tr>
+ <tr class="odd">
+ <td>manager</td>
+ <td>manager</td>
+ <td>user<br/>manager<br/>admin</td>
+ </tr>
+ <tr class="even">
+ <td>user</td>
+ <td>user</td>
+ <td>user</td>
+ </tr>
+ <tr class="odd">
+ <td>shipper</td>
+ <td>shipper</td>
+ <td>user</td>
+ </tr>
+ <tr class="even">
+ <td>admin</td>
+ <td>admin</td>
+ <td>user<br/>admin</td>
+ </tr>
+ </tbody>
+ </table>
+ <div style="margin-top:20px;margin-bottom:20px">
+ <p align="center">
+ To remove this login name list, edit the <code>web.xml</code> file and locate the section
+ entitled "Example Login page".
+ </p>
+ </div>
+ </ui:define>
+ </ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/login.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+ <ui:composition template="t_base.xhtml">
+ <ui:define name="header">
+ <h:outputText value="Welcome to the jBPM Console" style="margin-left:30px;margin-right:10px"/>
+ </ui:define>
+
+ <ui:define name="menu">
+ <ga:responseActions>
+ <ga:parameter name="error" target="#{error}"/>
+ </ga:responseActions>
+ <gs:div style="padding:0;margin:0">
+ <form name="loginform" method="post" action="j_security_check">
+ <table class="leftmenu">
+ <tbody>
+ <tr class="leftmenuheader">
+ <th colspan="2">Log In</th>
+ </tr>
+ <tr class="leftmenu">
+ <th>User Name</th>
+ <td>
+ <input name="j_username" type="text"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th>Password</th>
+ <td>
+ <input name="j_password" type="password"/>
+ </td>
+ </tr>
+ <tr class="leftmenu">
+ <th/>
+ <td>
+ <input type="submit" value="Log In"/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+ </gs:div>
+ </ui:define>
+
+ <ui:define name="body">
+ <gs:div rendered="#{error}">
+ <table class="msgs error">
+ <thead>
+ <tr>
+ <th>Error</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <h:outputText value="Login failed. Invalid user name or password."/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </gs:div>
+ </ui:define>
+ </ui:composition>
+
+</html>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/t_base.xhtml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/t_base.xhtml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/console/src/main/webapp/ua/t_base.xhtml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:gd="http://gravel.jboss.org/jsf/1.0/data"
+ xmlns:ga="http://gravel.jboss.org/jsf/1.0/action"
+ xmlns:gs="http://gravel.jboss.org/jsf/1.0/simple"
+ xmlns:n="http://gravel.jboss.org/jsf/1.0/navigation"
+ xmlns:j4j="http://jbpm.org/jbpm4jsf/core"
+>
+
+<f:loadBundle var="msgs" basename="messages"/>
+
+<head>
+ <title><h:outputText value="#{msgs['title']}"/></title>
+ <link rel="stylesheet" type="text/css" href="../ua/jbpm.css" />
+ <!--[if lt IE 7]>
+ <style type="text/css">
+ select {
+ position:relative;
+ top:-2px;
+ }
+ </style>
+ <![endif]-->
+</head>
+
+<body>
+<script type="text/javascript">//<![CDATA[
+
+function onload() {
+}
+
+function keypress(event,cid) {
+ if (event.keyCode != null) {
+ if (event.keyCode == 13) {
+ if (cid != null) {
+ var elem = document.getElementById(cid);
+ if (elem != null) {
+ elem.onclick();
+ }
+ }
+ }
+ }
+}
+
+function copyinput(src,dst) {
+ document.getElementsByName(dst)[0].value=document.getElementsByName(src)[0].value;
+}
+
+function copycheck(src,dst) {
+ document.getElementsByName(dst)[0].value=document.getElementById(src).checked?'true':'false';
+}
+
+//]]></script>
+
+<ui:insert name="root_actions"/>
+
+<ui:insert name="javascript">
+</ui:insert>
+
+ <table class="layout">
+ <tbody>
+ <tr>
+ <td colspan="2" class="layouttop">
+ <ui:insert name="top"/>
+ <img src="../images/background.gif" alt=""/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="layoutheader"><ui:insert name="header"/></td>
+ </tr>
+ <tr>
+ <td class="layoutmenu">
+ <ui:insert name="menu" />
+ </td>
+ <td class="layoutbody">
+ <ga:responseActions>
+ <ga:message target="#{msgs_fatal}" severity="fatal"/>
+ <ga:message target="#{msgs_error}" severity="error"/>
+ <ga:message target="#{msgs_warn}" severity="warn"/>
+ <ga:message target="#{msgs_info}" severity="info"/>
+ </ga:responseActions>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty msgs_fatal}"/>
+ <table class="msgs fatal">
+ <thead>
+ <tr>
+ <th><h:outputText value="#{msgs['msg.fatal']}"/></th>
+ </tr>
+ </thead>
+ <tbody>
+ <gd:repeat value="#{msgs_fatal}" var="msg">
+ <tr>
+ <td>
+ <h:outputText value="#{msg.summary}"/>
+ <h:outputText rendered="#{msg.detail != null and msg.detail != msg.summary}" value=": #{msg.detail}"/>
+ </td>
+ </tr>
+ </gd:repeat>
+ </tbody>
+ </table>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty msgs_error}"/>
+ <table class="msgs error">
+ <thead>
+ <tr>
+ <th><h:outputText value="#{msgs['msg.error']}"/></th>
+ </tr>
+ </thead>
+ <tbody>
+ <gd:repeat value="#{msgs_error}" var="msg">
+ <tr>
+ <td>
+ <h:outputText value="#{msg.summary}"/>
+ <h:outputText rendered="#{msg.detail != null and msg.detail != msg.summary}" value=": #{msg.detail}"/>
+ </td>
+ </tr>
+ </gd:repeat>
+ </tbody>
+ </table>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty msgs_warn}"/>
+ <table class="msgs warn">
+ <thead>
+ <tr>
+ <th><h:outputText value="#{msgs['msg.warn']}"/></th>
+ </tr>
+ </thead>
+ <tbody>
+ <gd:repeat value="#{msgs_warn}" var="msg">
+ <tr>
+ <td>
+ <h:outputText value="#{msg.summary}"/>
+ <h:outputText rendered="#{msg.detail != null and msg.detail != msg.summary}" value=": #{msg.detail}"/>
+ </td>
+ </tr>
+ </gd:repeat>
+ </tbody>
+ </table>
+ </h:outputText>
+ <h:outputText>
+ <ga:attribute name="rendered" value="#{! empty msgs_info}"/>
+ <table class="msgs info">
+ <thead>
+ <tr>
+ <th><h:outputText value="#{msgs['msg.info']}"/></th>
+ </tr>
+ </thead>
+ <tbody>
+ <gd:repeat value="#{msgs_info}" var="msg">
+ <tr>
+ <td>
+ <h:outputText value="#{msg.summary}"/>
+ <h:outputText rendered="#{msg.detail != null and msg.detail != msg.summary}" value=": #{msg.detail}"/>
+ </td>
+ </tr>
+ </gd:repeat>
+ </tbody>
+ </table>
+ </h:outputText>
+ <ui:insert name="body" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="layoutfooter"><h:outputText value="#{msgs['title']}"/></td>
+ </tr>
+ </tbody>
+ </table>
+</body>
+</html>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,19 @@
+package org.jbpm.jsf;
+
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public interface JbpmActionListener {
+ /**
+ * Get the name of this action. This name may be used
+ * by the navigation handler to choose an appropriate navigation
+ * outcome.
+ *
+ * @return the name
+ */
+ String getName();
+
+ void handleAction(JbpmJsfContext context, ActionEvent event);
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmJsfContext.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmJsfContext.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/JbpmJsfContext.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,40 @@
+package org.jbpm.jsf;
+
+import org.jbpm.JbpmContext;
+import org.jbpm.identity.hibernate.IdentitySession;
+
+import javax.faces.application.FacesMessage;
+
+/**
+ *
+ */
+public interface JbpmJsfContext {
+ JbpmContext getJbpmContext();
+
+ IdentitySession getIdentitySession();
+
+ void addSuccessMessage(String message);
+
+ void addSuccessMessage(String message, String detail);
+
+ void addSuccessMessage(FacesMessage.Severity severity, String message, String detail);
+
+ /**
+ * Choose an outcome. The last outcome selected will be the one returned to
+ * the navigation layer, unless an error occurs, in which case,
+ * the outcome will be set to "error".
+ *
+ * @param outcomeName the outcome name
+ */
+ void selectOutcome(String outcomeName);
+
+ String getOutcome();
+
+ boolean isError();
+
+ void setError(String message);
+
+ void setError(String message, String detail);
+
+ void setError(String message, Throwable cause);
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/CoreLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/CoreLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/CoreLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,111 @@
+package org.jbpm.jsf.core;
+
+import org.jbpm.jsf.core.handler.AddCommentHandler;
+import org.jbpm.jsf.core.handler.AssignTaskHandler;
+import org.jbpm.jsf.core.handler.CancelHandler;
+import org.jbpm.jsf.core.handler.CompleteTaskHandler;
+import org.jbpm.jsf.core.handler.DeleteHandler;
+import org.jbpm.jsf.core.handler.DeployProcessHandler;
+import org.jbpm.jsf.core.handler.GetDiagramInfoHandler;
+import org.jbpm.jsf.core.handler.GetProcessLogsHandler;
+import org.jbpm.jsf.core.handler.GetVariableHandler;
+import org.jbpm.jsf.core.handler.JbpmActionListenerHandler;
+import org.jbpm.jsf.core.handler.ListJobsHandler;
+import org.jbpm.jsf.core.handler.ListProcessInstancesHandler;
+import org.jbpm.jsf.core.handler.ListProcessesHandler;
+import org.jbpm.jsf.core.handler.ListTasksForProcessInstanceHandler;
+import org.jbpm.jsf.core.handler.ListTasksHandler;
+import org.jbpm.jsf.core.handler.ListTokensHandler;
+import org.jbpm.jsf.core.handler.LoadJobHandler;
+import org.jbpm.jsf.core.handler.LoadProcessHandler;
+import org.jbpm.jsf.core.handler.LoadProcessInstanceHandler;
+import org.jbpm.jsf.core.handler.LoadTaskHandler;
+import org.jbpm.jsf.core.handler.LoadTokenHandler;
+import org.jbpm.jsf.core.handler.MoveTokenHandler;
+import org.jbpm.jsf.core.handler.RemoveVariableHandler;
+import org.jbpm.jsf.core.handler.ResumeHandler;
+import org.jbpm.jsf.core.handler.SignalHandler;
+import org.jbpm.jsf.core.handler.StartProcessHandler;
+import org.jbpm.jsf.core.handler.StartTaskHandler;
+import org.jbpm.jsf.core.handler.SuspendHandler;
+import org.jbpm.jsf.core.handler.UpdateTaskStartHandler;
+import org.jbpm.jsf.core.handler.UpdateVariableHandler;
+import org.jbpm.jsf.core.handler.ListTasksForActorHandler;
+import org.jbpm.jsf.core.handler.GetVariableMapHandler;
+import org.jbpm.jsf.core.handler.ListTasksForProcessHandler;
+import org.jbpm.jsf.core.handler.IncludeProcessFileHandler;
+import org.jbpm.jsf.core.handler.ApplyVariableMapHandler;
+import org.jbpm.jsf.core.handler.GetTaskFormInfoHandler;
+import org.jbpm.jsf.core.handler.TaskFormHandler;
+import org.jbpm.jsf.core.ui.UITaskForm;
+
+import com.sun.facelets.tag.AbstractTagLibrary;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+/**
+ *
+ */
+public final class CoreLibrary extends AbstractTagLibrary {
+ public CoreLibrary() {
+ super("http://jbpm.org/jbpm4jsf/core");
+
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final Application application = facesContext.getApplication();
+
+ // Actions
+
+ addTagHandler("listProcesses", ListProcessesHandler.class);
+ addTagHandler("listProcessInstances", ListProcessInstancesHandler.class);
+ addTagHandler("listTokens", ListTokensHandler.class);
+ addTagHandler("listJobs", ListJobsHandler.class);
+ addTagHandler("listTasks", ListTasksHandler.class);
+ addTagHandler("listTasksForActor", ListTasksForActorHandler.class);
+ addTagHandler("listTasksForProcess", ListTasksForProcessHandler.class);
+ addTagHandler("listTasksForProcessInstance", ListTasksForProcessInstanceHandler.class);
+
+ addTagHandler("loadProcess", LoadProcessHandler.class);
+ addTagHandler("loadTask", LoadTaskHandler.class);
+ addTagHandler("loadProcessInstance", LoadProcessInstanceHandler.class);
+ addTagHandler("loadToken", LoadTokenHandler.class);
+ addTagHandler("loadJob", LoadJobHandler.class);
+
+ addTagHandler("cancel", CancelHandler.class);
+ addTagHandler("delete", DeleteHandler.class);
+ addTagHandler("suspend", SuspendHandler.class);
+ addTagHandler("resume", ResumeHandler.class);
+
+ addTagHandler("signal", SignalHandler.class);
+
+ addTagHandler("addComment", AddCommentHandler.class);
+
+ addTagHandler("assignTask", AssignTaskHandler.class);
+
+ addTagHandler("startProcess", StartProcessHandler.class);
+ addTagHandler("deployProcess", DeployProcessHandler.class);
+ addTagHandler("getDiagramInfo", GetDiagramInfoHandler.class);
+
+ addTagHandler("startTask", StartTaskHandler.class);
+ addTagHandler("completeTask", CompleteTaskHandler.class);
+ addTagHandler("updateTaskStart", UpdateTaskStartHandler.class);
+ addTagHandler("getTaskFormInfo", GetTaskFormInfoHandler.class);
+
+ addTagHandler("moveToken", MoveTokenHandler.class);
+
+ addTagHandler("updateVariable", UpdateVariableHandler.class);
+ addTagHandler("removeVariable", RemoveVariableHandler.class);
+ addTagHandler("getVariable", GetVariableHandler.class);
+ addTagHandler("getVariableMap", GetVariableMapHandler.class);
+ addTagHandler("applyVariableMap", ApplyVariableMapHandler.class);
+
+ addTagHandler("getProcessLogs", GetProcessLogsHandler.class);
+
+ addTagHandler("includeProcessFile", IncludeProcessFileHandler.class);
+
+ addTagHandler("jbpmActionListener", JbpmActionListenerHandler.class);
+
+ application.addComponent(UITaskForm.COMPONENT_TYPE, UITaskForm.class.getName());
+ addComponent("taskForm", UITaskForm.COMPONENT_TYPE, UITaskForm.RENDERER_TYPE, TaskFormHandler.class);
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AddCommentActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AddCommentActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AddCommentActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,60 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class AddCommentActionListener implements JbpmActionListener {
+
+ private final ValueExpression comment;
+ private final ValueExpression target;
+
+ public AddCommentActionListener(final ValueExpression comment, final ValueExpression target) {
+ this.comment = comment;
+ this.target = target;
+ }
+
+ public String getName() {
+ return "addComment";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object commentValue = comment.getValue(elContext);
+ if (commentValue != null) {
+ final String commentAsString = commentValue.toString();
+ if (commentAsString != null) {
+ final String commentText = commentAsString.trim();
+ if (!"".equals(commentText)) {
+ final Object targetValue = target.getValue(elContext);
+ if (targetValue instanceof Token) {
+ ((Token) targetValue).addComment(commentText);
+ } else if (targetValue instanceof TaskInstance) {
+ ((TaskInstance) targetValue).addComment(commentText);
+ } else {
+ context.setError("Failed to add comment", "The addComment action target refers to an invalid type");
+ return;
+ }
+ context.addSuccessMessage("Comment added successfully");
+ context.selectOutcome("success");
+ }
+ }
+ }
+ context.getJbpmContext().getSession().flush();
+ } catch (Exception ex) {
+ context.setError("Failed to add comment", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ApplyVariableMapActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ApplyVariableMapActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ApplyVariableMapActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,91 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.jsf.core.impl.UpdatesHashMap;
+import org.jbpm.context.exe.ContextInstance;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.exe.Token;
+
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+
+import java.util.Set;
+
+/**
+ *
+ */
+public final class ApplyVariableMapActionListener implements JbpmActionListener {
+ private final ValueExpression variableMapExpression;
+ private final ValueExpression targetExpression;
+
+ public ApplyVariableMapActionListener(final ValueExpression variableMapExpression, final ValueExpression targetExpression) {
+ this.variableMapExpression = variableMapExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "applyVariableMap";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final UpdatesHashMap updatesHashMap = (UpdatesHashMap) variableMapExpression.getValue(elContext);
+ final Set<String> deletes = updatesHashMap.deletesSet();
+ final Set<String> updates = updatesHashMap.updatesSet();
+ boolean updated = false;
+
+ final Object targetValue = targetExpression.getValue(elContext);
+ if (targetValue instanceof ProcessInstance) {
+ final ProcessInstance processInstance = (ProcessInstance) targetValue;
+ final ContextInstance contextInstance = processInstance.getContextInstance();
+ for (String name : deletes) {
+ contextInstance.deleteVariable(name);
+ updated = true;
+ }
+ for (String name : updates) {
+ contextInstance.setVariable(name, updatesHashMap.get(name));
+ updated = true;
+ }
+ } else if (targetValue instanceof Token) {
+ final Token token = (Token) targetValue;
+ final ProcessInstance processInstance = token.getProcessInstance();
+ final ContextInstance contextInstance = processInstance.getContextInstance();
+ for (String name : deletes) {
+ contextInstance.deleteVariable(name, token);
+ updated = true;
+ }
+ for (String name : updates) {
+ contextInstance.setVariable(name, updatesHashMap.get(name), token);
+ updated = true;
+ }
+ } else if (targetValue instanceof TaskInstance) {
+ final TaskInstance task = (TaskInstance) targetValue;
+ for (String name : deletes) {
+ task.deleteVariable(name);
+ updated = true;
+ }
+ for (String name : updates) {
+ task.setVariable(name, updatesHashMap.get(name));
+ updated = true;
+ }
+ } else if (targetValue == null) {
+ context.setError("Error updating variable map", "The target value was given as null");
+ return;
+ } else {
+ context.setError("Error updating variable map", "The target value is not a recognized type");
+ return;
+ }
+ if (updated) {
+ context.addSuccessMessage("Variables updated");
+ }
+ } catch (Exception ex) {
+ context.setError("Error updating variable map", ex);
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AssignTaskActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AssignTaskActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/AssignTaskActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,79 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class AssignTaskActionListener implements JbpmActionListener {
+
+ private final ValueExpression taskInstanceExpression;
+ private final ValueExpression actorIdExpression;
+ private final ValueExpression overwriteSwimlaneExpression;
+
+ public AssignTaskActionListener(final ValueExpression taskInstanceExpression, final ValueExpression actorIdExpression, final ValueExpression overwriteSwimlaneExpression) {
+ this.taskInstanceExpression = taskInstanceExpression;
+ this.actorIdExpression = actorIdExpression;
+ this.overwriteSwimlaneExpression = overwriteSwimlaneExpression;
+ }
+
+ public String getName() {
+ return "assignTask";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object taskInstanceValue = taskInstanceExpression.getValue(elContext);
+ if (taskInstanceValue == null) {
+ context.setError("Error assigning task", "The task instance value is null");
+ return;
+ }
+ if (!(taskInstanceValue instanceof TaskInstance)) {
+ context.setError("Error assigning task", "Attempted to assigning something other than a task instance");
+ return;
+ }
+ final TaskInstance taskInstance = (TaskInstance) taskInstanceValue;
+ if (actorIdExpression == null) {
+ context.setError("Error assigning task", "Actor ID expression is null");
+ return;
+ }
+ final Object actorIdValue = actorIdExpression.getValue(elContext);
+ if (actorIdValue == null) {
+ context.setError("Error assigning task", "Actor ID expression resolved to null");
+ return;
+ }
+ final String actorId = actorIdValue.toString();
+ if (overwriteSwimlaneExpression != null) {
+ final Object overwriteSwimlaneValue = overwriteSwimlaneExpression.getValue(elContext);
+ if (overwriteSwimlaneValue == null) {
+ context.setError("Error assigning task", "Overwrite swimlane expression resolved to null");
+ return;
+ }
+ final Boolean overwriteSwimlane;
+ if (overwriteSwimlaneValue instanceof Boolean) {
+ overwriteSwimlane = (Boolean) overwriteSwimlaneValue;
+ } else {
+ overwriteSwimlane = Boolean.valueOf(overwriteSwimlaneValue.toString());
+ }
+ taskInstance.setActorId(actorId, overwriteSwimlane.booleanValue());
+ } else {
+ taskInstance.setActorId(actorId);
+ }
+ context.addSuccessMessage("Task assigned");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error assigning task", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CancelActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CancelActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CancelActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,70 @@
+package org.jbpm.jsf.core.action;
+
+import java.util.Collection;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class CancelActionListener implements JbpmActionListener {
+
+ private final ValueExpression valueExpression;
+
+ public CancelActionListener(final ValueExpression valueExpression) {
+ this.valueExpression = valueExpression;
+ }
+
+ public String getName() {
+ return "cancel";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object value = valueExpression.getValue(elContext);
+ if (value == null) {
+ context.setError("Cancel failed", "The value is null");
+ return;
+ }
+ if (value instanceof TaskInstance) {
+ ((TaskInstance)value).setSignalling(false);
+ ((TaskInstance)value).cancel();
+ context.addSuccessMessage("Task instance cancelled");
+ } else if (value instanceof Token) {
+ final Token token = ((Token) value);
+ token.end();
+ for (TaskInstance task : (Collection<TaskInstance>) token.getProcessInstance().getTaskMgmtInstance().getUnfinishedTasks(token)) {
+ task.cancel();
+ }
+ context.addSuccessMessage("Token ended");
+ } else if (value instanceof ProcessInstance) {
+ final ProcessInstance processInstance = ((ProcessInstance) value);
+ processInstance.end();
+ for (TaskInstance task : (Collection<TaskInstance>) processInstance.getTaskMgmtInstance().getUnfinishedTasks(processInstance.getRootToken())) {
+ task.setSignalling(false);
+ task.cancel();
+ }
+ context.addSuccessMessage("Process instance cancelled");
+ } else {
+ context.setError("Cancel failed", "The value is not a recognized type");
+ return;
+ }
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Cancel failed", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CompleteTaskActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CompleteTaskActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/CompleteTaskActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,65 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.def.Transition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class CompleteTaskActionListener implements JbpmActionListener {
+
+ private final ValueExpression taskInstanceExpression;
+ private final ValueExpression transitionExpression;
+
+ public CompleteTaskActionListener(final ValueExpression taskInstanceExpression, final ValueExpression transitionExpression) {
+ this.taskInstanceExpression = taskInstanceExpression;
+ this.transitionExpression = transitionExpression;
+ }
+
+ public String getName() {
+ return "completeTask";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object taskInstanceValue = taskInstanceExpression.getValue(elContext);
+ if (taskInstanceValue == null) {
+ context.setError("Error completing task", "The task instance value is null");
+ return;
+ }
+ if (!(taskInstanceValue instanceof TaskInstance)) {
+ context.setError("Error completing task", "Attempted to complete something other than a task instance");
+ return;
+ }
+ final TaskInstance taskInstance = (TaskInstance) taskInstanceValue;
+ if (transitionExpression != null) {
+ final Object transitionValue = transitionExpression.getValue(elContext);
+ if (transitionValue == null) {
+ taskInstance.end();
+ } else if (transitionValue instanceof Transition) {
+ taskInstance.end((Transition)transitionValue);
+ } else {
+ final String transitionName = transitionValue.toString();
+ taskInstance.end(transitionName);
+ }
+ } else {
+ taskInstance.end();
+ }
+ context.addSuccessMessage("Task completed");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error completing task", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeleteActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeleteActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeleteActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,57 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.job.Job;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class DeleteActionListener implements JbpmActionListener {
+ private final ValueExpression valueExpression;
+
+ public DeleteActionListener(final ValueExpression valueExpression) {
+ this.valueExpression = valueExpression;
+ }
+
+ public String getName() {
+ return "delete";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object value = valueExpression.getValue(elContext);
+ if (value == null) {
+ context.setError("Delete failed", "The value is null");
+ return;
+ }
+ if (value instanceof ProcessDefinition) {
+ context.getJbpmContext().getGraphSession().deleteProcessDefinition((ProcessDefinition) value);
+ context.addSuccessMessage("Process deleted");
+ } else if (value instanceof ProcessInstance) {
+ context.getJbpmContext().getGraphSession().deleteProcessInstance((ProcessInstance) value);
+ context.addSuccessMessage("Process instance deleted");
+ } else if (value instanceof Job) {
+ context.getJbpmContext().getJobSession().deleteJob((Job) value);
+ context.addSuccessMessage("Job deleted");
+ } else {
+ context.setError("Delete failed", "Value type is not recognized");
+ return;
+ }
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Delete failed", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeployProcessActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeployProcessActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/DeployProcessActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,88 @@
+package org.jbpm.jsf.core.action;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipInputStream;
+import org.jbpm.JbpmContext;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+import java.util.logging.Logger;
+
+/**
+ *
+ */
+public final class DeployProcessActionListener implements JbpmActionListener {
+ private final ValueExpression archiveExpression;
+ private final ValueExpression targetExpression;
+
+ public DeployProcessActionListener(final ValueExpression archiveExpression, final ValueExpression targetExpression) {
+ this.archiveExpression = archiveExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "deployProcess";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final InputStream inputStream;
+ final Object archiveValue = archiveExpression.getValue(elContext);
+ if (archiveValue == null) {
+ context.setError("Error deploying process", "Archive is null");
+ return;
+ }
+ if (archiveValue instanceof InputStream) {
+ inputStream = (InputStream) archiveValue;
+ } else if (archiveValue instanceof byte[]) {
+ final byte[] bytes = (byte[]) archiveValue;
+ inputStream = new ByteArrayInputStream(bytes);
+ } else {
+ context.setError("Error deploying process", "Type of 'archive' attribute is not recognized");
+ return;
+ }
+ final ProcessDefinition processDefinition;
+ try {
+ ZipInputStream zis = new ZipInputStream(inputStream);
+ try {
+ processDefinition = ProcessDefinition.parseParZipInputStream(zis);
+ final JbpmContext jbpmContext = context.getJbpmContext();
+ jbpmContext.deployProcessDefinition(processDefinition);
+ } finally {
+ try {
+ zis.close();
+ } catch (IOException e) {
+ log.warning("Error closing zip Ninput stream after deploy: " + e.getMessage());
+ }
+ }
+ } finally {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ log.warning("Error closing input stream after deploy: " + e.getMessage());
+ }
+ }
+ context.addSuccessMessage("New process deployed");
+ context.getJbpmContext().getSession().flush();
+ if (targetExpression != null) {
+ targetExpression.setValue(elContext, processDefinition);
+ }
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error deploying process", ex);
+ return;
+ }
+ }
+
+ private static final Logger log = Logger.getLogger("org.jbpm.jsf.core.handler.DeployProcessActionHandler");
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetDiagramInfoActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetDiagramInfoActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetDiagramInfoActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,169 @@
+package org.jbpm.jsf.core.action;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.jbpm.file.def.FileDefinition;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.util.XmlUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class GetDiagramInfoActionListener implements JbpmActionListener {
+ private final ValueExpression processExpression;
+ private final ValueExpression targetExpression;
+
+ public GetDiagramInfoActionListener(final ValueExpression processExpression, final ValueExpression targetExpression) {
+ this.processExpression = processExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "getDiagramInfo";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object processValue = processExpression.getValue(elContext);
+ if (processValue == null) {
+ context.setError("Error getting diagram info", "The process value is null");
+ return;
+ }
+ if (!(processValue instanceof ProcessDefinition)) {
+ context.setError("Error getting diagram info", "The process value is not of type ProcessDefinition");
+ }
+ final ProcessDefinition processDefinition = (ProcessDefinition) processValue;
+ final FileDefinition fileDefinition = processDefinition.getFileDefinition();
+ if (! fileDefinition.hasFile("gpd.xml")) {
+ targetExpression.setValue(elContext, null);
+ context.selectOutcome("success");
+ return;
+ }
+ Document document = XmlUtil.parseXmlInputStream(fileDefinition.getInputStream("gpd.xml"));
+ Element processDiagramElement = document.getDocumentElement();
+ final String widthString = processDiagramElement.getAttribute("width");
+ final String heightString = processDiagramElement.getAttribute("height");
+ final List<DiagramNodeInfo> diagramNodeInfoList = new ArrayList<DiagramNodeInfo>();
+ final NodeList nodeNodeList = processDiagramElement.getElementsByTagName("node");
+ final int nodeNodeListLength = nodeNodeList.getLength();
+ for (int i = 0; i < nodeNodeListLength; i ++) {
+ final Node nodeNode = nodeNodeList.item(i);
+ if (nodeNode instanceof Node && nodeNode.getParentNode() == processDiagramElement) {
+ final Element nodeElement = (Element) nodeNode;
+ final String nodeName = nodeElement.getAttribute("name");
+ final String nodeXString = nodeElement.getAttribute("x");
+ final String nodeYString = nodeElement.getAttribute("y");
+ final String nodeWidthString = nodeElement.getAttribute("width");
+ final String nodeHeightString = nodeElement.getAttribute("height");
+ final DiagramNodeInfo nodeInfo = new DiagramNodeInfo(
+ nodeName,
+ Integer.parseInt(nodeXString),
+ Integer.parseInt(nodeYString),
+ Integer.parseInt(nodeWidthString),
+ Integer.parseInt(nodeHeightString)
+ );
+ diagramNodeInfoList.add(nodeInfo);
+ }
+ }
+ final DiagramInfo diagramInfo = new DiagramInfo(
+ Integer.parseInt(heightString),
+ Integer.parseInt(widthString),
+ diagramNodeInfoList
+ );
+ targetExpression.setValue(elContext, diagramInfo);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error getting diagram info", ex);
+ return;
+ }
+ }
+
+ public static final class DiagramInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private final int width;
+ private final int height;
+ private final Map<String,DiagramNodeInfo> nodeMap;
+
+ public DiagramInfo(final int height, final int width, final List<DiagramNodeInfo> nodeList) {
+ this.height = height;
+ this.width = width;
+ final LinkedHashMap<String, DiagramNodeInfo> map = new LinkedHashMap<String, DiagramNodeInfo>();
+ for (DiagramNodeInfo nodeInfo : nodeList) {
+ map.put(nodeInfo.getName(), nodeInfo);
+ }
+ nodeMap = Collections.unmodifiableMap(map);
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public Map<String, DiagramNodeInfo> getNodeMap() {
+ return nodeMap;
+ }
+
+ public List<DiagramNodeInfo> getNodes() {
+ return Collections.unmodifiableList(new ArrayList<DiagramNodeInfo>(nodeMap.values()));
+ }
+
+ public int getWidth() {
+ return width;
+ }
+ }
+
+ public static final class DiagramNodeInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private final String name;
+ private final int x;
+ private final int y;
+ private final int width;
+ private final int height;
+
+ public DiagramNodeInfo(final String name, final int x, final int y, final int width, final int height) {
+ this.height = height;
+ this.name = name;
+ this.width = width;
+ this.x = x;
+ this.y = y;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public int getY() {
+ return y;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetProcessLogsActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetProcessLogsActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetProcessLogsActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,149 @@
+package org.jbpm.jsf.core.action;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.jbpm.context.log.VariableCreateLog;
+import org.jbpm.context.log.VariableDeleteLog;
+import org.jbpm.context.log.VariableLog;
+import org.jbpm.context.log.VariableUpdateLog;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.log.ActionLog;
+import org.jbpm.graph.log.NodeLog;
+import org.jbpm.graph.log.ProcessInstanceCreateLog;
+import org.jbpm.graph.log.ProcessInstanceEndLog;
+import org.jbpm.graph.log.ProcessStateLog;
+import org.jbpm.graph.log.SignalLog;
+import org.jbpm.graph.log.TokenCreateLog;
+import org.jbpm.graph.log.TokenEndLog;
+import org.jbpm.graph.log.TransitionLog;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.logging.exe.LoggingInstance;
+import org.jbpm.logging.log.CompositeLog;
+import org.jbpm.logging.log.MessageLog;
+import org.jbpm.logging.log.ProcessLog;
+import org.jbpm.taskmgmt.log.SwimlaneAssignLog;
+import org.jbpm.taskmgmt.log.SwimlaneCreateLog;
+import org.jbpm.taskmgmt.log.SwimlaneLog;
+import org.jbpm.taskmgmt.log.TaskAssignLog;
+import org.jbpm.taskmgmt.log.TaskCreateLog;
+import org.jbpm.taskmgmt.log.TaskEndLog;
+import org.jbpm.taskmgmt.log.TaskLog;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class GetProcessLogsActionListener implements JbpmActionListener {
+ private final ValueExpression processInstanceExpression;
+ private final ValueExpression typeExpression;
+ private final ValueExpression targetExpression;
+
+ private static final Map<String, Class<? extends ProcessLog>> logTypes;
+
+ static {
+ Map<String, Class<? extends ProcessLog>> newLogTypes = new HashMap<String, Class<? extends ProcessLog>>();
+ // variables
+ newLogTypes.put("variable", VariableLog.class);
+ newLogTypes.put("variableUpdate", VariableUpdateLog.class);
+ newLogTypes.put("variableCreate", VariableCreateLog.class);
+ newLogTypes.put("variableDelete", VariableDeleteLog.class);
+ // jpdl
+ newLogTypes.put("action", ActionLog.class);
+ newLogTypes.put("node", NodeLog.class);
+ newLogTypes.put("processInstanceCreate", ProcessInstanceCreateLog.class);
+ newLogTypes.put("processInstanceEnd", ProcessInstanceEndLog.class);
+ newLogTypes.put("processState", ProcessStateLog.class);
+ newLogTypes.put("signal", SignalLog.class);
+ newLogTypes.put("tokenCreate", TokenCreateLog.class);
+ newLogTypes.put("tokenEnd", TokenEndLog.class);
+ newLogTypes.put("transition", TransitionLog.class);
+ // misc
+ newLogTypes.put("composite", CompositeLog.class);
+ newLogTypes.put("message", MessageLog.class);
+ // swimlane
+ newLogTypes.put("swimlane", SwimlaneLog.class);
+ newLogTypes.put("swimlaneAssign", SwimlaneAssignLog.class);
+ newLogTypes.put("swimlaneCreate", SwimlaneCreateLog.class);
+ // task
+ newLogTypes.put("task", TaskLog.class);
+ newLogTypes.put("taskAssign", TaskAssignLog.class);
+ newLogTypes.put("taskCreate", TaskCreateLog.class);
+ newLogTypes.put("taskEnd", TaskEndLog.class);
+ logTypes = Collections.unmodifiableMap(newLogTypes);
+ }
+
+ public GetProcessLogsActionListener(final ValueExpression processInstanceExpression, final ValueExpression typeExpression, final ValueExpression targetExpression) {
+ this.processInstanceExpression = processInstanceExpression;
+ this.typeExpression = typeExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "getProcessLogs";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object processInstanceValue = processInstanceExpression.getValue(elContext);
+ if (processInstanceValue == null) {
+ context.setError("Error reading process logs", "The process instance value is null");
+ return;
+ }
+ if (!(processInstanceValue instanceof ProcessInstance)) {
+ context.setError("Error reading process logs", "Attempted to read process logs from something other than a process instance");
+ return;
+ }
+ final List<ProcessLog> processLogs;
+ if (typeExpression != null) {
+ final Object typeValue = typeExpression.getValue(elContext);
+ if (typeValue == null) {
+ context.setError("Error reading process logs", "Null value for type attribute");
+ return;
+ }
+ final Class type;
+ if (typeValue instanceof Class) {
+ type = (Class) typeValue;
+ } else {
+ final String typeString = typeValue.toString();
+ if (logTypes.containsKey(typeString)) {
+ type = logTypes.get(typeString);
+ } else {
+ try {
+ type = Class.forName(typeString);
+ } catch (ClassNotFoundException e) {
+ context.setError("Error reading process logs", "No class by the name of '" + typeString + "' was found, and that type is not among the predefined types for log records");
+ return;
+ }
+ }
+ }
+ if (! ProcessLog.class.isAssignableFrom(type)) {
+ context.setError("Error reading process logs", "The given log type '" + type.getName() + "' is not a valid process log type");
+ return;
+ }
+ final ProcessInstance processInstance = (ProcessInstance) processInstanceValue;
+ final LoggingInstance loggingInstance = processInstance.getLoggingInstance();
+ processLogs = loggingInstance.getLogs(type);
+ } else {
+ final ProcessInstance processInstance = (ProcessInstance) processInstanceValue;
+ final LoggingInstance loggingInstance = processInstance.getLoggingInstance();
+ processLogs = loggingInstance.getLogs();
+ }
+ // TODO - add filter parameters perhaps?
+ targetExpression.setValue(elContext, processLogs);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error reading process logs", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetTaskFormInfoActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetTaskFormInfoActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetTaskFormInfoActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,90 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.file.def.FileDefinition;
+import org.jbpm.util.XmlUtil;
+import org.jbpm.JbpmException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.Collections;
+import java.util.HashMap;
+import java.io.Serializable;
+import java.io.InputStream;
+
+/**
+ *
+ */
+public final class GetTaskFormInfoActionListener implements JbpmActionListener {
+ private final ValueExpression processExpression;
+ private final ValueExpression targetExpression;
+
+ public GetTaskFormInfoActionListener(final ValueExpression processExpression, final ValueExpression targetExpression) {
+ this.processExpression = processExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "getTaskFormInfo";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object processValue = processExpression.getValue(elContext);
+ if (processValue == null) {
+ context.setError("Error reading form information", "The process value is null");
+ return;
+ }
+ if (!(processValue instanceof ProcessDefinition)) {
+ context.setError("Error reading form information", "The process value is not of type ProcessDefinition");
+ }
+ final ProcessDefinition processDefinition = (ProcessDefinition) processValue;
+ final FileDefinition fileDefinition = processDefinition.getFileDefinition();
+ if (! fileDefinition.hasFile("forms.xml")) {
+ targetExpression.setValue(elContext, Collections.emptyMap());
+ context.selectOutcome("success");
+ return;
+ }
+ final InputStream inputStream = fileDefinition.getInputStream("forms.xml");
+ if (inputStream == null) {
+ targetExpression.setValue(elContext, Collections.emptyMap());
+ context.selectOutcome("success");
+ return;
+ }
+ final Map<String, String> targetMap = new HashMap<String, String>();
+ final Document document = XmlUtil.parseXmlInputStream(inputStream);
+ final Element documentElement = document.getDocumentElement();
+ final NodeList nodeList = documentElement.getElementsByTagName("form");
+ final int length = nodeList.getLength();
+ for (int i = 0; i < length; i ++) {
+ final Element element = (Element) nodeList.item(i);
+ final String itemTaskName = element.getAttribute("task");
+ final String itemFormName = element.getAttribute("form");
+ if (itemTaskName == null || itemFormName == null) {
+ continue;
+ }
+ targetMap.put(itemTaskName, itemFormName);
+ }
+ targetExpression.setValue(elContext, Collections.unmodifiableMap(targetMap));
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error reading form information", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,67 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.context.exe.ContextInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class GetVariableActionListener implements JbpmActionListener {
+ private final ValueExpression nameExpression;
+ private final ValueExpression targetExpression;
+ private final ValueExpression entityExpression;
+
+ public GetVariableActionListener(final ValueExpression nameExpression, final ValueExpression targetExpression, final ValueExpression entityExpression) {
+ this.nameExpression = nameExpression;
+ this.targetExpression = targetExpression;
+ this.entityExpression = entityExpression;
+ }
+
+ public String getName() {
+ return "getVariable";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object nameValue = nameExpression.getValue(elContext);
+ if (nameValue == null) {
+ context.setError("Error getting variable", "The value of the 'name' attribute is null");
+ return;
+ }
+ final String name = nameValue.toString();
+ final Object entity = entityExpression.getValue(elContext);
+ final Object value;
+ if (entity instanceof TaskInstance) {
+ final TaskInstance task = (TaskInstance) entity;
+ value = task.getVariable(name);
+ } else if (entity instanceof Token) {
+ final Token token = (Token) entity;
+ final ContextInstance contextInstance = token.getProcessInstance().getContextInstance();
+ value = contextInstance.getVariable(name, token);
+ } else if (entity instanceof ProcessInstance) {
+ final ProcessInstance processInstance = (ProcessInstance) entity;
+ final ContextInstance contextInstance = processInstance.getContextInstance();
+ value = contextInstance.getVariable(name);
+ } else {
+ context.setError("Error getting variable", "The value given for the 'entity' attribute is not a task, token, or process instance");
+ return;
+ }
+ targetExpression.setValue(elContext, value);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error getting variable", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableMapActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableMapActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/GetVariableMapActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,63 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.jsf.core.impl.UpdatesHashMap;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+
+import java.util.Map;
+import java.util.Collections;
+
+/**
+ *
+ */
+public final class GetVariableMapActionListener implements JbpmActionListener {
+ private final ValueExpression valueExpression;
+ private final ValueExpression targetExpression;
+
+ public GetVariableMapActionListener(final ValueExpression valueExpression, final ValueExpression targetExpression) {
+ this.valueExpression = valueExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "getVariableMap";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object value = valueExpression.getValue(elContext);
+ final Map<String,Object> updatesMap;
+ if (value instanceof ProcessInstance) {
+ final ProcessInstance processInstance = (ProcessInstance) value;
+ updatesMap = new UpdatesHashMap(processInstance.getContextInstance().getVariables());
+ } else if (value instanceof Token) {
+ final Token token = (Token) value;
+ updatesMap = new UpdatesHashMap(token.getProcessInstance().getContextInstance().getVariables(token));
+ } else if (value instanceof TaskInstance) {
+ final TaskInstance task = (TaskInstance) value;
+ updatesMap = new UpdatesHashMap(task.getVariables());
+ } else if (value == null) {
+ context.setError("Error getting variable map", "The value was given as null");
+ return;
+ } else {
+ context.setError("Error getting variable map", "The value is not a recognized type");
+ return;
+ }
+ targetExpression.setValue(elContext, updatesMap);
+ } catch (Exception ex) {
+ context.setError("Error getting variable map", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LazyJbpmActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LazyJbpmActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LazyJbpmActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,77 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class LazyJbpmActionListener implements JbpmActionListener {
+
+ private final ValueExpression typeExpression;
+ private final ValueExpression listenerExpression;
+
+ public LazyJbpmActionListener(final ValueExpression typeExpression, final ValueExpression listenerExpression) {
+ this.typeExpression = typeExpression;
+ this.listenerExpression = listenerExpression;
+ }
+
+ public String getName() {
+ return "jbpmActionListener";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final JbpmActionListener listener;
+ if (typeExpression != null) {
+ final Object typeValue = typeExpression.getValue(elContext);
+ if (typeValue == null) {
+ context.setError("Error calling action listener", "The type value is null");
+ return;
+ }
+ final Class type;
+ if (typeValue instanceof Class) {
+ type = (Class) typeValue;
+ } else {
+ final String className = typeValue.toString();
+ try {
+ type = Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ context.setError("Error calling action listener", "The class '" + className + "' was not found");
+ return;
+ }
+ }
+ if (! JbpmActionListener.class.isAssignableFrom(type)) {
+ context.setError("Error calling action listener", "The class '" + type.getName() + "' is not a valid JbpmActionListener");
+ return;
+ }
+ try {
+ listener = (JbpmActionListener) type.newInstance();
+ } catch (Exception e) {
+ context.setError("Error calling action listener", e);
+ return;
+ }
+ } else if (listenerExpression != null) {
+ final Object listenerValue = listenerExpression.getValue(elContext);
+ if (listenerValue == null) {
+ context.setError("Error calling action listener", "The listener value is null");
+ return;
+ }
+ if (! (listenerValue instanceof JbpmActionListener)) {
+ context.setError("Error calling action listener", "The listener value given is not a valid JbpmActionListener");
+ return;
+ }
+ listener = (JbpmActionListener) listenerValue;
+ } else {
+ context.setError("Error calling action listener", "Either a type or a listener must be given");
+ return;
+ }
+ listener.handleAction(context, event);
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListJobsActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListJobsActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListJobsActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,39 @@
+package org.jbpm.jsf.core.action;
+
+import java.util.List;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class ListJobsActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+
+ public ListJobsActionListener(final ValueExpression targetExpression) {
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listJob";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final List jobs = context.getJbpmContext().getSession().createQuery("from org.jbpm.job.Job").list();
+ targetExpression.setValue(elContext, jobs);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error listing job instances", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessInstancesActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessInstancesActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessInstancesActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,56 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+import java.util.List;
+
+/**
+ *
+ */
+public final class ListProcessInstancesActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+ private final ValueExpression processIdExpression;
+
+ public ListProcessInstancesActionListener(final ValueExpression processIdExpression, final ValueExpression targetExpression) {
+ this.processIdExpression = processIdExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listProcessInstances";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = processIdExpression.getValue(elContext);
+ final long id;
+ if (idValue instanceof Number) {
+ id = ((Number)idValue).longValue();
+ } else if (idValue instanceof String) {
+ id = Long.parseLong((String)idValue);
+ } else if (idValue != null) {
+ id = Long.parseLong(idValue.toString());
+ } else {
+ context.setError("Error loading process instance list", "The process ID value is null");
+ return;
+ }
+ final List<ProcessInstance> processList = context.getJbpmContext().getGraphSession().findProcessInstances(id);
+ targetExpression.setValue(elContext, processList);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading process instance list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessesActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessesActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListProcessesActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,41 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.graph.def.ProcessDefinition;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+import java.util.List;
+
+/**
+ *
+ */
+public final class ListProcessesActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+
+ public ListProcessesActionListener(final ValueExpression targetExpression) {
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listProcesses";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final List<ProcessDefinition> processList = context.getJbpmContext().getGraphSession().findAllProcessDefinitions();
+ targetExpression.setValue(elContext, processList);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading process list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.action;
+
+import java.util.Collections;
+import java.util.List;
+import org.hibernate.Session;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class ListTasksActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+ private final ValueExpression includeEndedExpression;
+
+ public ListTasksActionListener(final ValueExpression includeEndedExpression, final ValueExpression targetExpression) {
+ this.includeEndedExpression = includeEndedExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listTasks";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Boolean includeEnded = (Boolean) includeEndedExpression.getValue(elContext);
+ final Session session = context.getJbpmContext().getSession();
+ final List<TaskInstance> taskList;
+ if (includeEnded != null && includeEnded.booleanValue()) {
+ taskList = session.createQuery("from org.jbpm.taskmgmt.exe.TaskInstance ti").list();
+ } else {
+ taskList = session.createQuery("from org.jbpm.taskmgmt.exe.TaskInstance ti where ti.end is not null").list();
+ }
+ targetExpression.setValue(elContext, Collections.unmodifiableList(taskList));
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading task list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForActorActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForActorActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForActorActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,45 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+import java.util.List;
+import java.util.Collections;
+
+/**
+ *
+ */
+public final class ListTasksForActorActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+ private final ValueExpression actorExpression;
+
+ public ListTasksForActorActionListener(final ValueExpression actorExpression, final ValueExpression targetExpression) {
+ this.actorExpression = actorExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listTasksForActorActionListener";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final String actorId = (String) actorExpression.getValue(elContext);
+ final List<TaskInstance> taskList = Collections.unmodifiableList(context.getJbpmContext().getTaskList(actorId));
+ targetExpression.setValue(elContext, taskList);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading task list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,52 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+import java.util.List;
+import java.util.Collections;
+import java.util.ArrayList;
+
+/**
+ *
+ */
+public final class ListTasksForProcessActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+ private final ValueExpression processExpression;
+
+ public ListTasksForProcessActionListener(final ValueExpression processExpression, final ValueExpression targetExpression) {
+ this.processExpression = processExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listTasksForProcess";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final ProcessDefinition processDefinition = (ProcessDefinition) processExpression.getValue(elContext);
+ final List<TaskInstance> taskList =
+ Collections.unmodifiableList(context.getJbpmContext().getSession()
+ .createQuery("select ti from org.jbpm.taskmgmt.exe.TaskInstance ti join ti.processInstance pi where pi.processDefinition = ?")
+ .setEntity(0, processDefinition)
+ .list());
+ targetExpression.setValue(elContext, taskList);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading task list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessInstanceActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessInstanceActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTasksForProcessInstanceActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,47 @@
+package org.jbpm.jsf.core.action;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class ListTasksForProcessInstanceActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+ private final ValueExpression processInstanceExpression;
+
+ public ListTasksForProcessInstanceActionListener(final ValueExpression processInstanceExpression, final ValueExpression targetExpression) {
+ this.processInstanceExpression = processInstanceExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listTasksForProcessInstance";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final ProcessInstance processInstance = (ProcessInstance) processInstanceExpression.getValue(elContext);
+ final List<TaskInstance> taskList =
+ Collections.unmodifiableList(new ArrayList<TaskInstance>(processInstance.getTaskMgmtInstance().getTaskInstances()));
+ targetExpression.setValue(elContext, taskList);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading task list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTokensActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTokensActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ListTokensActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,45 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class ListTokensActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+ private final ValueExpression processInstanceExpression;
+
+ public ListTokensActionListener(final ValueExpression processInstanceExpression, final ValueExpression targetExpression) {
+ this.processInstanceExpression = processInstanceExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listTokens";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object processInstanceValue = processInstanceExpression.getValue(elContext);
+ if (!(processInstanceValue instanceof ProcessInstance)) {
+ context.setError("Error listing token instances", "The given process instance is not an instance of ProcessInstance");
+ return;
+ }
+ targetExpression.setValue(elContext, ((ProcessInstance)processInstanceValue).findAllTokens());
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error listing token instances", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadJobActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadJobActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadJobActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,57 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.job.Job;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class LoadJobActionListener implements JbpmActionListener {
+
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+
+ public LoadJobActionListener(final ValueExpression idExpression, final ValueExpression targetExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "loadJob";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ if (idValue == null) {
+ context.setError("Error loading job instance", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final Job job;
+ job = context.getJbpmContext().getJobSession().getJob(id);
+ if (job == null) {
+ context.setError("Error loading job instance", "No job instance was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, job);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading job", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,55 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class LoadProcessActionListener implements JbpmActionListener {
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+
+ public LoadProcessActionListener(final ValueExpression idExpression, final ValueExpression targetExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "loadProcess";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ if (idValue == null) {
+ context.setError("Error loading process", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final ProcessDefinition processDefinition = context.getJbpmContext().getGraphSession().getProcessDefinition(id);
+ if (processDefinition == null) {
+ context.setError("Error loading process", "No process definition was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, processDefinition);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading process", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessInstanceActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessInstanceActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadProcessInstanceActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,79 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.PhaseId;
+
+/**
+ *
+ */
+public final class LoadProcessInstanceActionListener implements JbpmActionListener {
+
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+ private final ValueExpression forUpdateExpression;
+
+ public LoadProcessInstanceActionListener(final ValueExpression idExpression, final ValueExpression targetExpression, final ValueExpression forUpdateExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ this.forUpdateExpression = forUpdateExpression;
+ }
+
+ public String getName() {
+ return "loadProcessInstance";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ if (idValue == null) {
+ context.setError("Error loading process instance", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final boolean forUpdate;
+ if (forUpdateExpression != null) {
+ final Object forUpdateValue = forUpdateExpression.getValue(elContext);
+ if (forUpdateValue == null) {
+ context.setError("Error loading process instance", "The value of 'forUpdate' is null");
+ return;
+ }
+ if (forUpdateValue instanceof Boolean) {
+ forUpdate = ((Boolean)forUpdateValue).booleanValue();
+ } else {
+ forUpdate = Boolean.parseBoolean(forUpdateValue.toString());
+ }
+ } else {
+ forUpdate = event.getPhaseId() != PhaseId.RENDER_RESPONSE;
+ }
+ final ProcessInstance processInstance;
+ if (forUpdate) {
+ processInstance = context.getJbpmContext().getProcessInstanceForUpdate(id);
+ } else {
+ processInstance = context.getJbpmContext().getProcessInstance(id);
+ }
+ if (processInstance == null) {
+ context.setError("Error loading process instance", "No process instance was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, processInstance);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading process instance", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTaskActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTaskActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTaskActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,79 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.PhaseId;
+
+/**
+ *
+ */
+public final class LoadTaskActionListener implements JbpmActionListener {
+
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+ private final ValueExpression forUpdateExpression;
+
+ public LoadTaskActionListener(final ValueExpression idExpression, final ValueExpression targetExpression, final ValueExpression forUpdateExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ this.forUpdateExpression = forUpdateExpression;
+ }
+
+ public String getName() {
+ return "loadTask";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ if (idValue == null) {
+ context.setError("Error loading task instance", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final boolean forUpdate;
+ if (forUpdateExpression != null) {
+ final Object forUpdateValue = forUpdateExpression.getValue(elContext);
+ if (forUpdateValue == null) {
+ context.setError("Error loading task instance", "The value of 'forUpdate' is null");
+ return;
+ }
+ if (forUpdateValue instanceof Boolean) {
+ forUpdate = ((Boolean)forUpdateValue).booleanValue();
+ } else {
+ forUpdate = Boolean.parseBoolean(forUpdateValue.toString());
+ }
+ } else {
+ forUpdate = event.getPhaseId() != PhaseId.RENDER_RESPONSE;
+ }
+ final TaskInstance taskInstance;
+ if (forUpdate) {
+ taskInstance = context.getJbpmContext().getTaskInstanceForUpdate(id);
+ } else {
+ taskInstance = context.getJbpmContext().getTaskInstance(id);
+ }
+ if (taskInstance == null) {
+ context.setError("Error loading task instance", "No task instance was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, taskInstance);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading task", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTokenActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTokenActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/LoadTokenActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,79 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.PhaseId;
+
+/**
+ *
+ */
+public final class LoadTokenActionListener implements JbpmActionListener {
+
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+ private final ValueExpression forUpdateExpression;
+
+ public LoadTokenActionListener(final ValueExpression idExpression, final ValueExpression targetExpression, final ValueExpression forUpdateExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ this.forUpdateExpression = forUpdateExpression;
+ }
+
+ public String getName() {
+ return "loadProcessInstance";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ if (idValue == null) {
+ context.setError("Error loading token", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final boolean forUpdate;
+ if (forUpdateExpression != null) {
+ final Object forUpdateValue = forUpdateExpression.getValue(elContext);
+ if (forUpdateValue == null) {
+ context.setError("Error loading token", "The value of 'forUpdate' is null");
+ return;
+ }
+ if (forUpdateValue instanceof Boolean) {
+ forUpdate = ((Boolean)forUpdateValue).booleanValue();
+ } else {
+ forUpdate = Boolean.parseBoolean(forUpdateValue.toString());
+ }
+ } else {
+ forUpdate = event.getPhaseId() != PhaseId.RENDER_RESPONSE;
+ }
+ final Token token;
+ if (forUpdate) {
+ token = context.getJbpmContext().getTokenForUpdate(id);
+ } else {
+ token = context.getJbpmContext().getToken(id);
+ }
+ if (token == null) {
+ context.setError("Error loading token", "No token was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, token);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading token", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/MoveTokenActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/MoveTokenActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/MoveTokenActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,68 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.def.Node;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class MoveTokenActionListener implements JbpmActionListener {
+ private final ValueExpression tokenExpression;
+ private final ValueExpression nodeExpression;
+
+ public MoveTokenActionListener(final ValueExpression tokenExpression, final ValueExpression nodeExpression) {
+ this.tokenExpression = tokenExpression;
+ this.nodeExpression = nodeExpression;
+ }
+
+ public String getName() {
+ return "moveToken";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object tokenValue = tokenExpression.getValue(elContext);
+ if (tokenValue == null) {
+ context.setError("Error moving token", "The token value is null");
+ return;
+ }
+ if (! (tokenValue instanceof Token)) {
+ context.setError("Error moving token", "Attempted to move something other than a token");
+ return;
+ }
+ final Token token = (Token) tokenValue;
+ final Node node;
+ final Object nodeValue = nodeExpression.getValue(elContext);
+ if (nodeValue == null) {
+ context.setError("Error moving token", "Node value is null");
+ return;
+ }
+ if (nodeValue instanceof Node) {
+ node = (Node) nodeValue;
+ } else {
+ final String nodeName = nodeValue.toString();
+ node = token.getProcessInstance().getProcessDefinition().getNode(nodeName);
+ if (node == null) {
+ context.setError("Error moving token", "No node found by name of '" + nodeName + "'");
+ return;
+ }
+ }
+ token.setNode(node);
+ context.addSuccessMessage("Token moved to node '" + node.getName() + "'");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error moving token", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/RemoveVariableActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/RemoveVariableActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/RemoveVariableActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,74 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.context.exe.ContextInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class RemoveVariableActionListener implements JbpmActionListener {
+ private final ValueExpression nameExpression;
+ private final ValueExpression oldValueTargetExpression;
+ private final ValueExpression entityExpression;
+
+ public RemoveVariableActionListener(final ValueExpression nameExpression, final ValueExpression oldValueTargetExpression, final ValueExpression entityExpression) {
+ this.nameExpression = nameExpression;
+ this.oldValueTargetExpression = oldValueTargetExpression;
+ this.entityExpression = entityExpression;
+ }
+
+ public String getName() {
+ return "removeVariable";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object nameValue = nameExpression.getValue(elContext);
+ if (nameValue == null) {
+ context.setError("Error removing variable", "The value of the 'name' attribute is null");
+ return;
+ }
+ final String name = nameValue.toString();
+ final Object entity = entityExpression.getValue(elContext);
+ final Object oldValue;
+ if (entity instanceof TaskInstance) {
+ final TaskInstance task = (TaskInstance) entity;
+ oldValue = task.getVariable(name);
+ task.deleteVariable(name);
+ } else if (entity instanceof Token) {
+ final Token token = (Token) entity;
+ final ContextInstance contextInstance = token.getProcessInstance().getContextInstance();
+ oldValue = contextInstance.getVariable(name, token);
+ contextInstance.deleteVariable(name, token);
+ } else if (entity instanceof ProcessInstance) {
+ final ProcessInstance processInstance = (ProcessInstance) entity;
+ final ContextInstance contextInstance = processInstance.getContextInstance();
+ oldValue = contextInstance.getVariable(name);
+ contextInstance.deleteVariable(name);
+ } else {
+ context.setError("Error removing variable", "The value given for the 'entity' attribute is not a task, token, or process instance");
+ return;
+ }
+ if (oldValueTargetExpression != null) {
+ oldValueTargetExpression.setValue(elContext, oldValue);
+ }
+ context.addSuccessMessage("Variable '" + name + "' successfully removed");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error removing variable", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ResumeActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ResumeActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/ResumeActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,58 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.exe.ProcessInstance;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ */
+public final class ResumeActionListener implements JbpmActionListener {
+
+ private final ValueExpression valueExpression;
+
+ public ResumeActionListener(final ValueExpression valueExpression) {
+ this.valueExpression = valueExpression;
+ }
+
+ public String getName() {
+ return "resume";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object value = valueExpression.getValue(elContext);
+ if (value == null) {
+ context.setError("Resume failed", "The value is null");
+ return;
+ }
+ if (value instanceof TaskInstance) {
+ ((TaskInstance)value).resume();
+ context.addSuccessMessage("Task instance resumed");
+ } else if (value instanceof Token) {
+ ((Token)value).resume();
+ context.addSuccessMessage("Token resumed");
+ } else if (value instanceof ProcessInstance) {
+ ((ProcessInstance)value).resume();
+ context.addSuccessMessage("Process instance resumed");
+ } else {
+ context.setError("Resume failed", "The value type is not recognized");
+ return;
+ }
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Resume failed", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SignalActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SignalActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SignalActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,68 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.def.Transition;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class SignalActionListener implements JbpmActionListener {
+
+ private final ValueExpression valueExpression;
+ private final ValueExpression transitionExpression;
+
+ public SignalActionListener(final ValueExpression valueExpression, final ValueExpression transitionExpression) {
+ this.valueExpression = valueExpression;
+ this.transitionExpression = transitionExpression;
+ }
+
+ public String getName() {
+ return "signal";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object value = valueExpression.getValue(elContext);
+ final Token token;
+ if (value == null) {
+ context.setError("Signal failed", "The value is null");
+ return;
+ }
+ if (value instanceof Token) {
+ token = (Token) value;
+ } else if (value instanceof ProcessInstance) {
+ token = ((ProcessInstance)value).getRootToken();
+ } else {
+ context.setError("Signal failed", "The value type is not recognized");
+ return;
+ }
+ if (transitionExpression != null) {
+ final Object transitionValue = transitionExpression.getValue(elContext);
+ if (transitionValue == null) {
+ token.signal();
+ } else if (transitionValue instanceof Transition) {
+ token.signal((Transition)transitionValue);
+ } else {
+ token.signal(transitionValue.toString());
+ }
+ } else {
+ token.signal();
+ }
+ context.addSuccessMessage((value instanceof ProcessInstance) ? "Process instance" : "Token" + " signalled");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error signalling token", ex);
+ }
+ }
+}
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartProcessActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartProcessActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartProcessActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,105 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.graph.def.Node;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.def.Transition;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class StartProcessActionListener implements JbpmActionListener {
+
+ private final ValueExpression processExpression;
+ private final ValueExpression instanceExpression;
+
+
+ public StartProcessActionListener(final ValueExpression processExpression, final ValueExpression instanceExpression) {
+ this.processExpression = processExpression;
+ this.instanceExpression = instanceExpression;
+ }
+
+ public String getName() {
+ return "startProcess";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object processValue = processExpression.getValue(elContext);
+ if (processValue == null) {
+ context.setError("Error starting process", "The process value is null");
+ return;
+ }
+ if (!(processValue instanceof ProcessDefinition)) {
+ context.setError("Error starting process", "Attempted to start something other than a process");
+ return;
+ }
+ final ProcessDefinition definition = (ProcessDefinition) processValue;
+ final ProcessInstance instance = definition.createProcessInstance();
+ // Signal the root token based on the following criteria:
+ // 1. If there is no start task, and
+ // 2. If the root token is still at the start state, and
+ // 3. If the start state has a default leaving transition, then
+ // signal the token along the default transition.
+ context.addSuccessMessage("Started process");
+
+ final TaskMgmtInstance taskMgmtInstance = instance.getTaskMgmtInstance();
+ final TaskInstance startTaskInstance = taskMgmtInstance.createStartTaskInstance();
+
+ /* next piece causes NPE.
+ * and i don't think it is needed to signal a new process automatically. that can
+ * be done in the console itself as well.
+ * TODO it would be nice if the console automatically navigated to the screen where
+ * you can see the root token and actually give the signal
+
+ if (startTaskInstance == null) {
+ // There is no start task
+ final Node initialNode = definition.getStartState();
+ final Token rootToken = instance.getRootToken();
+ final Node rootTokenNode = rootToken.getNode();
+ if (initialNode.getId() == rootTokenNode.getId()) {
+ // The root token is still at the start node
+ final Transition defaultLeavingTransition = initialNode.getDefaultLeavingTransition();
+ if (defaultLeavingTransition != null) {
+ // There's a default transition
+ rootToken.signal(defaultLeavingTransition);
+ context.addSuccessMessage("Signalled root token");
+ }
+ }
+ }
+ */
+
+ context.selectOutcome("started");
+ if (instance.hasEnded()) {
+ context.selectOutcome("finished");
+ context.addSuccessMessage("Process completed");
+ }
+ if (instanceExpression != null) {
+ try {
+ instanceExpression.setValue(elContext, instance);
+ } catch (ELException ex) {
+ context.setError("Error setting value of " + instanceExpression.getExpressionString(), ex);
+ return;
+ }
+ }
+ // Nothing else saves the process, so we must
+ context.getJbpmContext().save(instance);
+ } catch (Exception ex) {
+ context.setError("Error starting process", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartTaskActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartTaskActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/StartTaskActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,79 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class StartTaskActionListener implements JbpmActionListener {
+
+ private final ValueExpression taskInstanceExpression;
+ private final ValueExpression actorIdExpression;
+ private final ValueExpression overwriteSwimlaneExpression;
+
+ public StartTaskActionListener(final ValueExpression taskInstanceExpression, final ValueExpression actorIdExpression, final ValueExpression overwriteSwimlaneExpression) {
+ this.taskInstanceExpression = taskInstanceExpression;
+ this.actorIdExpression = actorIdExpression;
+ this.overwriteSwimlaneExpression = overwriteSwimlaneExpression;
+ }
+
+ public String getName() {
+ return "startTask";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object taskInstanceValue = taskInstanceExpression.getValue(elContext);
+ if (taskInstanceValue == null) {
+ context.setError("Error starting task", "The task instance value is null");
+ return;
+ }
+ if (!(taskInstanceValue instanceof TaskInstance)) {
+ context.setError("Error starting task", "Attempted to start something other than a task instance");
+ return;
+ }
+ final TaskInstance taskInstance = (TaskInstance) taskInstanceValue;
+ if (actorIdExpression != null) {
+ final Object actorIdValue = actorIdExpression.getValue(elContext);
+ if (actorIdValue == null) {
+ context.setError("Error starting task", "Actor ID expression resolved to null");
+ return;
+ }
+ final String actorId = actorIdValue.toString();
+ if (overwriteSwimlaneExpression != null) {
+ final Object overwriteSwimlaneValue = overwriteSwimlaneExpression.getValue(elContext);
+ if (overwriteSwimlaneValue == null) {
+ context.setError("Error starting task", "Overwrite swimlane expression resolved to null");
+ return;
+ }
+ final Boolean overwriteSwimlane;
+ if (overwriteSwimlaneValue instanceof Boolean) {
+ overwriteSwimlane = (Boolean) overwriteSwimlaneValue;
+ } else {
+ overwriteSwimlane = Boolean.valueOf(overwriteSwimlaneValue.toString());
+ }
+ taskInstance.start(actorId, overwriteSwimlane.booleanValue());
+ } else {
+ taskInstance.start(actorId);
+ }
+ } else {
+ taskInstance.start();
+ }
+ context.addSuccessMessage("Task started");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error starting task", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SuspendActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SuspendActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/SuspendActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,58 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.exe.ProcessInstance;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ */
+public final class SuspendActionListener implements JbpmActionListener {
+
+ private final ValueExpression valueExpression;
+
+ public SuspendActionListener(final ValueExpression valueExpression) {
+ this.valueExpression = valueExpression;
+ }
+
+ public String getName() {
+ return "suspend";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object value = valueExpression.getValue(elContext);
+ if (value == null) {
+ context.setError("Suspend failed", "The value is null");
+ return;
+ }
+ if (value instanceof TaskInstance) {
+ ((TaskInstance)value).suspend();
+ context.addSuccessMessage("Task instance suspended");
+ } else if (value instanceof Token) {
+ ((Token)value).suspend();
+ context.addSuccessMessage("Token suspended");
+ } else if (value instanceof ProcessInstance) {
+ ((ProcessInstance)value).suspend();
+ context.addSuccessMessage("Process instance suspended");
+ } else {
+ context.setError("Suspend failed", "The value type is not recognized");
+ return;
+ }
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Suspend failed", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/TaskFormButtonActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/TaskFormButtonActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/TaskFormButtonActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,66 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.jsf.taskform.ui.UITaskFormCancelButton;
+import org.jbpm.jsf.taskform.ui.UITaskFormSaveButton;
+import org.jbpm.jsf.taskform.ui.UITaskFormTransitionButton;
+
+import javax.faces.event.ActionEvent;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+/**
+ *
+ */
+public final class TaskFormButtonActionListener implements JbpmActionListener {
+ private final ValueExpression transitionTargetValueExpression;
+ private final ValueExpression buttonTargetValueExpression;
+
+ public TaskFormButtonActionListener(final ValueExpression transitionTargetValueExpression, final ValueExpression buttonTargetValueExpression) {
+ this.transitionTargetValueExpression = transitionTargetValueExpression;
+ this.buttonTargetValueExpression = buttonTargetValueExpression;
+ }
+
+ public String getName() {
+ return "taskFormButton";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ final UIComponent source = event.getComponent();
+ final ELContext elContext = FacesContext.getCurrentInstance().getELContext();
+ if (source instanceof UITaskFormCancelButton) {
+ context.selectOutcome("cancel");
+ if (buttonTargetValueExpression != null) {
+ buttonTargetValueExpression.setValue(elContext, "cancel");
+ }
+ log.fine("Cancel button selected");
+ } else if (source instanceof UITaskFormSaveButton) {
+ context.selectOutcome("save");
+ if (buttonTargetValueExpression != null) {
+ buttonTargetValueExpression.setValue(elContext, "save");
+ }
+ log.fine("Save button selected");
+ } else if (source instanceof UITaskFormTransitionButton) {
+ if (transitionTargetValueExpression != null) {
+ final String transitionName = ((UITaskFormTransitionButton) source).getTransition();
+ transitionTargetValueExpression.setValue(elContext, transitionName);
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Updating transition expression '" + transitionTargetValueExpression.getExpressionString() + "' with transition value '" + transitionName + "'");
+ }
+ }
+ if (buttonTargetValueExpression != null) {
+ buttonTargetValueExpression.setValue(elContext, "transition");
+ }
+ log.fine("Transition button selected");
+ context.selectOutcome("transition");
+ }
+ }
+
+ private static final Logger log = Logger.getLogger("org.jbpm.jsf.core.action.TaskFormButtonActionListener");
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateTaskStartActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateTaskStartActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateTaskStartActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,70 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+import java.util.Date;
+
+/**
+ *
+ */
+public final class UpdateTaskStartActionListener implements JbpmActionListener {
+ private final ValueExpression taskExpression;
+ private final ValueExpression startDateExpression;
+
+
+ public UpdateTaskStartActionListener(final ValueExpression startDateExpression, final ValueExpression taskExpression) {
+ this.startDateExpression = startDateExpression;
+ this.taskExpression = taskExpression;
+ }
+
+ public String getName() {
+ return "updateTaskStart";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object taskInstanceValue = taskExpression.getValue(elContext);
+ if (taskInstanceValue == null) {
+ context.setError("Error updating task", "The task instance value is null");
+ return;
+ }
+ if (!(taskInstanceValue instanceof TaskInstance)) {
+ context.setError("Error updating task", "Attempted to resume something other than a task instance");
+ return;
+ }
+ final TaskInstance taskInstance = (TaskInstance) taskInstanceValue;
+ final Date start;
+ if (startDateExpression != null) {
+ final Object startDateValue = startDateExpression.getValue(elContext);
+ if (startDateValue == null) {
+ context.setError("Error updating task", "Start date value is null");
+ return;
+ }
+ if (startDateValue instanceof Date) {
+ start = (Date) startDateValue;
+ } else if (startDateValue instanceof Long) {
+ start = new Date(((Long)startDateValue).longValue());
+ } else {
+ context.setError("Error updating task", "Start date value is not a recognized type");
+ return;
+ }
+ } else {
+ start = new Date();
+ }
+ taskInstance.setStart(start);
+ context.getJbpmContext().getSession().flush();
+ } catch (Exception ex) {
+ context.setError("Error updating task", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateVariableActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateVariableActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/action/UpdateVariableActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,77 @@
+package org.jbpm.jsf.core.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.context.exe.ContextInstance;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class UpdateVariableActionListener implements JbpmActionListener {
+ private final ValueExpression nameExpression;
+ private final ValueExpression valueExpression;
+ private final ValueExpression oldValueTargetExpression;
+ private final ValueExpression entityExpression;
+
+ public UpdateVariableActionListener(final ValueExpression nameExpression, final ValueExpression valueExpression, final ValueExpression oldValueTargetExpression, final ValueExpression entityExpression) {
+ this.nameExpression = nameExpression;
+ this.valueExpression = valueExpression;
+ this.oldValueTargetExpression = oldValueTargetExpression;
+ this.entityExpression = entityExpression;
+ }
+
+ public String getName() {
+ return "updateVariable";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object nameValue = nameExpression.getValue(elContext);
+ if (nameValue == null) {
+ context.setError("Error updating variable", "The value of the 'name' attribute is null");
+ return;
+ }
+ final String name = nameValue.toString();
+ final Object value = valueExpression.getValue(elContext);
+ final Object entity = entityExpression.getValue(elContext);
+ final Object oldValue;
+ if (entity instanceof TaskInstance) {
+ final TaskInstance task = (TaskInstance) entity;
+ oldValue = task.getVariable(name);
+ task.setVariable(name, value);
+ } else if (entity instanceof Token) {
+ final Token token = (Token) entity;
+ final ContextInstance contextInstance = token.getProcessInstance().getContextInstance();
+ oldValue = contextInstance.getVariable(name, token);
+ contextInstance.setVariable(name, value, token);
+ } else if (entity instanceof ProcessInstance) {
+ final ProcessInstance processInstance = (ProcessInstance) entity;
+ final ContextInstance contextInstance = processInstance.getContextInstance();
+ oldValue = contextInstance.getVariable(name);
+ contextInstance.setVariable(name, value);
+ } else {
+ context.setError("Error updating variable", "The value given for the 'entity' attribute is not a task, token, or process instance");
+ return;
+ }
+ if (oldValueTargetExpression != null) {
+ oldValueTargetExpression.setValue(elContext, oldValue);
+ }
+ context.addSuccessMessage("Variable updated");
+ context.getJbpmContext().getSession().flush();
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error updating variable", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/Configuration.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/Configuration.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/Configuration.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.config;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ *
+ */
+public final class Configuration {
+ private final List<FileMatcher> matchers;
+ private final boolean useJsfActorId;
+
+ public Configuration(final List<FileMatcher> matchers, final boolean useJsfActorId) {
+ this.matchers = Collections.unmodifiableList(new ArrayList<FileMatcher>(matchers));
+ this.useJsfActorId = useJsfActorId;
+ }
+
+ public List<FileMatcher> getMatchers() {
+ return matchers;
+ }
+
+ public boolean useJsfActorId() {
+ return useJsfActorId;
+ }
+
+ public static final class FileMatcher {
+ private final Pattern pattern;
+ private final String contentType;
+ private final String file;
+
+ public FileMatcher(final Pattern pattern, final String contentType, final String file) {
+ this.pattern = pattern;
+ this.contentType = contentType;
+ this.file = file;
+ }
+
+ public String getContentType() {
+ return contentType;
+ }
+
+ public String getFile() {
+ return file;
+ }
+
+ public Pattern getPattern() {
+ return pattern;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/ConfigurationLocator.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/ConfigurationLocator.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/config/ConfigurationLocator.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,284 @@
+package org.jbpm.jsf.core.config;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.regex.Pattern;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import javax.faces.FacesException;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ */
+public final class ConfigurationLocator {
+ private final List<Configuration.FileMatcher> matchers = arrayList();
+ private boolean useJsfActorId;
+
+ private static <T> List<T> arrayList() {
+ return new ArrayList<T>();
+ }
+
+ private ConfigurationLocator() {
+ }
+
+ private static Configuration configuration = null;
+
+ public static Configuration getInstance() {
+ synchronized (ConfigurationLocator.class) {
+ if (configuration == null) {
+ final ConfigurationLocator configurationLocator = new ConfigurationLocator();
+ configurationLocator.configure();
+ configuration = new Configuration(configurationLocator.matchers, configurationLocator.useJsfActorId);
+ }
+ return configuration;
+ }
+ }
+
+ private void configure() throws FacesException {
+ searchJars();
+ searchWar();
+ }
+
+ private static enum Elem {
+ JBPM4JSF_CONFIG("jbpm4jsf-config"),
+ AUTHENTICATION_SERVICE("authentication-service"),
+ USE_JSF_ACTOR("use-jsf-actor"),
+ PROCESS_FILE_MATCHER("process-file-matcher"),
+ PATTERN("pattern"),
+ FILE_NAME("file-name"),
+ CONTENT_TYPE("content-type");
+
+ private final String elemName;
+
+ Elem(final String elemName) {
+ this.elemName = elemName;
+ }
+
+ private String getName() {
+ return elemName;
+ }
+ }
+
+ static {
+ final Map<String, Elem> map = new HashMap<String, Elem>();
+ for (Elem e : Elem.values()) {
+ map.put(e.getName(), e);
+ }
+ elements = Collections.unmodifiableMap(map);
+ }
+
+ private static final Map<String, Elem> elements;
+
+ private Elem lookup(Element element) {
+ final Elem elem = elements.get(element.getLocalName());
+ if (elem == null) {
+ throw unexpectedElement(element);
+ }
+ return elem;
+ }
+
+ private Iterable<Element> childrenOf(Element element) {
+ return new ElementIterable(element);
+ }
+
+ private static final class ElementIterable implements Iterable<Element> {
+ private final Element element;
+
+ private ElementIterable(final Element element) {
+ this.element = element;
+ }
+
+ public Iterator<Element> iterator() {
+ return new ElementIterator(element);
+ }
+ }
+
+ private static final class ElementIterator implements Iterator<Element> {
+
+ private Element next;
+ private Node position;
+
+ public ElementIterator(final Element element) {
+ next = null;
+ position = element.getFirstChild();
+ }
+
+ public boolean hasNext() {
+ if (next == null) {
+ spinToNext();
+ }
+ return next != null;
+ }
+
+ private void spinToNext() {
+ if (next == null) {
+ while (position != null) {
+ try {
+ if (position instanceof Element) {
+ next = (Element) position;
+ return;
+ }
+ } finally {
+ position = position.getNextSibling();
+ }
+ }
+ }
+ }
+
+ public Element next() {
+ if (next == null) {
+ throw new NoSuchElementException("next() past end");
+ }
+ try {
+ return next;
+ } finally {
+ next = null;
+ spinToNext();
+ }
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("remove() not allowed");
+ }
+ }
+
+ private RuntimeException unexpectedElement(final Element element) {
+ return new IllegalStateException("Unexpected element \"" + element.getLocalName() + "\"");
+ }
+
+ private RuntimeException missingContent(final String elementName) {
+ return new IllegalArgumentException("Missing required data for element \"" + elementName + "\"");
+ }
+
+ private void handleAuthenticationService(final Element parent) {
+ for (Element element : childrenOf(parent)) {
+ switch (lookup(element)) {
+ case USE_JSF_ACTOR: useJsfActorId = Boolean.valueOf(element.getTextContent()); break;
+ default: throw unexpectedElement(element);
+ }
+ }
+ }
+
+ private void handleProcessFileMatcher(final Element parent) {
+ String patternText = null;
+ String contentType = null;
+ String fileName = null;
+ for (Element element : childrenOf(parent)) {
+ switch (lookup(element)) {
+ case PATTERN: patternText = element.getTextContent().trim(); break;
+ case CONTENT_TYPE: contentType = element.getTextContent().trim(); break;
+ case FILE_NAME: fileName = element.getTextContent().trim(); break;
+ default: throw unexpectedElement(element);
+ }
+ }
+ if (patternText == null || patternText.length() == 0) {
+ throw missingContent("pattern");
+ }
+ if (contentType == null || contentType.length() == 0) {
+ throw missingContent("content-type");
+ }
+ if (fileName == null || fileName.length() == 0) {
+ throw missingContent("file-name");
+ }
+ matchers.add(new Configuration.FileMatcher(Pattern.compile(patternText), contentType, fileName));
+ }
+
+ private void handleConfiguration(URL resource) {
+ final InputStream inputStream;
+ try {
+ inputStream = resource.openStream();
+ } catch (IOException e) {
+ FacesException ex = new FacesException("Failed to parse jbpm4jsf configuration file: " + e.getMessage());
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ try {
+ DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setValidating(false);
+ documentBuilderFactory.setNamespaceAware(true);
+ final DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
+ final Document document = builder.parse(inputStream);
+ final Element docElement = document.getDocumentElement();
+ switch (lookup(docElement)) {
+ case JBPM4JSF_CONFIG: break;
+ default: throw unexpectedElement(docElement);
+ }
+ for (Element element : childrenOf(docElement)) {
+ switch (lookup(element)) {
+ case AUTHENTICATION_SERVICE: handleAuthenticationService(element); break;
+ case PROCESS_FILE_MATCHER: handleProcessFileMatcher(element); break;
+ default: throw unexpectedElement(element);
+ }
+ }
+ } catch (Exception e) {
+ FacesException ex = new FacesException("Failed to parse jbpm4jsf configuration file: " + e.getMessage());
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ } finally {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ log.log(Level.WARNING, "Failed to close URL input stream: " + e.getMessage());
+ }
+ }
+ }
+
+ private void searchJars() {
+ // TODO: alphabetize by jar name
+ final String path = "META-INF/jbpm4jsf-config.xml";
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ if (loader == null) {
+ loader = ConfigurationLocator.class.getClassLoader();
+ }
+ final Enumeration<URL> resources;
+ try {
+ resources = loader.getResources(path);
+ } catch (IOException e) {
+ final FacesException ex = new FacesException("Failed to read configuration resource: " + e.getMessage(), e.getCause());
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ while (resources.hasMoreElements()) {
+ final URL resource = resources.nextElement();
+ handleConfiguration(resource);
+ }
+ }
+
+ private void searchWar() {
+ final String path = "/WEB-INF/jbpm4jsf-config.xml";
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ExternalContext externalContext = facesContext.getExternalContext();
+ final ServletContext servletContext = (ServletContext) externalContext.getContext();
+ try {
+ final URL resource = servletContext.getResource(path);
+ handleConfiguration(resource);
+ } catch (MalformedURLException e) {
+ final FacesException ex = new FacesException("Failed to read configuration resource: " + e.getMessage(), e.getCause());
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ }
+
+ private static final Logger log = Logger.getLogger("org.jbpm.jsf.core.config.ConfigLocator");
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AbstractHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AbstractHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AbstractHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,80 @@
+package org.jbpm.jsf.core.handler;
+
+import java.io.IOException;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.impl.JbpmActionListenerWrapper;
+import org.jboss.gravel.common.annotation.TldAttributes;
+import org.jboss.gravel.common.annotation.TldAttribute;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.tag.TagException;
+import com.sun.facelets.tag.TagHandler;
+import com.sun.facelets.tag.jsf.ComponentSupport;
+
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+
+/**
+ *
+ */
+ at TldAttributes ({
+ @TldAttribute (
+ name = "unless",
+ description = "A boolean expression that, if true, will prevent this action from being run.",
+ deferredType = boolean.class
+ ),
+ @TldAttribute (
+ name = "navigate",
+ description = "A boolean expression that can be used to control whether navigation will be attempted after this " +
+ "action completes.",
+ deferredType = boolean.class
+ ),
+ @TldAttribute (
+ name = "name",
+ description = "A different name to use for this action. Action names are used by some navigation handlers."
+ )
+})
+public abstract class AbstractHandler extends TagHandler {
+ public static final String JBPM_JSF_CONTEXT_KEY = "org.jbpm.jsf.CONTEXT";
+
+ private final TagConfig config;
+
+ private final TagAttribute unlessAttribute;
+ private final TagAttribute navigateAttribute;
+ private final TagAttribute nameAttribute;
+
+ public AbstractHandler(final TagConfig config) {
+ super(config);
+ this.config = config;
+ unlessAttribute = getAttribute("unless");
+ navigateAttribute = getAttribute("navigate");
+ nameAttribute = getAttribute("name");
+ }
+
+ public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, ELException {
+ if (! (parent instanceof ActionSource)) {
+ throw new TagException(tag, "Parent component is not an ActionSource");
+ }
+ if (ComponentSupport.isNew(parent)) {
+ ((ActionSource) parent).addActionListener(
+ new JbpmActionListenerWrapper(
+ getListener(ctx),
+ getValueExpression(unlessAttribute, ctx, Boolean.class),
+ getValueExpression(navigateAttribute, ctx, Boolean.class),
+ getValueExpression(nameAttribute, ctx, String.class)
+ )
+ );
+ }
+ }
+
+ protected ValueExpression getValueExpression(TagAttribute tagAttribute, FaceletContext context, Class<?> type) {
+ return tagAttribute == null ? null : tagAttribute.getValueExpression(context, type);
+ }
+
+ protected abstract JbpmActionListener getListener(final FaceletContext ctx);
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AddCommentHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AddCommentHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AddCommentHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,46 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.def.GraphElement;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.AddCommentActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag(
+ name ="addComment",
+ description = "Add a comment to a task or token.",
+ attributes = {
+ @TldAttribute (
+ name = "comment",
+ description = "An EL expression that returns the comment text to add.",
+ deferredType = String.class,
+ required = true
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression that returns the node to add a comment to.",
+ deferredType = GraphElement.class,
+ required = true
+ )
+})
+public final class AddCommentHandler extends AbstractHandler {
+ private final TagAttribute commentAttribute;
+ private final TagAttribute targetAttribute;
+
+ public AddCommentHandler(final TagConfig config) {
+ super(config);
+ commentAttribute = getRequiredAttribute("comment");
+ targetAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new AddCommentActionListener(commentAttribute.getValueExpression(ctx, String.class), targetAttribute.getValueExpression(ctx, Object.class));
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ApplyVariableMapHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ApplyVariableMapHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ApplyVariableMapHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.core.impl.UpdatesHashMap;
+import org.jbpm.jsf.core.action.ApplyVariableMapActionListener;
+import org.jbpm.jsf.JbpmActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.tag.TagAttribute;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "applyVariableMap",
+ description = "Apply a variable map to a token, task, or process instance",
+ attributes = {
+ @TldAttribute (
+ name = "variableMap",
+ description = "The variable map to apply.",
+ required = true,
+ deferredType = UpdatesHashMap.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "The token, task, or process instance to apply the variables to.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class ApplyVariableMapHandler extends AbstractHandler {
+ private final TagAttribute variableMapTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public ApplyVariableMapHandler(final TagConfig config) {
+ super(config);
+ variableMapTagAttribute = getRequiredAttribute("variableMap");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ApplyVariableMapActionListener(
+ getValueExpression(variableMapTagAttribute, ctx, UpdatesHashMap.class),
+ getValueExpression(targetTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AssignTaskHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AssignTaskHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/AssignTaskHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,59 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.AssignTaskActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "assignTask",
+ description = "Assign a task to an actor.",
+ attributes = {
+ @TldAttribute(
+ name = "task",
+ description = "The task instance to assign.",
+ required = true,
+ deferredType = TaskInstance.class
+ ),
+ @TldAttribute(
+ name = "actorId",
+ description = "The actor ID to which the task should be assigned.",
+ required = true,
+ deferredType = String.class
+ ),
+ @TldAttribute(
+ name = "overwriteSwimlane",
+ description = "A flag that indicates whether the swimlane should be overwritten.",
+ required = false,
+ deferredType = boolean.class
+ )
+ }
+)
+public final class AssignTaskHandler extends AbstractHandler {
+ private final TagAttribute taskTagAttribute;
+ private final TagAttribute actorIdTagAttribute;
+ private final TagAttribute overwriteSwimlaneTagAttribute;
+
+ public AssignTaskHandler(final TagConfig config) {
+ super(config);
+ taskTagAttribute = getRequiredAttribute("task");
+ actorIdTagAttribute = getRequiredAttribute("actorId");
+ overwriteSwimlaneTagAttribute = getAttribute("overwriteSwimlane");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new AssignTaskActionListener(
+ getValueExpression(taskTagAttribute, ctx, TaskInstance.class),
+ getValueExpression(actorIdTagAttribute, ctx, String.class),
+ getValueExpression(overwriteSwimlaneTagAttribute, ctx, Boolean.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CancelHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CancelHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CancelHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,41 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.CancelActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "cancel",
+ description = "Cancel a running task instance, token, or process instance.",
+ attributes = {
+ @TldAttribute (
+ name = "value",
+ description = "The item to cancel.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class CancelHandler extends AbstractHandler {
+ private final TagAttribute taskTagAttribute;
+
+ public CancelHandler(final TagConfig config) {
+ super(config);
+ taskTagAttribute = getRequiredAttribute("value");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new CancelActionListener(
+ getValueExpression(taskTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CompleteTaskHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CompleteTaskHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/CompleteTaskHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,49 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.CompleteTaskActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "completeTask",
+ description = "Complete a task.",
+ attributes = {
+ @TldAttribute (
+ name = "task",
+ description = "An EL expression that resolves to the task instance to complete.",
+ required = true,
+ deferredType = TaskInstance.class
+ ),
+ @TldAttribute (
+ name = "transition",
+ description = "An EL expression that resolves to either the name of a transition, or the transition object to take upon completing this task.",
+ deferredType = Object.class
+ )
+ }
+)
+public final class CompleteTaskHandler extends AbstractHandler {
+ private final TagAttribute instanceTagAttribute;
+ private final TagAttribute transitionTagAttribute;
+
+ public CompleteTaskHandler(final TagConfig config) {
+ super(config);
+ instanceTagAttribute = getRequiredAttribute("task");
+ transitionTagAttribute = getAttribute("transition");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new CompleteTaskActionListener(
+ getValueExpression(instanceTagAttribute, ctx, TaskInstance.class),
+ getValueExpression(transitionTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeleteHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeleteHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeleteHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,40 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.DeleteActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "delete",
+ description = "Delete a process, process instance, or job.",
+ attributes = {
+ @TldAttribute (
+ name = "value",
+ description = "The item to delete.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class DeleteHandler extends AbstractHandler {
+ private final TagAttribute processTagAttribute;
+
+ public DeleteHandler(final TagConfig config) {
+ super(config);
+ processTagAttribute = getRequiredAttribute("value");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new DeleteActionListener(
+ getValueExpression(processTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeployProcessHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeployProcessHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/DeployProcessHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.DeployProcessActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "deployProcess",
+ description = "Deploy a new process archive.",
+ attributes = {
+ @TldAttribute(
+ name = "archive",
+ description = "The source of the archive, as an input stream or a byte array.",
+ required = true,
+ deferredType = Object.class
+ ),
+ @TldAttribute(
+ name = "target",
+ description = "An EL expression into which the new process definition will be inserted.",
+ deferredType = ProcessDefinition.class
+ )
+ }
+)
+public final class DeployProcessHandler extends AbstractHandler {
+ private final TagAttribute archiveTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public DeployProcessHandler(final TagConfig config) {
+ super(config);
+ archiveTagAttribute = getRequiredAttribute("archive");
+ targetTagAttribute = getAttribute("target");
+
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new DeployProcessActionListener(
+ getValueExpression(archiveTagAttribute, ctx, Object.class),
+ getValueExpression(targetTagAttribute, ctx, ProcessDefinition.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetDiagramInfoHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetDiagramInfoHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetDiagramInfoHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.GetDiagramInfoActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "getDiagramInfo",
+ description = "Read process definition diagram information from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "process",
+ description = "The the process definition to read diagram information for.",
+ required = true,
+ deferredType = ProcessDefinition.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the diagram information should be stored.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class GetDiagramInfoHandler extends AbstractHandler {
+ private final TagAttribute processTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public GetDiagramInfoHandler(final TagConfig config) {
+ super(config);
+ processTagAttribute = getRequiredAttribute("process");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new GetDiagramInfoActionListener(
+ getValueExpression(processTagAttribute, ctx, ProcessDefinition.class),
+ getValueExpression(targetTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetProcessLogsHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetProcessLogsHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetProcessLogsHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,78 @@
+package org.jbpm.jsf.core.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.GetProcessLogsActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "getProcessLogs",
+ description = "Get the process logs from a process instance.",
+ attributes = {
+ @TldAttribute (
+ name = "processInstance",
+ description = "The process instance whose process logs are to be read.",
+ required = true,
+ deferredType = ProcessInstance.class
+ ),
+ @TldAttribute (
+ name = "type",
+ description = "The process log type. This may be a literal Class object, or the name of a class, "
+ + "or one of the following shortcut names:<ul>"
+ + "<li><code>variable</code></li>"
+ + "<li><code>variableUpdate</code></li>"
+ + "<li><code>variableCreate</code></li>"
+ + "<li><code>variableDelete</code></li>"
+ + "<li><code>action</code></li>"
+ + "<li><code>node</code></li>"
+ + "<li><code>processInstanceCreate</code></li>"
+ + "<li><code>processInstanceEnd</code></li>"
+ + "<li><code>processState</code></li>"
+ + "<li><code>signal</code></li>"
+ + "<li><code>tokenCreate</code></li>"
+ + "<li><code>tokenEnd</code></li>"
+ + "<li><code>transition</code></li>"
+ + "<li><code>composite</code></li>"
+ + "<li><code>message</code></li>"
+ + "<li><code>swimlane</code></li>"
+ + "<li><code>swimlaneAssign</code></li>"
+ + "<li><code>swimlaneCreate</code></li>"
+ + "<li><code>task</code></li>"
+ + "<li><code>taskAssign</code></li>"
+ + "<li><code>taskCreate</code></li>"
+ + "<li><code>taskEnd</code></li>"
+ + "</ul>",
+ deferredType = Object.class
+ )
+ }
+)
+public final class GetProcessLogsHandler extends AbstractHandler {
+
+ private final TagAttribute processInstanceTagAttribute;
+ private final TagAttribute typeTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public GetProcessLogsHandler(final TagConfig config) {
+ super(config);
+ processInstanceTagAttribute = getRequiredAttribute("processInstance");
+ typeTagAttribute = getAttribute("type");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new GetProcessLogsActionListener(
+ getValueExpression(processInstanceTagAttribute, ctx, ProcessInstance.class),
+ getValueExpression(typeTagAttribute, ctx, Object.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetTaskFormInfoHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetTaskFormInfoHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetTaskFormInfoHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,54 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.GetTaskFormInfoActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+import java.util.Map;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "getTaskFormInfo",
+ description = "Read process definition task form information from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "process",
+ description = "The the process definition to read task form information for.",
+ required = true,
+ deferredType = ProcessDefinition.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the task form information should be stored. This will be " +
+ "in the form of a map whose keys are task names and whose values are the name of the task form file, " +
+ "if any.",
+ required = true,
+ deferredType = Map.class
+ )
+ }
+)
+public final class GetTaskFormInfoHandler extends AbstractHandler {
+ private final TagAttribute processTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public GetTaskFormInfoHandler(final TagConfig config) {
+ super(config);
+ processTagAttribute = getRequiredAttribute("process");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new GetTaskFormInfoActionListener(
+ getValueExpression(processTagAttribute, ctx, ProcessDefinition.class),
+ getValueExpression(targetTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,58 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.GetVariableActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "getVariable",
+ description = "Get the value of a process variable.",
+ attributes = {
+ @TldAttribute (
+ name = "name",
+ description = "The name of the variable to remove.",
+ required = true
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the variable value will be stored.",
+ deferredType = Object.class,
+ required = true
+ ),
+ @TldAttribute (
+ name = "entity",
+ description = "The token, task, or process instance from which the variable value should be retrieved.",
+ deferredType = Object.class,
+ required = true
+ )
+ }
+)
+public final class GetVariableHandler extends AbstractHandler {
+ private final TagAttribute nameTagAttribute;
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute entityTagAttribute;
+
+ public GetVariableHandler(final TagConfig config) {
+ super(config);
+ nameTagAttribute = getRequiredAttribute("name");
+ targetTagAttribute = getRequiredAttribute("target");
+ entityTagAttribute = getRequiredAttribute("entity");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new GetVariableActionListener(
+ getValueExpression(nameTagAttribute, ctx, String.class),
+ getValueExpression(targetTagAttribute, ctx, Object.class),
+ getValueExpression(entityTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableMapHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableMapHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/GetVariableMapHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.GetVariableMapActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+import java.util.Map;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "getVariableMap",
+ description = "Get the variable map from a token, process instance, or task.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the variable map will be stored.",
+ deferredType = Map.class,
+ required = true
+ ),
+ @TldAttribute (
+ name = "value",
+ description = "The entity from which the variable should be retrieved.",
+ deferredType = Object.class,
+ required = true
+ )
+ }
+)
+public final class GetVariableMapHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute valueTagAttribute;
+
+ public GetVariableMapHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ valueTagAttribute = getRequiredAttribute("value");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new GetVariableMapActionListener(
+ getValueExpression(valueTagAttribute, ctx, Object.class),
+ getValueExpression(targetTagAttribute, ctx, Map.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/IncludeProcessFileHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/IncludeProcessFileHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/IncludeProcessFileHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,129 @@
+package org.jbpm.jsf.core.handler;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FileNotFoundException;
+import java.net.URL;
+import java.net.URLStreamHandler;
+import java.net.URLConnection;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagException;
+import com.sun.facelets.tag.TagHandler;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.el.VariableMapperWrapper;
+
+import javax.faces.component.UIComponent;
+import javax.faces.FacesException;
+import javax.el.ELException;
+import javax.el.VariableMapper;
+import javax.el.ValueExpression;
+
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.file.def.FileDefinition;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "includeProcessFile",
+ description = "Include a process file.",
+ attributes = {
+ @TldAttribute (
+ name = "process",
+ description = "The process definition from which the file should be read.",
+ required = true,
+ deferredType = ProcessDefinition.class
+ ),
+ @TldAttribute (
+ name = "file",
+ description = "The name of a file within the process to include.",
+ required = true
+ )
+ }
+)
+public final class IncludeProcessFileHandler extends TagHandler {
+ private final TagAttribute processAttribute;
+ private final TagAttribute fileAttribute;
+
+ public IncludeProcessFileHandler(final TagConfig config) {
+ super(config);
+ processAttribute = getRequiredAttribute("process");
+ fileAttribute = getRequiredAttribute("file");
+ }
+
+ public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, ELException {
+ // now include the nested form
+ final ValueExpression fileExpression = fileAttribute.getValueExpression(ctx, String.class);
+ final ValueExpression processExpression = processAttribute.getValueExpression(ctx, ProcessDefinition.class);
+
+ final String file = (String) fileExpression.getValue(ctx);
+ if (file == null || file.length() == 0) {
+ return;
+ }
+ final ProcessDefinition processDefinition = (ProcessDefinition) processExpression.getValue(ctx);
+ if (processDefinition == null) {
+ throw new TagException(tag, "Value for process attribute is null");
+ }
+ final FileDefinition fileDefinition = processDefinition.getFileDefinition();
+ if (fileDefinition == null) {
+ throw new TagException(tag, "Process has a null fileDefinition property");
+ }
+ if (! fileDefinition.hasFile(file)) {
+ throw new TagException(tag, "Process does not contain file '" + file + "'");
+ }
+ VariableMapper orig = ctx.getVariableMapper();
+ final VariableMapperWrapper newVarMapper = new VariableMapperWrapper(orig);
+ ctx.setVariableMapper(newVarMapper);
+ try {
+ final StringBuffer buffer = new StringBuffer();
+ buffer.append(processDefinition.getId());
+ buffer.append("/");
+ buffer.append(file);
+ nextHandler.apply(ctx, parent);
+ ctx.includeFacelet(parent, new URL("par", "", 0, buffer.toString(), new FileDefinitionURLStreamHandler(fileDefinition, file)));
+ } finally {
+ ctx.setVariableMapper(orig);
+ }
+ }
+
+ private static final class FileDefinitionURLStreamHandler extends URLStreamHandler {
+ private final FileDefinition fileDefinition;
+ private final String src;
+
+ public FileDefinitionURLStreamHandler(final FileDefinition fileDefinition, final String src) {
+ this.fileDefinition = fileDefinition;
+ this.src = src;
+ }
+
+ protected URLConnection openConnection(URL url) {
+ return new IncludeProcessFileHandler.FileDefinitionURLConnection(url, fileDefinition, src);
+ }
+ }
+
+ private static final class FileDefinitionURLConnection extends URLConnection {
+ private final FileDefinition fileDefinition;
+ private final String src;
+
+ protected FileDefinitionURLConnection(final URL url, final FileDefinition fileDefinition, final String src) {
+ super(url);
+ this.fileDefinition = fileDefinition;
+ this.src = src;
+ }
+
+ public void connect() {
+ }
+
+ public InputStream getInputStream() throws FileNotFoundException {
+ final InputStream inputStream = fileDefinition.getInputStream(src);
+ if (inputStream == null) {
+ throw new FileNotFoundException("File '" + src + "' not found in process file definition");
+ }
+ return inputStream;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/JbpmActionListenerHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/JbpmActionListenerHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/JbpmActionListenerHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,53 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.LazyJbpmActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.tag.TagException;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "jbpmActionListener",
+ description = "Call a user-defined action, providing the action with a JbpmJsfContext.",
+ attributes = {
+ @TldAttribute (
+ name = "type",
+ description = "The type of the action. Can be an EL expression which resolves to a literal Class object, "
+ + "or the name of a class as a String. Either this or the 'listener' attribute must be given.",
+ deferredType = Object.class
+ ),
+ @TldAttribute (
+ name = "listener",
+ description = "An EL expression that resolves to the listener to execute. Either this or the "
+ + "'type' attribute must be given.",
+ deferredType = JbpmActionListener.class
+ )
+ }
+)
+public final class JbpmActionListenerHandler extends AbstractHandler {
+ private final TagAttribute typeTagAttribute;
+ private final TagAttribute listenerTagAttribute;
+
+ public JbpmActionListenerHandler(final TagConfig config) {
+ super(config);
+ typeTagAttribute = getAttribute("type");
+ listenerTagAttribute = getAttribute("listener");
+ if ((typeTagAttribute == null) == (listenerTagAttribute == null)) {
+ throw new TagException(tag, "Exactly one of the \"type\" or \"listener\" attributes must be given");
+ }
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LazyJbpmActionListener(
+ getValueExpression(typeTagAttribute, ctx, Object.class),
+ getValueExpression(typeTagAttribute, ctx, JbpmActionListener.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListJobsHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListJobsHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListJobsHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,41 @@
+package org.jbpm.jsf.core.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListJobsActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listJobs",
+ description = "List all jobs in the database.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the list will be stored.",
+ required = true,
+ deferredType = List.class
+ )
+ }
+)
+public final class ListJobsHandler extends AbstractHandler {
+ private final TagAttribute targetAttribute;
+
+ public ListJobsHandler(final TagConfig config) {
+ super(config);
+ targetAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListJobsActionListener(
+ getValueExpression(targetAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessInstancesHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessInstancesHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessInstancesHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListProcessesActionListener;
+import org.jbpm.jsf.core.action.ListProcessInstancesActionListener;
+import java.util.List;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listProcessInstances",
+ description = "Read a list of process instances from a process definition.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the process instance list should be stored.",
+ required = true,
+ deferredType = List.class
+ ),
+ @TldAttribute (
+ name = "processId",
+ description = "The numeric ID of the process definition whose instances are to be read.",
+ required = true,
+ deferredType = long.class
+ )
+ }
+)
+public final class ListProcessInstancesHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute processIdTagAttribute;
+
+ public ListProcessInstancesHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ processIdTagAttribute = getRequiredAttribute("processId");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListProcessInstancesActionListener(
+ getValueExpression(processIdTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessesHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessesHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListProcessesHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,42 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListProcessesActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+import java.util.List;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listProcesses",
+ description = "Read a list of process definitions from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the process definition list should be stored.",
+ required = true,
+ deferredType = List.class
+ )
+ }
+)
+public final class ListProcessesHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+
+ public ListProcessesHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListProcessesActionListener(
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForActorHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForActorHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForActorHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,49 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListTasksForActorActionListener;
+import java.util.List;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listTasksForActor",
+ description = "Read a list of task instances assigned to an actor ID.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the task instance list should be stored.",
+ required = true,
+ deferredType = List.class
+ ),
+ @TldAttribute (
+ name = "actorId",
+ description = "The actor ID whose task instances are to be read.",
+ required = true
+ )
+ }
+)
+public final class ListTasksForActorHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute actorIdTagAttribute;
+
+ public ListTasksForActorHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ actorIdTagAttribute = getRequiredAttribute("actorId");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListTasksForActorActionListener(
+ getValueExpression(actorIdTagAttribute, ctx, String.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListTasksForProcessActionListener;
+import java.util.List;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listTasksForProcess",
+ description = "Read a list of task instances from a process definition.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the task instance list should be stored.",
+ required = true,
+ deferredType = List.class
+ ),
+ @TldAttribute (
+ name = "process",
+ description = "The process whose task instances are to be read.",
+ required = true,
+ deferredType = ProcessDefinition.class
+ )
+ }
+)
+public final class ListTasksForProcessHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute processInstanceTagAttribute;
+
+ public ListTasksForProcessHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ processInstanceTagAttribute = getRequiredAttribute("process");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListTasksForProcessActionListener(
+ getValueExpression(processInstanceTagAttribute, ctx, ProcessDefinition.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessInstanceHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessInstanceHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksForProcessInstanceHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListTasksForProcessInstanceActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listTasksForProcessInstance",
+ description = "Read a list of task instances from a process instance.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the task instance list should be stored.",
+ required = true,
+ deferredType = List.class
+ ),
+ @TldAttribute (
+ name = "processInstance",
+ description = "The process instance whose task instances are to be read.",
+ required = true,
+ deferredType = ProcessInstance.class
+ )
+ }
+)
+public final class ListTasksForProcessInstanceHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute processInstanceTagAttribute;
+
+ public ListTasksForProcessInstanceHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ processInstanceTagAttribute = getRequiredAttribute("processInstance");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListTasksForProcessInstanceActionListener(
+ getValueExpression(processInstanceTagAttribute, ctx, ProcessInstance.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTasksHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,49 @@
+package org.jbpm.jsf.core.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListTasksActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listTasks",
+ description = "Read a list of task instances from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the task instance list should be stored.",
+ required = true,
+ deferredType = List.class
+ ),
+ @TldAttribute (
+ name = "includeEnded",
+ description = "A flag specifying whether ended tasks should be included.",
+ deferredType = boolean.class
+ )
+ }
+)
+public final class ListTasksHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute includeEndedTagAttribute;
+
+ public ListTasksHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ includeEndedTagAttribute = getAttribute("includeEnded");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListTasksActionListener(
+ getValueExpression(includeEndedTagAttribute, ctx, Boolean.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTokensHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTokensHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ListTokensHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ListTokensActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listTokens",
+ description = "Read a token list from a process instance.",
+ attributes = {
+ @TldAttribute (
+ name = "processInstance",
+ description = "The process instalce to read the token list from.",
+ required = true,
+ deferredType = ProcessInstance.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the token list should be stored.",
+ required = true,
+ deferredType = List.class
+ )
+ }
+)
+public final class ListTokensHandler extends AbstractHandler {
+ private final TagAttribute processInstanceTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public ListTokensHandler(final TagConfig config) {
+ super(config);
+ processInstanceTagAttribute = getRequiredAttribute("processInstance");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListTokensActionListener(
+ getValueExpression(processInstanceTagAttribute, ctx, ProcessInstance.class),
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadJobHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadJobHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadJobHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.job.Job;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.LoadJobActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadJob",
+ description = "Read a job instance from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the job to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the job should be stored.",
+ required = true,
+ deferredType = Job.class
+ )
+ }
+)
+public final class LoadJobHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public LoadJobHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadJobActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, Job.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.LoadProcessActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadProcess",
+ description = "Read a process definition from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the process definition to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the process definition should be stored.",
+ required = true,
+ deferredType = ProcessDefinition.class
+ )
+ }
+)
+public final class LoadProcessHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public LoadProcessHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadProcessActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, ProcessDefinition.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessInstanceHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessInstanceHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadProcessInstanceHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,61 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.LoadProcessInstanceActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadProcessInstance",
+ description = "Read a process instance from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the process instance to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the process instance should be stored.",
+ required = true,
+ deferredType = ProcessInstance.class
+ ),
+ @TldAttribute (
+ name = "forUpdate",
+ description = "A boolean that controls whether the process instance is to be read for update. " +
+ "This typically entails using a <code>SELECT ... FOR UPDATE</code> statement, when database persistence is " +
+ "involved. By default, this flag is <code>false</code> if the action is invoked during the " +
+ "<code>RENDER_RESPONSE</code> phase, and <code>true</code> otherwise.",
+ deferredType = boolean.class
+ )
+ }
+)
+public final class LoadProcessInstanceHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute forUpdateTagAttribute;
+
+ public LoadProcessInstanceHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ forUpdateTagAttribute = getAttribute("forUpdate");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadProcessInstanceActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, ProcessInstance.class),
+ getValueExpression(forUpdateTagAttribute, ctx, Boolean.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTaskHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTaskHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTaskHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,61 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.LoadTaskActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadTask",
+ description = "Read a task instance from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the task instance to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the task instance should be stored.",
+ required = true,
+ deferredType = TaskInstance.class
+ ),
+ @TldAttribute (
+ name = "forUpdate",
+ description = "A boolean that controls whether the task instance is to be read for update. " +
+ "This typically entails using a <code>SELECT ... FOR UPDATE</code> statement, when database persistence is " +
+ "involved. By default, this flag is <code>false</code> if the action is invoked during the " +
+ "<code>RENDER_RESPONSE</code> phase, and <code>true</code> otherwise.",
+ deferredType = boolean.class
+ )
+ }
+)
+public final class LoadTaskHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute forUpdateTagAttribute;
+
+ public LoadTaskHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ forUpdateTagAttribute = getAttribute("forUpdate");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadTaskActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, TaskInstance.class),
+ getValueExpression(forUpdateTagAttribute, ctx, Boolean.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTokenHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTokenHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/LoadTokenHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,61 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.LoadTokenActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadToken",
+ description = "Read a token from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the token to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the token should be stored.",
+ required = true,
+ deferredType = Token.class
+ ),
+ @TldAttribute (
+ name = "forUpdate",
+ description = "A boolean that controls whether the token is to be read for update. " +
+ "This typically entails using a <code>SELECT ... FOR UPDATE</code> statement, when database persistence is " +
+ "involved. By default, this flag is <code>false</code> if the action is invoked during the " +
+ "<code>RENDER_RESPONSE</code> phase, and <code>true</code> otherwise.",
+ deferredType = boolean.class
+ )
+ }
+)
+public final class LoadTokenHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+ private final TagAttribute forUpdateTagAttribute;
+
+ public LoadTokenHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ forUpdateTagAttribute = getAttribute("forUpdate");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadTokenActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, Token.class),
+ getValueExpression(forUpdateTagAttribute, ctx, Boolean.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/MoveTokenHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/MoveTokenHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/MoveTokenHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,52 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.MoveTokenActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "moveToken",
+ description = "Move a token to a new node. Note that this does not affect any " +
+ "tasks that may be active and associated with this token.",
+ attributes = {
+ @TldAttribute (
+ name = "token",
+ description = "An EL expression which resolves to the token that is to be moved.",
+ required = true,
+ deferredType = Token.class
+ ),
+ @TldAttribute(
+ name = "node",
+ description = "An EL expression which resolves to the node to move the token to, or " +
+ "the name of the node.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class MoveTokenHandler extends AbstractHandler {
+ private final TagAttribute tokenTagAttribute;
+ private final TagAttribute nodeTagAttribute;
+
+ public MoveTokenHandler(final TagConfig config) {
+ super(config);
+ tokenTagAttribute = getRequiredAttribute("token");
+ nodeTagAttribute = getRequiredAttribute("node");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new MoveTokenActionListener(
+ getValueExpression(tokenTagAttribute, ctx, Token.class),
+ getValueExpression(nodeTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/RemoveVariableHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/RemoveVariableHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/RemoveVariableHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,57 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.RemoveVariableActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag(
+ name = "removeVariable",
+ description = "Remove a process variable. Optionally store the old value into an EL expression.",
+ attributes = {
+ @TldAttribute (
+ name = "name",
+ description = "The name of the variable to remove.",
+ required = true
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An optional EL expression into which the old variable value will be stored.",
+ deferredType = Object.class
+ ),
+ @TldAttribute (
+ name = "entity",
+ description = "The token, task, or process instance from which the variable should be removed.",
+ deferredType = Object.class,
+ required = true
+ )
+ }
+)
+public final class RemoveVariableHandler extends AbstractHandler {
+ private final TagAttribute nameTagAttribute;
+ private final TagAttribute oldValueTargetTagAttribute;
+ private final TagAttribute entityTagAttribute;
+
+ public RemoveVariableHandler(final TagConfig config) {
+ super(config);
+ nameTagAttribute = getRequiredAttribute("name");
+ oldValueTargetTagAttribute = getAttribute("target");
+ entityTagAttribute = getRequiredAttribute("entity");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new RemoveVariableActionListener(
+ getValueExpression(nameTagAttribute, ctx, String.class),
+ getValueExpression(oldValueTargetTagAttribute, ctx, Object.class),
+ getValueExpression(entityTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ResumeHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ResumeHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/ResumeHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,40 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.ResumeActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "resume",
+ description = "Resume a running task, token, or process instance.",
+ attributes = {
+ @TldAttribute (
+ name = "value",
+ description = "The item to resume.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class ResumeHandler extends AbstractHandler {
+ private final TagAttribute valueTagAttribute;
+
+ public ResumeHandler(final TagConfig config) {
+ super(config);
+ valueTagAttribute = getRequiredAttribute("value");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ResumeActionListener(
+ getValueExpression(valueTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SignalHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SignalHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SignalHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,49 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.exe.Token;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.SignalActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "signal",
+ description = "Signal a token or process instance. Optionally specify the transition.",
+ attributes = {
+ @TldAttribute (
+ name = "value",
+ description = "The item to signal.",
+ required = true,
+ deferredType = Object.class
+ ),
+ @TldAttribute (
+ name = "transition",
+ description = "The transition, or transition name, to signal the item along.",
+ deferredType = Object.class
+ )
+ }
+)
+public final class SignalHandler extends AbstractHandler {
+ private final TagAttribute valueTagAttribute;
+ private final TagAttribute transitionTagAttribute;
+
+ public SignalHandler(final TagConfig config) {
+ super(config);
+ valueTagAttribute = getRequiredAttribute("value");
+ transitionTagAttribute = getAttribute("transition");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new SignalActionListener(
+ getValueExpression(valueTagAttribute, ctx, Object.class),
+ getValueExpression(transitionTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartProcessHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartProcessHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartProcessHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.graph.exe.ProcessInstance;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.StartProcessActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "startProcess",
+ description = "Start a process.",
+ attributes = {
+ @TldAttribute (
+ name = "process",
+ description = "The process definition to begin executing.",
+ required = true,
+ deferredType = ProcessDefinition.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the new process instance will be stored.",
+ deferredType = ProcessInstance.class
+ )
+ }
+)
+public final class StartProcessHandler extends AbstractHandler {
+ private final TagAttribute processTagAttribute;
+ private final TagAttribute instanceTagAttribute;
+
+ public StartProcessHandler(final TagConfig config) {
+ super(config);
+ processTagAttribute = getRequiredAttribute("process");
+ instanceTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new StartProcessActionListener(
+ getValueExpression(processTagAttribute, ctx, ProcessDefinition.class),
+ getValueExpression(instanceTagAttribute, ctx, ProcessInstance.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartTaskHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartTaskHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/StartTaskHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,58 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.StartTaskActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "startTask",
+ description = "Mark a task as started.",
+ attributes = {
+ @TldAttribute (
+ name = "task",
+ description = "The task to mark as started.",
+ required = true,
+ deferredType = TaskInstance.class
+ ),
+ @TldAttribute (
+ name = "actorId",
+ description = "The actor to assign the task to. If not given, the current actor is not changed.",
+ deferredType = String.class
+ ),
+ @TldAttribute (
+ name = "overwriteSwimlane",
+ description = "A flag specifying whether the swimlane will be overwritten.",
+ deferredType = boolean.class
+ )
+ }
+)
+public final class StartTaskHandler extends AbstractHandler {
+ private final TagAttribute instanceTagAttribute;
+ private final TagAttribute actorIdTagAttribute;
+ private final TagAttribute overwriteSwimlaneTagAttribute;
+
+ public StartTaskHandler(final TagConfig config) {
+ super(config);
+ instanceTagAttribute = getRequiredAttribute("task");
+ actorIdTagAttribute = getAttribute("actorId");
+ overwriteSwimlaneTagAttribute = getAttribute("overwriteSwimlane");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new StartTaskActionListener(
+ getValueExpression(instanceTagAttribute, ctx, TaskInstance.class),
+ getValueExpression(actorIdTagAttribute, ctx, String.class),
+ getValueExpression(overwriteSwimlaneTagAttribute, ctx, Boolean.class)
+ );
+ }
+}
+
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SuspendHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SuspendHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/SuspendHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,40 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.SuspendActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "suspend",
+ description = "Suspend a running task, token, or process instance.",
+ attributes = {
+ @TldAttribute (
+ name = "value",
+ description = "The item to suspend.",
+ required = true,
+ deferredType = Object.class
+ )
+ }
+)
+public final class SuspendHandler extends AbstractHandler {
+ private final TagAttribute valueTagAttribute;
+
+ public SuspendHandler(final TagConfig config) {
+ super(config);
+ valueTagAttribute = getRequiredAttribute("value");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new SuspendActionListener(
+ getValueExpression(valueTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/TaskFormHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/TaskFormHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/TaskFormHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,66 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jbpm.jsf.core.ui.UITaskForm;
+import org.jbpm.jsf.core.impl.JbpmActionListenerWrapper;
+import org.jbpm.jsf.core.action.TaskFormButtonActionListener;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+
+import com.sun.facelets.tag.jsf.ComponentHandler;
+import com.sun.facelets.tag.jsf.ComponentConfig;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.FaceletContext;
+
+import javax.faces.component.UIComponent;
+import javax.el.ValueExpression;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "taskForm",
+ description = "Represents the task form action source.",
+ attributes = {
+ @TldAttribute (
+ name = "transitionTarget",
+ description = "An EL expression into which the submitted transition name will be stored (if any)."
+ ),
+ @TldAttribute (
+ name = "buttonTarget",
+ description = "An EL expression into which the type of button clicked will be stored. It will be one " +
+ "of: <ul><li><code>cancel</code></li><li><code>save</code></li><li><code>transition</code></li></ul>"
+ )
+ }
+)
+public final class TaskFormHandler extends ComponentHandler {
+ private final TagAttribute transitionTargetTagAttribute;
+ private final TagAttribute buttonTargetTagAttribute;
+
+ public TaskFormHandler(final ComponentConfig config) {
+ super(config);
+ transitionTargetTagAttribute = getAttribute("transitionTarget");
+ buttonTargetTagAttribute = getAttribute("buttonTarget");
+ }
+
+ protected void onComponentCreated(FaceletContext ctx, UIComponent c, UIComponent parent) {
+ final ValueExpression transitionTargetValueExpression;
+ if (transitionTargetTagAttribute != null) {
+ transitionTargetValueExpression = transitionTargetTagAttribute.getValueExpression(ctx, String.class);
+ } else {
+ transitionTargetValueExpression = null;
+ }
+ final ValueExpression buttonTargetValueExpression;
+ if (buttonTargetTagAttribute != null) {
+ buttonTargetValueExpression = buttonTargetTagAttribute.getValueExpression(ctx, String.class);
+ } else {
+ buttonTargetValueExpression = null;
+ }
+ UITaskForm taskForm = ((UITaskForm)c);
+ taskForm.addActionListener(new JbpmActionListenerWrapper(
+ new TaskFormButtonActionListener(transitionTargetValueExpression, buttonTargetValueExpression),
+ null,
+ null,
+ null
+ ));
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateTaskStartHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateTaskStartHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateTaskStartHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.UpdateTaskStartActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.tag.TagAttribute;
+
+import java.util.Date;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "updateTaskStart",
+ description = "Update the start date of a started task.",
+ attributes = {
+ @TldAttribute (
+ name = "task",
+ description = "The task instance to update.",
+ required = true,
+ deferredType = TaskInstance.class
+ ),
+ @TldAttribute (
+ name = "startDate",
+ description = "The start date to assign. If not given, the current date will be used.",
+ deferredType = Date.class
+ )
+ }
+)
+public final class UpdateTaskStartHandler extends AbstractHandler {
+ private final TagAttribute taskTagAttribute;
+ private final TagAttribute startDateTagAttribute;
+
+ public UpdateTaskStartHandler(final TagConfig config) {
+ super(config);
+ taskTagAttribute = getRequiredAttribute("task");
+ startDateTagAttribute = getAttribute("startDate");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new UpdateTaskStartActionListener(
+ getValueExpression(taskTagAttribute, ctx, TaskInstance.class),
+ getValueExpression(startDateTagAttribute, ctx, Date.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateVariableHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateVariableHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/handler/UpdateVariableHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,66 @@
+package org.jbpm.jsf.core.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.action.UpdateVariableActionListener;
+import org.jbpm.taskmgmt.exe.TaskInstance;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "updateVariable",
+ description = "Update a process variable. Optionally store the old value into an EL expression.",
+ attributes = {
+ @TldAttribute (
+ name = "name",
+ description = "The name of the variable to update.",
+ required = true
+ ),
+ @TldAttribute (
+ name = "value",
+ description = "The new variable value.",
+ required = true,
+ deferredType = Object.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An optional EL expression into which the old variable value will be stored.",
+ deferredType = Object.class
+ ),
+ @TldAttribute (
+ name = "entity",
+ description = "The token, task, or process instance for which the variable should be updated.",
+ deferredType = Object.class,
+ required = true
+ )
+ }
+)
+public final class UpdateVariableHandler extends AbstractHandler {
+ private final TagAttribute nameTagAttribute;
+ private final TagAttribute valueTagAttribute;
+ private final TagAttribute oldValueTargetTagAttribute;
+ private final TagAttribute entityTagAttribute;
+
+ public UpdateVariableHandler(final TagConfig config) {
+ super(config);
+ nameTagAttribute = getRequiredAttribute("name");
+ valueTagAttribute = getRequiredAttribute("value");
+ oldValueTargetTagAttribute = getAttribute("target");
+ entityTagAttribute = getRequiredAttribute("entity");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new UpdateVariableActionListener(
+ getValueExpression(nameTagAttribute, ctx, String.class),
+ getValueExpression(valueTagAttribute, ctx, Object.class),
+ getValueExpression(oldValueTargetTagAttribute, ctx, Object.class),
+ getValueExpression(entityTagAttribute, ctx, Object.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmActionListenerWrapper.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmActionListenerWrapper.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmActionListenerWrapper.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,84 @@
+package org.jbpm.jsf.core.impl;
+
+import java.io.Serializable;
+import java.util.Map;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+
+/**
+ *
+ */
+public final class JbpmActionListenerWrapper implements ActionListener, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private final JbpmActionListener listener;
+
+ private final ValueExpression unlessExpression;
+ private final ValueExpression navigateExpression;
+ private final ValueExpression nameExpression;
+
+ public JbpmActionListenerWrapper(final JbpmActionListener listener, final ValueExpression unlessExpression, final ValueExpression navigateExpression, final ValueExpression nameExpression) {
+ this.listener = listener;
+ this.unlessExpression = unlessExpression;
+ this.navigateExpression = navigateExpression;
+ this.nameExpression = nameExpression;
+ }
+
+ public void processAction(ActionEvent actionEvent) throws AbortProcessingException {
+ FacesContext context = FacesContext.getCurrentInstance();
+ final ELContext elContext = context.getELContext();
+ final Map<String,Object> requestMap = context.getExternalContext().getRequestMap();
+ final JbpmJsfContextImpl jbpmJsfContext;
+ if (requestMap.containsKey(AbstractHandler.JBPM_JSF_CONTEXT_KEY)) {
+ jbpmJsfContext = (JbpmJsfContextImpl) requestMap.get(AbstractHandler.JBPM_JSF_CONTEXT_KEY);
+ } else {
+ jbpmJsfContext = new JbpmJsfContextImpl();
+ requestMap.put(AbstractHandler.JBPM_JSF_CONTEXT_KEY, jbpmJsfContext);
+ }
+ if (unlessExpression != null) {
+ final Object unlessValue = unlessExpression.getValue(elContext);
+ if (unlessValue != null) {
+ final Boolean unless;
+ if (unlessValue instanceof Boolean) {
+ unless = (Boolean) unlessValue;
+ } else {
+ unless = Boolean.valueOf(unlessValue.toString());
+ }
+ if (unless.booleanValue()) {
+ // do not run action
+ return;
+ }
+ }
+ }
+ boolean enableNavigation = true;
+ if (navigateExpression != null) {
+ final Object navigateValue = navigateExpression.getValue(elContext);
+ if (navigateValue != null) {
+ final Boolean navigate;
+ if (navigateValue instanceof Boolean) {
+ navigate = (Boolean) navigateValue;
+ } else {
+ navigate = Boolean.valueOf(navigateValue.toString());
+ }
+ enableNavigation = navigate.booleanValue();
+ }
+ }
+ String name = listener.getName();
+ if (nameExpression != null) {
+ final Object nameValue = nameExpression.getValue(elContext);
+ if (nameValue != null) {
+ name = nameValue.toString();
+ }
+ }
+ jbpmJsfContext.setEnableNavigation(enableNavigation);
+ jbpmJsfContext.setActionName(name);
+ listener.handleAction(jbpmJsfContext, actionEvent);
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmJsfContextImpl.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmJsfContextImpl.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/JbpmJsfContextImpl.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,174 @@
+package org.jbpm.jsf.core.impl;
+
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.List;
+import org.jbpm.JbpmConfiguration;
+import org.jbpm.JbpmContext;
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.jsf.core.config.ConfigurationLocator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ */
+public final class JbpmJsfContextImpl implements JbpmJsfContext {
+
+ private JbpmContext jbpmContext;
+ private IdentitySession identitySession;
+ private List<FacesMessage> messages = new ArrayList<FacesMessage>();
+ private String outcome;
+ private boolean error;
+ private String actionName;
+ private String outcomeActionName;
+ private boolean enableNavigation;
+
+ public boolean hasJbpmContext() {
+ return jbpmContext != null;
+ }
+
+ public JbpmContext getJbpmContext() {
+ final boolean debug = log.isLoggable(Level.FINE);
+ if (jbpmContext==null) {
+ jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
+ final Principal userPrincipal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
+ if (userPrincipal != null && ConfigurationLocator.getInstance().useJsfActorId()) {
+ jbpmContext.setActorId(userPrincipal.getName());
+ }
+ if (debug) log.fine(toString() + " using NEW " + jbpmContext.toString());
+ } else {
+ if (debug) log.fine(toString() + " using cached " + jbpmContext.toString());
+ }
+ return jbpmContext;
+ }
+
+ public IdentitySession getIdentitySession() {
+ if (identitySession==null) {
+ identitySession = new IdentitySession(getJbpmContext().getSession());
+ }
+ return identitySession;
+ }
+
+ public void addSuccessMessage(String message) {
+ if (message != null) {
+ messages.add(new FacesMessage(message, null));
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Added success message: " + message);
+ }
+ }
+ }
+
+ public void addSuccessMessage(String message, String detail) {
+ if (message != null) {
+ messages.add(new FacesMessage(message, detail));
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Added success message: " + message + " (detail: " + detail + ")");
+ }
+ }
+ }
+
+ public void addSuccessMessage(FacesMessage.Severity severity, String message, String detail) {
+ if (severity == null) {
+ throw new NullPointerException("addSuccessMessage cannot accept null as the value of the severity parameter");
+ }
+ if (message != null) {
+ messages.add(new FacesMessage(severity, message, detail));
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Added success message: severity " + severity + ", message: " + message + " (detail: " + detail + ")");
+ }
+ }
+ }
+
+ public void selectOutcome(String outcomeName) {
+ if (outcomeName != null && enableNavigation) {
+ outcome = outcomeName;
+ outcomeActionName = actionName;
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Selected outcome " + outcomeName);
+ }
+ }
+ }
+
+ public String getOutcome() {
+ return outcome;
+ }
+
+ public boolean isError() {
+ return error;
+ }
+
+ public void setError(String message) {
+ error = true;
+ if (message != null) {
+ FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message, null));
+ }
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Error message \"" + message + "\"");
+ }
+ }
+
+ public void setError(String message, String detail) {
+ error = true;
+ if (message != null) {
+ FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message, detail));
+ }
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Error message \"" + message + "\" (" + detail + ")");
+ }
+ }
+
+ public void setError(String message, Throwable cause) {
+ error = true;
+ StringBuilder detailBuilder = new StringBuilder();
+ detailBuilder.append("An exception of type \"");
+ detailBuilder.append(cause.getClass().getName());
+ detailBuilder.append("\" was thrown.");
+ final String exMsg = cause.getMessage();
+ if (exMsg != null) {
+ detailBuilder.append(" The message is: ");
+ detailBuilder.append(exMsg);
+ }
+ if (message != null) {
+ FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message, detailBuilder.toString()));
+ }
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Error message \"" + message + "\" (exception thrown: " + cause.getMessage() + ")", cause);
+ }
+ }
+
+ public String getActionName() {
+ return actionName;
+ }
+
+ public void setActionName(final String actionName) {
+ this.actionName = actionName;
+ }
+
+ public String getOutcomeActionName() {
+ return outcomeActionName;
+ }
+
+ public void setEnableNavigation(final boolean enableNavigation) {
+ this.enableNavigation = enableNavigation;
+ }
+
+ public void reset() {
+ messages = new ArrayList<FacesMessage>();
+ error = false;
+ outcome = null;
+ outcomeActionName = null;
+ actionName = null;
+ }
+
+ private static final Logger log = Logger.getLogger("org.jbpm.jsf.core.impl.JbpmJsfContextImpl");
+
+ public List<FacesMessage> getMessages() {
+ return messages;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/UpdatesHashMap.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/UpdatesHashMap.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/impl/UpdatesHashMap.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,161 @@
+package org.jbpm.jsf.core.impl;
+
+import java.util.AbstractMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Collections;
+import java.util.AbstractSet;
+import java.util.Iterator;
+import java.io.Serializable;
+
+/**
+ *
+ */
+public final class UpdatesHashMap extends AbstractMap<String,Object> implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private final Map<String,Object> backingMap;
+ private final Set<String> updates;
+ private final Set<String> deletes;
+
+ public UpdatesHashMap() {
+ backingMap = new HashMap<String, Object>();
+ updates = new HashSet<String>();
+ deletes = new HashSet<String>();
+ }
+
+ public UpdatesHashMap(final Map<String, Object> backingMap) {
+ if (backingMap == null) {
+ this.backingMap = new HashMap<String, Object>();
+ } else {
+ this.backingMap = new HashMap<String, Object>(backingMap);
+ }
+ updates = new HashSet<String>();
+ deletes = new HashSet<String>();
+ }
+
+ public boolean containsKey(final Object key) {
+ return backingMap.containsKey(key);
+ }
+
+ public Object get(final Object key) {
+ return backingMap.get(key);
+ }
+
+ public boolean isEmpty() {
+ return backingMap.isEmpty();
+ }
+
+ public int size() {
+ return backingMap.size();
+ }
+
+ public Object put(final String key, final Object value) {
+ if (key == null) {
+ throw new NullPointerException("key is null");
+ }
+ deletes.remove(key);
+ final Object old = backingMap.put(key, value);
+ if (old == value) {
+ // this branch is also taken if both are null
+ // no update
+ return old;
+ } else if ((old == null) != (value == null)) {
+ // this branch is taken if one of them is null
+ // update
+ updates.add(key);
+ return old;
+ } else if (value.equals(old)) {
+ // niether one can possibly be null here
+ // no update
+ return old;
+ } else {
+ // niether one can possibly be null here
+ // update
+ updates.add(key);
+ return old;
+ }
+ }
+
+ public Object remove(final Object key) {
+ if (key instanceof String && backingMap.containsKey(key)) {
+ deletes.add((String) key);
+ updates.remove(key);
+ return backingMap.remove(key);
+ } else {
+ return null;
+ }
+ }
+
+ public void clear() {
+ updates.clear();
+ deletes.clear();
+ deletes.addAll(backingMap.keySet());
+ backingMap.clear();
+ }
+
+ public Set<Entry<String, Object>> entrySet() {
+ return new EntrySet(this);
+ }
+
+ public Set<String> updatesSet() {
+ return Collections.unmodifiableSet(updates);
+ }
+
+ public Set<String> deletesSet() {
+ return Collections.unmodifiableSet(deletes);
+ }
+
+ public static final class EntrySet extends AbstractSet<Entry<String, Object>> implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private final UpdatesHashMap updatesHashMap;
+
+ public EntrySet(final UpdatesHashMap updatesHashMap) {
+ this.updatesHashMap = updatesHashMap;
+ }
+
+ public Iterator<Entry<String, Object>> iterator() {
+ return new EntrySetIterator(updatesHashMap);
+ }
+
+ public int size() {
+ return updatesHashMap.backingMap.size();
+ }
+
+ public boolean isEmpty() {
+ return updatesHashMap.backingMap.isEmpty();
+ }
+ }
+
+ public static final class EntrySetIterator implements Iterator<Map.Entry<String, Object>> {
+ private final Iterator<Map.Entry<String,Object>> iterator;
+ private final UpdatesHashMap updatesHashMap;
+ private Map.Entry<String,Object> current;
+
+ public EntrySetIterator(final UpdatesHashMap updatesHashMap) {
+ iterator = updatesHashMap.backingMap.entrySet().iterator();
+ this.updatesHashMap = updatesHashMap;
+ }
+
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ public Map.Entry<String, Object> next() {
+ current = iterator.next();
+ return current;
+ }
+
+ public void remove() {
+ iterator.remove();
+ final String key = current.getKey();
+ current = null;
+ updatesHashMap.deletes.add(key);
+ updatesHashMap.updates.remove(key);
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/package-info.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/package-info.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/package-info.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,9 @@
+/**
+ * JSF Tag Library for jBPM applications.
+ */
+ at org.jboss.gravel.common.annotation.TldTagLib(
+ fileName = "core.tld",
+ shortName = "jbpm",
+ uri = "http://jbpm.org/jbpm4jsf/core"
+)
+package org.jbpm.jsf.core;
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/JbpmPhaseListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/JbpmPhaseListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/JbpmPhaseListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,121 @@
+package org.jbpm.jsf.core.phase;
+
+import java.util.Map;
+import org.jbpm.JbpmContext;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.core.impl.JbpmJsfContextImpl;
+import org.jbpm.persistence.db.DbPersistenceService;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.application.NavigationHandler;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ */
+public final class JbpmPhaseListener implements PhaseListener {
+ private static final long serialVersionUID = 1L;
+
+ public void beforePhase(PhaseEvent phaseEvent) {
+ log.fine("Before phase " + phaseEvent.getPhaseId().toString());
+ }
+
+ public void afterPhase(PhaseEvent phaseEvent) {
+ log.fine("After phase " + phaseEvent.getPhaseId().toString());
+ final FacesContext facesContext = phaseEvent.getFacesContext();
+ final JbpmJsfContextImpl jbpmJsfContext = getJbpmJsfContext(facesContext);
+ if (jbpmJsfContext != null) {
+ if (facesContext.getResponseComplete()) {
+ // No matter what phase, context should be closed.
+ closeContext(jbpmJsfContext);
+ removeJbpmJsfContext(facesContext);
+ } else if (phaseEvent.getPhaseId() == PhaseId.INVOKE_APPLICATION) {
+ // Application was invoked; a new transaction should be begun.
+ handleOutcome(facesContext, jbpmJsfContext);
+ closeContext(jbpmJsfContext);
+ removeJbpmJsfContext(facesContext);
+ } else if (phaseEvent.getPhaseId() == PhaseId.RENDER_RESPONSE) {
+ // Response was rendered and possibly more actions invoked.
+ closeContext(jbpmJsfContext);
+ removeJbpmJsfContext(facesContext);
+ }
+ }
+ }
+
+ private void commitTxnMessages(final FacesContext facesContext, final JbpmJsfContextImpl jbpmJsfContext) {
+ if (! jbpmJsfContext.isError()) {
+ for (FacesMessage msg : jbpmJsfContext.getMessages()) {
+ facesContext.addMessage(null, msg);
+ }
+ }
+ }
+
+ private void handleOutcome(final FacesContext facesContext, final JbpmJsfContextImpl jbpmJsfContext) {
+ final NavigationHandler navigationHandler = facesContext.getApplication().getNavigationHandler();
+ if (jbpmJsfContext.isError()) {
+ navigationHandler.handleNavigation(facesContext, jbpmJsfContext.getOutcomeActionName(), "error");
+ } else {
+ final String outcome = jbpmJsfContext.getOutcome();
+ if (outcome != null) {
+ navigationHandler.handleNavigation(facesContext, jbpmJsfContext.getOutcomeActionName(), outcome);
+ }
+ }
+ }
+
+ public PhaseId getPhaseId() {
+ return PhaseId.ANY_PHASE;
+ }
+
+ private JbpmJsfContextImpl getJbpmJsfContext(FacesContext facesContext) {
+ final Map<String,Object> requestMap = facesContext.getExternalContext().getRequestMap();
+ return (JbpmJsfContextImpl) requestMap.get(AbstractHandler.JBPM_JSF_CONTEXT_KEY);
+ }
+
+ private void removeJbpmJsfContext(FacesContext facesContext) {
+ final Map<String,Object> requestMap = facesContext.getExternalContext().getRequestMap();
+ requestMap.remove(AbstractHandler.JBPM_JSF_CONTEXT_KEY);
+ }
+
+ private void closeContext(final JbpmJsfContextImpl jbpmJsfContext) {
+ if (jbpmJsfContext.hasJbpmContext()) {
+ log.fine("Closing jBPM context");
+ if (jbpmJsfContext.isError()) {
+ log.fine("Context has an error status; setting transaction to roll back");
+ jbpmJsfContext.getJbpmContext().setRollbackOnly();
+ }
+ final FacesContext context = FacesContext.getCurrentInstance();
+ try {
+ jbpmJsfContext.getJbpmContext().close();
+ } catch (RuntimeException ex) {
+ try {
+ jbpmJsfContext.getJbpmContext().setRollbackOnly();
+ } catch (Exception ex2) {
+ log.log(Level.WARNING, "Failed to set rollback on jBPM context after close failed", ex2);
+ }
+ context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Closing the database context " +
+ "failed", "An exception of type " + ex.getClass().getName() + " was thrown, with the message: " +
+ ex.getMessage()));
+ return;
+ }
+ commitTxnMessages(context, jbpmJsfContext);
+ }
+ }
+
+ private void startNewTxn(final JbpmJsfContextImpl jbpmJsfContext) {
+ if (jbpmJsfContext.hasJbpmContext()) {
+ final JbpmContext jbpmContext = jbpmJsfContext.getJbpmContext();
+ DbPersistenceService dbPersistenceService = (DbPersistenceService) jbpmContext.getServices().getPersistenceService();
+ log.fine("Committing transaction");
+ dbPersistenceService.endTransaction();
+ dbPersistenceService.beginTransaction();
+ }
+ }
+
+ private static final Logger log = Logger.getLogger("org.jbpm.jsf.core.phase.JbpmPhaseListener");
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/ProcessFilePhaseListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/ProcessFilePhaseListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/phase/ProcessFilePhaseListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,149 @@
+package org.jbpm.jsf.core.phase;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.jbpm.JbpmConfiguration;
+import org.jbpm.JbpmContext;
+import org.jbpm.graph.def.ProcessDefinition;
+import org.jbpm.jsf.core.config.Configuration;
+import org.jbpm.jsf.core.config.ConfigurationLocator;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ */
+public final class ProcessFilePhaseListener implements PhaseListener {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final Logger log = Logger.getLogger("org.jbpm.jsf.core.phase.ProcessFilePhaseListener");
+
+ private Configuration configuration = null;
+
+ public ProcessFilePhaseListener() {
+ }
+
+ public void beforePhase(PhaseEvent event) {
+ log.fine("Entering phase listener");
+ final FacesContext facesContext = event.getFacesContext();
+ final ExternalContext externalContext = facesContext.getExternalContext();
+ synchronized(this) {
+ if (configuration == null) {
+ try {
+ configuration = ConfigurationLocator.getInstance();
+ } catch (Exception ex) {
+ final HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
+ try {
+ response.sendError(500, "Error loading jbpm configuration: " + ex.getMessage());
+ } catch (IOException e) {
+ log.log(Level.SEVERE, "Error sending 500 response for bad jbpm configuration load", e);
+ } finally {
+ facesContext.responseComplete();
+ }
+ return;
+ }
+ }
+ }
+ final String servletPath = externalContext.getRequestServletPath();
+ final String pathInfo = externalContext.getRequestPathInfo();
+ final String path = servletPath == null ? null : pathInfo == null ? servletPath : servletPath + pathInfo;
+ if (path == null) {
+ log.fine("Path is null, skipping");
+ return;
+ }
+ final List<Configuration.FileMatcher> fileMatchers = configuration.getMatchers();
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Checking path against " + fileMatchers.size() + " matchers");
+ }
+ for (Configuration.FileMatcher fileMatcher : fileMatchers) {
+ final Pattern pattern = fileMatcher.getPattern();
+ final Matcher matcher = pattern.matcher(path);
+ if (!matcher.matches()) {
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Request pattern '" + pattern + "' did NOT match path info '" + path + "'");
+ }
+ } else {
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Request pattern '" + pattern + "' MATCHED path info '" + path + "'");
+ }
+ if (matcher.groupCount() < 1) {
+ log.warning("Configuration pattern '" + pattern + "' does not contain a capturing group for the process ID");
+ continue;
+ }
+ final String idPart = matcher.group(1);
+ final long id = Long.parseLong(idPart);
+ final String contentType = fileMatcher.getContentType();
+ final String file = fileMatcher.getFile();
+ final HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
+ final JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
+ try {
+ final ProcessDefinition processDefinition = jbpmContext.getGraphSession().getProcessDefinition(id);
+ if (processDefinition == null) {
+ try {
+ response.sendError(404, "Process definition " + id + " does not exist");
+ facesContext.responseComplete();
+ break;
+ } catch (IOException e) {
+ log.log(Level.SEVERE, "Failed to send 404 Not Found to client", e);
+ }
+ }
+ if (!processDefinition.getFileDefinition().hasFile(file)) {
+ try {
+ response.sendError(404, "Process definition " + id + " does not contain file '" + file + "'");
+ facesContext.responseComplete();
+ break;
+ } catch (IOException e) {
+ log.log(Level.SEVERE, "Failed to send 404 Not Found to client", e);
+ }
+ }
+ final byte[] bytes;
+ bytes = processDefinition.getFileDefinition().getBytes(file);
+ response.setContentLength(bytes.length);
+ response.setContentType(contentType);
+ try {
+ final OutputStream outputStream = response.getOutputStream();
+ try {
+ outputStream.write(bytes);
+ outputStream.flush();
+ } finally {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ log.log(Level.WARNING, "Failed to close output stream", e);
+ }
+ }
+ } catch (IOException e) {
+ log.log(Level.SEVERE, "Failed to send process file", e);
+ }
+ facesContext.responseComplete();
+ if (log.isLoggable(Level.FINE)) {
+ log.fine("Sent process file '" + path + "'");
+ }
+ break;
+ } finally {
+ jbpmContext.close();
+ }
+ }
+ }
+ }
+
+ public void afterPhase(PhaseEvent event) {
+ // nothing
+ }
+
+ public PhaseId getPhaseId() {
+ return PhaseId.RENDER_RESPONSE;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/ui/UITaskForm.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/ui/UITaskForm.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/core/ui/UITaskForm.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,22 @@
+package org.jbpm.jsf.core.ui;
+
+import org.jboss.gravel.common.ui.HasJsfCoreAttributes;
+
+import javax.faces.component.UICommand;
+
+/**
+ *
+ */
+public final class UITaskForm extends UICommand implements HasJsfCoreAttributes {
+ public static final String COMPONENT_FAMILY = "jbpm4jsf.core";
+ public static final String COMPONENT_TYPE = "jbpm4jsf.core.TaskForm";
+ public static final String RENDERER_TYPE = null;
+
+ public UITaskForm() {
+ setRendererType(RENDERER_TYPE);
+ }
+
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/IdentityLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/IdentityLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/IdentityLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,40 @@
+package org.jbpm.jsf.identity;
+
+import org.jbpm.jsf.identity.handler.AddMembershipHandler;
+import org.jbpm.jsf.identity.handler.CreateGroupHandler;
+import org.jbpm.jsf.identity.handler.CreateUserHandler;
+import org.jbpm.jsf.identity.handler.DeleteGroupHandler;
+import org.jbpm.jsf.identity.handler.DeleteMembershipHandler;
+import org.jbpm.jsf.identity.handler.DeleteUserHandler;
+import org.jbpm.jsf.identity.handler.ListGroupsHandler;
+import org.jbpm.jsf.identity.handler.ListUsersHandler;
+import org.jbpm.jsf.identity.handler.LoadGroupByNameHandler;
+import org.jbpm.jsf.identity.handler.LoadGroupHandler;
+import org.jbpm.jsf.identity.handler.LoadUserHandler;
+import org.jbpm.jsf.identity.handler.VerifyUserHandler;
+
+import com.sun.facelets.tag.AbstractTagLibrary;
+
+/**
+ *
+ */
+public final class IdentityLibrary extends AbstractTagLibrary {
+ public IdentityLibrary() {
+ super("http://jbpm.org/jbpm4jsf/identity");
+
+ // Actions
+
+ addTagHandler("loadUser", LoadUserHandler.class);
+ addTagHandler("loadGroup", LoadGroupHandler.class);
+ addTagHandler("loadGroupByName", LoadGroupByNameHandler.class);
+ addTagHandler("createUser", CreateUserHandler.class);
+ addTagHandler("createGroup", CreateGroupHandler.class);
+ addTagHandler("addMembership", AddMembershipHandler.class);
+ addTagHandler("verifyUser", VerifyUserHandler.class);
+ addTagHandler("listUsers", ListUsersHandler.class);
+ addTagHandler("listGroups", ListGroupsHandler.class);
+ addTagHandler("deleteUser", DeleteUserHandler.class);
+ addTagHandler("deleteMembership", DeleteMembershipHandler.class);
+ addTagHandler("deleteGroup", DeleteGroupHandler.class);
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/AddMembershipActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/AddMembershipActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/AddMembershipActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,81 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.Group;
+import org.jbpm.identity.Membership;
+import org.jbpm.identity.User;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class AddMembershipActionListener implements JbpmActionListener {
+
+ private final ValueExpression userExpression;
+ private final ValueExpression groupExpression;
+ private final ValueExpression roleExpression;
+ private final ValueExpression targetExpression;
+
+ public AddMembershipActionListener(final ValueExpression userExpression, final ValueExpression groupExpression, final ValueExpression roleExpression, final ValueExpression targetExpression) {
+ this.userExpression = userExpression;
+ this.groupExpression = groupExpression;
+ this.roleExpression = roleExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "addMembership";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final User user;
+ if (userExpression == null) {
+ context.setError("Error adding membership", "User expression is required");
+ return;
+ }
+ final Object userValue = userExpression.getValue(elContext);
+ if (userValue == null) {
+ context.setError("Error adding membership", "User value is null");
+ return;
+ }
+ user = (User) userValue;
+ final Group group;
+ if (groupExpression == null) {
+ context.setError("Error adding membership", "Group expression is required");
+ return;
+ }
+ final Object groupValue = groupExpression.getValue(elContext);
+ if (groupValue == null) {
+ context.setError("Error adding membership", "Group value is null");
+ return;
+ }
+ group = (Group) groupValue;
+ final Membership membership = Membership.create(user, group);
+ if (roleExpression != null) {
+ final Object roleValue = roleExpression.getValue(elContext);
+ if (roleValue != null) {
+ final String roleValueString = roleValue.toString();
+ if (roleValueString.length() > 0) {
+ membership.setRole(roleValueString);
+ }
+ }
+ }
+ if (targetExpression != null) {
+ targetExpression.setValue(elContext, membership);
+ }
+ context.selectOutcome("success");
+ context.addSuccessMessage("Successfully added membership");
+ } catch (Exception ex) {
+ context.setError("Error adding membership", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateGroupActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateGroupActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateGroupActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,77 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.Group;
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class CreateGroupActionListener implements JbpmActionListener {
+
+ private final ValueExpression groupNameExpression;
+ private final ValueExpression parentGroupExpression;
+ private final ValueExpression typeExpression;
+ private final ValueExpression targetExpression;
+
+ public CreateGroupActionListener(final ValueExpression groupNameExpression, final ValueExpression parentGroupExpression, final ValueExpression typeExpression, final ValueExpression targetExpression) {
+ this.groupNameExpression = groupNameExpression;
+ this.parentGroupExpression = parentGroupExpression;
+ this.typeExpression = typeExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "createGroup";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ if (groupNameExpression == null) {
+ context.setError("Error creating group", "The group name expression is missing");
+ return;
+ }
+ final Object groupNameValue = groupNameExpression.getValue(elContext);
+ if (groupNameValue == null) {
+ context.setError("Error creating group", "The group name value is null");
+ return;
+ }
+ final Group group = new Group(groupNameValue.toString());
+ if (parentGroupExpression != null) {
+ final Object parentGroupValue = parentGroupExpression.getValue(elContext);
+ if (parentGroupValue instanceof Group) {
+ group.setParent((Group)parentGroupValue);
+ } else if (parentGroupValue != null) {
+ context.setError("Error creating group", "The parent group is not a Group instance");
+ return;
+ }
+ }
+ if (typeExpression != null) {
+ final Object typeValue = typeExpression.getValue(elContext);
+ if (typeValue == null) {
+ context.setError("Error creating group", "The type value is null");
+ return;
+ }
+ group.setType(typeValue.toString());
+ }
+ identitySession.saveGroup(group);
+ if (targetExpression != null) {
+ targetExpression.setValue(elContext, group);
+ }
+ context.selectOutcome("success");
+ context.addSuccessMessage("Group created successfully");
+ } catch (Exception ex) {
+ context.setError("Error loading group", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateUserActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateUserActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/CreateUserActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,85 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.User;
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class CreateUserActionListener implements JbpmActionListener {
+
+ private final ValueExpression userNameExpression;
+ private final ValueExpression passwordExpression;
+ private final ValueExpression passwordConfirmExpression;
+ private final ValueExpression emailExpression;
+ private final ValueExpression targetExpression;
+
+ public CreateUserActionListener(final ValueExpression userNameExpression, final ValueExpression passwordExpression, final ValueExpression passwordConfirmExpression, final ValueExpression emailExpression, final ValueExpression targetExpression) {
+ this.userNameExpression = userNameExpression;
+ this.passwordExpression = passwordExpression;
+ this.passwordConfirmExpression = passwordConfirmExpression;
+ this.emailExpression = emailExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "createUser";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ if (userNameExpression == null) {
+ context.setError("Error creating user", "The user name expression is missing");
+ return;
+ }
+ final Object userNameValue = userNameExpression.getValue(elContext);
+ if (userNameValue == null) {
+ context.setError("Error creating user", "The user name value is null");
+ return;
+ }
+ final User user = new User(userNameValue.toString());
+ if (passwordExpression != null) {
+ final Object passwordValue = passwordExpression.getValue(elContext);
+ if (passwordValue == null) {
+ context.setError("Error creating user", "The password value is null");
+ return;
+ }
+ if (passwordConfirmExpression != null) {
+ final Object passwordConfirmValue = passwordConfirmExpression.getValue(elContext);
+ if (! passwordValue.equals(passwordConfirmValue)) {
+ context.setError("Error creating user", "The password confirmation value does not match the password value");
+ return;
+ }
+ }
+ user.setPassword(passwordValue.toString());
+ }
+ if (emailExpression != null) {
+ final Object emailValue = emailExpression.getValue(elContext);
+ if (emailValue == null) {
+ context.setError("Error creating user", "The email value is null");
+ return;
+ }
+ user.setEmail(emailValue.toString());
+ }
+ identitySession.saveUser(user);
+ if (targetExpression != null) {
+ targetExpression.setValue(elContext, user);
+ }
+ context.selectOutcome("success");
+ context.addSuccessMessage("User created successfully");
+ } catch (Exception ex) {
+ context.setError("Error loading user", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteGroupActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteGroupActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteGroupActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,37 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.Group;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class DeleteGroupActionListener implements JbpmActionListener {
+ private final ValueExpression groupExpression;
+
+ public DeleteGroupActionListener(final ValueExpression groupExpression) {
+ this.groupExpression = groupExpression;
+ }
+
+ public String getName() {
+ return "deleteGroup";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Group group = (Group) groupExpression.getValue(elContext);
+ context.getJbpmContext().getSession().delete(group);
+ context.addSuccessMessage("Successfully deleted group");
+ } catch (Exception ex) {
+ context.setError("Failed to delete group", ex);
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteMembershipActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteMembershipActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteMembershipActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,55 @@
+package org.jbpm.jsf.identity.action;
+
+import java.util.Iterator;
+import java.util.Set;
+import org.jbpm.identity.Membership;
+import org.jbpm.identity.User;
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class DeleteMembershipActionListener implements JbpmActionListener {
+ private final ValueExpression userExpression;
+ private final ValueExpression membershipIdExpression;
+
+
+ public DeleteMembershipActionListener(final ValueExpression userExpression, final ValueExpression membershipIdExpression) {
+ this.userExpression = userExpression;
+ this.membershipIdExpression = membershipIdExpression;
+ }
+
+ public String getName() {
+ return "deleteMembership";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final User user = (User) userExpression.getValue(elContext);
+ final long membershipId = ((Long)membershipIdExpression.getValue(elContext)).longValue();
+ final Set<Membership> membershipSet = (Set<Membership>) user.getMemberships();
+ final Iterator<Membership> it = membershipSet.iterator();
+ while (it.hasNext()) {
+ Membership membership = it.next();
+ if (membership.getId() == membershipId) {
+ it.remove();
+ context.getJbpmContext().getSession().delete(membership);
+ break;
+ }
+ }
+ context.addSuccessMessage("Successfully deleted membership");
+ } catch (Exception ex) {
+ context.setError("Failed to delete membership", ex);
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteUserActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteUserActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/DeleteUserActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,40 @@
+package org.jbpm.jsf.identity.action;
+
+import org.hibernate.Session;
+import org.jbpm.identity.User;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class DeleteUserActionListener implements JbpmActionListener {
+ private final ValueExpression userExpression;
+
+ public DeleteUserActionListener(final ValueExpression userExpression) {
+ this.userExpression = userExpression;
+ }
+
+ public String getName() {
+ return "deleteUser";
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final User user = (User) userExpression.getValue(elContext);
+ final Session session = context.getJbpmContext().getSession();
+ session.delete(user);
+ context.addSuccessMessage("Successfully deleted user");
+ } catch (Exception ex) {
+ context.setError("Failed to delete user", ex);
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListGroupsActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListGroupsActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListGroupsActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,37 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class ListGroupsActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+
+ public ListGroupsActionListener(final ValueExpression targetExpression) {
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listGroups";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ // TODO - This should be an API method
+ targetExpression.setValue(elContext, context.getJbpmContext().getSession().createQuery("from org.jbpm.identity.Group").list());
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading group list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListUsersActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListUsersActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/ListUsersActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,38 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class ListUsersActionListener implements JbpmActionListener {
+ private final ValueExpression targetExpression;
+
+ public ListUsersActionListener(final ValueExpression targetExpression) {
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "listUsers";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ targetExpression.setValue(elContext, identitySession.getUsers());
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading user list", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,58 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.Group;
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class LoadGroupActionListener implements JbpmActionListener {
+
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+
+ public LoadGroupActionListener(final ValueExpression idExpression, final ValueExpression targetExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "loadGroup";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ if (idValue == null) {
+ context.setError("Error loading group", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final Group group = identitySession.loadGroup(id);
+ if (group == null) {
+ context.setError("Error loading group", "No group was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, group);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading group", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupByNameActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupByNameActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadGroupByNameActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,53 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.identity.Group;
+import org.jbpm.identity.hibernate.IdentitySession;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+
+/**
+ *
+ */
+public final class LoadGroupByNameActionListener implements JbpmActionListener {
+
+ private final ValueExpression groupNameExpression;
+ private final ValueExpression targetExpression;
+
+ public LoadGroupByNameActionListener(final ValueExpression groupNameExpression, final ValueExpression targetExpression) {
+ this.groupNameExpression = groupNameExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "loadGroupByName";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object nameValue = groupNameExpression.getValue(elContext);
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ if (nameValue == null) {
+ context.setError("Error loading group", "The group name value is null");
+ return;
+ }
+ final String groupName = nameValue.toString();
+ final Group group = identitySession.getGroupByName(groupName);
+ if (group == null) {
+ context.setError("Error loading group", "No group was found named '" + groupName + "'");
+ return;
+ }
+ targetExpression.setValue(elContext, group);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading group", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadUserActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadUserActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/LoadUserActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,58 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.identity.User;
+import org.jbpm.identity.hibernate.IdentitySession;
+
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+
+/**
+ *
+ */
+public final class LoadUserActionListener implements JbpmActionListener {
+
+ private final ValueExpression idExpression;
+ private final ValueExpression targetExpression;
+
+ public LoadUserActionListener(final ValueExpression idExpression, final ValueExpression targetExpression) {
+ this.idExpression = idExpression;
+ this.targetExpression = targetExpression;
+ }
+
+ public String getName() {
+ return "loadUser";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final Object idValue = idExpression.getValue(elContext);
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ if (idValue == null) {
+ context.setError("Error loading user", "The ID value is null");
+ return;
+ }
+ final long id;
+ if (idValue instanceof Long) {
+ id = ((Long)idValue).longValue();
+ } else {
+ id = Long.valueOf(idValue.toString()).longValue();
+ }
+ final User user = identitySession.loadUser(id);
+ if (user == null) {
+ context.setError("Error loading user", "No user was found with an ID of " + id);
+ return;
+ }
+ targetExpression.setValue(elContext, user);
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error loading user", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/VerifyUserActionListener.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/VerifyUserActionListener.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/action/VerifyUserActionListener.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,59 @@
+package org.jbpm.jsf.identity.action;
+
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.JbpmJsfContext;
+import org.jbpm.identity.hibernate.IdentitySession;
+
+import javax.el.ValueExpression;
+import javax.el.ELContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ */
+public final class VerifyUserActionListener implements JbpmActionListener {
+ private final ValueExpression userNameExpression;
+ private final ValueExpression passwordExpression;
+ private final ValueExpression userIdTargetExpression;
+
+ public VerifyUserActionListener(final ValueExpression userNameExpression, final ValueExpression passwordExpression, final ValueExpression userIdTargetExpression) {
+ this.userNameExpression = userNameExpression;
+ this.passwordExpression = passwordExpression;
+ this.userIdTargetExpression = userIdTargetExpression;
+ }
+
+ public String getName() {
+ return "verifyUser";
+ }
+
+ public void handleAction(JbpmJsfContext context, ActionEvent event) {
+ try {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final ELContext elContext = facesContext.getELContext();
+ final IdentitySession identitySession = new IdentitySession(context.getJbpmContext().getSession());
+ final Object userNameValue = userNameExpression.getValue(elContext);
+ if (userNameValue == null) {
+ context.setError("Error verifying user", "User name is null");
+ return;
+ }
+ final Object passwordValue = passwordExpression.getValue(elContext);
+ if (passwordValue == null) {
+ context.setError("Error verifying user", "Password is null");
+ return;
+ }
+ final Object id = identitySession.verify(userNameValue.toString(), passwordValue.toString());
+ if (id == null) {
+ context.setError("Invalid user name or password");
+ return;
+ }
+ if (userIdTargetExpression != null) {
+ userIdTargetExpression.setValue(elContext, id);
+ }
+ context.selectOutcome("success");
+ } catch (Exception ex) {
+ context.setError("Error verifying user", ex);
+ return;
+ }
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/AddMembershipHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/AddMembershipHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/AddMembershipHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,69 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jbpm.identity.User;
+import org.jbpm.identity.Group;
+import org.jbpm.identity.Membership;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.identity.action.AddMembershipActionListener;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "addMembership",
+ description = "Add a group membership to a user.",
+ attributes = {
+ @TldAttribute (
+ name = "user",
+ required = true,
+ description = "The user to whom the membership is granted.",
+ deferredType = User.class
+ ),
+ @TldAttribute (
+ name = "group",
+ required = true,
+ description = "The group that the user should become a member of.",
+ deferredType = Group.class
+ ),
+ @TldAttribute (
+ name = "role",
+ description = "The name of the role."
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the created membership should be stored.",
+ deferredType = Membership.class
+ )
+ }
+)
+public final class AddMembershipHandler extends AbstractHandler {
+
+ private final TagAttribute userTagAttribute;
+ private final TagAttribute groupTagAttribute;
+ private final TagAttribute roleTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public AddMembershipHandler(final TagConfig config) {
+ super(config);
+ userTagAttribute = getRequiredAttribute("user");
+ groupTagAttribute = getRequiredAttribute("group");
+ roleTagAttribute = getAttribute("role");
+ targetTagAttribute = getAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new AddMembershipActionListener(
+ getValueExpression(userTagAttribute, ctx, User.class),
+ getValueExpression(groupTagAttribute, ctx, Group.class),
+ getValueExpression(roleTagAttribute, ctx, String.class),
+ getValueExpression(targetTagAttribute, ctx, Membership.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateGroupHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateGroupHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateGroupHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,64 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.identity.Group;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.CreateGroupActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "createGroup",
+ description = "Create a new group and save it in the database.",
+ attributes = {
+ @TldAttribute (
+ name = "groupName",
+ required = true,
+ description = "The name of the group to create."
+ ),
+ @TldAttribute (
+ name = "parentGroup",
+ description = "The parent group, if any.",
+ deferredType = Group.class
+ ),
+ @TldAttribute (
+ name = "type",
+ description = "The type of the new group."
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the created group should be stored.",
+ deferredType = Group.class
+ )
+ }
+)
+public final class CreateGroupHandler extends AbstractHandler {
+ private final TagAttribute groupNameTagAttribute;
+ private final TagAttribute parentGroupTagAttribute;
+ private final TagAttribute typeTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public CreateGroupHandler(final TagConfig config) {
+ super(config);
+ groupNameTagAttribute = getRequiredAttribute("groupName");
+ parentGroupTagAttribute = getAttribute("parentGroup");
+ typeTagAttribute = getRequiredAttribute("type");
+ targetTagAttribute = getAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new CreateGroupActionListener(
+ getValueExpression(groupNameTagAttribute, ctx, String.class),
+ getValueExpression(parentGroupTagAttribute, ctx, Group.class),
+ getValueExpression(typeTagAttribute, ctx, String.class),
+ getValueExpression(targetTagAttribute, ctx, Group.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateUserHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateUserHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/CreateUserHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,71 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.identity.User;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.CreateUserActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "createUser",
+ description = "Create a new user and save it in the database.",
+ attributes = {
+ @TldAttribute (
+ name = "userName",
+ required = true,
+ description = "The user name of the user to create."
+ ),
+ @TldAttribute (
+ name = "password",
+ description = "The password of the new user."
+ ),
+ @TldAttribute (
+ name = "passwordConfirm",
+ description = "The password of the new user again. If this value does not match the value of the " +
+ "<code>password</code> attribute, user creation will fail."
+ ),
+ @TldAttribute (
+ name = "email",
+ description = "The email of the new user."
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the created user should be stored.",
+ deferredType = User.class
+ )
+ }
+)
+public final class CreateUserHandler extends AbstractHandler {
+ private final TagAttribute userNameTagAttribute;
+ private final TagAttribute passwordTagAttribute;
+ private final TagAttribute passwordConfirmTagAttribute;
+ private final TagAttribute emailTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public CreateUserHandler(final TagConfig config) {
+ super(config);
+ userNameTagAttribute = getRequiredAttribute("userName");
+ passwordTagAttribute = getAttribute("password");
+ passwordConfirmTagAttribute = getAttribute("passwordConfirm");
+ emailTagAttribute = getAttribute("email");
+ targetTagAttribute = getAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new CreateUserActionListener(
+ getValueExpression(userNameTagAttribute, ctx, String.class),
+ getValueExpression(passwordTagAttribute, ctx, String.class),
+ getValueExpression(passwordConfirmTagAttribute, ctx, String.class),
+ getValueExpression(emailTagAttribute, ctx, String.class),
+ getValueExpression(targetTagAttribute, ctx, User.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteGroupHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteGroupHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteGroupHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,42 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.identity.Group;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.DeleteGroupActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "deleteGroup",
+ description = "Delete a group from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "group",
+ description = "The group to delete.",
+ required = true,
+ deferredType = Group.class
+ )
+ }
+)
+public final class DeleteGroupHandler extends AbstractHandler {
+ private final TagAttribute groupAttribute;
+
+ public DeleteGroupHandler(final TagConfig config) {
+ super(config);
+ groupAttribute = getRequiredAttribute("group");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new DeleteGroupActionListener(
+ getValueExpression(groupAttribute, ctx, Group.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteMembershipHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteMembershipHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteMembershipHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.identity.User;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.DeleteMembershipActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "deleteMembership",
+ description = "Delete a membership from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "user",
+ description = "The user containing the membership to delete.",
+ required = true,
+ deferredType = User.class
+ ),
+ @TldAttribute (
+ name = "membershipId",
+ description = "The ID of the membership to delete.",
+ required = true,
+ deferredType = long.class
+ )
+ }
+)
+public final class DeleteMembershipHandler extends AbstractHandler {
+ private final TagAttribute userAttribute;
+ private final TagAttribute membershipIdAttribute;
+
+ public DeleteMembershipHandler(final TagConfig config) {
+ super(config);
+ userAttribute = getRequiredAttribute("user");
+ membershipIdAttribute = getRequiredAttribute("membershipId");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new DeleteMembershipActionListener(
+ getValueExpression(userAttribute, ctx, User.class),
+ getValueExpression(membershipIdAttribute, ctx, Long.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteUserHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteUserHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/DeleteUserHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,42 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.identity.User;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.DeleteUserActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "deleteUser",
+ description = "Delete a user from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "user",
+ description = "The user to delete.",
+ required = true,
+ deferredType = User.class
+ )
+ }
+)
+public final class DeleteUserHandler extends AbstractHandler {
+ private final TagAttribute userAttribute;
+
+ public DeleteUserHandler(final TagConfig config) {
+ super(config);
+ userAttribute = getRequiredAttribute("user");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new DeleteUserActionListener(
+ getValueExpression(userAttribute, ctx, User.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListGroupsHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListGroupsHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListGroupsHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,42 @@
+package org.jbpm.jsf.identity.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.ListGroupsActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listGroups",
+ description = "Read the list of groups from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the group list should be stored.",
+ required = true,
+ deferredType = List.class
+ )
+ }
+)
+public final class ListGroupsHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+
+ public ListGroupsHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListGroupsActionListener(
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListUsersHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListUsersHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/ListUsersHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,42 @@
+package org.jbpm.jsf.identity.handler;
+
+import java.util.List;
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.ListUsersActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "listUsers",
+ description = "Read the list of users from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the user list should be stored.",
+ required = true,
+ deferredType = List.class
+ )
+ }
+)
+public final class ListUsersHandler extends AbstractHandler {
+ private final TagAttribute targetTagAttribute;
+
+ public ListUsersHandler(final TagConfig config) {
+ super(config);
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new ListUsersActionListener(
+ getValueExpression(targetTagAttribute, ctx, List.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupByNameHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupByNameHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupByNameHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,50 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jboss.gravel.common.annotation.TldAttribute;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jbpm.identity.Group;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.identity.action.LoadGroupByNameActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadGroupByName",
+ description = "Read a group from the database by name.",
+ attributes = {
+ @TldAttribute (
+ name = "groupName",
+ description = "The name of the group to load.",
+ required = true
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the group should be stored.",
+ required = true,
+ deferredType = Group.class
+ )
+ }
+)
+public final class LoadGroupByNameHandler extends AbstractHandler {
+ private final TagAttribute groupNameTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public LoadGroupByNameHandler(final TagConfig config) {
+ super(config);
+ groupNameTagAttribute = getRequiredAttribute("groupName");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadGroupByNameActionListener(
+ getValueExpression(groupNameTagAttribute, ctx, String.class),
+ getValueExpression(targetTagAttribute, ctx, Group.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadGroupHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.identity.action.LoadGroupActionListener;
+import org.jbpm.identity.Group;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.FaceletContext;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadGroup",
+ description = "Read a group from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the group to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the group should be stored.",
+ required = true,
+ deferredType = Group.class
+ )
+ }
+)
+public final class LoadGroupHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public LoadGroupHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadGroupActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, Group.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadUserHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadUserHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/LoadUserHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,51 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.identity.action.LoadUserActionListener;
+import org.jbpm.identity.User;
+import org.jboss.gravel.common.annotation.TldTag;
+import org.jboss.gravel.common.annotation.TldAttribute;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.tag.TagAttribute;
+
+/**
+ *
+ */
+ at TldTag (
+ name = "loadUser",
+ description = "Read a user from the database.",
+ attributes = {
+ @TldAttribute (
+ name = "id",
+ description = "The ID of the user to load.",
+ required = true,
+ deferredType = long.class
+ ),
+ @TldAttribute (
+ name = "target",
+ description = "An EL expression into which the user should be stored.",
+ required = true,
+ deferredType = User.class
+ )
+ }
+)
+public final class LoadUserHandler extends AbstractHandler {
+ private final TagAttribute idTagAttribute;
+ private final TagAttribute targetTagAttribute;
+
+ public LoadUserHandler(final TagConfig config) {
+ super(config);
+ idTagAttribute = getRequiredAttribute("id");
+ targetTagAttribute = getRequiredAttribute("target");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new LoadUserActionListener(
+ getValueExpression(idTagAttribute, ctx, Long.class),
+ getValueExpression(targetTagAttribute, ctx, User.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/VerifyUserHandler.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/VerifyUserHandler.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/handler/VerifyUserHandler.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,33 @@
+package org.jbpm.jsf.identity.handler;
+
+import org.jbpm.jsf.core.handler.AbstractHandler;
+import org.jbpm.jsf.JbpmActionListener;
+import org.jbpm.jsf.identity.action.VerifyUserActionListener;
+
+import com.sun.facelets.FaceletContext;
+import com.sun.facelets.tag.TagConfig;
+import com.sun.facelets.tag.TagAttribute;
+
+/**
+ *
+ */
+public final class VerifyUserHandler extends AbstractHandler {
+ private final TagAttribute userNameTagAttribute;
+ private final TagAttribute passwordTagAttribute;
+ private final TagAttribute userIdTargetTagAttribute;
+
+ public VerifyUserHandler(final TagConfig config) {
+ super(config);
+ userNameTagAttribute = getRequiredAttribute("userName");
+ passwordTagAttribute = getRequiredAttribute("password");
+ userIdTargetTagAttribute = getRequiredAttribute("userIdTarget");
+ }
+
+ protected JbpmActionListener getListener(final FaceletContext ctx) {
+ return new VerifyUserActionListener(
+ getValueExpression(userNameTagAttribute, ctx, String.class),
+ getValueExpression(passwordTagAttribute, ctx, String.class),
+ getValueExpression(userIdTargetTagAttribute, ctx, Long.class)
+ );
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/package-info.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/package-info.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/identity/package-info.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,9 @@
+/**
+ * JSF Tag Library for jBPM applications.
+ */
+ at org.jboss.gravel.common.annotation.TldTagLib(
+ fileName = "identity.tld",
+ shortName = "id",
+ uri = "http://jbpm.org/jbpm4jsf/identity"
+)
+package org.jbpm.jsf.identity;
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormBaseLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormBaseLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormBaseLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,29 @@
+package org.jbpm.jsf.taskform;
+
+import org.jbpm.jsf.taskform.ui.UITaskFormCancelButton;
+import org.jbpm.jsf.taskform.ui.UITaskFormSaveButton;
+import org.jbpm.jsf.taskform.ui.UITaskFormTransitionButton;
+
+import com.sun.facelets.tag.AbstractTagLibrary;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+
+/**
+ *
+ */
+public abstract class TaskFormBaseLibrary extends AbstractTagLibrary {
+ public TaskFormBaseLibrary(final String namespace) {
+ super(namespace);
+
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final Application application = facesContext.getApplication();
+
+ application.addComponent(UITaskFormCancelButton.COMPONENT_TYPE, UITaskFormCancelButton.class.getName());
+ addComponent("cancelButton", UITaskFormCancelButton.COMPONENT_TYPE, "javax.faces.Button");
+ application.addComponent(UITaskFormSaveButton.COMPONENT_TYPE, UITaskFormSaveButton.class.getName());
+ addComponent("saveButton", UITaskFormSaveButton.COMPONENT_TYPE, "javax.faces.Button");
+ application.addComponent(UITaskFormTransitionButton.COMPONENT_TYPE, UITaskFormTransitionButton.class.getName());
+ addComponent("transitionButton", UITaskFormTransitionButton.COMPONENT_TYPE, "javax.faces.Button");
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormCompatLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormCompatLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormCompatLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,10 @@
+package org.jbpm.jsf.taskform;
+
+/**
+ *
+ */
+public final class TaskFormCompatLibrary extends TaskFormBaseLibrary {
+ public TaskFormCompatLibrary() {
+ super("http://jbpm.org/jsf/tf");
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/TaskFormLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,12 @@
+package org.jbpm.jsf.taskform;
+
+/**
+ *
+ */
+public final class TaskFormLibrary extends TaskFormBaseLibrary {
+ public TaskFormLibrary() {
+ super("http://jbpm.org/jbpm4jsf/tf");
+
+
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/package-info.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/package-info.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/package-info.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,9 @@
+/**
+ * Components pertaining to task form data and command elements.
+ */
+ at org.jboss.gravel.common.annotation.TldTagLib(
+ fileName = "tf.tld",
+ shortName = "tf",
+ uri = "http://jbpm.org/jbpm4jsf/tf"
+)
+package org.jbpm.jsf.taskform;
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormButtonBase.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormButtonBase.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormButtonBase.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,62 @@
+package org.jbpm.jsf.taskform.ui;
+
+import org.jbpm.jsf.core.ui.UITaskForm;
+
+import javax.faces.component.html.HtmlCommandButton;
+import javax.faces.component.UIComponent;
+import javax.faces.event.ActionListener;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.FacesException;
+import javax.el.MethodExpression;
+
+/**
+ *
+ */
+public abstract class UITaskFormButtonBase extends HtmlCommandButton {
+
+ private UITaskForm enclosingForm;
+
+ private UITaskForm getEnclosingForm() {
+ if (enclosingForm != null) {
+ return enclosingForm;
+ }
+ UIComponent c = getParent();
+ do {
+ if (c instanceof UITaskForm) {
+ enclosingForm = (UITaskForm) c;
+ return enclosingForm;
+ }
+ c = c.getParent();
+ } while (c != null);
+ throw new FacesException("Task form buttons must be includede within a task form");
+ }
+
+ public MethodExpression getActionExpression() {
+ return getEnclosingForm().getActionExpression();
+ }
+
+ public void setActionExpression(MethodExpression actionExpression) {
+ getEnclosingForm().setActionExpression(actionExpression);
+ }
+
+ public void addActionListener(ActionListener listener) {
+ getEnclosingForm().addActionListener(listener);
+ }
+
+ public ActionListener[] getActionListeners() {
+ return getEnclosingForm().getActionListeners();
+ }
+
+ public void removeActionListener(ActionListener listener) {
+ getEnclosingForm().removeActionListener(listener);
+ }
+
+ public void broadcast(FacesEvent event) throws AbortProcessingException {
+ getEnclosingForm().broadcast(event);
+ }
+
+ public void queueEvent(FacesEvent e) {
+ getEnclosingForm().queueEvent(e);
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormCancelButton.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormCancelButton.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormCancelButton.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,8 @@
+package org.jbpm.jsf.taskform.ui;
+
+/**
+ *
+ */
+public final class UITaskFormCancelButton extends UITaskFormButtonBase {
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tf.CancelButton";
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormSaveButton.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormSaveButton.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormSaveButton.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,8 @@
+package org.jbpm.jsf.taskform.ui;
+
+/**
+ *
+ */
+public final class UITaskFormSaveButton extends UITaskFormButtonBase {
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tf.SaveButton";
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormTransitionButton.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormTransitionButton.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskform/ui/UITaskFormTransitionButton.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,59 @@
+package org.jbpm.jsf.taskform.ui;
+
+import java.io.Serializable;
+
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+
+import org.jbpm.jsf.taskform.ui.UITaskFormButtonBase;
+
+/**
+ *
+ */
+public final class UITaskFormTransitionButton extends UITaskFormButtonBase {
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tf.TransitionButton";
+
+ private String transition;
+
+ public String getTransition() {
+ if (transition != null) {
+ return transition;
+ } else {
+ final ValueExpression transitionExpression = getValueExpression("transition");
+ if (transitionExpression == null) {
+ return null;
+ }
+ return (String)transitionExpression.getValue(getFacesContext().getELContext());
+ }
+ }
+
+ public void setTransition(final String transition) {
+ this.transition = transition;
+ }
+
+
+ private State state;
+
+ public Object saveState(FacesContext context) {
+ if (state == null) {
+ state = new State();
+ }
+ state.superState = super.saveState(context);
+ state.transition = transition;
+ return state;
+ }
+
+ public void restoreState(FacesContext context, Object object) {
+ state = (State) object;
+ super.restoreState(context, state.superState);
+ transition = state.transition;
+ }
+
+ private static final class State implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Object superState;
+ private String transition;
+ }
+
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutBaseLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutBaseLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutBaseLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,39 @@
+package org.jbpm.jsf.taskformlayout;
+
+import org.jbpm.jsf.taskformlayout.ui.UIDataForm;
+import org.jbpm.jsf.taskformlayout.ui.UIDataCell;
+import org.jbpm.jsf.taskformlayout.ui.UIDataArea;
+import org.jbpm.jsf.taskformlayout.ui.UIDataSection;
+import org.jbpm.jsf.taskformlayout.renderer.DataFormRenderer;
+
+import com.sun.facelets.tag.AbstractTagLibrary;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.Application;
+import javax.faces.render.RenderKit;
+
+/**
+ *
+ */
+public abstract class TaskFormLayoutBaseLibrary extends AbstractTagLibrary {
+ public TaskFormLayoutBaseLibrary(final String namespace) {
+ super(namespace);
+
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final Application application = facesContext.getApplication();
+ final RenderKit renderKit = facesContext.getRenderKit();
+
+ application.addComponent(UIDataForm.COMPONENT_TYPE, UIDataForm.class.getName());
+ addComponent("dataform", UIDataForm.COMPONENT_TYPE, UIDataForm.RENDERER_TYPE);
+ renderKit.addRenderer(UIDataForm.COMPONENT_FAMILY, UIDataForm.RENDERER_TYPE, new DataFormRenderer());
+
+ application.addComponent(UIDataArea.COMPONENT_TYPE, UIDataArea.class.getName());
+ addComponent("dataarea", UIDataArea.COMPONENT_TYPE, UIDataArea.RENDERER_TYPE);
+
+ application.addComponent(UIDataSection.COMPONENT_TYPE, UIDataSection.class.getName());
+ addComponent("datasection", UIDataSection.COMPONENT_TYPE, UIDataSection.RENDERER_TYPE);
+
+ application.addComponent(UIDataCell.COMPONENT_TYPE, UIDataCell.class.getName());
+ addComponent("datacell", UIDataCell.COMPONENT_TYPE, UIDataCell.RENDERER_TYPE);
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutCompatLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutCompatLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutCompatLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,10 @@
+package org.jbpm.jsf.taskformlayout;
+
+/**
+ *
+ */
+public final class TaskFormLayoutCompatLibrary extends TaskFormLayoutBaseLibrary {
+ public TaskFormLayoutCompatLibrary() {
+ super("http://jbpm.org/jsf");
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutLibrary.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutLibrary.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/TaskFormLayoutLibrary.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,10 @@
+package org.jbpm.jsf.taskformlayout;
+
+/**
+ *
+ */
+public final class TaskFormLayoutLibrary extends TaskFormLayoutBaseLibrary {
+ public TaskFormLayoutLibrary() {
+ super("http://jbpm.org/jbpm4jsf/tfl");
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/package-info.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/package-info.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/package-info.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,9 @@
+/**
+ * Components pertaining to task form layout and formatting.
+ */
+ at org.jboss.gravel.common.annotation.TldTagLib(
+ fileName = "tfl.tld",
+ shortName = "tfl",
+ uri = "http://jbpm.org/jbpm4jsf/tfl"
+)
+package org.jbpm.jsf.taskformlayout;
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/renderer/DataFormRenderer.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/renderer/DataFormRenderer.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/renderer/DataFormRenderer.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,173 @@
+package org.jbpm.jsf.taskformlayout.renderer;
+
+import org.jboss.gravel.common.renderer.RendererBase;
+import org.jboss.gravel.common.renderer.Element;
+import org.jbpm.jsf.taskformlayout.ui.UIDataArea;
+import org.jbpm.jsf.taskformlayout.ui.UIDataCell;
+import org.jbpm.jsf.taskformlayout.ui.UIDataForm;
+import org.jbpm.jsf.taskformlayout.ui.UIDataSection;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ *
+ */
+public final class DataFormRenderer extends RendererBase {
+
+ public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
+ // delegate to encodeChildren
+ }
+
+ public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
+ if (! component.isRendered()) {
+ return;
+ }
+
+ UIDataForm dataForm = ((UIDataForm)component);
+ final int columns = dataForm.getColumns();
+ final int colspan = columns * 2;
+
+ final Element<UIDataForm> table = writeElement(context, "table", dataForm);
+ table.writeId();
+ table.addClass(dataForm.getStyleClass()).writeClass();
+ table.addStyle(dataForm.getStyle()).writeStyle();
+
+ for (int i = 0; i < columns; i ++) {
+ final Element<UIDataForm> colgroup = table.writeElement("colgroup");
+ colgroup.writeAttribute("span", 2);
+ colgroup.close();
+ }
+
+ final UIComponent dataFormHeader = dataForm.getFacet("header");
+ final UIComponent dataFormFooter = dataForm.getFacet("footer");
+
+ if (dataFormHeader != null) {
+ final Element<UIComponent> thead = table.writeElement("thead", dataFormHeader);
+ thead.addClass(dataForm.getHeaderClass()).writeClass();
+ thead.addStyle(dataForm.getHeaderStyle()).writeClass();
+ final Element<UIComponent> tr = thead.writeElement("tr");
+ final Element<UIComponent> th = tr.writeElement("th");
+ th.writeAttribute("colspan", colspan);
+ th.doEncode();
+ th.close();
+ tr.close();
+ thead.close();
+ }
+ if (dataFormFooter != null) {
+ final Element<UIComponent> tfoot = table.writeElement("tfoot", dataFormFooter);
+ tfoot.addClass(dataForm.getFooterClass()).writeClass();
+ tfoot.addStyle(dataForm.getFooterStyle()).writeClass();
+ final Element<UIComponent> tr = tfoot.writeElement("tr");
+ final Element<UIComponent> th = tr.writeElement("th");
+ th.writeAttribute("colspan", colspan);
+ th.doEncode();
+ th.close();
+ tr.close();
+ tfoot.close();
+ }
+
+ final Iterator<UIDataSection> sectionIter = dataForm.getChildrenOfType(UIDataSection.class);
+ boolean sections = false;
+ while (sectionIter.hasNext()) {
+ sections = true;
+ final UIDataSection section = sectionIter.next();
+ final Element<UIDataSection> tbody = table.writeElement("tbody", section);
+
+ final UIComponent sectionHeader = section.getFacet("header");
+ final UIComponent sectionFooter = section.getFacet("footer");
+
+ if (sectionHeader != null) {
+ final Element<UIComponent> tr = tbody.writeElement("tr", sectionHeader);
+ final Element<UIComponent> th = tr.writeElement("th");
+ th.writeAttribute("scope", "rowgroup");
+ th.writeAttribute("colspan", colspan);
+ th.doEncode();
+ th.close();
+ tr.close();
+ }
+
+ if (section instanceof UIDataArea) {
+ final Element<UIDataSection> tr = tbody.writeElement("tr");
+ final Element<UIDataSection> td = tr.writeElement("td");
+ td.writeAttribute("colspan", colspan);
+ td.doEncode();
+ td.close();
+ tr.close();
+ } else {
+ encodeCells(tbody, section.getChildrenOfType(UIDataCell.class), columns);
+ }
+
+ if (sectionFooter != null) {
+ final Element<UIComponent> tr = tbody.writeElement("tr", sectionFooter);
+ final Element<UIComponent> th = tr.writeElement("th");
+ th.writeAttribute("colspan", colspan);
+ th.doEncode();
+ th.close();
+ tr.close();
+ }
+ tbody.close();
+ }
+ if (! sections) {
+ final Element<UIDataForm> tbody = table.writeElement("tbody");
+ encodeCells(tbody, dataForm.getChildrenOfType(UIDataCell.class), columns);
+ tbody.close();
+ }
+ table.close();
+ }
+
+ public <T extends UIComponent> void encodeCells(final Element<T> tbody, Iterator<UIDataCell> cellIterator, final int columns) throws IOException {
+ int column = 0;
+
+ Element<T> tr = null;
+ while (cellIterator.hasNext()) {
+ final UIDataCell dataCell = cellIterator.next();
+ if (column == 0) {
+ tr = tbody.writeElement("tr");
+ }
+
+ final UIComponent headerFacet = dataCell.getFacet("header");
+ if (headerFacet != null) {
+ Element<UIComponent> th = tr.writeElement("th", headerFacet);
+ th.writeAttribute("scope", "colgroup");
+ th.addClass(dataCell.getHeaderClass()).writeClass();
+ th.addStyle(dataCell.getHeaderStyle()).writeStyle();
+ th.doEncode();
+ th.close();
+ } else {
+ tr.writeElement("th").close();
+ }
+
+ final Element<UIDataCell> td = tr.writeElement("td", dataCell);
+ td.writeId();
+ td.addClass(dataCell.getStyleClass()).writeClass();
+ td.addStyle(dataCell.getStyle()).writeStyle();
+ td.doEncode();
+ td.close();
+
+ column = (column + 1) % columns;
+ if (column == 0) {
+ tr.close();
+ }
+ }
+
+ if (column > 0) {
+ while (column < columns) {
+ tr.writeElement("th").close();
+ tr.writeElement("td").close();
+ }
+ tr.close();
+ }
+ }
+
+ public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
+ // delegate to encodeChildren
+ }
+
+ public boolean getRendersChildren() {
+ return true;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataArea.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataArea.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataArea.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,19 @@
+package org.jbpm.jsf.taskformlayout.ui;
+
+/**
+ *
+ */
+public final class UIDataArea extends UIDataSection {
+
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tfl.DataArea";
+ public static final String COMPONENT_FAMILY = "jbpm4jsf.tfl";
+ public static final String RENDERER_TYPE = null;
+
+ public UIDataArea() {
+ setRendererType(RENDERER_TYPE);
+ }
+
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataCell.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataCell.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataCell.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,100 @@
+package org.jbpm.jsf.taskformlayout.ui;
+
+import org.jboss.gravel.common.ui.UIGravelBase;
+
+import javax.faces.context.FacesContext;
+
+import java.io.Serializable;
+
+/**
+ *
+ */
+public final class UIDataCell extends UIGravelBase {
+
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tfl.DataCell";
+ public static final String COMPONENT_FAMILY = "jbpm4jsf.tfl";
+ public static final String RENDERER_TYPE = null;
+
+ public UIDataCell() {
+ setRendererType(RENDERER_TYPE);
+ }
+
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+ // properties
+
+ private String headerClass;
+ private String headerStyle;
+ private String styleClass;
+ private String style;
+
+ public String getHeaderClass() {
+ return headerClass;
+ }
+
+ public void setHeaderClass(final String headerClass) {
+ this.headerClass = headerClass;
+ }
+
+ public String getHeaderStyle() {
+ return getAttributeValue("headerStyle", headerStyle);
+ }
+
+ public void setHeaderStyle(final String headerStyle) {
+ this.headerStyle = headerStyle;
+ }
+
+ public String getStyleClass() {
+ return getAttributeValue("styleClass", styleClass);
+ }
+
+ public void setStyleClass(final String styleClass) {
+ this.styleClass = styleClass;
+ }
+
+ public String getStyle() {
+ return getAttributeValue("style", style);
+ }
+
+ public void setStyle(final String style) {
+ this.style = style;
+ }
+
+ // state mgmt
+
+ private State state;
+
+ public Object saveState(FacesContext context) {
+ if (state == null) {
+ state = new State();
+ }
+ state.superState = super.saveState(context);
+ state.headerClass = headerClass;
+ state.headerStyle = headerStyle;
+ state.styleClass = styleClass;
+ state.style = style;
+ return state;
+ }
+
+ public void restoreState(FacesContext context, Object stateObject) {
+ state = ((State)stateObject);
+ headerClass = state.headerClass;
+ headerStyle = state.headerStyle;
+ styleClass = state.styleClass;
+ style = state.style;
+ super.restoreState(context, state.superState);
+ }
+
+ public static class State implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Object superState;
+
+ private String headerClass;
+ private String headerStyle;
+ private String styleClass;
+ private String style;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataForm.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataForm.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataForm.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,141 @@
+package org.jbpm.jsf.taskformlayout.ui;
+
+import org.jboss.gravel.common.ui.UIGravelBase;
+import java.io.Serializable;
+
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ */
+public final class UIDataForm extends UIGravelBase {
+
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tfl.DataForm";
+ public static final String COMPONENT_FAMILY = "jbpm4jsf.tfl";
+ public static final String RENDERER_TYPE = "jbpm4jsf.tlf.DataForm";
+
+ public UIDataForm() {
+ setRendererType(RENDERER_TYPE);
+ }
+
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+ // properties
+
+ private int columns;
+ private boolean columnsSet;
+ private String headerClass;
+ private String headerStyle;
+ private String footerClass;
+ private String footerStyle;
+ private String styleClass;
+ private String style;
+
+ public int getColumns() {
+ final int value = getAttributeValue("columns", columns, columnsSet, 1);
+ return value < 1 ? 1 : value;
+ }
+
+ public void setColumns(final int columns) {
+ this.columns = columns;
+ columnsSet = true;
+ }
+
+ public String getHeaderClass() {
+ return getAttributeValue("headerClass", headerClass);
+ }
+
+ public void setHeaderClass(final String headerClass) {
+ this.headerClass = headerClass;
+ }
+
+ public String getHeaderStyle() {
+ return getAttributeValue("headerStyle", headerStyle);
+ }
+
+ public void setHeaderStyle(final String headerStyle) {
+ this.headerStyle = headerStyle;
+ }
+
+ public String getFooterClass() {
+ return getAttributeValue("footerClass", footerClass);
+ }
+
+ public void setFooterClass(final String footerClass) {
+ this.footerClass = footerClass;
+ }
+
+ public String getFooterStyle() {
+ return getAttributeValue("footerStyle", footerStyle);
+ }
+
+ public void setFooterStyle(final String footerStyle) {
+ this.footerStyle = footerStyle;
+ }
+
+ public String getStyleClass() {
+ return getAttributeValue("styleClass", styleClass, "dataform");
+ }
+
+ public void setStyleClass(final String styleClass) {
+ this.styleClass = styleClass;
+ }
+
+ public String getStyle() {
+ return getAttributeValue("style", style);
+ }
+
+ public void setStyle(final String style) {
+ this.style = style;
+ }
+
+ // state mgmt
+
+ private State state;
+
+ public Object saveState(FacesContext context) {
+ if (state == null) {
+ state = new State();
+ }
+ state.superState = super.saveState(context);
+ state.columns = columns;
+ state.columnsSet = columnsSet;
+ state.headerClass = headerClass;
+ state.headerStyle = headerStyle;
+ state.footerClass = footerClass;
+ state.footerStyle = footerStyle;
+ state.styleClass = styleClass;
+ state.style = style;
+ return state;
+ }
+
+ public void restoreState(FacesContext context, Object stateObject) {
+ state = ((State)stateObject);
+ columns = state.columns;
+ columnsSet = state.columnsSet;
+ headerClass = state.headerClass;
+ headerStyle = state.headerStyle;
+ footerClass = state.footerClass;
+ footerStyle = state.footerStyle;
+ styleClass = state.styleClass;
+ style = state.style;
+ super.restoreState(context, state.superState);
+ }
+
+ public static class State implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Object superState;
+
+ private int columns;
+ private boolean columnsSet;
+ private String headerClass;
+ private String headerStyle;
+ private String footerClass;
+ private String footerStyle;
+ private String styleClass;
+ private String style;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataSection.java
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataSection.java (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/java/org/jbpm/jsf/taskformlayout/ui/UIDataSection.java 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,124 @@
+package org.jbpm.jsf.taskformlayout.ui;
+
+import org.jboss.gravel.common.ui.UIGravelBase;
+
+import javax.faces.context.FacesContext;
+
+import java.io.Serializable;
+
+/**
+ *
+ */
+public class UIDataSection extends UIGravelBase {
+
+ public static final String COMPONENT_TYPE = "jbpm4jsf.tfl.DataSection";
+ public static final String COMPONENT_FAMILY = "jbpm4jsf.tfl";
+ public static final String RENDERER_TYPE = null;
+
+ public UIDataSection() {
+ setRendererType(RENDERER_TYPE);
+ }
+
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+ // properties
+
+ private String headerClass;
+ private String headerStyle;
+ private String footerClass;
+ private String footerStyle;
+ private String styleClass;
+ private String style;
+
+ public String getHeaderClass() {
+ return getAttributeValue("headerClass", headerClass);
+ }
+
+ public void setHeaderClass(final String headerClass) {
+ this.headerClass = headerClass;
+ }
+
+ public String getHeaderStyle() {
+ return getAttributeValue("headerStyle", headerStyle);
+ }
+
+ public void setHeaderStyle(final String headerStyle) {
+ this.headerStyle = headerStyle;
+ }
+
+ public String getFooterClass() {
+ return getAttributeValue("footerClass", footerClass);
+ }
+
+ public void setFooterClass(final String footerClass) {
+ this.footerClass = footerClass;
+ }
+
+ public String getFooterStyle() {
+ return getAttributeValue("footerStyle", footerStyle);
+ }
+
+ public void setFooterStyle(final String footerStyle) {
+ this.footerStyle = footerStyle;
+ }
+
+ public String getStyleClass() {
+ return getAttributeValue("styleClass", styleClass);
+ }
+
+ public void setStyleClass(final String styleClass) {
+ this.styleClass = styleClass;
+ }
+
+ public String getStyle() {
+ return getAttributeValue("style", style);
+ }
+
+ public void setStyle(final String style) {
+ this.style = style;
+ }
+
+ // state mgmt
+
+ private State state;
+
+ public Object saveState(FacesContext context) {
+ if (state == null) {
+ state = new State();
+ }
+ state.superState = super.saveState(context);
+ state.headerClass = headerClass;
+ state.headerStyle = headerStyle;
+ state.footerClass = footerClass;
+ state.footerStyle = footerStyle;
+ state.styleClass = styleClass;
+ state.style = style;
+ return state;
+ }
+
+ public void restoreState(FacesContext context, Object stateObject) {
+ state = ((State)stateObject);
+ headerClass = state.headerClass;
+ headerStyle = state.headerStyle;
+ footerClass = state.footerClass;
+ footerStyle = state.footerStyle;
+ styleClass = state.styleClass;
+ style = state.style;
+ super.restoreState(context, state.superState);
+ }
+
+ public static class State implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Object superState;
+
+ private String headerClass;
+ private String headerStyle;
+ private String footerClass;
+ private String footerStyle;
+ private String styleClass;
+ private String style;
+ }
+}
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/core.taglib.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/core.taglib.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/core.taglib.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,26 @@
+<!--
+ jBPM4JSF - jBPM component library for JSF
+ Copyright (C) 2007 JBoss, a division of Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+
+<facelet-taglib>
+ <library-class>org.jbpm.jsf.core.CoreLibrary</library-class>
+</facelet-taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/faces-config.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/faces-config.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/faces-config.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,11 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
+ version="1.2">
+ <lifecycle>
+ <phase-listener>org.jbpm.jsf.core.phase.JbpmPhaseListener</phase-listener>
+ <phase-listener>org.jbpm.jsf.core.phase.ProcessFilePhaseListener</phase-listener>
+ </lifecycle>
+
+</faces-config>
\ No newline at end of file
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/identity.taglib.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/identity.taglib.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/identity.taglib.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,26 @@
+<!--
+ jBPM4JSF - jBPM component library for JSF
+ Copyright (C) 2007 JBoss, a division of Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+
+<facelet-taglib>
+ <library-class>org.jbpm.jsf.identity.IdentityLibrary</library-class>
+</facelet-taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf-compat.taglib.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf-compat.taglib.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf-compat.taglib.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,26 @@
+<!--
+ jBPM4JSF - jBPM component library for JSF
+ Copyright (C) 2007 JBoss, a division of Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+
+<facelet-taglib>
+ <library-class>org.jbpm.jsf.taskform.TaskFormCompatLibrary</library-class>
+</facelet-taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf.taglib.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf.taglib.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tf.taglib.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,26 @@
+<!--
+ jBPM4JSF - jBPM component library for JSF
+ Copyright (C) 2007 JBoss, a division of Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+
+<facelet-taglib>
+ <library-class>org.jbpm.jsf.taskform.TaskFormLibrary</library-class>
+</facelet-taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl-compat.taglib.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl-compat.taglib.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl-compat.taglib.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,26 @@
+<!--
+ jBPM4JSF - jBPM component library for JSF
+ Copyright (C) 2007 JBoss, a division of Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+
+<facelet-taglib>
+ <library-class>org.jbpm.jsf.taskformlayout.TaskFormLayoutCompatLibrary</library-class>
+</facelet-taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl.taglib.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl.taglib.xml (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/resources/META-INF/tfl.taglib.xml 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,26 @@
+<!--
+ jBPM4JSF - jBPM component library for JSF
+ Copyright (C) 2007 JBoss, a division of Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+
+<facelet-taglib>
+ <library-class>org.jbpm.jsf.taskformlayout.TaskFormLayoutLibrary</library-class>
+</facelet-taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/core.tld
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/core.tld (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/core.tld 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,1944 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+
+<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
+ <tlib-version>1.2</tlib-version>
+ <short-name>jbpm</short-name>
+ <uri>http://jbpm.org/jbpm4jsf/core</uri>
+ <description><![CDATA[JSF Tag Library for jBPM applications.]]></description>
+
+ <tag>
+ <name>addComment</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Add a comment to a task or token.]]></description>
+ <attribute>
+ <name>comment</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression that returns the comment text to add.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression that returns the node to add a comment to.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.GraphElement</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>applyVariableMap</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Apply a variable map to a token, task, or process instance]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The token, task, or process instance to apply the variables to.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>variableMap</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The variable map to apply.]]></description>
+ <deferred-value>
+ <type>org.jbpm.jsf.core.impl.UpdatesHashMap</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>assignTask</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Assign a task to an actor.]]></description>
+ <attribute>
+ <name>actorId</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The actor ID to which the task should be assigned.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>overwriteSwimlane</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A flag that indicates whether the swimlane should be overwritten.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>task</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The task instance to assign.]]></description>
+ <deferred-value>
+ <type>org.jbpm.taskmgmt.exe.TaskInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>cancel</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Cancel a running task instance, token, or process instance.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The item to cancel.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>completeTask</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Complete a task.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>task</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression that resolves to the task instance to complete.]]></description>
+ <deferred-value>
+ <type>org.jbpm.taskmgmt.exe.TaskInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>transition</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression that resolves to either the name of a transition, or the transition object to take upon completing this task.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>delete</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Delete a process, process instance, or job.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The item to delete.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>deployProcess</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Deploy a new process archive.]]></description>
+ <attribute>
+ <name>archive</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The source of the archive, as an input stream or a byte array.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the new process definition will be inserted.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>getDiagramInfo</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read process definition diagram information from the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>process</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The the process definition to read diagram information for.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the diagram information should be stored.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>getProcessLogs</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Get the process logs from a process instance.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>processInstance</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process instance whose process logs are to be read.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.ProcessInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process log type. This may be a literal Class object, or the name of a class, or one of the following shortcut names:<ul><li><code>variable</code></li><li><code>variableUpdate</code></li><li><code>variableCreate</code></li><li><code>variableDelete</code></li><li><code>action</code></li><li><code>node</code></li><li><code>processInstanceCreate</code></li><li><code>processInstanceEnd</code></li><li><code>processState</code></li><li><code>signal</code></li><li><code>tokenCreate</code></li><li><code>tokenEnd</code></li><li><code>transition</code></li><li><code>composite</code></li><li><code>message</code></li><li><code>swimlane</code></li><li><code>swimlaneAssign</code></li><li><code>swimlaneCreate</code></li><li><code>task</code></li><li><code>taskAssign</code></li><li><code>taskCreate</code></li><li><code>taskEnd</code></li></ul>]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>getTaskFormInfo</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read process definition task form information from the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>process</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The the process definition to read task form information for.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the task form information should be stored. This will be in the form of a map whose keys are task names and whose values are the name of the task form file, if any.]]></description>
+ <deferred-value>
+ <type>java.util.Map</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>getVariable</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Get the value of a process variable.]]></description>
+ <attribute>
+ <name>entity</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The token, task, or process instance from which the variable value should be retrieved.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of the variable to remove.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the variable value will be stored.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>getVariableMap</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Get the variable map from a token, process instance, or task.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the variable map will be stored.]]></description>
+ <deferred-value>
+ <type>java.util.Map</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The entity from which the variable should be retrieved.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>includeProcessFile</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Include a process file.]]></description>
+ <attribute>
+ <name>file</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of a file within the process to include.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>process</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process definition from which the file should be read.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>jbpmActionListener</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Call a user-defined action, providing the action with a JbpmJsfContext.]]></description>
+ <attribute>
+ <name>listener</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression that resolves to the listener to execute. Either this or the 'type' attribute must be given.]]></description>
+ <deferred-value>
+ <type>org.jbpm.jsf.JbpmActionListener</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The type of the action. Can be an EL expression which resolves to a literal Class object, or the name of a class as a String. Either this or the 'listener' attribute must be given.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listJobs</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[List all jobs in the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the list will be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listProcesses</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a list of process definitions from the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the process definition list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listProcessInstances</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a list of process instances from a process definition.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>processId</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The numeric ID of the process definition whose instances are to be read.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the process instance list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listTasks</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a list of task instances from the database.]]></description>
+ <attribute>
+ <name>includeEnded</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A flag specifying whether ended tasks should be included.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the task instance list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listTasksForActor</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a list of task instances assigned to an actor ID.]]></description>
+ <attribute>
+ <name>actorId</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The actor ID whose task instances are to be read.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the task instance list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listTasksForProcess</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a list of task instances from a process definition.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>process</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process whose task instances are to be read.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the task instance list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listTasksForProcessInstance</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a list of task instances from a process instance.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>processInstance</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process instance whose task instances are to be read.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.ProcessInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the task instance list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listTokens</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a token list from a process instance.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>processInstance</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process instalce to read the token list from.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.ProcessInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the token list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadJob</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a job instance from the database.]]></description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the job to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the job should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.job.Job</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadProcess</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a process definition from the database.]]></description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the process definition to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the process definition should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadProcessInstance</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a process instance from the database.]]></description>
+ <attribute>
+ <name>forUpdate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean that controls whether the process instance is to be read for update. This typically entails using a <code>SELECT ... FOR UPDATE</code> statement, when database persistence is involved. By default, this flag is <code>false</code> if the action is invoked during the <code>RENDER_RESPONSE</code> phase, and <code>true</code> otherwise.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the process instance to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the process instance should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.ProcessInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadTask</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a task instance from the database.]]></description>
+ <attribute>
+ <name>forUpdate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean that controls whether the task instance is to be read for update. This typically entails using a <code>SELECT ... FOR UPDATE</code> statement, when database persistence is involved. By default, this flag is <code>false</code> if the action is invoked during the <code>RENDER_RESPONSE</code> phase, and <code>true</code> otherwise.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the task instance to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the task instance should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.taskmgmt.exe.TaskInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadToken</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a token from the database.]]></description>
+ <attribute>
+ <name>forUpdate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean that controls whether the token is to be read for update. This typically entails using a <code>SELECT ... FOR UPDATE</code> statement, when database persistence is involved. By default, this flag is <code>false</code> if the action is invoked during the <code>RENDER_RESPONSE</code> phase, and <code>true</code> otherwise.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the token to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the token should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.Token</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>moveToken</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Move a token to a new node. Note that this does not affect any tasks that may be active and associated with this token.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>node</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression which resolves to the node to move the token to, or the name of the node.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>token</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression which resolves to the token that is to be moved.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.Token</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>removeVariable</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Remove a process variable. Optionally store the old value into an EL expression.]]></description>
+ <attribute>
+ <name>entity</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The token, task, or process instance from which the variable should be removed.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of the variable to remove.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An optional EL expression into which the old variable value will be stored.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>resume</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Resume a running task, token, or process instance.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The item to resume.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>signal</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Signal a token or process instance. Optionally specify the transition.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>transition</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The transition, or transition name, to signal the item along.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The item to signal.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>startProcess</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Start a process.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>process</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The process definition to begin executing.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.def.ProcessDefinition</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the new process instance will be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.graph.exe.ProcessInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>startTask</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Mark a task as started.]]></description>
+ <attribute>
+ <name>actorId</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The actor to assign the task to. If not given, the current actor is not changed.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>overwriteSwimlane</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A flag specifying whether the swimlane will be overwritten.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>task</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The task to mark as started.]]></description>
+ <deferred-value>
+ <type>org.jbpm.taskmgmt.exe.TaskInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>suspend</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Suspend a running task, token, or process instance.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The item to suspend.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>taskForm</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Represents the task form action source.]]></description>
+ <attribute>
+ <name>buttonTarget</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the type of button clicked will be stored. It will be one of: <ul><li><code>cancel</code></li><li><code>save</code></li><li><code>transition</code></li></ul>]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>transitionTarget</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the submitted transition name will be stored (if any).]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>updateTaskStart</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Update the start date of a started task.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>startDate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The start date to assign. If not given, the current date will be used.]]></description>
+ <deferred-value>
+ <type>java.util.Date</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>task</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The task instance to update.]]></description>
+ <deferred-value>
+ <type>org.jbpm.taskmgmt.exe.TaskInstance</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>updateVariable</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Update a process variable. Optionally store the old value into an EL expression.]]></description>
+ <attribute>
+ <name>entity</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The token, task, or process instance for which the variable should be updated.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of the variable to update.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An optional EL expression into which the old variable value will be stored.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The new variable value.]]></description>
+ <deferred-value>
+ <type>java.lang.Object</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+</taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/identity.tld
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/identity.tld (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/identity.tld 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,620 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+
+<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
+ <tlib-version>1.2</tlib-version>
+ <short-name>id</short-name>
+ <uri>http://jbpm.org/jbpm4jsf/identity</uri>
+ <description><![CDATA[JSF Tag Library for jBPM applications.]]></description>
+
+ <tag>
+ <name>addMembership</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Add a group membership to a user.]]></description>
+ <attribute>
+ <name>group</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The group that the user should become a member of.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Group</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>role</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of the role.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the created membership should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Membership</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>user</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The user to whom the membership is granted.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.User</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>createGroup</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Create a new group and save it in the database.]]></description>
+ <attribute>
+ <name>groupName</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of the group to create.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>parentGroup</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The parent group, if any.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Group</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the created group should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Group</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The type of the new group.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>createUser</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Create a new user and save it in the database.]]></description>
+ <attribute>
+ <name>email</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The email of the new user.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>password</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The password of the new user.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>passwordConfirm</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The password of the new user again. If this value does not match the value of the <code>password</code> attribute, user creation will fail.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the created user should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.User</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>userName</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The user name of the user to create.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>deleteGroup</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Delete a group from the database.]]></description>
+ <attribute>
+ <name>group</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The group to delete.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Group</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>deleteMembership</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Delete a membership from the database.]]></description>
+ <attribute>
+ <name>membershipId</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the membership to delete.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>user</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The user containing the membership to delete.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.User</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>deleteUser</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Delete a user from the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>user</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The user to delete.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.User</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listGroups</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read the list of groups from the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the group list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>listUsers</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read the list of users from the database.]]></description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the user list should be stored.]]></description>
+ <deferred-value>
+ <type>java.util.List</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadGroup</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a group from the database.]]></description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the group to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the group should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Group</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadGroupByName</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a group from the database by name.]]></description>
+ <attribute>
+ <name>groupName</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The name of the group to load.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the group should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.Group</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>loadUser</name>
+ <tag-class/>
+ <tei-class/>
+ <body-content>JSP</body-content>
+ <description><![CDATA[Read a user from the database.]]></description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[The ID of the user to load.]]></description>
+ <deferred-value>
+ <type>long</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A different name to use for this action. Action names are used by some navigation handlers.]]></description>
+ <deferred-value>
+ <type>java.lang.String</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>navigate</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that can be used to control whether navigation will be attempted after this action completes.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[An EL expression into which the user should be stored.]]></description>
+ <deferred-value>
+ <type>org.jbpm.identity.User</type>
+ </deferred-value>
+ </attribute>
+ <attribute>
+ <name>unless</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description><![CDATA[A boolean expression that, if true, will prevent this action from being run.]]></description>
+ <deferred-value>
+ <type>boolean</type>
+ </deferred-value>
+ </attribute>
+ </tag>
+</taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tf.tld
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tf.tld (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tf.tld 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+
+<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
+ <tlib-version>1.2</tlib-version>
+ <short-name>tf</short-name>
+ <uri>http://jbpm.org/jbpm4jsf/tf</uri>
+ <description><![CDATA[Components pertaining to task form data and command elements.]]></description>
+</taglib>
Added: projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tfl.tld
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tfl.tld (rev 0)
+++ projects/jsf-console/branches/jsf-console-3.2.x/jbpm4jsf/src/main/tld/tfl.tld 2008-10-28 13:39:17 UTC (rev 2646)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+
+<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
+ <tlib-version>1.2</tlib-version>
+ <short-name>tfl</short-name>
+ <uri>http://jbpm.org/jbpm4jsf/tfl</uri>
+ <description><![CDATA[Components pertaining to task form layout and formatting.]]></description>
+</taglib>
More information about the jbpm-commits
mailing list