All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.exigen.ie.scheduler.AlternativeResourceConstraint Maven / Gradle / Ivy

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.ConstraintImpl;
import com.exigen.ie.constrainer.EventOfInterest;
import com.exigen.ie.constrainer.Failure;
import com.exigen.ie.constrainer.Goal;
import com.exigen.ie.constrainer.IntExp;
import com.exigen.ie.constrainer.IntVar;
import com.exigen.ie.constrainer.Observer;
import com.exigen.ie.constrainer.Subject;

public class AlternativeResourceConstraint extends ConstraintImpl
{

	private Schedule _schedule;
	private Resource[] _rset;
	private Resource _assigned;
	private Job _job;
	private int _capacity;
	private IntVar _capacityVar;
	private boolean[] _possibleAssignment;

	private Observer _observer;
	private Goal _goal = null;

	private IntExp _flag = null;

	class AltResConstrObserver extends Observer
	{
		public void update(Subject var, EventOfInterest interest) throws Failure
		{
			IntExp event_var = (IntExp) var;
			//Debug.on(); Debug.print("AllDiffObserver("+var+") "+interest+" "+_bits); Debug.off();
			_goal.execute();
		}

		public int subscriberMask()
		{
			return EventOfInterest.VALUE;
		}
		public String toString()
		{
			return "AlternativeResourceConstraintObserver";
		}
		public Object master()
		{
			return this;
		}
	}
	// END: AltResConstrObserver

	public AlternativeResourceConstraint(
		Job j,
		AlternativeResourceSet res,
		int capacity)
	{
		this(j, res.toArray(), capacity, null);
	}

	public AlternativeResourceConstraint(
		Job j,
		AlternativeResourceSet res,
		IntVar capacity)
	{
		this(j, res.toArray(), -1, capacity);
	}

	public AlternativeResourceConstraint(
		Job j,
		Resource[] res,
		int capacity,
		IntVar capacityVar)
	{
		super(j.constrainer(), "AlternativeResourceConstraint");
		_job = j;
		_schedule = _job.schedule();
		_rset = res;
		_assigned = null;
		_capacity = capacity;
		_capacityVar = capacityVar;
		_possibleAssignment = new boolean[_rset.length];
		java.util.Arrays.fill(_possibleAssignment, true);
		_schedule.addRequirement(this);
	}

	public Goal execute() throws Failure
	{
		_goal = new GoalAssignAlternative(this, _possibleAssignment);

		_job.getStartVariable().attachObserver(
			_observer = new AltResConstrObserver());
		//        _goal.execute();
		return null;
	}

	public void setNotPossible(Resource r)
	{
		for (int i = 0; i < _rset.length; i++)
			if (_rset[i] == r)
			{
				_possibleAssignment[i] = false;
				return;
			}
	}

	public void assignResource(Resource res)
	{
		_assigned = res;
	}

	public void flush()
	{
		_assigned = null;
	}

	public Job getJob()
	{
		return _job;
	}

	public Resource getResource(int n)
	{
		return _rset[n];
	}

	public Resource getResource()
	{
		return _assigned;
	}

	public Resource[] resources()
	{
		return _rset;
	}

	public int getCapacity()
	{
		return _capacity;
	}

	public IntVar getCapacityVar()
	{
		return _capacityVar;
	}

	public String toString()
	{
		StringBuffer out = new StringBuffer();
		out.append(_job + " requires [ ");
		for (int i = 0; i < _rset.length; i++)
		{
			if (_possibleAssignment[i])
			{
				out.append(_rset[i] + " ");
			}
		}
		out.append("]");
		return out.toString();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy