package com.quantum.wizards; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.CheckboxCellEditor; 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.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.TableItem; import com.quantum.ImageStore; import com.quantum.Messages; import com.quantum.model.Column; import com.quantum.model.Entity; import com.quantum.util.StringMatrix; import com.quantum.util.sql.SQLInstructionBuilder; /** * @author BC Holmes * @author Elvin E. Ebora */ public class DeleteRowPage extends BaseSQLPage implements SQLPage { class DeleteRowPageValues { private String sColNames = null; private String sValues = null; private boolean bPrimary = false; public DeleteRowPageValues() { } /** * @return Returns the bPrimary. */ public boolean isBPrimary() { return bPrimary; } /** * @param primary The bPrimary to set. */ public void setBPrimary(boolean primary) { bPrimary = primary; } /** * @return Returns the sColNames. */ public String getSColNames() { return sColNames; } /** * @param colNames The sColNames to set. */ public void setSColNames(String colNames) { sColNames = colNames; } /** * @return Returns the sValues. */ public String getSValues() { return sValues; } /** * @param values The sValues to set. */ public void setSValues(String values) { sValues = values; } } class LabelProviderImpl implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 2) { return ((DeleteRowPageValues)element).isBPrimary() ? imgCheck : imgUncheck; } else { return null; } } public String getColumnText(Object element, int columnIndex) { String sReturn = ""; DeleteRowPageValues deleteRow = (DeleteRowPageValues)element; switch (columnIndex) { case 0: // column names sReturn = deleteRow.getSColNames(); break; case 1: // values sReturn = deleteRow.getSValues(); break; case 2: // set checkbox 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 deleteTable; } 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 = comUI.getColumnNamesAsList(colNames).indexOf(property); System.out.println("colIndx : " + colIndx); Object rResult = null; DeleteRowPageValues deleteVal = (DeleteRowPageValues)element; switch (colIndx) { case 0: // column names rResult = deleteVal.getSColNames(); break; case 1: // values rResult = deleteVal.getSValues(); break; case 2: // checkbox rResult = new Boolean(deleteVal.isBPrimary()); break; default: break; } return rResult; } public void modify(Object element, String property, Object value) { int colIndx = comUI.getColumnNamesAsList(colNames).indexOf(property); TableItem item = (TableItem) element; DeleteRowPageValues deleteVal = (DeleteRowPageValues)item.getData(); switch (colIndx) { case 0: // column names break; case 1: // values deleteVal.setSValues(value.toString()); break; case 2: // checkbox deleteVal.setBPrimary(((Boolean)value).booleanValue()); break; default: break; } updateView(); updateQuery(); } } String[] columnNames; String[] colNames; Label query; DeleteRowPageValues[] deleteTable = null; CommonWizardUI comUI; TableViewer tableViewer = null; static Image imgCheck = null; static Image imgUncheck = null; static { imgCheck = ImageStore.getImage(ImageStore.CHECKED); imgUncheck = ImageStore.getImage(ImageStore.UNCHECKED); } public DeleteRowPage(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)); Entity entity = this.results.getEntity(); comUI = new CommonWizardUI(); // init values to be displayed on the table columnNames = this.results.getColumnNames(); int nLen = columnNames.length; deleteTable = new DeleteRowPageValues[nLen]; for(int nCtr=0; nCtr<nLen; nCtr++) { deleteTable[nCtr] = new DeleteRowPageValues(); deleteTable[nCtr].setSColNames(columnNames[nCtr]); Object data = this.row == null ? null : this.row.get(nCtr+1); deleteTable[nCtr].setSValues(data == null ? "" : data.toString()); Column column = (entity == null) ? null : getColumn(entity, columnNames[nCtr]); if (column != null && column.isPrimaryKey()) { deleteTable[nCtr].setBPrimary(true); } } createTable(container); query = new Label(container, SWT.WRAP); query.setLayoutData(comUI.createGridData(1, GridData.FILL)); setControl(container); updateQuery(); setPageComplete(true); } public void updateQuery() { System.out.println(Messages.getString("DeleteRowPage.UpdatingQuery")); //$NON-NLS-1$ StringMatrix key = new StringMatrix(); for (int i = 0; i < columnNames.length; i++) { if (deleteTable[i].isBPrimary()) { key.addHeader( deleteTable[i].getSColNames() ); key.add( deleteTable[i].getSValues() , 0 ); } } this.query.setText(SQLInstructionBuilder.buildDelete(this.results.getEntity(), key)); } protected String getQueryText() { return query.getText(); } private void updateView() { this.tableViewer.update(deleteTable, null); } private void createTable(Composite composite) { System.out.println("Creating table..."); Table table = comUI.createTablePage(composite); colNames = new String[] { Messages.getString("DeleteRowPage.ColumnName"), Messages.getString("DeleteRowPage.Value"), "Where" }; comUI.createTableColumn(table, colNames[0], SWT.LEFT, 0, 150); comUI.createTableColumn(table, colNames[1], SWT.LEFT, 1, 300); comUI.createTableColumn(table, colNames[2], SWT.CENTER, 2, 60); 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 txtEditorFieldValue = new TextCellEditor(table); editor[1] = txtEditorFieldValue; editor[2] = new CheckboxCellEditor(table, SWT.NULL); this.tableViewer.setCellEditors(editor); this.tableViewer.setLabelProvider(new LabelProviderImpl()); this.tableViewer.setContentProvider(new ContentProviderImpl()); this.tableViewer.setCellModifier(new CellModifierImpl()); this.tableViewer.setInput(deleteTable); } }