/******************************************************************************* * 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.core.model; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.nebula.widgets.xviewer.core.util.Strings; import org.eclipse.nebula.widgets.xviewer.core.util.XmlUtil; /** * Storage for column filters * * @author Donald G. Dunne */ public class ColumnFilterData { private static final String COLUMN_FILTER_TAG = "xColFilter"; //$NON-NLS-1$ private static final String COLUMN_ID_TAG = "id"; //$NON-NLS-1$ private static final String FILTER_TEXT_TAG = "str"; //$NON-NLS-1$ private static final String DATE_FILTER_TYPE_TAG = "dateType"; //$NON-NLS-1$ private static final String DATE1_FILTER_TAG = "date1"; //$NON-NLS-1$ private static final String DATE2_FILTER_TAG = "date2"; //$NON-NLS-1$ private final Map<String, String> colIdToFilterText = new HashMap<String, String>(); private final Map<String, ColumnDateFilter> colIdToDateFilter = new HashMap<String, ColumnDateFilter>(); private static Pattern p = Pattern.compile("<" + COLUMN_FILTER_TAG + ">(.*?)</" + COLUMN_FILTER_TAG + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ public String getFilterText(String colId) { return colIdToFilterText.get(colId); } public Set<String> getColIds() { Set<String> colIds = new HashSet<String>(colIdToFilterText.keySet()); colIds.addAll(colIdToDateFilter.keySet()); return colIds; } public void setFilterText(String colId, String filterText) { colIdToFilterText.put(colId, filterText); } public void clear() { colIdToFilterText.clear(); colIdToDateFilter.clear(); } public void removeFilterText(String colId) { colIdToFilterText.remove(colId); } public String getXml() { StringBuffer sb = new StringBuffer(); for (String colId : getColIds()) { StringBuffer innerSb = new StringBuffer(); innerSb.append(XmlUtil.addTagData(COLUMN_ID_TAG, colId)); String filterText = colIdToFilterText.get(colId); if (Strings.isValid(filterText)) { innerSb.append(XmlUtil.addTagData(FILTER_TEXT_TAG, filterText)); } ColumnDateFilter dateFilter = colIdToDateFilter.get(colId); if (dateFilter != null) { innerSb.append(XmlUtil.addTagData(DATE_FILTER_TYPE_TAG, dateFilter.getType().name())); Date date1 = dateFilter.getDate1(); if (date1 != null) { innerSb.append(XmlUtil.addTagData(DATE1_FILTER_TAG, String.valueOf(date1.getTime()))); } Date date2 = dateFilter.getDate2(); if (date2 != null) { innerSb.append(XmlUtil.addTagData(DATE2_FILTER_TAG, String.valueOf(date2.getTime()))); } } sb.append(XmlUtil.addTagData(COLUMN_FILTER_TAG, innerSb.toString())); } return sb.toString(); } public void setFromXml(String xml) { colIdToFilterText.clear(); Matcher columnMatch = p.matcher(xml); while (columnMatch.find()) { String columnXml = columnMatch.group(1); String columnId = XmlUtil.getTagData(columnXml, COLUMN_ID_TAG); String filterText = XmlUtil.getTagData(columnXml, FILTER_TEXT_TAG); if (Strings.isValid(filterText)) { colIdToFilterText.put(columnId, filterText); } String dateFilterTypeStr = XmlUtil.getTagData(columnXml, DATE_FILTER_TYPE_TAG); if (Strings.isValid(dateFilterTypeStr)) { DateRangeType dateRangeType = DateRangeType.get(dateFilterTypeStr); Date date1 = null, date2 = null; if (dateRangeType != DateRangeType.None) { String date1Str = XmlUtil.getTagData(columnXml, DATE1_FILTER_TAG); if (Strings.isValid(date1Str)) { date1 = new Date(Long.valueOf(date1Str)); } String date2Str = XmlUtil.getTagData(columnXml, DATE2_FILTER_TAG); if (Strings.isValid(date2Str)) { date2 = new Date(Long.valueOf(date2Str)); } } if (date1 != null || date2 != null) { colIdToDateFilter.put(columnId, new ColumnDateFilter(dateRangeType, date1, date2)); } } } } public boolean isFiltered() { return colIdToFilterText.size() > 0; } public void setDateFilter(String columnId, DateRangeType dateRangeType, Date date1, Date date2) { colIdToDateFilter.put(columnId, new ColumnDateFilter(dateRangeType, date1, date2)); } public ColumnDateFilter getDateFilter(String columnId) { return colIdToDateFilter.get(columnId); } public void removeDateFilter(String columnId) { colIdToDateFilter.remove(columnId); } @Override public String toString() { return "ColumnFilterData [colIdToFilterText=" + colIdToFilterText + ", colIdToDateFilter=" + colIdToDateFilter + "]"; } }