This repository has been archived by the owner on Jan 17, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branches 'feature/cp-title-override' and 'master' of github.com…
…:Financial-Times/methode-article-mapper into feature/cp-title-override
- Loading branch information
Showing
10 changed files
with
250 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
42 changes: 42 additions & 0 deletions
42
src/main/java/com/ft/methodearticlemapper/transformation/ContentVideoXmlEventHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package com.ft.methodearticlemapper.transformation; | ||
|
||
import com.ft.bodyprocessing.xml.eventhandlers.XMLEventHandler; | ||
import com.google.common.base.Strings; | ||
|
||
import javax.xml.namespace.QName; | ||
import javax.xml.stream.events.Attribute; | ||
import javax.xml.stream.events.StartElement; | ||
import java.util.regex.Matcher; | ||
import java.util.regex.Pattern; | ||
|
||
public class ContentVideoXmlEventHandler extends AbstractVideoXmlEventHandler { | ||
|
||
private static final String UUID_REGEX = "_([0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12})\\.xml"; | ||
private static final Pattern UUID_PATTERN = Pattern.compile(UUID_REGEX); | ||
|
||
private String videoIdHolderAttribute; | ||
|
||
public ContentVideoXmlEventHandler(String videoIdHolderAttribute, XMLEventHandler fallbackHandler) { | ||
super(fallbackHandler); | ||
this.videoIdHolderAttribute = videoIdHolderAttribute; | ||
} | ||
|
||
@Override | ||
public String extractVideoId(StartElement event) { | ||
Attribute attribute = event.getAttributeByName(QName.valueOf(videoIdHolderAttribute)); | ||
if (attribute == null) { | ||
return null; | ||
} | ||
String videoIdHolder = event.getAttributeByName(QName.valueOf(videoIdHolderAttribute)).getValue(); | ||
return getVideoUuid(videoIdHolder); | ||
} | ||
|
||
private String getVideoUuid(String videoIdHolder) { | ||
if (Strings.isNullOrEmpty(videoIdHolder)) { | ||
return null; | ||
} | ||
|
||
Matcher matcher = UUID_PATTERN.matcher(videoIdHolder); | ||
return matcher.find() ? matcher.group(1) : null; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
src/main/java/com/ft/methodearticlemapper/transformation/MethodeVideoXmlEventHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package com.ft.methodearticlemapper.transformation; | ||
|
||
import com.ft.bodyprocessing.xml.eventhandlers.XMLEventHandler; | ||
import com.google.common.base.Strings; | ||
|
||
import javax.xml.namespace.QName; | ||
import javax.xml.stream.events.Attribute; | ||
import javax.xml.stream.events.StartElement; | ||
import java.util.UUID; | ||
import java.util.regex.Matcher; | ||
import java.util.regex.Pattern; | ||
|
||
|
||
public class MethodeVideoXmlEventHandler extends AbstractVideoXmlEventHandler { | ||
|
||
private static final String UUID_REGEX = "[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}"; | ||
private static final Pattern UUID_PATTERN = Pattern.compile(UUID_REGEX); | ||
|
||
private final String videoIdAttributeName; | ||
|
||
public MethodeVideoXmlEventHandler(String videoIdAttributeName, XMLEventHandler fallbackHandler) { | ||
super(fallbackHandler); | ||
this.videoIdAttributeName = videoIdAttributeName; | ||
} | ||
|
||
@Override | ||
public String extractVideoId(StartElement event) { | ||
Attribute attribute = event.getAttributeByName(QName.valueOf(videoIdAttributeName)); | ||
if (attribute == null) { | ||
return null; | ||
} | ||
String videoId = event.getAttributeByName(QName.valueOf(videoIdAttributeName)).getValue(); | ||
return Strings.isNullOrEmpty(videoId) ? null : getAsUUID(videoId); | ||
} | ||
|
||
private String getAsUUID(String videoId) { | ||
Matcher matcher = UUID_PATTERN.matcher(videoId); | ||
return matcher.matches() ? videoId : UUID.nameUUIDFromBytes(videoId.getBytes()).toString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
91 changes: 91 additions & 0 deletions
91
...test/java/com/ft/methodearticlemapper/transformation/ContentVideoXmlEventHandlerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package com.ft.methodearticlemapper.transformation; | ||
|
||
import com.ft.bodyprocessing.BodyProcessingContext; | ||
import com.ft.bodyprocessing.writer.BodyWriter; | ||
import com.ft.bodyprocessing.xml.eventhandlers.XMLEventHandler; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.mockito.Mock; | ||
import org.mockito.runners.MockitoJUnitRunner; | ||
|
||
import javax.xml.stream.XMLEventReader; | ||
import javax.xml.stream.events.StartElement; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import static org.mockito.Mockito.verify; | ||
|
||
@RunWith(MockitoJUnitRunner.class) | ||
public class ContentVideoXmlEventHandlerTest extends BaseXMLEventHandlerTest { | ||
|
||
private ContentVideoXmlEventHandler eventHandler; | ||
@Mock | ||
private XMLEventHandler fallbackHandler; | ||
|
||
@Mock | ||
private XMLEventReader mockXmlEventReader; | ||
@Mock | ||
private BodyWriter mockBodyWriter; | ||
@Mock | ||
private BodyProcessingContext mockBodyProcessingContext; | ||
|
||
private static final String VIDEO_LINK_ELEMENT = "content"; | ||
private static final String VIDEO_ID_HOLDER_ATTRIBUTE_NAME = "href"; | ||
private static final String VIDEO_UUID = "e21e5235-5f3f-4a53-bafd-73dbcd0552e0"; | ||
private static final String VIDEO_ID_HOLDER = "/FT/Content/Links/Videos/Video_upload-test.mp4_" + VIDEO_UUID | ||
+ ".xml?uuid=dcc02264-2438-11e7-a24c-6bbb6ec0bc98&xp=/doc/story/text/body&lt=link\" id=\"U11603526769084aUD\""; | ||
private static final String VIDEO_ID_HOLDER_NO_UUID = "/FT/Content/Links/Videos/Video_upload-test.mp4_123456789.xml?uuid=dcc02264-2438-11e7-a24c-6bbb6ec0bc98&xp=/doc/story/text/body&lt=link\" id=\"U11603526769084aUD\""; | ||
private static final String DATA_EMBEDDED = "data-embedded"; | ||
private static final String VIDEO_TYPE = "http://www.ft.com/ontology/content/MediaResource"; | ||
private static final String CONTENT_TAG = "content"; | ||
private static final String ID = "id"; | ||
private static final String TYPE = "type"; | ||
|
||
@Before | ||
public void setup() throws Exception { | ||
eventHandler = new ContentVideoXmlEventHandler(VIDEO_ID_HOLDER_ATTRIBUTE_NAME, fallbackHandler); | ||
} | ||
|
||
@Test | ||
public void shouldUseFallbackHandlerIfStartElementVideoIdHolderAttributeValueIsMissing() throws Exception { | ||
StartElement startElement = getStartElement(VIDEO_LINK_ELEMENT); | ||
eventHandler.handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
verify(fallbackHandler).handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
} | ||
|
||
@Test | ||
public void shouldUseFallbackHandlerIfStartElementVideoIdHolderAttributeValueIsEmpty() throws Exception { | ||
StartElement startElement = getStartElementWithAttributes( | ||
VIDEO_LINK_ELEMENT, buildOneAttributeMap(VIDEO_ID_HOLDER_ATTRIBUTE_NAME, "")); | ||
eventHandler.handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
verify(fallbackHandler).handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
} | ||
|
||
@Test | ||
public void shouldWriteTransformedElementsToWriterWhenNextVideoUUID() throws Exception { | ||
Map<String, String> transformedAttributes = new HashMap<>(); | ||
transformedAttributes.put(ID, VIDEO_UUID); | ||
transformedAttributes.put(DATA_EMBEDDED, Boolean.TRUE.toString()); | ||
transformedAttributes.put(TYPE, VIDEO_TYPE); | ||
StartElement startElement = getStartElementWithAttributes( | ||
VIDEO_ID_HOLDER_ATTRIBUTE_NAME, buildOneAttributeMap(VIDEO_ID_HOLDER_ATTRIBUTE_NAME, VIDEO_ID_HOLDER)); | ||
eventHandler.handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
verify(mockBodyWriter).writeStartTag(CONTENT_TAG, transformedAttributes); | ||
verify(mockBodyWriter).writeEndTag(CONTENT_TAG); | ||
} | ||
|
||
@Test | ||
public void shouldUseFallbackHandlerIfStartElementVideoIdHolderAttributeValueIsNotUUID() throws Exception { | ||
StartElement startElement = getStartElementWithAttributes(VIDEO_ID_HOLDER_ATTRIBUTE_NAME, | ||
buildOneAttributeMap(VIDEO_ID_HOLDER_ATTRIBUTE_NAME, VIDEO_ID_HOLDER_NO_UUID)); | ||
eventHandler.handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
verify(fallbackHandler).handleStartElementEvent(startElement, mockXmlEventReader, mockBodyWriter, mockBodyProcessingContext); | ||
} | ||
|
||
private Map<String, String> buildOneAttributeMap(String attributeName, String attributeValue) { | ||
Map<String, String> attributes = new HashMap<>(); | ||
attributes.put(attributeName, attributeValue); | ||
return attributes; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.