/*
* Copyright 2010 Research Studios Austria Forschungsgesellschaft mBH
*
* This file is part of easyrec.
*
* easyrec is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* easyrec is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with easyrec. If not, see <http://www.gnu.org/licenses/>.
*/
package org.easyrec.utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* This class contains methods for String parsing, Date functions and a
* website-->string procedure.
*
* @author phlavac
*/
public class MyUtils {
public static final String[] MONTH_NAMES = {"January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"};
public static final int CURRENT_MONTH = Calendar.getInstance().get(Calendar.MONTH) + 1;
@SuppressWarnings({"UnusedDeclaration"})
public static final int CURRENT_DAY_OF_MONTH = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
@SuppressWarnings({"UnusedDeclaration"})
public static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
@SuppressWarnings({"UnusedDeclaration"})
public static final String CURRENT_MONTH_NAME = MONTH_NAMES[CURRENT_MONTH - 1];
private final static Log logger = LogFactory.getLog(MyUtils.class);
/**
* This function always returns the size of a list; no
* matter if it is null, 0 or >0.
*/
public static Integer sizeOf(List<?> l) {
return l != null ? l.size() : 0;
}
/**
* This function always returns an int. In case of an
* conversion error def is returned.
*/
@SuppressWarnings({"UnusedDeclaration"})
public static Integer valueOf(String s, int def) {
try {
return Integer.valueOf(s);
} catch (Exception e) {
return def;
}
}
public static String getCurrentMonthName() {
return MONTH_NAMES[getCurrentMonth() - 1];
}
/**
* @return the Current Month as Integer (January = 1; December = 12)
*/
public static Integer getCurrentMonth() {
return Calendar.getInstance().get(Calendar.MONTH) + 1;
}
/**
* @return the Current Year
*/
public static Integer getCurrentYear() {
return Calendar.getInstance().get(Calendar.YEAR);
}
/**
* This function sorts the Strings in the
* given list by their first occurence in the given text.
*
* @param listToOrder e.g. FORMULA_1_DRIVERS = {"Lewis Hamilton","Heikki Kovalainen","Felipe Massa"}
* @param textToParse e.g. "Felipe Masse is on fire. His is ahead of Lewis Hamilton"
* @param fuzzy: tokenize Strings and ordery by their occurence e.g. "Lewis Hamilton" --> {"Lewis","Hamilton"}
* @return {"Felipe Massa","Lewis Hamilton"}
*/
@SuppressWarnings({"UnusedDeclaration"})
public static List<String> orderByFirstOccurenceInText(String listToOrder[], String textToParse, boolean fuzzy) {
List<String> sortedList = new ArrayList<String>();
HashMap<Integer, String> h = new HashMap<Integer, String>();
if (listToOrder != null && !textToParse.equals("")) {
for (String s : listToOrder) {
if (textToParse.indexOf(s) > 0) {
h.put(textToParse.indexOf(s), s);
}
}
List<Integer> keys = new ArrayList<Integer>(h.keySet());
Collections.sort(keys);
for (Integer k : keys) {
sortedList.add(h.get(k));
}
}
if (fuzzy) {
sortedList.addAll(orderByFuzzyFirstOccurenceInText(listToOrder, textToParse));
}
return sortedList;
}
/**
* This function sorts the Strings in the given list by their first
* occurrence in the given text. The Strings in the list are tokenized
* e.g. "red bull" is split in "red" and "bull" those tokens are
* matched by their first occurrence in the text.
*/
public static List<String> orderByFuzzyFirstOccurenceInText(String listToOrder[], String textToParse) {
List<String> sortedList = new ArrayList<String>();
HashMap<Integer, String> h = new HashMap<Integer, String>();
if (listToOrder != null && !textToParse.equals("")) {
for (String stringTokens : listToOrder) {
String[] tokens = stringTokens.split(" ");
for (String token : tokens) {
if (textToParse.indexOf(token) > 0 && token.length() > 3) {
h.put(textToParse.indexOf(token), token);
}
}
}
List<Integer> keys = new ArrayList<Integer>(h.keySet());
Collections.sort(keys);
for (Integer k : keys) {
sortedList.add(h.get(k));
}
}
return sortedList;
}
public static String loadWebsiteHtmlCode(String url) {
return loadWebsiteHtmlCode(url, null);
}
/**
* This function loads a Webpage into a string (like view source in a browser).
*/
public static String loadWebsiteHtmlCode(String url, String useragent) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet getMethod = new HttpGet(url);
String htmlCode = "";
if (useragent != null) {
getMethod.setHeader("user-agent", useragent);
}
try {
HttpResponse resp = httpClient.execute(getMethod);
int statusCode = resp.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
logger.debug("Method failed!" + statusCode);
}
// Read the response body.
htmlCode = EntityUtils.toString(resp.getEntity());
} catch (Exception e) {
logger.debug("Fatal protocol violation: " + e.getMessage());
logger.trace(e);
}
return htmlCode;
}
/**
* This function trie to parse a date given as string and returns a date if
* successfull.
*/
public static Date dateFormatCheck(String dateString, SimpleDateFormat dateFormatter) {
try {
Date date = dateFormatter.parse(dateString, new ParsePosition(0));
Calendar c = Calendar.getInstance();
c.setTime(date);
// mysql specific: cannot handle Dates with Years > 9999
if (c.get(Calendar.YEAR) < 10000) {
return date;
} else {
return null;
}
} catch (Exception e) {
return null;
}
}
}