/*
*
*/
package captor.projectsystem.xmlgen;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import captor.lib.intl.MyIntl;
import captor.lib.util.StringUtil;
import captor.modelsystem.Model;
import captor.windowsystem.main.bodyPane.FITBodyCard;
import captor.windowsystem.main.locationPane.util.FormPath;
/**
* This class runs trough the form tree and use the forms to generate the
* XML specification data ("the source files").
*
* @author Kicho
*
*/
public class XMLGenerator {
private Model model;
private boolean build;
public XMLGenerator(Model model) {
super();
this.model = model;
build = false;
}
//-------------------------------------------------------------------------
public Vector gen(boolean build) {
this.build = build;
showMessage();
Vector v = new Vector();
if ( !toXML(v) )
return null;
return v;
}
//-------------------------------------------------------------------------
private boolean toXML(Vector v) {
JTree tree = model.getGui().getTree();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)tree.getModel().getRoot();
try {
for ( int i = 0; i < root.getChildCount(); i++ ) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) root.getChildAt(i);
String label = (String) node.getUserObject();
model.getGui().getGuiView().setConsoleView(StringUtil.formatMessage(MyIntl.VE_XMLGENERATOR_8, label));
CCBuffer out = new CCBuffer();
out.appendln("<?xml version=\"" + model.getConfig().getSystemConfig().getXmlVersion() + "\" encoding=\"" + model.getConfig().getSystemConfig().getXmlEncoding() + "\"?>");
out.newLine();
out.appendln("<formsData>");
out.newLine();
out.ident();
out.appendln("<project>");
out.ident();
out.append("<name>");
out.append(model.getProject().getName(), true);
out.appendln("</name>", true);
out.dident();
out.appendln("</project>");
out.dident();
out.newLine();
out.newLine();
out.ident();
out.appendln("<forms>");
for ( int j = 0; j < node.getChildCount(); j++ ) {
boolean flag = toXML2((DefaultMutableTreeNode) node.getChildAt(j), out);
if ( !flag )
return false;
}
out.appendln("</forms>");
out.dident();
out.newLine();
out.appendln("</formsData>");
v.add(out);
}
}
catch(CompilerException e) {
return false;
}
model.getGui().getGuiView().setConsoleView(MyIntl.VE_XMLGENERATOR_9);
if ( !build )
JOptionPane.showMessageDialog(model.getGui().getCaptorWindow(), MyIntl.MSG57);
return true;
}
//-------------------------------------------------------------------------
private boolean toXML2(DefaultMutableTreeNode root, CCBuffer out) throws CompilerException {
FormPath pp = (FormPath) root.getUserObject();
if ( pp != null ) {
FITBodyCard ife = pp.getCard();
if ( ife != null ) {
String fullpath = "<a href=\"" + pp.getFullPath() + "\">" + pp.getFullPath() + "</a>";
model.getGui().getGuiView().setConsoleView(StringUtil.formatMessage(MyIntl.VE_XMLGENERATOR_10, fullpath));
out.newLine();
out.ident();
out.appendln("<form id=\"" + pp.getFormType().getId() + "\" variant=\"" + pp.getFormType().getVariant() + "\">");
if ( !ife.validateAllFields() ) {
model.getGui().getGuiView().setErrorView(MyIntl.VE_XMLGENERATOR_4);
model.getGui().getGuiView().setErrorView(StringUtil.formatMessage(MyIntl.VE_XMLGENERATOR_5, pp.getFullPath()));
model.getGui().getGuiView().setErrorView(MyIntl.VE_XMLGENERATOR_6);
model.getGui().getGuiView().setErrorView(StringUtil.formatMessage(MyIntl.VE_XMLGENERATOR_7, ife.getErrorMsg()));
return false;
}
out.newLine();
out.ident();
out.appendln("<data>");
ife.toXML(out);
out.newLine();
out.appendln("</data>");
out.dident();
int count = root.getChildCount();
if ( count > 0 ) {
for ( int i = 0; i < count; i++ ) {
DefaultMutableTreeNode aux = (DefaultMutableTreeNode) root.getChildAt(i);
if ( !toXML2(aux, out) )
return false;
}
}
out.newLine();
out.appendln("</form>");
out.dident();
}
else {
model.getGui().getGuiView().setErrorView(MyIntl.VE_XMLGENERATOR_3);
return false;
}
}
return true;
}
//-------------------------------------------------------------------------
private void showMessage() {
model.getGui().getGuiView().setConsoleView(StringUtil.formatMessage(MyIntl.VE_XMLGENERATOR_1, model.getProject().getName()));
model.getGui().getGuiView().setConsoleView(MyIntl.VE_XMLGENERATOR_2);
}
}