[Yanel-dev] Workflow

Josias Thöny josias.thoeny at wyona.com
Mon Apr 23 21:43:35 CEST 2007


Michael Wechner wrote:
> Josias Thöny wrote:
> 
>> Hi devs,
>>
>> Do we already have a concept about the workflow?
>> Should it be implemented as a Workflowable interface?
>>
>> Here is a proposal for the "simplest possible" Workflowable interface:
>>
>>     void publish();
>>     void deactivate();
>>     void edit(); // invoke edit event to allow re-publishing
>>     boolean isLive();
>>     boolean canPublish();
>>     View getLiveView(String viewid);
>>
>> A possible implementation could use a specific revision of a resource 
>> as the "live" version. This would require that a Workflowable resource 
>> is also Versionable.
>>
>> The problem with such a "hard-coded" interface is that it's maybe not 
>> easy to extend to a more generic workflow schema (e.g. with 
>> submit/reject or arbitrary workflow transitions).
> 
> 
> agreed. It seems to me that workflow is actually completely independent 
> of a resource except for the connection between version and live 
> workflow status. What if we only create an interface/method for 
> getLiveVersion() and do the rest orthogonal?

How would that work for resources which have a workflow, but no versioning?
I'm thinking about a completely dynamic resource like e.g. a clock. Such 
a resource still could be published/deactivated, just to enable/disable 
its appearance in the live area. But it doesn't support versioning, so I 
don't know what the getLiveVersion() method would do.

Another question is if it's necessary to support different workflow 
schemas depending on the resource type, like e.g.:
   ResourceType A: submit/review/publish/deactivate
   ResourceType B: publish/deactivate
If we need this, it might have some implications for the design of the 
whole workflow system.

WDYT?

> 
>>
>> Another question is how to access the live version from the browser. 
>> Michi suggested to create a LiveResource. IIUC this resource would 
>> catch all urls which start with a certain prefix: /live/** (is that 
>> possible at all?)

I have some doubts about the LiveResource.
If we have the url /live/foo.html, I think it's not sufficient that the 
LiveResource just requests the live revision of foo.html, but it also 
has to pass the information live/authoring to the resource foo.html.
This is necessary because a dynamic resource may have to know the "area".
If resource A includes resource B (e.g. via xinclude), yanel has to make 
sure that when the live version of A is generated, the live version of B 
is included. This means that A has to know the "area" and also pass it to B.
This seems to require that yanel has some concept of live/authoring 
areas. I'm not sure how it could be accomplished just by having a 
LiveResource. Maybe with a parameter yanel.area=live which would be 
passed from the LiveResource to /foo.html?

Josias

> 
> 
> I think we can solve that with the "chain of responsibility"
> 
>> In the example /live/foo.html it would return the live version of 
>> /foo.html.
> 
> 
> right
> 
>>
>> Any comments?
>>
>> Josias
>>
>>
>> _______________________________________________
>> Yanel-development mailing list
>> Yanel-development at wyona.com
>> http://wyona.com/cgi-bin/mailman/listinfo/yanel-development
>>
> 
> 




More information about the Yanel-development mailing list