package cnp.ew.tdemo;

import java.util.*;
import java.awt.*;

import cnp.ew.properties.*;
import cnp.ew.diagram.*;
import cnp.ew.converter.*;
import cnp.ew.displayer.*;
import cnp.ew.util.*;
import cnp.ew.list.*;

public class CpFileModel implements CpListItem, CpTreeItem, CpFolderItem
{
    public final static int NAME_PROP = 0;
    public static final int SIZE_PROP = 1;
    public static final int TYPE_PROP = 2;
    public static final int MODIFIED_PROP = 3;
    public static final int THIS_PROP = 4;

    static Vector properties;

    boolean isFolder;
    String name;
    int size;
    String type;
    Date modified;
    Vector children;

    public CpFileModel(boolean newIsFolder, String newName, int newSize, String newType, Date newModified)
    {
        super();
        isFolder = newIsFolder;
        name = newName;
        size = newSize;
        type = newType;
        modified = newModified;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String s)
    {
        name = s;
    }

    public boolean isFolder()
    {
        return isFolder;
    }


	public boolean getHasChildren()
	{
	    return children != null && !children.isEmpty();
	}

	public Vector getChildren()
	{
	    return children;
	}

	public void addChild(CpTreeItem child)
	{
	    if (children == null) {
	        children = new Vector();
	    }
	    children.addElement(child);
	}

	public boolean isLessThan(CpHasProperties item2, CpProperty prop)
	{
	    Object myProp = getProperty(prop);
	    if (myProp instanceof String) {
    	    return ((String)myProp).compareTo((String)item2.getProperty(prop)) < 0;
    	} else if (myProp instanceof Integer) {
    	    return ((Integer)myProp).intValue() < ((Integer)item2.getProperty(prop)).intValue();
    	} else if (myProp instanceof Boolean) {
    	    return !((Boolean)myProp).booleanValue();
    	} else if (myProp instanceof Date) {
    	    return ((Date)myProp).before((Date)item2.getProperty(prop));
    	}
    	return true;
    }

    public Object getProperty(CpProperty prop)
    {
        switch (prop.getId()) {
        case NAME_PROP:
            return name;
        case SIZE_PROP:
            return new Integer(size);
        case TYPE_PROP:
            return type;
        case MODIFIED_PROP:
            return modified;
        case THIS_PROP:
            return this;
        }
        return null;
    }

    public void setProperty(CpProperty prop, Object o)
    {
        switch (prop.getId()) {
        case NAME_PROP :
            name = (String)o;
            break;
        case SIZE_PROP:
            size = ((Integer)o).intValue();
            break;
        case TYPE_PROP:
            type = (String)o;
            break;
        case MODIFIED_PROP:
            modified = (Date)o;
            break;
        }
    }

    public Vector getProperties()
    {
        if (properties == null) {
            properties = new Vector(4);
            properties.addElement(new CpProperty("Name", CpBasicType.STRING, NAME_PROP));
            properties.addElement(new CpProperty("Size", CpBasicType.NUMBER, SIZE_PROP));
            properties.addElement(new CpProperty("Type", CpBasicType.STRING, TYPE_PROP));
            properties.addElement(new CpProperty("Modified", CpBasicType.DATE, MODIFIED_PROP));
            properties.addElement(new CpProperty("Name", CpBasicType.OBJECT, THIS_PROP));
        }
        return properties;
    }

 /*   public Image getImage()
    {
        if (image == null) {
            image = CpToolkit.getImage(imageId);
        }
        return image;
    }
    */
}

