/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* 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:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer.column;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import org.eclipse.nebula.widgets.xviewer.Activator;
import org.eclipse.nebula.widgets.xviewer.IXViewerLabelProvider;
import org.eclipse.nebula.widgets.xviewer.XViewerComputedColumn;
import org.eclipse.nebula.widgets.xviewer.XViewerSorter;
import org.eclipse.nebula.widgets.xviewer.XViewerText;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerAlign;
import org.eclipse.nebula.widgets.xviewer.core.model.SortDataType;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
import org.eclipse.nebula.widgets.xviewer.util.internal.XViewerLib;
import org.eclipse.nebula.widgets.xviewer.util.internal.XViewerLog;
/**
* @author Donald G. Dunne
*/
public class XViewerDaysTillTodayColumn extends XViewerComputedColumn {
private final static String ID = "ats.computed.daysTillToday"; //$NON-NLS-1$
public XViewerDaysTillTodayColumn() {
this(ID);
}
private XViewerDaysTillTodayColumn(String id) {
super(id, XViewerText.get("column.daysTillToday.name"), 30, XViewerAlign.Left, false, SortDataType.Integer, false, //$NON-NLS-1$
XViewerText.get("column.daysTillToday.description")); //$NON-NLS-1$
}
@Override
public String getColumnText(Object element, XViewerColumn column, int columnIndex) {
if (sourceXViewerColumn == null) {
return String.format(XViewerText.get("error.no_source_column"), id); //$NON-NLS-1$
}
try {
int sourceColumnNum = xViewer.getCustomizeMgr().getColumnNumFromXViewerColumn(sourceXViewerColumn);
String dateStr = ((IXViewerLabelProvider) xViewer.getLabelProvider()).getColumnText(element, sourceColumnNum);
if (dateStr == null || dateStr.equals("")) { //$NON-NLS-1$
return ""; //$NON-NLS-1$
}
DateFormat format;
if (dateStr.length() == 10) {
format = XViewerSorter.format10;
} else {
format = new SimpleDateFormat();
}
Date date1Date = null;
try {
date1Date = format.parse(dateStr);
} catch (ParseException ex) {
try {
date1Date = DateFormat.getInstance().parse(dateStr);
} catch (ParseException ex2) {
XViewerLog.log(Activator.class, Level.SEVERE, ex2);
}
}
if (date1Date == null) {
return "Can't parse date"; //$NON-NLS-1$
}
return String.valueOf(XViewerLib.daysTillToday(date1Date));
} catch (Exception ex) {
return ex.getLocalizedMessage();
}
}
@Override
public boolean isApplicableFor(XViewerColumn xViewerColumn) {
return xViewerColumn.getSortDataType() == SortDataType.Date;
}
@Override
public String getName() {
if (sourceXViewerColumn == null) {
return XViewerText.get("column.daysTillToday.name"); //$NON-NLS-1$
}
return XViewerText.get("column.daysTillToday.name2") + " " + sourceXViewerColumn.getName(); //$NON-NLS-1$//$NON-NLS-2$
}
@Override
public XViewerDaysTillTodayColumn copy() {
XViewerDaysTillTodayColumn col = new XViewerDaysTillTodayColumn();
col.setXViewer(getXViewer());
col.setSourceXViewerColumn(getSourceXViewerColumn());
return col;
}
@Override
public String getId() {
if (sourceXViewerColumn == null) {
return ID;
}
return ID + "(" + sourceXViewerColumn.getId() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public boolean isApplicableFor(String storedId) {
return storedId.startsWith(ID);
}
@Override
public XViewerComputedColumn createFromStored(XViewerColumn storedColumn) {
return new XViewerDaysTillTodayColumn(storedColumn.getId());
}
}