package com.baselet.element.sequence_aio.facet;
import com.baselet.control.basics.geom.PointDouble;
import com.baselet.control.enums.AlignHorizontal;
/**
* Is used to refer to a specific point on the lifeline.
*
* From the UML 2.5 specification: "OccurrenceSpecifications are merely syntactic points at the ends of Messages
* or at the beginning/end of an ExecutionSpecification."
*
* Primarily it is used to implement the GeneralOrdering, but it could also be used for the following elements of the
* sequence diagram: DurationConstraint, DurationObservation, TimeConstraint, TimeObservation
*
* @see GeneralOrdering
*/
public interface OccurrenceSpecification {
/**
* @return the lifeline on which this object lies
*/
Lifeline getLifeline();
/**
* @return if the horizontal position on the lifeline is fixed (message) or is flexible (execution specification)
*/
boolean hasFixedPosition();
/**
* If hasFixedPosition() returns false this method can return any value, CENTER would be a reasonable choice.
* @return the relative position on the lifeline
*/
AlignHorizontal getFixedPositionAlignment();
/**
* @param hDrawingInfo
* @return the x value of the fixed position or the center position.
*/
double getHorizonatlPosition(HorizontalDrawingInfo hDrawingInfo);
/**
* <b>If hasFixedPosition() returns true this may not return valid values!</b>
* @param hDrawingInfo
* @param left if the position on the left or right side of the execution specification should be returned
* @return the x value of the left or right position on the lifeline
*/
double getHorizontalPosition(HorizontalDrawingInfo hDrawingInfo, boolean left);
/**
* @param drawingInfo
* @return the fixed position or the center position.
*/
PointDouble getPosition(DrawingInfo drawingInfo);
/**
* <b>If hasFixedPosition() returns true this may not return valid values!</b>
* @param drawingInfo
* @param left if the position on the left or right side of the execution specification should be returned
* @return the left or right position on the lifeline
*/
PointDouble getPosition(DrawingInfo drawingInfo, boolean left);
}