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; }