| <?php |
| /******************************************************************************* |
| * Copyright (c) 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| /* |
| * Parse the given XML file and return an array with Project objects based on its contents. |
| */ |
| function parse($file) { |
| $result = array(); |
| $doc = new DOMDocument(); |
| $doc->load($file); |
| $root = $doc->documentElement; |
| |
| foreach ($root->childNodes as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_PROJECT) != 0) continue; |
| $project = createProject($child); |
| if ($project != NULL) array_push($result, $project); |
| } |
| return $result; |
| } |
| |
| /* |
| * Create and return a Project object based on the given DOM node. |
| */ |
| function createProject($node) { |
| $project = new project(); |
| $project->id =$node->getAttribute(ATTRIBUTE_ID); |
| $project->version = $node->getAttribute(ATTRIBUTE_VERSION); |
| $status = $node->getAttribute(ATTRIBUTE_STATUS); |
| if (strcasecmp($status, VALUE_STATUS_DONE) == 0) { |
| $project->status = STATUS_DONE; |
| } |
| foreach ($node->childNodes as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_INFO) == 0) { |
| $project->info = createInfo($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_CONTACT) == 0) { |
| $project->contact = createContact($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_NOTES) == 0) { |
| $project->notes = createNotes($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_LEGAL) == 0) { |
| $project->legal[] = createLegal($child); |
| } else { |
| // TODO error |
| } |
| } |
| return $project; |
| } |
| |
| /* |
| * Create and return an Info object based on the given DOM node. |
| */ |
| function createInfo($node) { |
| $info = new info(); |
| foreach ($node->childNodes as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_NAME) == 0) { |
| $info->name = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_ORIGIN) == 0) { |
| $info->origin = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_REFERENCE) == 0) { |
| $info->reference = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_REPOSITORY) == 0) { |
| $info->repository = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_LOCATION) == 0) { |
| $info->location = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_TAG) == 0) { |
| $info->tag = getText($child); |
| } else { |
| // TODO error |
| } |
| } |
| return $info; |
| } |
| |
| /* |
| * Return the text from the given node, if any. |
| */ |
| function getText($node) { |
| foreach ($node->childNodes as $child) { |
| if ($child->nodeType != XML_TEXT_NODE) continue; |
| return $child->wholeText; |
| } |
| } |
| |
| /* |
| * Create and return a Contact object from the given DOM node. |
| */ |
| function createContact($node) { |
| $contact = new contact(); |
| foreach ($node->childNodes as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_NAME) == 0) { |
| $contact->name = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_EMAIL) == 0) { |
| $contact->email = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_COMPANY) == 0) { |
| $contact->company = getText($child); |
| } else { |
| // TODO error |
| } |
| } |
| return $contact; |
| } |
| |
| /* |
| * Return an array of strings which represent the notes contained |
| * in the given <notes> element. |
| */ |
| function createNotes($node) { |
| $result = array(); |
| $children = $node->childNodes; |
| foreach ($children as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_NOTE) != 0) continue; |
| // we have a <note> element so store the text |
| foreach ($child->childNodes as $sub) { |
| if ($sub->nodeType != XML_TEXT_NODE) continue; |
| $result[] = $sub->wholeText; |
| } |
| } |
| return $result; |
| } |
| |
| /* |
| * Create and return a Legal object based on the given node. |
| */ |
| function createLegal($node) { |
| $legal = new legal(); |
| $children = $node->childNodes; |
| foreach ($children as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_IPZILLA) == 0) { |
| $legal->ipzilla = $child->getAttribute(ATTRIBUTE_BUG_ID); |
| } else if (strcasecmp($child->nodeName, ELEMENT_LICENSE) == 0) { |
| $legal->license = createLicense($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_PACKAGE) == 0) { |
| $legal->package = getText($child); |
| } else { |
| // TODO error |
| } |
| } |
| return $legal; |
| } |
| |
| /* |
| * Create and return a License object based on the given DOM node. |
| */ |
| function createLicense($node) { |
| $license = new license(); |
| $children = $node->childNodes; |
| foreach ($children as $child) { |
| if ($child->nodeType != XML_ELEMENT_NODE) continue; |
| if (strcasecmp($child->nodeName, ELEMENT_NAME) == 0) { |
| $license->name = getText($child); |
| } else if (strcasecmp($child->nodeName, ELEMENT_REFERENCE) == 0) { |
| $license->reference = getText($child); |
| } else { |
| // TODO error |
| } |
| } |
| return $license; |
| } |
| |
| ?> |