/***************************************************************** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.cayenne.map; import org.apache.cayenne.query.*; import org.apache.cayenne.test.file.FileUtil; import org.apache.cayenne.testdo.embeddable.Embeddable1; import org.apache.cayenne.testdo.testmap.Artist; import org.apache.cayenne.testdo.testmap.Gallery; import org.apache.cayenne.util.XMLEncoder; import org.junit.Test; import org.xml.sax.InputSource; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class MapLoaderLoadTest { private InputSource getMapXml(String mapName) { return new InputSource(getClass().getClassLoader().getResourceAsStream(mapName)); } @Test public void testLoadEmbeddableMap() throws Exception { MapLoader mapLoader = new MapLoader(); DataMap map = mapLoader.loadDataMap(getMapXml("embeddable.map.xml")); assertNotNull(map); assertEquals(1, map.getEmbeddables().size()); Embeddable e = map.getEmbeddable(Embeddable1.class.getName()); assertNotNull(e); assertEquals(Embeddable1.class.getName(), e.getClassName()); assertEquals(2, e.getAttributes().size()); EmbeddableAttribute ea1 = e.getAttribute("embedded10"); assertNotNull(ea1); assertEquals("embedded10", ea1.getName()); assertEquals("java.lang.String", ea1.getType()); assertEquals("EMBEDDED10", ea1.getDbAttributeName()); EmbeddableAttribute ea2 = e.getAttribute("embedded20"); assertNotNull(ea2); assertEquals("embedded20", ea2.getName()); assertEquals("java.lang.String", ea2.getType()); assertEquals("EMBEDDED20", ea2.getDbAttributeName()); ObjEntity oe = map.getObjEntity("EmbedEntity1"); assertNotNull(oe); assertEquals(3, oe.getDeclaredAttributes().size()); EmbeddedAttribute oea1 = (EmbeddedAttribute) oe.getAttribute("embedded1"); assertNotNull(oea1); assertEquals(Embeddable1.class.getName(), oea1.getType()); assertEquals(0, oea1.getAttributeOverrides().size()); EmbeddedAttribute oea2 = (EmbeddedAttribute) oe.getAttribute("embedded2"); assertNotNull(oea2); assertEquals(Embeddable1.class.getName(), oea2.getType()); assertEquals(2, oea2.getAttributeOverrides().size()); } @Test public void testLoadTestMap() throws Exception { MapLoader mapLoader = new MapLoader(); DataMap map = mapLoader.loadDataMap(getMapXml("testmap.map.xml")); assertNotNull(map); // test procedures Procedure procedure = map.getProcedure("cayenne_tst_upd_proc"); assertNotNull(procedure); List<ProcedureParameter> params = procedure.getCallParameters(); assertNotNull(params); assertEquals(1, params.size()); ProcedureParameter param = params.get(0); assertNotNull(param); assertEquals("paintingPrice", param.getName()); assertEquals(ProcedureParameter.IN_PARAMETER, param.getDirection()); // test super class name // We expect the artist entity to have a super class name... test map should be // set up in that way. // No other assertions can be made (the actual super class may change) ObjEntity ent = map.getObjEntity("Painting"); assertNotNull(ent.getSuperClassName()); //text exclude... parameters ObjEntity artistCallbackTestEntity = map.getObjEntity("ArtistCallback"); assertTrue(artistCallbackTestEntity.isExcludingDefaultListeners()); assertTrue(artistCallbackTestEntity.isExcludingSuperclassListeners()); checkLoadedQueries(map); } @Test public void testEncodeAsXML() throws FileNotFoundException { // load map MapLoader mapLoader = new MapLoader(); DataMap map = mapLoader.loadDataMap(getMapXml("testmap.map.xml")); assertNotNull(map); // encode map File file = new File(FileUtil.baseTestDirectory(), "testmap_generated.map.xml"); PrintWriter pw = new PrintWriter(new FileOutputStream(file)); map.encodeAsXML(new XMLEncoder(pw)); pw.close(); } private void checkLoadedQueries(DataMap map) throws Exception { SelectQueryDescriptor queryWithQualifier = (SelectQueryDescriptor) map.getQueryDescriptor("QueryWithQualifier"); assertNotNull(queryWithQualifier); assertTrue(queryWithQualifier.getRoot() instanceof ObjEntity); assertEquals("Artist", ((Entity) queryWithQualifier.getRoot()).getName()); assertNotNull(queryWithQualifier.getQualifier()); SelectQueryDescriptor queryWithOrdering = (SelectQueryDescriptor) map.getQueryDescriptor("QueryWithOrdering"); assertNotNull(queryWithOrdering); assertTrue(queryWithOrdering.getRoot() instanceof ObjEntity); assertEquals("Artist", ((Entity) queryWithOrdering.getRoot()).getName()); assertEquals(2, queryWithOrdering.getOrderings().size()); Ordering artistNameOrdering = queryWithOrdering.getOrderings().get(0); assertEquals(Artist.ARTIST_NAME.getName(), artistNameOrdering.getSortSpecString()); assertFalse(artistNameOrdering.isAscending()); assertTrue(artistNameOrdering.isCaseInsensitive()); Ordering dobOrdering = queryWithOrdering.getOrderings().get(1); assertEquals(Artist.DATE_OF_BIRTH.getName(), dobOrdering.getSortSpecString()); assertTrue(dobOrdering.isAscending()); assertFalse(dobOrdering.isCaseInsensitive()); SelectQueryDescriptor queryWithPrefetch = (SelectQueryDescriptor) map.getQueryDescriptor("QueryWithPrefetch"); assertNotNull(queryWithPrefetch); assertTrue(queryWithPrefetch.getRoot() instanceof ObjEntity); assertEquals("Gallery", ((Entity) queryWithPrefetch.getRoot()).getName()); assertNotNull(queryWithPrefetch.getPrefetches()); assertEquals(1, queryWithPrefetch.getPrefetches().size()); assertTrue(queryWithPrefetch.getPrefetches().contains(Gallery.PAINTING_ARRAY.getName())); QueryDescriptor nonSelectingQuery = map.getQueryDescriptor("NonSelectingQuery"); assertNotNull(nonSelectingQuery); assertEquals("NonSelectingQuery", nonSelectingQuery.getName()); assertEquals("UPPER", nonSelectingQuery.getProperties().get("cayenne.SQLTemplate.columnNameCapitalization")); EJBQLQueryDescriptor ejbqlQueryTest = (EJBQLQueryDescriptor) map.getQueryDescriptor("EjbqlQueryTest"); assertNotNull(ejbqlQueryTest); assertEquals("EjbqlQueryTest", ejbqlQueryTest.getName()); assertNotNull(ejbqlQueryTest.getEjbql()); assertEquals("SHARED_CACHE", ejbqlQueryTest.getProperties().get("cayenne.GenericSelectQuery.cacheStrategy")); } }