/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.ui.internal.markets;
import java.text.DateFormat;
import java.util.Calendar;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipsetrader.core.markets.IMarket;
import org.eclipsetrader.core.markets.IMarketDay;
public class MarketLabelProvider extends LabelProvider implements ITableLabelProvider, IColorProvider {
private Image marketImage;
private Color closedColor = Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
public MarketLabelProvider() {
}
public MarketLabelProvider(Image marketImage) {
this.marketImage = marketImage;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
@Override
public Image getColumnImage(Object element, int columnIndex) {
if (columnIndex == 0) {
if (element instanceof IMarket) {
return marketImage;
}
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
return getColumnText(element, 0);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
@Override
public String getColumnText(Object element, int columnIndex) {
if (element instanceof IMarket) {
IMarket market = (IMarket) element;
switch (columnIndex) {
case 0:
return market.getName();
case 1: {
IMarketDay day = market.getToday();
if (day.isOpen()) {
return day.getMessage() != null ? day.getMessage() : Messages.MarketLabelProvider_Open;
}
else {
if (day.getMessage() != null) {
return NLS.bind(Messages.MarketLabelProvider_ClosedFor, new Object[] {
day.getMessage()
});
}
else {
return Messages.MarketLabelProvider_Closed;
}
}
}
case 2: {
Calendar now = Calendar.getInstance();
IMarketDay day = market.getToday();
if (day.isOpen()) {
long secondsToClose = (day.getCloseTime().getTime() - now.getTimeInMillis()) / 1000;
if (secondsToClose < 60) {
return Messages.MarketLabelProvider_ClosesInLessThanOneMinute;
}
else {
long minutesToClose = secondsToClose / 60 + 1;
if (minutesToClose < 60) {
return NLS.bind(Messages.MarketLabelProvider_ClosesInMinutes, new Object[] {
minutesToClose
});
}
else {
return NLS.bind(Messages.MarketLabelProvider_ClosesInHours, new Object[] {
minutesToClose / 60,
minutesToClose % 60
});
}
}
}
else {
Calendar midnight = Calendar.getInstance();
midnight.set(Calendar.HOUR_OF_DAY, 0);
midnight.set(Calendar.MINUTE, 0);
midnight.set(Calendar.SECOND, 0);
midnight.set(Calendar.MILLISECOND, 0);
midnight.add(Calendar.DATE, 1);
day = market.getNextDay();
if (day != null && day.getOpenTime() != null) {
long secondsToNextOpen = (day.getOpenTime().getTime() - now.getTimeInMillis()) / 1000;
if (secondsToNextOpen < 60) {
return Messages.MarketLabelProvider_OpenInLessThanOneMinute;
}
else {
long minutesToNextOpen = secondsToNextOpen / 60 + 1;
if (minutesToNextOpen < 60) {
return NLS.bind(Messages.MarketLabelProvider_OpensInMinutes, new Object[] {
minutesToNextOpen
});
}
else if (day.getOpenTime().before(midnight.getTime()) && minutesToNextOpen < 1440) {
return NLS.bind(Messages.MarketLabelProvider_OpensInHours, new Object[] {
minutesToNextOpen / 60,
minutesToNextOpen % 60
});
}
else {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG); // Util.getDateFormat();
DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
return NLS.bind(Messages.MarketLabelProvider_OpenDate, new Object[] {
dateFormat.format(day.getOpenTime()),
timeFormat.format(day.getOpenTime()),
});
}
}
}
}
}
}
}
return ""; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
*/
@Override
public Color getBackground(Object element) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
*/
@Override
public Color getForeground(Object element) {
if (element instanceof IMarket) {
if (!((IMarket) element).isOpen()) {
return closedColor;
}
}
return null;
}
}