/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.ui.attribute.adapter;
import java.util.Properties;
import org.jboss.tools.common.model.ui.attribute.XAttributePropertyDescription;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.jboss.tools.common.meta.XAttribute;
import org.jboss.tools.common.meta.constraint.XAttributeConstraintL;
import org.jboss.tools.common.meta.constraint.XAttributeConstraintT;
import org.jboss.tools.common.model.XFilteredTree;
import org.jboss.tools.common.model.XModel;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.util.ModelFeatureFactory;
public class DefaultXAttributeTreeContentProvider implements ITreeContentProvider {
protected XAttribute attribute;
protected XFilteredTree filteredTree;
protected XModelObject object;
protected XModel model;
protected Properties properties = new Properties();
public DefaultXAttributeTreeContentProvider(XAttribute attribute, XModel model, XModelObject object) {
this.attribute = attribute;
this.model = model;
this.object = object;
if (attribute != null && attribute.getConstraint() instanceof XAttributeConstraintT) {
XAttributeConstraintT attributeConstraint = (XAttributeConstraintT)attribute.getConstraint();
properties = attributeConstraint.getProperties();
}
}
public Object[] getChildren(Object parentElement) {
Object result[] = new Object[0];
if (parentElement instanceof XModelObject) {
result = getFilteredTree().getChildren((XModelObject)parentElement);
} else if (getFilteredTree()!=null) {
result = getFilteredTree().getChildren(getFilteredTree().getRoot());
}
return result;
}
public Object getParent(Object element) {
Object result = null;
if (element instanceof XModelObject)
result = getFilteredTree().getParent((XModelObject)element);
return result;
}
public boolean hasChildren(Object element) {
boolean result = false;
if (element instanceof XModelObject)
result = getFilteredTree().hasChildren((XModelObject)element);
return result;
}
public Object[] getElements(Object inputElement) {
if (inputElement instanceof XAttributePropertyDescription) {
XAttribute attribute = ((XAttributePropertyDescription)inputElement).getAttribute();
if (attribute != null && attribute.getConstraint() instanceof XAttributeConstraintT) {
XAttributeConstraintT attributeConstraint = (XAttributeConstraintT)attribute.getConstraint();
//if("no".equals(attributeConstraint.getProperties().getProperty("single")))
//single = false;
String filteredTreeName = attributeConstraint.getFilteredTreeName();
filteredTree = this.createFilteredTree(filteredTreeName);
return getChildren(filteredTree.getRoot());
}
} else if (attribute!=null) {
if (attribute != null && attribute.getConstraint() instanceof XAttributeConstraintT) {
XAttributeConstraintT attributeConstraint = (XAttributeConstraintT)attribute.getConstraint();
//if("no".equals(attributeConstraint.getProperties().getProperty("single")))
//single = false;
String filteredTreeName = attributeConstraint.getFilteredTreeName();
filteredTree = this.createFilteredTree(filteredTreeName);
boolean hideRoot = properties != null && "true".equals(properties.get("hideRoot")); //$NON-NLS-1$ //$NON-NLS-2$
if(hideRoot) {
return getChildren(filteredTree.getRoot());
} else {
return new Object[] { filteredTree.getRoot() };
}
} else if (attribute.getConstraint() instanceof XAttributeConstraintL) {
return ((XAttributeConstraintL)attribute.getConstraint()).getValues();
}
}
return null;
}
public void dispose() {
/// properties = null;
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
viewer.refresh();
}
void ignore() {
//do nothing
}
protected XFilteredTree createFilteredTree(String filteredTreeName) {
String classname = model.getMetaData().getMapping("FilteredTrees").getValue(filteredTreeName); //$NON-NLS-1$
XFilteredTree tree = (XFilteredTree)ModelFeatureFactory.getInstance().createFeatureInstance(classname);
if(tree == null) return null;
tree.setModel(model);
tree.setConstraint(new Object[]{attribute, object});
return tree;
}
public XFilteredTree getFilteredTree() {
return filteredTree;
}
public void setFilteredTree(XFilteredTree tree) {
filteredTree = tree;
}
/**
* @return
*/
public Properties getProperties() {
return properties;
}
}