package oes;

import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.Persistent;
import org.exolab.castor.jdo.PersistenceException;
import org.exolab.castor.mapping.AccessMode;

public class Product implements Persistent {

    private Database _db;

    private String _sku;

    private String _shortName;

    private String _description;

    private int _categoryId;

    private Category _category;

    private int _priceId;

    private Price _price;

    public String getSku() {
        return _sku;
    }

    public void setSku(String sku) {
        if (sku.length() != 14)
            throw new IllegalArgumentException(
                    "Argument 'sku' must be 14 characters");
        _sku = sku;
    }

    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 int getCategoryId() {
        if (_category != null)
            return _category.getCategoryId();
        return _categoryId;
    }

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

    public Category getCategory() throws PersistenceException {
        if (_category != null)
            return _category;
        _category = (Category) _db.load(Category.class,
                Integer.valueOf(_categoryId));
        return _category;
    }

    public void setCategory(Category category) {
        _category = category;
        _categoryId = category.getCategoryId();
    }

    public int getPriceId() {
        if (_price != null)
            return _price.getPriceId();
        return _priceId;
    }

    public void setPriceId(int id) {
        _priceId = id;
        _price = null;
    }

    public Price getPrice() throws PersistenceException {
        if (_price != null)
            return _price;
        _price = (Price) _db.load(Price.class, Integer.valueOf(_priceId));
        return _price;
    }

    public void setPrice(Price price) {
        _price = price;
        _priceId = price.getPriceId();
    }

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

    public void jdoTransient() {
        _db = null;
        _price = null;
        _category = 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 {
    }

}
