package org.pentaho.platform.dataaccess.datasource.wizard.csv; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Test; import org.pentaho.agilebi.modeler.ModelerMessagesHolder; import org.pentaho.agilebi.modeler.models.JoinFieldModel; import org.pentaho.agilebi.modeler.models.JoinRelationshipModel; import org.pentaho.agilebi.modeler.models.JoinTableModel; import org.pentaho.agilebi.modeler.models.SchemaModel; import org.pentaho.agilebi.modeler.util.MultiTableModelerSource; import org.pentaho.agilebi.modeler.util.SpoonModelerMessages; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.Props; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.metadata.model.Domain; import org.pentaho.metadata.model.olap.OlapDimension; import org.pentaho.platform.api.engine.IApplicationContext; import org.pentaho.platform.api.repository.ISolutionRepository; import org.pentaho.platform.dataaccess.datasource.wizard.service.agile.AgileHelper; import org.pentaho.platform.dataaccess.datasource.wizard.service.impl.ModelerService; import org.pentaho.platform.dataaccess.datasource.wizard.service.impl.utils.PentahoSystemHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; public class SerializeMultiTableServiceTest { static { if (!PentahoSystem.getInitializedOK()) { PentahoSystemHelper.init(); System.setProperty("org.osjava.sj.root", "test-res/solution1/system/simple-jndi"); //$NON-NLS-1$ //$NON-NLS-2$ } if(ModelerMessagesHolder.getMessages() == null){ ModelerMessagesHolder.setMessages(new SpoonModelerMessages()); } } @Test public void testSerialize() throws Exception { try{ KettleEnvironment.init(); Props.init(Props.TYPE_PROPERTIES_EMPTY); } catch(Exception e){ // may already be initialized by another test } String solutionStorage = AgileHelper.getDatasourceSolutionStorage(); String path = solutionStorage + ISolutionRepository.SEPARATOR + "resources" + ISolutionRepository.SEPARATOR + "metadata" + ISolutionRepository.SEPARATOR; //$NON-NLS-1$ //$NON-NLS-2$ String olapPath = null; IApplicationContext appContext = PentahoSystem.getApplicationContext(); if (appContext != null) { path = PentahoSystem.getApplicationContext().getSolutionPath(path); olapPath = PentahoSystem.getApplicationContext().getSolutionPath( "system" + ISolutionRepository.SEPARATOR + "olap" + ISolutionRepository.SEPARATOR); //$NON-NLS-1$ //$NON-NLS-2$ } File olap1 = new File(olapPath + "datasources.xml"); //$NON-NLS-1$ File olap2 = new File(olapPath + "tmp_datasources.xml"); //$NON-NLS-1$ FileUtils.copyFile(olap1, olap2); DatabaseMeta database = getDatabaseMeta(); MultiTableModelerSource multiTable = new MultiTableModelerSource(database, getSchema(), database.getName(), Arrays.asList("CUSTOMERS","PRODUCTS","CUSTOMERNAME","PRODUCTCODE")); Domain domain = multiTable.generateDomain(); List<OlapDimension> olapDimensions = new ArrayList<OlapDimension>(); OlapDimension dimension = new OlapDimension(); dimension.setName("test");//$NON-NLS-1$ dimension.setTimeDimension(false); olapDimensions.add(dimension); domain.getLogicalModels().get(0).setProperty("olap_dimensions", olapDimensions);//$NON-NLS-1$ ModelerService service = new ModelerService(); service.serializeModels(domain, "test_file");//$NON-NLS-1$ Assert.assertEquals(domain.getLogicalModels().get(0).getProperty("MondrianCatalogRef"), "SampleData"); File xmiFile = new File(path + "test_file.xmi");//$NON-NLS-1$ File mondrianFile = new File(path + "test_file.mondrian.xml");//$NON-NLS-1$ assertTrue(xmiFile.exists()); assertTrue(mondrianFile.exists()); if (xmiFile.exists()) { xmiFile.delete(); } if (mondrianFile.exists()) { mondrianFile.delete(); } //Restores datasources.xml to its original content. FileUtils.copyFile(olap2, olap1); olap2.delete(); } private SchemaModel getSchema() { List<JoinRelationshipModel> joins = new ArrayList<JoinRelationshipModel>(); JoinTableModel joinTable1 = new JoinTableModel(); joinTable1.setName("CUSTOMERS"); JoinTableModel joinTable2 = new JoinTableModel(); joinTable2.setName("PRODUCTS"); JoinRelationshipModel join1 = new JoinRelationshipModel(); JoinFieldModel lField1 = new JoinFieldModel(); lField1.setName("CUSTOMERNAME"); lField1.setParentTable(joinTable1); join1.setLeftKeyFieldModel(lField1); JoinFieldModel rField1 = new JoinFieldModel(); rField1.setName("PRODUCTCODE"); rField1.setParentTable(joinTable2); join1.setRightKeyFieldModel(rField1); joins.add(join1); SchemaModel model = new SchemaModel(); model.setJoins(joins); return model; } private DatabaseMeta getDatabaseMeta() { DatabaseMeta database = new DatabaseMeta(); try { //database.setDatabaseInterface(new HypersonicDatabaseMeta()); database.setDatabaseType("Hypersonic");//$NON-NLS-1$ //database.setUsername("sa");//$NON-NLS-1$ //database.setPassword("");//$NON-NLS-1$ database.setAccessType(DatabaseMeta.TYPE_ACCESS_JNDI); //database.setHostname("."); database.setDBName("SampleData");//$NON-NLS-1$ //database.setDBPort("9001");//$NON-NLS-1$ database.setName("SampleData");//$NON-NLS-1$ } catch (Exception e) { e.printStackTrace(); } return database; } }