Package org.objectweb.speedo.j2eedo.bo

Source Code of org.objectweb.speedo.j2eedo.bo.EmployeeFactory

/*
* Speedo: an implementation of JDO compliant personality on top of JORM generic
* I/O sub-system.
* Copyright (C) 2001-2004 France Telecom R&D
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*
*/
package org.objectweb.speedo.j2eedo.bo;

import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;

import javax.jdo.JDOException;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;

import org.objectweb.speedo.Alea;
import org.objectweb.speedo.j2eedo.database.Address;
import org.objectweb.speedo.j2eedo.database.Department;
import org.objectweb.speedo.j2eedo.database.Employee;
import org.objectweb.speedo.j2eedo.database.Project;
import org.objectweb.util.monolog.Monolog;
import org.objectweb.util.monolog.api.BasicLevel;
import org.objectweb.util.monolog.api.Logger;
import org.objectweb.util.monolog.api.LoggerFactory;

/**
* This class define the Java class to methods used to handle employee
* @author fmillevi@yahoo.com
*
*/
public class EmployeeFactory {

    static Logger logger = Monolog.initialize().getLogger(DatabaseImpl.class.getName());

  /**
   * Creates a new employee in one of the existing department
   * @throws JDOException
   * @throws Exception
   */
  public void newEmployee(PollsSynchronizations pollsSync,
            StringBuffer outStr,
            PersistenceManager pm) {
    long id = DatabaseImpl.getDepartmentIdFromPool();
    Department d = (Department) pm.getObjectById(
          pm.newObjectIdInstance(Department.class, Long.toString(id)),
          false);
    Calendar cal = Calendar.getInstance();
    cal.set(Alea.rand(1900, 2004), Alea.rand(1, 12), Alea.rand(1, 28));
    Employee e =
      new Employee(
          "First-" + Alea.randomstring(4, 5),
          "Last-" + Alea.randomstring(8, 10),
          cal.getTime(),
          d);
    e.setSalary(Alea.rand(5000, 45000));
    Address a = new Address();
    a.setCity("City-" + Alea.randomstring(4, 5));
    a.setStreet("Street-" + Alea.randomstring(4, 5));
    a.setState("StateItf-" + Alea.randomstring(4, 5));
    a.setZipcode("ZIP-" + Alea.randomstring(2, 3));
    e.setAddress(a);
    pm.makePersistent(e);
        outStr.append("\nCreate a new employee:").append(e.getAsString());
    logger.log(BasicLevel.DEBUG, "Create a new employee having id=" + e.getEmpid());
    pollsSync.addInPool(DatabaseImpl.poolOfEmployeeId, e.getEmpid());
    pm.setUserObject(pollsSync);
  }

  /**
   * Deletes an existing employee
   * @throws JDOException
   * @throws Exception
   */
  public void deleteEmployee(PollsSynchronizations pollsSync,
            StringBuffer outStr,
            PersistenceManager pm) {
    long id = DatabaseImpl.getEmployeeIdFromPool();
    // remove id from static pool to avoid other threatment to use it
    pollsSync.removeFromPool(DatabaseImpl.poolOfEmployeeId, id);
    pm.setUserObject( pollsSync);
    outStr.append("\nRemove the employee ").append(id);
    logger.log(BasicLevel.DEBUG, "Delete employee having id=" + id);
    Employee e =
      (Employee) pm.getObjectById(
          pm.newObjectIdInstance(Employee.class, Long.toString(id)),
          false);
    Address a = e.getAddress();
    pm.deletePersistent(a);
    pm.deletePersistent(e);
  }

  /**
   * Gets employee's data
   * @throws JDOException
   * @throws Exception
   */
  public void getEmployee(StringBuffer outStr,
            PersistenceManager pm) {
    long id = DatabaseImpl.getEmployeeIdFromPool();
    outStr.append("\nGet the employe id ").append(id);
    logger.log(BasicLevel.DEBUG, "Get employee having id=" + id);
    Employee e = (Employee) (Employee) pm.getObjectById(
          pm.newObjectIdInstance(Employee.class, Long.toString(id)),
          false);
    outStr.append(e.getAsString());
  }

  /**
   * Gets some employees. 4 queries are defines
   * <ul><li>Get an employee by it's primary key</li>
   * <li>Get employees having it's id between two values</li>
   * <li>Get employees having the same manager</li>
   * <li>Get employees member of one of 2 selected projects</li></ul>
   * @throws JDOException
   * @throws Exception
   */
  public void getEmployees(StringBuffer outStr, PersistenceManager pm) {
    int testId = Alea.rand(0, 3);
    switch (testId) {
    case 0 :
      queryEmployee(outStr, pm);
      break;
    case 1 :
      queryEmployeeArrayParameters(outStr, pm);
      break;
    case 2 :
      queryEmployeeByManager(outStr, pm);
      break;
    case 3 :
      queryEmployeeOrderHiredateByProject(outStr, pm);
      break;
    }
  }

  /**
   * Increases an employee' salary
   * @throws JDOException
   * @throws Exception
   */
  public void increaseSalary(StringBuffer outStr, PersistenceManager pm) {
    long id = DatabaseImpl.getEmployeeIdFromPool();
    outStr.append("\nIncrease salary for the employe ").append(id);
    logger.log(BasicLevel.DEBUG, "Increase the salary for the employee having id=" + id);
    Employee e = (Employee) pm.getObjectById(
          pm.newObjectIdInstance(Employee.class, Long.toString(id)),
          false);
    e.setSalary(e.getSalary() + 1);
  }

