diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml index 820cd4cbc..367e9ce65 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml +++ b/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml @@ -431,6 +431,9 @@ + diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java index d4cc01cf5..e161ecc64 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java @@ -177,7 +177,7 @@ private Trait getTraitForEntityUsingContext(final String traitName) { return query.getQueryHelper().getTrait(entity, traitName); } - private IMetaDataDomainContext getMetaDataDomainContext() { + protected IMetaDataDomainContext getMetaDataDomainContext() { final IFile file = getFile2(); if (file != null) { diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacetNameType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacetNameType.java new file mode 100644 index 000000000..7b6f20d47 --- /dev/null +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacetNameType.java @@ -0,0 +1,83 @@ +package org.eclipse.jst.jsf.taglibprocessing.attributevalues; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.jst.jsf.common.metadata.Entity; +import org.eclipse.jst.jsf.common.metadata.Trait; +import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext; +import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper; +import org.eclipse.jst.jsf.common.metadata.query.internal.IMetaDataQuery; +import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryContextFactory; +import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryFactory; +import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver; +import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory; +import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr; +import org.w3c.dom.Node; + +/** + * Meta-data processing type representing a facet name type. + * + *

Provisional API - subject to change

+ * + */ + +public class FacetNameType extends StringType { + /** + * Default name of property in annotation file to use when supplying facet name values from meta-data + */ + public static final String VALID_FACET_NAMES = "valid-facets"; //$NON-NLS-1$ + + private List values; + + private List getFacetNameCandidats() { + synchronized (this) { + if (values != null) { + return values; + } + values = Collections.emptyList(); + if (getStructuredDocumentContext() == null) { + return values; + } + IDOMContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE.getDOMContextResolver(getStructuredDocumentContext()); + if (resolver == null) { + return values; + } + Node aNode = resolver.getNode(); + if (!(aNode instanceof IDOMAttr)) { + return values; + } + Node parentNode = ((IDOMAttr)aNode).getOwnerElement().getParentNode(); + if (parentNode == null) { + return values; + } + IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(getProject2()); + IMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(context); + Entity parentEntity = query.getQueryHelper().getEntity(parentNode.getNamespaceURI(), parentNode.getLocalName()); + if (parentEntity == null) { + return values; + } + EList parentEntityTraits = parentEntity.getTraits(); + if (parentEntityTraits.isEmpty()) { + return values; + } + Trait facetsTrait = parentEntityTraits.stream().filter(trait -> Objects.equals(trait.getId(), VALID_FACET_NAMES)).findFirst().orElse(null); + if (facetsTrait != null) { + values = TraitValueHelper.getValueAsListOfStrings(facetsTrait); + } + return values; + } + } + + @Override + protected List getMDValidValues() { + return getFacetNameCandidats(); + } + + @Override + protected List getMDPossibleValues() { + return getFacetNameCandidats(); + } +} diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml index 4a55d3b6c..85c4c3776 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml +++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml @@ -333,6 +333,11 @@
+ + + org.eclipse.jst.jsf.core.attributevalues.FacetNameType + +