latest quantum sources 2.3.2
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / properties / ReferencesPropertyPage.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/ReferencesPropertyPage.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/ReferencesPropertyPage.java
new file mode 100644 (file)
index 0000000..75edc3b
--- /dev/null
@@ -0,0 +1,190 @@
+package com.quantum.properties;
+
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
+import com.quantum.model.Entity;
+import com.quantum.model.ForeignKey;
+import com.quantum.model.NotConnectedException;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+public class ReferencesPropertyPage extends BaseEntityPropertyPage {
+       
+       class ColumnDetailsAdaptor {
+               private final int columnNumber;
+               private final ForeignKey foreignKey;
+
+               public ColumnDetailsAdaptor(ForeignKey foreignKey, int columnNumber) {
+                       this.foreignKey = foreignKey;
+                       this.columnNumber = columnNumber;
+               }
+               public int getColumnNumber() {
+                       return this.columnNumber;
+               }
+               public ForeignKey getForeignKey() {
+                       return this.foreignKey;
+               }
+       }
+    
+       class TableDetailsAdaptor {
+               private final ForeignKey foreignKey;
+
+               public TableDetailsAdaptor(ForeignKey foreignKey) {
+                       this.foreignKey = foreignKey;
+               }
+               public ForeignKey getForeignKey() {
+                       return this.foreignKey;
+               }
+       }
+    
+       protected void createInformationArea(Composite composite) {
+        if (!Entity.SEQUENCE_TYPE.equals(getEntity().getType())) {
+                       try {
+                               ForeignKey[] references = getEntity().getReferences();
+               
+                       Table table = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
+                   table.setHeaderVisible(true);
+                   GridData gridData = new GridData(GridData.FILL_BOTH);
+                   gridData.horizontalSpan = 2;
+                   table.setLayoutData(gridData);
+                   for (int i = 0, length = 4; i < length; i++) {
+                       TableColumn column = new TableColumn(table, SWT.NONE);
+                       column.setText(Messages.getString(getClass(), "column" + i));
+                   }
+                       
+                       TableViewer viewer = new TableViewer(table);
+                   setTableContents(viewer, references);
+                   setColumnWidths(table);
+                       } catch (NotConnectedException e) {
+                               createErrorMessage(composite, e);
+                       } catch (SQLException e) {
+                               createErrorMessage(composite, e);
+                       } catch (RuntimeException e) {
+                               createErrorMessage(composite, e);
+                       }
+        }
+       }
+
+       /**
+        * @param viewer
+        */
+       private void setTableContents(TableViewer viewer, ForeignKey[] references) {
+               viewer.setContentProvider(new IStructuredContentProvider() {
+
+                       public Object[] getElements(Object inputElement) {
+                               List list = new ArrayList();
+                               if (inputElement instanceof ForeignKey[]) {
+                                       ForeignKey[] keys = (ForeignKey[]) inputElement;
+                                       for (int i = 0, length = keys == null ? 0
+                                                       : keys.length; i < length; i++) {
+                                               list.add(new TableDetailsAdaptor(keys[i]));
+                                               for (int j = 0, columns = keys[i].getNumberOfColumns(); j < columns; j++) {
+                                                       list.add(new ColumnDetailsAdaptor(keys[i], j));
+                                               }
+                                       }
+                               }
+                               return list.toArray();
+                       }
+                       public void dispose() {
+                       }
+                       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+                       }
+               });
+               
+               viewer.setLabelProvider(new ITableLabelProvider() {
+
+                       public Image getColumnImage(Object element, int columnIndex) {
+                               if ((columnIndex == 1 || columnIndex == 2) 
+                                               && element instanceof ColumnDetailsAdaptor) {
+                                       return QuantumPlugin.getImage("column.gif");
+                               } else if ((columnIndex == 1 || columnIndex == 2) 
+                                               && element instanceof TableDetailsAdaptor) {
+                                       return QuantumPlugin.getImage("bigtable.gif");
+                               } else if ((columnIndex == 0) 
+                                               && element instanceof TableDetailsAdaptor) {
+                                       return QuantumPlugin.getImage("foreignkey.gif");
+                               } else {
+                                       return null;
+                               }
+                       }
+                       public String getColumnText(Object element, int columnIndex) {
+                               String label = null;
+                               if (element instanceof TableDetailsAdaptor) {
+                                       label = getColumnText((TableDetailsAdaptor) element,  columnIndex);
+                               } else if (element instanceof ColumnDetailsAdaptor) {
+                                               label = getColumnText((ColumnDetailsAdaptor) element,  columnIndex);
+                               }
+                               
+                               return label == null ? "" : label;
+                       }
+                       private String getColumnText(TableDetailsAdaptor adaptor,  int columnIndex) {
+                               switch (columnIndex) {
+                               case 0:
+                                       return adaptor.getForeignKey().getName();
+                               case 1:
+                                       return adaptor.getForeignKey().getLocalEntityQualifiedName();
+                               case 2:
+                                       return adaptor.getForeignKey().getForeignEntityQualifiedName();
+                               case 3:
+                                       ForeignKey key = adaptor.getForeignKey();
+                                       if (key.getDeleteRule() == DatabaseMetaData.importedKeyCascade) {
+                                               return Messages.getString(
+                                                               ReferencesPropertyPage.class, "importedKeyCascade");
+                                       } else if (key.getDeleteRule() == DatabaseMetaData.importedKeyNoAction) {
+                                                       return Messages.getString(
+                                                                       ReferencesPropertyPage.class, "importedKeyNoAction");
+                                       } else if (key.getDeleteRule() == DatabaseMetaData.importedKeyRestrict) {
+                                               return Messages.getString(
+                                                               ReferencesPropertyPage.class, "importedKeyRestrict");
+                                       } else if (key.getDeleteRule() == DatabaseMetaData.importedKeySetDefault) {
+                                               return Messages.getString(
+                                                               ReferencesPropertyPage.class, "importedKeySetDefault");
+                                       } else if (key.getDeleteRule() == DatabaseMetaData.importedKeySetNull) {
+                                               return Messages.getString(
+                                                               ReferencesPropertyPage.class, "importedKeySetNull");
+                                       } else {
+                                               return null;
+                                       }
+                               default:
+                                       return null;
+                               }
+                       }
+                       private String getColumnText(ColumnDetailsAdaptor adaptor,  int columnIndex) {
+                               switch (columnIndex) {
+                               case 1:
+                                       return adaptor.getForeignKey().getLocalColumnName(adaptor.getColumnNumber());
+                               case 2:
+                                       return adaptor.getForeignKey().getForeignColumnName(adaptor.getColumnNumber());
+                               default:
+                                       return null;
+                               }
+                       }
+                       public void addListener(ILabelProviderListener listener) {
+                       }
+                       public void dispose() {
+                       }
+                       public boolean isLabelProperty(Object element, String property) {
+                               return false;
+                       }
+                       public void removeListener(ILabelProviderListener listener) {
+                       }
+               });
+               
+               viewer.setInput(references);
+       }
+}
\ No newline at end of file