/*!
* 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.engine.classic.core.wizard;
import javax.swing.table.DefaultTableModel;
import junit.framework.TestCase;
import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.MetaAttributeNames;
import org.pentaho.reporting.engine.classic.core.MetaTableModel;
import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException;
import org.pentaho.reporting.engine.classic.core.cache.IndexedTableModel;
import org.pentaho.reporting.libraries.resourceloader.ResourceManager;
public class DataSchemaCompilerTest extends TestCase
{
private static class TestTableModel extends DefaultTableModel implements MetaTableModel
{
private DefaultDataAttributes cellAttributes;
private DefaultDataAttributes columnAttributes;
private DefaultDataAttributes tableAttributes;
private TestTableModel()
{
cellAttributes = new DefaultDataAttributes();
columnAttributes = new DefaultDataAttributes();
tableAttributes = new DefaultDataAttributes();
setColumnIdentifiers(new String[]{"A", "B"});
setRowCount(1);
// no values needed for rule-evaluation ..
}
public DefaultDataAttributes getCellAttributes()
{
return cellAttributes;
}
public DefaultDataAttributes getColumnAttributes()
{
return columnAttributes;
}
public DataAttributes getCellDataAttributes(int row, int column)
{
return cellAttributes;
}
public boolean isCellDataAttributesSupported()
{
return cellAttributes.isEmpty() == false;
}
public DataAttributes getColumnAttributes(int column)
{
return columnAttributes;
}
public DefaultDataAttributes getTableAttrs()
{
return tableAttributes;
}
public DataAttributes getTableAttributes()
{
return tableAttributes;
}
}
public DataSchemaCompilerTest()
{
}
public DataSchemaCompilerTest(String s)
{
super(s);
}
protected void setUp() throws Exception
{
ClassicEngineBoot.getInstance().start();
}
public void testEmptyRuleEvaluation() throws ReportDataFactoryException
{
final DefaultDataSchemaDefinition def = new DefaultDataSchemaDefinition();
final DataSchemaCompiler compiler = new DataSchemaCompiler(def, new DefaultDataAttributeContext());
final TestTableModel data = new TestTableModel();
data.getTableAttrs().setMetaAttribute("test", "test1", DefaultConceptQueryMapper.INSTANCE, "test");
data.getColumnAttributes().setMetaAttribute("test", "test2", DefaultConceptQueryMapper.INSTANCE, "test");
// Cell attributes will not be copied into the schema, as they can be different for each cell.
final DataSchema dataSchema = compiler.compile(data);
final DataAttributes attributes = dataSchema.getAttributes("A");
assertEquals("test", attributes.getMetaAttribute("test", "test1", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("test", "test2", null, new DefaultDataAttributeContext()));
}
public void testGlobalRuleEvaluation() throws ReportDataFactoryException
{
final DefaultDataAttributes global = new DefaultDataAttributes();
global.setMetaAttribute("global", "global-test", DefaultConceptQueryMapper.INSTANCE, "global-test");
final DefaultDataAttributeReferences refs = new DefaultDataAttributeReferences();
refs.setReference("global", "global-ref", new StaticDataAttributeReference("test", "test1"));
final DefaultDataSchemaDefinition def = new DefaultDataSchemaDefinition();
def.addRule(new GlobalRule(global, refs ));
final DataSchemaCompiler compiler = new DataSchemaCompiler(def, new DefaultDataAttributeContext());
final TestTableModel data = new TestTableModel();
data.getTableAttrs().setMetaAttribute("test", "test1", DefaultConceptQueryMapper.INSTANCE, "test");
data.getColumnAttributes().setMetaAttribute("test", "test2",DefaultConceptQueryMapper.INSTANCE, "test");
// Cell attributes will not be copied into the schema, as they can be different for each cell.
final DataSchema dataSchema = compiler.compile(data);
final DataAttributes attributes = dataSchema.getAttributes("A");
assertEquals("global-test", attributes.getMetaAttribute("global", "global-test", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("test", "test1", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("global", "global-ref", null, new DefaultDataAttributeContext()));
}
public void testDirectFieldRules() throws ReportDataFactoryException
{
final DefaultDataAttributes global = new DefaultDataAttributes();
global.setMetaAttribute("global", "global-test", DefaultConceptQueryMapper.INSTANCE, "global-test");
final DefaultDataAttributeReferences refs = new DefaultDataAttributeReferences();
refs.setReference("global", "global-ref", new StaticDataAttributeReference("test", "test1"));
final DefaultDataSchemaDefinition def = new DefaultDataSchemaDefinition();
def.addRule(new DirectFieldSelectorRule("A", global, refs ));
final DataSchemaCompiler compiler = new DataSchemaCompiler(def, new DefaultDataAttributeContext());
final TestTableModel data = new TestTableModel();
data.getTableAttrs().setMetaAttribute("test", "test1", DefaultConceptQueryMapper.INSTANCE, "test");
data.getColumnAttributes().setMetaAttribute("test", "test2", DefaultConceptQueryMapper.INSTANCE, "test");
// Cell attributes will not be copied into the schema, as they can be different for each cell.
final DataSchema dataSchema = compiler.compile(data);
DataAttributes attributes = dataSchema.getAttributes("A");
assertEquals("global-test", attributes.getMetaAttribute("global", "global-test", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("test", "test1", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("global", "global-ref", null, new DefaultDataAttributeContext()));
attributes = dataSchema.getAttributes("B");
assertNotSame("global-test", attributes.getMetaAttribute("global", "global-test", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("test", "test1", null, new DefaultDataAttributeContext()));
assertNotSame("test", attributes.getMetaAttribute("global", "global-ref", null, new DefaultDataAttributeContext()));
}
public void testMetaSelectorRules() throws ReportDataFactoryException
{
final DefaultDataAttributes global = new DefaultDataAttributes();
global.setMetaAttribute("global", "global-test", DefaultConceptQueryMapper.INSTANCE, "global-test");
final DefaultDataAttributeReferences refs = new DefaultDataAttributeReferences();
refs.setReference("global", "global-ref", new StaticDataAttributeReference("test", "test1"));
final MetaSelector[] selectors = new MetaSelector[1];
selectors[0] = new MetaSelector("test", "test1", "test");
final DefaultDataSchemaDefinition def = new DefaultDataSchemaDefinition();
def.addRule(new MetaSelectorRule(selectors, global, refs ));
final DataSchemaCompiler compiler = new DataSchemaCompiler(def, new DefaultDataAttributeContext());
final TestTableModel data = new TestTableModel();
data.getTableAttrs().setMetaAttribute("test", "test1", DefaultConceptQueryMapper.INSTANCE, "test");
data.getColumnAttributes().setMetaAttribute("test", "test2", DefaultConceptQueryMapper.INSTANCE, "test");
// Cell attributes will not be copied into the schema, as they can be different for each cell.
final DataSchema dataSchema = compiler.compile(data);
DataAttributes attributes = dataSchema.getAttributes("A");
assertEquals("global-test", attributes.getMetaAttribute("global", "global-test", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("test", "test1", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("global", "global-ref", null, new DefaultDataAttributeContext()));
attributes = dataSchema.getAttributes("B");
assertEquals("global-test", attributes.getMetaAttribute("global", "global-test", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("test", "test1", null, new DefaultDataAttributeContext()));
assertEquals("test", attributes.getMetaAttribute("global", "global-ref", null, new DefaultDataAttributeContext()));
}
public void testDataSchemaForPlainTables() throws ReportDataFactoryException
{
final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Test");
final ResourceManager mgr = new ResourceManager();
mgr.registerDefaults();
final DataSchemaDefinition schemaDefinition = DataSchemaUtility.parseDefaults(mgr);
final DataSchemaCompiler compiler =
new DataSchemaCompiler(schemaDefinition, new DefaultDataAttributeContext(), mgr);
final DataSchema compiledSchema = compiler.compile(model);
final DataAttributes attributes = compiledSchema.getAttributes("Test");
assertNotNull(attributes);
assertEquals("Test", attributes.getMetaAttribute(MetaAttributeNames.Formatting.NAMESPACE,
MetaAttributeNames.Formatting.LABEL, String.class, new DefaultDataAttributeContext()));
}
public void testDataSchemaForPlainIndexTables() throws ReportDataFactoryException
{
final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Test");
model.addColumn("Test2");
final ResourceManager mgr = new ResourceManager();
mgr.registerDefaults();
final DataSchemaDefinition schemaDefinition = DataSchemaUtility.parseDefaults(mgr);
final DataSchemaCompiler compiler =
new DataSchemaCompiler(schemaDefinition, new DefaultDataAttributeContext(), mgr);
final DataSchema compiledSchema = compiler.compile(new IndexedTableModel(model));
final DataAttributes attributes = compiledSchema.getAttributes("::column::0");
assertNotNull(attributes);
assertEquals("Test", attributes.getMetaAttribute(MetaAttributeNames.Formatting.NAMESPACE,
MetaAttributeNames.Formatting.LABEL, String.class, new DefaultDataAttributeContext()));
final DataAttributes attributes2 = compiledSchema.getAttributes("::column::1");
assertNotNull(attributes2);
assertEquals("Test2", attributes2.getMetaAttribute(MetaAttributeNames.Formatting.NAMESPACE,
MetaAttributeNames.Formatting.LABEL, String.class, new DefaultDataAttributeContext()));
}
}