/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2005-2011 GanttProject Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.parser; import biz.ganttproject.core.table.ColumnList; import biz.ganttproject.core.table.ColumnList.Column; import org.xml.sax.Attributes; import java.util.ArrayList; import java.util.List; /** * @author bbaranne */ public class TaskDisplayColumnsTagHandler extends AbstractTagHandler { private final List<Column> myBuffer = new ArrayList<Column>(); private final String myIDPropertyName; private final String myOrderPropertyName; private final String myWidthPropertyName; private final String myVisiblePropertyName; private boolean isEnabled; public TaskDisplayColumnsTagHandler(String tagName, String idPropertyName, String orderPropertyName, String widthPropertyName, String visiblePropertyName) { super(tagName); myIDPropertyName = idPropertyName; myOrderPropertyName = orderPropertyName; myWidthPropertyName = widthPropertyName; myVisiblePropertyName = visiblePropertyName; } void setEnabled(boolean enabled) { isEnabled = enabled; } @Override protected boolean onStartElement(Attributes attrs) { if (!isEnabled) { return false; } loadTaskDisplay(attrs); return true; } private void loadTaskDisplay(Attributes atts) { String id = atts.getValue(myIDPropertyName); String orderStr = atts.getValue(myOrderPropertyName); if (orderStr == null) { orderStr = String.valueOf(myBuffer.size()); } String widthStr = atts.getValue(myWidthPropertyName); int order = Integer.parseInt(orderStr); int width = widthStr == null ? -1 : Integer.parseInt(widthStr); boolean visible = true; if (atts.getValue(myVisiblePropertyName) != null) { visible = Boolean.parseBoolean(atts.getValue(myVisiblePropertyName)); } myBuffer.add(new ColumnList.ColumnStub(id, id, visible, order, width)); } public static TaskDisplayColumnsTagHandler createPilsenHandler() { return new TaskDisplayColumnsTagHandler("field", "id", "order", "width", "visible"); } public static TaskDisplayColumnsTagHandler createLegacyHandler() { TaskDisplayColumnsTagHandler result = new TaskDisplayColumnsTagHandler("displaycolumn", "property-id", "order", "width", "NONAME"); result.setEnabled(true); return result; } public static ParsingListener createTaskDisplayColumnsWrapper(final ColumnList visibleFields, final TaskDisplayColumnsTagHandler pilsenHandler, final TaskDisplayColumnsTagHandler legacyHandler) { return new ParsingListener() { @Override public void parsingStarted() { visibleFields.clear(); } @Override public void parsingFinished() { List<Column> buffer = pilsenHandler.myBuffer.isEmpty() ? legacyHandler.myBuffer : pilsenHandler.myBuffer; visibleFields.importData(ColumnList.Immutable.fromList(buffer)); } }; } public static ParsingListener createTaskDisplayColumnsWrapper(final ColumnList visibleFields, final TaskDisplayColumnsTagHandler displayColumnsTagHandler) { return new ParsingListener() { @Override public void parsingStarted() { visibleFields.clear(); } @Override public void parsingFinished() { visibleFields.importData(ColumnList.Immutable.fromList(displayColumnsTagHandler.myBuffer)); } }; } }