1<?php
2/*
3 * This work is hereby released into the Public Domain.
4 * To view a copy of the public domain dedication,
5 * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
6 * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
7 *
8 */
9
10require_once dirname(__FILE__)."/Graph.class.php";
11
12/**
13 * All patterns must derivate from this class
14 *
15 * @package Artichow
16 */
17abstract class awPattern {
18
19	/**
20	 * Pattern arguments
21	 *
22	 * @var array
23	 */
24	protected $args = array();
25
26	/**
27	 * Load a pattern
28	 *
29	 * @param string $pattern Pattern name
30	 * @return Component
31	 */
32	public static function get($pattern) {
33
34		$file = ARTICHOW_PATTERN.DIRECTORY_SEPARATOR.$pattern.'.php';
35
36		if(is_file($file)) {
37
38			require_once $file;
39
40			$class = $pattern.'Pattern';
41
42			if(class_exists($class)) {
43				return new $class;
44			} else {
45				trigger_error("Class '".$class."' does not exist", E_USER_ERROR);
46			}
47
48		} else {
49			trigger_error("Pattern '".$pattern."' does not exist", E_USER_ERROR);
50		}
51
52	}
53
54	/**
55	 * Change pattern argument
56	 *
57	 * @param string $name Argument name
58	 * @param mixed $value Argument value
59	 */
60	public function setArg($name, $value) {
61		if(is_string($name)) {
62			$this->args[$name] = $value;
63		}
64	}
65
66	/**
67	 * Get an argument
68	 *
69	 * @param string $name
70	 * @param mixed $default Default value if the argument does not exist (default to NULL)
71	 * @return mixed Argument value
72	 */
73	protected function getArg($name, $default = NULL) {
74		if(array_key_exists($name, $this->args)) {
75			return $this->args[$name];
76		} else {
77			return $default;
78		}
79	}
80
81	/**
82	 * Change several arguments
83	 *
84	 * @param array $args New arguments
85	 */
86	public function setArgs($args) {
87		if(is_array($args)) {
88			foreach($args as $name => $value) {
89				$this->setArg($name, $value);
90			}
91		}
92	}
93
94}
95
96registerClass('Pattern', TRUE);
97?>