/*******************************************************************************
* 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 org.eclipse.nebula.widgets.xviewer.IXViewerLabelProvider;
import org.eclipse.nebula.widgets.xviewer.XViewerComputedColumn;
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;
/**
* Show if cells from two columns (selected and one to right) are different.
*
* @author Donald G. Dunne
*/
public class XViewerDiffsBetweenColumnsColumn extends XViewerComputedColumn {
private final static String ID = "ats.computed.diffsBetweenColumns"; //$NON-NLS-1$
public XViewerDiffsBetweenColumnsColumn() {
this(ID);
}
private XViewerDiffsBetweenColumnsColumn(String id) {
super(id, XViewerText.get("column.diffsBetweenColumns.name"), 30, XViewerAlign.Left, false, SortDataType.String, //$NON-NLS-1$
false,
XViewerText.get("column.diffsBetweenColumns.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 sourceColumnStr =
((IXViewerLabelProvider) xViewer.getLabelProvider()).getColumnText(element, sourceColumnNum);
int nextColumnNum = sourceColumnNum + 1;
String nextColumnStr =
((IXViewerLabelProvider) xViewer.getLabelProvider()).getColumnText(element, nextColumnNum);
if (sourceColumnStr == null && nextColumnStr == null) {
return XViewerText.get("same"); //$NON-NLS-1$
} else if (sourceColumnStr == null) {
return XViewerText.get("different") + " - " + XViewerText.get("column.diffsBetweenColumns.leftNull"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else if (nextColumnStr == null) {
return XViewerText.get("different") + " - " + XViewerText.get("column.diffsBetweenColumns.rightNull"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
return (sourceColumnStr.equals(nextColumnStr)) ? XViewerText.get("same") : String.format( //$NON-NLS-1$
XViewerText.get("different") + " [%s][%s]", sourceColumnStr, //$NON-NLS-1$ //$NON-NLS-2$
nextColumnStr);
} catch (Exception ex) {
return ex.getLocalizedMessage();
}
}
@Override
public boolean isApplicableFor(XViewerColumn xViewerColumn) {
return true;
}
@Override
public String getName() {
if (sourceXViewerColumn == null) {
return XViewerText.get("column.diffsBetweenColumns.name"); //$NON-NLS-1$
}
return String.format(XViewerText.get("column.diffsBetweenColumns.name2"), sourceXViewerColumn.getName()); //$NON-NLS-1$
}
@Override
public XViewerDiffsBetweenColumnsColumn copy() {
XViewerDiffsBetweenColumnsColumn col = new XViewerDiffsBetweenColumnsColumn();
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 XViewerDiffsBetweenColumnsColumn(storedColumn.getId());
}
}