[263718] Non-breaking API change required to support custom palette in WPE
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
index b733b6e..bd84af6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
@@ -26,6 +26,7 @@
<element ref="tagAttributeCellEditorFactory" minOccurs="0" maxOccurs="unbounded"/>
<element ref="tagTransformOperation" minOccurs="0" maxOccurs="unbounded"/>
<element ref="propertyPageFactory" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="paletteFactory" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="point" type="string" use="required">
<annotation>
@@ -204,6 +205,20 @@
</attribute>
</complexType>
</element>
+ <element name="paletteFactory">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ Provisional API. If an extension point is found in the system, the Web Page Editor will use the factory implementation to provide its paletteViewerPage
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="org.eclipse.jst.pagedesigner.editors.palette.AbstractPaletteFactory:"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
<annotation>
<appinfo>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
index c6ee37e..6b6acb6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
@@ -99,4 +99,9 @@
* extension for property page factory
*/
public static final String PROPERTY_PAGE_FACTORY = "propertyPageFactory"; //$NON-NLS-1$
+ /**
+ * extension for palette viewer page factory
+ */
+ public static final String PALETTE_FACTORY = "paletteFactory"; //$NON-NLS-1$
+
}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
index 90492c8..7f530f5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
@@ -18,7 +18,6 @@
import java.util.List;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -28,8 +27,6 @@
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;
import org.eclipse.gef.ui.views.palette.PalettePage;
import org.eclipse.gef.ui.views.palette.PaletteViewerPage;
import org.eclipse.jface.text.IDocument;
@@ -44,7 +41,6 @@
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.dnd.internal.DesignerSourceMouseTrackAdapter;
import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources;
-import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager;
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IPageVariablesProvider;
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IDocumentPageVariableAdapter;
import org.eclipse.jst.pagedesigner.parts.DocumentEditPart;
@@ -958,27 +954,18 @@
return null;
}
+
+ /**
+ * @return PaletteViewerPage
+ */
private PaletteViewerPage getPaletteViewerPage()
{
- if (null == _paletteViewerPage)
+ if (_paletteViewerPage == null)
{
- DefaultEditDomain editDomain = getEditDomain();
- PaletteItemManager manager = PaletteItemManager
- .getInstance(getCurrentProject(getEditorInput()));
- manager.reset();
- PaletteRoot paletteRoot = _designViewer.getPaletteRoot();
- editDomain.setPaletteRoot(paletteRoot);
-
- _paletteViewerPage = (PaletteViewerPage) _designViewer.getAdapter(PalettePage.class);
- // if possible, try to use the
- if (_paletteViewerPage == null)
- {
- PaletteViewerProvider provider = _designViewer.getPaletteViewerProvider2();
- _paletteViewerPage = new PaletteViewerPage(provider);
- }
- }
- return _paletteViewerPage;
- }
+ _paletteViewerPage = _designViewer.createPaletteViewerPage();
+ }
+ return _paletteViewerPage;
+ }
/**
* @return the edit domain
@@ -1076,16 +1063,6 @@
return this._mode;
}
- private IProject getCurrentProject(IEditorInput input) {
- IProject curProject = null;
- IFile inputFile = null;
- if (input instanceof IFileEditorInput) {
- inputFile = ((IFileEditorInput) input).getFile();
- curProject = inputFile.getProject();
- }
- return curProject;
- }
-
public IEditorPart getActiveEditor() {
IEditorPart result = null;
if (_sash) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java
index 4c2c043..ccb5a12 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java
@@ -15,7 +15,12 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+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.Platform;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalViewer;
@@ -28,6 +33,7 @@
import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPreferences;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
+import org.eclipse.gef.ui.views.palette.PaletteViewerPage;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
@@ -35,6 +41,7 @@
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jst.pagedesigner.IJMTConstants;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.actions.container.ContainerActionGroup;
import org.eclipse.jst.pagedesigner.actions.menuextension.CustomedContextMenuActionGroup;
@@ -54,6 +61,8 @@
import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteCustomizer;
import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteRootFactory;
import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteViewerProvider;
+import org.eclipse.jst.pagedesigner.editors.palette.IPaletteFactory;
+import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager;
import org.eclipse.jst.pagedesigner.jsp.core.internal.pagevar.DocumentPageVariableAdapter;
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.PageVariableAdapterFactory;
import org.eclipse.jst.pagedesigner.parts.CSSStyleAdapterFactory;
@@ -91,7 +100,7 @@
public class SimpleGraphicalEditor extends GraphicalEditorWithFlyoutPalette implements
IDesignViewer, IDocumentSelectionMediator {
- private HTMLEditor _delegate;
+ private HTMLEditor _delegate;
private IHTMLGraphicalViewer _viewer;
@@ -99,6 +108,8 @@
/** Palette component, holding the tools and shapes. */
private PaletteRoot _palette;
+
+ private PaletteViewerPage _paletteViewerPage;
private SelectionSynchronizer _synchronizer = new SelectionSynchronizer(
this);
@@ -135,6 +146,10 @@
}
};
+ private PaletteViewerProvider _paletteViewerProvider;
+
+ protected IPaletteFactory _paletteViewerPageFactory;
+
/**
* @param delegate
* @param editdomain
@@ -142,7 +157,8 @@
public SimpleGraphicalEditor(HTMLEditor delegate,
DefaultEditDomain editdomain) {
_delegate = delegate;
- this.setEditDomain(editdomain);
+ initPaletteFactory();
+ this.setEditDomain(editdomain);
}
protected void createGraphicalViewer(Composite parent) {
@@ -199,7 +215,7 @@
_viewer.addDropTargetListener(new PDTemplateTransferDropTargetListener(
_viewer));
_viewer.addDropTargetListener(new ResouceDropTargetListener(_viewer));
-
+
// add double click support.
_viewer.getControl().addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
@@ -456,38 +472,74 @@
*/
protected PaletteRoot getPaletteRoot() {
if (_palette == null) {
- _palette = DesignerPaletteRootFactory
- .createPaletteRoot(getCurrentProject(_delegate.getEditorInput()));
+ if (_paletteViewerPageFactory != null) {
+ _palette = _paletteViewerPageFactory.createPaletteRoot(_delegate.getEditorInput());
+ }
+ if (_palette == null) {
+ _palette = DesignerPaletteRootFactory
+ .createPaletteRoot(getCurrentProject(_delegate.getEditorInput()));
+ }
}
return _palette;
}
- /*
+ /*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#createPaletteViewerProvider()
*/
- protected PaletteViewerProvider createPaletteViewerProvider() {
- return new DesignerPaletteViewerProvider(getEditDomain()) {
- protected void configurePaletteViewer(PaletteViewer viewer) {
- super.configurePaletteViewer(viewer);
- viewer.setCustomizer(new DesignerPaletteCustomizer());
+ protected PaletteViewerProvider createPaletteViewerProvider() {
+ if (_paletteViewerProvider == null) {
+ if (_paletteViewerPageFactory != null) {
+ _paletteViewerProvider = _paletteViewerPageFactory.createPaletteViewerProvider(getEditDomain());
+ }
+ if (_paletteViewerProvider == null) {//if still null
+ return new DesignerPaletteViewerProvider(getEditDomain()) {
+ protected void configurePaletteViewer(PaletteViewer viewer) {
+ super.configurePaletteViewer(viewer);
+ viewer.setCustomizer(new DesignerPaletteCustomizer());
- // create a drag source listener for this palette viewer
- // together with an appropriate transfer drop target listener,
- // this will enable
- // model element creation by dragging a
- // CombinatedTemplateCreationEntries
- // from the palette into the editor
- // @see ShapesEditor#createTransferDropTargetListener()
- viewer
- .addDragSourceListener(new DesignerTemplateTransferDragSourceListener(
- viewer));
- }
- };
- }
+ // create a drag source listener for this palette viewer
+ // together with an appropriate transfer drop target listener,
+ // this will enable
+ // model element creation by dragging a
+ // CombinatedTemplateCreationEntries
+ // from the palette into the editor
+ // @see ShapesEditor#createTransferDropTargetListener()
+ viewer
+ .addDragSourceListener(new DesignerTemplateTransferDragSourceListener(
+ viewer));
+ }
+ };
+ }
+ }
+ return _paletteViewerProvider;
+ }
+ protected PaletteViewerPage createPaletteViewerPage() {
+ if (_paletteViewerPageFactory != null) {
+ _paletteViewerPage = _paletteViewerPageFactory.createPaletteViewerPage(createPaletteViewerProvider());
+ }
+ if (_paletteViewerPage == null) {
+ DefaultEditDomain editDomain = getEditDomain();
+ PaletteItemManager manager = PaletteItemManager
+ .getInstance(getCurrentProject(getEditorInput()));
+ manager.reset();
+ PaletteRoot paletteRoot = getPaletteRoot();
+ editDomain.setPaletteRoot(paletteRoot);
+
+// _paletteViewerPage = (PaletteViewerPage) super.getAdapter(PalettePage.class);
+ // if possible, try to use the
+ if (_paletteViewerPage == null)
+ {
+ PaletteViewerProvider provider = getPaletteViewerProvider2();
+ _paletteViewerPage = new PaletteViewerPage(provider);
+ }
+ }
+ return _paletteViewerPage;
+ }
+
PaletteViewerProvider getPaletteViewerProvider2()
{
return getPaletteViewerProvider();
@@ -739,4 +791,69 @@
PageDesignerActionConstants.addStandardSelectActionGroups(selectSubMenu);
}
}
+
+
+ public PaletteViewerPage getPaletteViewerPage() {
+ if (_paletteViewerPage == null) {
+ _paletteViewerPage = createPaletteViewerPage();
+ }
+ return _paletteViewerPage;
+ }
+
+ protected IPaletteFactory initPaletteFactory()
+ {
+ if (_paletteViewerPageFactory == null) {
+ //List<IElementEditFactory> result = new ArrayList<IElementEditFactory>();
+ 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();
+
+ for (int j = 0; j < elementEditElement.length; j++)
+ {
+ final IConfigurationElement element = elementEditElement[j];
+ if (element.getName().equals(
+ IJMTConstants.PALETTE_FACTORY))
+ {
+ elementEditElement[j].getAttribute("class"); //$NON-NLS-1$
+ Object obj;
+ try
+ {
+ obj = elementEditElement[j]
+ .createExecutableExtension("class"); //$NON-NLS-1$
+
+ // TODO: we need a policy based solution here,
+ // but this will do for now
+ if (obj instanceof IPaletteFactory)
+ {
+ _paletteViewerPageFactory = (IPaletteFactory) obj;
+ }
+ }
+ catch (CoreException e)
+ {
+ PDPlugin.log("Problem loading element edit extension for "+element.toString(), e); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ }
+ return _paletteViewerPageFactory;
+ }
+//
+// @Override
+// public Object getAdapter(Class type) {
+// if (type == PalettePage.class) {
+// return getPaletteViewerPage();
+// }
+// return super.getAdapter(type);
+// }
+
+
+
}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/AbstractPaletteFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/AbstractPaletteFactory.java
new file mode 100644
index 0000000..646bdd5
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/AbstractPaletteFactory.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 Oracle Corporation 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
+ *
+ * Contributors:
+ * Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.palette;
+
+import org.eclipse.gef.EditDomain;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gef.ui.palette.PaletteViewerProvider;
+import org.eclipse.gef.ui.views.palette.PaletteViewerPage;
+import org.eclipse.ui.IEditorInput;
+
+/**
+ * Abstract class that all extenders must use to provide alternate palettes
+ * to the Web Page Editor. See also {@link IPaletteFactory}
+ */
+public abstract class AbstractPaletteFactory implements IPaletteFactory {
+
+ public PaletteViewerPage createPaletteViewerPage(PaletteViewerProvider provider) {return null;}
+ public PaletteViewerProvider createPaletteViewerProvider(EditDomain domain) {return null;}
+ public PaletteRoot createPaletteRoot(IEditorInput editorInput){return null;}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/IPaletteFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/IPaletteFactory.java
new file mode 100644
index 0000000..703ccf7
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/IPaletteFactory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2009 Oracle Corporation 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
+ *
+ * Contributors:
+ * Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.palette;
+
+import org.eclipse.gef.EditDomain;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gef.ui.palette.PaletteViewerProvider;
+import org.eclipse.gef.ui.views.palette.PaletteViewerPage;
+import org.eclipse.ui.IEditorInput;
+
+/**
+ * Create a palette parts to replace the default palette in
+ * the Web Page Editor.
+ *
+ * If any of the create methods return null, the default WPE behaviour will be used.
+ */
+public interface IPaletteFactory {
+ /**
+ * @param provider
+ * @return {@link PaletteViewerPage} - MAY return null. If null, the default palette viewer page will be used.
+ */
+ public PaletteViewerPage createPaletteViewerPage(PaletteViewerProvider provider) ;
+
+ /**
+ * @param domain
+ * @return {@link PaletteViewerProvider} - may return null. If null, the default paletteViewerProvider will be used.
+ */
+ public PaletteViewerProvider createPaletteViewerProvider(EditDomain domain) ;
+
+ /**
+ * @param editorInput
+ * @return PaletteRoot - may return null. If null, the default palette root will be used.
+ */
+ public PaletteRoot createPaletteRoot(IEditorInput editorInput);
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java
index 7f14afb..0986d02 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java
@@ -50,7 +50,9 @@
* @return default prefix
*/
public String getDefaultPrefix(){
- return ((TaglibPaletteDrawer)getParent()).getDefaultPrefix();
+ if (getParent() instanceof TaglibPaletteDrawer)
+ return ((TaglibPaletteDrawer)getParent()).getDefaultPrefix();
+ return "";
}
/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java
index e4d908c..df87769 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java
@@ -91,7 +91,7 @@
protected static String getPrefix(String uri, IDOMModel model,
String suggested) {
// TODO: this shouldn't really add to the document
- if (ITLDConstants.URI_HTML.equalsIgnoreCase(uri)
+ if (uri==null || ITLDConstants.URI_HTML.equalsIgnoreCase(uri)
|| ITLDConstants.URI_JSP.equalsIgnoreCase(uri)
|| CMDocType.JSP11_DOC_TYPE.equalsIgnoreCase(uri)) {
return null;