Skip to content

Commit

Permalink
bug[TW25783]: Fix Filter DateTime Column
Browse files Browse the repository at this point in the history
Change-Id: I88e37a6ff8a89fdbaf6a8062327e983e540450b8
  • Loading branch information
vaibhavypatel committed Apr 5, 2024
1 parent 44150cc commit b3617d6
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 65 deletions.
Original file line number Diff line number Diff line change
@@ -1,40 +1,55 @@
package org.eclipse.nebula.widgets.xviewer;

import java.util.Date;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;

/**
* @author Juergen Reichl
*/
public interface IXViewerLabelProvider {

/**
* Returns the label text for the given column of the given element.
*/
public abstract String getColumnText(Object element, int columnIndex);

/**
* Returns the label text for the given column of the given element.
*/
public abstract String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws Exception;

/**
* Returns XViewerColumn of the given index
*/
public abstract XViewerColumn getTreeColumnOffIndex(int columnIndex);

/**
* Return value between 0..100 and cell will show bar graph shading that portion of the cell
*/
public abstract int getColumnGradient(Object element, XViewerColumn xCol, int columnIndex) throws Exception;

/**
* Returns the backing data object for operations like sorting
*/
public abstract Object getBackingData(Object element, XViewerColumn xViewerColumn, int columnIndex) throws Exception;

/**
* When columns get re-ordered, need to clear out this cache so indexing can be re-computed
*/
public abstract void clearXViewerColumnIndexCache();

/**
* Returns the label text for the given column of the given element.
*/
public abstract String getColumnText(Object element, int columnIndex);

/**
* Returns the label date for the given column of the given element.
*/
public default Date getColumnDate(Object element, int columnIndex) {
return null;
};

/**
* Returns the label text for the given column of the given element.
*/
public abstract String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws Exception;

/**
* Returns the label date for the given column of the given element.
*/
public default Date getColumnDate(Object element, XViewerColumn xCol, int columnIndex) throws Exception {
return null;
};

/**
* Returns XViewerColumn of the given index
*/
public abstract XViewerColumn getTreeColumnOffIndex(int columnIndex);

/**
* Return value between 0..100 and cell will show bar graph shading that portion of the cell
*/
public abstract int getColumnGradient(Object element, XViewerColumn xCol, int columnIndex) throws Exception;

/**
* Returns the backing data object for operations like sorting
*/
public abstract Object getBackingData(Object element, XViewerColumn xViewerColumn, int columnIndex) throws Exception;

/**
* When columns get re-ordered, need to clear out this cache so indexing can be re-computed
*/
public abstract void clearXViewerColumnIndexCache();

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/
package org.eclipse.nebula.widgets.xviewer;

import java.util.Date;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
import org.eclipse.nebula.widgets.xviewer.util.XViewerException;
Expand All @@ -18,6 +19,10 @@ public interface IXViewerValueColumn {

String getColumnText(Object element, XViewerColumn column, int columnIndex) throws XViewerException;

default Date getColumnDate(Object element, XViewerColumn column, int columnIndex) {
return null;
};

/**
* Returns the backing data object for operations like sorting
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -801,6 +801,10 @@ public String getColumnText(Object element, int col) {
return ((IXViewerLabelProvider) getLabelProvider()).getColumnText(element, col);
}

public Date getColumnDate(Object element, int col) {
return ((IXViewerLabelProvider) getLabelProvider()).getColumnDate(element, col);
}

/**
* Mouse clicks can happen in table via XViewerMouseListener or in menu area via XViewerMenuDetectListener. Both are
* processed here to use in UI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.logging.Level;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
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.XViewerLog;
import org.eclipse.swt.graphics.Color;
Expand Down Expand Up @@ -118,7 +119,36 @@ public String getColumnText(Object element, int columnIndex) {
}
}

public static String getPrecomputedText(Object element, XViewerColumn xViewerColumn, IXViewerPreComputedColumn preComputedColumn, boolean debugLoading) {
@Override
public Date getColumnDate(Object element, int columnIndex) {
try {
XViewerColumn xViewerColumn = getTreeColumnOffIndex(columnIndex);
// First check value column's methods
if (xViewerColumn instanceof IXViewerValueColumn) {
if (xViewerColumn.getSortDataType() == SortDataType.Date) {
Long startTime = viewer.isDebugLoading() ? (new Date()).getTime() : 0L;
IXViewerValueColumn xViewerValueColumn = (IXViewerValueColumn) xViewerColumn;
if (viewer.isDebugLoading()) {
xViewerColumn.addElapsedTime((new Date()).getTime() - startTime);
}
return xViewerValueColumn.getColumnDate(element, xViewerColumn, columnIndex);
}
}
// Return label provider's value
Long startTime = viewer.isDebugLoading() ? (new Date()).getTime() : 0L;
Date value = getColumnDate(element, xViewerColumn, columnIndex);
if (viewer.isDebugLoading()) {
xViewerColumn.addElapsedTime((new Date()).getTime() - startTime);
}
return value;
} catch (Exception ex) {
// do nothing
}
return null;
}

public static String getPrecomputedText(Object element, XViewerColumn xViewerColumn,
IXViewerPreComputedColumn preComputedColumn, boolean debugLoading) {
Long key = preComputedColumn.getKey(element);
String cachedValue = xViewerColumn.getPreComputedValue(key);
Long startTime = debugLoading ? (new Date()).getTime() : 0L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -131,38 +130,30 @@ public boolean select(Viewer viewer, Object parentElement, Object element) {
}
}
if (colIdToDateFilter.containsKey(xCol.getId())) {
String cellStr =
xViewer.getColumnText(element, xViewer.getCustomizeMgr().getColumnNumFromXViewerColumn(xCol));
if (Strings.isValid(cellStr)) {
Date cellDate = XViewerSorter.parseDatePair(cellStr, "").getFirst();
if (cellDate != null) {
ColumnDateFilter columnDateFilter = colIdToDateFilter.get(xCol.getId());
Calendar cellCal = Calendar.getInstance();
cellCal.setTime(cellDate);
Calendar filterCal = Calendar.getInstance();
Date filterDate1 = columnDateFilter.getDate1();
filterCal.setTime(filterDate1);
DateRangeType rangeType = columnDateFilter.getType();
if (rangeType == DateRangeType.Equals_Date) {
if (cellCal.get(Calendar.YEAR) != filterCal.get(Calendar.YEAR) || cellCal.get(
Calendar.MONTH) != filterCal.get(Calendar.MONTH) || cellCal.get(
Calendar.DAY_OF_MONTH) != filterCal.get(Calendar.DAY_OF_MONTH)) {
return false;
}
} else if (rangeType == DateRangeType.After_Date && cellDate.before(filterDate1)) {
Date cellDate =
xViewer.getColumnDate(element, xViewer.getCustomizeMgr().getColumnNumFromXViewerColumn(xCol));
if (cellDate != null) {
ColumnDateFilter columnDateFilter = colIdToDateFilter.get(xCol.getId());
Date filterDate1 = columnDateFilter.getDate1();
DateRangeType rangeType = columnDateFilter.getType();
if (rangeType == DateRangeType.Equals_Date) {
if (cellDate.getYear() != filterDate1.getYear() || cellDate.getMonth() != filterDate1.getMonth() || cellDate.getDay() != filterDate1.getDay()) {
return false;
} else if (rangeType == DateRangeType.Before_Date && cellDate.after(filterDate1)) {
}
} else if (rangeType == DateRangeType.After_Date && cellDate.before(filterDate1)) {
return false;
} else if (rangeType == DateRangeType.Before_Date && cellDate.after(filterDate1)) {
return false;
} else if (rangeType == DateRangeType.Between_Dates) {
if (cellDate.before(filterDate1)) {
return false;
}
Date filterDate2 = columnDateFilter.getDate2();
if (cellDate.after(filterDate2)) {
return false;
} else if (rangeType == DateRangeType.Between_Dates) {
if (cellDate.before(filterDate1)) {
return false;
}
Date filterDate2 = columnDateFilter.getDate2();
if (cellDate.after(filterDate2)) {
return false;
}
}
}

} else {
// Do not show this row if date filter selected and no date is shown
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer;

import java.util.Date;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.nebula.widgets.xviewer.core.model.SortDataType;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerAlign;
Expand All @@ -39,8 +40,8 @@ public class XViewerValueColumn extends XViewerColumn implements IXViewerValueCo
*/
@Override
public XViewerValueColumn copy() {
XViewerValueColumn copyColumn = new XViewerValueColumn(getId(), getName(), getWidth(), getAlign(), isShow(), getSortDataType(),
isMultiColumnEditable(), getDescription());
XViewerValueColumn copyColumn = new XViewerValueColumn(getId(), getName(), getWidth(), getAlign(), isShow(),
getSortDataType(), isMultiColumnEditable(), getDescription());
copyColumn.setSortForward(isSortForward());
return copyColumn;
}
Expand Down Expand Up @@ -75,7 +76,8 @@ public Color getForeground(Object element, XViewerColumn xCol, int columnIndex)

//This method will only be called be the XViewerStyledTextLabelProvider
@Override
public StyledString getStyledText(Object element, XViewerColumn viewerColumn, int columnIndex) throws XViewerException {
public StyledString getStyledText(Object element, XViewerColumn viewerColumn, int columnIndex)
throws XViewerException {
return new StyledString(getColumnText(element, viewerColumn, columnIndex));
}

Expand All @@ -90,4 +92,9 @@ public Object getBackingData(Object element, XViewerColumn xCol, int columnIndex
return null;
}

@Override
public Date getColumnDate(Object element, XViewerColumn column, int columnIndex) {
return null;
}

}

0 comments on commit b3617d6

Please sign in to comment.