001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.activemq.blob; 018 019 import java.net.MalformedURLException; 020 import java.net.URISyntaxException; 021 import java.net.URL; 022 023 /** 024 * The policy for configuring how BLOBs (Binary Large OBjects) are transferred 025 * out of band between producers, brokers and consumers. 026 * 027 * 028 */ 029 public class BlobTransferPolicy { 030 private String defaultUploadUrl = "http://localhost:8080/uploads/"; 031 private String brokerUploadUrl; 032 private String uploadUrl; 033 private int bufferSize = 128 * 1024; 034 private BlobUploadStrategy uploadStrategy; 035 private BlobDownloadStrategy downloadStrategy; 036 037 /** 038 * Returns a copy of this policy object 039 */ 040 public BlobTransferPolicy copy() { 041 BlobTransferPolicy that = new BlobTransferPolicy(); 042 that.defaultUploadUrl = this.defaultUploadUrl; 043 that.brokerUploadUrl = this.brokerUploadUrl; 044 that.uploadUrl = this.uploadUrl; 045 that.uploadStrategy = this.uploadStrategy; 046 return that; 047 } 048 049 public String getUploadUrl() { 050 if (uploadUrl == null) { 051 uploadUrl = getBrokerUploadUrl(); 052 if (uploadUrl == null) { 053 uploadUrl = getDefaultUploadUrl(); 054 } 055 } 056 return uploadUrl; 057 } 058 059 /** 060 * Sets the upload URL to use explicitly on the client which will 061 * overload the default or the broker's URL. This allows the client to decide 062 * where to upload files to irrespective of the brokers configuration. 063 */ 064 public void setUploadUrl(String uploadUrl) { 065 this.uploadUrl = uploadUrl; 066 } 067 068 public String getBrokerUploadUrl() { 069 return brokerUploadUrl; 070 } 071 072 /** 073 * Called by the JMS client when a broker advertises its upload URL 074 */ 075 public void setBrokerUploadUrl(String brokerUploadUrl) { 076 this.brokerUploadUrl = brokerUploadUrl; 077 } 078 079 public String getDefaultUploadUrl() { 080 return defaultUploadUrl; 081 } 082 083 /** 084 * Sets the default upload URL to use if the broker does not 085 * have a configured upload URL 086 */ 087 public void setDefaultUploadUrl(String defaultUploadUrl) { 088 this.defaultUploadUrl = defaultUploadUrl; 089 } 090 091 public BlobUploadStrategy getUploadStrategy() { 092 if (uploadStrategy == null) { 093 uploadStrategy = createUploadStrategy(); 094 } 095 return uploadStrategy; 096 } 097 098 public BlobDownloadStrategy getDownloadStrategy() { 099 if(downloadStrategy == null) { 100 downloadStrategy = createDownloadStrategy(); 101 } 102 return downloadStrategy; 103 } 104 105 /** 106 * Sets the upload strategy to use for uploading BLOBs to some URL 107 */ 108 public void setUploadStrategy(BlobUploadStrategy uploadStrategy) { 109 this.uploadStrategy = uploadStrategy; 110 } 111 112 public int getBufferSize() { 113 return bufferSize; 114 } 115 116 /** 117 * Sets the default buffer size used when uploading or downloading files 118 */ 119 public void setBufferSize(int bufferSize) { 120 this.bufferSize = bufferSize; 121 } 122 123 /** 124 * Returns the upload strategy depending on the information from the 125 * uploadURL. Currently supportet HTTP and FTP 126 * 127 * @return 128 */ 129 protected BlobUploadStrategy createUploadStrategy() { 130 BlobUploadStrategy strategy; 131 try { 132 URL url = new URL(getUploadUrl()); 133 134 if(url.getProtocol().equalsIgnoreCase("FTP")) { 135 strategy = new FTPBlobUploadStrategy(this); 136 } else if (url.getProtocol().equalsIgnoreCase("FILE")) { 137 strategy = new FileSystemBlobStrategy(this); 138 } else { 139 strategy = new DefaultBlobUploadStrategy(this); 140 } 141 } catch (MalformedURLException e) { 142 strategy = new DefaultBlobUploadStrategy(this); 143 } catch (URISyntaxException e) { 144 strategy = new DefaultBlobUploadStrategy(this); 145 } 146 return strategy; 147 } 148 149 /** 150 * Returns the download strategy depending on the information from the 151 * uploadURL. Currently supportet HTTP and FTP 152 * 153 * @return 154 */ 155 protected BlobDownloadStrategy createDownloadStrategy() { 156 BlobDownloadStrategy strategy; 157 try { 158 URL url = new URL(getUploadUrl()); 159 160 if(url.getProtocol().equalsIgnoreCase("FTP")) { 161 strategy = new FTPBlobDownloadStrategy(this); 162 } else if (url.getProtocol().equalsIgnoreCase("FILE")) { 163 strategy = new FileSystemBlobStrategy(this); 164 } else { 165 strategy = new DefaultBlobDownloadStrategy(this); 166 } 167 } catch (MalformedURLException e) { 168 strategy = new DefaultBlobDownloadStrategy(this); 169 } catch (URISyntaxException e) { 170 strategy = new DefaultBlobDownloadStrategy(this); 171 } 172 return strategy; 173 } 174 175 176 }