updates for 0.9.3
[debian/openrocket] / src / net / sf / openrocket / database / Database.java
index b7986cb7fed54abd33ead08066204860a1210b72..10857cd54fffdee06f1ec716f8fdb66b3b1c4cc7 100644 (file)
@@ -5,10 +5,6 @@ import java.io.FileInputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.security.CodeSource;
 import java.util.AbstractSet;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -24,6 +20,7 @@ import javax.swing.event.EventListenerList;
 
 import net.sf.openrocket.file.Loader;
 import net.sf.openrocket.util.ChangeSource;
+import net.sf.openrocket.util.JarUtil;
 
 
 
@@ -41,14 +38,27 @@ public class Database<T extends Comparable<T>> extends AbstractSet<T> implements
        private final List<T> list = new ArrayList<T>();
        private final EventListenerList listenerList = new EventListenerList();
        private final Loader<T> loader;
+       private final DatabaseStore<T> store;
        
        
        public Database() {
                loader = null;
+               store = null;
        }
        
        public Database(Loader<T> loader) {
                this.loader = loader;
+               this.store = null;
+       }
+       
+       public Database(DatabaseStore<T> store) {
+               this.loader = null;
+               this.store = store;
+       }
+       
+       public Database(Loader<T> loader, DatabaseStore<T> store) {
+               this.loader = loader;
+               this.store = store;
        }
        
                
@@ -76,6 +86,8 @@ public class Database<T extends Comparable<T>> extends AbstractSet<T> implements
                        index = -(index+1);
                }
                list.add(index,element);
+               if (store != null)
+                       store.elementAdded(element);
                fireChangeEvent();
                return true;
        }
@@ -182,17 +194,9 @@ public class Database<T extends Comparable<T>> extends AbstractSet<T> implements
                if (!dir.endsWith("/")) {
                        dir += "/";
                }
-
-               // Find the jar file this class is contained in and open it
-               URL jarUrl = null;
-               CodeSource codeSource = Database.class.getProtectionDomain().getCodeSource();
-               if (codeSource != null)
-                       jarUrl = codeSource.getLocation();
                
-               if (jarUrl == null) {
-                       throw new IOException("Could not find containing JAR file.");
-               }
-               File file = urlToFile(jarUrl);
+               // Find and open the jar file this class is contained in
+               File file = JarUtil.getCurrentJarFile();
                JarFile jarFile = new JarFile(file);
                
                try {
@@ -219,22 +223,6 @@ public class Database<T extends Comparable<T>> extends AbstractSet<T> implements
        }
        
        
-       static File urlToFile(URL url) {
-               URI uri;
-               try {
-                       uri = url.toURI();
-               } catch (URISyntaxException e) {
-                       try {
-                               uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), 
-                                               url.getPath(), url.getQuery(), url.getRef());
-                       } catch (URISyntaxException e1) {
-                               throw new IllegalArgumentException("Broken URL: " + url);
-                       }
-               }
-               return new File(uri);
-       }
-       
-       
        
        public void load(File file) throws IOException {
                if (loader == null) {
@@ -250,6 +238,7 @@ public class Database<T extends Comparable<T>> extends AbstractSet<T> implements
         */
        private class DBIterator implements Iterator<T> {
                private Iterator<T> iterator = list.iterator();
+               private T current = null;
                
                @Override
                public boolean hasNext() {
@@ -258,12 +247,15 @@ public class Database<T extends Comparable<T>> extends AbstractSet<T> implements
 
                @Override
                public T next() {
-                       return iterator.next();
+                       current = iterator.next();
+                       return current;
                }
 
                @Override
                public void remove() {
                        iterator.remove();
+                       if (store != null)
+                               store.elementRemoved(current);
                        fireChangeEvent();
                }
        }