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); } public void createControl(Composite parent) { System.out.println("page create control"); //$NON-NLS-1$ 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(); int nLen = columnNames.length; insertTable = new InsertRowTableValues[nLen]; for (int nCtr=0; nCtr 0) { if (numColumns > 0) { valuesClause.append(", "); //$NON-NLS-1$ namesClause.append(", "); } appendColumn(valuesClause, entity, name, adapter, value); namesClause.append(name); numColumns++; } } String query = "INSERT INTO " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$ if (numColumns > 0) { query += " (" + namesClause + ")"; query += " VALUES " + "(" + valuesClause; //$NON-NLS-1$ query += " )"; //$NON-NLS-1$ } this.query.setText(query); } /* (non-Javadoc) * @see com.quantum.wizards.BaseSQLPage#getQueryText() */ 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); } }