/*
* Copyright (c) 2002 IBM Corporation and others.
* All rights reserved.   This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
* 
* Contributors:
*   IBM - Initial API and implementation
*   Jens Lukowski/Innoopract - initial renaming/restructuring
* 
*/
package org.eclipse.wst.xml.core.internal.contentmodel;

/**
 * CMNode interface
 */
public interface CMNode {        
  
  static final int ANY_ELEMENT           = 1;
	static final int ATTRIBUTE_DECLARATION = 2;
	static final int DATA_TYPE             = 3;
	static final int DOCUMENT              = 4;
	static final int ELEMENT_DECLARATION   = 5;
	static final int ENTITY_DECLARATION    = 6;
	static final int GROUP                 = 7;
  static final int NAME_SPACE            = 8;
  static final int DOCUMENTATION         = 9;
/**
 * getNodeName method
 * @return java.lang.String
 */
String getNodeName();
/**
 * getNodeType method
 * @return int
 *
 * Returns one of :
 *
 */
int getNodeType();

/**
 * supports method
 * @return boolean
 *
 * Returns true if the CMNode supports a specified property
 *
 */
boolean supports(String propertyName);

/**
 * getProperty method
 * @return java.lang.Object
 *
 * Returns the object property desciped by the propertyName
 *
 */
Object getProperty(String propertyName); //todo throw unsupported property exception

}
