package de.skuzzle.polly.core.internal.formatting;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import de.skuzzle.polly.core.parser.util.TimeSpanFormat;
import de.skuzzle.polly.sdk.Configuration;
import de.skuzzle.polly.sdk.FormatManager;
/* Note: This class is subject to ISSUE: 0000001 */
/**
* @author Simon
*/
public class FormatManagerImpl implements FormatManager {
private final static long KILO_BYTE = 1L << 10L;
private final static long MEGA_BYTE = 1L << 20L;
private DateFormat defaultDateFormat;
private NumberFormat defaultNumberFormat;
public FormatManagerImpl(Configuration cfg) {
this.defaultDateFormat = new SimpleDateFormat(
cfg.readString(Configuration.DATE_FORMAT));
/*
* ISSUE: 0000019
*/
this.defaultDateFormat.setTimeZone(TimeZone.getTimeZone("ECT")); //$NON-NLS-1$
DecimalFormat nf = (DecimalFormat) DecimalFormat.getInstance(Locale.ENGLISH);
nf.applyPattern(cfg.readString(Configuration.NUMBER_FORMAT));
this.defaultNumberFormat = nf;
}
@Override
public synchronized String formatNumber(double number) {
return this.defaultNumberFormat.format(number);
}
@Override
public synchronized String formatDate(Date date) {
if (date == null) {
return "Unknown"; //$NON-NLS-1$
}
return this.defaultDateFormat.format(date);
}
@Override
public String formatDate(long timestamp) {
return this.formatDate(new Date(timestamp));
}
public synchronized DateFormat getDefaultDateFormat() {
return (DateFormat) this.defaultDateFormat.clone();
}
public synchronized NumberFormat getDefaultNumberFormat() {
return (NumberFormat) this.defaultNumberFormat.clone();
}
@Override
public String formatTimeSpan(long seconds) {
return new TimeSpanFormat(true).format(seconds);
}
@Override
public String formatTimeSpanMs(long ms) {
return this.formatTimeSpan(ms / 1000);
}
@Override
public String formatBytes(long bytes) {
if (bytes > MEGA_BYTE) {
long mb = bytes / MEGA_BYTE;
return mb + "MB " + this.formatBytes(bytes % MEGA_BYTE); //$NON-NLS-1$
} else if (bytes > KILO_BYTE) {
long kb = bytes / KILO_BYTE;
return kb + "KB " + this.formatBytes(bytes % KILO_BYTE); //$NON-NLS-1$
}
return bytes + "B"; //$NON-NLS-1$
}
}