X-Git-Url: http://secure.phpeclipse.com

diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Bookmark.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Bookmark.java
index d2dff2b..6396940 100644
--- a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Bookmark.java
+++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Bookmark.java
@@ -5,6 +5,7 @@ import java.beans.PropertyChangeSupport;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Hashtable;
@@ -28,16 +29,20 @@ import org.eclipse.jface.preference.IPreferenceStore;
  * 
  * @author root
  */
-public class Bookmark {
+public class Bookmark implements Displayable {
+	
+	public static final int SCHEMA_RULE_USE_ALL = 1;
+	public static final int SCHEMA_RULE_USE_DEFAULT = 2;
+	public static final int SCHEMA_RULE_USE_SELECTED = 3;
     
     private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
 	private String name = ""; //$NON-NLS-1$
 	private String username = ""; //$NON-NLS-1$
     private String password = ""; //$NON-NLS-1$
-    private String connect = ""; //$NON-NLS-1$
-    private String driver = ""; //$NON-NLS-1$
-    private String type = ""; //$NON-NLS-1$
-    private String driverFile = ""; //$NON-NLS-1$
+    private String connectionUrl = ""; //$NON-NLS-1$
+    private JDBCDriver driver;
+    
+    private int schemaRule = SCHEMA_RULE_USE_ALL;
     
     /**
      * A quick list is a list of favourite tables that a person might want to view
@@ -52,6 +57,7 @@ public class Bookmark {
     private boolean promptForPassword = false;
     private boolean autoCommit = true;
     private String autoCommitPreference = IQuantumConstants.autoCommitTrue;
+	private Database database;
 	
 	public Bookmark() {
         this(MultiSQLServer.getInstance());
@@ -67,12 +73,11 @@ public class Bookmark {
 		setUsername(data.getUsername());
 		setPassword(data.getPassword());
 		setConnect(data.getConnect());
-		setDriver(data.getDriver());
-		setType(data.getType());
-		setDriverFile(data.getDriverFile());
+		setJDBCDriver(data.getJDBCDriver());
         setPromptForPassword(data.getPromptForPassword());
         setAutoCommit(data.isAutoCommit());
         setAutoCommitPreference(data.getAutoCommitPreference());
+        setSchemaRule(data.getSchemaRule());
         
         this.schemas.addAll(data.schemas);
         this.quickList = new Hashtable(data.quickList);
@@ -83,23 +88,7 @@ public class Bookmark {
 	 * @return String
 	 */
 	public String getConnect() {
-		return connect;
-	}
-
-	/**
-	 * Returns the driver.
-	 * @return String
-	 */
-	public String getDriver() {
-		return driver;
-	}
-
-	/**
-	 * Returns the driverFile.
-	 * @return String
-	 */
-	public String getDriverFile() {
-		return driverFile;
+		return this.connectionUrl;
 	}
 
 	/**
@@ -107,7 +96,11 @@ public class Bookmark {
 	 * @return String
 	 */
 	public String getPassword() {
-		return password;
+		if (this.promptForPassword) {
+			return null;
+		} else {
+			return this.password;
+		}
 	}
 
 	/**
@@ -120,35 +113,13 @@ public class Bookmark {
 
 	/**
 	 * Sets the connect.
-	 * @param connect The connect to set
-	 */
-	public void setConnect(String connect) {
-		if (connect == null) {
-			connect = ""; //$NON-NLS-1$
-		}
-		this.connect = connect;
-	}
-
-	/**
-	 * Sets the driver.
-	 * @param driver The driver to set
-	 */
-	public void setDriver(String driver) {
-		if (driver == null) {
-			driver = ""; //$NON-NLS-1$
-		}
-		this.driver = driver;
-	}
-
-	/**
-	 * Sets the driverFile.
-	 * @param driverFile The driverFile to set
+	 * @param connectionUrl The connect to set
 	 */
-	public void setDriverFile(String driverFile) {
-		if (driverFile == null) {
-			driverFile = ""; //$NON-NLS-1$
+	public void setConnect(String connectionUrl) {
+		if (connectionUrl == null) {
+			connectionUrl = ""; //$NON-NLS-1$
 		}
-		this.driverFile = driverFile;
+		this.connectionUrl = connectionUrl;
 	}
 
 	/**
@@ -202,10 +173,9 @@ public class Bookmark {
 		if (name.equals("") && //$NON-NLS-1$
 		username.equals("") && //$NON-NLS-1$
 		password.equals("") && //$NON-NLS-1$
-		connect.equals("") && //$NON-NLS-1$
+		connectionUrl.equals("") && //$NON-NLS-1$
 		driver.equals("") && //$NON-NLS-1$
-		type.equals("") && //$NON-NLS-1$
-		driverFile.equals("")) { //$NON-NLS-1$
+		driver == null) {
 			return true;
 		}
 		return false;
@@ -222,28 +192,14 @@ public class Bookmark {
 		buffer.append("password=****"); //$NON-NLS-1$
 		buffer.append(", "); //$NON-NLS-1$
 		buffer.append("connect="); //$NON-NLS-1$
-		buffer.append(connect);
+		buffer.append(connectionUrl);
 		buffer.append(", "); //$NON-NLS-1$
 		buffer.append("driver="); //$NON-NLS-1$
 		buffer.append(driver);
-		buffer.append(", "); //$NON-NLS-1$
-		buffer.append("type="); //$NON-NLS-1$
-		buffer.append(type);
-		buffer.append(", "); //$NON-NLS-1$
-		buffer.append("driverFile="); //$NON-NLS-1$
-		buffer.append(driverFile);
 		buffer.append("]"); //$NON-NLS-1$
 		return buffer.toString();
 	}
 	
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
     public Connection connect(PasswordFinder passwordFinder) throws ConnectionException {
         boolean isConnected = isConnected();
         if (this.connection == null) {
@@ -284,7 +240,7 @@ public class Bookmark {
     	this.connection = connection;
     }
 
-    public void disconnect() throws ConnectionException {
+    public void disconnect() throws SQLException {
         boolean isConnected = isConnected();
         try {
             if (this.connection != null) {
@@ -292,6 +248,7 @@ public class Bookmark {
             }
         } finally {
             this.connection = null;
+            this.database = null;
             if (isConnected() != isConnected) {
                 this.propertyChangeSupport.firePropertyChange(
                     "connected", isConnected, isConnected());
@@ -312,7 +269,7 @@ public class Bookmark {
         }
     }
 
-    public void setSchemas(Schema[] schemas) {
+    public void setSchemaSelections(Schema[] schemas) {
         this.schemas.clear();
         for (int i = 0, length = (schemas == null) ? 0 : schemas.length;
             i < length;
@@ -327,17 +284,53 @@ public class Bookmark {
     /**
      * @return a list of all the schemas that have been set up.
      */
-    public Schema[] getSchemas() {
-        Set set = new HashSet();
-        set.addAll(this.schemas);
-        if (set.isEmpty()) {
-            set.add(new Schema(getAdapter().getDefaultSchema(this.username), 
-                this.username, true));
-        }
-        List list = new ArrayList(set);
+    public Schema[] getSchemaSelections() {
+        List list = new ArrayList(this.schemas);
         Collections.sort(list);
         return (Schema[]) list.toArray(new Schema[list.size()]);
     }
+    
+    public Schema[] getSchemas() throws NotConnectedException, SQLException {
+    	Schema[] schemas = null;
+    	if (useUsernameAsSchema()) {
+    		// do nothing
+    	} else if (useAllSchemas()) {
+	    	schemas = getDatabase().getSchemas();
+    	} else {
+    		schemas = verifySchemas(getSchemaSelections());
+    	}
+    	return (schemas == null || schemas.length == 0) 
+				? new Schema[] { getDefaultSchema() } 
+    			: schemas;
+    }
+
+	/**
+	 * @param schemaSelections
+	 * @return
+	 * @throws SQLException
+	 * @throws NotConnectedException
+	 */
+	private Schema[] verifySchemas(Schema[] schemaSelections) 
+			throws NotConnectedException, SQLException {
+		Schema[] schemasFromDatabase = getDatabase().getSchemas();
+		List list = Arrays.asList(schemasFromDatabase);
+		for (int i = 0, length = schemaSelections == null ? 0 : schemaSelections.length; 
+				i < length; i++) {
+			schemaSelections[i].setExists(list.contains(schemaSelections[i]));
+		}
+		return schemaSelections;
+	}
+
+	/**
+	 * @return
+	 * @throws NotConnectedException
+	 * @throws SQLException
+	 */
+	private Schema getDefaultSchema() throws NotConnectedException, SQLException {
+		String username = getDatabase().getUsername();
+		String actual = getAdapter().getDefaultSchema(username);
+		return new Schema(actual, username, true);
+	}
 
 	/**
 	 * @see java.lang.Object#equals(java.lang.Object)
@@ -363,20 +356,20 @@ public class Bookmark {
         this.propertyChangeSupport.removePropertyChangeListener(listener);
     }
 
-    public void addQuickListEntry(String type, String schemaName, String name) {
-        Entity entity = EntityFactory.getInstance().create(this, schemaName, name, type);
-        this.quickList.put(entity.getCondQualifiedName(), entity);
+    public void addQuickListEntry(String type, String schemaName, String name, boolean isSynonym) {
+        Entity entity = EntityFactory.getInstance().create(this, schemaName, name, type, isSynonym);
+        this.quickList.put(entity.getQualifiedName(), entity);
         this.propertyChangeSupport.firePropertyChange("quickList", null, null);
         this.changed = true;
     }
     
     public void addQuickListEntry(Entity entity) {
-        addQuickListEntry(entity.getType(), entity.getSchema(), entity.getName());
+        addQuickListEntry(entity.getType(), entity.getSchema(), entity.getName(), entity.isSynonym());
     }
     
     public void removeQuickListEntry(Entity entity) {
-        if (entity != null  && this.quickList.containsKey(entity.getCondQualifiedName())) {
-            this.quickList.remove(entity.getCondQualifiedName());
+        if (entity != null  && this.quickList.containsKey(entity.getQualifiedName())) {
+            this.quickList.remove(entity.getQualifiedName());
             this.propertyChangeSupport.firePropertyChange("quickList", null, null);
             this.changed = true;
         }
@@ -407,11 +400,16 @@ public class Bookmark {
         if (!isConnected()) {
             throw new NotConnectedException();
         }
-        return new Database(this);
+        if (this.database == null) {
+        	this.database = new Database(this);
+        }
+        return this.database;
     }
     
     public DatabaseAdapter getAdapter() {
-        return AdapterFactory.getInstance().getAdapter(getType());
+        return this.driver == null 
+				? null 
+				: AdapterFactory.getInstance().getAdapter(this.driver.getType());
     }
 
     public Entity[] getEntitiesForSchema(Schema schema, String type) throws SQLException {
@@ -440,7 +438,7 @@ public class Bookmark {
     }
     
     public boolean isInQuickList(Entity entity) {
-        return this.quickList.containsKey(entity.getCondQualifiedName());
+        return this.quickList.containsKey(entity.getQualifiedName());
     }
     
     /**
@@ -521,5 +519,45 @@ public class Bookmark {
 		
 		return true;	
 	}
+	
+	public void setJDBCDriver(JDBCDriver jdbcDriver) {
+		this.driver = BookmarkCollection.getInstance().findDriver(jdbcDriver);
+        this.changed = true;
+	}
+	
+	public JDBCDriver getJDBCDriver() {
+		return this.driver;
+	}
+	public boolean useAllSchemas() {
+		return this.schemaRule == SCHEMA_RULE_USE_ALL;
+	}
+	public boolean useUsernameAsSchema() {
+		return this.schemaRule == SCHEMA_RULE_USE_DEFAULT;
+	}
+	public boolean useSelectedSchemas() {
+		return this.schemaRule == SCHEMA_RULE_USE_SELECTED;
+	}
+	public int getSchemaRule() {
+		return this.schemaRule;
+	}
+	public void setSchemaRule(int schemaRule) {
+        if (this.schemaRule != schemaRule) {
+            this.schemaRule = schemaRule;
+            this.propertyChangeSupport.firePropertyChange("schemas", null, null);
+        }
+	}
+
+	public String getDisplayName() {
+		return this.name;
+	}
 
+	/**
+	 * @param query
+	 */
+	public void removeQuery(String query) {
+		if (this.queries.remove(query)) {
+	        this.propertyChangeSupport.firePropertyChange("queries", null, null);
+	        this.changed = true;
+		}
+	}
 }