--- /dev/null
+package net.sourceforge.phpeclipse.wizards.actions.metadata;
+
+import java.sql.SQLException;
+
+import org.eclipse.jface.wizard.WizardPage;
+
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Column;
+import com.quantum.model.Entity;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.ui.dialog.ConnectionUtil;
+import com.quantum.util.connection.NotConnectedException;
+
+/**
+ * @author BC Holmes
+ */
+public abstract class BaseSQLPage extends WizardPage implements SQLPage {
+
+    protected Row row;
+    protected Column[] columns;
+//     protected SQLResultSetResults results;
+       private ConnectionUtil connectionUtil = new ConnectionUtil();
+
+    public BaseSQLPage(String pageName) {
+        super(pageName);
+    }
+    public boolean performFinish() {
+//             Bookmark bookmark = (Bookmark) this.results.getConnectable();
+//             try {
+//                     bookmark.addQuery(getQueryText());
+//                     SQLResults sqlResults = MultiSQLServer.getInstance().execute(bookmark, 
+//                                     this.connectionUtil.getConnection(bookmark, getShell()), getQueryText());
+//                     return sqlResults == null ? false : true;
+//             } catch (SQLException e) {
+//                     SQLExceptionDialog.openException(getShell(), bookmark, e);
+//                     return false;
+//             }
+      return false;
+       }
+    
+    protected abstract String getQueryText();
+    protected void appendColumn(StringBuffer whereClause, Entity entity, String columnName, DatabaseAdapter adapter, String value) {
+        
+        if (adapter != null && entity != null && getColumn(entity, columnName) != null) {
+            Column column = getColumn(entity, columnName);
+               whereClause.append(adapter.quote(value, column.getType(), column.getTypeName()));
+        } else {
+               whereClause.append(value);
+        }
+    }
+    /**
+        * @param entity
+        * @param columnName
+        * @return
+        * @throws NotConnectedException
+        * @throws SQLException
+        */
+       protected Column getColumn(Entity entity, String columnName)  {
+               try {
+                       return entity == null ? null : entity.getColumn(columnName);
+               } catch (NotConnectedException e) {
+                       return null;
+               } catch (SQLException e) {
+                       return null;
+               }
+       }
+       public void init(Row row, Column[] columns) {
+//     this.results = results;
+               this.row = row;
+               this.columns = columns;
+    }
+}
 
 package net.sourceforge.phpeclipse.wizards.actions.metadata;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
 import net.sourceforge.phpeclipse.wizards.xml.ModelUtil;
 
+import org.eclipse.jface.wizard.WizardDialog;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
    * @see com.quantum.extensions.IDataExtension#run(org.w3c.dom.Document)
    */
   public void run(Document doc) {
-//    System.out.println(doc);
-    
-    Element root = doc.getDocumentElement();
+    //    System.out.println(doc);
 
+    Element root = doc.getDocumentElement();
     try {
       XMLToModelConverter c = new XMLToModelConverter(root);
       String name = ModelUtil.getTableName(root);
       System.out.println(name);
       Column[] cols = c.getColumns();
       for (int i = 0; i < cols.length; i++) {
-        System.out.print("Column-name: "+i+" ");
+        System.out.print("Column-name: " + i + " ");
         System.out.println(cols[i].getName());
       }
 
+      UpdateRowPage page = new UpdateRowPage(""); //$NON-NLS-1$
+      SQLRowWizard wizard = new SQLRowWizard();
+
+      List rowList = new ArrayList();
+      for (int i = 1; i < cols.length; i++) {
+        Vector row = new Vector();
+        row.addElement(cols[i].getName());
+        row.addElement(cols[i].getTypeName());
+        long precision = 0;
+        try {
+          precision = cols[i].getSize();// metaData.getPrecision(i);
+        } catch (Throwable t) {
+          // Do nothing. An exception can be generated by some very large row sizes, like BLOB in Oracle.
+          // Then getPrecision() will generate an exception. So we ignore it and go on.
+        }
+        //        if (precision == 0) {
+        //          precision = cols[i].getSize();
+        //        }
+        int scale = cols[i].getNumberOfFractionalDigits();// metaData.getScale(i);
+
+        row.addElement(new Long(precision));
+        row.addElement(new Integer(scale));
+
+        boolean nullable = cols[i].isNullable();// metaData.isNullable(i);
+        //        if (nullable == ResultSetMetaData.columnNoNulls) {
+        //          row.addElement("Not Null"); //$NON-NLS-1$
+        //        } else if (nullable == ResultSetMetaData.columnNullable) {
+        //          row.addElement("Nullable"); //$NON-NLS-1$
+        //        } else if (nullable == ResultSetMetaData.columnNullableUnknown) {
+        //          row.addElement("Nullable"); //$NON-NLS-1$
+        //        } else {
+        //          row.addElement("<Error>"); //$NON-NLS-1$
+        //        }
+        if (nullable) {
+          row.addElement("Nullable"); //$NON-NLS-1$
+        } else {
+          row.addElement("<Error>"); //$NON-NLS-1$
+        }
+        //        row.addElement(metaData.isAutoIncrement(i) ? Boolean.TRUE : Boolean.FALSE);
+        rowList.add(new Row(row));
+        row.addElement(new Integer(cols[i].getType()));// metaData.getColumnType(i)));
+      }
+
+      Row rrow = new Row(rowList);
+      wizard.init(Messages.getString("TableView.UpdateRow"), page, rrow, cols); //$NON-NLS-1$
+      WizardDialog dialog = new WizardDialog(null, wizard);
+      dialog.open();
+
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
 
-}
\ No newline at end of file
+}
+
 
