public static SegmentUUID getSegmentUuid(int segm) { return SegmentUUID.create( String.format(SEGMENT_UUID_FORMAT, segm)); }
/** * Inits a segment parameter defined by the given UUID. Defines default parameters (such as Segment UUID and number). * The method must be called for each segment before adding another parameters. * * @param uuid segment UUID. * @return this segment template parameters context. */ public SegmentTemplateParameterContext initSegment(SegmentUUID uuid) { if (!segments.containsKey(uuid)) { int segmNum = segments.size(); doAddParameter(uuid, SegmentContextParameters.UUID, uuid.getUuid()); doAddParameter(uuid, SegmentContextParameters.NUM, String.valueOf(segmNum)); } return this; }
public static SegmentUUID create(String uuid) { return new SegmentUUID(uuid); }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } ResourceKey that = (ResourceKey) o; if (segmentUuid != null ? !segmentUuid.equals(that.segmentUuid) : that.segmentUuid != null) { return false; } if (sequenceUuid != null ? !sequenceUuid.equals(that.sequenceUuid) : that.sequenceUuid != null) { return false; } return sequenceType == that.sequenceType; }
@Override public String toString() { return segmentUuid.toString() + "_" + sequenceUuid.toString() + "_" + sequenceType.value(); } }
@Override public int hashCode() { int result = segmentUuid != null ? segmentUuid.hashCode() : 0; result = 31 * result + (sequenceUuid != null ? sequenceUuid.hashCode() : 0); result = 31 * result + (sequenceType != null ? sequenceType.hashCode() : 0); return result; }
@Test public void testInitDefaultSegmentParameters() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().initSegment( SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment( SegmentUUID.create("urn:uuid:1111")); contextProvider.getSegmentContext().initSegment( SegmentUUID.create("urn:uuid:2222")); assertDefaultSegmentParameters(contextProvider, 0, SegmentUUID.create("urn:uuid:3333")); assertDefaultSegmentParameters(contextProvider, 1, SegmentUUID.create("urn:uuid:1111")); assertDefaultSegmentParameters(contextProvider, 2, SegmentUUID.create("urn:uuid:2222")); }
private void assertDefaultSegmentParameters(TemplateParameterContextProvider contextProvider, int segmNum, SegmentUUID segmUuid) { assertEquals( String.valueOf(segmNum), contextProvider.getSegmentContext().resolveTemplateParameter( new TemplateParameter("%{segm.num}"), new ContextInfoBuilder().setSegmentUuid(segmUuid).build())); assertEquals( segmUuid.getUuid(), contextProvider.getSegmentContext().resolveTemplateParameter( new TemplateParameter("%{segm.uuid}"), new ContextInfoBuilder().setSegmentUuid(segmUuid).build())); }
@Test public void testInitSegmentsOrder() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:1111")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:2222")); assertEquals(3, contextProvider.getSegmentContext().getSegmentsNum()); assertArrayEquals( new SegmentUUID[]{ SegmentUUID.create("urn:uuid:3333"), SegmentUUID.create("urn:uuid:1111"), SegmentUUID.create("urn:uuid:2222")}, contextProvider.getSegmentContext().getUuids().toArray()); }
@Test public void resolvesCorrectSegmentContext() { for (int segm = 0; segm < SEGMENT_COUNT; segm++) { String resolvedNum = resolver.resolveTemplateParameter("%{segm.num}", new ContextInfoBuilder().setSegmentUuid(getSegmentUuid(segm)).build()); String resolvedUuid = resolver.resolveTemplateParameter("%{segm.uuid}", new ContextInfoBuilder().setSegmentUuid(getSegmentUuid(segm)).build()); assertNotNull(resolvedNum); assertEquals(String.valueOf(segm), resolvedNum); assertNotNull(resolvedUuid); assertEquals(getSegmentUuid(segm).getUuid(), resolvedUuid); } }
@Test public void testInitSegmentsNoDuplicate() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:1111")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:2222")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:1111")); assertEquals(3, contextProvider.getSegmentContext().getSegmentsNum()); assertArrayEquals( new SegmentUUID[]{ SegmentUUID.create("urn:uuid:3333"), SegmentUUID.create("urn:uuid:1111"), SegmentUUID.create("urn:uuid:2222")}, contextProvider.getSegmentContext().getUuids().toArray()); }
@Test public void testAddSegmentParametersInitsSegment() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().addSegmentParameter( SegmentUUID.create("urn:uuid:3333"), SegmentContextParameters.NUM, "5"); assertEquals(1, contextProvider.getSegmentContext().getSegmentsNum()); assertArrayEquals( new SegmentUUID[]{SegmentUUID.create("urn:uuid:3333")}, contextProvider.getSegmentContext().getUuids().toArray()); assertDefaultSegmentParameters(contextProvider, 5, SegmentUUID.create("urn:uuid:3333")); }
@Override protected void buildFromCpl() { // 1. get a composition edit rate (it's used if no specific edit rate is specified for a segment). this.compositionEditRate = ConversionHelper.parseEditRate(cpl2016.getEditRate()); // 2. go through all segments and all sequences and build segment, sequence and resource contexts. for (SegmentType segment : cpl2016.getSegmentList().getSegment()) { this.currentSegmentUuid = SegmentUUID.create(segment.getId()); contextProvider.getSegmentContext().initSegment(currentSegmentUuid); for (Object anySeqJaxb : segment.getSequenceList().getAny()) { if (!(anySeqJaxb instanceof JAXBElement)) { throw new ConversionException(String.format("Could not understand a sequence '%s'", anySeqJaxb.toString())); } JAXBElement jaxbElement = (JAXBElement) (anySeqJaxb); Object anySeq = jaxbElement.getValue(); SequenceTypeCpl currentSequenceTypeCpl = SequenceTypeCpl.fromName(jaxbElement.getName().getLocalPart()); if ((currentSequenceTypeCpl != null) && (anySeq instanceof SequenceType)) { this.currentSequence = (SequenceType) anySeq; this.currentSequenceType = currentSequenceTypeCpl.toSequenceType(); this.currentSequenceUuid = SequenceUUID.create(currentSequence.getTrackId()); processSequence(); } } } }
@Override protected void buildFromCpl() { // 1. get a composition edit rate (it's used if no specific edit rate is specified for a segment). this.compositionEditRate = ConversionHelper.parseEditRate(cpl2013.getEditRate()); // 2. go through all segments and all sequences and build segment, sequence and resource contexts. for (SegmentType segment : cpl2013.getSegmentList().getSegment()) { this.currentSegmentUuid = SegmentUUID.create(segment.getId()); contextProvider.getSegmentContext().initSegment(currentSegmentUuid); for (Object anySeqJaxb : segment.getSequenceList().getAny()) { if (!(anySeqJaxb instanceof JAXBElement)) { throw new ConversionException(String.format("Could not understand a sequence '%s'", anySeqJaxb.toString())); } JAXBElement jaxbElement = (JAXBElement) (anySeqJaxb); Object anySeq = jaxbElement.getValue(); SequenceTypeCpl currentSequenceTypeCpl = SequenceTypeCpl.fromName(jaxbElement.getName().getLocalPart()); if ((currentSequenceTypeCpl != null) && (anySeq instanceof SequenceType)) { this.currentSequence = (SequenceType) anySeq; this.currentSequenceType = currentSequenceTypeCpl.toSequenceType(); this.currentSequenceUuid = SequenceUUID.create(currentSequence.getTrackId()); processSequence(); } } } }
@Test public void testSegmentContextCreatedCorrectly() throws Exception { TemplateParameterContextProvider contextProvider = TemplateParameterContextCreator.createDefaultContextProvider(); AssetMap assetMap = new AssetMapParser().parse(ImpUtils.getImpFolder(), ImpUtils.getCorrectAssetmap()); new CplContextBuilder(contextProvider, assetMap, ImpUtils.getCorrectCpl()).build(); SegmentTemplateParameterContext segmentContext = contextProvider.getSegmentContext(); assertEquals(2, segmentContext.getSegmentsNum()); // UUIDs as defined in CPL.xml assertArrayEquals( new SegmentUUID[]{ SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16"), SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17") }, segmentContext.getUuids().toArray(new SegmentUUID[]{})); ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16")) .build(); assertEquals("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16", segmentContext.getParameterValue(SegmentContextParameters.UUID, contextInfo)); assertEquals("0", segmentContext.getParameterValue(SegmentContextParameters.NUM, contextInfo)); contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17")) .build(); assertEquals("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17", segmentContext.getParameterValue(SegmentContextParameters.UUID, contextInfo)); assertEquals("1", segmentContext.getParameterValue(SegmentContextParameters.NUM, contextInfo)); }
@Test public void testEndTime_NoEntryPoint_SourceDuration() throws Exception { // UUIDs as defined in CPL.xml ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16")) .setSequenceUuid(SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d")) .setSequenceType(SequenceType.VIDEO) .setResourceUuid(ResourceUUID.create("urn:uuid:2404d06b-4d65-4511-9cac-42d41196a1ea", 0)) .build(); assertEquals("300", resourceContext.getParameterValue(ResourceContextParameters.END_TIME_EDIT_UNIT, contextInfo)); assertEquals("00:00:06.000", resourceContext.getParameterValue(ResourceContextParameters.END_TIME_TIMECODE, contextInfo)); assertEquals("6000", resourceContext.getParameterValue(ResourceContextParameters.END_TIME_MS, contextInfo)); }
@Test public void testStartTime_EntryPoint_NoEditRate() throws Exception { // UUIDs as defined in CPL.xml ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17")) .setSequenceUuid(SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d")) .setSequenceType(SequenceType.VIDEO) .setResourceUuid(ResourceUUID.create("urn:uuid:2404d06b-4d65-4511-9cac-42d41196a1ea", 0)) .build(); assertEquals("600", resourceContext.getParameterValue(ResourceContextParameters.START_TIME_EDIT_UNIT, contextInfo)); assertEquals("00:00:12.000", resourceContext.getParameterValue(ResourceContextParameters.START_TIME_TIMECODE, contextInfo)); assertEquals("12000", resourceContext.getParameterValue(ResourceContextParameters.START_TIME_MS, contextInfo)); }
@Test public void testDuration_SourceDuration() throws Exception { // UUIDs as defined in CPL.xml ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16")) .setSequenceUuid(SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d")) .setSequenceType(SequenceType.VIDEO) .setResourceUuid(ResourceUUID.create("urn:uuid:2404d06b-4d65-4511-9cac-42d41196a1eb", 0)) .build(); assertEquals("150", resourceContext.getParameterValue(ResourceContextParameters.DURATION_EDIT_UNIT, contextInfo)); assertEquals("00:00:03.000", resourceContext.getParameterValue(ResourceContextParameters.DURATION_TIMECODE, contextInfo)); assertEquals("3000", resourceContext.getParameterValue(ResourceContextParameters.DURATION_MS, contextInfo)); }
@Test public void testEndTime_EntryPoint_SourceDuration() throws Exception { // UUIDs as defined in CPL.xml ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16")) .setSequenceUuid(SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d")) .setSequenceType(SequenceType.VIDEO) .setResourceUuid(ResourceUUID.create("urn:uuid:2404d06b-4d65-4511-9cac-42d41196a1eb", 0)) .build(); assertEquals("450", resourceContext.getParameterValue(ResourceContextParameters.END_TIME_EDIT_UNIT, contextInfo)); assertEquals("00:00:09.000", resourceContext.getParameterValue(ResourceContextParameters.END_TIME_TIMECODE, contextInfo)); assertEquals("9000", resourceContext.getParameterValue(ResourceContextParameters.END_TIME_MS, contextInfo)); }
@Test public void testDuration_NoSourceDuration_NoEntryPoint() throws Exception { // UUIDs as defined in CPL.xml ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17")) .setSequenceUuid(SequenceUUID.create("urn:uuid:63b41d86-c5df-4169-b036-3a25024bd712")) .setSequenceType(SequenceType.AUDIO) .setResourceUuid(ResourceUUID.create("urn:uuid:895820ef-e379-4021-a69e-8a898b0a9097", 0)) .build(); assertEquals("1629120", resourceContext.getParameterValue(ResourceContextParameters.DURATION_EDIT_UNIT, contextInfo)); assertEquals("00:00:33.940", resourceContext.getParameterValue(ResourceContextParameters.DURATION_TIMECODE, contextInfo)); assertEquals("33940", resourceContext.getParameterValue(ResourceContextParameters.DURATION_MS, contextInfo)); }