/******************************************************************************* * Copyright (c) 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 * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.smooks.configuration.editors; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.ui.parts.GraphicalEditor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.ui.IEditorActionBarContributor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.MultiPageEditorActionBarContributor; import org.eclipse.ui.views.properties.IPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.jboss.tools.smooks.editor.AbstractSmooksFormEditor; import org.jboss.tools.smooks.graphical.editors.SmooksProcessGraphicalEditor; /** * * @author Dart Peng (dpeng@redhat.com) Date Apr 1, 2009 */ public class SmooksMultiFormEditor extends AbstractSmooksFormEditor implements ISelectionProvider, ITabbedPropertySheetPageContributor { public static final String EDITOR_ID = "org.jboss.tools.smooks.configuration.editors.MultiPageEditor"; //$NON-NLS-1$ private SmooksConfigurationFormPage configurationPage; // private SmooksGraphicalEditorPart graphicalPage; private SmooksConfigurationOverviewPage optionsPage; // private SmooksReaderFormPage readerPage; private SmooksProcessGraphicalEditor processPage; private ISelection selection; private Collection<ISelectionChangedListener> selectionChangeListener = new ArrayList<ISelectionChangedListener>(); private TabbedPropertySheetPage tabbedPropertySheetPage; /* * (non-Javadoc) * * @see org.jboss.tools.smooks.editor.AbstractSmooksFormEditor#addPages() */ @Override protected void addPages() { // readerPage = new SmooksReaderFormPage(this, "reader_page", "Input"); // addValidateListener(readerPage); // addSourceSynchronizeListener(readerPage); // addSmooksGraphExtetionListener(readerPage); // try { // int index = this.addPage(readerPage); // setPageText(index, "Input"); // } catch (PartInitException e) { // e.printStackTrace(); // } addProcessGraphicalEditor(); optionsPage = createSmooksConfigurationOverviewPage(); addValidateListener(optionsPage); addSourceSynchronizeListener(optionsPage); addSmooksEditorInitListener(optionsPage); try { int index = this.addPage(optionsPage); setPageText(index, Messages.SmooksMultiFormEditor_opetiontab_label); } catch (PartInitException e) { e.printStackTrace(); } // addSmooksGraphicalEditor(); // configurationPage = createSmooksConfigurationFormPage(); // addValidateListener(configurationPage); // addSourceSynchronizeListener(configurationPage); // addSmooksGraphExtetionListener(configurationPage); // try { // int index = this.addPage(configurationPage); // setPageText(index, "Message Filter"); // } catch (PartInitException e) { // e.printStackTrace(); // } super.addPages(); } private void addProcessGraphicalEditor() { processPage = new SmooksProcessGraphicalEditor(this, "process", Messages.SmooksMultiFormEditor_processpage_name, this); //$NON-NLS-1$ addSourceSynchronizeListener(processPage); addValidateListener(processPage); addSmooksEditorInitListener(processPage); try { int index = this.addPage(processPage); setPageText(index, Messages.SmooksMultiFormEditor_processtabel_label); } catch (PartInitException e) { e.printStackTrace(); } } // private void addSmooksGraphicalEditor() { // graphicalPage = new SmooksGraphicalEditorPart(this); // addSourceSynchronizeListener(graphicalPage); // try { // int index = this.addPage(graphicalPage, getEditorInput()); // setPageText(index, "Process"); // } catch (PartInitException e) { // e.printStackTrace(); // } // } /* * (non-Javadoc) * * @see org.eclipse.ui.forms.editor.FormEditor#getActiveEditor() */ @Override public IEditorPart getActiveEditor() { int index = getActivePage(); if (index != -1) { IEditorPart part = getEditor(index); if (part == null) { // if(index == 0){ // part = processPage; // } // if(index == 1){ // part = configurationPage; // } } return part; } return null; } protected void pageChange(int newPageIndex) { super.pageChange(newPageIndex); IEditorPart activeEditor = getEditor(newPageIndex); if (activeEditor == null) { if (newPageIndex == 0) { IEditorActionBarContributor contributor = getEditorSite().getActionBarContributor(); if (contributor != null && contributor instanceof MultiPageEditorActionBarContributor) { ((MultiPageEditorActionBarContributor) contributor).setActivePage(processPage); } } } } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.editor.AbstractSmooksFormEditor#init(org.eclipse * .ui.IEditorSite, org.eclipse.ui.IEditorInput) */ @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { super.init(site, input); // site.setSelectionProvider(this); } public Object getAdapter(Class adapter) { if (adapter == IPropertySheetPage.class) { tabbedPropertySheetPage = new TabbedPropertySheetPage(this); return tabbedPropertySheetPage; } if (adapter == GraphicalViewer.class) { if (this.processPage != null) { Object activeEditorPart = processPage.getActiveEditorPage(); if (activeEditorPart != null && activeEditorPart instanceof IEditorPart) { if (activeEditorPart instanceof GraphicalEditor) { return ((IEditorPart) activeEditorPart).getAdapter(adapter); } } } } return super.getAdapter(adapter); } // private SmooksConfigurationReaderPage // createSmooksConfigurationReaderPage() { // return new SmooksConfigurationReaderPage(this, "reader_page1", // "Reader Page"); // } private SmooksConfigurationOverviewPage createSmooksConfigurationOverviewPage() { return new SmooksConfigurationOverviewPage(this, "options_page", Messages.SmooksMultiFormEditor_optinepage_name, this); //$NON-NLS-1$ } @Override public void doSave(IProgressMonitor monitor) { if (processPage != null) { processPage.doSave(monitor); } super.doSave(monitor); } protected SmooksConfigurationFormPage createSmooksConfigurationFormPage() { return new SmooksConfigurationResourceConfigPage(this, "message_filter_page", "Design Page"); //$NON-NLS-1$ //$NON-NLS-2$ } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.editor.AbstractSmooksFormEditor# * activeRecentAffectedModel(java.util.Collection) */ @Override public void activeRecentAffectedModel(Collection<?> collection) { final Collection<?> theSelection = collection; if (theSelection != null && !theSelection.isEmpty() && configurationPage != null) { List<Object> newList = new ArrayList<Object>(); for (Iterator<?> iterator = theSelection.iterator(); iterator.hasNext();) { Object object = (Object) iterator.next(); // if (object instanceof IWrapperItemProvider) { // newList.add(((IWrapperItemProvider) object).getValue()); // } newList.add(object); } configurationPage.setSelectionToViewer(newList); } } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.editor.AbstractSmooksFormEditor# * createNewModelViaTextPage() */ @Override protected void createNewModelViaTextPage() { super.createNewModelViaTextPage(); } public void addSelectionChangedListener(ISelectionChangedListener listener) { selectionChangeListener.add(listener); } public ISelection getSelection() { return this.selection; } public void removeSelectionChangedListener(ISelectionChangedListener listener) { selectionChangeListener.remove(listener); } public void setSelection(ISelection selection) { if (selection != null) { if (selection.equals(this.selection)) { return; } } this.selection = selection; for (Iterator<?> iterator = this.selectionChangeListener.iterator(); iterator.hasNext();) { ISelectionChangedListener l = (ISelectionChangedListener) iterator.next(); l.selectionChanged(new SelectionChangedEvent(this, getSelection())); } } public String getContributorId() { return getSite().getId(); } @Override public void dispose() { try { super.dispose(); } catch (Throwable t) { t.printStackTrace(); } } }