package org.atlasapi.media.segment; import com.metabroadcast.common.base.Maybe; import com.metabroadcast.common.ids.IdGenerator; public class IdSettingSegmentWriter implements SegmentWriter { private final SegmentWriter delegate; private final IdGenerator generator; private final SegmentResolver resolver; public IdSettingSegmentWriter(SegmentWriter delegate, SegmentResolver resolver, IdGenerator generator) { this.delegate = delegate; this.resolver = resolver; this.generator = generator; } @Override public Segment write(Segment segment) { Maybe<Segment> possibleExistingSegment = resolver.resolveForSource(segment.getPublisher(), segment.getCanonicalUri()); if(possibleExistingSegment.hasValue()) { segment.setId(possibleExistingSegment.requireValue().getId()); } else { segment.setId(generator.generateRaw()); } return delegate.write(segment); } }