blob: c05a81c05ff691d79f51b023ab32c06e1a83216d [file] [log] [blame]
package org.apache.manifoldcf.crawler.connectors.confluence.model;
import java.io.InputStream;
import java.util.Map;
import org.apache.manifoldcf.crawler.connectors.confluence.model.builder.ConfluenceResourceBuilder;
import org.json.JSONException;
import org.json.JSONObject;
/**
* <p>
* Attachment class
* </p>
* <p>
* Represents a Confluence Attachment
* </p>
*
* @author Antonio David Perez Morales <adperezmorales@gmail.com>
*/
public class Attachment extends Page {
protected static final String KEY_DOWNLOAD = "download";
protected static final String KEY_EXTENSIONS = "extensions";
protected String downloadUrl;
protected InputStream contentStream;
public static ConfluenceResourceBuilder<Attachment> builder() {
return new AttachmentBuilder();
}
public String getDownloadUrl() {
return this.downloadUrl;
}
@Override
public boolean hasContent() {
return (this.length > 0 && this.hasContentStream()) || (this.downloadUrl != null && !this.downloadUrl.isEmpty());
}
public Boolean hasContentStream() {
return this.contentStream != null;
}
@Override
public InputStream getContentStream() {
if(hasContentStream()) {
return this.contentStream;
}
return super.getContentStream();
}
@Override
protected void refineMetadata(Map<String, Object> metadata) {
super.refineMetadata(metadata);
metadata.put("downloadUrl", this.getBaseUrl() + this.getUrlContext()
+ downloadUrl);
}
/**
* <p>
* AttachmentBuilder internal class
* </p>
* <p>
* Used to build Attachments
* </p>
*
* @author Antonio David Perez Morales <adperezmorales@gmail.com>
*
*/
public static class AttachmentBuilder implements ConfluenceResourceBuilder<Attachment>{
@Override
public Attachment fromJson(JSONObject jsonPage) {
return fromJson(jsonPage, new Attachment());
}
@SuppressWarnings("unchecked")
public Attachment fromJson(JSONObject jsonPage, Attachment attachment) {
((ConfluenceResourceBuilder<Page>) Page.builder()).fromJson(jsonPage, attachment);
try {
/*
* Download URL
*/
JSONObject links = (JSONObject) jsonPage.get(Page.KEY_LINKS);
if (links != null) {
attachment.downloadUrl = links.optString(KEY_DOWNLOAD, "");
}
/*
* Extensions
*/
JSONObject extensions = (JSONObject) jsonPage
.get(KEY_EXTENSIONS);
if (extensions != null) {
attachment.mediaType = extensions.optString(
Page.KEY_MEDIATYPE, "");
}
} catch (JSONException e) {
e.printStackTrace();
}
return attachment;
}
@Override
public Class<Attachment> getType() {
return Attachment.class;
}
}
}