<?xml version="1.0" encoding="UTF-8"?>

<model name="wcmwf:workflowmodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

  <imports>
    <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
    <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm"/>
    <import uri="http://www.alfresco.org/model/wcmappmodel/1.0" prefix="wca"/>
  </imports>

  <namespaces>
    <namespace uri="http://www.alfresco.org/model/wcmworkflow/1.0" prefix="wcmwf"/>
  </namespaces>
  
  <constraints>
    
    <constraint name="wcmwf:reviewType" type="LIST">
      <parameter name="allowedValues">
        <!--  TODO: Determine if priority values can be mapped to human-readable strings -->
        <list>
          <value>Serial</value>
          <value>Parallel</value>
        </list>
      </parameter>
    </constraint>

  </constraints>
  
  <types>

    <!--                                                    -->
    <!--  Base WCM "start" task & workflow task definitions -->
    <!--                                                    -->
    <!--  Note: Useful for dispatching WCM specific         -->
    <!--        behaviour                                   -->
    <!--                                                    -->
    
    <type name="wcmwf:startTask">
      <parent>bpm:startTask</parent>
      <overrides>
        <property name="bpm:packageItemActionGroup">
          <default>edit_and_remove_wcm_package_item_actions</default>
        </property>
      </overrides>
    </type>

    <type name="wcmwf:workflowTask">
      <parent>bpm:workflowTask</parent>
      <overrides>
        <property name="bpm:packageItemActionGroup">
          <default>read_wcm_package_item_actions</default>
        </property>
      </overrides>
    </type>

    <type name="wcmwf:submitReviewTask">
      <parent>wcmwf:startTask</parent>
      <properties>
        <property name="wcmwf:submitReviewType">
          <title>Serial or Parallel Review</title>
          <type>d:text</type>
          <mandatory>true</mandatory>
          <default>Serial</default>
          <constraints>
            <constraint ref="wcmwf:reviewType" />
          </constraints>
        </property>
      </properties>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:webproject</aspect>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submitDirectTask">
      <parent>wcmwf:startTask</parent>
      <mandatory-aspects>
        <aspect>wcmwf:webproject</aspect>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:verifyBrokenLinksTask">
      <parent>wcmwf:workflowTask</parent>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>
    
    <type name="wcmwf:reviewTask">
      <parent>wcmwf:workflowTask</parent>
      <overrides>
        <property name="bpm:packageItemActionGroup">
          <default>edit_wcm_package_item_actions</default>
        </property>
      </overrides>
      <mandatory-aspects>
        <!-- One or more reviewers - this is here to allow view of all reviewers -->
        <!-- in the review task -->
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:submission</aspect>
        <aspect>wcmwf:reviewType</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:parallelReviewTask">
      <parent>wcmwf:workflowTask</parent>
      <overrides>
        <property name="bpm:packageItemActionGroup">
          <default>review_wcm_package_item_actions</default>
        </property>
      </overrides>
      <mandatory-aspects>
        <!-- One or more reviewers - this is here to allow view of all reviewers -->
        <!-- in the review task -->
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:submission</aspect>
        <aspect>wcmwf:reviewType</aspect>
      </mandatory-aspects>
    </type>
    
    <type name="wcmwf:rejectedTask">
      <parent>wcmwf:workflowTask</parent>
      <overrides>
        <property name="bpm:packageItemActionGroup">
          <default>edit_and_remove_wcm_package_item_actions</default>
        </property>
      </overrides>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:reviewType</aspect>
        <aspect>wcmwf:reviewInfo</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submitpendingTask">
      <parent>wcmwf:workflowTask</parent>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:reviewType</aspect>
        <aspect>wcmwf:reviewInfo</aspect>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submitcancelledTask">
      <parent>wcmwf:workflowTask</parent>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:reviewType</aspect>
        <aspect>wcmwf:reviewInfo</aspect>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submittedTask">
      <parent>wcmwf:workflowTask</parent>
      <overrides>
         <property name="bpm:hiddenTransitions">
            <default>onsubmit</default>
         </property>
      </overrides>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:reviewType</aspect>
        <aspect>wcmwf:reviewInfo</aspect>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submittedDirectTask">
      <parent>wcmwf:workflowTask</parent>
      <overrides>
         <property name="bpm:hiddenTransitions">
            <default>onsubmit</default>
         </property>
      </overrides>
      <mandatory-aspects>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submitfailedTask">
      <parent>wcmwf:workflowTask</parent>
      <mandatory-aspects>
        <aspect>wcmwf:submission</aspect>
      </mandatory-aspects>
    </type>

    <!-- NOTE: kept for backwards compatibility only - for v2.0 wcm submit process definition -->
    <type name="wcmwf:approvedTask">
      <parent>wcmwf:workflowTask</parent>
      <mandatory-aspects>
        <aspect>bpm:assignees</aspect>
        <aspect>wcmwf:reviewType</aspect>
        <aspect>wcmwf:reviewInfo</aspect>
      </mandatory-aspects>
    </type>

    <type name="wcmwf:submitWebContentTask">
      <parent>wcmwf:startTask</parent>
      <properties>
        <property name="wcmwf:from">
          <type>d:text</type>
        </property>
      </properties>
      <mandatory-aspects>
        <aspect>bpm:assignee</aspect>
      </mandatory-aspects>
    </type>
    
    <!--                       -->
    <!--  Change Request Tasks -->               
    <!--                       -->
   
    <type name="wcmwf:submitChangeRequestTask">
      <parent>wcmwf:startTask</parent>
      <mandatory-aspects>
        <aspect>bpm:assignee</aspect>
      </mandatory-aspects>
    </type>
   
    <type name="wcmwf:changeRequestTask">
      <parent>bpm:workflowTask</parent>
      <overrides>
        <property name="bpm:packageActionGroup">
          <default></default>
        </property>
        <property name="bpm:packageItemActionGroup">
          <default>edit_and_delete_wcm_package_item_actions</default>
        </property>
      </overrides>
      <mandatory-aspects>
        <aspect>bpm:assignee</aspect>
      </mandatory-aspects>
    </type>

  </types>

  <aspects>
    
    <aspect name="wcmwf:webproject">
      <associations>
        <association name="wcmwf:webproject">
          <source>
            <mandatory>false</mandatory>
            <many>false</many>
          </source>
          <target>
            <class>wca:webfolder</class>
            <mandatory>true</mandatory>
            <many>false</many>
          </target>
        </association>
      </associations>
    </aspect>    
    
    <aspect name="wcmwf:submission">
      <properties>
        <property name="wcmwf:fromPath">
          <title>Source Folder Path</title>
          <description>Folder where items have been submitted from</description>
          <type>d:text</type>
          <mandatory>true</mandatory>
        </property>
        <property name="wcmwf:label">
          <title>Snapshot Label</title>
          <type>d:text</type>
          <mandatory>true</mandatory>
        </property>
        <property name="wcmwf:launchDate">
          <title>Launch Date</title>
          <description>Date the content in the submission should be committed</description>
          <type>d:datetime</type>
		  <index enabled="true">
		     <atomic>true</atomic>
			 <stored>false</stored> 
             <tokenised>both</tokenised>
          </index>
        </property>
        <property name="wcmwf:validateLinks">
          <title>Validate Links</title>
          <description>Determines whether links should be verified before entering the review cycle</description>
          <type>d:boolean</type>
        </property>
        <property name="wcmwf:webapp">
          <title>Webapp</title>
          <description>The webapp within the workflow store to check links for</description>
          <type>d:text</type>
        </property>
        <property name="wcmwf:autoDeploy">
          <title>Auto Deploy</title>
          <description>Determines whether the changes should be deployed upon submission</description>
          <type>d:boolean</type>
        </property>
      </properties>
    </aspect>

    <aspect name="wcmwf:reviewType">
      <properties>
        <property name="wcmwf:reviewType">
          <title>Review Type</title>
          <type>d:text</type>
          <mandatory>true</mandatory>
          <constraints>
            <constraint ref="wcmwf:reviewType" />
          </constraints>
        </property>
      </properties>
    </aspect>

    <aspect name="wcmwf:reviewInfo">
      <properties>
        <property name="wcmwf:reviewerCnt">
          <title>Reviewer Count</title>
          <type>d:int</type>
          <mandatory>true</mandatory>
        </property>
        <property name="wcmwf:approveCnt">
          <title>Approver Count</title>
          <type>d:int</type>
          <mandatory>true</mandatory>
        </property>
        <property name="wcmwf:reviewCycle">
          <title>Reviewer Cycle</title>
          <type>d:int</type>
          <mandatory>false</mandatory>
        </property>
      </properties>
    </aspect>
    
  </aspects>

</model>