@Override public DescriptiveUrl getSetup(final String hostname, final Scheme method, final Path container, final Credentials credentials) { final String setup = String.format("provider=%s,protocol=%s,endpoint=%s,key=%s,secret=%s", hostname, method.name(), containerService.getContainer(container).getName(), credentials.getUsername(), credentials.getPassword()); final String encoded; encoded = this.encode(new String(Base64.encodeBase64(setup.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8)); final String formatted = String.format("%s?setup=%s", target, encoded); if(log.isInfoEnabled()) { log.info(String.format("Setup URL %s", formatted)); } return new DescriptiveUrl(URI.create(formatted), DescriptiveUrl.Type.analytics); }
@Override public DescriptiveUrlBag toUrl(final Path file) { final DescriptiveUrlBag list = new DescriptiveUrlBag(); final DescriptiveUrl base = this.toUrl(); list.add(new DescriptiveUrl(URI.create(String.format("%s%s", base.getUrl(), URIEncoder.encode( PathNormalizer.normalize(PathRelativizer.relativize(PathNormalizer.normalize(host.getDefaultPath(), true), file.getAbsolute())) ))).normalize(), base.getType(), base.getHelp()) ); return list; }
@Override public String toString() { return this.getUrl(); } }
@Override public boolean add(final DescriptiveUrl url) { if(url.equals(DescriptiveUrl.EMPTY)) { return false; } return super.add(url); }
if(file.isFile()) { final DescriptiveUrl authenticated = session.getFeature(UrlProvider.class).toUrl(file).find(DescriptiveUrl.Type.authenticated); if(!authenticated.equals(DescriptiveUrl.EMPTY)) { aclUrlField.setAttributedStringValue(HyperlinkAttributedStringFactory.create(authenticated)); aclUrlField.setToolTip(authenticated.getHelp());
/** * @return Empty if no such type * @see DescriptiveUrl#EMPTY */ public DescriptiveUrl find(DescriptiveUrl.Type type) { for(DescriptiveUrl url : this) { if(url.getType().equals(type)) { return url; } } return DescriptiveUrl.EMPTY; } }
@Override public String write(final DescriptiveUrl link) { // Each line terminates with CR and LF characters return String.format("[InternetShortcut]\r\nURL=%s", link.getUrl()); }
if(file.getType().contains(Path.Type.placeholder)) { final DescriptiveUrl link = new DriveUrlProvider().toUrl(file).find(DescriptiveUrl.Type.http); if(DescriptiveUrl.EMPTY.equals(link)) { log.warn(String.format("Missing web link for file %s", file)); return new NullInputStream(file.attributes().getSize());
/** * @param types Include * @return Copy of modified list */ public DescriptiveUrlBag filter(DescriptiveUrl.Type... types) { final DescriptiveUrlBag filtered = new DescriptiveUrlBag(this); for(Iterator<DescriptiveUrl> iter = filtered.iterator(); iter.hasNext(); ) { final DescriptiveUrl url = iter.next(); boolean remove = true; for(DescriptiveUrl.Type type : types) { if(url.getType().equals(type)) { remove = false; break; } } if(remove) { iter.remove(); } } return filtered; }
/** * @param file File in origin container * @return CNAME to distribution */ private List<DescriptiveUrl> toCnameUrl(final Path file) { final List<DescriptiveUrl> urls = new ArrayList<DescriptiveUrl>(); for(String cname : distribution.getCNAMEs()) { final StringBuilder b = new StringBuilder(); b.append(String.format("%s://%s", distribution.getMethod().getScheme(), cname)).append(distribution.getMethod().getContext()); if(StringUtils.isNotEmpty(containerService.getKey(file))) { b.append(Path.DELIMITER).append(URIEncoder.encode(containerService.getKey(file))); } urls.add(new DescriptiveUrl(URI.create(b.toString()).normalize(), DescriptiveUrl.Type.cname, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), LocaleFactory.localizedString(distribution.getMethod().toString(), "S3")))); } return urls; } }
@Override public String write(final DescriptiveUrl link) { return String.format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"><plist version=\"1.0\"><dict>\t<key>URL</key>\t<string>%s</string></dict></plist>", link.getUrl()); }
if(file.getType().contains(Path.Type.placeholder)) { final DescriptiveUrl link = new OneDriveUrlProvider().toUrl(file).find(DescriptiveUrl.Type.http); if(DescriptiveUrl.EMPTY.equals(link)) { log.warn(String.format("Missing web link for file %s", file)); return new NullInputStream(file.attributes().getSize());
@Override public DescriptiveUrlBag toUrl(final Path file) { final DescriptiveUrlBag list = new DescriptiveUrlBag(); if(file.isFile()) { try { // This link will expire in four hours and afterwards you will get 410 Gone. final String link = new DbxUserFilesRequests(session.getClient()).getTemporaryLink(file.getAbsolute()).getLink(); // Determine expiry time for URL final Calendar expiry = Calendar.getInstance(TimeZone.getTimeZone("UTC")); expiry.add(Calendar.HOUR, 4); list.add(new DescriptiveUrl(URI.create(link), DescriptiveUrl.Type.http, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), LocaleFactory.localizedString("Temporary", "S3")) + " (" + MessageFormat.format(LocaleFactory.localizedString("Expires {0}", "S3") + ")", UserDateFormatterFactory.get().getMediumFormat(expiry.getTimeInMillis())) )); } catch(DbxException e) { log.warn(String.format("Failure retrieving shared link. %s", e.getMessage())); } } return list; } }
@Override public void handle(final List<DescriptiveUrl> selected) { final BrowserLauncher browser = BrowserLauncherFactory.get(); for(DescriptiveUrl url : selected) { browser.open(url.getUrl()); } } }
private void initWebUrl() { // Web URL if(this.numberOfFiles() > 1) { this.updateField(webUrlField, String.format("(%s)", LocaleFactory.localizedString("Multiple files"))); webUrlField.setToolTip(StringUtils.EMPTY); } else { this.updateField(webUrlField, LocaleFactory.localizedString("Unknown")); final Path file = this.getSelected(); final DescriptiveUrl http = session.getFeature(UrlProvider.class).toUrl(file).find(DescriptiveUrl.Type.http); if(!http.equals(DescriptiveUrl.EMPTY)) { webUrlField.setAttributedStringValue(HyperlinkAttributedStringFactory.create(http)); webUrlField.setToolTip(LocaleFactory.localizedString("Open in Web Browser")); } } }
/** * Properly URI encode and prepend the bucket name. * * @param scheme Protocol * @return URL to be displayed in browser */ protected DescriptiveUrl toUrl(final Path file, final Scheme scheme) { final StringBuilder url = new StringBuilder(scheme.name()); url.append("://"); if(file.isRoot()) { url.append(session.getHost().getHostname()); } else { final String hostname = this.getHostnameForContainer(containerService.getContainer(file)); if(hostname.startsWith(containerService.getContainer(file).getName())) { url.append(hostname); if(!containerService.isContainer(file)) { url.append(Path.DELIMITER); url.append(URIEncoder.encode(containerService.getKey(file))); } } else { url.append(session.getHost().getHostname()); url.append(URIEncoder.encode(file.getAbsolute())); } } return new DescriptiveUrl(URI.create(url.toString()), DescriptiveUrl.Type.http, MessageFormat.format(LocaleFactory.localizedString("{0} URL"), scheme.name().toUpperCase(Locale.ROOT))); }
@Override protected URI getOrigin(final Path container, final Distribution.Method method) { final URI url = URI.create(String.format("%s%s", new WebUrlProvider(origin).toUrl().getUrl(), PathNormalizer.normalize(origin.getDefaultPath(), true))); if(log.isDebugEnabled()) { log.debug(String.format("Use origin %s for distribution %s", url, method)); } return url; }