/*
  Warehouse System - sample system
  Last updated: May 22, 2008
*/
//Namespace for facade class.
namespace Warehouse

//Namespace for core of the system.
namespace Warehouse.core

class MovementLocation{}

class SlotSet{
 isA MovementLocation;
 
 0..1 -- 0..1 BoxOrPallet;
 1 -- * Slot;
}

class Slot{
 Integer number;
 Double width;
 
}

class Level{
 Integer height;
 Integer number;
 1 -- * Slot;
}

class LoadingGate{
 Integer number;
 isA MovementLocation;
}

class Truck{
 Integer registerNum;
 Boolean isWaiting;

 1 -- * DeliverOrShipmentBOM;
}
class RWBM{
 Integer ID;
}

class Item{
 Double value;
 Integer hazardID;
 Integer breakability;
}

class Row{
 Integer depth;
 Integer number;
 
 1 -- * Level;
}

//Note that here we have the choice to use
// Time or Double, if the customer requires Double due to 
// some interoperability issues with a legacy syste, we can easily
// accomodate them and use Double instead of Time.
class RWBMMovement{
 Double startTime;
 Double endTime;
 
 * toMovement -- 1 MovementLocation to;
 * fromMovement -- 1 MovementLocation from;
 * -- 1 BoxOrPallet movedBox;
 1 -- * RWBM;
}

class DeliverOrShipmentBOM {
 Double startTimeLoadOrUnload;
 Double endTimeExpected;
 * -> 0..1 LoadingGate sentThrough;
 * -> 0..1 LoadingGate arriveAt;
}

class BoxOrPallet{
 Integer RFIDTagNumber;
 Double lengthINmm;
 Double widthINmm;
 Double heightINmm;
 Double weightINkg;
 String contentType;
 
 * -- * DeliverOrShipmentBOM;
 1 -- * Item; 
}