### Eclipse Workspace Patch 1.0 #P org.eclipse.jst.pagedesigner Index: src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java,v retrieving revision 1.17 diff -u -r1.17 HTMLEditor.java --- src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java 21 Jan 2008 23:46:19 -0000 1.17 +++ src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java 2 Feb 2009 20:19:59 -0000 @@ -21,8 +21,12 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Platform; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.ui.palette.PaletteViewerProvider; @@ -36,6 +40,7 @@ import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jst.jsf.common.ui.internal.logging.Logger; import org.eclipse.jst.jsf.common.ui.internal.utils.ResourceUtils; +import org.eclipse.jst.pagedesigner.IJMTConstants; import org.eclipse.jst.pagedesigner.PDPlugin; import org.eclipse.jst.pagedesigner.dnd.internal.DesignerSourceMouseTrackAdapter; import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources; @@ -144,7 +149,7 @@ private List PREVIEW_FILES_LIST = new ArrayList(); - private WPETabbedPropertySheetPage _tabbedPropSheet; + private IPropertySheetPage _tabbedPropSheet; private ISelectionChangedListener _selChangedListener; @@ -891,20 +896,76 @@ return getTextEditor().isDirty(); } - private IPropertySheetPage getPropertySheetPage() { - if (_tabbedPropSheet == null){ - _tabbedPropSheet = new org.eclipse.jst.pagedesigner.properties.WPETabbedPropertySheetPage( - this, this); - } - return _tabbedPropSheet; - } + private IPropertySheetPage getPropertySheetPage() + { + if (_tabbedPropSheet == null) + { + IPropertySheetPageFactory factory = getPageFactory(); + if (factory != null) + { + final IFile file = ((IFileEditorInput)getEditorInput()).getFile(); + _tabbedPropSheet = factory.createPage(file); + } + else + { + _tabbedPropSheet = new WPETabbedPropertySheetPage(this,this); + } + } + return _tabbedPropSheet; + } + + private IPropertySheetPageFactory getPageFactory() + { + //List result = new ArrayList(); + IExtensionPoint extensionPoint = Platform.getExtensionRegistry() + .getExtensionPoint(PDPlugin.getPluginId(), + IJMTConstants.EXTENSION_POINT_PAGEDESIGNER); + IExtension[] extensions = extensionPoint.getExtensions(); + + for (int i = 0; i < extensions.length; i++) + { + IExtension ext = extensions[i]; + IConfigurationElement[] elementEditElement = ext + .getConfigurationElements(); - private PaletteViewerPage getPaletteViewerPage() { - if (null == _paletteViewerPage) { - DefaultEditDomain editDomain = getEditDomain(); - PaletteItemManager manager = PaletteItemManager - .getInstance(getCurrentProject(getEditorInput())); - manager.reset(); + for (int j = 0; j < elementEditElement.length; j++) + { + final IConfigurationElement element = elementEditElement[j]; + if (element.getName().equals( + IJMTConstants.PROPERTY_PAGE_FACTORY)) + { + elementEditElement[j].getAttribute("factory"); //$NON-NLS-1$ + Object obj; + try + { + obj = elementEditElement[j] + .createExecutableExtension("factory"); //$NON-NLS-1$ + + // TODO: we need a policy based solution here, + // but this will do for now + if (obj instanceof IPropertySheetPageFactory) + { + return (IPropertySheetPageFactory) obj; + } + } + catch (CoreException e) + { + PDPlugin.log("Problem loading element edit extension for "+element.toString(), e); //$NON-NLS-1$ + } + } + } + } + return null; + } + + private PaletteViewerPage getPaletteViewerPage() + { + if (null == _paletteViewerPage) + { + DefaultEditDomain editDomain = getEditDomain(); + PaletteItemManager manager = PaletteItemManager + .getInstance(getCurrentProject(getEditorInput())); + manager.reset(); PaletteRoot paletteRoot = _designViewer.getPaletteRoot(); editDomain.setPaletteRoot(paletteRoot); Index: src/org/eclipse/jst/pagedesigner/IJMTConstants.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java,v retrieving revision 1.6 diff -u -r1.6 IJMTConstants.java --- src/org/eclipse/jst/pagedesigner/IJMTConstants.java 1 Feb 2008 20:20:20 -0000 1.6 +++ src/org/eclipse/jst/pagedesigner/IJMTConstants.java 2 Feb 2009 20:19:59 -0000 @@ -95,4 +95,8 @@ */ public static final String LINK_CREATOR = "linkCreator"; //$NON-NLS-1$ + /** + * extension for property page factory + */ + public static final String PROPERTY_PAGE_FACTORY = "propertyPageFactory"; //$NON-NLS-1$ } Index: schema/pageDesignerExtension.exsd =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd,v retrieving revision 1.5 diff -u -r1.5 pageDesignerExtension.exsd --- schema/pageDesignerExtension.exsd 1 Feb 2008 20:20:21 -0000 1.5 +++ schema/pageDesignerExtension.exsd 2 Feb 2009 20:19:59 -0000 @@ -1,16 +1,21 @@ - + - + - + <p><b>This extension point is provisional and subject to change</b></p> + + + + + @@ -20,6 +25,7 @@ + @@ -52,9 +58,9 @@ - + - + @@ -72,9 +78,9 @@ - + - + @@ -92,9 +98,9 @@ - + - + @@ -107,9 +113,9 @@ - + - + @@ -122,9 +128,9 @@ - + - + @@ -137,9 +143,9 @@ - + - + @@ -163,10 +169,10 @@ The transform operation id. Referencers will use plugin-qualified references. i.e if the plugin extending this was <code>org.foo.bar</code>, then the meta data instance that referenced this operation would specify: - <pre> - <operation id="org.foo.bar.MyTransformId"/> - </pre> - + <pre> + <operation id="org.foo.bar.MyTransformId"/> + </pre> + The exception to this rule is that if the reference is not plugin-qualified, then the reference is assumed to be a <i>core</i> transformation and uses the <code>org.eclipse.jst.pagedesigner</code> prefix. @@ -176,18 +182,33 @@ class extending the <code>org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation</code> - + - + + + + + + + + + + + + Provisional API. If an extension point is found in the system, the Web Page Editor will use the factory implementation to provide its property page. + + + + - + - + 2.0 @@ -197,9 +218,9 @@ - + - + Copyright 2006 Sybase and others All rights reserved. This program and the accompanying materials are 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 Index: src/org/eclipse/jst/pagedesigner/editors/IPropertySheetPageFactory.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/editors/IPropertySheetPageFactory.java diff -N src/org/eclipse/jst/pagedesigner/editors/IPropertySheetPageFactory.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jst/pagedesigner/editors/IPropertySheetPageFactory.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,24 @@ +package org.eclipse.jst.pagedesigner.editors; + +import org.eclipse.core.resources.IFile; +import org.eclipse.ui.views.properties.IPropertySheetPage; + +/** + * A factory that can be used with the pageDesignerExtension to override + * the default property sheet page provided by the WPE when tag elements are + * selected by the user. + * + * This interface should not be implemented or extended by clients. Use + * AbstractPropertySheetPageFactory instead. + * + * @author cbateman + * + */ +public interface IPropertySheetPageFactory +{ + /** + * @param file + * @return the property sheet page for the file. + */ + IPropertySheetPage createPage(final IFile file); +} Index: src/org/eclipse/jst/pagedesigner/editors/AbstractPropertySheetPageFactory.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/editors/AbstractPropertySheetPageFactory.java diff -N src/org/eclipse/jst/pagedesigner/editors/AbstractPropertySheetPageFactory.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jst/pagedesigner/editors/AbstractPropertySheetPageFactory.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,21 @@ +package org.eclipse.jst.pagedesigner.editors; + +import org.eclipse.core.resources.IFile; +import org.eclipse.ui.views.properties.IPropertySheetPage; + +/** + * Abstract class that should be extended to provide a property sheet page + * factory. + * + * @author cbateman + * + */ +public abstract class AbstractPropertySheetPageFactory implements + IPropertySheetPageFactory +{ + + /* (non-Javadoc) + * @see org.eclipse.jst.pagedesigner.editors.IPropertySheetPageFactory#createPage(org.eclipse.core.resources.IFile) + */ + public abstract IPropertySheetPage createPage(IFile file); +}