org.cip4.jdflib.util
Class UrlUtil

java.lang.Object
  extended by org.cip4.jdflib.util.UrlUtil
Direct Known Subclasses:
MimeUtil

public class UrlUtil
extends java.lang.Object

collection of helper routines to convert urls

Author:
prosirai

Nested Class Summary
static class UrlUtil.HTTPDetails
          helper class to set mime details
static class UrlUtil.URLProtocol
          rough classification of protocol type
private static class UrlUtil.URLWriter
           
 
Field Summary
static java.lang.String APPLICATION_PDF
          pdf, duh...
static java.lang.String APPLICATION_XML
          the preferred value for XML!
static java.lang.String APPLICATION_ZIP
          zip, maybe?
static java.lang.String BASE64
           
static java.lang.String BINARY
           
static java.lang.String CONTENT_ID
           
static java.lang.String CONTENT_LENGTH
          more commonly used strings
static java.lang.String CONTENT_TRANSFER_ENCODING
           
static java.lang.String CONTENT_TYPE
          more commonly used strings
static java.lang.String GET
          http get method
static java.lang.String HEAD
          http head method
static java.lang.String KEEPALIVE
           
static java.lang.String m_URIEscape
          strings that must be escaped in urls
private static java.util.HashMap<java.lang.String,java.lang.String> mimeMap
           
static java.lang.String POST
          http post method
static java.lang.String TEXT_HTML
           
static java.lang.String TEXT_PLAIN
           
static java.lang.String TEXT_UNKNOWN
           
static java.lang.String TEXT_XML
           
static java.lang.String VND_JDF
           
static java.lang.String VND_JMF
           
 
Constructor Summary
UrlUtil()
           
 
Method Summary
static java.lang.String addParameter(java.lang.String baseUrl, java.lang.String key, java.lang.String val)
          adds a parameter to a given url using either ? or &
static java.lang.String addPath(java.lang.String baseUrl, java.lang.String path)
          adds a path to a given url , keeping the parameters
static java.lang.String cleanDots(java.lang.String url)
          remove any internal "../" "./" and "//" from a url
static java.lang.String cleanHttpURL(java.lang.String url)
          create a "real" url from a user input url add http://
static java.lang.String createHttpUrl(boolean bSecure, java.lang.String host, int port, java.lang.String path)
          get a prinect url for this host and path
static java.lang.String escape(java.lang.String toEscape, boolean bEscape128)
          standard url escaping
static java.lang.String extension(java.lang.String pathName)
          get the filename extension of pathName excluding the '.' if no '.' is found, returns null if trailing .
static java.lang.String fileToUrl(java.io.File f, boolean bEscape128)
          Convert a File to a valid file URL or IRL
note that some internal functions use network protocol and therefor performance may be non-optimal
static java.io.InputStream getCidURLStream(java.lang.String url, javax.mail.Multipart multipart)
          get a readable inputstream from the CID url
static java.io.File getCreateDirectory(java.lang.String newDir)
          Deprecated. use FileUtil.getCreateDirectory(newDir);
static java.lang.String getFileName(java.lang.String url, javax.mail.Multipart mp)
          get the file name for a url.
static java.lang.String getLocalURL(java.lang.String directory, java.lang.String url)
          get the local url without directory schemes in the base url are case insensitive, all others are case sensitive
static java.lang.String getMimeTypeFromURL(java.lang.String url)
          generates the correct MIMEType for a given URL and sets it
static UrlUtil.URLProtocol getProtocol(java.lang.String url)
          returns the general protocol type of a url
static java.lang.String getRelativePath(java.io.File f, java.io.File fCWD)
          returns the relative URL of a file relative to the current working directory
this includes escaping of %20 etc.
static java.lang.String getRelativeURL(java.io.File f, java.io.File baseDir, boolean bEscape128)
          returns the relative URL of a file relative to the current working directory
static java.io.InputStream getURLInputStream(java.lang.String urlString)
           
static java.io.InputStream getURLInputStream(java.lang.String urlString, javax.mail.BodyPart bodyPart)
          get the opened input stream for a given url string
static UrlPart[] getURLParts(java.net.HttpURLConnection connection)
          get an array of urlparts, regardless of whether this was mime or not if the stream is mime/multipart get also extract that
