/*******************************************************************************
 * Copyright (c) 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.bpel.ui.details.tree;

import org.eclipse.bpel.model.messageproperties.Property;
import org.eclipse.xsd.XSDTypeDefinition;


/**
 * Tree node to represent a Property for which a PropertyAlias exists that
 * references the messageType of a Variable.
 */
public class PropertyTreeNode extends TreeNode {

	XSDTypeDefinitionTreeNode xsdType;

	public PropertyTreeNode(Property property, boolean isCondensed) {
		super(property, isCondensed);
		if (isCondensed && property.getType() != null)  {
			xsdType = new XSDTypeDefinitionTreeNode(
				(XSDTypeDefinition)property.getType(), isCondensed);
		}
	}

	/* ITreeNode */

	@Override
	public String getLabelSuffix() {
		if (isCondensed && xsdType != null)  return xsdType.getLabel();
		return null;
	}

	@Override
	public Object[] getChildren() {
		if (isCondensed) {
			if (xsdType != null)  return xsdType.getChildren();
			return EMPTY_ARRAY;
		}
		Property property = (Property)modelObject;
		if (property.getType() != null)  {
			Object[] result = new Object[1];
			result[0] = new XSDTypeDefinitionTreeNode(
				(XSDTypeDefinition)property.getType(), isCondensed);
			return result;
		}
		return EMPTY_ARRAY;
	}

	@Override
	public boolean hasChildren() {
		if (isCondensed) {
			if (xsdType != null)  return xsdType.hasChildren();
			return false;
		}
		Property property = (Property)modelObject;
		return (property.getType() != null);
	}
}
