package org.korsakow.domain.command;
import java.io.File;
import org.dsrg.soenea.domain.command.CommandException;
import org.dsrg.soenea.uow.UoW;
import org.korsakow.domain.interchange.mapper.InterchangeInputMapperFactory;
import org.korsakow.domain.interchange.mapper.input.InterchangeInterfaceInputMapper;
import org.korsakow.domain.interf.IInterface;
import org.korsakow.ide.DomHelper;
import org.korsakow.ide.util.DomUtil;
import org.korsakow.services.conversion.ConversionFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class ImportInterchangeInterfaceCommand extends AbstractCommand{
public ImportInterchangeInterfaceCommand(Helper request, Helper response) {
super(request, response);
}
public void execute()
throws CommandException {
try {
String filename = request.getString("filename");
File file = new File(filename);
Document document = DomUtil.parseXML(file);
// versions pre 22 don't include version info (sorry!)
if (!document.getDocumentElement().getTagName().equals("korsakow")) {
Element root = document.createElement("korsakow");
root.setAttribute("versionMajor", "0.0");
root.setAttribute("versionMinor", "0.0");
NodeList children = document.getChildNodes();
int length = children.getLength();
for (int i = 0; i < length; ++i) {
if (children.item(i) instanceof Element) // has happened...
root.appendChild(children.item(i));
}
document.appendChild(root);
}
ConversionFactory cf = new ConversionFactory(document);
cf.convert();
InterchangeInterfaceInputMapper interfaceInputMapper = InterchangeInputMapperFactory.createInterfaceInputMapper();
UoW.newCurrent();
IInterface interf = interfaceInputMapper.input(DomHelper.xpathAsElement(document, "//Interface"));
UoW.getCurrent().registerNew(interf);
UoW.getCurrent().commit();
UoW.newCurrent();
response.set("interface", interf);
} catch (Exception e) {
throw new CommandException(e);
}
}
}