Package com.exigen.ie.scheduler

Source Code of com.exigen.ie.scheduler.Schedule

package com.exigen.ie.scheduler;

///////////////////////////////////////////////////////////////////////////////
/*
* Copyright Exigen Group 1998, 1999, 2000, 2002
* 320 Amboy Ave., Metuchen, NJ, 08840, USA, www.exigengroup.com
*
* The copyright to the computer program(s) herein
* is the property of Exigen Group, USA. All rights reserved.
* The program(s) may be used and/or copied only with
* the written permission of Exigen Group
* or in accordance with the terms and conditions
* stipulated in the agreement/contract under which
* the program(s) have been supplied.
*/
///////////////////////////////////////////////////////////////////////////////

import com.exigen.ie.constrainer.Constrainer;
import com.exigen.ie.constrainer.Failure;
import com.exigen.ie.tools.FastVector;

/**
An implementation of Schedule, general container and manager
for all scheduling objects.
*/

public class Schedule
{

  // local variables

  private String _name;

  private FastVector _jobs;
  private FastVector _resources;
  private FastVector _requirements;

  private int _scheduleStart;
  private int _scheduleEnd;

  private Constrainer _constrainer;

  /**
   * Constructs new schedule using existing Constrainer
   * @param c Constrainer to use
   * @param start Schedule starting time
   * @param end Schedule ending time
   */
  public Schedule(Constrainer c, int start, int end)
  {
    _constrainer = c;
    _scheduleStart = start;
    _scheduleEnd = end;
    _jobs = new FastVector();
    _resources = new FastVector();
    _requirements = new FastVector();
  }

  /**
   * Add job with specified duration to schedule
   * @param duration Job duration
   * @param name Job name
   * @return Created job
   * @throws Failure
   */
  public Job addJob(int duration, String name) throws Failure
  {
    JobInterval job = new JobInterval(this, duration);
    job.setName(name);
    _jobs.addElement(job);
    return job;
  }

  /**
   * Add predefined job to schedule
   * @param job Job
   * @return The same job
   * @throws Failure
   */
  public Job addJob(Job job) throws Failure
  {
    _jobs.addElement(job);
    return job;
  }

  /**
   * Add discrete resource with specified capacity to schedule
   * Resource is available during all shedule period
   * @param capacity Resource capacity
   * @param name Resource name
   * @return Created resource
   */
  public Resource addResourceDiscrete(int capacity, String name)
  {
    Resource resource = new ResourceDiscrete(this, capacity);
    resource.setName(name);
    _resources.addElement(resource);
    return resource;
  }

  /**
   * Add discrete resource with specified capacity to schedule
   * @param capacity Resource capacity
   * @param avmin Resource availability start time
   * @param avmax Resource availability end time
   * @param name Resource name
   * @return Created resource
   */
  public Resource addResourceDiscrete(
    int capacity,
    int avmin,
    int avmax,
    String name)
  {
    Resource resource = new ResourceDiscrete(this, avmin, avmax, capacity);
    resource.setName(name);
    _resources.addElement(resource);
    return resource;
  }

  /**
   * Add unary resource to schedule
   * Resource is available during all shedule period
   * @param name Resource name
   * @return Created resource
   */
  public Resource addResourceUnary(String name)
  {
    Resource resource = new ResourceUnary(this);
    resource.setName(name);
    _resources.addElement(resource);
    return resource;
  }

  /**
   * Add unary resource to schedule
   * @param avmin Resource availability start time
   * @param avmax Resource availability end time
   * @param name Resource name
   * @return Created resource
   */
  public Resource addResourceUnary(int avmin, int avmax, String name)
  {
    Resource resource = new ResourceUnary(this, avmin, avmax);
    resource.setName(name);
    _resources.addElement(resource);
    return resource;
  }

  /**
   * Add predefined resource to schedule
   * @param resource Resource
   * @return The same resource
   */
  public Resource addResource(Resource resource)
  {
    _resources.addElement(resource);
    return resource;
  }

  public void addRequirement(AlternativeResourceConstraint c)
  {
    _requirements.addElement(c);
  }