static java.lang.String getURLWithDirectory(java.lang.String directory, java.lang.String url)
          concatenate directory and url to a single path IF and only IF url is a relative url
relative urls MUST NOT have a scheme (e.g.
static boolean isCID(java.lang.String url)
          test whether a given url is a cid (cid:)
static boolean isEscaped(java.lang.String url)
          test whether a given url is escaped as utf-8
static boolean isFile(java.lang.String url)
          is this a valid file url
static boolean isFileOK(java.io.File f)
          checks whether there is a remote chance that the file is useful for reading
static boolean isHttp(java.lang.String url)
          test whether a given url is an http url (excluding https - @see isHttps)
static boolean isHttps(java.lang.String url)
          test whether a given url is an https url
static boolean isIRL(java.lang.String val)
           
static boolean isMIME(java.io.File file)
          check whether a file is a mime file only check extensions TODO sniff file rather than check extensions
static boolean isMIMEExtenstension(java.lang.String lower)
          check whether a file is a mime file
static boolean isNotCID(java.lang.String url)
          test whether a given url is NOT a cid this may be a local identifier
static boolean isRelativeURL(java.lang.String url)
          if true this url is relative
static boolean isUNC(java.lang.String pathName)
          test whether a given url is a unc path
static boolean isURL(java.lang.String val)
           
static boolean isWindowsLocalPath(java.lang.String pathName)
           
static boolean isXMLType(java.lang.String contentType)
           
static java.io.File moveToDir(IURLSetter parent, java.io.File dir, boolean overWrite)
          Deprecated. use moveToDir(parent, dir, null, overWrite);
static java.io.File moveToDir(IURLSetter parent, java.io.File dir, java.lang.String cwd, boolean overWrite)
          physically store the file at the location specified in dir and also modify this to reflect the new location
static java.lang.String newExtension(java.lang.String strWork, java.lang.String newExt)
          replace the .extension of a file name
static java.lang.String normalize(java.lang.String urlString)
          normalize a url string by grinding it through url
static java.lang.String prefix(java.lang.String strWork)
          inverse of extension
static java.lang.String removeExtension(java.lang.String pathName)
          Deprecated. use prefix(pathName)
static java.lang.String removeProtocol(java.lang.String url)
          remove athe protocol part of a url, if it is specified
static java.net.URL stringToURL(java.lang.String urlString)
          Create a URL for any url string using heuristics and escaping
static java.lang.String unEscape(java.lang.String toEscape)
          standard url unescaping
static java.io.File urlToFile(java.lang.String urlString)
          Retrieve a file for a relative or absolute file url
static java.lang.String urlToFileName(java.lang.String urlString)
           
static java.lang.String urlToString(java.net.URL url)
          null safe url to string converter
static java.lang.String urlToUNC(java.lang.String urlString)
          Retrieve a file for a relative or absolute file url
static UrlPart writeToURL(java.lang.String strUrl, java.io.InputStream stream, java.lang.String method, java.lang.String contentType, UrlUtil.HTTPDetails details)
          write a Stream to an output URL File: and http: are currently supported Use HttpURLConnection.getInputStream() to retrieve the http response
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

POST

public static final java.lang.String POST
http post method

See Also:
Constant Field Values

GET

public static final java.lang.String GET
http get method

See Also:
Constant Field Values

HEAD

public static final java.lang.String HEAD
http head method

See Also:
Constant Field Values

KEEPALIVE

public static final java.lang.String KEEPALIVE
See Also:
Constant Field Values

CONTENT_TRANSFER_ENCODING

public static final java.lang.String CONTENT_TRANSFER_ENCODING
See Also:
Constant Field Values

m_URIEscape

public static final java.lang.String m_URIEscape
strings that must be escaped in urls

See Also:
Constant Field Values

TEXT_HTML

public static final java.lang.String TEXT_HTML
See Also:
Constant Field Values

TEXT_PLAIN

public static final java.lang.String TEXT_PLAIN
See Also:
Constant Field Values

TEXT_UNKNOWN

public static final java.lang.String TEXT_UNKNOWN
See Also:
Constant Field Values

APPLICATION_XML

public static final java.lang.String APPLICATION_XML
the preferred value for XML!

See Also:
Constant Field Values

APPLICATION_ZIP

public static final java.lang.String APPLICATION_ZIP
zip, maybe?

See Also:
Constant Field Values

APPLICATION_PDF

public static final java.lang.String APPLICATION_PDF
pdf, duh...

See Also:
Constant Field Values

TEXT_XML

public static final java.lang.String TEXT_XML
See Also:
Constant Field Values

VND_JDF

public static final java.lang.String VND_JDF
See Also:
Constant Field Values

VND_JMF

public static final java.lang.String VND_JMF
See Also:
Constant Field Values

CONTENT_ID

public static final java.lang.String CONTENT_ID
See Also:
Constant Field Values

CONTENT_TYPE

public static final java.lang.String CONTENT_TYPE
more commonly used strings

See Also:
Constant Field Values

CONTENT_LENGTH

public static final java.lang.String CONTENT_LENGTH
more commonly used strings

See Also:
Constant Field Values

BASE64

public static final java.lang.String BASE64
See Also:
Constant Field Values

BINARY

public static final java.lang.String BINARY
See Also:
Constant Field Values

mimeMap

private static java.util.HashMap<java.lang.String,java.lang.String> mimeMap
Constructor Detail

UrlUtil

public UrlUtil()
Method Detail

getRelativeURL

public static java.lang.String getRelativeURL(java.io.File f,
                                              java.io.File baseDir,
                                              boolean bEscape128)
returns the relative URL of a file relative to the current working directory

Parameters:
f - the file to get the relative url for
baseDir - the file that describes cwd, if null cwd is calculated
bEscape128 - if true, escape > 128 (URL), else retain (IRL)
Returns:

createHttpUrl

public static java.lang.String createHttpUrl(boolean bSecure,
                                             java.lang.String host,
                                             int port,
                                             java.lang.String path)
get a prinect url for this host and path

Parameters:
bSecure - if true, make https
host - hostname
port - the port, duh
path - may be null
Returns:

getRelativePath

public static java.lang.String getRelativePath(java.io.File f,
                                               java.io.File fCWD)
returns the relative URL of a file relative to the current working directory
this includes escaping of %20 etc.

Parameters:
f - the file to get the relative path for
fCWD - the file that describes cwd, if null cwd is calculated from user.dir
Returns:

getFileName

public static java.lang.String getFileName(java.lang.String url,
                                           javax.mail.Multipart mp)
get the file name for a url. extract it from a mime package, if appropriate

Parameters:
url -
mp -
Returns:

getCidURLStream

public static java.io.InputStream getCidURLStream(java.lang.String url,
                                                  javax.mail.Multipart multipart)
get a readable inputstream from the CID url

Parameters:
url - the url to get a stream for
multipart - the multipart mime to which the cid refers
Returns:
InputStream - the readable input stream that this filespec refers to, null if broken or non-existent

extension

public static java.lang.String extension(java.lang.String pathName)
get the filename extension of pathName excluding the '.' if no '.' is found, returns null if trailing . is found, returns ""

Parameters:
pathName - the pathName to get the extension for
Returns:
String - the filename extension

removeExtension

@Deprecated
public static java.lang.String removeExtension(java.lang.String pathName)
Deprecated. use prefix(pathName)

get the path name without extension of pathName

Parameters:
pathName - the pathName to get the extension for
Returns:
String - the filename without extension

getURLParts

public static UrlPart[] getURLParts(java.net.HttpURLConnection connection)
get an array of urlparts, regardless of whether this was mime or not if the stream is mime/multipart get also extract that

Parameters:
connection -
Returns:
the array of body parts input stream

getURLInputStream

public static java.io.InputStream getURLInputStream(java.lang.String urlString,
                                                    javax.mail.BodyPart bodyPart)
get the opened input stream for a given url string

Parameters:
urlString -
bodyPart -
Returns:

getURLInputStream

public static java.io.InputStream getURLInputStream(java.lang.String urlString)
Parameters:
urlString -
Returns:

getCreateDirectory

@Deprecated
public static java.io.File getCreateDirectory(java.lang.String newDir)
Deprecated. use FileUtil.getCreateDirectory(newDir);

create a new directory and return null if the directory could not be created

Parameters:
newDir - the path or URL of the new directory
Returns:

fileToUrl

public static java.lang.String fileToUrl(java.io.File f,
                                         boolean bEscape128)
Convert a File to a valid file URL or IRL
note that some internal functions use network protocol and therefor performance may be non-optimal

Parameters:
f - the File to parse,
bEscape128 - if true, escape non -ascii chars (URI), if false, don't (IRI)
Returns:
the URL string

urlToFileName

public static java.lang.String urlToFileName(java.lang.String urlString)
Parameters:
urlString - the string to parse for a file name
Returns:
the filename

urlToFile

public static java.io.File urlToFile(java.lang.String urlString)
Retrieve a file for a relative or absolute file url

Parameters:
urlString - the file url to retrieve a file for
Returns:
the file located at url

urlToUNC

public static java.lang.String urlToUNC(java.lang.String urlString)
Retrieve a file for a relative or absolute file url

Parameters:
urlString - the file url to retrieve a file for
Returns:
the file located at url

urlToString

public static java.lang.String urlToString(java.net.URL url)
null safe url to string converter

Parameters:
url -
Returns:

addParameter

public static java.lang.String addParameter(java.lang.String baseUrl,
                                            java.lang.String key,
                                            java.lang.String val)
adds a parameter to a given url using either ? or &

Parameters:
baseUrl - the base url - already escaped and ready to go
key - the key to add - NOT escaped
val - the value to add - NOT escaped
Returns:
the escaped new url

addPath

public static java.lang.String addPath(java.lang.String baseUrl,
                                       java.lang.String path)
adds a path to a given url , keeping the parameters

Parameters:
baseUrl - the base url - already escaped and ready to go
path - the path to add
Returns:
the escaped new url

escape

public static java.lang.String escape(java.lang.String toEscape,
                                      boolean bEscape128)
standard url escaping

Parameters:
toEscape - the string to escape
bEscape128 - if true, also escape >128, else leave non-ascii7 as is
Returns:
the escaped string

unEscape

public static java.lang.String unEscape(java.lang.String toEscape)
standard url unescaping

Parameters:
toEscape - the string to unescape
Returns:
the escaped string

stringToURL

public static java.net.URL stringToURL(java.lang.String urlString)
Create a URL for any url string using heuristics and escaping

Parameters:
urlString - the file url to retrieve a file for
Returns:

isFileOK

public static boolean isFileOK(java.io.File f)
checks whether there is a remote chance that the file is useful for reading

Parameters:
f - - File to check
Returns:
true if the file is ok

isEscaped

public static boolean isEscaped(java.lang.String url)
test whether a given url is escaped as utf-8

Parameters:
url - the url to test
Returns:

getMimeTypeFromURL

public static java.lang.String getMimeTypeFromURL(java.lang.String url)
generates the correct MIMEType for a given URL and sets it

Parameters:
url -
Returns:

isCID

public static boolean isCID(java.lang.String url)
test whether a given url is a cid (cid:)

Parameters:
url - the url to test
Returns:

isNotCID

public static boolean isNotCID(java.lang.String url)
test whether a given url is NOT a cid this may be a local identifier

Parameters:
url - the url to test
Returns:
true if we are either a cid or a local url

isFile

public static boolean isFile(java.lang.String url)
is this a valid file url

Parameters:
url -
Returns:

isWindowsLocalPath

public static boolean isWindowsLocalPath(java.lang.String pathName)
Parameters:
pathName -
Returns:

isHttp

public static boolean isHttp(java.lang.String url)
test whether a given url is an http url (excluding https - @see isHttps)

Parameters:
url - the url to test
Returns:

isHttps

public static boolean isHttps(java.lang.String url)
test whether a given url is an https url

Parameters:
url - the url to test
Returns:

normalize

public static java.lang.String normalize(java.lang.String urlString)
normalize a url string by grinding it through url

Parameters:
urlString -
Returns:
the normalized string, null if not a valid url

isUNC

public static boolean isUNC(java.lang.String pathName)
test whether a given url is a unc path

Parameters:
pathName -
Returns:

isMIME

public static boolean isMIME(java.io.File file)
check whether a file is a mime file only check extensions TODO sniff file rather than check extensions

Parameters:
file - the FILE to check
Returns:
true if the file is a MIME file

getProtocol

public static UrlUtil.URLProtocol getProtocol(java.lang.String url)
returns the general protocol type of a url

Parameters:
url -
Returns:

isMIMEExtenstension

public static boolean isMIMEExtenstension(java.lang.String lower)
check whether a file is a mime file

Parameters:
lower -
Returns:

isIRL

public static boolean isIRL(java.lang.String val)
Parameters:
val -
Returns:

removeProtocol

public static java.lang.String removeProtocol(java.lang.String url)
remove athe protocol part of a url, if it is specified

Parameters:
url - the url string to work on
Returns:
the input string without the protocol and ":"

isURL

public static boolean isURL(java.lang.String val)
Parameters:
val -
Returns:

getLocalURL

public static java.lang.String getLocalURL(java.lang.String directory,
                                           java.lang.String url)
get the local url without directory schemes in the base url are case insensitive, all others are case sensitive

Parameters:
directory - the url of the directory
url - the absolute url
Returns:
String - the local URL of url after removing directory

getURLWithDirectory

public static java.lang.String getURLWithDirectory(java.lang.String directory,
                                                   java.lang.String url)
concatenate directory and url to a single path IF and only IF url is a relative url
relative urls MUST NOT have a scheme (e.g. file:)

Parameters:
directory - the url of the directory
url - the relative url of the file
Returns:
String - the concatenated URL of the directory + file

cleanDots

public static java.lang.String cleanDots(java.lang.String url)
remove any internal "../" "./" and "//" from a url

Parameters:
url - the url to clean
Returns:
String - the clean path

cleanHttpURL

public static java.lang.String cleanHttpURL(java.lang.String url)
create a "real" url from a user input url add http://

Parameters:
url - the input url
Returns:
the - hopefully - usable url

writeToURL

public static UrlPart writeToURL(java.lang.String strUrl,
                                 java.io.InputStream stream,
                                 java.lang.String method,
                                 java.lang.String contentType,
                                 UrlUtil.HTTPDetails details)
write a Stream to an output URL File: and http: are currently supported Use HttpURLConnection.getInputStream() to retrieve the http response

Parameters:
strUrl - the URL to write to
stream - the input stream to read from
method - HEAD, GET or POST
contentType - the contenttype to set, if NULL defaults to TEXT/UNKNOWN
details -
Returns:
UrlPart the opened http connection, null in case of error

moveToDir

@Deprecated
public static java.io.File moveToDir(IURLSetter parent,
                                                java.io.File dir,
                                                boolean overWrite)
Deprecated. use moveToDir(parent, dir, null, overWrite);

physically store the file at the location specified in dir and also modify this to reflect the new location

Parameters:
parent - the parent element, trypically a filespec or preview
dir - the directory to move to. dir is created if it does not exist. If dir exists and dir is not a directory, the call fails and null is returned
overWrite - if true, zapp any old files with the same name
Returns:
the file that corresponds to the moved url reference, null if an error occurred

moveToDir

public static java.io.File moveToDir(IURLSetter parent,
                                     java.io.File dir,
                                     java.lang.String cwd,
                                     boolean overWrite)
physically store the file at the location specified in dir and also modify this to reflect the new location

Parameters:
parent - the parent element, trypically a filespec or preview
dir - the directory to move to. dir is created if it does not exist. If dir exists and dir is not a directory, the call fails and null is returned
cwd - the current working dir for local urls
overWrite - if true, zapp any old files with the same name
Returns:
the file that corresponds to the moved url reference, null if an error occurred

isRelativeURL

public static boolean isRelativeURL(java.lang.String url)
if true this url is relative

Parameters:
url - the url string to test
Returns:
true if relative

isXMLType

public static boolean isXMLType(java.lang.String contentType)
Parameters:
contentType -
Returns:

newExtension

public static java.lang.String newExtension(java.lang.String strWork,
                                            java.lang.String newExt)
replace the .extension of a file name

Parameters:
strWork - the file path
newExt - the new extension (works with or without the initial "."
Returns:
the strWork with a replaced extension

prefix

public static java.lang.String prefix(java.lang.String strWork)
inverse of extension

Parameters:
strWork - the string to work on
Returns:
the prefix