package org.korsakow.domain.command; import java.io.File; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.dsrg.soenea.domain.MapperException; import org.dsrg.soenea.domain.command.CommandException; import org.dsrg.soenea.environment.CreationException; import org.dsrg.soenea.environment.KeyNotFoundException; import org.dsrg.soenea.uow.UoW; import org.korsakow.domain.k3.importer.K3Importer; import org.korsakow.domain.task.ITask; import org.korsakow.domain.task.IWorker; import org.korsakow.ide.DataRegistry; import org.korsakow.ide.task.AbstractTask; import org.korsakow.ide.task.Task; import org.korsakow.ide.task.TaskException; import org.korsakow.ide.task.UIWorker; import org.w3c.dom.Document; public class ImportK3Command extends AbstractCommand{ public ImportK3Command(Helper request, Helper response) { super(request, response); } public void execute() throws CommandException { try { Document document = DataRegistry.createDefaultEmptyDocument(); File datafile = File.createTempFile("korsakow", ".xml"); DataRegistry.initialize(document, datafile); String filename = request.getString("filename"); File k3file = new File(filename); final K3Importer k3Importer = new K3Importer(k3file); List<Task> importTasks = k3Importer.createImportTasks(); // importTasks.add(0, new DefaultInterfacesTask(k3Importer)); // importTasks.add(new CheckInterfacesTask(k3Importer)); List<ITask> uowTasks = new ArrayList<ITask>(); for (Task task : importTasks) uowTasks.add(new UoWTask(task)); uowTasks.add(new UoWTask(new AbstractTask() { @Override public void runTask() throws TaskException { k3Importer.getProject().setUUID(UUID.randomUUID().toString()); UoW.getCurrent().registerDirty(k3Importer.getProject()); } })); IWorker importWorker = new UIWorker(uowTasks); response.set("worker", importWorker); response.set("importer", k3Importer); // importWorker.execute(); } catch (Exception e) { throw new CommandException(e); } } /** * @deprecated this seems like a really silly thing and should be gotten rid of */ @Deprecated private static class UoWTask extends AbstractTask { private final Task innerTask; public UoWTask(Task task) { innerTask = task; } @Override public void runTask() throws TaskException, InterruptedException { if (UoW.getCurrent() == null) UoW.newCurrent(); DataRegistry.safeRollback(); innerTask.run(); try { UoW.getCurrent().commit(); } catch (SQLException e) { throw new TaskException(e); } catch (KeyNotFoundException e) { throw new TaskException(e); } catch (CreationException e) { throw new TaskException(e); } catch (MapperException e) { throw new TaskException(e); } UoW.newCurrent(); } @Override public String getTitleString() { return innerTask.getTitleString(); } } }