package org.distributeme.core.util; import org.distributeme.core.RegistryLocation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; /** * Base class for registry utilities. * * @author lrosenberg * @version $Id: $Id */ public class BaseRegistryUtil { /** * Location config object. */ protected static final RegistryLocation registryLocation = RegistryLocation.create(); /** * Logger. */ private static Logger LOG = LoggerFactory.getLogger(BaseRegistryUtil.class); /** * Returns the base url of the specified registry application. * * @param app a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected static String getRegistryBaseUrl(String app){ return getRegistryBaseUrl(app, registryLocation.getRegistryContainerHost(), registryLocation.getRegistryContainerPort(), registryLocation.getRegistryContainerProtocol(), registryLocation.getRegistryContainerContext() ); } /** * <p>getRegistryBaseUrl.</p> * * @param app a {@link java.lang.String} object. * @param host a {@link java.lang.String} object. * @param port a int. * @param protocol a {@link java.lang.String} object. * @param context a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ protected static String getRegistryBaseUrl(String app, String host, int port, String protocol, String context){ String url = protocol+"://"+host+":"+port; if (context!=null && context.length()>0) { url += "/" + context + "/" + app + "/"; }else { url += "/" + app + "/"; } return url; } /** * Reads the server reply to an url and returns it as string. * * @param url as string. * @return an array of byte. */ public static byte[] getUrlContent(String url){ return getUrlContent(url, false); } /** * <p>getUrlContent.</p> * * @param url a {@link java.lang.String} object. * @param silently a boolean. * @return an array of byte. */ protected static byte[] getUrlContent(String url, boolean silently){ try{ URL myURL = new URL(url); URLConnection con = myURL.openConnection(); InputStream inp = con.getInputStream(); int expectedLength = con.getContentLength(); int length = expectedLength; if (length<=0) length = 3000; // System.out.println("Opened input stream."); //System.out.print(" "); byte[] b = new byte[length]; byte[] result = new byte[length]; int sum = 0; do{ //System.out.println("trying to read "+length+" bytes"); int r = inp.read(b,0,length); //System.out.println("have read "+r); if (r==-1) break; System.arraycopy(b,0,result,sum,r); sum += r; }while(sum<length); byte[] ret = new byte[sum]; System.arraycopy(result, 0, ret, 0, sum); return ret; }catch(Exception e){ if (!silently) LOG.error("getPageContent, url=" + url, e); return null; } } /** * URLEncodes a string. * * @param urlPart string to encode. * @return a {@link String} object. */ public static String encode(String urlPart){ try{ return URLEncoder.encode(urlPart, "UTF-8"); }catch(UnsupportedEncodingException e){ throw new AssertionError("WTF, UTF-8 is not supported?"); } } public static RegistryLocation getRegistryLocation() { return registryLocation; } }