/**
*
*/
package net.i2geo.changeCoder;
import java.util.*;
import net.i2geo.changeCoder.changes.*;
/**
* The purpose of this class is to encode (and decode) update requests
* to (or from) the ontology server into the appropriate XML format.
*
* @author afaulhab
*
*/
public class OntoUpdateEncoder
{
/**
* Encodes a set of ChangeElements into an XML-Request
* @param changeElements - a set of ChangeElements
* @return An XML string encoding a change request
* @throws Exception
*/
public String encode(Set<ChangeRequestBase> changeElements)
throws Exception
{ // tODO: should be encoding to a writer instead
StringBuffer result = new StringBuffer();
// append header
addHeader(result);
boolean sessionCheck = false;
// convert stuff here...
for (ChangeRequestBase changeElement : changeElements) {
if (changeElement.getType() == ChangeType.Session) {
result.append(changeElement.toXML());
sessionCheck = true;
}
}
if (!sessionCheck) {
throw new Exception("No SessionElement available!!!");
}
boolean activityCheck = false;
for (ChangeRequestBase changeElement : changeElements) {
// Addition elements
if (changeElement.getType() == ChangeType.Addition) {
result.append("<Additions>\n");
result.append(changeElement.toXML());
activityCheck = true;
result.append("</Additions>\n");
} else
// modification elements
if (changeElement.getType() == ChangeType.Modification) {
result.append("<Updates>\n");
result.append(changeElement.toXML());
activityCheck = true;
result.append("</Updates>\n");
} else
// deletion elements
if (changeElement.getType() == ChangeType.Deletion) {
result.append("<Deletions>\n");
result.append(changeElement.toXML());
activityCheck = true;
result.append("</Deletions>\n");
} else
// namechange elements
if (changeElement.getType() == ChangeType.Namechange) {
result.append("<NameChange>\n");
result.append(changeElement.toXML());
activityCheck = true;
result.append("</NameChange>\n");
} else
// class change
if (changeElement.getType() == ChangeType.Classchange) {
result.append("<ClassChange>\n");
result.append(changeElement.toXML());
activityCheck = true;
result.append("</ClassChange>\n");
}
}
if (!activityCheck) {
throw new Exception("Nothing to do...");
}
// append footer
addFooter(result);
return result.toString();
}
public boolean decode(String XMLmessage)
{
// String result = "";
return false;
}
private StringBuffer addHeader(StringBuffer message)
{
String header = "<ontoUpdates\n"
+ "xmlns:gs=\"http://www.inter2geo.eu/2008/ontology/GeoSkills#\"\n"
+ "xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"
+ "xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\"\n"
+ "xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n"
+ "xmlns=\"http://www.inter2geo.eu/2008/ontology/ontoUpdates.owl#\"\n" + ">\n";
message.append(header);
return message;
}
private StringBuffer addFooter(StringBuffer message)
{
String footer = "</ontoUpdates>\n";
message.append(footer);
return message;
}
}