package org.gbif.occurrence.common.download; import java.util.regex.Pattern; /** * Shared download utilities. */ public class DownloadUtils { private static final String OOZIE_SUFFIX = "-oozie-oozi-W"; public static final String DOWNLOAD_ID_PLACEHOLDER = "_DOWNLOAD_ID_"; public static final String DELIMETERS_MATCH = "\\t|\\n|\\r|(?:(?>\\u000D\\u000A)|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029\\u0000])"; public static final Pattern DELIMETERS_MATCH_PATTERN = Pattern.compile(DELIMETERS_MATCH); public static final String ISO_8601_FORMAT = "yyyy-MM-dd'T'HH:mm'Z'"; public static final String DOWNLOAD_LINK_FMT = "occurrence/download/request/%s.zip"; /** * Private default constructor. */ private DownloadUtils() { throw new UnsupportedOperationException("Can't initialize class"); } /** * Adds a path to a base url and makes sure the path / separator only exists once. * * @param base the base url to add to with or without trailing slash * @param path the path to be added without a prefix / * @return a string with the form base/path */ public static String concatUrlPaths(String base, String path) { StringBuilder sb = new StringBuilder(); sb.append(base); if (!base.endsWith("/")) { sb.append('/'); } sb.append(path); return sb.toString(); } /** * Creates a URL pointing to the download file. */ public static String downloadLink(String baseUrl, String downloadId) { return concatUrlPaths(baseUrl, String.format(DOWNLOAD_LINK_FMT, downloadId)); } public static String downloadToWorkflowId(String downloadId) { return downloadId + OOZIE_SUFFIX; } public static String workflowToDownloadId(String workflowId) { if (workflowId.contains(OOZIE_SUFFIX)) { return workflowId.replace(OOZIE_SUFFIX, ""); } throw new IllegalArgumentException("WorkflowId given in unknown format: " + workflowId); } }