ed36dd361417912e44808cc2b2cc268bc32a3956
[core.git] / framework / main / classes / criteria / dataset / class_DataSetCriteria.php
1 <?php
2 // Own namespace
3 namespace Org\Mxchange\CoreFramework\Criteria\DataSet;
4
5 // Import framework stuff
6 use Org\Mxchange\CoreFramework\Criteria\BaseCriteria;
7 use Org\Mxchange\CoreFramework\Criteria\Storing\StoreableCriteria;
8 use Org\Mxchange\CoreFramework\EntryPoint\ApplicationEntryPoint;
9
10 /**
11  * A set of data storeable in databases
12  *
13  * @author              Roland Haeder <webmaster@shipsimu.org>
14  * @version             0.0.0
15 <<<<<<< HEAD:framework/main/classes/criteria/dataset/class_DataSetCriteria.php
16  * @copyright   Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team
17 =======
18  * @copyright   Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2016 Core Developer Team
19 >>>>>>> Some updates::inc/main/classes/criteria/dataset/class_DataSetCriteria.php
20  * @license             GNU GPL 3.0 or any newer version
21  * @link                http://www.shipsimu.org
22  *
23  * This program is free software: you can redistribute it and/or modify
24  * it under the terms of the GNU General Public License as published by
25  * the Free Software Foundation, either version 3 of the License, or
26  * (at your option) any later version.
27  *
28  * This program is distributed in the hope that it will be useful,
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
31  * GNU General Public License for more details.
32  *
33  * You should have received a copy of the GNU General Public License
34  * along with this program. If not, see <http://www.gnu.org/licenses/>.
35  */
36 class DataSetCriteria extends BaseCriteria implements StoreableCriteria {
37         /**
38          * Table name
39          */
40         private $tableName = '';
41
42         /**
43          * Unique key
44          */
45         private $uniqueKey = '';
46
47         /**
48          * Primary key
49          */
50         private $primaryKey = '';
51
52         /**
53          * Primary keys
54          */
55         private $primaryKeys = array();
56
57         /**
58          * Protected constructor
59          *
60          * @return      void
61          */
62         protected function __construct () {
63                 // Call parent constructor
64                 parent::__construct(__CLASS__);
65         }
66
67         /**
68          * Creates an instance of this criteria
69          *
70          * @param       $tableName                      Name of the table
71          * @return      $criteriaInstance       An instance of this criteria
72          */
73         public static final function createDataSetCriteria ($tableName) {
74                 // Get a new instance
75                 $criteriaInstance = new DataSetCriteria();
76
77                 // Set table name
78                 $criteriaInstance->setTableName($tableName);
79
80                 // Return the instance
81                 return $criteriaInstance;
82         }
83
84         /**
85          * Setter for table name
86          *
87          * @param       $tableName      Name of the table to set
88          * @return      void
89          */
90         public final function setTableName ($tableName) {
91                 $this->tableName = (string) $tableName;
92         }
93
94         /**
95          * Getter for table name
96          *
97          * @return      $tableName      Name of the table to set
98          */
99         public final function getTableName () {
100                 return $this->tableName;
101         }
102
103         /**
104          * Setter for unique key
105          *
106          * @param       $uniqueKey      Column to use as unique key
107          * @return      void
108          */
109         public final function setUniqueKey ($uniqueKey) {
110                 $this->uniqueKey = (string) $uniqueKey;
111         }
112
113         /**
114          * Getter for unique key
115          *
116          * @return      $uniqueKey      Column to use as unique key
117          */
118         public final function getUniqueKey () {
119                 return $this->uniqueKey;
120         }
121
122         /**
123          * Getter for unique key value
124          *
125          * @return      $uniqueValue    Value of the unique key
126          */
127         public final function getUniqueValue () {
128                 // Get primary key(s) first
129                 $primaryKey  = trim($this->getCriteriaElemnent($this->getPrimaryKey()));
130                 $primaryKeys = $this->getPrimaryKeys();
131
132                 // Debug message
133                 //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: tableName=' . $this->getTableName() . ',primaryKey=' . $primaryKey . ',primaryKeys()=' . count($primaryKeys));
134
135                 /*
136                  * If this is not set, this could mean a badly written frontend as
137                  * tables should always have a primary key.
138                  */
139                 if (count($primaryKeys) > 0) {
140                         /*
141                          * Init return value, this can be put all together without any
142                          * separator as it only aids as a "unique value" for generating the
143                          * "row file name".
144                          */
145                         $return = '';
146
147                         // Combination set, so get all
148                         foreach ($primaryKeys as $primaryKey) {
149                                 // Add it
150                                 $return .= trim($this->getCriteriaElemnent($primaryKey));
151                         } // END - foreach
152
153                         // Debug message
154                         //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: tableName=' . $this->getTableName() . ',return=' . $return . ' - EXIT!');
155
156                         // Return it
157                         return $return;
158                 } elseif (!empty($primaryKey)) {
159                         // Return primary key
160                         return $primaryKey;
161                 } else {
162                         // @TODO Issue a warning
163                         self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: Primary key not set for table ' . $this->getTableName() . ', please fix your table. Falling back to unique key ...');
164
165                         // Get unique key
166                         $uniqueKey = trim($this->getCriteriaElemnent($this->getUniqueKey()));
167
168                         // Debug message
169                         //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: tableName=' . $this->getTableName() . ',uniqueKey=' . $uniqueKey);
170
171                         // Is it empty, too?
172                         if (empty($uniqueKey)) {
173                                 // Bad news, nothing is "unique" by design for this table
174                                 ApplicationEntryPoint::exitApplication('Table ' . $this->getTableName() . ' has both no primary and unique key, but ' . __METHOD__ . ' was called. Please fix your table.');
175                         } else {
176                                 // Return unique key
177                                 return $uniqueKey;
178                         }
179                 }
180         }
181
182         /**
183          * Getter for primary key or unique key if not set
184          *
185          * @return      $primaryKey             Primary key or unique key if not set
186          */
187         public final function getPrimaryKey () {
188                 // Get primary key by default
189                 $primaryKey = $this->primaryKey;
190
191                 if (empty($primaryKey)) {
192                         // Get uniqueKey
193                         $primaryKey = $this->getUniqueKey();
194                 } // END - if
195
196                 // Return it
197                 return $primaryKey;
198         }
199
200         /**
201          * Setter for primary key
202          *
203          * @param       $primaryKey             Primary key to set
204          * @return      void
205          */
206         public final function setPrimaryKey ($primaryKey) {
207                 $this->primaryKey = (string) $primaryKey;
208         }
209
210         /**
211          * Setter for primary key array
212          *
213          * @param       $primaryKeys    Primary key array to set
214          * @return      void
215          */
216         public function setPrimaryKeyCombined (array $primaryKeys) {
217                 $this->primaryKeys = $primaryKeys;
218         }
219
220         /**
221          * Getter for primary keys
222          *
223          * @return      $primaryKeys    Primary key array
224          */
225         public final function getPrimaryKeys () {
226                 // Return it
227                 return $this->primaryKeys;
228         }
229
230 }