/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.transformation.ui.wizards.jdg;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
import org.teiid.core.designer.util.StringUtilities;
import org.teiid.designer.core.workspace.ModelWorkspaceException;
import org.teiid.designer.transformation.materialization.MaterializedModelManager;
import org.teiid.designer.transformation.reverseeng.ReverseEngConstants;
import org.teiid.designer.transformation.ui.UiConstants;
import org.teiid.designer.transformation.ui.UiPlugin;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.designer.ui.common.util.WidgetUtil;
import org.teiid.designer.ui.common.widget.DefaultScrolledComposite;
import org.teiid.designer.ui.common.widget.Label;
import org.teiid.designer.ui.common.wizard.AbstractWizardPage;
import org.teiid.designer.ui.viewsupport.ModelProjectSelectionStatusValidator;
import org.teiid.designer.ui.viewsupport.SingleProjectOrFolderFilter;
public class MaterializationWizardPage_2 extends AbstractWizardPage implements UiConstants, ReverseEngConstants {
private boolean synchronizing;
Text packageField;
Text classNameField;
Button createPojoCB;
Button generateModuleCB;
Combo annotationTypeCombo;
Text moduleZipFileNameField;
// Button saveToFileSystemCB;
// Text fileLocationField;
// Button fileLocationBrowseButton;
Button saveToWorkspaceCB;
Label workspaceLocationLabel;
Text workspaceLocationField;
Button workspaceLocationBrowseButton;
private MaterializedModelManager manager;
public MaterializationWizardPage_2(MaterializedModelManager generator) {
super(MaterializationWizardPage_2.class.getSimpleName(), Messages.MaterializationWizardPage_2_Title);
this.manager = generator;
}
@Override
public void createControl(Composite parent) {
final Composite hostPanel = new Composite(parent, SWT.NONE);
hostPanel.setLayout(new GridLayout(1, false));
hostPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
// Create page
DefaultScrolledComposite scrolledComposite = new DefaultScrolledComposite(hostPanel);
hostPanel.setLayout(new GridLayout(1, false));
hostPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
final Composite mainPanel = scrolledComposite.getPanel();
mainPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
mainPanel.setLayout(new GridLayout(1, false));
/* This page needs to dislpay and control
*
* 1) The selected view (Label + Text)
* 2) Materialized Source model (Label + Text)
* 3)
*/
// ONLY SHOW WHEN mode == MATERIALIZE
if( !this.manager.isPojoMode() ){
this.createPojoCB = WidgetFactory.createButton(mainPanel, Messages.MaterializationWizardPage_2_GeneratePojo, SWT.NONE, 1, SWT.CHECK);
this.createPojoCB.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
manager.setCreatePojo(createPojoCB.getSelection());
validate();
setWidgetStates();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
} else {
// Throw up warning message up front
Group helpGroup = WidgetFactory.createGroup(mainPanel, "WARNING", SWT.NONE | SWT.BORDER_DASH,2); //$NON-NLS-1$
helpGroup.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
GridLayoutFactory.fillDefaults().margins(10, 2).applyTo(helpGroup);
GridDataFactory.fillDefaults().grab(true, false).applyTo(helpGroup);
{
Text warningText = new Text(helpGroup, SWT.WRAP | SWT.READ_ONLY);
warningText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
warningText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 35;
gd.horizontalSpan=3;
warningText.setLayoutData(gd);
warningText.setText(Messages.MaterializationWizardPage_2_PojoOnlyWarningMessage);
}
}
{ // ========== POJO Package and Class name info ========================
// Add widgets to page
Group theGroup = WidgetFactory.createGroup(mainPanel, Messages.MaterializationWizardPage_2_PojoDefinition, SWT.NONE, 1, 2);
theGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
((GridLayout)theGroup.getLayout()).marginLeft = 10;
((GridLayout)theGroup.getLayout()).marginRight = 10;
WidgetFactory.createLabel(theGroup, Messages.MaterializationWizardPage_2_PackageName);
this.packageField = WidgetFactory.createTextField(theGroup);
this.packageField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
((GridData)this.packageField.getLayoutData()).horizontalSpan = 1;
String name = manager.getPojoPackageName();
if( ! StringUtilities.isEmpty(name) ) {
this.packageField.setText(name);
}
this.packageField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if( synchronizing ) return;
String name = packageField.getText();
if( ! StringUtilities.isEmpty(name) ) {
manager.setPojoPackageName(name);
} else {
name = ""; //$NON-NLS-1$
manager.setPojoPackageName(name);
}
validate();
}
});
// Instruction label.
Label classNameLabel = new Label(theGroup, SWT.NULL);
classNameLabel.setText(Messages.MaterializationWizardPage_2_ClassName); //$NON-NLS-1$
classNameField = new Text(theGroup, SWT.BORDER | SWT.SINGLE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
classNameField.setLayoutData(gd);
String className = manager.getPojoClassName();
if( ! StringUtilities.isEmpty(className) ) {
this.classNameField.setText(className);
}
classNameField.addModifyListener(new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
if( synchronizing ) return;
String name = classNameField.getText();
if( ! StringUtilities.isEmpty(name) ) {
manager.setPojoClassName(name);
} else {
name = ""; //$NON-NLS-1$
manager.setPojoClassName(name);
}
validate();
}
});
classNameField.setEditable(true);
// ================== ANNOTATION TYPE COMBO BOX ====================
Label annotationTypeLabel = new Label(theGroup, SWT.NONE);
annotationTypeLabel.setText(Messages.MaterializationWizardPage_2_AnnotationType);
annotationTypeLabel.setToolTipText(Messages.MaterializationWizardPage_2_AnnotationTypeTooltip);
gd = new GridData();
annotationTypeLabel.setLayoutData(gd);
annotationTypeCombo = WidgetFactory.createCombo(theGroup, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.verticalAlignment = GridData.BEGINNING;
gd.grabExcessHorizontalSpace = true;
annotationTypeCombo.setLayoutData(gd);
annotationTypeCombo.setItems(new String[] { MaterializedModelManager.NONE,
MaterializedModelManager.PROTOBUF}); //
// TODO: ENABLE HIBERNATE OPTION MaterializedModelManager.HIBERNATE });
annotationTypeCombo.select(1);
annotationTypeCombo.setText(MaterializedModelManager.PROTOBUF);
annotationTypeCombo.setToolTipText(Messages.MaterializationWizardPage_2_AnnotationTypeTooltip);
GridDataFactory.swtDefaults().grab(false, false).applyTo(annotationTypeCombo);
annotationTypeCombo.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
manager.setAnnotationType(((Combo)e.widget).getText());
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
annotationTypeCombo.setVisibleItemCount(2);
this.generateModuleCB = WidgetFactory.createButton(theGroup, "Generate JDG Module", SWT.NONE, 2, SWT.CHECK);
this.generateModuleCB.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
manager.setGenerateModule(generateModuleCB.getSelection());
validate();
setWidgetStates();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// Instruction label.
Label moduleZipFileNameLabel = new Label(theGroup, SWT.NULL);
moduleZipFileNameLabel.setText(Messages.MaterializationWizardPage_2_ModuleZipFileName); //$NON-NLS-1$
this.moduleZipFileNameField = new Text(theGroup, SWT.BORDER | SWT.SINGLE);
gd = new GridData(GridData.FILL_HORIZONTAL);
this.moduleZipFileNameField.setLayoutData(gd);
name = manager.getModuleZipFileName();
if( ! StringUtilities.isEmpty(name) ) {
this.moduleZipFileNameField.setText(name);
}
moduleZipFileNameField.addModifyListener(new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
if( synchronizing ) return;
String name = moduleZipFileNameField.getText();
if( ! StringUtilities.isEmpty(name) ) {
manager.setModuleZipFileName(name);
} else {
name = ""; //$NON-NLS-1$
manager.setModuleZipFileName(name);
}
validate();
}
});
moduleZipFileNameField.setEditable(true);
}
{
Group theGroup = WidgetFactory.createGroup(mainPanel, Messages.MaterializationWizardPage_2_OutputOptions, SWT.NONE, 1, 3);
theGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// saveToWorkspaceCB = new Button(theGroup, SWT.RADIO);
// saveToWorkspaceCB.setFont(theGroup.getFont());
// saveToWorkspaceCB.setSelection(true);
//// saveToWorkspaceCB.addListener(SWT.Selection, this);
// saveToWorkspaceCB.setText("Save to Workspace");
// GridDataFactory.swtDefaults().span(3, 1).applyTo(saveToWorkspaceCB);
// saveToWorkspaceCB.addSelectionListener(new SelectionListener() {
//
// @Override
// public void widgetSelected(SelectionEvent e) {
// fileLocationField.setEnabled(saveToFileSystemCB.getSelection());
// fileLocationBrowseButton.setEnabled(saveToFileSystemCB.getSelection());
// workspaceLocationField.setEnabled(saveToWorkspaceCB.getSelection());
// workspaceLocationBrowseButton.setEnabled(saveToWorkspaceCB.getSelection());
// }
//
// @Override
// public void widgetDefaultSelected(SelectionEvent e) {
// }
// });
workspaceLocationLabel = new Label(theGroup, SWT.NULL);
workspaceLocationLabel.setText(Messages.MaterializationWizardPage_1_SourceModelLocationLabel);
workspaceLocationLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.OPEN_FOLDER));
workspaceLocationLabel.setToolTipText(Messages.MaterializationWizardPage_2_ProjectLocationTooltip);
workspaceLocationField = new Text(theGroup, SWT.BORDER | SWT.SINGLE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.CENTER;
workspaceLocationField.setLayoutData(gd);
if( manager.getPojoWorkspaceFolder() != null ) {
workspaceLocationField.setText(manager.getPojoWorkspaceFolder().getName());
}
workspaceLocationField.addModifyListener(new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
validate();
}
});
workspaceLocationField.setToolTipText(Messages.MaterializationWizardPage_2_ProjectLocationTooltip);
workspaceLocationField.setEditable(false);
workspaceLocationBrowseButton = new Button(theGroup, SWT.PUSH);
GridData buttonGridData = new GridData();
workspaceLocationBrowseButton.setLayoutData(buttonGridData);
workspaceLocationBrowseButton.setText("..."); //$NON-NLS-1$
workspaceLocationBrowseButton.setToolTipText(Messages.MaterializationWizardPage_2_ProjectLocationTooltip);
workspaceLocationBrowseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
try {
handleWorkspaceBrowse();
} catch (ModelWorkspaceException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
// Build Location
// FILE SYSTEM OR WORKSPACE???
// Add File System checkbox
// saveToFileSystemCB = new Button(theGroup, SWT.RADIO);
// saveToFileSystemCB.setFont(theGroup.getFont());
// saveToFileSystemCB.setSelection(false);
//// saveToFileSystemCB.addListener(SWT.Selection, this);
// saveToFileSystemCB.setText("Save to File System");
// GridDataFactory.swtDefaults().span(3, 1).applyTo(saveToFileSystemCB);
// saveToFileSystemCB.addSelectionListener(new SelectionListener() {
// "Project Location"
// @Override
// public void widgetSelected(SelectionEvent e) {
// fileLocationField.setEnabled(saveToFileSystemCB.getSelection());
// fileLocationBrowseButton.setEnabled(saveToFileSystemCB.getSelection());
// workspaceLocationField.setEnabled(saveToWorkspaceCB.getSelection());
// workspaceLocationBrowseButton.setEnabled(saveToWorkspaceCB.getSelection());
// }
//
// @Override
// public void widgetDefaultSelected(SelectionEvent e) {
// }
// });
// Label fileLocationLabel = new Label(theGroup, SWT.NULL);
// fileLocationLabel.setText("Project or Folder");
//
// fileLocationField = new Text(theGroup, SWT.BORDER | SWT.SINGLE);
// gd = new GridData(GridData.FILL_HORIZONTAL);
// gd.verticalAlignment = GridData.CENTER;
// fileLocationField.setLayoutData(gd);
//// if( manager.getPojoWorkspaceFolder() != null ) {
//// fileLocationField.setText(manager.getPojoWorkspaceFolder().getName());
//// }
// fileLocationField.addModifyListener(new ModifyListener() {
// @Override
// public void modifyText( ModifyEvent e ) {
// manager.validate();
// }
// });
//
// fileLocationField.setEditable(false);
//
// fileLocationBrowseButton = new Button(theGroup, SWT.PUSH);
// buttonGridData = new GridData();
// fileLocationBrowseButton.setLayoutData(buttonGridData);
// fileLocationBrowseButton.setText("..."); //$NON-NLS-1$
// fileLocationBrowseButton.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected( SelectionEvent e ) {
// handleFileSystemBrowse();
// }
// });
//
// fileLocationField.setEnabled(saveToFileSystemCB.getSelection());
// fileLocationBrowseButton.setEnabled(saveToFileSystemCB.getSelection());
// workspaceLocationField.setEnabled(saveToWorkspaceCB.getSelection());
// workspaceLocationBrowseButton.setEnabled(saveToWorkspaceCB.getSelection());
}
// POJO java file class name
scrolledComposite.sizeScrolledPanel();
setControl(hostPanel);
setMessage(Messages.MaterializationWizardPage_2_Message);
setPageComplete(true);
}
void handleFileSystemBrowse() {
// FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
// dlg.setFilterExtensions(new String[] {"*.*"}); //$NON-NLS-1$
// dlg.setText("Select File System Folder");
//
// String fileStr = dlg.open();
//
// if( !StringUtilities.isEmpty(fileStr)) {
// fileLocationField.setText(fileStr);
// this.manager.setPojoFileSystemFolder(new File(fileStr));
// }
}
/**
* Uses the standard container selection dialog to choose the new value for the container field.
* @throws ModelWorkspaceException
*/
void handleWorkspaceBrowse() throws ModelWorkspaceException {
IContainer folder = WidgetUtil.showFolderSelectionDialog(this.manager.getProject(),
new SingleProjectOrFolderFilter(this.manager.getProject()),
new ModelProjectSelectionStatusValidator());
if (folder != null ) {
workspaceLocationField.setText(folder.getFullPath().makeRelative().toString());
this.manager.setPojoWorkspaceFolder(folder);
}
setWidgetStates();
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
synchronizeUI();
}
}
void validate() {
IStatus status = manager.validate(2);
if( status.isOK() ) {
setErrorMessage(null);
if( manager.doGenerateModule()) {
setMessage(Messages.MaterializationWizardPage_2_ClickFinish_PojoAndModule);
} else {
setMessage(Messages.MaterializationWizardPage_2_ClickFinish_Pojo);
}
setPageComplete(true);
} else if( status.getSeverity() == IStatus.WARNING) {
setErrorMessage(null);
setMessage(status.getMessage(), IStatus.WARNING);
setPageComplete(true);
} else {
setErrorMessage(status.getMessage());
setPageComplete(false);
}
}
void synchronizeUI(){
synchronizing = true;
setWidgetStates();
synchronizing = false;
}
void setWidgetStates() {
boolean doCreatePojo = this.manager.doCreatePojo();
boolean doGenerateModule = this.manager.doGenerateModule();
if( !doCreatePojo ) {
this.packageField.setEnabled(doCreatePojo);
this.workspaceLocationField.setEnabled(doCreatePojo);
this.moduleZipFileNameField.setEnabled(doCreatePojo);
this.workspaceLocationBrowseButton.setEnabled(doCreatePojo);
this.classNameField.setEnabled(doCreatePojo);
this.generateModuleCB.setEnabled(doCreatePojo);
this.annotationTypeCombo.setEnabled(doCreatePojo);
} else {
this.packageField.setEnabled(doCreatePojo);
this.workspaceLocationField.setEnabled(doCreatePojo);
this.classNameField.setEnabled(doCreatePojo);
this.generateModuleCB.setEnabled(doCreatePojo);
this.annotationTypeCombo.setEnabled(doCreatePojo);
this.moduleZipFileNameField.setEnabled(doGenerateModule);
this.workspaceLocationBrowseButton.setEnabled(doCreatePojo);
}
// Set image for location
IContainer location = this.manager.getPojoWorkspaceFolder();
if( location != null && location instanceof IProject ) {
workspaceLocationField.setText(location.getFullPath().makeRelative().toString());
workspaceLocationLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.MODEL_PROJECT));
} else {
workspaceLocationField.setText(location.getFullPath().makeRelative().toString());
workspaceLocationLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.OPEN_FOLDER));
}
}
}