quick minor path updates (#1968)
[openemr.git] / interface / super / rules / library / RuleCriteriaFactory.php
blob1c49398c1cdcc5c72c64a97f80821b693c30148d
1 <?php
2 // Copyright (C) 2010-2011 Aron Racho <aron@mi-squred.com>
3 //
4 // This program is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU General Public License
6 // as published by the Free Software Foundation; either version 2
7 // of the License, or (at your option) any later version.
9 /**
10 * Description of RuleCriteriaFactory
12 * @author aron
14 abstract class RuleCriteriaFactory
17 var $strategyMap;
18 function __construct()
20 $this->strategyMap[ RuleCriteriaType::ageMin ] = new RuleCriteriaAgeBuilder();
21 $this->strategyMap[ RuleCriteriaType::ageMax ] = new RuleCriteriaAgeBuilder();
22 $this->strategyMap[ RuleCriteriaType::sex ] = new RuleCriteriaSexBuilder();
24 $this->strategyMap[ RuleCriteriaType::issue ] = new RuleCriteriaListsBuilder();
25 $this->strategyMap[ RuleCriteriaType::medication ] = new RuleCriteriaListsBuilder();
26 $this->strategyMap[ RuleCriteriaType::diagnosis ] = new RuleCriteriaListsBuilder();
27 $this->strategyMap[ RuleCriteriaType::surgery ] = new RuleCriteriaListsBuilder();
28 $this->strategyMap[ RuleCriteriaType::allergy ] = new RuleCriteriaListsBuilder();
30 $this->strategyMap[ RuleCriteriaType::lifestyle ] = new RuleCriteriaDatabaseBuilder();
31 $this->strategyMap[ RuleCriteriaType::custom ] = new RuleCriteriaDatabaseBuilder();
32 $this->strategyMap[ RuleCriteriaType::custom_bucket ] = new RuleCriteriaDatabaseBuilder();
35 function resolveCriteriaType($method, $methodDetail, $ruleValue)
37 $strategyMap = $this->getStrategyMap();
38 $criteriaType = null;
39 foreach ($strategyMap as $key => $value) {
40 $criteriaType = $value->resolveRuleCriteriaType($method, $methodDetail, $ruleValue);
41 if ($criteriaType != null) {
42 return $criteriaType;
46 return $criteriaType;
48 /**
50 * @param RuleCriteria $criteria
52 function build(
53 $ruleId,
54 $guid,
55 $inclusion,
56 $optional,
57 $method,
58 $methodDetail,
59 $value
60 ) {
62 $criteriaType = $this->resolveCriteriaType($method, $methodDetail, $value);
63 if ($criteriaType == null) {
64 // could not resolve a criteria
65 return null;
68 $builder = $this->getBuilderFor($criteriaType);
69 if (is_null($builder)) {
70 // if no builder, then its an unrecognized critiera
71 return null;
74 $criteria = $builder->build($criteriaType, $value, $methodDetail);
75 if (is_null($criteria)) {
76 return null;
79 $criteria->inclusion = $inclusion;
80 $criteria->optional = $optional;
81 $criteria->guid = $guid;
82 $criteria->criteriaType = $criteriaType;
83 $this->modify($criteria, $ruleId);
85 return $criteria;
88 /**
90 * @param string $ruleId
91 * @param RuleCriteriaType $criteriaType
93 function buildNewInstance($ruleId, $criteriaType)
95 $strategyMap = $this->getStrategyMap();
96 $builder = $this->getBuilderFor($criteriaType);
97 if (is_null($builder)) {
98 // if no builder, then its an unrecognized critiera
99 return null;
102 $criteria = $builder->newInstance($criteriaType);
103 if (is_null($criteria)) {
104 return null;
107 $criteria->criteriaType = $criteriaType;
109 return $criteria;
112 function getStrategyMap()
114 return $this->strategyMap;
119 * @param RuleCriteriaType $criteriaType
120 * @return RuleCriteria
122 function getBuilderFor($criteriaType)
124 $map = $this->getStrategyMap();
125 return $map[ $criteriaType->code ];
128 abstract function modify($criteria, $ruleId);