  private void queryEmployee(StringBuffer outStr, PersistenceManager pm) {
    long id = DatabaseImpl.getEmployeeIdFromPool();
    logger.log(BasicLevel.DEBUG, "Query employee having id=" + id);
    Query query = pm.newQuery(Employee.class);
    query.declareParameters("long aId");
    query.setFilter("(empid==aId)");
    try {
            Collection col = (Collection) query.execute(new Long(id));
        Iterator iter = col.iterator();
        if (!iter.hasNext())
          throw new RuntimeException("TestInheritanceBasic query on employee does not return any row");
        Employee e = (Employee) iter.next();
        if (e.getEmpid() != id)
          throw new RuntimeException("TestInheritanceBasic query on employee returns an other row");
        if (iter.hasNext())
          throw new RuntimeException("TestInheritanceBasic query on a employee returns to many rows");
            outStr.append("\nGet Employee").append(id);
        outStr.append(", full name ").append(e.getFirstname());
        outStr.append(" ").append(e.getLastname());
        } finally  {
            query.closeAll();
        }
  }

  private void queryEmployeeOrderHiredateByProject(StringBuffer outStr,
            PersistenceManager pm) {
    Project p = (Project) pm.getObjectById(
          pm.newObjectIdInstance(Project.class,
              Long.toString(DatabaseImpl.getProjectIdFromPool())),
              false);
    outStr.append("\nLook for members of the project ");
    outStr.append(p.getName());
    logger.log(BasicLevel.DEBUG,
        "Query employee member of the project=" + p.getName());
    Query query = pm.newQuery(Employee.class);
    query.declareParameters("org.objectweb.speedo.j2eedo.database.Project p");
    query.setFilter("(projects.contains(p))");
    query.setOrdering("hiredate ascending, salary descending");
        try {
        Collection col = (Collection) query.execute(p);
        Iterator iter = col.iterator();
        if (!iter.hasNext())
          throw new RuntimeException("Query on employee does not return any row");
        Employee e = null;
        while (iter.hasNext()) {
          e = (Employee) iter.next();
          outStr.append("\n\tEmployee name:");
          outStr.append(e.getFirstname());
          outStr.append(" ");
          outStr.append(e.getLastname());
            }
        } finally {
            query.closeAll();
    }
  }

  private void queryEmployeeArrayParameters(StringBuffer outStr, PersistenceManager pm) {
    long idMin = DatabaseImpl.getEmployeeIdFromPool();
    long idMax = DatabaseImpl.getEmployeeIdFromPool();
    while (idMin == idMax) {
      idMax = DatabaseImpl.getEmployeeIdFromPool();
        }
    if (idMin > idMax) {
      //  max < min ! inverse boundaries
      long dummy = idMax;
      idMax = idMin;
      idMin = dummy;
    }
    outStr.append("\nLook for employees having id between ");
    outStr.append(idMin);
    outStr.append(" and ");
    outStr.append(idMax);
    logger.log(BasicLevel.DEBUG,
        "Query employee having id between " + idMin + " and " + idMax);

    Long param[] = new Long[] { new Long(idMin), new Long(idMax)};
    Query query = pm.newQuery(Employee.class);
    query.declareParameters("long idMin, long idMax");
    query.setFilter("((empid>=idMin) && (empid<=idMax))");
    query.setOrdering("empid descending");
    try {
            Collection col = (Collection) query.executeWithArray(param);
        Iterator iter = col.iterator();
        if (!iter.hasNext())
          throw new RuntimeException("Query on employee does not return any row");
        Employee e = (Employee) iter.next();
        outStr.append("\n\tEmployee name (").append(e.getEmpid());
        outStr.append("): ").append(e.getFirstname()).append(" ");
        outStr.append(e.getLastname());
        if (false && e.getEmpid() != idMax) {
          throw new RuntimeException("Query on employee returns an other first row than expecting");
        }
        while (iter.hasNext()) {
          e = (Employee) iter.next();
          outStr.append("\n\tEmployee name (").append(e.getEmpid());
          outStr.append("): ").append(e.getFirstname()).append(" ");
          outStr.append(e.getLastname());
        }
        if (false && e.getEmpid() != idMin)
          throw new RuntimeException("Query on employee returns an other last row than expecting");
        } finally {
            query.closeAll();
        }
    }

  private void queryEmployeeByManager(StringBuffer outStr, PersistenceManager pm) {
    Employee e = (Employee) pm.getObjectById(
          pm.newObjectIdInstance( Employee.class,
              Long.toString(DatabaseImpl.getEmployeeIdFromPool())),
              false);
    Employee boss = e.getManager();
    outStr.append("\nLook for employees having the same manager : ");
    if (null != boss) {
      outStr.append(boss.getLastname());
        } else {
      outStr.append("NULL");
        }
    logger.log(BasicLevel.DEBUG, "Query employee having the same manager :"
        +((null==boss)? "null" : boss.getLastname()));
    Query query = pm.newQuery(Employee.class);
    query.declareParameters("org.objectweb.speedo.j2eedo.database.Employee e");
    query.setFilter("(manager==e)");
    try {
            Collection col = (Collection) query.execute(boss);
        for (Iterator iter = col.iterator(); iter.hasNext();) {
          e = (Employee) iter.next();
          outStr.append("\n\tEmployee name:");
          outStr.append(e.getFirstname()).append(" ");
          outStr.append(e.getLastname());
        }
        } finally {
            query.closeAll();
        }
  }
}
TOP

Related Classes of org.objectweb.speedo.j2eedo.bo.EmployeeFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.