/*******************************************************************************
* Copyright (c) 2007-2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.ui.wizard;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.hibernate.eclipse.console.model.IReverseEngineeringDefinition;
import org.hibernate.eclipse.console.model.ITableFilter;
import org.hibernate.eclipse.console.model.impl.ReverseEngineeringDefinitionImpl;
import org.jboss.tools.seam.core.SeamCoreMessages;
import org.jboss.tools.seam.ui.views.DBTableFilterView;
/**
* The page for selection table filters.
* @author Dmitry Geraskov
*/
public class SeamGenerateEntitiesTablesWizardPage extends WizardPage /*implements ISelectionChangedListener*/ {
public static final String pageName = "seam.generate.entities.tablesPage"; //$NON-NLS-1$
private String cfgName;
private IReverseEngineeringDefinition model;
public SeamGenerateEntitiesTablesWizardPage() {
super(pageName, SeamCoreMessages.GENERATE_SEAM_ENTITIES_WIZARD_TITLE, null);
setMessage("Select Tables"); //$NON-NLS-1$
}
public void createControl(Composite parent) {
setPageComplete(true);
Composite top = new Composite(parent, SWT.NONE);
top.setLayout(new FillLayout());
final DBTableFilterView tfView = new DBTableFilterView(top, SWT.NONE){
@Override
protected String getConsoleConfigurationName() {
return cfgName;
}
};
model = new ReverseEngineeringDefinitionImpl();
tfView.setModel(model);
if (getWizard().getContainer() instanceof WizardDialog){
WizardDialog wd = (WizardDialog) getWizard().getContainer();
wd.addPageChangedListener(new IPageChangedListener(){
//set console configuration as treeViewer input
public void pageChanged(PageChangedEvent event) {
if (event.getSelectedPage() == SeamGenerateEntitiesTablesWizardPage.this){
SeamGenerateEntitiesWizardPage page1 = (SeamGenerateEntitiesWizardPage)getWizard().getPreviousPage(SeamGenerateEntitiesTablesWizardPage.this);
cfgName = page1.getConsoleCongigurationName();
}
}});
}
setControl(top);
}
/*
* Get filters founded on the selected tables
*/
public String getFilters() {
StringBuilder builder = new StringBuilder();
if (model != null){
ITableFilter[] filters = model.getTableFilters();
if (filters.length == 0) return builder.toString();
builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n")//$NON-NLS-1$
.append("<!DOCTYPE hibernate-reverse-engineering PUBLIC \"-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN\"")//$NON-NLS-1$
.append(" \"http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd\" >\r\n")//$NON-NLS-1$
.append("\r\n")//$NON-NLS-1$
.append("<hibernate-reverse-engineering>\r\n");//$NON-NLS-1$
for (ITableFilter element : filters) {
builder.append(generateStringForFilter(element));
}
builder.append("</hibernate-reverse-engineering>\r\n"); //$NON-NLS-1$
}
return builder.toString();
}
private String generateStringForFilter(ITableFilter filter){
String filterStr = "<table-filter match-name=\"" + filter.getMatchName() + "\""; //$NON-NLS-1$ //$NON-NLS-2$
if (filter.getMatchSchema() != null){
filterStr += " match-schema=\"" + filter.getMatchSchema() + "\"";//$NON-NLS-1$ //$NON-NLS-2$
}
//TODO some DBs jdbc readers filters by catalog name incorrectly
if (filter.getMatchCatalog() != null){
filterStr += " match-catalog=\"" + filter.getMatchCatalog() + "\""; //$NON-NLS-1$//$NON-NLS-2$
}
if (filter.getExclude()){
filterStr += " exclude=\"true\""; //$NON-NLS-1$
}
return filterStr += "></table-filter>\r\n"; //$NON-NLS-1$
}
}