--- /dev/null
+package fr.orsay.lri.varna.applications.fragseq;
+
+import java.awt.datatransfer.DataFlavor;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Random;
+import java.util.regex.Pattern;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+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 FragSeqFileModel implements Comparable<FragSeqFileModel> {
+ private ArrayList<FragSeqModel> _models = new ArrayList<FragSeqModel>();
+ protected Date _lastModified;
+ protected boolean _outOfSync = false;
+ protected String _caption = "";
+ protected String _path = "";
+ protected String _folder = "";
+ protected boolean _cached = false;
+
+
+ public static Date lastModif(String path)
+ {
+ return new Date(new File(path).lastModified()) ;
+ }
+
+ public FragSeqFileModel(String folder, String path)
+ {
+ this(folder,path,lastModif(path));
+ }
+
+
+ private static Random _rnd = new Random();
+
+ public FragSeqFileModel(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 void load()
+ {
+ ArrayList<RNA> rnas = null;
+ try {
+ rnas = createRNAs();
+ for (RNA r: rnas)
+ {
+ this.addModel(new FragSeqRNASecStrModel(r));
+ int nb =_rnd.nextInt(5);
+ for(int i=0;i<nb;i++)
+ {
+ FragSeqAnnotationDataModel data = new FragSeqAnnotationDataModel(r.getID(),""+i+"-"+r.getID());
+ FragSeqAnnotationDataModel.addRandomAnnotations(r,data);
+ addModel(data);
+ }
+ }
+ } catch (ExceptionUnmatchedClosingParentheses e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExceptionFileFormatOrSyntax 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();
+ }
+ _cached = true;
+ }
+
+ public boolean hasChanged()
+ {
+ return _outOfSync;
+ }
+
+ public boolean checkForModifications()
+ {
+ if (!lastModif(_path).equals(_lastModified) && !_outOfSync)
+ {
+ _outOfSync = true;
+ return true;
+ }
+ return false;
+ }
+
+
+ public String toString()
+ {
+ return _caption + (this._outOfSync?"*":"");
+ }
+
+
+ public String getCaption()
+ {
+ return _caption;
+ }
+
+ public String getFolder()
+ {
+ return _folder;
+ }
+
+ public String getPath()
+ {
+ return _path;
+ }
+
+
+ public int compareTo(FragSeqFileModel o) {
+ return _caption.compareTo(o._caption);
+ }
+
+ public ArrayList<FragSeqModel> getModels()
+ {
+ if (!_cached)
+ { load(); }
+ return _models;
+ }
+ public void addModel(FragSeqModel f)
+ {
+ _models.add(f);
+ }
+
+
+ private ArrayList<RNA> createRNAs() throws ExceptionUnmatchedClosingParentheses, ExceptionFileFormatOrSyntax, FileNotFoundException, ExceptionExportFailed, ExceptionPermissionDenied, ExceptionLoadingFailed
+ {
+ Collection<RNA> r = RNAFactory.loadSecStr(_path);
+ for (RNA r2 : r)
+ {
+ r2.drawRNARadiate();
+ }
+ return new ArrayList<RNA>(r);
+ }
+
+}