xref: /plugin/combo/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaunamespace Cron;
4*37748cd8SNickeau
5*37748cd8SNickeauuse InvalidArgumentException;
6*37748cd8SNickeau
7*37748cd8SNickeau/**
8*37748cd8SNickeau * CRON field factory implementing a flyweight factory
9*37748cd8SNickeau * @link http://en.wikipedia.org/wiki/Cron
10*37748cd8SNickeau */
11*37748cd8SNickeauclass FieldFactory
12*37748cd8SNickeau{
13*37748cd8SNickeau    /**
14*37748cd8SNickeau     * @var array Cache of instantiated fields
15*37748cd8SNickeau     */
16*37748cd8SNickeau    private $fields = array();
17*37748cd8SNickeau
18*37748cd8SNickeau    /**
19*37748cd8SNickeau     * Get an instance of a field object for a cron expression position
20*37748cd8SNickeau     *
21*37748cd8SNickeau     * @param int $position CRON expression position value to retrieve
22*37748cd8SNickeau     *
23*37748cd8SNickeau     * @return FieldInterface
24*37748cd8SNickeau     * @throws InvalidArgumentException if a position is not valid
25*37748cd8SNickeau     */
26*37748cd8SNickeau    public function getField($position)
27*37748cd8SNickeau    {
28*37748cd8SNickeau        if (!isset($this->fields[$position])) {
29*37748cd8SNickeau            switch ($position) {
30*37748cd8SNickeau                case 0:
31*37748cd8SNickeau                    $this->fields[$position] = new MinutesField();
32*37748cd8SNickeau                    break;
33*37748cd8SNickeau                case 1:
34*37748cd8SNickeau                    $this->fields[$position] = new HoursField();
35*37748cd8SNickeau                    break;
36*37748cd8SNickeau                case 2:
37*37748cd8SNickeau                    $this->fields[$position] = new DayOfMonthField();
38*37748cd8SNickeau                    break;
39*37748cd8SNickeau                case 3:
40*37748cd8SNickeau                    $this->fields[$position] = new MonthField();
41*37748cd8SNickeau                    break;
42*37748cd8SNickeau                case 4:
43*37748cd8SNickeau                    $this->fields[$position] = new DayOfWeekField();
44*37748cd8SNickeau                    break;
45*37748cd8SNickeau                case 5:
46*37748cd8SNickeau                    $this->fields[$position] = new YearField();
47*37748cd8SNickeau                    break;
48*37748cd8SNickeau                default:
49*37748cd8SNickeau                    throw new InvalidArgumentException(
50*37748cd8SNickeau                        $position . ' is not a valid position'
51*37748cd8SNickeau                    );
52*37748cd8SNickeau            }
53*37748cd8SNickeau        }
54*37748cd8SNickeau
55*37748cd8SNickeau        return $this->fields[$position];
56*37748cd8SNickeau    }
57*37748cd8SNickeau}
58