Constraint.java :  » Project-Management » lgantt » com » csa » lgantt » model » Java Open Source

Java Open Source » Project Management » lgantt 
lgantt » com » csa » lgantt » model » Constraint.java
/**
 *   Copyright 2004 Carlos Silva A.
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License. 
 *   You may obtain a copy of the License at  
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 * 
 */
package com.csa.lgantt.model;

import java.util.Date;

public class Constraint {
  public static final byte  MODE_END_BEGIN    = 0;
  public static final byte  MODE_END_END    = 1;
  public static final byte  MODE_BEGIN_BEGIN  = 2;
  public static final byte  MODE_BEGIN_END    = 3;
  // datos
  /**
   * Mode
   * <ul>
   * <li> 1 : EB
   * <li> 2 : EE
   * <li> 3 : BE
   * <li> 4 : BB
   * </ul>
   */
  protected byte          mode;
  protected long          msDelay;

  // asociaciones
  protected Task          masterTask      = null;
  protected Task          slaveTask      = null;

  // transientes

  // metodos publicos
  /**
   * Genera un constraint. Ejecuta {@link Task#addConstraint} para terminar de
   * anexar
   */
  public Constraint(Task master, Task slave) throws GanttException {
    masterTask = master;
    slaveTask = slave;
    slaveTask.addConstraint(this);
  }

  /**
   * Retorna la fecha de partida de la tarea esclava de acuerdo a la
   * informacion de la tarea principal.
   * 
   * @return
   */
  public Date getStartDate() {
    // System.out.println("Constraint.getStartDate() mode="+mode+ " entre
    // "+masterTask.getName()+" y "+ slaveTask.getName());
    Date start = null;
    DateOrganizer dorg = masterTask.project.getDateOrganizer();
    switch (mode) {
      case MODE_END_BEGIN:
        start = masterTask.getFinishDate();
        start = dorg.getEndDate(start, msDelay);
        break;
      case MODE_BEGIN_BEGIN:
        start = masterTask.getStartDate();
        start = dorg.getEndDate(start, msDelay);
        break;
      case MODE_END_END:
        start = masterTask.getFinishDate();
        start = dorg.getEndDate(start, msDelay - slaveTask.getWorkLength());
        break;
      default: // BEGIN_END
        start = masterTask.getStartDate();
        start = dorg.getEndDate(start, msDelay - slaveTask.getWorkLength());
    }
    start = dorg.getNextPossibleStart(start);
    // System.out.println(" "+start);
    return start;
  }

  /**
   * Remueve el constraint de los hijos y deja este constraint sin uso.
   */
  public void remove() {
    // Primero se asigna dirty
    slaveTask.setDirty();
    masterTask.setDirty();
    // y luego se remueven sus links
    masterTask.childConstraints.remove(this);
    slaveTask.constraints.remove(this);
    slaveTask.project.sendChange(new ProjectChange(ProjectChange.CONSTRAINT,
        slaveTask));
    slaveTask = null;
    masterTask = null;

  }

  public Task getMasterTask() {
    return masterTask;
  }

  public Task getSlaveTask() {
    return slaveTask;
  }

  public byte getMode() {
    return mode;
  }

  public void setMode(byte newMode) {
    mode = newMode;
    slaveTask.setDirty();
    slaveTask.project.sendChange(new ProjectChange(ProjectChange.CONSTRAINT,
        slaveTask));
  }

  public long getMsDelay() {
    return msDelay;
  }

  public void setMsDelay(long newDelay) {
    msDelay = newDelay;
    slaveTask.setDirty();
    slaveTask.project.sendChange(new ProjectChange(ProjectChange.CONSTRAINT,
        slaveTask));
  }
  
  /**
   * @return a string using numbers and time units as: 1d 4h 5m
   */
  public String getHumanReadableDelay() {
    return masterTask.project.getDateOrganizer().getHumanReadableLap(msDelay);
  }

  /**
   * sets the length using abreviations such as: 5w 3d 2h 5m 58s 235S (five
   * weeks, 3 days, 2 hours, 5 minutes, fifty eight seconds and two hundred and
   * thirty five milliseconds).
   */
  public void setHumanReadableDelay(String s)  {
    setMsDelay(masterTask.project.getDateOrganizer().getLapFromHumanReadable(s));
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.