### Eclipse Workspace Patch 1.0 #P org.eclipse.jst.pagedesigner Index: src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java,v retrieving revision 1.7 diff -u -r1.7 CommandUtil.java --- src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java 18 Nov 2008 22:22:43 -0000 1.7 +++ src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java 4 May 2009 22:28:34 -0000 @@ -22,7 +22,8 @@ import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory; import org.eclipse.jst.pagedesigner.PDPlugin; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; import org.eclipse.jst.pagedesigner.itemcreation.CreationData; import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator; import org.eclipse.jst.pagedesigner.itemcreation.internal.TagCreationFactory; @@ -34,52 +35,89 @@ * @author mengbo * @version 1.5 */ -public class CommandUtil { - private static final Logger _log = PDPlugin.getLogger(CommandUtil.class); - - /** - * @param tagItem - * @param model - * @param domPosition - * @param customizationData - * @return the element inserted or null if failed - */ - public static Element excuteInsertion(TagToolPaletteEntry tagItem, - IDOMModel model, IDOMPosition domPosition, IAdaptable customizationData) { - try - { - IStructuredDocument doc = model.getDocument().getStructuredDocument(); - - IStructuredDocumentContext context = - IStructuredDocumentContextFactory.INSTANCE.getContext(doc, -1); - IWorkspaceContextResolver resolver = - IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context); - - IProject project = resolver.getProject(); - - final ITaglibDomainMetaDataModelContext modelContext = - TaglibDomainMetaDataQueryHelper - .createMetaDataModelContext(project, tagItem.getURI()); +public class CommandUtil +{ + private static final Logger _log = PDPlugin.getLogger(CommandUtil.class); + + /** + * @param dropSourceData + * @param model + * @param domPosition + * @param customizationData + * @return the element inserted or null if failed + */ + public static Element executeInsertion( + final IDropSourceData dropSourceData, final IDOMModel model, + final IDOMPosition domPosition, final IAdaptable customizationData) + { + try + { + final ITaglibDomainMetaDataModelContext modelContext = getMetadataContext( + dropSourceData.getNamespace(), model); + + ITagDropSourceData tagDropSourceData = null; + + if (dropSourceData instanceof ITagDropSourceData) + { + tagDropSourceData = (ITagDropSourceData) dropSourceData; + } else if (customizationData != null) + { + tagDropSourceData = (ITagDropSourceData) customizationData + .getAdapter(ITagDropSourceData.class); + } + + if (tagDropSourceData == null) + { + PDPlugin + .log( + "Could not down cast dropSourceData to tagDropSourceData", new Exception("for stack trace only")); //$NON-NLS-1$//$NON-NLS-2$ + } // TODO: note that the constructor currently causes the prefix defn - // to be added to the target doc. This should be moved into + // to be added to the target doc. This should be moved into // an ensure method in the AbstractTagCreator - final CreationData creationData = - new CreationData(tagItem, model, domPosition, modelContext, customizationData); - - ITagCreator tagCreator = - TagCreationFactory.getInstance().createTagCreator(creationData.getTagId()); - - if (tagCreator == null) - { - return null;//should never get here! - } - - return tagCreator.createTag(creationData); - } catch (Exception e) { - _log.error("Problem creating tag "+tagItem.getTagName()+" at:" + domPosition + "\n", e); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } + final CreationData creationData = new CreationData( + tagDropSourceData, model, domPosition, modelContext, + customizationData); + + final ITagCreator tagCreator = TagCreationFactory.getInstance() + .createTagCreator(creationData.getTagId()); + + if (tagCreator == null) + { + return null;// should never get here! + } + + return tagCreator.createTag(creationData); + } catch (Exception e) + { + _log + .error( + "Problem creating tag " + dropSourceData.getId() + " at:" + domPosition + "\n", e); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } return null; - } + } + /** + * @param uri + * @param model + * @return the metadata context for uri in the DOM model or null if none. + */ + public static ITaglibDomainMetaDataModelContext getMetadataContext( + final String uri, final IDOMModel model) + { + final IStructuredDocument doc = model.getDocument() + .getStructuredDocument(); + + final IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE + .getContext(doc, -1); + final IWorkspaceContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE + .getWorkspaceContextResolver(context); + + final IProject project = resolver.getProject(); + + final ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper + .createMetaDataModelContext(project, uri); + return modelContext; + } } Index: src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java,v retrieving revision 1.5 diff -u -r1.5 CreationData.java --- src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java 11 Feb 2009 19:02:45 -0000 1.5 +++ src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java 4 May 2009 22:28:34 -0000 @@ -20,11 +20,8 @@ import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper; import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants; import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory; -import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.PaletteInfo; -import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.PaletteInfos; -import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationInfo; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; import org.eclipse.jst.pagedesigner.utils.JSPUtil; import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; @@ -39,12 +36,12 @@ */ public final class CreationData { - private final TagToolPaletteEntry _tagEntry; + private final ITagDropSourceData _creationProvider; private final String _prefix; private final IDOMPosition _domPosition; private final IDOMModel _model; private final IAdaptable _customizationData; - + private TagIdentifier _tagId; // = null; lazy init on creation /** @@ -63,16 +60,19 @@ /** - * @param tagEntry TODO: remove this direct dependence on the palette + * @param creationProvider * @param model * @param domPosition * @param taglibMetaDataContext * @param customizationData */ - public CreationData(final TagToolPaletteEntry tagEntry, final IDOMModel model, final IDOMPosition domPosition, final ITaglibDomainMetaDataModelContext taglibMetaDataContext, final IAdaptable customizationData) + public CreationData(final ITagDropSourceData creationProvider, + final IDOMModel model, final IDOMPosition domPosition, + final ITaglibDomainMetaDataModelContext taglibMetaDataContext, + final IAdaptable customizationData) { super(); - this._tagEntry = tagEntry; + this._creationProvider = creationProvider; this._prefix = getPrefix(getUri(), model, getDefaultPrefix()); this._taglibMetaDataContext = taglibMetaDataContext; this._domPosition = domPosition; @@ -105,14 +105,14 @@ * @return the tag identifier uri */ public String getUri() { - return _tagEntry.getURI(); + return _creationProvider.getNamespace(); } /** * @return the default prefix */ public String getDefaultPrefix() { - return _tagEntry.getDefaultPrefix(); + return _creationProvider.getDefaultPrefix(); } /** @@ -126,50 +126,17 @@ * @return the tag name */ public String getTagName() { - return _tagEntry.getTagName(); + return _creationProvider.getTagName(); } /** - * @return the id - */ - private String getItemId() { - return _tagEntry.getId(); - } - - /** - * @return the palette entry that this creation info is based on - */ - public TagToolPaletteEntry getTagEntry() { - return _tagEntry; - } - - /** - * @return {@link TagCreationInfo} for the tag entity + * @return the creation provider */ - public TagCreationInfo getTagCreationInfo(){ - Model model = TaglibDomainMetaDataQueryHelper.getModel(_taglibMetaDataContext); - if (model != null){ - Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model, PaletteInfos.TRAIT_ID); - if (trait != null){ - PaletteInfos pis = (PaletteInfos)trait.getValue(); - PaletteInfo pi = pis.findPaletteInfoById(getItemId()); - if (pi != null){ - return pi.getTagCreation(); - } - } - //tag-creation trait on entity directly? - Entity tag = getTagEntity(); - if (tag != null){//metadata exists - trait = TaglibDomainMetaDataQueryHelper.getTrait(tag, "tag-create"); //$NON-NLS-1$ - if (trait != null && trait.getValue() != null){ - return (TagCreationInfo)trait.getValue(); - } - } - } - return null; + public ITagDropSourceData getTagCreationProvider() + { + return _creationProvider; } - /** * @return the {@link Entity} for this tag element being created */ Index: src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java,v retrieving revision 1.10 diff -u -r1.10 ItemCreationTool.java --- src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java 4 Nov 2008 01:15:44 -0000 1.10 +++ src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java 4 May 2009 22:28:34 -0000 @@ -18,7 +18,7 @@ import org.eclipse.gef.commands.Command; import org.eclipse.gef.tools.TargetingTool; import org.eclipse.jst.pagedesigner.commands.CreateItemCommand; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; import org.eclipse.jst.pagedesigner.itemcreation.customizer.DropCustomizationController; import org.eclipse.swt.graphics.Cursor; @@ -32,17 +32,17 @@ * @author mengbo */ public class ItemCreationTool extends TargetingTool { - TagToolPaletteEntry _tagPaletteItem; //can we get rid of this? + private final ITagDropSourceData _tagDropSourceData; //can we get rid of this? /** * Default constructor. Sets the default and disabled cursors. - * @param tagToolPaletteEntryItem + * @param tagDropSourceData */ - public ItemCreationTool(TagToolPaletteEntry tagToolPaletteEntryItem) { + public ItemCreationTool(ITagDropSourceData tagDropSourceData) { setDefaultCursor(SharedCursors.CURSOR_TREE_ADD); setDisabledCursor(SharedCursors.NO); - this._tagPaletteItem = tagToolPaletteEntryItem; + this._tagDropSourceData = tagDropSourceData; } /** @@ -69,7 +69,7 @@ */ protected Request createTargetRequest() { ItemCreationRequest request = new ItemCreationRequest(); - request.setTagToolPaletteEntry(_tagPaletteItem); + request.setTagCreationProvider(_tagDropSourceData); return request; } @@ -168,7 +168,7 @@ if (command instanceof CreateItemCommand) { status = new DropCustomizationController((CreateItemCommand) command, - _tagPaletteItem.getURI(), _tagPaletteItem.getTagName(), + _tagDropSourceData, ((CreateItemCommand)command).getDocument(), ((CreateItemCommand)command).getPosition()). performCustomization(); Index: src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java,v retrieving revision 1.5 diff -u -r1.5 ItemCreationRequest.java --- src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java 18 Nov 2008 22:22:51 -0000 1.5 +++ src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java 4 May 2009 22:28:34 -0000 @@ -14,7 +14,8 @@ import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.Request; import org.eclipse.gef.requests.DropRequest; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; /** * Tag tool item creation request class @@ -29,7 +30,7 @@ /** * Constant used for tag tool item */ - public static final String TAG_TOOL_PALETTE_ENTRY = "TagToolPaletteEntry"; //$NON-NLS-1$ + private static final String DROP_SOURCE_DATA = "TagToolPaletteEntry"; //$NON-NLS-1$ /** * Constant used for location during creation request */ @@ -43,14 +44,6 @@ super(REQ_ITEM_CREATION); } - /** - * Constructor - * @param type - */ - public ItemCreationRequest(Object type) { - super(type); - } - /* * (non-Javadoc) * @@ -73,18 +66,18 @@ /** * Set the tag tool item for creation request - * @param tagToolPaletteEntryItem + * @param creationProvider */ - public void setTagToolPaletteEntry(TagToolPaletteEntry tagToolPaletteEntryItem) { - getExtendedData().remove(TAG_TOOL_PALETTE_ENTRY); - getExtendedData().put(TAG_TOOL_PALETTE_ENTRY, tagToolPaletteEntryItem); + public void setTagCreationProvider(final IDropSourceData creationProvider) { + getExtendedData().remove(DROP_SOURCE_DATA); + getExtendedData().put(DROP_SOURCE_DATA, creationProvider); } /** - * @return {@link TagToolPaletteEntry} requesting creation + * @return {@link ITagDropSourceData} requesting creation */ - public TagToolPaletteEntry getTagToolPaletteEntry() { - return (TagToolPaletteEntry)getExtendedData().get(TAG_TOOL_PALETTE_ENTRY); + public IDropSourceData getTagCreationProvider() { + return (IDropSourceData)getExtendedData().get(DROP_SOURCE_DATA); } } Index: src/org/eclipse/jst/pagedesigner/itemcreation/UserCustomizedTagCreationAdvisor.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/UserCustomizedTagCreationAdvisor.java,v retrieving revision 1.1 diff -u -r1.1 UserCustomizedTagCreationAdvisor.java --- src/org/eclipse/jst/pagedesigner/itemcreation/UserCustomizedTagCreationAdvisor.java 4 Nov 2008 01:15:44 -0000 1.1 +++ src/org/eclipse/jst/pagedesigner/itemcreation/UserCustomizedTagCreationAdvisor.java 4 May 2009 22:28:34 -0000 @@ -72,12 +72,12 @@ if (isFirstParent) { - command = new UserCustomizedContainerCreationCommand(position, parentTagIdentifier, _creationData.getTagId(), (IAdaptable) parentCustomizationData); + command = new UserCustomizedContainerCreationCommand(position, parentTagIdentifier, _creationData.getTagId(), parentCustomizationData); isFirstParent = false; } else { - command.chain(new UserCustomizedContainerCreationCommand(position, parentTagIdentifier, _creationData.getTagId(), (IAdaptable) parentCustomizationData)); + command.chain(new UserCustomizedContainerCreationCommand(position, parentTagIdentifier, _creationData.getTagId(), parentCustomizationData)); } } return command; Index: src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java,v retrieving revision 1.6 diff -u -r1.6 ItemCreationEditPolicy.java --- src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java 4 Sep 2007 18:13:52 -0000 1.6 +++ src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java 4 May 2009 22:28:34 -0000 @@ -53,10 +53,11 @@ if (domposition == null) { return null; } +// TagToolCreationAdapter tagToolCreationAdapter = new TagToolCreationAdapter(r.getTagToolPaletteEntry(), getViewer(getHost()).getModel()); return new CreateItemCommand( PDPlugin .getResourceString("ItemCreationEditPolicy.CommandLabel.CreateItem"),//$NON-NLS-1$ - getViewer(getHost()).getModel(), domposition, r.getTagToolPaletteEntry()); + getViewer(getHost()).getModel(), domposition, r.getTagCreationProvider()); } return null; } Index: src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerTemplateTransferDragSourceListener.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerTemplateTransferDragSourceListener.java diff -N src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerTemplateTransferDragSourceListener.java --- src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerTemplateTransferDragSourceListener.java 28 Feb 2007 05:04:41 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 Sybase, Inc. 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: - * Sybase, Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.pagedesigner.dnd.internal; - -import java.util.List; - -import org.eclipse.gef.EditPart; -import org.eclipse.gef.EditPartViewer; -import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; - -/** - * @author mengbo - */ -public class DesignerTemplateTransferDragSourceListener extends - TemplateTransferDragSourceListener { - - /** - * @param viewer - */ - public DesignerTemplateTransferDragSourceListener(EditPartViewer viewer) { - super(viewer); - } - - protected Object getTemplate() { - Object object = super.getTemplate(); - if (object == null) { - List selection = getViewer().getSelectedEditParts(); - if (selection.size() == 1) { - EditPart editpart = (EditPart) getViewer() - .getSelectedEditParts().get(0); - Object model = editpart.getModel(); - if (model instanceof TagToolPaletteEntry) { - return model; - } - } - } - return null; - } -} Index: src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java,v retrieving revision 1.3 diff -u -r1.3 DesignerSourceDropTargetListener.java --- src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java 10 Oct 2007 00:05:15 -0000 1.3 +++ src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java 4 May 2009 22:28:33 -0000 @@ -15,7 +15,7 @@ import org.eclipse.gef.dnd.TemplateTransfer; import org.eclipse.jst.pagedesigner.commands.PaletteDropInsertCommand; import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.TextTransfer; @@ -125,14 +125,15 @@ event.currentDataType)) { Object data = event.data; PaletteDropInsertCommand command = null; - if (data instanceof TagToolPaletteEntry) { - TagToolPaletteEntry tagItem = (TagToolPaletteEntry) data; + if (data instanceof IDropSourceData) { + final IDropSourceData dropSourceData = (IDropSourceData) data; + // "Create new item" command = new PaletteDropInsertCommand( PageDesignerResources .getInstance() .getString( - "DesignerSourceDropTargetListener.InserCommandLabel"), _textEditor, tagItem, _location); //$NON-NLS-1$ + "DesignerSourceDropTargetListener.InserCommandLabel"), _textEditor, dropSourceData, _location); //$NON-NLS-1$ } return command; } Index: src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java,v retrieving revision 1.6 diff -u -r1.6 DesignerSourceMouseTrackAdapter.java --- src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java 18 Nov 2008 22:22:54 -0000 1.6 +++ src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java 4 May 2009 22:28:33 -0000 @@ -16,7 +16,7 @@ import org.eclipse.jst.pagedesigner.commands.PaletteDropInsertCommand; import org.eclipse.jst.pagedesigner.commands.SourceViewerCommand; import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceDataProvider; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; @@ -54,6 +54,7 @@ * @see org.eclipse.swt.events.MouseMoveListener#mouseMove(org.eclipse.swt.events.MouseEvent) */ public void mouseMove(MouseEvent event) { + //Feedback is handled by DesignerSourceDropTargetListener - commenting out below Object object = getPaletteObject(); StyledText text = null; if (_textEditor.getTextViewer() != null) { @@ -102,11 +103,11 @@ * @see org.eclipse.gef.palette.PaletteListener#activeToolChanged(org.eclipse.gef.ui.palette.PaletteViewer, * org.eclipse.gef.palette.ToolEntry) */ - private Object getPaletteObject() { + private IDropSourceDataProvider getPaletteObject() { if (_domain.getPaletteViewer() != null) { Object tool = _domain.getPaletteViewer().getActiveTool(); - if (tool instanceof TagToolPaletteEntry) { - return tool; + if (tool instanceof IDropSourceDataProvider) { + return (IDropSourceDataProvider) tool; } } return null; @@ -131,17 +132,16 @@ } private PaletteDropInsertCommand getCommand(MouseEvent event) { - Object data = getPaletteObject(); + IDropSourceDataProvider data = getPaletteObject(); PaletteDropInsertCommand command = null; - if (data instanceof TagToolPaletteEntry) { - TagToolPaletteEntry descriptor = (TagToolPaletteEntry) data; + if (data != null) { // "Create new item" command = new PaletteDropInsertCommand( PageDesignerResources .getInstance() .getString( "DesignerSourceDropTargetListener.InserCommandLabel"), //$NON-NLS-1$ - _textEditor, descriptor, _location); + _textEditor, data.getDropSourceData(), _location); } return command; } Index: src/org/eclipse/jst/pagedesigner/dnd/internal/PDTemplateTransferDropTargetListener.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/PDTemplateTransferDropTargetListener.java,v retrieving revision 1.9 diff -u -r1.9 PDTemplateTransferDropTargetListener.java --- src/org/eclipse/jst/pagedesigner/dnd/internal/PDTemplateTransferDropTargetListener.java 18 Nov 2008 22:22:53 -0000 1.9 +++ src/org/eclipse/jst/pagedesigner/dnd/internal/PDTemplateTransferDropTargetListener.java 4 May 2009 22:28:33 -0000 @@ -19,7 +19,7 @@ import org.eclipse.gef.dnd.TemplateTransfer; import org.eclipse.jst.pagedesigner.PDPlugin; import org.eclipse.jst.pagedesigner.commands.CreateItemCommand; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; import org.eclipse.jst.pagedesigner.itemcreation.ItemCreationRequest; import org.eclipse.jst.pagedesigner.itemcreation.customizer.DropCustomizationController; import org.eclipse.swt.dnd.DND; @@ -92,12 +92,9 @@ ItemCreationRequest request = (ItemCreationRequest) getCreateRequest(); Object transferObj = TemplateTransfer.getInstance().getObject(); - if (transferObj instanceof TagToolPaletteEntry) + if (transferObj instanceof IDropSourceData) { - TagToolPaletteEntry tagItem = - (TagToolPaletteEntry) transferObj; - - request.setTagToolPaletteEntry(tagItem); + request.setTagCreationProvider((IDropSourceData) transferObj); request.setLocation(getDropLocation()); } else @@ -140,11 +137,9 @@ if (command instanceof CreateItemCommand) { final ItemCreationRequest request = (ItemCreationRequest) getCreateRequest(); - final String name = request.getTagToolPaletteEntry().getTagName(); - final String uri = request.getTagToolPaletteEntry().getURI(); final CreateItemCommand createCommand = (CreateItemCommand) command; final IStatus status = - new DropCustomizationController(createCommand, uri, name, createCommand.getDocument(), createCommand.getPosition()) + new DropCustomizationController(createCommand, request.getTagCreationProvider(), createCommand.getDocument(), createCommand.getPosition()) .performCustomization(); return status.getSeverity() == IStatus.OK; Index: src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java,v retrieving revision 1.6 diff -u -r1.6 ElementCustomizationCommand.java --- src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java 18 Nov 2008 22:22:55 -0000 1.6 +++ src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java 4 May 2009 22:28:34 -0000 @@ -13,12 +13,14 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; +import java.util.List; import org.eclipse.emf.common.command.Command; -import org.eclipse.emf.common.util.EList; import org.eclipse.jst.jsf.core.internal.tld.CMUtil; import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationAttribute; -import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationInfo; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.MetadataTagDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.TagToolCreationAdapter; import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteElementTemplateHelper; import org.eclipse.jst.pagedesigner.itemcreation.CreationData; import org.eclipse.jst.pagedesigner.itemcreation.internal.AbstractCreationCommand; @@ -97,11 +99,14 @@ */ protected void applyChildElementCustomization() { - final TagCreationInfo tagCreationInfo = _creationData.getTagCreationInfo(); - if (tagCreationInfo != null) + final ITagDropSourceData tagDropSourceData = + _creationData.getTagCreationProvider(); + if (tagDropSourceData != null) { + MetadataTagDropSourceData provider = + TagToolCreationAdapter.createMdTagCreationProvider(tagDropSourceData, _model); PaletteElementTemplateHelper.applyTemplate(_model, _element, - _creationData.getTagEntry(), tagCreationInfo); + provider); } } @@ -117,6 +122,7 @@ * @param element * @param creationData */ + @SuppressWarnings("deprecation") protected final void ensureRequiredAttrs(final Element element, final CreationData creationData) { @@ -150,16 +156,16 @@ */ protected void applyAttributeCustomization() { - final TagCreationInfo info = _creationData.getTagCreationInfo(); + final ITagDropSourceData info = _creationData.getTagCreationProvider(); if (info != null) { - final EList list = info.getAttributes(); + final MetadataTagDropSourceData provider = + TagToolCreationAdapter.createMdTagCreationProvider(info, _model); + final List list = provider.getAttributes(); if (list != null) { - for (final Iterator it = list.iterator(); it.hasNext();) + for (final TagCreationAttribute attr : list) { - final TagCreationAttribute attr = (TagCreationAttribute) it - .next(); _element.setAttribute(attr.getId(), (attr.getValue() == null ? "" : attr.getValue())); //$NON-NLS-1$ } Index: src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedContainerCreationCommand.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedContainerCreationCommand.java,v retrieving revision 1.3 diff -u -r1.3 UserCustomizedContainerCreationCommand.java --- src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedContainerCreationCommand.java 27 Mar 2009 19:38:35 -0000 1.3 +++ src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedContainerCreationCommand.java 4 May 2009 22:28:34 -0000 @@ -6,7 +6,11 @@ import org.eclipse.jst.jsf.common.dom.TagIdentifier; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; import org.eclipse.jst.pagedesigner.dom.ValidatorSupport; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.TagToolCreationAdapter; import org.eclipse.jst.pagedesigner.itemcreation.customizer.ICustomizationData; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; /** * Tag container creation command for tags dropped on to the WPE by the user @@ -57,20 +61,26 @@ return _data; } - @Override - protected IDOMPosition doExecute() + protected IDOMPosition doExecute() { final IDOMPosition domPosition = getDomPosition(); - final QName containerQName = getContainerTag().asQName(); + final QName containerQName = getContainerTag().asQName(); IDOMPosition newPosition = domPosition; - newPosition = ValidatorSupport.insertContainer(domPosition, containerQName, getContainerCustomizationData()); + final IDOMModel model = ((IDOMNode) domPosition.getContainerNode()) + .getModel(); + + final ITagDropSourceData creationProvider = TagToolCreationAdapter + .findProviderForContainer(containerQName); + + newPosition = ValidatorSupport.insertContainer(domPosition, + model, creationProvider, getContainerCustomizationData()); if (newPosition == null) { newPosition = domPosition; } - + return newPosition; } } Index: src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java,v retrieving revision 1.3 diff -u -r1.3 TagContainerCreationCommand.java --- src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java 18 Nov 2008 22:22:55 -0000 1.3 +++ src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java 4 May 2009 22:28:34 -0000 @@ -16,6 +16,10 @@ import org.eclipse.jst.jsf.common.dom.TagIdentifier; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; import org.eclipse.jst.pagedesigner.dom.ValidatorSupport; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.TagToolCreationAdapter; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; /** * @author cbateman @@ -45,9 +49,15 @@ final QName containerQName = getContainerTag().asQName(); boolean hasform = ValidatorSupport.checkContainer(domPosition, containerQName); IDOMPosition newPosition = domPosition; - if (!hasform) { + if (!hasform) + { + final IDOMModel model = ((IDOMNode) domPosition.getContainerNode()) + .getModel(); + + final ITagDropSourceData creationProvider = + TagToolCreationAdapter.findProviderForContainer(containerQName); newPosition = ValidatorSupport - .insertContainer(domPosition, containerQName, getContainerCustomizationData()); + .insertContainer(domPosition, model, creationProvider, getContainerCustomizationData()); if (newPosition == null) { newPosition = domPosition; } Index: src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedElementCustomizationCommand.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedElementCustomizationCommand.java,v retrieving revision 1.3 diff -u -r1.3 UserCustomizedElementCustomizationCommand.java --- src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedElementCustomizationCommand.java 27 Mar 2009 19:38:35 -0000 1.3 +++ src/org/eclipse/jst/pagedesigner/itemcreation/command/UserCustomizedElementCustomizationCommand.java 4 May 2009 22:28:34 -0000 @@ -1,23 +1,22 @@ package org.eclipse.jst.pagedesigner.itemcreation.command; import java.util.HashMap; -import java.util.Iterator; +import java.util.List; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; -import org.eclipse.emf.common.util.EList; import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext; import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper; import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ResolverUtil; import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationAttribute; -import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationInfo; import org.eclipse.jst.pagedesigner.PDPlugin; import org.eclipse.jst.pagedesigner.dom.DOMPosition; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.MetadataTagDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.TagToolCreationAdapter; import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager; -import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer; import org.eclipse.jst.pagedesigner.itemcreation.CreationData; import org.eclipse.jst.pagedesigner.itemcreation.customizer.ICustomizationData; import org.eclipse.jst.pagedesigner.utils.JSPUtil; @@ -70,14 +69,14 @@ if (_creationData.getDropCustomizationData() != null) { final ICustomizationData data = (ICustomizationData) _creationData.getDropCustomizationData().getAdapter(ICustomizationData.class); - + if (data.getChildrenData() != null) { - int childCount = 0; + int childCount = 0; CHILDREN_LOOP: for (ICustomizationData child : data.getChildrenData().getChildList()) { assert (_element.getOwnerDocument() != null); - + // Setup child node Element childNode = _element.getOwnerDocument().createElement(child.getTagIdentifier().getTagName()); String prefix = JSPUtil.getOrCreatePrefix(_model, child.getTagIdentifier().getUri(), null); @@ -90,47 +89,36 @@ String attrValue = attrMap.get(attrName); childNode.setAttribute(attrName, attrValue); } - + // Attach child node to element _element.appendChild(childNode); - + // Set up other attributes and child tags for this child IFile fileForDocument = ResolverUtil.getFileForDocument(_model.getStructuredDocument()); if (fileForDocument == null) { - PDPlugin.log("File not found for model: "+_model.toString(), new Exception("Stack trace only")); //$NON-NLS-1$//$NON-NLS-2$ - continue CHILDREN_LOOP; + PDPlugin.log("File not found for model: "+_model.toString(), new Exception("Stack trace only")); //$NON-NLS-1$//$NON-NLS-2$ + continue CHILDREN_LOOP; } final IProject project = fileForDocument.getProject(); - PaletteItemManager paletteManager = PaletteItemManager.getInstance(project); - - if (paletteManager == null) - { - PDPlugin.log("paletteManager not found for project: "+project.toString(), new Exception("Stack trace only")); //$NON-NLS-1$ //$NON-NLS-2$ - continue CHILDREN_LOOP; - } - - TaglibPaletteDrawer drawer = paletteManager.findCategoryByURI(child.getTagIdentifier().getUri()); - - if (drawer == null) - { - PDPlugin.log("Drawer not found for uri: "+child.getTagIdentifier().getUri(), new Exception("Stack trace only")); //$NON-NLS-1$ //$NON-NLS-2$ - continue CHILDREN_LOOP; - } + PaletteItemManager itemManager = PaletteItemManager.getInstance(project); - TagToolPaletteEntry paletteEntry = drawer.getTagPaletteEntryByTagName(child.getTagIdentifier().getTagName()); - - if (paletteEntry == null) + if (itemManager == null) { - PDPlugin.log("Palette entry not found for drawer: "+drawer.toString(), new Exception("Stack trace only")); //$NON-NLS-1$ //$NON-NLS-2$ - continue CHILDREN_LOOP; + PDPlugin.log("paletteManager not found for project: "+project.toString(), new Exception("Stack trace only")); //$NON-NLS-1$ //$NON-NLS-2$ + continue CHILDREN_LOOP; } + + final String uri = child.getTagIdentifier().getUri(); + final String tagName = child.getTagIdentifier().getTagName(); + final ITagDropSourceData creationProvider = + TagToolCreationAdapter.findProviderForContainer(uri, tagName, itemManager); final ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper .createMetaDataModelContext(project, child.getTagIdentifier().getUri()); IDOMPosition domPosition = new DOMPosition(_element, childCount++); - CreationData creationData = new CreationData(paletteEntry,_model, domPosition, modelContext, child); - + CreationData creationData = new CreationData(creationProvider,_model, domPosition, modelContext, child); + ElementCustomizationCommand command = new UserCustomizedElementCustomizationCommand(_model, childNode, creationData); command.execute(); } @@ -184,16 +172,17 @@ private void addAttributesFromPaletteMetadata(Map attributes) { - final TagCreationInfo info = _creationData.getTagCreationInfo(); + final ITagDropSourceData info = _creationData.getTagCreationProvider(); if (info != null) { - final EList list = info.getAttributes(); + final MetadataTagDropSourceData provider = + TagToolCreationAdapter.createMdTagCreationProvider(info, _model); + + final List list = provider.getAttributes(); if (list != null) { - for (final Iterator it = list.iterator(); it.hasNext();) + for (final TagCreationAttribute attr : list) { - final TagCreationAttribute attr = (TagCreationAttribute) it - .next(); attributes.put(attr.getId(), (attr.getValue() == null ? "" //$NON-NLS-1$ : attr.getValue())); } Index: src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java,v retrieving revision 1.5 diff -u -r1.5 TagToolPaletteEntry.java --- src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java 11 Feb 2009 19:02:45 -0000 1.5 +++ src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java 4 May 2009 22:28:33 -0000 @@ -11,63 +11,100 @@ package org.eclipse.jst.pagedesigner.editors.palette; import org.eclipse.gef.Tool; -import org.eclipse.gef.palette.ToolEntry; +import org.eclipse.gef.palette.CombinedTemplateCreationEntry; +import org.eclipse.gef.requests.CreationFactory; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer; import org.eclipse.jst.pagedesigner.itemcreation.ItemCreationTool; /** * Represents a tag palette item entry in the web page designer palette - * + * */ -public class TagToolPaletteEntry extends ToolEntry { - - private String tagName; - - /** - * Constructor - * @param tagName - * @param label - * @param shortDescription - * @param iconSmall - * @param iconLarge - */ - public TagToolPaletteEntry(String tagName, String label, String shortDescription, - ImageDescriptor iconSmall, ImageDescriptor iconLarge) { - super(label, shortDescription, iconSmall, iconLarge); - this.tagName = tagName; - } - - /** - * @return tagName - */ - public String getTagName(){ - return tagName; - } - - /** - * Convenience method returning the tag libraries default prefix, if applicable - * @return default prefix - */ - public String getDefaultPrefix(){ - if (getParent() instanceof TaglibPaletteDrawer) - return ((TaglibPaletteDrawer)getParent()).getDefaultPrefix(); - return ""; //$NON-NLS-1$ - } - - /** - * @return uri of the tag's library - */ - public String getURI(){ - return ((TaglibPaletteDrawer)getParent()).getURI(); - } - - /* (non-Javadoc) - * @see org.eclipse.gef.palette.ToolEntry#createTool() - */ - public Tool createTool() { - return new ItemCreationTool(this); - } - - +public class TagToolPaletteEntry extends CombinedTemplateCreationEntry + implements IDropSourceDataProvider +{ + + /** + * Constructor + * + * @param template + * the template item for the drop + * @param label + * @param shortDescription + * @param iconSmall + * @param iconLarge + */ + public TagToolPaletteEntry(final ITagDropSourceData template, + final String label, final String shortDescription, + final ImageDescriptor iconSmall, final ImageDescriptor iconLarge) + { + super(label, shortDescription, template, NOOP_FACTORY, iconSmall, + iconLarge); + } + + /** + * @return tagName + */ + public String getTagName() + { + return getTemplate().getTagName(); + } + + /** + * Convenience method returning the tag libraries default prefix, if + * applicable + * + * @return default prefix + */ + public String getDefaultPrefix() + { + return getTemplate().getDefaultPrefix(); + } + + /** + * @return uri of the tag's library + */ + public String getURI() + { + return getTemplate().getNamespace(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.palette.ToolEntry#createTool() + */ + @Override + public Tool createTool() + { + return new ItemCreationTool(getTemplate()); + } + + private final static CreationFactory NOOP_FACTORY = new CreationFactory() + { + public Object getNewObject() + { + // should never get called + throw new UnsupportedOperationException( + "createTool should be overriden, so this should never be called"); //$NON-NLS-1$ + } + + public Object getObjectType() + { + // should never get called + throw new UnsupportedOperationException( + "createTool should be overriden, so this should never be called"); //$NON-NLS-1$ + } + }; + + @Override + public ITagDropSourceData getTemplate() + { + return (ITagDropSourceData) super.getTemplate(); + } + + public IDropSourceData getDropSourceData() + { + return getTemplate(); + } } Index: src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java,v retrieving revision 1.4 diff -u -r1.4 DesignerPaletteViewerProvider.java --- src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java 18 Nov 2008 22:22:41 -0000 1.4 +++ src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java 4 May 2009 22:28:33 -0000 @@ -12,6 +12,7 @@ package org.eclipse.jst.pagedesigner.editors.palette; import org.eclipse.gef.EditDomain; +import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; import org.eclipse.gef.internal.ui.palette.editparts.DrawerEditPart; import org.eclipse.gef.ui.palette.PaletteContextMenuProvider; import org.eclipse.gef.ui.palette.PaletteViewer; @@ -20,7 +21,6 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jst.pagedesigner.PDPlugin; -import org.eclipse.jst.pagedesigner.dnd.internal.DesignerTemplateTransferDragSourceListener; import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; @@ -56,7 +56,7 @@ // XXX: should only use the following when we use Template viewer - .addDragSourceListener(new DesignerTemplateTransferDragSourceListener( + .addDragSourceListener(new TemplateTransferDragSourceListener( viewer)); } Index: src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java,v retrieving revision 1.4 diff -u -r1.4 TagCreationFactory.java --- src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java 18 Nov 2008 22:22:40 -0000 1.4 +++ src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java 4 May 2009 22:28:34 -0000 @@ -19,9 +19,7 @@ /** * Creates instances of - * {@link org.eclipse.jst.pagedesigner.itemcreation.ITagCreator}s for a the - * given - * {@link org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry} + * {@link org.eclipse.jst.pagedesigner.itemcreation.ITagCreator}s * (Eventually) Will use TagCreavtorFactories registered using * org.eclipse.jst.jsf.pagedesigner.tagcreationfactories ext-pt. Currently only * using DefaultTagCreator. Index: src/org/eclipse/jst/pagedesigner/itemcreation/customizer/DropCustomizationController.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/DropCustomizationController.java,v retrieving revision 1.2 diff -u -r1.2 DropCustomizationController.java --- src/org/eclipse/jst/pagedesigner/itemcreation/customizer/DropCustomizationController.java 18 Nov 2008 22:23:09 -0000 1.2 +++ src/org/eclipse/jst/pagedesigner/itemcreation/customizer/DropCustomizationController.java 4 May 2009 22:28:34 -0000 @@ -9,6 +9,8 @@ import org.eclipse.jst.pagedesigner.PDPlugin; import org.eclipse.jst.pagedesigner.commands.ICustomizableCommand; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; import org.eclipse.jst.pagedesigner.elementedit.ElementEditFactoryRegistry; import org.eclipse.jst.pagedesigner.elementedit.IElementEdit; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; @@ -23,24 +25,21 @@ public final class DropCustomizationController { private final ICustomizableCommand _command; - private final String _uri; - private final String _name; + private final IDropSourceData _dropSourceData; private final IDOMDocument _domDocument; private final IDOMPosition _domPosition; /** * @param command - * @param uri - * @param name + * @param dropSourceData * @param domDocument * @param domPosition */ public DropCustomizationController(final ICustomizableCommand command, - final String uri, final String name, final IDOMDocument domDocument, final IDOMPosition domPosition) + final IDropSourceData dropSourceData, final IDOMDocument domDocument, final IDOMPosition domPosition) { _command = command; - _uri = uri; - _name = name; + _dropSourceData = dropSourceData; _domDocument = domDocument; _domPosition = domPosition; } @@ -50,15 +49,20 @@ */ public IStatus performCustomization() { + String tagName = _dropSourceData.getId(); + if (_dropSourceData instanceof ITagDropSourceData) + { + tagName = ((ITagDropSourceData)_dropSourceData).getTagName(); + } final TagIdentifier tagId = TagIdentifierFactory.createJSPTagWrapper( - _uri, _name); + _dropSourceData.getNamespace(), tagName); final IElementEdit elementEdit = ElementEditFactoryRegistry.getInstance() .createElementEdit(tagId); IStatus status = Status.OK_STATUS; if (elementEdit != null) { - final IDropCustomizer customizer = elementEdit.getDropCustomizer(tagId); + final IDropCustomizer customizer = elementEdit.getDropCustomizer(_dropSourceData); if (customizer != null) { Index: src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java,v retrieving revision 1.5 diff -u -r1.5 ValidatorSupport.java --- src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java 4 Sep 2007 18:13:58 -0000 1.5 +++ src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java 4 May 2009 22:28:33 -0000 @@ -17,12 +17,9 @@ import org.eclipse.jst.jsf.core.internal.tld.CMUtil; import org.eclipse.jst.pagedesigner.adapters.IBodyInfo; import org.eclipse.jst.pagedesigner.adapters.internal.BodyInfo; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; -import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager; -import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; import org.eclipse.jst.pagedesigner.utils.CommandUtil; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.Text; @@ -89,32 +86,27 @@ return false; } - /** - * @param position - * @param container - * @param customizationData - * @return the new dom position for the inserted container or null if could - * not insert - */ - public static IDOMPosition insertContainer(IDOMPosition position, - QName container, IAdaptable customizationData) { - final TaglibPaletteDrawer category = - PaletteItemManager.getCurrentInstance().findCategoryByURI - (container.getNamespaceURI()); - if (category != null){ - final TagToolPaletteEntry tagItem = - category.getTagPaletteEntryByTagName(container.getLocalPart()); - final IDOMModel model = - ((IDOMNode) position.getContainerNode()).getModel(); - final Element form = CommandUtil.excuteInsertion - (tagItem, model, position, customizationData); - if (form != null) { - DOMPosition pos = new DOMPosition(form, 0); - return pos; - } - } + /** + * @param position + * @param model + * @param creationProvider + * @param customizationData + * @return the new dom position for the inserted container or null if could + * not insert + */ + public static IDOMPosition insertContainer(final IDOMPosition position, + final IDOMModel model, + final ITagDropSourceData creationProvider, final IAdaptable customizationData) + { + final Element newContainer = CommandUtil.executeInsertion( + creationProvider, model, position, customizationData); + if (newContainer != null) + { + DOMPosition pos = new DOMPosition(newContainer, 0); + return pos; + } return null; - } + } /** * @return the body info Index: src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java,v retrieving revision 1.6 diff -u -r1.6 IElementEdit.java --- src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java 4 Nov 2008 01:15:43 -0000 1.6 +++ src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java 4 May 2009 22:28:34 -0000 @@ -15,6 +15,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jst.jsf.common.dom.TagIdentifier; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator; import org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer; import org.eclipse.jst.pagedesigner.parts.ElementEditPart; @@ -112,10 +113,17 @@ * Returning null and returning a IDropCustomizer whose runCustomizer always returns * OK and getDropCustomizationData always returns null will be considered * equivalent by the framework. + * @deprecated use getDropCustomizer(IDropSourceData) instead */ public IDropCustomizer getDropCustomizer(TagIdentifier tagId); /** + * @param dropSourceData + * @return the drop customizer for the drop source data or null if none. + */ + public IDropCustomizer getDropCustomizer(final IDropSourceData dropSourceData); + + /** * @param tagId * @return a tag creator for the indicated tag or null to indicate that the * system should use it's default tag creator Index: src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java,v retrieving revision 1.8 diff -u -r1.8 AbstractElementEdit.java --- src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java 18 Nov 2008 22:22:46 -0000 1.8 +++ src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java 4 May 2009 22:28:34 -0000 @@ -16,6 +16,9 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jst.jsf.common.dom.TagIdentifier; import org.eclipse.jst.jsf.core.internal.tld.CMUtil; +import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; +import org.eclipse.jst.pagedesigner.editors.palette.ITagDropSourceData; import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator; import org.eclipse.jst.pagedesigner.itemcreation.customizer.AbstractDropCustomizer; import org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer; @@ -105,11 +108,27 @@ private final static IDropCustomizer DEFAULT_DROP_CUSTOMIZER = new AbstractDropCustomizer(){/* do nothing; use defaults */}; + /** (non-Javadoc) + * @see org.eclipse.jst.pagedesigner.elementedit.IElementEdit#getDropCustomizer(org.eclipse.jst.jsf.common.dom.TagIdentifier) + * @deprecated use getDropCustomizer(IDropSourceData) instead. + */ public IDropCustomizer getDropCustomizer(TagIdentifier tagId) { return DEFAULT_DROP_CUSTOMIZER; } + public IDropCustomizer getDropCustomizer(IDropSourceData dropSourceData) + { + if (dropSourceData instanceof ITagDropSourceData) + { + final String uri = ((ITagDropSourceData)dropSourceData).getNamespace(); + final String tagName = ((ITagDropSourceData)dropSourceData).getTagName(); + final TagIdentifier tagId = TagIdentifierFactory.createJSPTagWrapper(uri, tagName); + return getDropCustomizer(tagId); + } + return DEFAULT_DROP_CUSTOMIZER; + } + /* (non-Javadoc) * @see org.eclipse.jst.pagedesigner.elementedit.IElementEdit#getTagCreator(org.eclipse.jst.jsf.common.dom.TagIdentifier) */ Index: src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java,v retrieving revision 1.10 diff -u -r1.10 PaletteDropInsertCommand.java --- src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java 18 Nov 2008 22:22:39 -0000 1.10 +++ src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java 4 May 2009 22:28:33 -0000 @@ -19,7 +19,7 @@ import org.eclipse.jst.pagedesigner.dom.DOMPosition; import org.eclipse.jst.pagedesigner.dom.EditModelQuery; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; import org.eclipse.jst.pagedesigner.itemcreation.customizer.DropCustomizationController; import org.eclipse.jst.pagedesigner.utils.CommandUtil; import org.eclipse.wst.sse.ui.StructuredTextEditor; @@ -38,7 +38,7 @@ private final Logger _log = PDPlugin .getLogger(PaletteDropInsertCommand.class); - private TagToolPaletteEntry _tagItem; + private IDropSourceData _creationProvider; private int _location; @@ -49,13 +49,13 @@ /** * @param label * @param editor - * @param tagItem + * @param creationProvider * @param location */ public PaletteDropInsertCommand(String label, StructuredTextEditor editor, - TagToolPaletteEntry tagItem, int location) { + IDropSourceData creationProvider, int location) { super(label, editor); - _tagItem = tagItem; + _creationProvider = creationProvider; _location = location; } @@ -84,20 +84,24 @@ } } - //essentially copied from ItemCreationTool so that DesignView drop and SourceViewDrop are same. - // Note that SourceView does NO drop validation checking. This is handled by ItemCreationPolicy in DesignView - final IStatus status = - performCustomization(getModel().getDocument(), position); - - if (status.getSeverity() == IStatus.OK) { - Element element = CommandUtil.excuteInsertion(this._tagItem, - getModel(), position, getCustomizationData()); - if (element != null) { - formatNode(element); - } - this._element = element; - } - } + // essentially copied from ItemCreationTool so that DesignView drop and + // SourceViewDrop are same. + // Note that SourceView does NO drop validation checking. This is + // handled by ItemCreationPolicy in DesignView + final IStatus status = performCustomization(getModel().getDocument(), + position); + + if (status.isOK()) + { + final Element element = CommandUtil.executeInsertion( + _creationProvider, getModel() + , position, getCustomizationData()); + if (element != null) { + formatNode(element); + } + this._element = element; + } + } /** * @param domDoc @@ -105,9 +109,7 @@ * @return status */ protected IStatus performCustomization(final IDOMDocument domDoc, final IDOMPosition position) { - final String uri = _tagItem.getURI(); - final String name = _tagItem.getTagName(); - return new DropCustomizationController(this, uri, name, domDoc, position).performCustomization(); + return new DropCustomizationController(this, _creationProvider, domDoc, position).performCustomization(); } /** Index: src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java,v retrieving revision 1.6 diff -u -r1.6 CreateItemCommand.java --- src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java 4 Nov 2008 01:15:42 -0000 1.6 +++ src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java 4 May 2009 22:28:33 -0000 @@ -14,7 +14,7 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jst.pagedesigner.dom.IDOMPosition; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.IDropSourceData; import org.eclipse.jst.pagedesigner.utils.CommandUtil; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.w3c.dom.Element; @@ -24,56 +24,57 @@ */ public class CreateItemCommand extends DesignerCommand implements ICustomizableCommand { - private final IDOMPosition _position; + private final IDOMPosition _position; + private final IDropSourceData _creationProvider; + private Element _ele; + private IAdaptable _customizationData; - private final TagToolPaletteEntry _tagItem; - private Element _ele; - private IAdaptable _customizationData; - - /** - * @param label - * @param model - * @param position - * @param tagItem - */ - public CreateItemCommand(String label, IDOMModel model, - IDOMPosition position, TagToolPaletteEntry tagItem) { - super(label, model.getDocument()); - this._position = position; - this._tagItem = tagItem; - } - - - /** - * @return the dom position for the drop - */ - public IDOMPosition getPosition() + /** + * @param label + * @param model + * @param position + * @param creationProvider + */ + public CreateItemCommand(String label, IDOMModel model, + IDOMPosition position, IDropSourceData creationProvider) { + super(label, model.getDocument()); + this._position = position; + this._creationProvider = creationProvider; + } + + /** + * @return the dom position for the drop + */ + public IDOMPosition getPosition() { return _position; } /* - * (non-Javadoc) - * - * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#doExecute() - */ - protected void doExecute() { - Element element = CommandUtil.excuteInsertion(this._tagItem, - getModel(), this._position, this._customizationData); - if (element != null) { - formatNode(element); - } - this._ele = element; - } + * (non-Javadoc) + * + * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#doExecute() + */ + protected void doExecute() + { + Element element = CommandUtil.executeInsertion( + _creationProvider, + getModel(), this._position, this._customizationData); + if (element != null) + { + formatNode(element); + } + this._ele = element; + } - @Override + @Override protected void postPostExecute() - { + { // during JUnit testing, we may not have viewer. // this will cause us not to have undo support, // but should not effect testing for this command - if (getViewer() != null) + if (getViewer() != null) { super.postPostExecute(); } @@ -94,13 +95,14 @@ } /* - * (non-Javadoc) - * - * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#getAfterCommandDesignerSelection() - */ - protected ISelection getAfterCommandDesignerSelection() { - return toDesignSelection(_ele); - } + * (non-Javadoc) + * + * @seeorg.eclipse.jst.pagedesigner.commands.DesignerCommand# + * getAfterCommandDesignerSelection() + */ + protected ISelection getAfterCommandDesignerSelection() { + return toDesignSelection(_ele); + } /** * @param customizationData Index: src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java =================================================================== RCS file: /cvsroot/webtools/org.eclipse.jsf/components/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java,v retrieving revision 1.10 diff -u -r1.10 PaletteElementTemplateHelper.java --- src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java 18 Nov 2008 22:22:51 -0000 1.10 +++ src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java 4 May 2009 22:28:33 -0000 @@ -21,9 +21,8 @@ import javax.xml.parsers.ParserConfigurationException; import org.eclipse.jst.jsf.common.ui.internal.logging.Logger; -import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.TagCreationInfo; import org.eclipse.jst.pagedesigner.PDPlugin; -import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; +import org.eclipse.jst.pagedesigner.editors.palette.MetadataTagDropSourceData; import org.eclipse.jst.pagedesigner.utils.JSPUtil; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText; @@ -54,16 +53,15 @@ * * @param model * @param element - * @param tagItem - * @param tagCreationInfo + * @param creationProvider */ public static void applyTemplate(IDOMModel model, Element element, - TagToolPaletteEntry tagItem, TagCreationInfo tagCreationInfo) { + MetadataTagDropSourceData creationProvider) { if (element == null || element.getLocalName() == null) { return; } - Node[] templateNodes = getTemplateNodes(model, tagCreationInfo); + Node[] templateNodes = getTemplateNodes(model, creationProvider); if (templateNodes != null) { for (int i=0;i getAttributes() + { + if (_tagCreationInfo != null) + { + return _tagCreationInfo.getAttributes(); + } + return null; + } + + /** + * @return the template derived from metadata for tag drop or null if none. + */ + public String getTemplate() + { + if (_tagCreationInfo != null) + { + return (String) _tagCreationInfo.getTemplate(); + } + return null; + } + + public String getDefaultPrefix() + { + return _delegate.getDefaultPrefix(); + } + + public String getTagName() + { + return _delegate.getTagName(); + } + + public String getNamespace() + { + return _delegate.getNamespace(); + } + + private TagCreationInfo getTagCreationInfo() + { + final ITaglibDomainMetaDataModelContext metadataContext = CommandUtil + .getMetadataContext(getNamespace(), _model); + TagCreationInfo tagCreationInfo = null; + String id = getId(); + if (metadataContext != null && id != null) + { + tagCreationInfo = createCreationInfo(metadataContext, id, + getTagName()); + } + return tagCreationInfo; + } + + public String getId() + { + return _delegate.getId(); + } + + /** + * @param metaDataContext + * @param id + * @param tagName + * @return a tag creation info for the tag and id in the metadata context + */ + static TagCreationInfo createCreationInfo( + final ITaglibDomainMetaDataModelContext metaDataContext, + final String id, final String tagName) + { + final Model model = TaglibDomainMetaDataQueryHelper + .getModel(metaDataContext); + if (model != null) + { + Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model, + PaletteInfos.TRAIT_ID); + if (trait != null) + { + final PaletteInfos pis = (PaletteInfos) trait.getValue(); + final PaletteInfo pi = pis.findPaletteInfoById(id); + if (pi != null) + { + return pi.getTagCreation(); + } + } + // tag-creation trait on entity directly? + final Entity tag = getTagEntity(metaDataContext, tagName); + if (tag != null) + {// metadata exists + trait = TaglibDomainMetaDataQueryHelper.getTrait(tag, + "tag-create"); //$NON-NLS-1$ + if (trait != null && trait.getValue() != null) + { + return (TagCreationInfo) trait.getValue(); + } + } + } + return null; + } + /** + * @param metaDataContext + * @param tagName + * @return the {@link Entity} for this tag element being created + */ + private static Entity getTagEntity( + final ITaglibDomainMetaDataModelContext metaDataContext, + final String tagName) + { + return TaglibDomainMetaDataQueryHelper.getEntity(metaDataContext, + tagName); + } +} \ No newline at end of file Index: src/org/eclipse/jst/pagedesigner/editors/palette/TagToolCreationAdapter.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/editors/palette/TagToolCreationAdapter.java diff -N src/org/eclipse/jst/pagedesigner/editors/palette/TagToolCreationAdapter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jst/pagedesigner/editors/palette/TagToolCreationAdapter.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,105 @@ +package org.eclipse.jst.pagedesigner.editors.palette; + + +import javax.xml.namespace.QName; + +import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteItemManager; +import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; + +/** + * ITagDropSourceData implementation useable by TagToolPaletteEntry for its + * drop transfer object. + * + * @author cbateman + * + */ +public final class TagToolCreationAdapter implements ITagDropSourceData +{ + private String _uri; + private String _tagName; + private String _defaultPrefix; + private String _id; + + /** + * @param uri + * @param tagName + * @param defaultPrefix + * @param id + */ + public TagToolCreationAdapter(final String uri, final String tagName, final String defaultPrefix, + final String id) + { + _uri = uri; + _tagName = tagName; + _defaultPrefix = defaultPrefix; + _id = id; + } + + public String getDefaultPrefix() + { + return _defaultPrefix; + } + + public String getTagName() + { + return _tagName; + } + + public String getNamespace() + { + return _uri; + } + + public String getId() + { + return _id; + } + + /** + * @param provider + * @param model + * @return a metadata tag creation adapter for an existing tag + * creation provider (which need not itself be a TagToolCreationAdapter) + * and a dom model. + */ + public static MetadataTagDropSourceData createMdTagCreationProvider(final ITagDropSourceData provider, final IDOMModel model) + { + return new MetadataTagDropSourceData(provider, model); + } + + /** + * @param container + * @return the tag creation provider + */ + public static ITagDropSourceData findProviderForContainer( + final QName container) + { + return findProviderForContainer(container.getNamespaceURI(), container + .getLocalPart(), PaletteItemManager.getCurrentInstance()); + } + + /** + * @param uri + * @param tagName + * @param itemManager + * @return the tag creation provider + */ + public static ITagDropSourceData findProviderForContainer( + final String uri, final String tagName, + final PaletteItemManager itemManager) + { + final TaglibPaletteDrawer category = itemManager.findCategoryByURI(uri); + if (category != null) + { + final TagToolPaletteEntry tagItem = category + .getTagPaletteEntryByTagName(tagName); + if (tagItem != null) + { + return tagItem.getTemplate(); + } + } + return null; + } + +} Index: src/org/eclipse/jst/pagedesigner/editors/palette/ITagDropSourceData.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/editors/palette/ITagDropSourceData.java diff -N src/org/eclipse/jst/pagedesigner/editors/palette/ITagDropSourceData.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jst/pagedesigner/editors/palette/ITagDropSourceData.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,24 @@ +package org.eclipse.jst.pagedesigner.editors.palette; + + +/** + * Provides generic information for tag creation from a palette drop. + * + * @author cbateman + * + */ +public interface ITagDropSourceData extends IDropSourceData +{ + /** + * @return tagName + */ + public String getTagName(); + + /** + * Convenience method returning the tag libraries default prefix, if + * applicable + * + * @return default prefix + */ + public String getDefaultPrefix(); +} Index: src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceData.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceData.java diff -N src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceData.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceData.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,20 @@ +package org.eclipse.jst.pagedesigner.editors.palette; + +/** + * Data describing a palette drop. + * + * @author cbateman + * + */ +public interface IDropSourceData +{ + /** + * @return uri of the tag's library. MUST NOT BE NULL. + */ + public String getNamespace(); + /** + * @return a unique id for a tag creation provider that may be different + * from the uri. MUST NOT BE NULL. + */ + public String getId(); +} Index: src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceDataProvider.java =================================================================== RCS file: src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceDataProvider.java diff -N src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceDataProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jst/pagedesigner/editors/palette/IDropSourceDataProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,16 @@ +package org.eclipse.jst.pagedesigner.editors.palette; + +/** + * Used by objects (usually palette entries) that wish provide drop source data + * to a client. + * + * @author cbateman + * + */ +public interface IDropSourceDataProvider +{ + /** + * @return a drop source data in context + */ + IDropSourceData getDropSourceData(); +}