/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.hibernate.eclipse.console.wizards;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.ComboDialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.hibernate.console.ConsoleConfiguration;
import org.hibernate.eclipse.console.HibernateConsoleMessages;
import org.hibernate.eclipse.console.model.IReverseEngineeringDefinition;
import org.hibernate.eclipse.console.model.ITableFilter;
import org.hibernate.eclipse.console.model.impl.ReverseEngineeringDefinitionImpl;
import org.hibernate.eclipse.console.utils.LaunchHelper;
@SuppressWarnings("restriction")
public class TableFilterWizardPage extends WizardPage {
// TODO: clean this up to use a shared wizard model
ComboDialogField consoleConfigurationName;
private TableFilterView tfc;
private final String selectedConfiguratonName;
protected TableFilterWizardPage(String pageName, String selectedConfiguratonName) {
super( pageName );
this.selectedConfiguratonName = selectedConfiguratonName;
setTitle(HibernateConsoleMessages.TableFilterWizardPage_configure_table_filters);
setDescription(HibernateConsoleMessages.TableFilterWizardPage_specify_which_catalog);
}
public void createControl(Composite parent) {
initializeDialogUnits(parent);
final ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
Composite container = new Composite(sc, SWT.NULL);
sc.setContent(container);
//container.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_CYAN));
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 3;
layout.verticalSpacing = 10;
consoleConfigurationName = new ComboDialogField(SWT.READ_ONLY);
consoleConfigurationName.setLabelText(HibernateConsoleMessages.TableFilterWizardPage_console_configuration);
ConsoleConfiguration[] cfg = LaunchHelper.findFilteredSortedConsoleConfigs();
String[] names = new String[cfg.length];
for (int i = 0; i < cfg.length; i++) {
ConsoleConfiguration configuration = cfg[i];
names[i] = configuration.getName();
}
consoleConfigurationName.setItems(names);
consoleConfigurationName.doFillIntoGrid(container, 3);
IDialogFieldListener fieldlistener = new IDialogFieldListener() {
public void dialogFieldChanged(DialogField field) {
dialogChanged();
}
};
consoleConfigurationName.setDialogFieldListener(fieldlistener);
TreeToTableComposite tfc = createTableFilterPart( container );
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
gd.horizontalSpan=3;
tfc.setLayoutData(gd);
sc.setMinSize(container.computeSize(SWT.DEFAULT, SWT.DEFAULT));
setControl(sc);
if(selectedConfiguratonName!=null) {
consoleConfigurationName.setText(selectedConfiguratonName);
}
dialogChanged();
sc.pack();
}
private void updateWarningStatus(String message) {
setMessage(message, IMessageProvider.WARNING);
}
/**
* Ensures that contents is ok.
*/
private void dialogChanged() {
//updateButtons();
if (hasDuplicates()) {
updateWarningStatus(HibernateConsoleMessages.TableFilterWizardPage_table_filters_contains_duplicates);
return;
}
updateWarningStatus(null);
}
protected boolean hasDuplicates() {
boolean res = false;
ITableFilter[] filters = getTableFilters();
for (int i = 1; i < filters.length; i++) {
for (int j = 0; j < i; j++) {
if (filters[i].getExclude().equals(filters[j].getExclude()) &&
filters[i].getMatchCatalog().equals(filters[j].getMatchCatalog()) &&
filters[i].getMatchSchema().equals(filters[j].getMatchSchema()) &&
filters[i].getMatchName().equals(filters[j].getMatchName())) {
res = true;
break;
}
}
}
return res;
}
private TreeToTableComposite createTableFilterPart(Composite container) {
tfc = new TableFilterView(container, SWT.NULL){
protected String getConsoleConfigurationName() {
return consoleConfigurationName.getText();
}
};
IReverseEngineeringDefinition model = new ReverseEngineeringDefinitionImpl();
model.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
dialogChanged();
}
});
tfc.setModel(model);
return tfc;
}
public ITableFilter[] getTableFilters() {
return tfc.getTableFilterList();
}
}