package org.openedit.data;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import org.openedit.Data;
import com.openedit.OpenEditException;
/**
* This is essentially a tree that may contain other View objects,
* or PropertyDetails (leaves).
* @author axis
*
*/
public class View extends ArrayList implements ViewItem
{
protected String fieldId;
public String getId()
{
return fieldId;
}
public void setId(String inId)
{
fieldId = inId;
}
public String getTitle()
{
return fieldTitle;
}
public void setTitle(String inTitle)
{
fieldTitle = inTitle;
}
protected String fieldTitle; //displayed as a section header
protected Data fieldViewFile;
public Data getViewFile()
{
return fieldViewFile;
}
public void setViewFile(Data inViewFile)
{
fieldViewFile = inViewFile;
}
/*
* Should View and PropertyDetail share a superclass?
*/
protected boolean isViewItem(Object inObj)
{
return (inObj instanceof ViewItem);
}
public boolean add(Object arg0)
{
if (isViewItem(arg0))
{
super.add(arg0);
return true;
}
else
{
throw new OpenEditException("Can not add " + arg0 + " to View");
}
}
public boolean addAll(Collection arg0)
{
for (Iterator iterator = arg0.iterator(); iterator.hasNext();)
{
Object item = (Object) iterator.next();
add(item);
}
return true;
}
public boolean hasChildren()
{
return (!isEmpty());
}
public boolean isLeaf()
{
return false;
}
public PropertyDetail findDetail(String inId)
{
for (Iterator iterator = iterator(); iterator.hasNext();)
{
ViewItem item = (ViewItem) iterator.next();
if (item.isLeaf())
{
PropertyDetail leaf = (PropertyDetail)item;
if (leaf.getId().equals(inId))
{
return leaf;
}
}
else
{
View child = (View)item;
return child.findDetail(inId);
}
}
return null;
}
public void sortAlphabetically()
{
Collections.sort(this,
new Comparator<PropertyDetail>()
{
public int compare(PropertyDetail f1, PropertyDetail f2)
{
return f1.getText().compareTo(f2.getText());
}
}
);
}
}