--- /dev/null
+package net.sourceforge.phpeclipse.wizards.actions.metadata;
+
+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.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Column;
+import com.quantum.model.Entity;
+import com.quantum.util.StringMatrix;
+
+/**
+ * @author BC Holmes
+ * @author Elvin E. Ebora
+ */
+public class UpdateRowPage extends BaseSQLPage implements SQLPage {
+
+  class UpdateRowTableValues {
+    private String sColNames = null;
+
+    private String sOldValue = null;
+
+    private boolean bPrimary = false;
+
+    private String sNewValue = null;
+
+    private boolean bSetValue = false;
+
+    public UpdateRowTableValues() {
+    }
+
+    /**
+     * @return Returns the bSetValue.
+     */
+    public boolean isBSetValue() {
+      return bSetValue;
+    }
+
+    /**
+     * @param setValue
+     *          The bSetValue to set.
+     */
+    public void setBSetValue(boolean setValue) {
+      bSetValue = setValue;
+    }
+
+    /**
+     * @return Returns the bPrimary.
+     */
+    public boolean isBPrimary() {
+      return bPrimary;
+    }
+
+    /**
+     * @param where
+     *          The bPrimary to set.
+     */
+    public void setBPrimary(boolean where) {
+      bPrimary = where;
+    }
+
+    /**
+     * @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 sNewValue.
+     */
+    public String getSNewValue() {
+      return sNewValue;
+    }
+
+    /**
+     * @param newValue
+     *          The sNewValue to set.
+     */
+    public void setSNewValue(String newValue) {
+      sNewValue = newValue;
+    }
+
+    /**
+     * @return Returns the sOldValue.
+     */
+    public String getSOldValue() {
+      return sOldValue;
+    }
+
+    /**
+     * @param oldValue
+     *          The sOldValue to set.
+     */
+    public void setSOldValue(String oldValue) {
+      sOldValue = oldValue;
+    }
+  }
+
+  class LabelProviderImpl implements ITableLabelProvider {
+    public Image getColumnImage(Object element, int columnIndex) {
+      if (columnIndex == 2) {
+        return ((UpdateRowTableValues) element).isBPrimary() ? imgCheck : imgUncheck;
+      } else if (columnIndex == 4) {
+        return ((UpdateRowTableValues) element).isBSetValue() ? imgCheck : imgUncheck;
+      } else {
+        return null;
+      }
+    }
+
+    public String getColumnText(Object element, int columnIndex) {
+      String sReturn = "";
+      UpdateRowTableValues updateRow = (UpdateRowTableValues) element;
+      switch (columnIndex) {
+      case 0: // column names
+        sReturn = updateRow.getSColNames();
+        break;
+      case 1: // old values
+        sReturn = updateRow.getSOldValue();
+        break;
+      case 2: // set checkbox
+        break;
+      case 3: // new value
+        sReturn = updateRow.getSNewValue();
+        break;
+      case 4: // set value 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 updateTable;
+    }
+
+    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;
+      UpdateRowTableValues updateVal = (UpdateRowTableValues) element;
+
+      switch (colIndx) {
+      case 0: // column names
+        rResult = updateVal.getSColNames();
+        break;
+      case 1: // old values
+        rResult = updateVal.getSOldValue();
+        break;
+      case 2: // set checkbox
+        rResult = new Boolean(updateVal.isBPrimary());
+        break;
+      case 3: // new value
+        rResult = updateVal.getSNewValue();
+        break;
+      case 4: // set value checkbox
+        rResult = new Boolean(updateVal.isBSetValue());
+        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;
+      UpdateRowTableValues updateVal = (UpdateRowTableValues) item.getData();
+
+      switch (colIndx) {
+      case 0: // column names
+        break;
+      case 1: // old values
+        break;
+      case 2: // set checkbox
+        updateVal.setBPrimary(((Boolean) value).booleanValue());
+        break;
+      case 3: // new value
+        updateVal.setSNewValue(value.toString());
+        break;
+      case 4: // set value checkbox
+        updateVal.setBSetValue(((Boolean) value).booleanValue());
+        break;
+      default:
+        break;
+      }
+
+      updateView();
+      updateQuery();
+    }
+  }
+
+  String[] columnNames;
+
+  String[] colNames;
+
+  Text query;
+
+  UpdateRowTableValues[] updateTable = 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 UpdateRowPage(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 = this.columns.length;
+    columnNames = new String[nLen];
+    for (int i = 0; i < this.columns.length; i++) {
+      columnNames[i] = this.columns[i].getName();
+    }
+    updateTable = new UpdateRowTableValues[nLen];
+
+    for (int nCtr = 0; nCtr < nLen; nCtr++) {
+      updateTable[nCtr] = new UpdateRowTableValues();
+      updateTable[nCtr].setSColNames(columnNames[nCtr]);
+      Object data = this.row == null ? null : this.row.get(nCtr + 1);
+      updateTable[nCtr].setSOldValue(data == null ? "" : data.toString());
+      Column column = null; //(entity == null) ? null : getColumn(entity, columnNames[nCtr]);
+      if (column != null && column.isPrimaryKey()) {
+        updateTable[nCtr].setBPrimary(true);
+      }
+      updateTable[nCtr].setSNewValue(data == null ? "" : data.toString());
+    }
+
+    createTable(container);
+
+    //query = new Label(container, SWT.WRAP);
+    query = new Text(container, SWT.V_SCROLL | SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
+    query.setLayoutData(comUI.createGridData(1, 10, GridData.FILL));
+    query.setVisible(false);
+
+    setControl(container);
+    //updateQuery();
+
+    setPageComplete(true);
+  }
+
+  public void updateQuery() {
+    System.out.println("Updating query"); //$NON-NLS-1$
+    query.setVisible(true);
+
+    StringMatrix columns = new StringMatrix();
+    for (int i = 0; i < columnNames.length; i++) {
+      if (updateTable[i].isBSetValue()) {
+        columns.addHeader(updateTable[i].getSColNames());
+        columns.add(updateTable[i].getSNewValue(), 0);
+      }
+    }
+    StringMatrix key = new StringMatrix();
+    for (int i = 0; i < columnNames.length; i++) {
+      if (updateTable[i].isBPrimary()) {
+        key.addHeader(updateTable[i].getSColNames());
+        // It's an old value because it't the key.
+        key.add(updateTable[i].getSOldValue(), 0);
+      }
+    }
+    //         Bookmark bookmark = (Bookmark) this.results.getConnectable();
+    //         DatabaseAdapter adapter = bookmark.getAdapter();
+    //         this.query.setText(adapter.buildUpdate(this.results.getEntity(), columns, key));
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see com.quantum.wizards.BaseSQLPage#getQueryText()
+   */
+  protected String getQueryText() {
+    return query.getText();
+  }
+
+  private void updateView() {
+    this.tableViewer.update(updateTable, null);
+  }
+
+  private void createTable(Composite composite) {
+    System.out.println("Creating table...");
+    Table table = comUI.createTablePage(composite);
+    colNames = new String[] {
+        Messages.getString("UpdateRowPage.ColumnName"),
+        Messages.getString("UpdateRowPage.OldValue"),
+        "Where",
+        Messages.getString("UpdateRowPage.NewValue"),
+        Messages.getString("UpdateRowPage.SetValue") };
+
+    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);
+    comUI.createTableColumn(table, colNames[3], SWT.LEFT, 3, 300);
+    comUI.createTableColumn(table, colNames[4], SWT.CENTER, 4, 70);
+    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 txtEditorFieldOld = new TextCellEditor(table);
+    txtEditorFieldOld.getControl().setEnabled(false);
+    editor[1] = txtEditorFieldOld;
+
+    editor[2] = new CheckboxCellEditor(table, SWT.NULL);
+
+    TextCellEditor txtEditorValues = new TextCellEditor(table);
+    editor[3] = txtEditorValues;
+
+    editor[4] = 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(updateTable);
+  }
+
+}
\ No newline at end of file