Changeset 727
- Timestamp:
- 06/10/07 12:28:26 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/php/net/stubbles/xml/serializer/stubXMLSerializer.php
r717 r727 27 27 * Option to define the root tag of the serialized document 28 28 */ 29 const OPT_ROOT_TAG = 1; 29 const OPT_ROOT_TAG = 'root-tag'; 30 31 /** 32 * Option to define the strategy 33 */ 34 const OPT_STRATEGY = 'strategy'; 35 36 /** 37 * Do not export any properties or methods 38 */ 39 const STRATEGY_NONE = 0; 40 41 /** 42 * export only public properties 43 */ 44 const STRATEGY_PROPS = 1; 45 46 /** 47 * export only public methods 48 */ 49 const STRATEGY_METHODS = 2; 50 51 /** 52 * export public properties and methods 53 */ 54 const STRATEGY_ALL = 3; 30 55 31 56 /** … … 36 61 private $defaultOpts = array( 37 62 self::OPT_ROOT_TAG => null, 63 self::OPT_STRATEGY => self::STRATEGY_ALL 38 64 ); 39 65 … … 56 82 // set the currently used options 57 83 $this->opts = array_merge($this->defaultOpts, $opts); 58 59 84 $this->serializeDispatcher($data, $xmlWriter, ((isset($this->opts[self::OPT_ROOT_TAG]) == true) ? ($this->opts[self::OPT_ROOT_TAG]) : (null))); 60 85 } … … 111 136 * @param stubXMLStreamWriter $xmlWriter 112 137 * @param string 138 * @todo fetch a strategy from the annotation 139 * @todo Refactor this method into smaller methods for improved readability 113 140 */ 114 141 protected function serializeObject($object, stubXMLStreamWriter $xmlWriter, $tagName) { … … 125 152 126 153 $xmlWriter->writeStartElement($tagName); 154 155 $strategy = $this->opts[self::OPT_STRATEGY]; 127 156 128 157 // export props … … 155 184 $xmlWriter->writeAttribute($xmlAttribute->getAttributeName(), (string)$propValue); 156 185 continue; 157 } 158 if ($property->hasAnnotation('XMLFragment')) { 186 } elseif ($property->hasAnnotation('XMLFragment')) { 159 187 $xmlFragment = $property->getAnnotation('XMLFragment'); 160 188 $tagName = $xmlFragment->getTagName(); … … 167 195 } 168 196 continue; 169 } 170 if ($property->hasAnnotation('XMLTag')) { 197 } elseif ($property->hasAnnotation('XMLTag')) { 171 198 $xmlTag = $property->getAnnotation('XMLTag'); 172 199 $tagName = $xmlTag->getTagName(); … … 179 206 } 180 207 } else { 208 if (($strategy & self::STRATEGY_PROPS) === 0) { 209 continue; 210 } 181 211 $tagName = $property->getName(); 182 212 } 183 213 $elementName = null; 184 214 } 185 186 215 if (is_array($propValue)) { 187 216 $this->serializeArray($propValue, $xmlWriter, $tagName, $elementName); … … 217 246 } 218 247 219 220 248 $returnValue = $method->invoke($object); 221 249 if ($method->hasAnnotation('XMLAttribute') && $method->hasAnnotation('XMLTag')) { … … 229 257 $xmlWriter->writeAttribute($xmlAttribute->getAttributeName(), (string)$returnValue); 230 258 continue; 231 } 232 if ($method->hasAnnotation('XMLFragment')) { 259 } elseif ($method->hasAnnotation('XMLFragment')) { 233 260 $xmlFragment = $method->getAnnotation('XMLFragment'); 234 261 $tagName = $xmlFragment->getTagName(); … … 241 268 } 242 269 continue; 243 } 244 if ($method->hasAnnotation('XMLTag')) { 270 } elseif ($method->hasAnnotation('XMLTag')) { 245 271 $xmlTag = $method->getAnnotation('XMLTag'); 246 272 $tagName = $xmlTag->getTagName(); … … 253 279 } 254 280 } else { 281 if (($strategy & self::STRATEGY_METHODS) === 0) { 282 continue; 283 } 255 284 $tagName = $method->getName(); 256 285 } trunk/src/test/php/net/stubbles/xml/stubXMLSerializerTestCase.php
r718 r727 6 6 * @package stubbles 7 7 * @subpackage xml_test 8 * @todo Split this into smaller test cases 8 9 */ 9 10 stubClassLoader::load('net.stubbles.xml.stubDomXMLStreamWriter', … … 431 432 432 433 /** 433 * Test serializing an object with a method matcher 434 */ 435 public function testObjectDefault() { 436 $writer = new stubDomXMLStreamWriter(); 434 * Test serializing an object without annotations and different stragies 435 * 436 * @todo Implement tests for mixing annotations with strategies 437 */ 438 public function testDefaultObjectStrategies() { 437 439 $obj = new XMLSerializerDefaultObj(); 440 441 // No strategy 442 $writer = new stubDomXMLStreamWriter(); 438 443 $this->serializer->serialize($obj, $writer); 439 444 $this->assertEqual('<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . '<XMLSerializerDefaultObj><foo>foo</foo><getBar>bar</getBar></XMLSerializerDefaultObj>', $writer->asXML()); 445 446 // STRATEGY_ALL 447 $writer = new stubDomXMLStreamWriter(); 448 $this->serializer->serialize($obj, $writer, array(stubXMLSerializer::OPT_STRATEGY => stubXMLSerializer::STRATEGY_ALL)); 449 $this->assertEqual('<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . '<XMLSerializerDefaultObj><foo>foo</foo><getBar>bar</getBar></XMLSerializerDefaultObj>', $writer->asXML()); 450 451 // STRATEGY_NONE 452 $writer = new stubDomXMLStreamWriter(); 453 $this->serializer->serialize($obj, $writer, array(stubXMLSerializer::OPT_STRATEGY => stubXMLSerializer::STRATEGY_NONE)); 454 $this->assertEqual('<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . '<XMLSerializerDefaultObj/>', $writer->asXML()); 455 456 // STRATEGY_PROPS 457 $writer = new stubDomXMLStreamWriter(); 458 $this->serializer->serialize($obj, $writer, array(stubXMLSerializer::OPT_STRATEGY => stubXMLSerializer::STRATEGY_PROPS)); 459 $this->assertEqual('<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . '<XMLSerializerDefaultObj><foo>foo</foo></XMLSerializerDefaultObj>', $writer->asXML()); 460 461 // STRATEGY_METHODS 462 $writer = new stubDomXMLStreamWriter(); 463 $this->serializer->serialize($obj, $writer, array(stubXMLSerializer::OPT_STRATEGY => stubXMLSerializer::STRATEGY_METHODS)); 464 $this->assertEqual('<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . '<XMLSerializerDefaultObj><getBar>bar</getBar></XMLSerializerDefaultObj>', $writer->asXML()); 440 465 } 441 466 }
