Package org.eclipse.wst.html.core.internal.contentmodel.ssi

Source Code of org.eclipse.wst.html.core.internal.contentmodel.ssi.SSICMDocumentFactory$CMDocImpl$Elements

/*******************************************************************************
* Copyright (c) 2004, 2005 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.internal.contentmodel.ssi;

import java.util.Hashtable;
import java.util.Iterator;

import org.eclipse.wst.html.core.internal.contentmodel.HTMLCMDocumentFactory;
import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamespace;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;

/**
* CMDocument factory for SSI documents.
*/
public final class SSICMDocumentFactory {

  private final static String PREFIX = "SSI";//$NON-NLS-1$
  private final static String DOC_TYPE_NAME = "SSI";//$NON-NLS-1$

  static class CMNamespaceImpl implements CMNamespace {
    public CMNamespaceImpl() {
      super();
    }

    public String getPrefix() {
      return PREFIX;
    }

    public String getURI() {
      return ""; //$NON-NLS-1$
    }

    public String getNodeName() {
      return DOC_TYPE_NAME;
    }

    public int getNodeType() {
      return CMNode.NAME_SPACE;
    }

    public boolean supports(String propertyName) {
      return false;
    }

    public Object getProperty(String propertyName) {
      return null;
    }

  }

  static class CMDocImpl implements CMDocument {
    private static CMDocument hcm = HTMLCMDocumentFactory.getCMDocument(CMDocType.HTML_DOC_TYPE);

    static class Elements implements CMNamedNodeMap {
      private static String[] names = {HTML40Namespace.ElementName.SSI_CONFIG, HTML40Namespace.ElementName.SSI_ECHO, HTML40Namespace.ElementName.SSI_EXEC, HTML40Namespace.ElementName.SSI_FSIZE, HTML40Namespace.ElementName.SSI_FLASTMOD, HTML40Namespace.ElementName.SSI_INCLUDE, HTML40Namespace.ElementName.SSI_PRINTENV, HTML40Namespace.ElementName.SSI_SET};
      private Hashtable map = new Hashtable();

      public Elements() {
        CMNamedNodeMap elems = hcm.getElements();
        for (int i = 0; i < names.length; i++) {
          String name = names[i];
          CMElementDeclaration dec = (CMElementDeclaration) elems.getNamedItem(name);
          if (dec != null)
            map.put(name, dec);
        }
      }

      public int getLength() {
        return map.size();
      }

      public CMNode getNamedItem(String name) {
        String cooked = getCanonicalName(name);
        if (!map.containsKey(cooked))
          return null;
        return (CMNode) map.get(cooked);
      }

      public CMNode item(int index) {
        Iterator iter = iterator();
        while (iter.hasNext()) {
          Object node = iter.next();
          if (--index < 0)
            return (CMNode) node;
        }
        return null;
      }

      public Iterator iterator() {
        return map.values().iterator();
      }

      private String getCanonicalName(String rawName) {
        return rawName.toUpperCase();
      }
    }

    static private Elements elements = new Elements();


    public CMDocImpl() {
      super();
    }

    public String getNodeName() {
      return ""; //$NON-NLS-1$
    }

    public int getNodeType() {
      return CMNode.DOCUMENT;
    }

    public CMNamedNodeMap getElements() {
      return elements;
    }

    public CMNamedNodeMap getEntities() {
      return null;
    }

    public CMNamespace getNamespace() {
      return ssins;
    }

    public Object getProperty(String propertyName) {
      return null;
    }

    public boolean supports(String propertyName) {
      return false;
    }
  }

  private static CMNamespace ssins = new CMNamespaceImpl();
  private static CMDocument mycm = new CMDocImpl();

  private SSICMDocumentFactory() {
    super();
  }

  public static CMDocument getCMDocument() {
    return mycm;
  }

}
TOP

Related Classes of org.eclipse.wst.html.core.internal.contentmodel.ssi.SSICMDocumentFactory$CMDocImpl$Elements

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.