  /**
   * Query assigned resources
   * @param job Job to query assigned resources
   * @return List of assigned resources
   */
  public String getAssignments(Job job)
  {
    StringBuffer str = new StringBuffer();
    for (int i = 0; i < _requirements.size(); i++)
    {
      AlternativeResourceConstraint c =
        (AlternativeResourceConstraint) _requirements.elementAt(i);
      if (job.equals(c.getJob()))
      {
        Resource r = c.getResource();
        if (r != null)
          str.append(r.getName() + "(" + c.getCapacity() + ") ");
      }
    }
    return str.toString();
  }

  /**
   * Query jobs assigned to a resource
   * @param res Resource to query assigned jobs
   * @return List of jobs assigned to the resource
   */
  public String getAssignments(Resource res)
  {
    StringBuffer str = new StringBuffer();
    for (int i = 0; i < _requirements.size(); i++)
    {
      AlternativeResourceConstraint c =
        (AlternativeResourceConstraint) _requirements.elementAt(i);
      if (res.equals(c.getResource()))
        str.append(c.getJob().getName() + " ");
    }
    return str.toString();
  }

  /**
   * Query assigned resources
   * @param job Job to query assigned resources
   * @return An array of resource objects
   */
  public Resource[] getAssignedResources(Job job)
  {
    int i;
    FastVector v = new FastVector(_requirements.size());
    for (i = 0; i < _requirements.size(); i++)
    {
      AlternativeResourceConstraint c =
        (AlternativeResourceConstraint) _requirements.elementAt(i);
      if (job.equals(c.getJob()))
      {
        Resource r = c.getResource();
        if (r != null)
          v.add(r);
      }
    }
    Resource[] res = new Resource[v.size()];
    for (i = 0; i < _requirements.size(); i++)
      res[i] = (Resource) v.elementAt(i);
    return res;
  }

  /**
   * Query assigned jobs
   * @param res Resource to query jobs assigned
   * @return An array of job objects
   */
  public Job[] getAssignedJobs(Resource res)
  {
    int i;
    FastVector v = new FastVector(_requirements.size());
    for (i = 0; i < _requirements.size(); i++)
    {
      AlternativeResourceConstraint c =
        (AlternativeResourceConstraint) _requirements.elementAt(i);
      if (res.equals(c.getResource()))
      {
        v.add(c.getJob());
      }
    }
    Job[] jobs = new Job[v.size()];
    for (i = 0; i < _requirements.size(); i++)
      jobs[i] = (Job) v.elementAt(i);
    return jobs;
  }

  /**
   * Returns schedule starting time
   * @return Schedule starting time
   */
  public int start()
  {
    return _scheduleStart;
  }

  /**
   * Returns schedule ending time
   * @return Schedule ending time
   */
  public int end()
  {
    return _scheduleEnd;
  }

  /**
   * Returns schedule size (duration)
   * @return Schedule size
   */
  public int size()
  {
    return _scheduleEnd - _scheduleStart;
  }

  /**
   * Returns vector of schedule's jobs
   * @return Vector of jobs
   */
  public FastVector jobs()
  {
    return _jobs;
  }

  /**
   * Returns vector of schedule's resources
   * @return Vector of resources
   */
  public FastVector resources()
  {
    return _resources;
  }

  /**
   * Returns schedule's constrainer
   * @return Schedule's constrainer
   */
  public Constrainer constrainer()
  {
    return _constrainer;
  }

  /**
   * Sets schedule's name
   * @param name Schedule's new name
   */
  public void setName(String name)
  {
    _name = name;
  }

  /**
   * Returns schedule's name
   * @return Schedule's name
   */
  public String getName()
  {
    return _name;
  }

  public String toString()
  {
    return "Schedule: "
      + _name
      + " ["
      + _scheduleStart
      + ";"
      + _scheduleEnd
      + ")"
      + "\nJobs: "
      + _jobs.size()
      + "\nResources: "
      + _resources.size()
      + "\nRequirements: "
      + _requirements.size();
  }
}
TOP

Related Classes of com.exigen.ie.scheduler.Schedule

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.