3 * An AnnouncementAnswer template engine class for XML templates
5 * @author Roland Haeder <webmaster@shipsimu.org>
7 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team
8 * @license GNU GPL 3.0 or any newer version
9 * @link http://www.shipsimu.org
10 * @todo This template engine does not make use of setTemplateType()
12 * This program is free software: you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation, either version 3 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 class XmlAnnouncementAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine implements CompileableTemplate, Registerable {
27 * Some XML nodes must be available for later data extraction
29 const ANNOUNCEMENT_DATA_NODE_ID = 'my-node-id';
30 const ANNOUNCEMENT_DATA_SESSION_ID = 'my-session-id';
31 const ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH = 'my-private-key-hash';
32 const ANNOUNCEMENT_DATA_NODE_STATUS = 'my-status';
33 const ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS = 'my-external-address';
34 const ANNOUNCEMENT_DATA_INTERNAL_ADDRESS = 'my-internal-address';
37 * Protected constructor
41 protected function __construct () {
42 // Call parent constructor
43 parent::__construct(__CLASS__);
45 // Init sub-nodes array
46 $this->setSubNodes(array(
47 // These nodes don't contain any data
50 // Data from *this* node
51 self::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS,
52 self::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS,
53 self::ANNOUNCEMENT_DATA_NODE_STATUS,
54 self::ANNOUNCEMENT_DATA_SESSION_ID,
55 self::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH,
56 // Data from other node
57 'your-external-address',
58 'your-internal-address',
61 'your-private-key-hash',
62 // Answer status (generic field)
68 * Creates an instance of the class TemplateEngine and prepares it for usage
70 * @return $templateInstance An instance of TemplateEngine
71 * @throws BasePathIsEmptyException If the provided $templateBasePath is empty
72 * @throws InvalidBasePathStringException If $templateBasePath is no string
73 * @throws BasePathIsNoDirectoryException If $templateBasePath is no
74 * directory or not found
75 * @throws BasePathReadProtectedException If $templateBasePath is
78 public static final function createXmlAnnouncementAnswerTemplateEngine () {
80 $templateInstance = new XmlAnnouncementAnswerTemplateEngine();
83 $templateInstance->initXmlTemplateEngine('node', 'announcement_answer');
85 // Return the prepared instance
86 return $templateInstance;
92 * @param $resource XML parser resource (currently ignored)
93 * @param $characters Characters to handle
95 * @todo Find something useful with this!
97 public function characterHandler ($resource, $characters) {
98 // Trim all spaces away
99 $characters = trim($characters);
101 // Is this string empty?
102 if (empty($characters)) {
103 // Then skip it silently
108 * Assign the found characters to variable and use the last entry from
111 parent::assignVariable($this->getStackInstance()->getNamed('node_announcement_answer'), $characters);
115 * Getter for cache file (FQFN)
117 * @return $fqfn Full-qualified file name of the menu cache
119 public function getAnnouncementAnswerCacheFqfn () {
120 $this->partialStub('Please implement this method.');
124 * Starts the announcement-answer
128 protected function startAnnouncementAnswer () {
129 // Push the node name on the stacker
130 $this->getStackInstance()->pushNamed('node_announcement_answer', 'announcement-answer');
138 protected function startMyData () {
139 // Push the node name on the stacker
140 $this->getStackInstance()->pushNamed('node_announcement_answer', 'my-data');
144 * Starts the my-external-address
148 protected function startMyExternalAddress () {
149 // Push the node name on the stacker
150 $this->getStackInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS);
154 * Starts the my-internal-address
158 protected function startMyInternalAddress () {
159 // Push the node name on the stacker
160 $this->getStackInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS);
164 * Starts the my-session-id
168 protected function startMySessionId () {
169 // Push the node name on the stacker
170 $this->getStackInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_SESSION_ID);
174 * Starts the my-private-key-hash
178 protected function startMyPrivateKeyHash () {
179 // Push the node name on the stacker
180 $this->getStackInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH);
184 * Starts the my-status
188 protected function startMyStatus () {
189 // Push the node name on the stacker
190 $this->getStackInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_NODE_STATUS);
194 * Finishes the my-status
198 protected function finishMyStatus () {
199 // Pop the last entry
200 $this->getStackInstance()->popNamed('node_announcement_answer');
204 * Finishes the my-private-key-hash
208 protected function finishMyPrivateKeyhash () {
209 // Pop the last entry
210 $this->getStackInstance()->popNamed('node_announcement_answer');
214 * Finishes the my-session-id
218 protected function finishMySessionId () {
219 // Pop the last entry
220 $this->getStackInstance()->popNamed('node_announcement_answer');
224 * Finishes the my-internal-address
228 protected function finishMyInternalAddress () {
229 // Pop the last entry
230 $this->getStackInstance()->popNamed('node_announcement_answer');
234 * Finishes the my-external-address
238 protected function finishMyExternalAddress () {
239 // Pop the last entry
240 $this->getStackInstance()->popNamed('node_announcement_answer');
244 * Finishes the my-data
248 protected function finishMyData () {
249 // Pop the last entry
250 $this->getStackInstance()->popNamed('node_announcement_answer');
254 * Starts the your-data
258 protected function startYourData () {
259 // Push the node name on the stacker
260 $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-data');
264 * Starts the your-external-address
268 protected function startYourExternalAddress () {
269 // Push the node name on the stacker
270 $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-external-address');
274 * Starts the your-internal-address
278 protected function startYourInternalAddress () {
279 // Push the node name on the stacker
280 $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-internal-address');
284 * Starts the your-session-id
288 protected function startYourSessionId () {
289 // Push the node name on the stacker
290 $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-session-id');
294 * Starts the your-node-id
298 protected function startYourNodeId () {
299 // Push the node name on the stacker
300 $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-node-id');
304 * Starts the your-private-key-hash
308 protected function startYourPrivateKeyHash () {
309 // Push the node name on the stacker
310 $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-private-key-hash');
314 * Finishes the your-private-key-hash
318 protected function finishYourPrivateKeyHash () {
319 // Pop the last entry
320 $this->getStackInstance()->popNamed('node_announcement_answer');
324 * Finishes the your-node-id
328 protected function finishYourNodeId () {
329 // Pop the last entry
330 $this->getStackInstance()->popNamed('node_announcement_answer');
334 * Finishes the your-session-id
338 protected function finishYourSessionId () {
339 // Pop the last entry
340 $this->getStackInstance()->popNamed('node_announcement_answer');
344 * Finishes the your-internal-address
348 protected function finishYourInternalAddress () {
349 // Pop the last entry
350 $this->getStackInstance()->popNamed('node_announcement_answer');
354 * Finishes the your-external-address
358 protected function finishYourExternalAddress () {
359 // Pop the last entry
360 $this->getStackInstance()->popNamed('node_announcement_answer');
364 * Finishes the your-data
368 protected function finishYourData () {
369 // Pop the last entry
370 $this->getStackInstance()->popNamed('node_announcement_answer');
374 * Finishes the announcement-answer
378 protected function finishAnnouncementAnswer () {
379 // Pop the last entry
380 $this->getStackInstance()->popNamed('node_announcement_answer');