X-Git-Url: http://git.phpeclipse.com 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 index 0000000..75edc3b --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/ReferencesPropertyPage.java @@ -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