diff --git a/src/main/java/common/SpecConfigTTool.java b/src/main/java/common/SpecConfigTTool.java index 464cebd6789ee0dfefdb7b0855583c2db17e31ca..204bb585db2f7c546028f5243e86fd2744ff02f1 100644 --- a/src/main/java/common/SpecConfigTTool.java +++ b/src/main/java/common/SpecConfigTTool.java @@ -1,8 +1,20 @@ package common; +import java.io.ByteArrayInputStream; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import myutil.FileUtils; import myutil.MalformedConfigurationException; +import myutil.TraceManager; public class SpecConfigTTool { public static String SystemCCodeDirectory=""; @@ -25,6 +37,9 @@ public class SpecConfigTTool { public static String AVATARExecutableSoclibCodeTraceCommand=""; public static String TMLCodeDirectory=""; + public static int lastPanel = -1; + public static int lastTab = -1; + public static void loadConfiguration() { SystemCCodeDirectory = ConfigurationTTool.SystemCCodeDirectory; SystemCCodeCompileCommand = ConfigurationTTool.SystemCCodeCompileCommand; @@ -71,9 +86,119 @@ public class SpecConfigTTool { public static void setBasicConfig(boolean systemcOn) { try { + lastPanel = -1; + lastTab = -1; ConfigurationTTool.loadConfiguration("./launch_configurations/config.xml", systemcOn); } catch (MalformedConfigurationException e) { System.out.println("Couldn't load configuration from file: config.xml"); } } + + public static File createProjectConfig(File dir) { + File base = new File("./launch_configurations/project_config.xml"); + try { + FileUtils.copyFileToDirectory(base, dir, false); + return new File(dir + File.separator + "project_config.xml"); + } catch (IOException e) { + System.err.println(e.getMessage()); + } + return null; + } + + public static void loadConfigFile(File f) throws MalformedConfigurationException { + if (!FileUtils.checkFileForOpen(f)) { + throw new MalformedConfigurationException("Filepb"); + } + + String data = FileUtils.loadFileData(f); + + if (data == null) { + throw new MalformedConfigurationException("Filepb"); + } + + loadConfigurationFromXML(data); + SpecConfigTTool.loadConfiguration(); + } + + public static void loadConfigurationFromXML(String data) throws MalformedConfigurationException { + + try { + ByteArrayInputStream bais = new ByteArrayInputStream(data.getBytes()); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + + // building nodes from xml String + Document doc = db.parse(bais); + NodeList nl; + + nl = doc.getElementsByTagName("LastOpenDiagram"); + if (nl.getLength() > 0) + LastOpenDiagram(nl); + } catch (Exception e) { + throw new MalformedConfigurationException(e.getMessage()); + } + } + + private static void LastOpenDiagram(NodeList nl) throws MalformedConfigurationException { + try { + Element elt = (Element)(nl.item(0)); + lastTab = Integer.parseInt(elt.getAttribute("tab")); + lastPanel = Integer.parseInt(elt.getAttribute("panel")); + } catch (Exception e) { + throw new MalformedConfigurationException(e.getMessage()); + } + } + + public static void saveConfiguration(File f) throws MalformedConfigurationException { + int index0, index1; + String tmp1, tmp2, location; + boolean write = false; + + if (!FileUtils.checkFileForOpen(f)) { + throw new MalformedConfigurationException("Filepb"); + } + + String data = FileUtils.loadFileData(f); + + if (data == null) { + throw new MalformedConfigurationException("Filepb"); + } + + index0 = data.indexOf("LastOpenDiagram"); + + if (index0 > -1) { + tmp1 = data.substring(0, index0+16); + tmp2 = data.substring(index0+20, data.length()); + index1 = tmp2.indexOf("/>"); + if (index1 > -1) { + tmp2 = tmp2.substring(index1, tmp2.length()); + location = " tab=\"" + lastTab; + location += "\" panel=\"" + lastPanel + "\" "; + data = tmp1 + location + tmp2; + write = true; + } + } else { + index1= data.indexOf("</PROJECTCONFIGURATION>"); + if (index1 > -1) { + location = "<LastOpenDiagram tab=\"" + lastTab; + location += "\" panel=\"" + lastPanel + "\"/>\n\n"; + data = data.substring(0, index1) + location + data.substring(index1, data.length()); + write = true; + } + } + + if (write) { + //sb.append("Writing data=" + data); + try { + FileOutputStream fos = new FileOutputStream(f); + fos.write(data.getBytes()); + fos.close(); + } catch (Exception e) { + throw new MalformedConfigurationException("Saving file failed"); + } + } else { + TraceManager.addError("Configuration could not be saved"); + } + + } } diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index 8995b931009566c5929f9f700f565bfc73312c82..3d960a124e2c581a6218d8d6d80601990967259b 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -286,6 +286,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe private File file; private File dir; + private File config; private File lotosfile; private File simfile; private File dtafile; @@ -355,7 +356,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe //PluginManager.pluginManager = new PluginManager(); } - + public void setKey(String _sk) { sk = _sk; RshClient.sk = sk; @@ -364,7 +365,10 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe public String getKey() { return sk; } - + + public File getDir() { + return dir; + } public boolean isAvatarOn() { return avatarOn; @@ -1868,6 +1872,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe //gtm.saveOperation(tcdp); file = null; dir = null; + config = null; frame.setTitle("TTool: unsaved project"); } else { // check if previous modeling is saved @@ -1935,7 +1940,23 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe } } } - + + public void saveConfig() { + int i = 0; + for (; i < tabs.size(); i++) { + if (tabs.get(i) == activetdp.tp) + break; + } + int j = tabs.get(i).getIndexOfChild(activetdp); + SpecConfigTTool.lastTab = i; + SpecConfigTTool.lastPanel = j; + try { + SpecConfigTTool.saveConfiguration(config); + } catch (MalformedConfigurationException e) { + System.err.println(e.getMessage() + " : Can't save config file."); + } + } + public String loadFile(File f) { String s = null; @@ -2339,9 +2360,16 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe SpecConfigTTool.setDirConfig(dir); String filename = dir.getAbsolutePath() + "/" + dir.getName().replaceAll(".ttool", ".xml"); file = new File(filename); + config = new File(dir.getAbsolutePath() + "/project_config.xml"); + try { + SpecConfigTTool.loadConfigFile(config); + } catch (MalformedConfigurationException e) { + System.err.println(e.getMessage() + " : Can't load config file."); + } } else { dir = null; + config = null; SpecConfigTTool.setBasicConfig(systemcOn); file = _f; } @@ -2434,9 +2462,16 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe } dir = new File(ConfigurationTTool.LastOpenFile.substring(0, last)); SpecConfigTTool.setDirConfig(dir); + config = new File(dir.getAbsolutePath() + "/project_config.xml"); + try { + SpecConfigTTool.loadConfigFile(config); + } catch (MalformedConfigurationException e) { + System.err.println(e.getMessage() + " : Can't load config file."); + } } else { dir = null; + config = null; SpecConfigTTool.setBasicConfig(systemcOn); } // close current modeling @@ -2499,7 +2534,6 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe JOptionPane.showMessageDialog(frame, "Modeling could not be correctly " + actionMessage, "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE); frame.setTitle("TToolt: unnamed project"); } - gtm.enableUndo(true); gtm.saveOperation(getCurrentSelectedPoint()); dtree.forceUpdate(); @@ -2653,6 +2687,12 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe dir = FileUtils.addFileExtensionIfMissing(dir, "ttool"); dir.mkdir(); SpecConfigTTool.setDirConfig(dir); + config = SpecConfigTTool.createProjectConfig(dir); + try { + SpecConfigTTool.loadConfigFile(config); + } catch (MalformedConfigurationException e) { + System.err.println(e.getMessage() + " : Can't load config file."); + } String newname = FileUtils.removeFileExtension(dir.getName()); file = new File(dir, newname); file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension()); @@ -2917,6 +2957,8 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe try { if (ConfigurationTTool.LastOpenFileDefined) { + if (dir != null) + saveConfig(); ConfigurationTTool.saveConfiguration(); //TraceManager.addDev("Configuration written to file"); } @@ -7016,8 +7058,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe public void paneDiplodocusMethodologyAction(ChangeEvent e) { //TraceManager.addDev("Pane design action size=" + tabs.size()); try { - - TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex()); + TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex()); //TraceManager.addDev("Pane design action 1"); if (activetdp != null) { diff --git a/src/main/java/ui/TDiagramMouseManager.java b/src/main/java/ui/TDiagramMouseManager.java index 31ca30e4ad55a34384bc8e8145a18e4c40a6e632..6abec2258a8dda5fa75834c49d09237e456ada39 100755 --- a/src/main/java/ui/TDiagramMouseManager.java +++ b/src/main/java/ui/TDiagramMouseManager.java @@ -686,6 +686,10 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen public void clearSelectComponents(){ this.selectedMultiComponents.clear(); } + + public TDiagramPanel getTdp() { + return tdp; + } // // public void removeSelectedComponentFromList(){ // this.selectedMultiComponents.clear(); diff --git a/src/main/java/ui/window/JDialogSearchBox.java b/src/main/java/ui/window/JDialogSearchBox.java index 970654be3e7e007dd0c10a45459c463e83ef3f45..0554dc05ae7f2427364bb53c40ceeb0bed66b319 100644 --- a/src/main/java/ui/window/JDialogSearchBox.java +++ b/src/main/java/ui/window/JDialogSearchBox.java @@ -810,6 +810,8 @@ public class JDialogSearchBox extends javax.swing.JFrame { dbaddress=jTextaddressDB.getText().split(":")[0]; dbport=Integer.parseInt(jTextaddressDB.getText().split(":")[1]); try { + if (tdmm.getTdp().getMainGUI().getDir() != null) + tdmm.getTdp().getMainGUI().saveConfig(); ConfigurationTTool.saveConfiguration(); } catch (MalformedConfigurationException e) { e.printStackTrace(); diff --git a/ttool/launch_configurations/project_config.xml b/ttool/launch_configurations/project_config.xml new file mode 100644 index 0000000000000000000000000000000000000000..e8e239255e977d25c507083abb751183b0c2ce38 --- /dev/null +++ b/ttool/launch_configurations/project_config.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> + +<PROJECTCONFIGURATION> + <LastOpenDiagram tab="0" panel="0"/> +</PROJECTCONFIGURATION>