/*******************************************************************************
 * Copyright (c) 2001, 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.xml.ui.internal.wizards;

import java.util.Hashtable;
import java.util.List;
import java.util.Vector;

import org.eclipse.wst.xml.core.internal.contentmodel.CMAnyElement;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.util.ContentBuilder;
import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo;

public class NamespaceInfoContentBuilder extends ContentBuilder
  {      
    protected int count = 1;   
    public List list = new Vector();
    protected Hashtable table = new Hashtable();   

    public NamespaceInfoContentBuilder()
    {
      super();
    }
   
    public void visitCMElementDeclaration(CMElementDeclaration ed)
    {                      
      if (ed.getProperty("http://org.eclipse.wst/cm/properties/definitionInfo") != null)
      {
        super.visitCMElementDeclaration(ed);
      }
    }

    protected void createAnyElementNode(CMAnyElement anyElement)
    {
      String uri = anyElement.getNamespaceURI();
      if (uri != null && !uri.startsWith("##"))
      {
        if (table.get(uri) == null)
        {
          NamespaceInfo info = new NamespaceInfo();
          info.uri = uri;     
          info.prefix = "p" + count++;
          table.put(uri, info); 
          list.add(info);
        }
      }
    }
  }                         

