1 package com.quantum.properties;
3 import java.sql.SQLException;
5 import com.quantum.ImageStore;
6 import com.quantum.Messages;
7 import com.quantum.model.Bookmark;
8 import com.quantum.model.DataType;
9 import com.quantum.model.NotConnectedException;
10 import com.quantum.view.bookmark.TreeNode;
12 import org.eclipse.jface.viewers.ILabelProviderListener;
13 import org.eclipse.jface.viewers.IStructuredContentProvider;
14 import org.eclipse.jface.viewers.ITableLabelProvider;
15 import org.eclipse.jface.viewers.TableViewer;
16 import org.eclipse.jface.viewers.Viewer;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.graphics.Image;
19 import org.eclipse.swt.layout.GridData;
20 import org.eclipse.swt.layout.GridLayout;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Control;
23 import org.eclipse.swt.widgets.Label;
24 import org.eclipse.swt.widgets.Table;
25 import org.eclipse.swt.widgets.TableColumn;
26 import org.eclipse.ui.dialogs.PropertyPage;
28 public class DataTypesPropertyPage extends PropertyPage {
30 protected Control createContents(Composite parent) {
32 Composite composite = new Composite(parent, SWT.NONE);
33 GridLayout layout = new GridLayout();
34 layout.numColumns = 2;
35 composite.setLayout(layout);
36 composite.setLayoutData(new GridData(GridData.FILL_BOTH));
38 ((TreeNode) getElement()).getBookmark();
39 createTypesArea(composite, bookmark);
48 private void createTypesArea(Composite composite, Bookmark bookmark) {
49 if (bookmark.isConnected()) {
51 DataType[] dataTypes = bookmark.getDatabase().getTypes();
52 Label label = new Label(composite, SWT.NONE);
53 label.setText(Messages.getString(getClass(), "dataTypes"));
54 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING);
55 data.horizontalSpan = 2;
56 label.setLayoutData(data);
58 Table table = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
59 table.setHeaderVisible(true);
60 GridData gridData = new GridData(GridData.FILL_BOTH);
61 gridData.horizontalSpan = 2;
62 gridData.heightHint = 200;
63 gridData.widthHint = 100;
64 table.setLayoutData(gridData);
65 for (int i = 0, length = 6; i < length; i++) {
66 TableColumn column = new TableColumn(table, SWT.NONE);
67 column.setText(Messages.getString(getClass(), "column" + i));
69 TableViewer viewer = new TableViewer(table);
70 viewer.setContentProvider(new IStructuredContentProvider() {
71 public Object[] getElements(Object inputElement) {
72 if (inputElement instanceof DataType[]) {
73 return (DataType[]) inputElement;
78 public void dispose() {
80 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
83 viewer.setLabelProvider(new ITableLabelProvider() {
84 public Image getColumnImage(Object element, int columnIndex) {
87 public String getColumnText(Object element, int columnIndex) {
89 if (element != null && element instanceof DataType) {
90 DataType dataType = (DataType) element;
91 switch (columnIndex) {
93 result = dataType.getDatabaseTypeName();
96 result = dataType.getJavaNameType();
99 result = String.valueOf(dataType.getPrecision());
102 result = dataType.getLiteralPrefix();
105 result = dataType.getLiteralSuffix();
108 result = dataType.getCreateParameters();
114 return result == null ? "" : result;
116 public void addListener(ILabelProviderListener listener) {
118 public void dispose() {
120 public boolean isLabelProperty(Object element, String property) {
123 public void removeListener(ILabelProviderListener listener) {
127 viewer.setInput(dataTypes);
129 for (int i = 0, length = table.getColumnCount(); i < length; i++) {
130 table.getColumn(i).pack();
133 } catch (SQLException e) {
134 createErrorMessage(composite, e);
135 } catch (NotConnectedException e) {
136 createErrorMessage(composite, e);
137 } catch (RuntimeException e) {
138 createErrorMessage(composite, e);
146 private void createErrorMessage(Composite composite, Exception e) {
147 Label icon = new Label(composite, SWT.NONE);
148 icon.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
149 icon.setImage(ImageStore.getImage(ImageStore.WARNING));
151 Label error = new Label(composite, SWT.NONE);
152 error.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
153 error.setText(Messages.getString(getClass(), "error")
154 + (e.getMessage() == null ? "" : "\n" + e.getMessage()));