package com.quantum.wizards;
+import java.util.Arrays;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
+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.TextCellEditor;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import com.quantum.Messages;
import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
import com.quantum.model.Entity;
+import com.quantum.sql.SQLResultSetResults;
public class InsertRowPage extends BaseSQLPage implements SQLPage {
+
+ class InsertRowTableValues {
+ private String colNames = null;
+ private String values = null;
+
+ public InsertRowTableValues() {
+ }
+ /**
+ * @return Returns the colNames.
+ */
+ public String getColNames() {
+ return colNames;
+ }
+ /**
+ * @param colNames The colNames to set.
+ */
+ public void setColNames(String colNames) {
+ this.colNames = colNames;
+ }
+ /**
+ * @return Returns the values.
+ */
+ public String getValues() {
+ return values;
+ }
+ /**
+ * @param values The values to set.
+ */
+ public void setValues(String values) {
+ this.values = values;
+ }
+ }
+
+ class LabelProviderImpl implements ITableLabelProvider {
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+ public String getColumnText(Object element, int columnIndex) {
+ String sReturn = "";
+ InsertRowTableValues insertRow = (InsertRowTableValues)element;
+ switch (columnIndex) {
+ case 0:
+ sReturn = insertRow.getColNames();
+ break;
+ case 1:
+ sReturn = insertRow.getValues();
+ break;
+ default:
+ break;
+ }
+ return sReturn;
+ }
+ public void addListener(ILabelProviderListener listener) {}
+ public void dispose() {}
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+ public void removeListener(ILabelProviderListener listener) {}
+ }
+
+ class ContentProviderImpl implements IStructuredContentProvider {
+ public Object[] getElements(Object inputElement) {
+ return insertTable;
+ }
+
+ public void dispose() {}
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
+ }
+
+ class CellModifierImpl implements ICellModifier {
+
+ public boolean canModify(Object element, String property) {
+ return true;
+ }
+
+ public Object getValue(Object element, String property) {
+ System.out.println("getValue called");
+
+ // Find the index of the column
+ int colIndx = getColumnNamesAsList(colNames).indexOf(property);
+ System.out.println("colIndx : " + colIndx);
+
+ Object rResult = null;
+ InsertRowTableValues insertVal = (InsertRowTableValues)element;
+
+ switch (colIndx) {
+ case 0:
+ rResult = insertVal.getColNames();
+ break;
+ case 1:
+ rResult = insertVal.getValues();
+ break;
+ default:
+ rResult = "";
+ break;
+ }
+
+ return rResult;
+ }
+
+ public void modify(Object element, String property, Object value) {
+ int colIndx = getColumnNamesAsList(colNames).indexOf(property);
+
+ TableItem item = (TableItem) element;
+ InsertRowTableValues insertVal = (InsertRowTableValues)item.getData();
+
+ switch (colIndx) {
+ case 0: // field names
+ break;
+ case 1: // field values
+ insertVal.setValues(value.toString());
+ updateView();
+ updateQuery();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
String[] columnNames;
+ String[] colNames;
Text[] values;
Label query;
+ InsertRowTableValues[] insertTable = null;
+ TableViewer tableViewer = null;
int numColumns = 0;
public InsertRowPage(String pageName) {
- super(pageName);
+ super(pageName);
}
public void createControl(Composite parent) {
System.out.println("page create control"); //$NON-NLS-1$
- Composite container = new Composite(parent, SWT.V_SCROLL);
- GridLayout layout = new GridLayout();
- container.setLayout(layout);
- layout.numColumns = 2;
+ Composite container = new Composite(parent, SWT.NULL);
+ container.setLayout(new GridLayout());
+ container.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+ // init values to be displayed on the table
columnNames = this.results.getColumnNames();
- values = new Text[columnNames.length];
- new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.ColumnName")); //$NON-NLS-1$
- new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.Value")); //$NON-NLS-1$
- for (int i = 0; i < columnNames.length; i++) {
- Label label = new Label(container, SWT.NULL);
- label.setText(columnNames[i]);
- values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
- gridData.widthHint = 150;
- values[i].setLayoutData(gridData);
-
- //values[i].setText(data[i]);
- values[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateQuery();
- }
- });
- }
+ int nLen = columnNames.length;
+ insertTable = new InsertRowTableValues[nLen];
+
+ for (int nCtr=0; nCtr<nLen; nCtr++) {
+ insertTable[nCtr] = new InsertRowTableValues();
+ insertTable[nCtr].setColNames(columnNames[nCtr]);
+ insertTable[nCtr].setValues("");
+ }
+
+ createTable(container);
+
query = new Label(container, SWT.WRAP);
GridData gridData = new GridData();
- gridData.horizontalSpan = layout.numColumns;
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
+ gridData.horizontalSpan = 1;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
query.setLayoutData(gridData);
setControl(container);
numColumns = 0;
for (int i = 0; i < columnNames.length; i++) {
- String name = columnNames[i];
- String value = values[i].getText();
- if (value.length() > 0) {
+ String name = insertTable[i].getColNames();
+ String value = insertTable[i].getValues();
+ if (value != null && value.length() > 0) {
if (numColumns > 0) {
valuesClause.append(", "); //$NON-NLS-1$
namesClause.append(", ");
protected String getQueryText() {
return this.query.getText();
}
+
+ private void createTable(Composite composite) {
+ System.out.println("Creating table...");
+ int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
+ Table table = new Table(composite, style);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+ table.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+
+ colNames = new String[] { Messages.getString("InsertRowPage.ColumnName"), Messages.getString("InsertRowPage.Value") };
+
+ createTableColumn(table, colNames[0], SWT.LEFT, 0, 200);
+ createTableColumn(table, colNames[1], SWT.LEFT, 1, 500);
+ this.tableViewer = new TableViewer(table);
+ this.tableViewer.setColumnProperties(colNames);
+
+ CellEditor[] editor = new CellEditor[colNames.length];
+ TextCellEditor txtEditorField = new TextCellEditor(table);
+ txtEditorField.getControl().setEnabled(false);
+ editor[0] = txtEditorField;
+
+ TextCellEditor txtEditorValues = new TextCellEditor(table);
+ editor[1] = txtEditorValues;
+
+ this.tableViewer.setCellEditors(editor);
+ this.tableViewer.setLabelProvider(new LabelProviderImpl());
+ this.tableViewer.setContentProvider(new ContentProviderImpl());
+ this.tableViewer.setCellModifier(new CellModifierImpl());
+ this.tableViewer.setInput(insertTable);
+ }
+
+ private void updateView() {
+ this.tableViewer.update(insertTable, null);
+ }
}
\ No newline at end of file