Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/contentmodel/PropertyProviderFactory.java')
-rw-r--r--bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/contentmodel/PropertyProviderFactory.java359
1 files changed, 359 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/contentmodel/PropertyProviderFactory.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/contentmodel/PropertyProviderFactory.java
new file mode 100644
index 0000000000..3347343d40
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/contentmodel/PropertyProviderFactory.java
@@ -0,0 +1,359 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.contentmodel;
+
+import java.util.Hashtable;
+
+import org.eclipse.wst.common.contentmodel.annotation.AnnotationMap;
+import org.eclipse.wst.html.core.HTMLCMProperties;
+
+/**
+ * The factory object of PropertyProvider.
+ */
+final class PropertyProviderFactory {
+
+
+ /**
+ * DefaultProvider is intended to be used for unknown properties.
+ * It always returns null value for any properties.
+ */
+ class DefaultProvider implements PropertyProvider {
+ public DefaultProvider() {
+ super();
+ }
+
+ public boolean supports(HTMLElementDeclaration edecl) {
+ return false;
+ }
+
+ public Object get(HTMLElementDeclaration edecl) {
+ return null;
+ }
+ }
+
+ abstract class AbstractElementPropertyProvider implements PropertyProvider {
+ protected AbstractElementPropertyProvider() {
+ super();
+ }
+
+ public boolean supports(HTMLElementDeclaration edecl) {
+ return (edecl != null);
+ }
+
+ public Object get(HTMLElementDeclaration edecl) {
+ if (!(edecl instanceof HTMLPropertyDeclaration))
+ return null;
+ return getElementProperty((HTMLPropertyDeclaration)edecl);
+ }
+
+ abstract protected Object getElementProperty(HTMLPropertyDeclaration decl);
+ }
+
+ /*
+ * "tagInfo"
+ * gets documentation for the element
+ */
+ class PPTagInfo extends AbstractElementPropertyProvider {
+ private final static String htmlAnnotationLoc = "platform:/plugin/org.eclipse.wst.html.core/data/htmref.xml"; //$NON-NLS-1$
+ protected AnnotationMap fAnnotationMap = null;
+
+ public PPTagInfo() {
+ super();
+ }
+
+ /**
+ * Gets the annotationMap.
+ * @return Returns a AnnotationMap
+ */
+ protected AnnotationMap getAnnotationMap() {
+ if (fAnnotationMap == null) {
+ fAnnotationMap = new AnnotationMap();
+ try {
+ fAnnotationMap.load(htmlAnnotationLoc);
+ }
+ catch (Exception e) {
+ // no annotation available
+ }
+ }
+ return fAnnotationMap;
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ if (decl instanceof HTMLElementDeclaration) {
+ return getAnnotationMap().getProperty(((HTMLElementDeclaration)decl).getElementName(), "tagInfo"); //$NON-NLS-1$
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /*
+ * "shouldKeepSpace"
+ */
+ class PPShouldKeepSpace extends AbstractElementPropertyProvider {
+ public PPShouldKeepSpace() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return new Boolean(decl.shouldKeepSpaces());
+ }
+ }
+
+ /*
+ * "shouldIndentChildSource"
+ */
+ class PPShouldIndentChildSource extends AbstractElementPropertyProvider {
+ public PPShouldIndentChildSource() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return new Boolean(decl.shouldIndentChildSource());
+ }
+ }
+
+ /*
+ * "terminators"
+ */
+ class PPTerminators extends AbstractElementPropertyProvider {
+ public PPTerminators() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ if (! (decl instanceof HTMLElemDeclImpl)) return null;
+ return ((HTMLElemDeclImpl)decl).getTerminators();
+ }
+ }
+
+ /*
+ * "prohibitedAncestors"
+ */
+ class PPProhibitedAncestors extends AbstractElementPropertyProvider {
+ public PPProhibitedAncestors() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return decl.getProhibitedAncestors();
+ }
+ }
+
+ /*
+ * "isJSP"
+ */
+ class PPIsJSP extends AbstractElementPropertyProvider {
+ public PPIsJSP() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return new Boolean(decl.isJSP());
+ }
+ }
+
+ /*
+ * "isXHTML"
+ * HTMLElementDeclaration itself never represent any XHTML element declaration.
+ * So, this property must be always false.
+ */
+ class PPIsXHTML extends AbstractElementPropertyProvider {
+ public PPIsXHTML() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return new Boolean(false);
+ }
+ }
+
+ /*
+ * "isSSI"
+ * Each declaration class for SSI elements must provide this property itself,
+ * and then return true. Other declaration must always return false.
+ */
+ class PPIsSSI extends AbstractElementPropertyProvider {
+ public PPIsSSI() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return new Boolean(false);
+ }
+ }
+
+ /*
+ * "lineBreakHint"
+ */
+ class PPLineBreakHint extends AbstractElementPropertyProvider {
+ public PPLineBreakHint() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ String hint = HTMLCMProperties.Values.BREAK_NONE;
+ switch (decl.getLineBreakHint()) {
+ case HTMLElementDeclaration.BREAK_AFTER_START :
+ hint = HTMLCMProperties.Values.BREAK_AFTER_START;
+ break;
+ case HTMLElementDeclaration.BREAK_BEFORE_START_AND_AFTER_END :
+ hint = HTMLCMProperties.Values.BREAK_BEFORE_START_AND_AFTER_END;
+ break;
+ case HTMLElementDeclaration.BREAK_NONE :
+ // nothing to do
+ default :
+ break;
+ }
+ return hint;
+ }
+ }
+
+ /*
+ * "layoutType"
+ */
+ class PPLayoutType extends AbstractElementPropertyProvider {
+ public PPLayoutType() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ String type = HTMLCMProperties.Values.LAYOUT_NONE;
+ switch (decl.getLayoutType()) {
+ case HTMLElementDeclaration.LAYOUT_BLOCK :
+ type = HTMLCMProperties.Values.LAYOUT_BLOCK;
+ break;
+ case HTMLElementDeclaration.LAYOUT_BREAK :
+ type = HTMLCMProperties.Values.LAYOUT_BREAK;
+ break;
+ case HTMLElementDeclaration.LAYOUT_HIDDEN :
+ type = HTMLCMProperties.Values.LAYOUT_HIDDEN;
+ break;
+ case HTMLElementDeclaration.LAYOUT_OBJECT :
+ type = HTMLCMProperties.Values.LAYOUT_OBJECT;
+ break;
+ case HTMLElementDeclaration.LAYOUT_WRAP :
+ type = HTMLCMProperties.Values.LAYOUT_WRAP;
+ break;
+ case HTMLElementDeclaration.LAYOUT_NONE :
+ // nothing to do.
+ default :
+ break;
+ }
+ return type;
+ }
+ }
+
+ /*
+ * "omitType"
+ */
+ class PPOmitType extends AbstractElementPropertyProvider {
+ public PPOmitType() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ String type = HTMLCMProperties.Values.OMIT_NONE;
+ switch (decl.getOmitType()) {
+ case HTMLElementDeclaration.OMIT_BOTH :
+ type = HTMLCMProperties.Values.OMIT_BOTH;
+ break;
+ case HTMLElementDeclaration.OMIT_END :
+ type = HTMLCMProperties.Values.OMIT_END;
+ break;
+ case HTMLElementDeclaration.OMIT_END_DEFAULT :
+ type = HTMLCMProperties.Values.OMIT_END_DEFAULT;
+ break;
+ case HTMLElementDeclaration.OMIT_END_MUST :
+ type = HTMLCMProperties.Values.OMIT_END_MUST;
+ break;
+ case HTMLElementDeclaration.OMIT_NONE :
+ // nothing to do.
+ default :
+ break;
+ }
+ return type;
+ }
+ }
+
+ /*
+ * "inclusion"
+ */
+ class PPInclusion extends AbstractElementPropertyProvider {
+ public PPInclusion() {
+ super();
+ }
+
+ protected Object getElementProperty(HTMLPropertyDeclaration decl) {
+ return decl.getInclusion();
+ }
+ }
+
+ public static PropertyProvider getProvider(String propName) {
+ PropertyProviderFactory factory = getInstance();
+ PropertyProvider pp = (PropertyProvider) factory.registry.get(propName);
+ if (pp != null)
+ return pp;
+
+ pp = factory.create(propName);
+ if (pp == null)
+ return factory.defaultProvider;
+
+ factory.registry.put(propName, pp);
+ return pp;
+ }
+
+ private static PropertyProviderFactory instance = null;
+
+ private synchronized static PropertyProviderFactory getInstance() {
+ if (instance != null)
+ return instance;
+ instance = new PropertyProviderFactory();
+ return instance;
+ }
+
+ private Hashtable registry = new Hashtable();
+ private PropertyProvider defaultProvider = new DefaultProvider();
+
+ private PropertyProviderFactory() {
+ super();
+ }
+
+ private PropertyProvider create(String propName) {
+ PropertyProvider pp = null;
+ if (propName.equals(HTMLCMProperties.IS_JSP))
+ pp = new PPIsJSP();
+ else if (propName.equals(HTMLCMProperties.IS_XHTML))
+ pp = new PPIsXHTML();
+ else if (propName.equals(HTMLCMProperties.IS_SSI))
+ pp = new PPIsSSI();
+ else if (propName.equals(HTMLCMProperties.LAYOUT_TYPE))
+ pp = new PPLayoutType();
+ else if (propName.equals(HTMLCMProperties.LINE_BREAK_HINT))
+ pp = new PPLineBreakHint();
+ else if (propName.equals(HTMLCMProperties.PROHIBITED_ANCESTORS))
+ pp = new PPProhibitedAncestors();
+ else if (propName.equals(HTMLCMProperties.SHOULD_KEEP_SPACE))
+ pp = new PPShouldKeepSpace();
+ else if (propName.equals(HTMLCMProperties.SHOULD_INDENT_CHILD_SOURCE))
+ pp = new PPShouldIndentChildSource();
+ else if (propName.equals(HTMLCMProperties.TERMINATORS))
+ pp = new PPTerminators();
+ else if (propName.equals(HTMLCMProperties.TAGINFO))
+ pp = new PPTagInfo();
+ else if (propName.equals(HTMLCMProperties.OMIT_TYPE))
+ pp = new PPOmitType();
+ else if (propName.equals(HTMLCMProperties.INCLUSION))
+ pp = new PPInclusion();
+
+ return pp;
+ }
+} \ No newline at end of file

Back to the top