package oes;

import java.util.Collection;
import java.util.ArrayList;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.Persistent;
import org.exolab.castor.jdo.PersistenceException;
import org.exolab.castor.jdo.Query;
import org.exolab.castor.jdo.QueryResults;
import org.exolab.castor.mapping.AccessMode;

public class Category implements Persistent {

    private Database _db;

    private int _categoryId;

    private String _shortName;

    private String _description;

    private Collection _products;

    public int getCategoryId() {
        return _categoryId;
    }

    public void setCategoryId(int id) {
        _categoryId = id;
    }

    public String getShortName() {
        return _shortName;
    }

    public void setShortName(String shortName) {
        shortName = shortName.trim();
        if (shortName.length() == 0)
            throw new IllegalArgumentException(
                    "Argument 'shortName' is an empty string");
        _shortName = shortName;
    }

    public String getDescription() {
        return _description;
    }

    public void setDescription(String description) {
        description = description.trim();
        if (description.length() == 0)
            throw new IllegalArgumentException(
                    "Argument 'description' is an empty string");
        _description = description;
    }

    public Collection getProducts() throws PersistenceException {
        Query qry;
        QueryResults res;

        if (_products == null) {
            _products = new ArrayList();
            qry = _db
                    .getOQLQuery("SELECT p FROM Product p WHERE p.category=$1");
            qry.bind(_categoryId);
            res = qry.execute();
            while (res.hasMore())
                _products.add(res.next());
        }
        return _products;
    }

    public void jdoPersistent(Database db) {
        _db = db;
    }

    public void jdoTransient() {
        _db = null;
        _products = null;
    }

    public Class jdoLoad(AccessMode accessMode) {
        return null;
    }

    public void jdoBeforeCreate(Database db) {
    }

    public void jdoAfterCreate() {
    }

    public void jdoStore(boolean modified) {
    }

    public void jdoBeforeRemove() {
    }

    public void jdoAfterRemove() {
    }

    public void jdoUpdate() {
    }

    public void jdoModify() throws Exception {
    }
}
