blob: 737b146e9710aceb8704f5678a515048e10b2f72 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.util;
import java.util.LinkedList;
import java.util.List;
import org.MyTestCase;
import org.netbeans.installer.utils.exceptions.ParseException;
import org.netbeans.installer.utils.xml.DomExternalizable;
import org.netbeans.installer.utils.xml.DomUtil;
import org.netbeans.installer.utils.xml.visitors.DomVisitor;
import org.netbeans.installer.utils.xml.visitors.RecursiveDomVisitor;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
*
* @author Danila_Dugurov
*/
public class DomVisitorTest extends MyTestCase {
public void testSimpleVisitor() {
MyComponent component1 = new MyComponent("one", "leaf", 10);
MyComponent component2 = new MyComponent("two", "composite", 20);
MyComponent component3 = new MyComponent("three", "composite", 30);
MyComponent component4 = new MyComponent("four", "leaf", 40);
MyComponent component5 = new MyComponent("five", "leaf", 50);
final List<MyComponent> deserialized = new LinkedList<MyComponent>();
try {
final Document document = DomUtil.parseXmlFile("<components/>");
Element root = document.getDocumentElement();
DomUtil.addChild(root, component1);
DomUtil.addChild(root, component2);
DomUtil.addChild(root, component3);
DomUtil.addChild(root, component4);
DomUtil.addChild(root, component5);
DomVisitor visitor = new RecursiveDomVisitor() {
public void visit(Element element) {
if ("component".equals(element.getNodeName())) {
final MyComponent component = new MyComponent();
component.readXML(element);
deserialized.add(component);
} else
super.visit(element);
}
};
visitor.visit(document);
} catch(ParseException wontHappend) {
}
assertEquals(component1, deserialized.get(0));
assertEquals(component2, deserialized.get(1));
assertEquals(component3, deserialized.get(2));
assertEquals(component4, deserialized.get(3));
assertEquals(component5, deserialized.get(4));
System.out.println(component1);
System.out.println(component2);
System.out.println(component3);
System.out.println(component4);
System.out.println(component5);
}
}
class MyComponent implements DomExternalizable {
String name;
String type;
int cost;
public MyComponent(String name, String type, int cost) {
this.name = name;
this.type = type;
this.cost = cost;
}
public MyComponent() {
}
public void readXML(Element element) {
final RecursiveDomVisitor visitor = new RecursiveDomVisitor() {
public void visit(Element element) {
if ("name".equals(element.getNodeName())) {
name = element.getTextContent();
} else if ("type".equals(element.getNodeName())) {
type = element.getTextContent();
} else if ("cost".equals(element.getNodeName())) {
cost = Integer.parseInt(element.getTextContent());
} else super.visit(element);
}
};
visitor.visit(element);
}
public Element writeXML(Document document) {
final Element root = document.createElement("component");
Element element = document.createElement("name");
element.setTextContent(name);
root.appendChild(element);
element = document.createElement("type");
element.setTextContent(type);
root.appendChild(element);
element = document.createElement("cost");
element.setTextContent(String.valueOf(cost));
root.appendChild(element);
return root;
}
public String toString() {
return "name: " + name + " type: " + type + " cost: " + cost;
}
@Override
public boolean equals(Object other) {
if (other == null) return false;
if (other instanceof MyComponent) {
final MyComponent component = (MyComponent) other;
return component.name.equals(this.name) &&
component.type.equals(this.type) &&
component.cost == this.cost;
}//TODO: nullPointer he he.
return false;
}
@Override
public int hashCode() {
return -1;//TODO: he-he
}
}