Skip to content

Commit

Permalink
[PageFlow] Added the PageFlowFactory class to create PageFlow objects…
Browse files Browse the repository at this point in the history
…. (Issue piece#4)
  • Loading branch information
iteman committed Sep 18, 2012
1 parent 9627bcf commit 9e47e20
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 99 deletions.
15 changes: 9 additions & 6 deletions src/Piece/Flow/Continuation/ContinuationServer.php
Expand Up @@ -39,8 +39,7 @@

use Piece\Flow\Core\MethodInvocationException;
use Piece\Flow\PageFlow\ActionInvoker;
use Piece\Flow\PageFlow\FSMBuilder;
use Piece\Flow\PageFlow\PageFlow;
use Piece\Flow\PageFlow\PageFlowFactory;

/**
* The continuation server.
Expand Down Expand Up @@ -71,6 +70,12 @@ class ContinuationServer
*/
protected $actionInvoker;

/**
* @var \Piece\Flow\PageFlow\PageFlowFactory
* @since Property available since Release 2.0.0
*/
protected $pageFlowFactory;

private static $activeInstances = array();
private static $shutdownRegistered = false;

Expand All @@ -86,6 +91,7 @@ public function __construct($enableGC = false, $gcExpirationTime = 1440)
}

$this->flowExecution = new FlowExecution();
$this->pageFlowFactory = new PageFlowFactory();
}

/**
Expand Down Expand Up @@ -359,10 +365,7 @@ protected function startFlowExecution($payload)
throw new FlowNotFoundException("The flow ID [ {$this->activeFlowID} ] not found in the flow definitions.");
}

$flow = new PageFlow();
$flow->setActionInvoker($this->actionInvoker);
$fsmBuilder = new FSMBuilder($flow, $this->flowDefinitions[$this->activeFlowID]['source']);
$fsmBuilder->build();
$flow = $this->pageFlowFactory->create($this->flowDefinitions[$this->activeFlowID]['source'], $this->actionInvoker);

while (true) {
$flowExecutionTicket = $this->generateFlowExecutionTicket();
Expand Down
74 changes: 74 additions & 0 deletions src/Piece/Flow/PageFlow/PageFlowFactory.php
@@ -0,0 +1,74 @@
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */

/**
* PHP version 5.3
*
* Copyright (c) 2012 KUBO Atsuhiro <kubo@iteman.jp>,
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @package Piece_Flow
* @copyright 2012 KUBO Atsuhiro <kubo@iteman.jp>
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
* @version Release: @package_version@
* @since File available since Release 2.0.0
*/

namespace Piece\Flow\PageFlow;

/**
* @package Piece_Flow
* @copyright 2012 KUBO Atsuhiro <kubo@iteman.jp>
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
* @version Release: @package_version@
* @since Class available since Release 2.0.0
*/
class PageFlowFactory
{
/**
* @param string $definitionFile
* @param \Piece\Flow\PageFlow\ActionInvoker $actionInvoker
* @return \Piece\Flow\PageFlow\PageFlow
*/
public function create($definitionFile, ActionInvoker $actionInvoker)
{
$pageFlow = new PageFlow();
$pageFlow->setActionInvoker($actionInvoker);
$fsmBuilder = new FSMBuilder($pageFlow, $definitionFile);
$fsmBuilder->build();

return $pageFlow;
}
}

/*
* Local Variables:
* mode: php
* coding: iso-8859-1
* tab-width: 4
* c-basic-offset: 4
* c-hanging-comment-ender-p: nil
* indent-tabs-mode: nil
* End:
*/

0 comments on commit 9e47e20

Please sign in to comment.