package plan.dom;

import java.util.*;

/**
 * A software company  that builds products.
 */
public class Company {
    /** Lookup a Customer and return it or return a new one if not found.
     *  @param name the name of the customer to lookup
     *  @return a new or existing Customer associated with this Company
     */
    public Customer lookupOrCreateCustomer(String name) {
        Customer c = (Customer)lnkCustomer.get(name);
        if (c == null) {
            c = new Customer(name);
            lnkCustomer.put(c.getName(), c);
        }
        return c;
    }


    /** Lookup an Employee and return it or return a new one if not found.
     *  @param name the name of the employee to lookup
     *  @return a new or existing Employee associated with this Company
     */
    public Employee lookupOrCreateEmployee(String name) {
        Employee e = (Employee)lnkEmployee.get(name);
        if (e == null) {
            e = new Employee(name);
            lnkEmployee.put(e.getName(), e);
        }
        return e;
    }


    /** Lookup a Software product and return it or return a new one if not found.
     *  @param name the name of the software product to lookup
     *  @return a new or existing Software product associated with this Company
     */
    public Software lookupOrCreateSoftware(String name) {
        Software s = (Software)lnkSoftware.get(name);
        if (s == null) {
            s = new Software(name);
            lnkSoftware.put(s.getName(), s);
        }
        return s;
    }


    /** Returns the software product of the given name.
     *  @param name the name of the software product to lookup
     *  @return the requested software product or null of not found
     */
    public Software getSoftware(String name) {
        return (Software)lnkSoftware.get(name);
    }


    // stores the relationships for easy name lookup.

    private HashMap lnkSoftware = new HashMap();
    private HashMap lnkEmployee = new HashMap();
    private HashMap lnkCustomer = new HashMap();
}