package fi.arcusys.koku.util;
import static fi.arcusys.koku.util.Constants.DATE;
import static fi.arcusys.koku.util.Constants.DATE_FORMAT;
import static fi.arcusys.koku.util.Constants.TIME_ZONE;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import fi.arcusys.koku.kv.messageservice.FolderType;
/**
* Utilities used in the message portlet
* @author Jinhua Chen
* Aug 4, 2011
*/
public final class MessageUtil {
private MessageUtil() {
// prevents calls from subclass
throw new UnsupportedOperationException();
}
private static final Locale locale = new Locale("fi", "FI");
private static DatatypeFactory datatypeFactory = null;
static {
try {
datatypeFactory = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException dce) {
throw new IllegalStateException("Cannot instantiate DatatypeFactory!", dce);
}
}
/**
* Returns default locale
*
* FIXME: For now this will return only Finnish locale.
*
* @return Locale
*/
public static Locale getLocale() {
return locale;
}
/**
* Gets the message folder type converting from message type
* @param messageType
* @return FolderType, default is FolderType.INBOX
*/
public static FolderType getFolderType(String messageType) {
if(messageType.equals("msg_inbox")) {
return FolderType.INBOX;
}else if(messageType.equals("msg_outbox")) {
return FolderType.OUTBOX;
}else if(messageType.equals("msg_archive_inbox")) {
return FolderType.ARCHIVE_INBOX;
}else if(messageType.equals("msg_archive_outbox")) {
return FolderType.ARCHIVE_OUTBOX;
}else {
return FolderType.INBOX;
}
}
/**
* Gets the message type converting from folder type
* @param folderType
* @return Message type, default is inbox
*/
public static String getMessageType(FolderType folderType) {
if(folderType.equals(FolderType.INBOX)) {
return "inbox";
}else if(folderType.equals(FolderType.OUTBOX)) {
return "outbox";
}else if(folderType.equals(FolderType.ARCHIVE_INBOX)) {
return "archive_inbox";
}else if(folderType.equals(FolderType.ARCHIVE_OUTBOX)) {
return "archive_outbox";
}else {
return "inbox";
}
}
/**
* Formats the date with given format and Helsinki timezone
* @param xmlGregorianCalendar
* @return formatted date string with time
*/
public static String formatTaskDate(XMLGregorianCalendar xmlGregorianCalendar) {
if(xmlGregorianCalendar != null ) {
Calendar cal = xmlGregorianCalendar.toGregorianCalendar();
SimpleDateFormat dateformat = new SimpleDateFormat(DATE_FORMAT);
dateformat.setTimeZone(TimeZone.getTimeZone(TIME_ZONE));
return dateformat.format(cal.getTime());
} else {
return "";
}
}
/**
* Formats the date in day
* @param xmlGregorianCalendar
* @return formatted date string
*/
public static String formatTaskDateByDay(XMLGregorianCalendar xmlGregorianCalendar) {
return formatDateByString(xmlGregorianCalendar, DATE);
}
/**
* Formats the date with given format with given format string
* @param xmlGregorianCalendar
* @param formatString
* @return formatted date string
*/
public static String formatDateByString(XMLGregorianCalendar xmlGregorianCalendar, String formatString) {
return formatDateByString(xmlGregorianCalendar, formatString, TimeZone.getTimeZone(TIME_ZONE));
}
/**
* Formats the date with given format with given format string
* @param xmlGregorianCalendar
* @param formatString
* @param timeZone
* @return formatted date string
*/
public static String formatDateByString(XMLGregorianCalendar xmlGregorianCalendar, String formatString, TimeZone timeZone) {
if(xmlGregorianCalendar != null ) {
Calendar cal = xmlGregorianCalendar.toGregorianCalendar();
SimpleDateFormat dateformat = new SimpleDateFormat(formatString);
dateformat.setTimeZone(timeZone);
// dateformat.setTimeZone(TimeZone.getTimeZone("GMT+3:00"));
return dateformat.format(cal.getTime());
} else {
return "";
}
}
/**
* Formats a list of string to string
* @param recipients a list of string
* @return recipients string
*/
public static String formatRecipients(List<String> recipients) {
final StringBuilder result = new StringBuilder();
for (final String recipient : recipients) {
final String user = recipient.trim();
if (!user.isEmpty()) {
result.append(user).append(", ");
}
}
if (result.length() > 0) {
result.setLength(result.length() - 2);
}
return result.toString();
}
/**
* Converts Date object to XMLGregorianCalendar
*
* @param date
* @return {@link XMLGregorianCalendar}
*/
public static XMLGregorianCalendar convertDateToXMLGregorianCalendar(java.util.Date date) {
if (date == null) {
return null;
} else {
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeInMillis(date.getTime());
return datatypeFactory.newXMLGregorianCalendar(gc);
}
}
}