[opencms-dev] OSWorkflow-OpenCMS for 6.0 beta 3 final release

Shi Yusen shiys at langhua.cn
Fri Oct 21 17:57:17 CEST 2005


Hi list,

The attachment is osworkflow-opencms source package. It's in LGPL license.
It's very different from the former one.

Installation Guide:
1. Import the osworkflow module into OpenCMS.

2. Add datasource jdbc/OsWorkflowDS in context element in context.xml, for
example:
   <Resource name="jdbc/OsWorkflowDS" auth="Container"
type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="root" password="111111"
driverClassName="com.mysql.jdbc.Driver"
 
url="jdbc:mysql://localhost:3309/osworkflow?autoReconnect=true"/>

3. Create database and tables. Please choose the right SQL scripts for your
database software.

4. Modify the source code of OpenCms:

4.1 Edit the /org/opencms/db/CmsDriverManager.java:
    public synchronized CmsPublishList getPublishList(
    ...
        } else if (directPublishResource.isFile()
            && I_CmsConstants.C_STATE_UNCHANGED !=
directPublishResource.getState()) {
            
            // when publishing a file directly this file is the only
candidate
            // if it is modified and unlocked
            
            if (getLock(dbc, directPublishResource).isNullLock()) {
                // added by Shi Yusen, shiys at langhua.cn
                // not publish the file if its workflow is still underway
            	boolean canPublish = true;
                CmsProperty workflowid = m_vfsDriver.readPropertyObject(dbc,
CmsWorkflowDialog.C_WORKFLOWID, dbc.currentProject(),
directPublishResource);
                if (!workflowid.isNullProperty()) {
                	String entryId = workflowid.getValue();
                	if (CmsStringUtil.isNotEmpty(entryId)) {
            			Workflow wf = new
BasicWorkflow(dbc.currentUser().getName());
            		    Configuration myconfig = new
DefaultConfiguration();
            		    wf.setConfiguration(myconfig);
        				long id = Long.parseLong(entryId);
        				int entryState =
wf.getEntryState(id);
        				if (entryState !=
WorkflowEntry.KILLED && entryState != WorkflowEntry.COMPLETED) {
        					canPublish = false;
        				}
                	}
                }
                if (canPublish)
                	publishList.addFile(directPublishResource);
            }
            
        }
    ....

    private List filterResources(CmsDbContext dbc, List folderList, List
resourceList) {

        List result = new ArrayList();

        // local folder list for adding new publishing subfolders
        // this solves the TestPublishIssues.testPublishScenarioD problem.
        List newFolderList = folderList==null?new ArrayList():new
ArrayList(folderList);

        for (int i = 0; i < resourceList.size(); i++) {
            CmsResource res = (CmsResource)resourceList.get(i);
            try {
                CmsLock lock = getLock(dbc, res);
                if (! lock.isNullLock()) {
                    // checks if there is a shared lock and if the resource
is deleted
                    // this solves the
TestPublishIssues.testPublishScenarioE problem.
                    if (lock.getType()==CmsLock.C_TYPE_SHARED_INHERITED ||
lock.getType()==CmsLock.C_TYPE_SHARED_EXCLUSIVE) { 
                        if (res.getState()!=I_CmsConstants.C_STATE_DELETED)
{
                            continue;
                        }
                    } else {
                        // don't add locked resources
                        continue;
                    }
                }

                if (!I_CmsConstants.C_ROOT.equals(res.getRootPath()) &&
!checkParentResource(dbc, newFolderList, res)) {
                    continue;
                }

                // added by Shi Yusen, shiys at langhua.cn
                // not publish the file if its workflow is still underway
                CmsProperty workflowid = m_vfsDriver.readPropertyObject(dbc,
CmsWorkflowDialog.C_WORKFLOWID, dbc.currentProject(), res);
                if (!workflowid.isNullProperty()) {
                	String entryId = workflowid.getValue();
                	if (CmsStringUtil.isNotEmpty(entryId)) {
            			Workflow wf = new
BasicWorkflow(dbc.currentUser().getName());
            		    Configuration myconfig = new
DefaultConfiguration();
            		    wf.setConfiguration(myconfig);
        				long id = Long.parseLong(entryId);
        				int entryState =
wf.getEntryState(id);
        				if (entryState !=
WorkflowEntry.KILLED && entryState != WorkflowEntry.COMPLETED) {
        					continue;
        				}
                	}
                }
                
                if (res.isFolder()) {
                    newFolderList.add(res);
                }
                
                result.add(res);

            } catch (Exception e) {
                // noop
            }
        }
        return result;
    }

4.2 Edit the /org/opencms/loader/mimetypes.properties, add the following
line:
jnlp=application/x-java-jnlp-file

5. Build a new opencms.jar and opencms-legacy.jar and deploy them in tomcat.

6. Add workflowpage in opencms-workplace.xml:
			<explorertype name="workflowpage"
key="fileicon.workflowpage" icon="workflowpage.gif">
				<newresource
uri="../../modules/cn.langhua.osworkflow/commons/newresource_workflowpage.js
p" order="110"/>
				<accesscontrol>
					<accessentry
principal="GROUP.Administrators" permissions="+r+v+w+c"/>
					<accessentry
