/*******************************************************************************
* 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.impl.trees;
import java.util.*;
import org.jboss.tools.common.model.*;
public abstract class DefaultFilteredTree implements XFilteredTree {
protected XModel model = null;
protected Set<String> entities = new HashSet<String>(10);
protected Set<String> selectable_entities = new HashSet<String>(10);
protected XModelObject root = null;
public DefaultFilteredTree() {}
public void dispose() {
if (entities!=null) entities.clear();
entities = null;
if (selectable_entities!=null) selectable_entities.clear();
selectable_entities = null;
}
public void setConstraint(Object object) {}
protected void setRoot(XModelObject object) {
root = object;
}
protected void addEntities(String[] _entities, boolean selectable) {
addEntities(_entities);
if(selectable) addSelectableEntities(_entities);
}
protected void addEntities(String[] _entities) {
for (int i = 0; i < _entities.length; i++)
entities.add(_entities[i]);
}
protected void addSelectableEntities(String[] _entities) {
for (int i = 0; i < _entities.length; i++)
selectable_entities.add(_entities[i]);
}
protected abstract void onSetModel();
public void setModel(XModel model) {
this.model = model;
onSetModel();
}
public XModelObject getRoot() {
return root;
}
public boolean hasChildren(XModelObject object) {
return object.hasChildren();
}
public XModelObject[] getChildren(XModelObject object) {
XModelObject[] cs = object.getChildren();
ArrayList<XModelObject> v = new ArrayList<XModelObject>(cs.length);
for(int i = 0; i < cs.length; i++) {
if(isAcceptableChild(cs[i])) v.add(cs[i]);
}
return v.toArray(new XModelObject[0]);
}
public XModelObject getChildAt(XModelObject object, int i) {
XModelObject[] c = getChildren(object);
return (i < 0 || i >= c.length) ? null : c[i];
}
protected boolean isAcceptableChild(XModelObject child) {
return (entities.contains(child.getModelEntity().getName()));
}
public boolean isSelectable(XModelObject object) {
String e = object.getModelEntity().getName();
return (selectable_entities.contains(e));
}
public String getValue(XModelObject object) {
return belongs(object) ? object.getPath() : ""; //$NON-NLS-1$
}
public boolean belongs(XModelObject object) {
String e = object.getModelEntity().getName();
return entities.contains(e);
}
public XModelObject find(String value) {
return model.getByPath(value);
}
public XModelObject getParent(XModelObject object) {
return (object == root) ? null : object.getParent();
}
public String getPath(XModelObject object) {
return object.getPath();
}
}