/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.services.datamodeller.driver; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.drools.workbench.models.datamodel.oracle.ProjectDataModelOracle; import org.drools.workbench.models.datamodel.oracle.TypeSource; import org.junit.Before; import org.junit.Test; import org.kie.workbench.common.services.datamodel.backend.server.builder.projects.ProjectDataModelOracleBuilder; import org.kie.workbench.common.services.datamodeller.core.DataModel; import org.kie.workbench.common.services.datamodeller.core.DataObject; import org.kie.workbench.common.services.datamodeller.core.JavaEnum; import org.kie.workbench.common.services.datamodeller.core.ObjectProperty; import org.kie.workbench.common.services.datamodeller.core.Visibility; import org.kie.workbench.common.services.datamodeller.core.impl.DataModelImpl; import org.kie.workbench.common.services.datamodeller.core.impl.DataObjectImpl; import org.kie.workbench.common.services.datamodeller.core.impl.JavaEnumImpl; import org.kie.workbench.common.services.datamodeller.driver.impl.ProjectDataModelOracleUtils; import org.kie.workbench.common.services.datamodeller.driver.testclasses.ExternalEnum1; import org.kie.workbench.common.services.datamodeller.driver.testclasses.ExternalEnum2; import org.kie.workbench.common.services.datamodeller.driver.testclasses.ExternalPojo1; import org.kie.workbench.common.services.datamodeller.driver.testclasses.ExternalPojo2; import static org.junit.Assert.*; public class ProjectDataModelOracleUtilsTest { private ProjectDataModelOracle dataModelOracle; private static final String TEST_PACKAGE = "org.kie.workbench.common.services.datamodeller.driver.testclasses"; @Before public void init() { try { ProjectDataModelOracleUtilsTest.class.getClassLoader().loadClass( ExternalPojo1.class.getName() ); ProjectDataModelOracleBuilder dmoBuilder = ProjectDataModelOracleBuilder.newProjectOracleBuilder(); dmoBuilder.addPackage( TEST_PACKAGE ); dmoBuilder.addClass( ExternalPojo1.class, false, TypeSource.JAVA_DEPENDENCY ); dmoBuilder.addClass( ExternalPojo2.class, false, TypeSource.JAVA_DEPENDENCY ); dmoBuilder.addClass( ExternalEnum1.class, false, TypeSource.JAVA_DEPENDENCY ); dmoBuilder.addClass( ExternalEnum2.class, false, TypeSource.JAVA_DEPENDENCY ); dataModelOracle = dmoBuilder.build(); } catch ( Exception e ) { fail( "Model loading failed: " + e.getMessage() ); } } @Test public void loadExternalDepsTest() { DataModel dataModel = new DataModelImpl(); try { ProjectDataModelOracleUtils.loadExternalDependencies( dataModel, dataModelOracle, ProjectDataModelOracleUtilsTest.class.getClassLoader() ); //check that the expected classes were properly loaded. List<DataObject> expectedExternalClasses = createExpectedExternalClasses(); assertEquals( expectedExternalClasses.size(), dataModel.getExternalClasses().size() ); for ( DataObject externalClass : dataModel.getExternalClasses() ) { //properties read from DMO are not necessary sorted. sortProperties( externalClass ); assertTrue( expectedExternalClasses.contains( externalClass ) ); } //check that the expected enums where properly loaded. List<JavaEnum> expectedExternalEnums = createExpectedExternalEnums(); assertEquals( expectedExternalEnums.size(), dataModel.getDependencyJavaEnums().size() ); for ( JavaEnum externalEnum : dataModel.getDependencyJavaEnums() ) { assertTrue( expectedExternalEnums.contains( externalEnum ) ); } } catch ( Exception e ) { fail( "External deps loading test failed: " + e.getMessage() ); } } private List<DataObject> createExpectedExternalClasses() { List<DataObject> result = new ArrayList<DataObject>(); DataObject dataObject1 = new DataObjectImpl( TEST_PACKAGE, "ExternalPojo1" ); dataObject1.setSuperClassName( Object.class.getName() ); dataObject1.addProperty( "field1", String.class.getName() ); dataObject1.addProperty( "field2", String.class.getName() ); result.add( dataObject1 ); DataObject dataObject2 = new DataObjectImpl( TEST_PACKAGE, "ExternalPojo2" ); dataObject2.setSuperClassName( Object.class.getName() ); dataObject2.addProperty( "field3", String.class.getName() ); dataObject2.addProperty( "field4", String.class.getName() ); result.add( dataObject2 ); return result; } private List<JavaEnum> createExpectedExternalEnums() { List<JavaEnum> result = new ArrayList<JavaEnum>( ); result.add( new JavaEnumImpl( TEST_PACKAGE, "ExternalEnum1", Visibility.PUBLIC ) ); result.add( new JavaEnumImpl( TEST_PACKAGE, "ExternalEnum2", Visibility.PUBLIC ) ); return result; } private void sortProperties( DataObject dataObject ) { Collections.sort( dataObject.getProperties(), new Comparator<ObjectProperty>() { @Override public int compare( ObjectProperty o1, ObjectProperty o2 ) { return o1.getName().compareTo( o2.getName() ); } } ); } }