package agg.convert;
import agg.attribute.handler.AttrHandler;
import agg.attribute.handler.impl.javaExpr.JexHandler;
import agg.attribute.impl.AttrTupleManager;
import agg.attribute.impl.VarMember;
import agg.attribute.impl.VarTuple;
import agg.util.XMLHelper;
import agg.util.XMLObject;
import agg.xt_basis.GraGra;
import agg.xt_basis.Node;
import agg.xt_basis.NodeTypeImpl;
import agg.xt_basis.Rule;
import agg.xt_basis.Type;
import agg.xt_basis.TypeException;
public class WSDL2ggx implements XMLObject {
private GraGra gragra;
private boolean done;
public WSDL2ggx(GraGra gra) {
this.gragra = gra;
}
public boolean isSuccessful() {
return done;
}
private Node createNodeType(String name) {
NodeTypeImpl nt = (NodeTypeImpl) gragra.getTypeSet().createNodeType(true);
nt.setStringRepr(name);
try {
return gragra.getTypeSet().getTypeGraph().createNode(nt);
} catch (TypeException ex) {}
return null;
}
private void addAttr(AttrHandler attrHandler, Type nodeType, String aType, String aName) {
nodeType.getAttrType().addMember(attrHandler, aType, aName);
}
private void addVar(AttrHandler attrHandler, VarTuple varTuple, String aType, String aName, boolean inputPar) {
varTuple.getType().addMember(attrHandler, aType, aName);
VarMember var = (VarMember) varTuple.getMemberAt(aName);
var.setInputParameter(inputPar);
}
private String getJavaType(String sType) {
if (sType.startsWith("s:")) {
String str = sType.substring(2);
if (str.equals("string"))
str = "String";
return str;
}
return "";
}
@Override
public void XreadObject(XMLHelper h) {
h.push(h.top());
String tag = h.readSubTag();
System.out.println(tag);
if (tag.equals("wsdl:types")) {
this.done = true;
AttrHandler attrHandler = AttrTupleManager.getDefaultManager().getHandler(JexHandler.getLabelName());
// Node ws =
createNodeType("WebService");
if (h.readSubTag("s:schema")) {
System.out.println("s:schema");
tag = h.readSubTag();
while (tag != null && !tag.isEmpty()) {
if (tag.equals("s:element")) {
String eName = h.readAttr("name");
System.out.println(tag+" "+eName);
if (!eName.endsWith("Response")) {
Rule r = gragra.createRule();
r.setName(eName);
VarTuple vars = (VarTuple)r.getAttrContext().getVariables();
tag = h.readSubTag();
if (tag != null && tag.equals("s:complexType")) {
tag = h.readSubTag();
if (tag != null && tag.equals("s:sequence")) {
tag = h.readSubTag();
while (tag != null && tag.equals("s:element")) {
String aName = h.readAttr("name");
String sType = h.readAttr("type");
String aType = getJavaType(sType);
if (!aName.equals("") && !aType.equals("")) {
addVar(attrHandler, vars, getJavaType(sType), aName, true);
}
h.close();
tag = h.readSubTag();
}
h.close();
}
h.close();
}
r.initSignatur();
}
h.close();
}
else if (tag.equals("s:complexType")) {
String eName = h.readAttr("name");
System.out.println(tag+" "+eName);
if (!eName.startsWith("Array")) {
Node n = createNodeType(eName);
tag = h.readSubTag();
if (tag != null && tag.equals("s:sequence")) {
tag = h.readSubTag();
while (tag != null && tag.equals("s:element")) {
String aName = h.readAttr("name");
String sType = h.readAttr("type");
String aType = getJavaType(sType);
if (!aName.equals("") && !aType.equals("")) {
addAttr(attrHandler, n.getType(), getJavaType(sType), aName);
}
h.close();
tag = h.readSubTag();
}
h.close();
}
}
h.close();
}
tag = h.readSubTag();
}
h.close();
}
h.close();
}
h.close();
}
@Override
public void XwriteObject(XMLHelper h) {
// TODO Auto-generated method stub
}
}