private TemporalBoundEditOperation createPeriodicTemporalConstraintOperation(
     EPlanElement planElement, Amount<Duration> offset, IUndoContext undoContext) {
   ConstraintsMember facet = planElement.getMember(ConstraintsMember.class, true);
   Set<PeriodicTemporalConstraint> oldConstraints = getRelevantConstraints(facet);
   PeriodicTemporalConstraint newConstraint = null;
   for (PeriodicTemporalConstraint oldConstraint : oldConstraints) {
     Amount<Duration> time = getRelevantPartOfConstraint(oldConstraint);
     if (time.compareTo(offset) == 0) {
       return null; // same as an existing pin
     }
   }
   newConstraint = createPeriodicTemporalConstraint(planElement, offset);
   TemporalBoundEditOperation operation =
       new TemporalBoundEditOperation(
           getEarliestOrLatestName(), planElement, oldConstraints, newConstraint);
   if (undoContext != null) {
     operation.addContext(undoContext);
   }
   operation.addContext(undoContext);
   return operation;
 }