--- /dev/null
+package fr.orsay.lri.varna.applications.newGUI;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.regex.Pattern;
+
+import fr.orsay.lri.varna.exceptions.ExceptionExportFailed;
+import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
+import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
+import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied;
+import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses;
+import fr.orsay.lri.varna.factories.RNAFactory;
+import fr.orsay.lri.varna.models.rna.RNA;
+
+public class VARNAGUIModel implements Comparable<VARNAGUIModel> {
+ private Date _lastModified;
+ private boolean _outOfSync = false;
+ private RNA _r = null;
+ private String _caption = "";
+ private String _path = "";
+ private String _folder = "";
+
+
+ public static Date lastModif(String path)
+ {
+ return new Date(new File(path).lastModified()) ;
+ }
+
+ public VARNAGUIModel(String folder, String path)
+ {
+ this(folder,path,lastModif(path));
+ }
+
+ public VARNAGUIModel(String folder, String path,Date lastModified)
+ {
+ _lastModified = lastModified;
+ _outOfSync = false;
+ _folder =folder;
+ _path = path;
+ String[] s = path.split(Pattern.quote(File.separator));
+ if (s.length>0)
+ _caption = s[s.length-1];
+ }
+
+ public boolean hasChanged()
+ {
+ return _outOfSync;
+ }
+
+ public boolean checkForModifications()
+ {
+ if (!lastModif(_path).equals(_lastModified) && !_outOfSync)
+ {
+ _outOfSync = true;
+ return true;
+ }
+ return false;
+ }
+
+
+ public RNA getRNA()
+ {
+ if (_r ==null)
+ {
+ try {
+ createRNA();
+ } catch (ExceptionUnmatchedClosingParentheses e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExceptionFileFormatOrSyntax e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExceptionExportFailed e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExceptionPermissionDenied e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExceptionLoadingFailed e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ return _r;
+ }
+
+ private RNA createRNA() throws ExceptionUnmatchedClosingParentheses, ExceptionFileFormatOrSyntax, FileNotFoundException, ExceptionExportFailed, ExceptionPermissionDenied, ExceptionLoadingFailed
+ {
+ Collection<RNA> r = RNAFactory.loadSecStr(_path);
+ if (r.size()>0)
+ {
+ _r = r.iterator().next();
+ _r.drawRNARadiate();
+ }
+ else
+ {
+ throw new ExceptionFileFormatOrSyntax("No valid RNA defined in this file.");
+ }
+ return _r;
+ }
+
+ public String toString()
+ {
+ return _caption + (this._outOfSync?"*":"");
+ }
+
+ public String getID()
+ {
+ return getRNA().getID();
+ }
+
+ public String getCaption()
+ {
+ return _caption;
+ }
+
+ public String getFolder()
+ {
+ return _folder;
+ }
+
+ public static DataFlavor Flavor = new DataFlavor(VARNAGUIModel.class, "VARNA Object");
+
+
+public int compareTo(VARNAGUIModel o) {
+ return _caption.compareTo(o._caption);
+}
+
+
+
+}