/*
* 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.modelgenerator.salesforce.ui.wizards;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.designer.compare.DifferenceReport;
import org.teiid.designer.compare.PropertyDifference;
import org.teiid.designer.compare.ui.tree.DifferenceReportsPanel;
import org.teiid.designer.modelgenerator.salesforce.SalesforceImportWizardManager;
import org.teiid.designer.modelgenerator.salesforce.ui.ModelGeneratorSalesforceUiConstants;
import org.teiid.designer.ui.common.util.WizardUtil;
import org.teiid.designer.ui.common.wizard.AbstractWizardPage;
/**
* @since 8.0
*/
public class ShowDifferencesPage extends AbstractWizardPage
implements ModelGeneratorSalesforceUiConstants, ModelGeneratorSalesforceUiConstants.Images,
ModelGeneratorSalesforceUiConstants.HelpContexts {
/** Used as a prefix to properties file keys. */
private static final String PREFIX = I18nUtil.getPropertyPrefix(ShowDifferencesPage.class);
public ShowDifferencesPage( SalesforceImportWizardManager importManager ) {
super(ShowDifferencesPage.class.getSimpleName(), getString("title")); //$NON-NLS-1$
this.importManager = importManager;
}
private DifferenceReportsPanel pnlDiffReport;
private List lstDIfferenceReports;
SalesforceImportWizardManager importManager;
private boolean bIsVisible;
protected DifferenceReport shuntDiffReport;
private static final String MESSAGE = getString("message"); //$NON-NLS-1$
private static final String DIFF_DESCRIPTOR_TITLE = getString("diffDescriptorTitle"); //$NON-NLS-1$
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
* @since 4.0
*/
@Override
public void createControl( Composite parent ) {
// Create page
final Composite pg = new Composite(parent, SWT.NONE);
pg.setLayout(new GridLayout());
pg.setLayoutData(new GridData(GridData.FILL_BOTH));
setControl(pg);
// Create the Difference Reports Panel
String treeTitle = ""; //$NON-NLS-1$
String tableTitle = DIFF_DESCRIPTOR_TITLE;
boolean enableProperySelection = true;
boolean showCheckboxes = true;
pnlDiffReport = new DifferenceReportsPanel(pg, treeTitle, tableTitle, enableProperySelection, showCheckboxes, true, true);
pnlDiffReport.setMessage(""); //$NON-NLS-1$
super.setMessage(MESSAGE);
TableViewer tableViewer = pnlDiffReport.getTableViewer();
if (tableViewer instanceof CheckboxTableViewer) {
((CheckboxTableViewer)tableViewer).addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged( CheckStateChangedEvent theEvent ) {
Object checkedObject = theEvent.getElement();
boolean isChecked = theEvent.getChecked();
if (checkedObject instanceof PropertyDifference) {
PropertyDifference propDiff = (PropertyDifference)checkedObject;
propDiff.setSkip(!isChecked);
}
}
});
}
}
@Override
public void setVisible( boolean bIsVisible ) {
this.bIsVisible = bIsVisible;
if (bIsVisible) {
IRunnableWithProgress op = new IRunnableWithProgress() {
@Override
public void run( IProgressMonitor monitor ) throws InvocationTargetException {
try {
shuntDiffReport = importManager.getDifferenceReport(monitor);
monitor.done();
} catch (Exception e) {
throw new InvocationTargetException(e);
}
}
};
try {
new ProgressMonitorDialog(Display.getCurrent().getActiveShell()).run(true, true, op);
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
Shell shell = this.getShell();
Status status = new Status(IStatus.ERROR, PLUGIN_ID, 0, cause.getLocalizedMessage(), cause);
System.err.println("cause message="+cause.getLocalizedMessage()); //$NON-NLS-1$
ErrorDialog.openError(shell,
getString("dialog.dataModelCreationError.title"), cause.getLocalizedMessage(), status); //$NON-NLS-1$
super.setVisible(false);
return;
} catch (InterruptedException e) {
super.setVisible(false);
return;
}
setDifferenceReport(shuntDiffReport);
importManager.setCanFinish(true);
}
validatePage();
super.setVisible(bIsVisible);
}
private void validatePage() {
WizardUtil.setPageComplete(this);
}
public boolean isVisible() {
return bIsVisible;
}
public DifferenceReport getDifferenceReport() {
return pnlDiffReport.getDifferenceReport();
}
public void setDifferenceReport( DifferenceReport drDifferenceReport ) {
lstDIfferenceReports = new ArrayList(1);
this.lstDIfferenceReports.add(drDifferenceReport);
if (pnlDiffReport != null) {
pnlDiffReport.setDifferenceReports(lstDIfferenceReports);
}
}
public void setDifferenceReports( List lstDIfferenceReports ) {
this.lstDIfferenceReports = lstDIfferenceReports;
if (pnlDiffReport != null) {
pnlDiffReport.setDifferenceReports(lstDIfferenceReports);
}
}
@Override
public void setMessage( String sMessage ) {
}
public void setModelName( String sModelName ) {
if (pnlDiffReport != null) {
pnlDiffReport.setModelName(sModelName);
}
}
/**
* Utility to get localized text from properties file.
*
* @param theKey the key whose localized value is being requested
* @return the localized text
*/
private static String getString( String theKey ) {
return UTIL.getString(new StringBuffer().append(PREFIX).append(theKey).toString());
}
}