/*
* Copyright (c) 2011+, HL7, Inc
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* Neither the name of HL7 nor the names of its contributors may be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
package org.hl7.fhir.utilities;
/*
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2017 University Health Network
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class Utilities {
// private static final String TOKEN_REGEX = "^a-z[A-Za-z0-9]*$";
// private static final String OID_REGEX = "[0-2](\\.(0|[1-9]([0-9])*))*";
//
//
//
public static boolean isInteger(String string) {
try {
int i = Integer.parseInt(string);
return i != i + 1;
} catch (Exception e) {
return false;
}
}
public static boolean isHex(String string) {
try {
int i = Integer.parseInt(string, 16);
return i != i + 1;
} catch (Exception e) {
return false;
}
}
public static String escapeJson(String value) {
if (value == null)
return "";
StringBuilder b = new StringBuilder();
for (char c : value.toCharArray()) {
if (c == '\r')
b.append("\\r");
else if (c == '\n')
b.append("\\n");
else if (c == '"')
b.append("\\\"");
else if (c == '\'')
b.append("\\'");
else if (c == '\\')
b.append("\\\\");
else
b.append(c);
}
return b.toString();
}
public static boolean isDecimal(String string) {
if (Utilities.noString(string))
return false;
try {
float r = Float.parseFloat(string);
return r != r + 1; // just to suppress the hint
} catch (Exception e) {
return false;
}
}
public static String escapeXml(String doco) {
if (doco == null)
return "";
StringBuilder b = new StringBuilder();
for (char c : doco.toCharArray()) {
if (c == '<')
b.append("<");
else if (c == '>')
b.append(">");
else if (c == '&')
b.append("&");
else if (c == '"')
b.append(""");
else
b.append(c);
}
return b.toString();
}
//
//
public static String capitalize(String s) {
if (s == null)
return null;
if (s.length() == 0)
return s;
if (s.length() == 1)
return s.toUpperCase();
return s.substring(0, 1).toUpperCase() + s.substring(1);
}
//
// public static void copyDirectory(String sourceFolder, String destFolder, FileNotifier notifier) throws IOException, FHIRException {
// CSFile src = new CSFile(sourceFolder);
// if (!src.exists())
// throw new FHIRException("Folder " +sourceFolder+" not found");
// createDirectory(destFolder);
//
// String[] files = src.list();
// for (String f : files) {
// if (new CSFile(sourceFolder+File.separator+f).isDirectory()) {
// if (!f.startsWith(".")) // ignore .svn...
// copyDirectory(sourceFolder+File.separator+f, destFolder+File.separator+f, notifier);
// } else {
// if (notifier != null)
// notifier.copyFile(sourceFolder+File.separator+f, destFolder+File.separator+f);
// copyFile(new CSFile(sourceFolder+File.separator+f), new CSFile(destFolder+File.separator+f));
// }
// }
// }
//
// public static void copyFile(String source, String dest) throws IOException {
// copyFile(new File(source), new File(dest));
// }
//
// public static void copyFile(File sourceFile, File destFile) throws IOException {
// if(!destFile.exists()) {
// if (!new CSFile(destFile.getParent()).exists()) {
// createDirectory(destFile.getParent());
// }
// destFile.createNewFile();
// }
//
// FileChannel source = null;
// FileChannel destination = null;
//
// try {
// source = new FileInputStream(sourceFile).getChannel();
// destination = new FileOutputStream(destFile).getChannel();
// destination.transferFrom(source, 0, source.size());
// }
// finally {
// if(source != null) {
// source.close();
// }
// if(destination != null) {
// destination.close();
// }
// }
// }
//
// public static boolean checkFolder(String dir, List<String> errors)
// throws IOException
// {
// if (!new CSFile(dir).exists()) {
// errors.add("Unable to find directory "+dir);
// return false;
// } else {
// return true;
// }
// }
//
// public static boolean checkFile(String purpose, String dir, String file, List<String> errors)
// throws IOException
// {
// if (!new CSFile(dir+file).exists()) {
// errors.add("Unable to find "+purpose+" file "+file+" in "+dir);
// return false;
// } else {
// return true;
// }
// }
//
// public static String asCSV(List<String> strings) {
// StringBuilder s = new StringBuilder();
// boolean first = true;
// for (String n : strings) {
// if (!first)
// s.append(",");
// s.append(n);
// first = false;
// }
// return s.toString();
// }
//
// public static String asHtmlBr(String prefix, List<String> strings) {
// StringBuilder s = new StringBuilder();
// boolean first = true;
// for (String n : strings) {
// if (!first)
// s.append("<br/>");
// s.append(prefix);
// s.append(n);
// first = false;
// }
// return s.toString();
// }
//
// public static void clearDirectory(String folder) throws IOException {
// File dir = new File(folder);
// if (dir.exists())
// FileUtils.cleanDirectory(dir);
//// String[] files = new CSFile(folder).list();
//// if (files != null) {
//// for (String f : files) {
//// File fh = new CSFile(folder+File.separatorChar+f);
//// if (fh.isDirectory())
//// clearDirectory(fh.getAbsolutePath());
//// fh.delete();
//// }
//// }
// }
//
// public static void createDirectory(String path) throws IOException{
// new CSFile(path).mkdirs();
// }
//
// public static String changeFileExt(String name, String ext) {
// if (name.lastIndexOf('.') > -1)
// return name.substring(0, name.lastIndexOf('.')) + ext;
// else
// return name+ext;
// }
//
// public static String cleanupTextString( String contents )
// {
// if( contents == null || contents.trim().equals("") )
// return null;
// else
// return contents.trim();
// }
//
//
public static boolean noString(String v) {
return v == null || v.equals("");
}
//
//
// public static byte[] saxonTransform(Map<String, byte[]> files, byte[] source, byte[] xslt) throws TransformerException {
// TransformerFactory f = new net.sf.saxon.TransformerFactoryImpl();
// f.setAttribute("http://saxon.sf.net/feature/version-warning", Boolean.FALSE);
// StreamSource xsrc = new StreamSource(new ByteArrayInputStream(xslt));
// f.setURIResolver(new ZipURIResolver(files));
// Transformer t = f.newTransformer(xsrc);
//
// t.setURIResolver(new ZipURIResolver(files));
// StreamSource src = new StreamSource(new ByteArrayInputStream(source));
// ByteArrayOutputStream out = new ByteArrayOutputStream();
// StreamResult res = new StreamResult(out);
// t.transform(src, res);
// return out.toByteArray();
// }
//
// public static byte[] transform(Map<String, byte[]> files, byte[] source, byte[] xslt) throws TransformerException {
// TransformerFactory f = TransformerFactory.newInstance();
// f.setAttribute("http://saxon.sf.net/feature/version-warning", Boolean.FALSE);
// StreamSource xsrc = new StreamSource(new ByteArrayInputStream(xslt));
// f.setURIResolver(new ZipURIResolver(files));
// Transformer t = f.newTransformer(xsrc);
//
// t.setURIResolver(new ZipURIResolver(files));
// StreamSource src = new StreamSource(new ByteArrayInputStream(source));
// ByteArrayOutputStream out = new ByteArrayOutputStream();
// StreamResult res = new StreamResult(out);
// t.transform(src, res);
// return out.toByteArray();
// }
//
// public static void bytesToFile(byte[] content, String filename) throws IOException {
// FileOutputStream out = new FileOutputStream(filename);
// out.write(content);
// out.close();
//
// }
//
// public static String saxonTransform(String source, String xslt) throws TransformerException, FileNotFoundException {
// TransformerFactoryImpl f = new net.sf.saxon.TransformerFactoryImpl();
// f.setAttribute("http://saxon.sf.net/feature/version-warning", Boolean.FALSE);
// StreamSource xsrc = new StreamSource(new FileInputStream(xslt));
// Transformer t = f.newTransformer(xsrc);
// StreamSource src = new StreamSource(new FileInputStream(source));
// StreamResult res = new StreamResult(new ByteArrayOutputStream());
// t.transform(src, res);
// return res.getOutputStream().toString();
// }
//
// public static void saxonTransform(String xsltDir, String source, String xslt, String dest, URIResolver alt) throws FileNotFoundException, TransformerException {
// saxonTransform(xsltDir, source, xslt, dest, alt, null);
// }
//
// public static void saxonTransform(String xsltDir, String source, String xslt, String dest, URIResolver alt, Map<String, String> params) throws FileNotFoundException, TransformerException {
// TransformerFactoryImpl f = new net.sf.saxon.TransformerFactoryImpl();
// f.setAttribute("http://saxon.sf.net/feature/version-warning", Boolean.FALSE);
// StreamSource xsrc = new StreamSource(new FileInputStream(xslt));
// f.setURIResolver(new MyURIResolver(xsltDir, alt));
// Transformer t = f.newTransformer(xsrc);
// if (params != null) {
// for (Map.Entry<String, String> entry : params.entrySet()) {
// t.setParameter(entry.getKey(), entry.getValue());
// }
// }
//
// t.setURIResolver(new MyURIResolver(xsltDir, alt));
// StreamSource src = new StreamSource(new FileInputStream(source));
// StreamResult res = new StreamResult(new FileOutputStream(dest));
// t.transform(src, res);
// }
//
// public static void transform(String xsltDir, String source, String xslt, String dest, URIResolver alt) throws FileNotFoundException, TransformerException {
//
// TransformerFactory f = TransformerFactory.newInstance();
// StreamSource xsrc = new StreamSource(new FileInputStream(xslt));
// f.setURIResolver(new MyURIResolver(xsltDir, alt));
// Transformer t = f.newTransformer(xsrc);
//
// t.setURIResolver(new MyURIResolver(xsltDir, alt));
// StreamSource src = new StreamSource(new FileInputStream(source));
// StreamResult res = new StreamResult(new FileOutputStream(dest));
// t.transform(src, res);
//
// }
//
//
public static String appendSlash(String definitions) {
return definitions.endsWith(File.separator) ? definitions : definitions + File.separator;
}
//
// public static String appendForwardSlash(String definitions) {
// return definitions.endsWith("/") ? definitions : definitions+"/";
// }
//
//
// public static String fileTitle(String file) {
// if (file == null)
// return null;
// String s = new File(file).getName();
// return s.indexOf(".") == -1? s : s.substring(0, s.indexOf("."));
// }
//
//
// public static String systemEol()
// {
// return System.getProperty("line.separator");
// }
//
public static String normaliseEolns(String value) {
return value.replace("\r\n", "\r").replace("\n", "\r").replace("\r", "\r\n");
}
//
//
// public static String unescapeXml(String xml) throws FHIRException {
// if (xml == null)
// return null;
//
// StringBuilder b = new StringBuilder();
// int i = 0;
// while (i < xml.length()) {
// if (xml.charAt(i) == '&') {
// StringBuilder e = new StringBuilder();
// i++;
// while (xml.charAt(i) != ';') {
// e.append(xml.charAt(i));
// i++;
// }
// if (e.toString().equals("lt"))
// b.append("<");
// else if (e.toString().equals("gt"))
// b.append(">");
// else if (e.toString().equals("amp"))
// b.append("&");
// else if (e.toString().equals("quot"))
// b.append("\"");
// else if (e.toString().equals("mu"))
// b.append((char)956);
// else
// throw new FHIRException("unknown XML entity \""+e.toString()+"\"");
// } else
// b.append(xml.charAt(i));
// i++;
// }
// return b.toString();
// }
//
//
//
//
// public static String padRight(String src, char c, int len) {
// StringBuilder s = new StringBuilder();
// s.append(src);
// for (int i = 0; i < len - src.length(); i++)
// s.append(c);
// return s.toString();
// }
//
//
public static String padLeft(String src, char c, int len) {
StringBuilder s = new StringBuilder();
for (int i = 0; i < len - src.length(); i++)
s.append(c);
s.append(src);
return s.toString();
}
//
//
public static String path(String... args) throws IOException {
StringBuilder s = new StringBuilder();
boolean d = false;
for (String arg : args) {
if (!d)
d = !noString(arg);
else if (!s.toString().endsWith(File.separator))
s.append(File.separator);
String a = arg;
a = a.replace("\\", File.separator);
if (s.length() > 0 && a.startsWith(File.separator))
a = a.substring(File.separator.length());
while (a.startsWith(".." + File.separator)) {
String p = s.toString().substring(0, s.length() - 1);
if (!p.contains(File.separator))
throw new IOException("illegal path underrun " + Arrays.asList(args));
s = new StringBuilder(p.substring(0, p.lastIndexOf(File.separator)) + File.separator);
a = a.substring(3);
}
if ("..".equals(a)) {
int i = s.substring(0, s.length() - 1).lastIndexOf(File.separator);
s = new StringBuilder(s.substring(0, i + 1));
} else
s.append(a);
}
return s.toString();
}
public static String pathReverse(String... args) {
StringBuilder s = new StringBuilder();
boolean d = false;
for (String arg : args) {
if (!d)
d = !noString(arg);
else if (!s.toString().endsWith("/"))
s.append("/");
s.append(arg);
}
return s.toString();
}
//
//
//
//// public static void checkCase(String filename) {
//// File f = new CSFile(filename);
//// if (!f.getName().equals(filename))
//// throw new FHIRException("Filename ")
////
//// }
//
// public static String nmtokenize(String cs) {
// StringBuilder s = new StringBuilder();
// for (int i = 0; i < cs.length(); i++) {
// char c = cs.charAt(i);
// if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '_')
// s.append(c);
// else if (c != ' ')
// s.append("."+Integer.toString(c));
// }
// return s.toString();
// }
//
//
// public static boolean isToken(String tail) {
// if (tail == null || tail.length() == 0)
// return false;
// boolean result = isAlphabetic(tail.charAt(0));
// for (int i = 1; i < tail.length(); i++) {
// result = result && (isAlphabetic(tail.charAt(i)) || isDigit(tail.charAt(i)) || (tail.charAt(i) == '_') || (tail.charAt(i) == '[') || (tail.charAt(i) == ']'));
// }
// return result;
// }
//
//
// private static boolean isDigit(char c) {
// return (c >= '0') && (c <= '9');
// }
//
//
// private static boolean isAlphabetic(char c) {
// return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
// }
//
//
// public static String getDirectoryForFile(String filepath) {
// File f = new File(filepath);
// return f.getParent();
// }
//
// public static String appendPeriod(String s) {
// if (Utilities.noString(s))
// return s;
// s = s.trim();
// if (s.endsWith(".") || s.endsWith("?"))
// return s;
// return s+".";
// }
//
//
// public static String removePeriod(String s) {
// if (Utilities.noString(s))
// return s;
// if (s.endsWith("."))
// return s.substring(0, s.length()-1);
// return s;
// }
//
//
// public static String stripBOM(String string) {
// return string.replace("\uFEFF", "");
// }
//
//
// public static String oidTail(String id) {
// if (id == null || !id.contains("."))
// return id;
// return id.substring(id.lastIndexOf(".")+1);
// }
//
//
// public static String oidRoot(String id) {
// if (id == null || !id.contains("."))
// return id;
// return id.substring(0, id.indexOf("."));
// }
//
public static String escapeJava(String doco) {
if (doco == null)
return "";
StringBuilder b = new StringBuilder();
for (char c : doco.toCharArray()) {
if (c == '\r')
b.append("\\r");
else if (c == '\n')
b.append("\\n");
else if (c == '"')
b.append("\\\"");
else if (c == '\\')
b.append("\\\\");
else
b.append(c);
}
return b.toString();
}
//
//
// public static String[] splitByCamelCase(String name) {
// List<String> parts = new ArrayList<String>();
// StringBuilder b = new StringBuilder();
// for (int i = 0; i < name.length(); i++) {
// if (i > 0 && Character.isUpperCase(name.charAt(i))) {
// parts.add(b.toString());
// b = new StringBuilder();
// }
// b.append(Character.toLowerCase(name.charAt(i)));
// }
// parts.add(b.toString());
// return parts.toArray(new String[] {} );
// }
//
//
// public static String encodeUri(String v) {
// return v.replace(" ", "%20").replace("?", "%3F").replace("=", "%3D");
// }
//
//
//
public static String normalize(String s) {
if (noString(s))
return null;
StringBuilder b = new StringBuilder();
boolean isWhitespace = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!Character.isWhitespace(c)) {
b.append(Character.toLowerCase(c));
isWhitespace = false;
} else if (!isWhitespace) {
b.append(' ');
isWhitespace = true;
}
}
return b.toString().trim();
}
//
// public static String normalizeSameCase(String s) {
// if (noString(s))
// return null;
// StringBuilder b = new StringBuilder();
// boolean isWhitespace = false;
// for (int i = 0; i < s.length(); i++) {
// char c = s.charAt(i);
// if (!Character.isWhitespace(c)) {
// b.append(c);
// isWhitespace = false;
// } else if (!isWhitespace) {
// b.append(' ');
// isWhitespace = true;
// }
// }
// return b.toString().trim();
// }
//
//
// public static void copyFileToDirectory(File source, File destDir) throws IOException {
// copyFile(source, new File(path(destDir.getAbsolutePath(), source.getName())));
// }
//
//
// public static boolean isWhitespace(String s) {
// boolean ok = true;
// for (int i = 0; i < s.length(); i++)
// ok = ok && Character.isWhitespace(s.charAt(i));
// return ok;
//
// }
//
//
// public static String URLEncode(String string) {
// try {
// return URLEncoder.encode(string, "UTF-8");
// } catch (UnsupportedEncodingException e) {
// throw new Error(e.getMessage());
// }
// }
//
//
public static boolean charInSet(char value, char... array) {
for (int i : array)
if (value == i)
return true;
return false;
}
//
//
// public static boolean charInRange(char ch, char a, char z) {
// return ch >= a && ch <= z;
// }
//
public static boolean existsInList(String value, String... array) {
if (value == null)
return false;
for (String s : array)
if (value.equals(s))
return true;
return false;
}
public static boolean existsInList(int value, int... array) {
for (int i : array)
if (value == i)
return true;
return false;
}
public static boolean existsInListNC(String value, String... array) {
for (String s : array)
if (value.equalsIgnoreCase(s))
return true;
return false;
}
//
//
// public static String getFileNameForName(String name) {
// return name.toLowerCase();
// }
//
// public static void deleteTempFiles() throws IOException {
// File file = createTempFile("test", "test");
// String folder = getDirectoryForFile(file.getAbsolutePath());
// String[] list = new File(folder).list(new FilenameFilter() {
// public boolean accept(File dir, String name) {
// return name.startsWith("ohfu-");
// }
// });
// if (list != null) {
// for (String n : list) {
// new File(path(folder, n)).delete();
// }
// }
// }
//
// public static File createTempFile(String prefix, String suffix) throws IOException {
// // this allows use to eaily identify all our dtemp files and delete them, since delete on Exit doesn't really work.
// File file = File.createTempFile("ohfu-"+prefix, suffix);
// file.deleteOnExit();
// return file;
// }
//
//
// public static boolean isAsciiChar(char ch) {
// return ch >= ' ' && ch <= '~';
// }
//
//
// public static String makeUuidUrn() {
// return "urn:uuid:"+UUID.randomUUID().toString().toLowerCase();
// }
//
public static boolean isURL(String s) {
boolean ok = s.matches("^http(s{0,1})://[a-zA-Z0-9_/\\-\\.]+\\.([A-Za-z/]{2,5})[a-zA-Z0-9_/\\&\\?\\=\\-\\.\\~\\%]*");
return ok;
}
//
//
// public static String escapeJson(String value) {
// if (value == null)
// return "";
//
// StringBuilder b = new StringBuilder();
// for (char c : value.toCharArray()) {
// if (c == '\r')
// b.append("\\r");
// else if (c == '\n')
// b.append("\\n");
// else if (c == '"')
// b.append("\\\"");
// else if (c == '\'')
// b.append("\\'");
// else if (c == '\\')
// b.append("\\\\");
// else
// b.append(c);
// }
// return b.toString();
// }
//
// public static String humanize(String code) {
// StringBuilder b = new StringBuilder();
// boolean lastBreak = true;
// for (char c : code.toCharArray()) {
// if (Character.isLetter(c)) {
// if (lastBreak)
// b.append(Character.toUpperCase(c));
// else {
// if (Character.isUpperCase(c))
// b.append(" ");
// b.append(c);
// }
// lastBreak = false;
// } else {
// b.append(" ");
// lastBreak = true;
// }
// }
// if (b.length() == 0)
// return code;
// else
// return b.toString();
// }
//
//
public static String uncapitalize(String s) {
if (s == null)
return null;
if (s.length() == 0)
return s;
if (s.length() == 1)
return s.toLowerCase();
return s.substring(0, 1).toLowerCase() + s.substring(1);
}
public static int charCount(String s, char c) {
int res = 0;
for (char ch : s.toCharArray())
if (ch == c)
res++;
return res;
}
//
// // http://stackoverflow.com/questions/3780406/how-to-play-a-sound-alert-in-a-java-application
// public static float SAMPLE_RATE = 8000f;
//
// public static void tone(int hz, int msecs) {
// tone(hz, msecs, 1.0);
// }
//
// public static void tone(int hz, int msecs, double vol) {
// try {
// byte[] buf = new byte[1];
// AudioFormat af =
// new AudioFormat(
// SAMPLE_RATE, // sampleRate
// 8, // sampleSizeInBits
// 1, // channels
// true, // signed
// false); // bigEndian
// SourceDataLine sdl;
// sdl = AudioSystem.getSourceDataLine(af);
// sdl.open(af);
// sdl.start();
// for (int i=0; i < msecs*8; i++) {
// double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
// buf[0] = (byte)(Math.sin(angle) * 127.0 * vol);
// sdl.write(buf,0,1);
// }
// sdl.drain();
// sdl.stop();
// sdl.close();
// } catch (Exception e) {
// }
// }
//
//
// public static boolean isOid(String cc) {
// return cc.matches(OID_REGEX) && cc.lastIndexOf('.') > 5;
// }
//
//
// public static boolean equals(String one, String two) {
// if (one == null && two == null)
// return true;
// if (one == null || two == null)
// return false;
// return one.equals(two);
// }
//
//
// public static void deleteAllFiles(String folder, String type) {
// File src = new File(folder);
// String[] files = src.list();
// for (String f : files) {
// if (new File(folder+File.separator+f).isDirectory()) {
// deleteAllFiles(folder+File.separator+f, type);
// } else if (f.endsWith(type)) {
// new File(folder+File.separator+f).delete();
// }
// }
//
// }
//
// public static boolean compareIgnoreWhitespace(File f1, File f2) throws IOException {
// InputStream in1 = null;
// InputStream in2 = null;
// try {
// in1 = new BufferedInputStream(new FileInputStream(f1));
// in2 = new BufferedInputStream(new FileInputStream(f2));
//
// int expectedByte = in1.read();
// while (expectedByte != -1) {
// boolean w1 = isWhitespace(expectedByte);
// if (w1)
// while (isWhitespace(expectedByte))
// expectedByte = in1.read();
// int foundByte = in2.read();
// if (w1) {
// if (!isWhitespace(foundByte))
// return false;
// while (isWhitespace(foundByte))
// foundByte = in2.read();
// }
// if (expectedByte != foundByte)
// return false;
// expectedByte = in1.read();
// }
// if (in2.read() != -1) {
// return false;
// }
// return true;
// } finally {
// if (in1 != null) {
// try {
// in1.close();
// } catch (IOException e) {}
// }
// if (in2 != null) {
// try {
// in2.close();
// } catch (IOException e) {}
// }
// }
// }
//
// private static boolean isWhitespace(int b) {
// return b == 9 || b == 10 || b == 13 || b == 32;
// }
//
//
// public static boolean compareIgnoreWhitespace(String fn1, String fn2) throws IOException {
// return compareIgnoreWhitespace(new File(fn1), new File(fn2));
// }
//
//
public static boolean isAbsoluteUrl(String ref) {
// FIXME null access on ref cause by OR clause.
return ref != null && ref.startsWith("http:") || ref.startsWith("https:") || ref.startsWith("urn:uuid:") || ref.startsWith("urn:oid:");
}
public static boolean equivalent(String l, String r) {
if (Utilities.noString(l) && Utilities.noString(r))
return true;
if (Utilities.noString(l) || Utilities.noString(r))
return false;
return l.toLowerCase().equals(r.toLowerCase());
}
public static boolean equivalentNumber(String l, String r) {
if (Utilities.noString(l) && Utilities.noString(r))
return true;
if (Utilities.noString(l) || Utilities.noString(r))
return false;
l = l.toLowerCase().trim();
r = r.toLowerCase().trim(); // not that this should make any difference
return l.startsWith(r) || r.startsWith(l);
}
//
//
// public static String getFileExtension(String fn) {
// return fn.contains(".") ? fn.substring(fn.lastIndexOf(".")+1) : "";
// }
//
//
// public static String unCamelCase(String name) {
// StringBuilder b = new StringBuilder();
// boolean first = true;
// for (char c : name.toCharArray()) {
// if (Character.isUpperCase(c)) {
// if (!first)
// b.append(" ");
// b.append(Character.toLowerCase(c));
// } else
// b.append(c);
// first = false;
// }
// return b.toString();
// }
//
//
// public static boolean isAbsoluteFileName(String source) {
// if (isWindows())
// return (source.length() > 2 && source.charAt(1) == ':') || source.startsWith("\\\\");
// else
// return source.startsWith("//");
// }
//
//
// private static boolean isWindows() {
// return System.getProperty("os.name").startsWith("Windows");
// }
//
//
}