Implementation requirements
To import content from third-party repositories, you must supply the following implementations:
HttpEndpointDatabase
implementation that provides integration with a third-party service that uses an HTTP API; see HTTP endpoint database
ExternalItem implementation
An ExternalItem
implementation represents an object referenced in a third-party repository. Extending ExternalItem, the implementation provides a bridge between data retrieved from the repository and an internal Brightspot object to which the data will be converted. An external item is identified with a unique ID, and you must implement ExternalItem#getExternalItemId
to return a unique ID of an external item.
The following example shows an ExternalItem
implementation that represents an image in the external Getty repository. Its setters and getters support creation of GettyImage
objects with third-party data and conversion to internal Brightspot objects. Also included are methods that enable Brightspot to display Getty images in the search panel and in content edit forms.
@Recordable.PreviewField("getPreviewFile") 1 @Recordable.SourceDatabaseProviderClass(GettyDatabaseProvider.class) 2 public class GettyImage extends ExternalItem { @Indexed private String title; 3 @ToolUi.DefaultSearchResult 4 private String gettyId; @Recordable.DisplayName("Image") 5 @ToolUi.NoteHtml("<span data-dynamic-html='${content.getUrlPreviewHtml()}'></span>") 6 private String url; private String caption; /* Getters and setters. */ @Override public String getExternalItemId() { return getGettyId(); } 7 @Ignored(false) @ToolUi.Hidden public StorageItem getPreviewFile() { 8 return Optional.ofNullable(getUrl()) .map(url -> { StorageItem file = new UrlStorageItem(); file.setPath(url); return file; }) .orElse(null); } public String getUrlPreviewHtml() { String url = getUrl(); if (url == null) { return "<span></span>"; } StringWriter stringWriter = new StringWriter(); HtmlWriter htmlWriter = new HtmlWriter(stringWriter); try { htmlWriter.writeTag("img", 9 "src", url, "style", htmlWriter.cssString( "width", "auto", "height", "500px", "border", "solid 1px #cdcdcd", "padding", "3px")); } catch (Exception error) { /* Ignore. */ } return stringWriter.toString(); } }
Calls the internal | |
Specifies which database provider class to use to retrieve Getty images. The specified database provider creates an instance of the | |
Specifies the four | |
Displays the ID of the retrieved Getty image in the search results. | |
Uses Image as the label for the | |
Uses a Java Expression Language (EL) statement that calls the internal | |
Required | |
Uses a Getty image URL to return the image that's displayed in the search panel results. | |
Returns an HTML |
ExternalItemConverter implementation
An ExternalItem
implementation and associated database provider retrieve data from a third-party repository and make it visible in Brightspot as an ExternalItem
type. For an external item to be completely imported into Brightspot, it must be converted to an internal Brightspot type. An external item converter must implement the ExternalItemConverter#convert method. The following example shows an ExternalItemConverter
implementation that converts the external GettyImage
type to an internal Brightspot Image
type.
public class GettyImageToImageConverter implements ExternalItemConverter<GettyImage> { private static final Logger LOGGER = LoggerFactory.getLogger(GettyImageToImageConverter.class); @Override public Collection<?> convert(GettyImage gettyImage) { 1 Image image = new Image(); image.setTitle(gettyImage.getTitle()); image.setCaption(gettyImage.getCaption()); String url = gettyImage.getUrl(); 2 if (url == null) { return Collections.singletonList(image); } url = url.substring(0, url.lastIndexOf("?")); try { 3 StorageItem file = StorageItem.Static.create(); file.setContentType("image/jpg"); file.setPath(new RandomUuidStorageItemPathGenerator().createPath(url)); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(ImageIO.read(new URL(url).openStream()), "jpg", outputStream); file.setData(new ByteArrayInputStream(outputStream.toByteArray())); file.save(); image.setFile(file); } catch (IOException error) { LOGGER.error("Unable to save Getty Image file!", error); } return Collections.singletonList(image); 4 } }
Copies field data from a | |
Retrieves the URL that points to the Getty image. | |
Retrieves the Getty image from the external repository and saves it as a StorageItem object in the Brightspot repository. | |
Returns the image as an internal Brightspot type. |