/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 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 Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.ui.datasources.cda; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; import org.pentaho.reporting.engine.classic.extensions.datasources.cda.CdaQueryEntry; import org.pentaho.reporting.libraries.base.util.ObjectUtilities; public class QueriesTableModel extends AbstractTableModel implements Cloneable { public static class QueryData { private CdaQueryEntry queryEntry; private String[] declaredParameter; public QueryData(final CdaQueryEntry queryEntry, final String[] declaredParameter) { if (queryEntry == null) { throw new NullPointerException(); } this.queryEntry = queryEntry; this.declaredParameter = declaredParameter; } public CdaQueryEntry getQueryEntry() { return queryEntry; } public String[] getDeclaredParameter() { return declaredParameter; } public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final QueryData queryData = (QueryData) o; if (!queryEntry.equals(queryData.queryEntry)) { return false; } return true; } public int hashCode() { return queryEntry != null ? queryEntry.hashCode() : 0; } } private ArrayList<QueryData> queries; public QueriesTableModel() { queries = new ArrayList<QueryData>(); } public Object clone() { try { final QueriesTableModel queriestablemodel = (QueriesTableModel) super.clone(); queriestablemodel.queries = (ArrayList<QueryData>) queries.clone(); return queriestablemodel; } catch (CloneNotSupportedException cne) { throw new IllegalStateException(cne); } } public void add(final QueryData query) { if (queries.contains(query)) { throw new IllegalStateException(); } queries.add(query); fireTableDataChanged(); } public int size() { return queries.size(); } public QueryData get(final int index) { return queries.get(index); } public QueryData getQueryById(final String name) { for (final QueryData query : queries) { if (ObjectUtilities.equal(name, query.getQueryEntry().getId())) { return query; } } return null; } public void clear() { queries.clear(); fireTableDataChanged(); } public String getName(final int row) { return (String) getValueAt(row, 0); } public String getQuery(final int row) { return (String) getValueAt(row, 1); } @Override public Class<?> getColumnClass(final int columnIndex) { return String.class; } public String getColumnName(final int column) { if (column == 0) { return Messages.getString("QueriesTableModel.Query"); } if (column == 1) { return Messages.getString("QueriesTableModel.CdaId"); } throw new IndexOutOfBoundsException(); } public boolean isCellEditable(final int rowIndex, final int columnIndex) { return (columnIndex == 0); } public int getColumnCount() { return 2; } public int getRowCount() { return queries.size(); } public Object getValueAt(final int rowIndex, final int columnIndex) { final QueryData queryData = queries.get(rowIndex); final CdaQueryEntry query = queryData.getQueryEntry(); if (columnIndex == 0) { return query.getName(); } if (columnIndex == 1) { return query.getId(); } throw new IndexOutOfBoundsException(); } public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) { final QueryData queryData = queries.get(rowIndex); final CdaQueryEntry query = queryData.getQueryEntry(); if (columnIndex == 0) { query.setName((String) aValue); fireTableCellUpdated(rowIndex, columnIndex); } } }