Package org.objectweb.speedo.j2eedo.bo

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

/*
* 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.math.BigDecimal;
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.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 ProjectFactory {
  static Logger logger = null;
  /**
   * the constant <code>MIN_MEMBER_PER_PROJECT</code> defines
   * the minimum members number to be created per project
   */
  public static final int MIN_MEMBER_PER_PROJECT = 5;
  /**
   * the constant <code>MAX_MEMBER_PER_PROJECT</code> defines
   * the maximum members number to be created per project
   */
  public static final int MAX_MEMBER_PER_PROJECT = 20;
  static {
    LoggerFactory lf = Monolog.initialize();
    logger = lf.getLogger(DatabaseImpl.class.getName());
  }

  /**
   * Gets some projects. 2 queries are defines
   * <ul><li>Get a project by it's primary key</li>
   * <li>Get projects having one of 2 selected employees</li></ul>
   * @throws JDOException
   * @throws Exception
   */
  public void getProjects(StringBuffer outStr, PersistenceManager pm) {
    int testId = Alea.rand(0, 1);
    switch (testId) {
    case 0 :
      queryProject(outStr, pm);
      break;
    case 1 :
      queryProjectsByMembers(outStr, pm);
      break;
    }
  }

  private void queryProject(StringBuffer outStr, PersistenceManager pm) {
    long id = DatabaseImpl.getProjectIdFromPool();
    logger.log(BasicLevel.DEBUG, "Query project having id :" + id);
    Query query = pm.newQuery(Project.class);
    query.declareParameters("long aId");
    query.setFilter("(proid==aId)");
    Collection col = (Collection) query.execute(new Long(id));
    Iterator iter = col.iterator();
    Project p = null;
    try {
      if (!iter.hasNext()) {
        throw new RuntimeException("No project found with the id: " + id);
      }
      p = (Project) iter.next();
      if (p.getProid() != id)
        throw new RuntimeException("Bad project found (the id is different, expected: " + id + ", found:" + p.getProid());
      if (iter.hasNext())
        throw new RuntimeException("More than one project corresponding to the id: " + id);
    } finally {
      query.closeAll();
    }
        outStr.append("\nGet project " + id);
    outStr.append(", name:").append(p.getName());
    outStr.append(", budget:").append(p.getBudget());
  }

  private void queryProjectsByMembers(StringBuffer outStr, PersistenceManager pm) {
    long id1 = DatabaseImpl.getEmployeeIdFromPool();
    long id2 = DatabaseImpl.getEmployeeIdFromPool();
    while (id2 == id1) {
      id2 = DatabaseImpl.getEmployeeIdFromPool();
    }
    logger.log(BasicLevel.DEBUG,
        "Query project having members :" + id1 + " and " + id2);
    outStr.append("\nThe project for the employee ");
    outStr.append(id1).append(" and ").append(id2);

    Query query = pm.newQuery(Project.class);
    query.declareParameters("long id1, long id2");
    query.declareVariables("org.objectweb.speedo.j2eedo.database.Employee e");
    query.setFilter("((members.contains(e)) && ((e.empid==id1) || (e.empid==id2)) )");

    Collection col = (Collection) query.execute(new Long(id1), new Long(id2));
    Iterator iter = col.iterator();
    try {
            while (iter.hasNext()) {
                Project p = (Project) iter.next();
              outStr.append(p.getAsString());
            }
        } finally {
        query.closeAll();
        }

  }

  /**
   * Gets a project
   * @throws JDOException
   * @throws Exception
   */
  public void getProject(StringBuffer outStr, PersistenceManager pm) {
    long id = DatabaseImpl.getProjectIdFromPool();
    logger.log(BasicLevel.DEBUG, "Get project having id :" + id);
    outStr.append("\nGet the project id :").append(id);
    Project p = (Project) pm.getObjectById(
          pm.newObjectIdInstance(Project.class, Long.toString(id)),
          false);
    outStr.append(p.getAsString());
  }

  /**
   * Deletes a project
   * @throws JDOException
   * @throws Exception
   */
  public void deleteProject(PollsSynchronizations pollsSync,
            StringBuffer outStr,
            PersistenceManager pm) {
    long id = DatabaseImpl.getProjectIdFromPool();
    // remove id from static pool to avoid other threatment to use it
    pollsSync.removeFromPool(DatabaseImpl.poolOfProjectId, id);
    pm.setUserObject( pollsSync);
    logger.log(BasicLevel.DEBUG, "Delete project having id :" + id);
    outStr.append("\nRemove project :").append(id);
    pm.deletePersistent(
        (Project) pm.getObjectById(
            pm.newObjectIdInstance(Project.class, Long.toString(id)),
            false));
  }

  /**
   * Selects an existing project, creates a new project and duplicates member list to
   * the new project
   * @throws JDOException
   * @throws Exception
   */
  public void splitProject(PollsSynchronizations pollsSync,
            StringBuffer outStr,
            PersistenceManager pm) {
    long id = DatabaseImpl.getProjectIdFromPool();
    logger.log(BasicLevel.DEBUG, "Split project having id :" + id);
    outStr.append("\nSplit project :").append(id);
    Project p = (Project) pm.getObjectById(
        pm.newObjectIdInstance(
            Project.class,
            Long.toString(id)),
            false);
    Project newP = new Project(p.getName() + "-splited", p.getDepartment());
    newP.setBudget(BigDecimal.valueOf(Alea.rand(1, 150000)));
    newP.setMembers(p.getMembers());
    pm.makePersistent(newP);
    outStr.append(", new project is: ").append(newP.getProid());
        pollsSync.addInPool(DatabaseImpl.poolOfProjectId, newP.getProid());
        pm.setUserObject(pollsSync);
  }

  /**
   * Selects an existing department, create a new project and affects some
   * existing employees
   * @throws JDOException
   * @throws Exception
   */
  public void newProjectWithEmployees(PollsSynchronizations pollsSync,
            StringBuffer outStr,
            PersistenceManager pm) {
        outStr.append("\nCreate new project with its members");
    Department d = (Department) pm.getObjectById(
          pm.newObjectIdInstance(
              Department.class,
              Long.toString(
                  DatabaseImpl.getDepartmentIdFromPool())),
                      false);

    Project p = new Project("Name-" + Alea.randomstring(4, 5), d);
    p.setBudget(BigDecimal.valueOf(Alea.rand(1, 150000)));
    pm.makePersistent(p);

    logger.log(BasicLevel.DEBUG, "Create a new project id :" + p.getProid());
    outStr.append("\nAdd project : ").append(p.getProid());
    pollsSync.addInPool(DatabaseImpl.poolOfProjectId, p.getProid());
    pm.setUserObject( pollsSync);

    int nbEmployees = Alea.rand(MIN_MEMBER_PER_PROJECT, MAX_MEMBER_PER_PROJECT);
    Employee e = null;
    for (int i = 0; i < nbEmployees; i++) {
      e = (Employee) pm.getObjectById(
          pm.newObjectIdInstance(
              Employee.class,
              Long.toString(
                  DatabaseImpl.getEmployeeIdFromPool())),
                      false);
      if (!p.addMember(e)) {
        i--;
      }
    }
    outStr.append(" with ").append(nbEmployees).append(" members");
  }
}
TOP

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

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.