Thursday, July 15, 2010

Sample XML parsing

 package sample;  

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import com.sun.org.apache.xpath.internal.XPathAPI;

import java.io.FileNotFoundException;
import java.io.IOException;

public class XMLParser {

private static Element getRootElementFromXML() {
Element xmlRootElm = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(XML_FILE_PATH);
Document doc = builder.parse(is);
xmlRootElm = doc.getDocumentElement();
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException :" + e);
} catch (IOException e) {
System.out.println("IOException :" + e);
} catch (SAXException e) {
System.out.println("SAXException :" + e);
} catch (ParserConfigurationException e) {
System.out.println("ParserConfigurationException :" + e);
}
return xmlRootElm;
}

private static Element getXmlElement(Element inRootElement, String inXpath) {
NodeList list = null;
Element element = null;
try {
list = XPathAPI.selectNodeList(inRootElement.getOwnerDocument(), inXpath);
} catch (TransformerException e) {
System.out.println("Unable to read XML : " + e);
}
if (list != null && list.getLength() > 0) {
element = (Element) list.item(0);
}
return element;
}

public static void main(String[] args) {
Element rootElement = getRootElementFromXML();
/**
* below constructed xpath : //country[@name='India']//city[@name='Chennai']
**/
String xPath = "//" + "country" + "[@name='" + "India" + "']//" + "city" +
"[@name='" + "Chennai" + "']";

Element element = getXmlElement(rootElement, xPath);
System.out.println("Code of Chennai : " + element.getAttribute("code"));
}

public static final String XML_FILE_PATH = "./src/sample/Sample.xml";
}



Sample.xml

 <?xml version="1.0" encoding="UTF-8"?>  
<countries>
<country name="India">
<city name="Delhi" code="011"/>
<city name="Mumbai" code="022"/>
<city name="Kolkata" code="033"/>
<city name="Chennai" code="044"/>
</country>
<country name="USA">
<city name="SanFrancisco" code="055"/>
<city name="Newyork" code="066"/>
<city name="Washington" code="077"/>
<city name="Florida" code="088"/>
</country>
<country name="Australia">
<city name="Sydney" code="099"/>
<city name="Melbourne" code="100"/>
<city name="Adelaide" code="111"/>
<city name="Perth" code="222"/>
</country>
</countries>

Friday, June 4, 2010

Factory pattern

Factory Pattern - a type of Creational Pattern. The creational patterns deal with the best way to create instances of objects.

Sample design

 public interface IEquipment {
String getType();
}

public abstract class Equipment implements IEquipment{
public String getNumber() {
return number;
}
protected void setNumber(String number) {
this.number = number;
}
private String number;
}


public class Container extends Equipment{
public Boolean getIsReefer() {
return isReefer;
}
protected void setIsReefer(Boolean isReefer) {
this.isReefer = isReefer;
}
public String getType() {
return "Container";
}

private Boolean isReefer;
}


public class Chassis extends Equipment {
public Boolean getIsWheeled() {
return isWheeled;
}
protected void setWheeled(Boolean isWheeled) {
this.isWheeled = isWheeled;
}
public String getType() {
return "Chassis";
}

private Boolean isWheeled;
}


public class Accessory extends Equipment {
public String getDescription() {
return description;
}
protected void setDescription(String description) {
this.description = description;
}
public String getType() {
return "Accessory";
}

private String description;
}


// Factory producing Equipments
public class EquipmentFactory {
public static IEquipment createEquipment(String inEquipmentType) {
IEquipment equipment = null;
if (CONTAINER.equals(inEquipmentType)) {
equipment = new Container();
} else if (CHASSIS.equals(inEquipmentType)) {
equipment = new Chassis();
} else if (ACCESSORY.equals(inEquipmentType)) {
equipment = new Accessory();
}
return equipment;
}

private static final String CONTAINER = Container.class.getName();
private static final String CHASSIS = Chassis.class.getName();
private static final String ACCESSORY = Accessory.class.getName();
}