/*******************************************************************************
 * Copyright (c) 2002, 2006 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
 *     Jens Lukowski/Innoopract - initial renaming/restructuring
 *     
 *******************************************************************************/
package org.eclipse.wst.xml.core.internal.contentmodel.basic;

import java.util.Enumeration;
import java.util.List;

import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;


public class CMAttributeDeclarationImpl extends CMNodeImpl implements CMAttributeDeclaration
{
  protected CMDataType dataType;
  protected String nodeName;    
  protected int usage;  
  protected CMDocument cmDocument;
  protected boolean prefixQualification;
  protected List xsiTypes;
                
  public CMAttributeDeclarationImpl(String nodeName, int usage)
  {
    this(nodeName, usage, null);
  }     

  public CMAttributeDeclarationImpl(String nodeName, int usage, CMDataType dataType)
  {        
    this.nodeName = nodeName;
    this.usage = usage;
    this.dataType = dataType; 
  }    

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

  public Object getProperty(String propertyName)
  {
    Object result = null;   
    if (propertyName.equals("CMDocument")) //$NON-NLS-1$
    {
      result = cmDocument;
    } 
    else if (propertyName.equals("XSITypes")) //$NON-NLS-1$
    {                                      
      result = xsiTypes;
    }
    else if (propertyName.equals("http://org.eclipse.wst/cm/properties/nsPrefixQualification")) //$NON-NLS-1$
    {
      result = prefixQualification ? "qualified" : "unqualified"; //$NON-NLS-1$ //$NON-NLS-2$
    }  
    else
    {
      result = super.getProperty(propertyName);
    }
    return result;
  }

  public void setPrefixQualification(boolean qualified)
  {
    prefixQualification = qualified;
  }              

  public void setXSITypes(List list)
  {
    xsiTypes = list;
  }
     
  public void setCMDocument(CMDocument cmDocument)
  {
    this.cmDocument = cmDocument;
  }

  public String getNodeName()
  {
    return nodeName;
  }

  public String getAttrName()
  {
    return nodeName;
  }

  public void setAttrType(CMDataType dataType)
  {
    this.dataType = dataType;
  }

  public CMDataType getAttrType()
  {
    return dataType;
  }

  public int getUsage()
  {
    return usage;
  }
           
  /** @deprecated */
  public String getDefaultValue()
  {
    return ""; //$NON-NLS-1$
  }                 

  /** @deprecated */
  public Enumeration getEnumAttr()
  {
    return null;
  }
}
