/* * 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.xml.ui.wizards; import java.util.Arrays; import java.util.Collection; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.metamodels.xml.XmlFragment; import org.teiid.designer.xml.IVirtualDocumentFragmentSource; import org.teiid.designer.xml.ui.ModelerXmlUiConstants; import org.teiid.designer.xml.ui.editor.EditVirtualDocumentsPanel; /** * NewVirtualDocumentWizardPage is the wizard page contribution for building Virtual * XMLDocument models from XML Schema files in the workspace. * * @since 8.0 */ public class PreviewVirtualDocumentWizardPage extends WizardPage implements ModelerXmlUiConstants, IVirtualDocumentFragmentSource { ///////////////////////////////////////////////////////////////////////////////// // Instance variables ///////////////////////////////////////////////////////////////////////////////// private EditVirtualDocumentsPanel panel; private final NewDocumentWizardModel model; ///////////////////////////////////////////////////////////////////////////////// // Constructors ///////////////////////////////////////////////////////////////////////////////// /** * Constructor for NewVirtualDocumentWizardPage. * @param pageName */ public PreviewVirtualDocumentWizardPage(NewDocumentWizardModel wizModel) { super("previewVirtualDocumentPage"); //$NON-NLS-1$ model = wizModel; setTitle(Util.getString("PreviewVirtualDocumentPage.title")); //$NON-NLS-1$ setDescription(Util.getString("PreviewVirtualDocumentPage.description")); //$NON-NLS-1$ setPageComplete(true); } ///////////////////////////////////////////////////////////////////////////////// // Instance methods ///////////////////////////////////////////////////////////////////////////////// @Override public void createControl(Composite parent) { panel = new EditVirtualDocumentsPanel(parent); setControl(panel); } @Override public void dispose() { super.dispose(); Control c = getControl(); if (c != null) { c.dispose(); } // endif } public Collection getRoots(ModelResource modelResource, IProgressMonitor monitor) { if(panel == null) { final XmlFragment[] fragments = model.getFragments(modelResource, monitor); return Arrays.asList(fragments); } if(panel.getRoots(monitor).isEmpty() ) { final XmlFragment[] fragments = model.getFragments(modelResource, monitor); panel.setFragments(fragments); } return panel.getRoots(monitor); } // // Implementation of the IVirtualDocumentSource inteface: // @Override public XmlFragment[] getFragments(ModelResource modelResource, IProgressMonitor monitor) { if (panel == null) { createControl(model.getWizHolder()); panel.setVisible(false); // keep the thing hidden } // endif return panel.getFragments(null, monitor); } @Override public void updateSourceFragments(final boolean isVisible, final IProgressMonitor monitor) { monitor.subTask(Util.getString("PreviewVirtualDocumentPage.subtaskBuilding")); //$NON-NLS-1$ final XmlFragment[] fragments = model.getFragments(null, monitor); if (panel != null && fragments != panel.getStartingFragments()) { // array ref is different, need to update monitor.subTask(Util.getString("PreviewVirtualDocumentPage.subtaskTree")); //$NON-NLS-1$ panel.setStartingFragments(fragments, isVisible, monitor); } // endif } }