principal="GROUP.Projectmanagers" permissions="+r+v+w+c"/>
					<accessentry principal="GROUP.Users"
permissions="+r+v+w+c"/>
				</accesscontrol>
				<editoptions>
					<defaultproperties enabled="true"
shownavigation="true">
						<property name="Title"/>
						<property name="Keywords"/>
						<property
name="Description"/>
					</defaultproperties>
					<contextmenu>
						<entry
key="explorer.context.lock" uri="commons/lock.jsp" rules="d d aaaa dddd
dddd" order="10"/>
						<entry
key="explorer.context.overridelock" uri="commons/lockchange.jsp" rules="d d
dddd dddd aaaa" order="20"/>
						<entry
key="explorer.context.unlock" uri="commons/unlock.jsp" rules="d d dddd aaaa
dddd" order="30"/>
						<separator order="40"/>
						<entry
key="explorer.context.copytoproject" uri="commons/copytoproject.jsp"
rules="d a dddd dddd dddd" order="50"/>
						<entry
key="explorer.context.publish" uri="commons/publishresource.jsp" rules="d d
iaaa iaaa dddd" order="60"/>
						<separator order="70"/>
						<entry
key="explorer.context.pageedit" uri="editors/editor.jsp" target="_top"
rules="d d iiii aaai dddd" order="80"/>
						<entry
key="explorer.context.editsource" uri="editors/editor.jsp?editormode=edit"
target="_top" rules="d d iiii aaai dddd" order="90"/>
						<separator order="100"/>
						<entry
key="explorer.context.copy" uri="commons/copy.jsp" rules="d d aaai aaai
dddd" order="150"/>
						<entry
key="explorer.context.move" uri="commons/move.jsp" rules="d d iiii aaai
dddd" order="170"/>
						<entry
key="explorer.context.delete" uri="commons/delete.jsp" rules="d d iiii aaai
dddd" order="180"/>
						<entry
key="explorer.context.touch" uri="commons/touch.jsp" rules="d d iiii aaai
dddd" order="190"/>
						<entry
key="explorer.context.undochanges" uri="commons/undochanges.jsp" rules="d d
iiid iaid dddd" order="200"/>
						<entry
key="explorer.context.undelete" uri="commons/undelete.jsp" rules="d d ddda
ddda dddd" order="210"/>
						<separator order="240"/>
						<entry
key="explorer.context.showsiblings"
uri="views/explorer/explorer_files.jsp?showlinks=true" rules="a a aaaa aaaa
aaaa" order="250"/>
						<separator order="260"/>
						<entry
key="explorer.context.access" uri="commons/chacc.jsp" rules="a a iiii aaai
dddd" order="300"/>
						<entry
key="explorer.context.secure" uri="commons/secure.jsp" rules="d d iiii aaai
dddd" order="302"/>
						<entry
key="explorer.context.type" uri="commons/chtype.jsp" rules="d d iiii aaai
dddd" order="305"/>
						<entry
key="explorer.context.chnav" uri="commons/chnav.jsp" rules="d d iiii aaai
dddd" order="310"/>
						<separator order="330"/>
						<entry
key="explorer.context.editcontrolfile"
uri="editors/editor.jsp?editastext=true" target="_top" rules="d d iiii aaai
dddd" order="335"/>
						<separator order="340"/>
						<entry
key="explorer.context.history" uri="commons/history.jsp" rules="d d iiii
aaai dddd" order="350"/>
						<entry
key="explorer.context.property"
uri="../modules/cn.langhua.osworkflow/commons/property.jsp" rules="a a aaai
aaai aaai" order="360"/>
						<separator order="400"/> 
						<entry
key="explorer.context.workflow"
uri="../modules/cn.langhua.osworkflow/commons/workflow.jsp" rules="d d iiii
aaai dddd" order="420"/>
					</contextmenu>
				</editoptions>
			</explorertype>

7. Add resourceloader in opencms-vfs.xml:
				<loader
class="cn.langhua.loader.CmsWorkflowPageLoader" />

8. Add resourcetype in opencms-vfs.xml:
				<type
class="cn.langhua.file.types.CmsResourceTypeWorkflowPage"
name="workflowpage" id="43"/>

9. Restart tomcat.


Test:
Click
/system/modules/cn.langhua.osworkflow/osworkflow-2.7.0-example/default.jsp.
You may
run the example successfully. If not, check the installation steps above.


Usage:
1. Create your workflow definition file and store it in
/system/modules/cn.langhua.osworkflow/classes/.

2. Add your workflow to
/system/modules/cn.langhua.osworkflow/classes/workflows.xml.

3. Publish the files and restart tomcat.

4. Create a workflowpage with your workflow.

5. Start workflow from context menu.

6. Continue the workflow in administration view.

-- End --

Have a nice weekend,

Shi Yusen/Beijing Langhua Ltd.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: osworkflow-opencms-src-0.2.zip
Type: application/octet-stream
Size: 127773 bytes
Desc: not available
URL: <http://lists.opencms.org/pipermail/opencms-dev/attachments/20051021/0ae21a4e/attachment.obj>


More information about the opencms-dev mailing list