package com.temenos.interaction.interaction_commands_odata;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.abdera.Abdera;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.abdera.model.Link;
import org.apache.abdera.protocol.Response.ResponseType;
import org.apache.abdera.protocol.client.AbderaClient;
import org.apache.abdera.protocol.client.ClientResponse;
import org.odata4j.core.OProperty;
import org.odata4j.edm.EdmDataServices;
import org.odata4j.format.xml.AtomFeedFormatParser;
import org.odata4j.format.xml.XmlFormatParser;
import org.odata4j.jersey.consumer.ODataJerseyConsumer;
import org.odata4j.stax2.XMLEvent2;
import org.odata4j.stax2.XMLEventReader2;
import org.odata4j.stax2.util.StaxUtil;
/**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
Abdera abdera = new Abdera();
AbderaClient client = new AbderaClient(abdera);
//Read meta data from file
/*
EdmDataServices metadata = null;
try {
InputStream is = new FileInputStream("C:/edmx.xml");
XMLEventReader2 reader = InternalUtil.newXMLEventReader(new BufferedReader(new InputStreamReader(is)));
metadata = new EdmxFormatParser().parseMetadata(reader);
} catch (IOException e) {
e.printStackTrace();
}
*/
String svcRootURI = "http://localhost:8886/JPAProducerExample.svc/";
EdmDataServices metadata = null;
ODataJerseyConsumer consumer = ODataJerseyConsumer.create(svcRootURI);
metadata = consumer.getMetadata();
/*
try {
ClientResponse resp = client.get(svcRootURI + "$metadata");
if (resp.getType() != ResponseType.SUCCESS) {
System.out.println("Unable to retrieve " + svcRootURI + "$metadata");
System.exit(1);
}
XMLEventReader2 metaDataReader = InternalUtil.newXMLEventReader(resp.getReader());
metadata = new EdmxFormatParser().parseMetadata(metaDataReader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
// ClientResponse resp = client.get("http://localhost:8080/example/rest/notes");
ClientResponse resp = client.get("http://localhost:8886/JPAProducerExample.svc/Products(49)/Order_Details");
// ClientResponse resp = client.get("http://localhost:8080/responder/rest/FlightSchedule/1");
// ClientResponse resp = client.get("http://localhost:8080/responder/rest/nomencl?$filter=language%20eq%20'en'%20and%20groupCode%20eq%20'COUNTRY'&$orderby=sortOrder,label%20asc");
if (resp.getType() == ResponseType.SUCCESS) {
Document<Feed> doc = resp.getDocument();
Feed feed = doc.getRoot();
System.out.println("Feed Title: " + feed.getTitle());
for (Entry entry : feed.getEntries()) {
System.out.println("Title: " + entry.getTitle());
System.out.println("Unique Identifier: " + entry.getBaseUri());
System.out.println("Updated Date: " + entry.getUpdated());
// Get the Links
for (Link link : entry.getLinks()) {
System.out.println("Link: " + link.getHref() + ", rel: " + link.getRel());
}
try {
// Get the OData OProperties
String dsXML = entry.getContent();
entry.getContentElement().getQName();
// odata4j only support utf-8, so assume it wants a utf-8 stream
XMLEventReader2 reader = StaxUtil.newXMLEventReader(new InputStreamReader(new ByteArrayInputStream(dsXML.getBytes("UTF-8"))));
Iterable<OProperty<?>> properties = null;
while (reader.hasNext()) {
XMLEvent2 event = reader.nextEvent();
if (event.isStartElement() && event.asStartElement().getName().equals(XmlFormatParser.M_PROPERTIES)) {
properties = AtomFeedFormatParser.parseProperties(reader, event.asStartElement(), metadata, null);
}
}
System.out.println("Content: ");
for (OProperty<?> p : properties) {
System.out.println("\t" + p.getName() + "=" + p.getValue());
}
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("-------------------");
}
} else {
System.out.println("there was an error [" + resp.getStatus() + "]");
}
}
}