Enhanced support for tr:panelTabbed:
 - only allow palette drop of tr:showDetailItem
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java
index b54e8e4..dc086aa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java
@@ -24,6 +24,8 @@
 import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
 import org.eclipse.jst.pagedesigner.editpolicies.DragMoveEditPolicy;
 import org.eclipse.jst.pagedesigner.editpolicies.ElementResizableEditPolicy;
+import org.eclipse.jst.pagedesigner.itemcreation.ItemCreationEditPolicy;
+import org.eclipse.jst.pagedesigner.itemcreation.ItemCreationRequest;
 import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
 import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
 import org.eclipse.jst.pagedesigner.tools.ObjectModeDragTracker;
@@ -50,12 +52,20 @@
 	 */
 	@Override
 	public void createEditPolicies(ElementEditPart part) {
-		part.installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new PanelTabbedElementResizableEditPolicy());
-		part.installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new PanelTabbedDragMoveEditPolicy());
+		part.installEditPolicy(
+				EditPolicy.SELECTION_FEEDBACK_ROLE,
+				new PanelTabbedElementResizableEditPolicy());
+		part.installEditPolicy(
+				EditPolicy.PRIMARY_DRAG_ROLE,
+				new PanelTabbedDragMoveEditPolicy());
+		part.installEditPolicy(
+				ItemCreationRequest.REQ_ITEM_CREATION,
+				new PanelTabbedItemCreationEditPolicy());
 	}
 
 	/**
-	 * Extends ElementResizableEditPolicy.
+	 * Extends ElementResizableEditPolicy to determine if tab is clicked and
+	 * respond accordingly.
 	 * 
 	 * @author Ian Trimble - Oracle
 	 */
@@ -139,7 +149,7 @@
 	}
 
 	/**
-	 * Extends DragMoveEditPolicy.
+	 * Extends DragMoveEditPolicy to add OnlyShowDetailItemsRule as a rule.
 	 * 
 	 * @author Ian Trimble - Oracle
 	 */
@@ -162,44 +172,77 @@
 			return null;
 		}
 
-		private static class OnlyShowDetailItemsRule extends DefaultPositionRule {
+	}
 
-			/**
-			 * Instantiates an instance.
-			 * 
-			 * @param actionData ActionData instance.
-			 */
-			public OnlyShowDetailItemsRule(ActionData actionData) {
-				super(actionData);
-			}
+	/**
+	 * Extends ItemCreationEditPolicy to add OnlyShowDetailItemsRule as a rule.
+	 * 
+	 * @author Ian Trimble - Oracle
+	 */
+	public static class PanelTabbedItemCreationEditPolicy extends ItemCreationEditPolicy {
 
-			/*
-			 * (non-Javadoc)
-			 * @see org.eclipse.jst.pagedesigner.validation.caret.DefaultPositionRule#isEditable(org.eclipse.jst.pagedesigner.validation.caret.Target)
-			 */
-			@Override
-			public boolean isEditable(Target target) {
-				if (ITrinidadConstants.TAG_IDENTIFIER_PANELTABBED.isSameTagType(
-						target.getTagWrapper())) {
-					return isDataDroppable();
-				}
-				return true;
+		/* (non-Javadoc)
+		 * @see org.eclipse.jst.pagedesigner.editpolicies.DropEditPolicy#createDropChildValidator(org.eclipse.gef.requests.DropRequest)
+		 */
+		@Override
+		protected IPositionMediator createDropChildValidator(DropRequest r) {
+			DropData dropData = createDropData(r);
+			if (dropData != null) {
+				DnDPositionValidator validator = 
+					new DnDPositionValidator(new DropActionData(
+							ActionData.PALETTE_DND, dropData));
+				validator.addRule(new OnlyShowDetailItemsRule(validator.getActionData()));
+				return validator;
 			}
-
-			private boolean isDataDroppable() {
-				ActionData actionData = getActionData();
-				if (actionData instanceof DropActionData) {
-					DropActionData dropActionData = (DropActionData)actionData;
-					TagIdentifier tagIdentifier = 
-						(TagIdentifier)dropActionData.getDropData().getTagIdentifiers().get(0);
-					if (ITrinidadConstants.TAG_IDENTIFIER_SHOWDETAILITEM.isSameTagType(
-							tagIdentifier)) {
-						return true;
-					}
-				}
-				return false;
-			}
+			return null;
 		}
+
+	}
+
+	/**
+	 * Extends DefaultPositionRule to only allow showDetailItem tags to be
+	 * dropped on panelTabbed tag.
+	 * 
+	 * @author Ian Trimble - Oracle
+	 */
+	private static class OnlyShowDetailItemsRule extends DefaultPositionRule {
+
+		/**
+		 * Instantiates an instance.
+		 * 
+		 * @param actionData ActionData instance.
+		 */
+		public OnlyShowDetailItemsRule(ActionData actionData) {
+			super(actionData);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.jst.pagedesigner.validation.caret.DefaultPositionRule#isEditable(org.eclipse.jst.pagedesigner.validation.caret.Target)
+		 */
+		@Override
+		public boolean isEditable(Target target) {
+			if (ITrinidadConstants.TAG_IDENTIFIER_PANELTABBED.isSameTagType(
+					target.getTagWrapper())) {
+				return isDataDroppable();
+			}
+			return true;
+		}
+
+		private boolean isDataDroppable() {
+			ActionData actionData = getActionData();
+			if (actionData instanceof DropActionData) {
+				DropActionData dropActionData = (DropActionData)actionData;
+				TagIdentifier tagIdentifier = 
+					(TagIdentifier)dropActionData.getDropData().getTagIdentifiers().get(0);
+				if (ITrinidadConstants.TAG_IDENTIFIER_SHOWDETAILITEM.isSameTagType(
+						tagIdentifier)) {
+					return true;
+				}
+			}
+			return false;
+		}
+
 	}
 
 }