/** * Copyright 2009 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.safehaus.penrose.studio.jdbc.source.editor; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.window.Window; import org.safehaus.penrose.studio.jdbc.source.wizard.JDBCSourceFieldsWizard; import org.safehaus.penrose.studio.source.editor.SourceFieldsPage; public class JDBCSourceFieldsPage extends SourceFieldsPage { /* Table fieldTable; Button addButton; Button editButton; Button removeButton; */ public JDBCSourceFieldsPage(JDBCSourceEditor editor) { super(editor); } /* public void createFormContent(IManagedForm managedForm) { super.createFormContent(managedForm); ScrolledForm form = managedForm.getForm(); Composite body = form.getBody(); body.setLayout(new GridLayout()); Section fieldsSection = toolkit.createSection(body, Section.TITLE_BAR | Section.EXPANDED); fieldsSection.setText("Fields"); fieldsSection.setLayoutData(new GridData(GridData.FILL_BOTH)); Control fieldsControl = createFieldsControl(fieldsSection); fieldsSection.setClient(fieldsControl); refresh(); } public Composite createFieldsControl(final Composite parent) { Composite composite = toolkit.createComposite(parent); composite.setLayout(new GridLayout(2, false)); fieldTable = toolkit.createTable(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.CHECK | SWT.MULTI); fieldTable.setHeaderVisible(true); fieldTable.setLinesVisible(true); fieldTable.setLayoutData(new GridData(GridData.FILL_BOTH)); fieldTable.addMouseListener(new MouseAdapter() { public void mouseDoubleClick(MouseEvent event) { try { if (fieldTable.getSelectionCount() == 0) return; int index = fieldTable.getSelectionIndex(); TableItem item = fieldTable.getSelection()[0]; FieldConfig fieldConfig = (FieldConfig)item.getData(); String oldName = fieldConfig.getName(); PenroseClient client = server.getClient(); PartitionManagerClient partitionManagerClient = client.getPartitionManagerClient(); PartitionClient partitionClient = partitionManagerClient.getPartitionClient(partitionName); ConnectionManagerClient connectionManagerClient = partitionClient.getConnectionManagerClient(); ConnectionClient connectionClient = connectionManagerClient.getConnectionClient(sourceConfig.getConnectionName()); ConnectionConfig connectionConfig = connectionClient.getMappingConfig(); JDBCClient jdbcClient = new JDBCClient(connectionConfig.getParameters()); String catalog = sourceConfig.getParameter(JDBCSource.CATALOG); String schema = sourceConfig.getParameter(JDBCSource.SCHEMA); String table = sourceConfig.getParameter(JDBCSource.TABLE); Collection<FieldConfig> fields = jdbcClient.getColumns(catalog, schema, table); jdbcClient.close(); JDBCFieldDialog dialog = new JDBCFieldDialog(parent.getShell(), SWT.NONE); dialog.setColumns(fields); dialog.setFieldConfig(fieldConfig); dialog.open(); if (dialog.getAction() == FieldDialog.CANCEL) return; String newName = fieldConfig.getName(); if (!oldName.equals(newName)) { sourceConfig.renameFieldConfig(oldName, newName); } refresh(); fieldTable.setSelection(index); checkDirty(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } public void mouseUp(MouseEvent e) { for (int i=0; i<fieldTable.getItemCount(); i++) { TableItem item = fieldTable.getItem(i); FieldConfig fieldDefinition = (FieldConfig)item.getData(); fieldDefinition.setPrimaryKey(item.getChecked()); item.setImage(PenroseStudio.getImage(item.getChecked() ? PenroseImage.KEY : PenroseImage.NOKEY)); } checkDirty(); } }); fieldTable.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { for (int i=0; i<fieldTable.getItemCount(); i++) { TableItem item = fieldTable.getItem(i); FieldConfig fieldDefinition = (FieldConfig)item.getData(); fieldDefinition.setPrimaryKey(item.getChecked()); item.setImage(PenroseStudio.getImage(item.getChecked() ? PenroseImage.KEY : PenroseImage.NOKEY)); } checkDirty(); } }); TableColumn tc = new TableColumn(fieldTable, SWT.NONE); tc.setText("Name"); tc.setWidth(250); tc = new TableColumn(fieldTable, SWT.NONE); tc.setText("Alias"); tc.setWidth(250); tc = new TableColumn(fieldTable, SWT.NONE); tc.setText("Type"); tc.setWidth(100); Composite buttons = toolkit.createComposite(composite); buttons.setLayoutData(new GridData(GridData.FILL_VERTICAL)); buttons.setLayout(new GridLayout()); addButton = new Button(buttons, SWT.PUSH); addButton.setText("Add"); addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); addButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { try { FieldConfig fieldDefinition = new FieldConfig(); PenroseClient client = server.getClient(); PartitionManagerClient partitionManagerClient = client.getPartitionManagerClient(); PartitionClient partitionClient = partitionManagerClient.getPartitionClient(partitionName); ConnectionManagerClient connectionManagerClient = partitionClient.getConnectionManagerClient(); ConnectionClient connectionClient = connectionManagerClient.getConnectionClient(sourceConfig.getConnectionName()); ConnectionConfig connectionConfig = connectionClient.getMappingConfig(); JDBCClient jdbcClient = new JDBCClient(connectionConfig.getParameters()); String catalog = sourceConfig.getParameter(JDBCSource.CATALOG); String schema = sourceConfig.getParameter(JDBCSource.SCHEMA); String table = sourceConfig.getParameter(JDBCSource.TABLE); Collection<FieldConfig> fields = jdbcClient.getColumns(catalog, schema, table); jdbcClient.close(); JDBCFieldDialog dialog = new JDBCFieldDialog(parent.getShell(), SWT.NONE); dialog.setColumns(fields); dialog.setFieldConfig(fieldDefinition); dialog.open(); if (dialog.getAction() == FieldDialog.CANCEL) return; sourceConfig.addFieldConfig(fieldDefinition); refresh(); checkDirty(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }); editButton = new Button(buttons, SWT.PUSH); editButton.setText("Edit"); editButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); editButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { try { if (fieldTable.getSelectionCount() == 0) return; int index = fieldTable.getSelectionIndex(); TableItem item = fieldTable.getSelection()[0]; FieldConfig fieldDefinition = (FieldConfig)item.getData(); String oldName = fieldDefinition.getName(); PenroseClient client = server.getClient(); PartitionManagerClient partitionManagerClient = client.getPartitionManagerClient(); PartitionClient partitionClient = partitionManagerClient.getPartitionClient(partitionName); ConnectionManagerClient connectionManagerClient = partitionClient.getConnectionManagerClient(); ConnectionClient connectionClient = connectionManagerClient.getConnectionClient(sourceConfig.getConnectionName()); ConnectionConfig connectionConfig = connectionClient.getMappingConfig(); JDBCClient jdbcClient = new JDBCClient(connectionConfig.getParameters()); String catalog = sourceConfig.getParameter(JDBCSource.CATALOG); String schema = sourceConfig.getParameter(JDBCSource.SCHEMA); String table = sourceConfig.getParameter(JDBCSource.TABLE); Collection<FieldConfig> fields = jdbcClient.getColumns(catalog, schema, table); jdbcClient.close(); JDBCFieldDialog dialog = new JDBCFieldDialog(parent.getShell(), SWT.NONE); dialog.setColumns(fields); dialog.setFieldConfig(fieldDefinition); dialog.open(); if (dialog.getAction() == FieldDialog.CANCEL) return; String newName = fieldDefinition.getName(); if (!oldName.equals(newName)) { sourceConfig.renameFieldConfig(oldName, newName); } refresh(); fieldTable.setSelection(index); checkDirty(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }); removeButton = new Button(buttons, SWT.PUSH); removeButton.setText("Remove"); removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); removeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { try { if (fieldTable.getSelectionCount() == 0) return; TableItem items[] = fieldTable.getSelection(); for (int i=0; i<items.length; i++) { FieldConfig fieldDefinition = (FieldConfig)items[i].getData(); sourceConfig.removeFieldConfig(fieldDefinition); } refresh(); checkDirty(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }); refresh(); return composite; } public void refresh() { fieldTable.removeAll(); Collection fields = sourceConfig.getFieldConfigs(); for (Iterator i=fields.iterator(); i.hasNext(); ) { FieldConfig fieldDefinition = (FieldConfig)i.next(); TableItem item = new TableItem(fieldTable, SWT.CHECK); item.setChecked(fieldDefinition.isPrimaryKey()); item.setImage(PenroseStudio.getImage(fieldDefinition.isPrimaryKey() ? PenroseImage.KEY : PenroseImage.NOKEY)); item.setText(0, fieldDefinition.getName().equals(fieldDefinition.getOriginalName()) ? fieldDefinition.getName() : fieldDefinition.getOriginalName()); item.setText(1, fieldDefinition.getName().equals(fieldDefinition.getOriginalName()) ? "" : fieldDefinition.getName()); item.setText(2, fieldDefinition.getType()); item.setData(fieldDefinition); } } public void checkDirty() { editor.checkDirty(); } */ public void edit() throws Exception { JDBCSourceFieldsWizard wizard = new JDBCSourceFieldsWizard(); wizard.setServer(server); wizard.setPartitionName(partitionName); wizard.setSourceConfig(sourceConfig); WizardDialog dialog = new WizardDialog(editor.getSite().getShell(), wizard); dialog.setPageSize(600, 300); int rc = dialog.open(); if (rc == Window.CANCEL) return; refresh(); } }