/******************************************************************************* * 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.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.nebula.widgets.xviewer.core.util.XViewerUtil; /** * Single customization object storing name, id, sort, filter and column filter * * @author Donald G. Dunne */ public class CustomizeData implements Comparable<CustomizeData> { private String guid = XViewerUtil.generateGuidStr(); private String name; private String nameSpace; private boolean personal = false; protected SortingData sortingData = new SortingData(this); protected FilterData filterData = new FilterData(); protected ColumnFilterData columnFilterData = new ColumnFilterData(); public static String TABLE_DEFAULT_LABEL = "-- Current Table View --"; public static String CURRENT_LABEL = "-- Table Default --"; public ColumnFilterData getColumnFilterData() { return columnFilterData; } protected ColumnData columnData = new ColumnData(); public CustomizeData() { // do nothing } public boolean isTableDefaultCustData() { return name.equals(TABLE_DEFAULT_LABEL); } public boolean isCurrentTableCustData() { return name.equals(CURRENT_LABEL); } public CustomizeData(String xml) { this(); setFromXml(xml); } public void resetGuid() { guid = XViewerUtil.generateGuidStr(); } public String getXml(boolean visibleColumnsOnly) { StringBuffer sb = new StringBuffer( "<XTreeProperties name=\"" + name + "\" namespace=\"" + nameSpace + "\" guid=\"" + guid + "\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ sb.append(sortingData.getXml()); sb.append(filterData.getXml()); sb.append(columnFilterData.getXml()); sb.append(columnData.getXml(visibleColumnsOnly)); sb.append("</XTreeProperties>"); //$NON-NLS-1$ return sb.toString(); } private static Pattern pattern = Pattern.compile("name=\"(.*?)\".*?namespace=\"(.*?)\".*?guid=\"(.*?)\""); //$NON-NLS-1$ public void setFromXml(String xml) { Matcher m = pattern.matcher(xml); if (m.find()) { setName(m.group(1)); setNameSpace(m.group(2)); guid = m.group(3); } else { String name2 = "Invalid customize format for " + xml.substring(0, 50); setName(name2); //$NON-NLS-1$ return; } sortingData.setFromXml(xml); filterData.setFromXml(xml); columnData.setFromXml(xml); columnFilterData.setFromXml(xml); } public boolean isPersonal() { return personal; } public void setPersonal(boolean personal) { this.personal = personal; } public ColumnData getColumnData() { return columnData; } public FilterData getFilterData() { return filterData; } public SortingData getSortingData() { return sortingData; } public String getName() { return name; } public void setName(String name) { this.name = XViewerUtil.intern(name); } public String getNameSpace() { return nameSpace; } public void setNameSpace(String nameSpace) { this.nameSpace = XViewerUtil.intern(nameSpace); } public String getGuid() { return guid; } public void setGuid(String guid) { this.guid = guid; } @Override public boolean equals(Object obj) { return (obj instanceof CustomizeData) && ((CustomizeData) obj).getGuid().equals(guid); } @Override public int hashCode() { return guid.hashCode(); } @Override public int compareTo(CustomizeData custData) { return getName().compareToIgnoreCase(custData.getName()); } @Override public String toString() { return "CustomizeData [guid=" + guid + ", name=" + name + ", nameSpace=" + nameSpace + ", personal=" + personal + ", \n\n" + sortingData + ", \n\n" + filterData + ", \n\n" + columnFilterData + ", \n\n" + columnData + "]"; } }