/***************************************************************** * 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.dbsync.naming; import org.apache.cayenne.configuration.DataChannelDescriptor; import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.Embeddable; import org.apache.cayenne.map.EmbeddableAttribute; import org.apache.cayenne.map.ObjAttribute; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.map.ObjRelationship; import org.apache.cayenne.map.Procedure; import org.apache.cayenne.map.ProcedureParameter; import org.apache.cayenne.map.QueryDescriptor; import org.junit.Test; import static org.junit.Assert.assertEquals; public class NameBuilderTest { @Test public void testName_Root() { assertEquals("project", NameBuilder.builder(new DataChannelDescriptor()).name()); } @Test public void testName_DataChannelDescriptorContext() throws Exception { DataChannelDescriptor descriptor = new DataChannelDescriptor(); DataMap m0 = new DataMap(); m0.setName(NameBuilder.builder(m0).in(descriptor).name()); assertEquals("datamap", m0.getName()); descriptor.getDataMaps().add(m0); DataMap m1 = new DataMap(); m1.setName(NameBuilder.builder(m1).in(descriptor).name()); assertEquals("datamap1", m1.getName()); descriptor.getDataMaps().add(m1); DataNodeDescriptor nd0 = new DataNodeDescriptor(); nd0.setName(NameBuilder.builder(nd0).in(descriptor).name()); assertEquals("datanode", nd0.getName()); descriptor.getNodeDescriptors().add(nd0); DataNodeDescriptor nd1 = new DataNodeDescriptor(); nd1.setName(NameBuilder.builder(nd1).in(descriptor).name()); assertEquals("datanode1", nd1.getName()); descriptor.getNodeDescriptors().add(nd1); } @Test public void testName_DataMapContext() { DataMap map = new DataMap(); map.setDefaultPackage("com.foo"); DbEntity de0 = new DbEntity(); de0.setName(NameBuilder.builder(de0).in(map).name()); assertEquals("db_entity", de0.getName()); map.addDbEntity(de0); DbEntity de1 = new DbEntity(); de1.setName(NameBuilder.builder(de1).in(map).name()); assertEquals("db_entity1", de1.getName()); map.addDbEntity(de1); ObjEntity oe0 = new ObjEntity(); oe0.setName(NameBuilder.builder(oe0).in(map).name()); assertEquals("ObjEntity", oe0.getName()); map.addObjEntity(oe0); ObjEntity oe1 = new ObjEntity(); oe1.setName(NameBuilder.builder(oe1).in(map).name()); assertEquals("ObjEntity1", oe1.getName()); map.addObjEntity(oe1); ObjEntity oe2 = new ObjEntity(); oe2.setName(NameBuilder.builder(oe0).in(map).baseName("db_entity").name()); assertEquals("Should not conflict with similarly named DbEntity", "Db_entity", oe2.getName()); map.addObjEntity(oe2); Procedure p0 = new Procedure(); p0.setName(NameBuilder.builder(p0).in(map).name()); assertEquals("procedure", p0.getName()); map.addProcedure(p0); Procedure p1 = new Procedure(); p1.setName(NameBuilder.builder(p1).in(map).name()); assertEquals("procedure1", p1.getName()); map.addProcedure(p1); Procedure p2 = new Procedure(); p2.setName(NameBuilder.builder(p1).in(map).baseName("db_enity").name()); assertEquals("Should not conflict with similarly named DbEntity", "db_enity", p2.getName()); map.addProcedure(p2); QueryDescriptor q0 = QueryDescriptor.selectQueryDescriptor(); q0.setName(NameBuilder.builder(q0).in(map).name()); assertEquals("query", q0.getName()); map.addQueryDescriptor(q0); QueryDescriptor q1 = QueryDescriptor.ejbqlQueryDescriptor(); q1.setName(NameBuilder.builder(q1).in(map).name()); assertEquals("query1", q1.getName()); map.addQueryDescriptor(q1); Embeddable e0 = new Embeddable(); e0.setClassName("com.foo." + NameBuilder.builder(e0).in(map).name()); assertEquals("com.foo.Embeddable", e0.getClassName()); map.addEmbeddable(e0); Embeddable e1 = new Embeddable(); e1.setClassName("com.foo." + NameBuilder.builder(e1).in(map).name()); assertEquals("com.foo.Embeddable1", e1.getClassName()); map.addEmbeddable(e1); } @Test public void testName_ObjEntityContext() { ObjEntity entity = new ObjEntity(); entity.getCallbackMap().getPostAdd().addCallbackMethod("getMe"); ObjAttribute a0 = new ObjAttribute(); String na0 = NameBuilder.builder(a0).in(entity).name(); assertEquals("untitledAttr", na0); a0.setName(na0); entity.addAttribute(a0); ObjAttribute a1 = new ObjAttribute(); String na1 = NameBuilder.builder(a1).in(entity).name(); assertEquals("untitledAttr1", na1); a1.setName(na1); entity.addAttribute(a1); ObjAttribute a2 = new ObjAttribute(); String na2 = NameBuilder.builder(a2).in(entity).baseName("me").name(); assertEquals("Conflict with callback method was not detected", "me1", na2); a2.setName(na2); entity.addAttribute(a2); ObjRelationship r0 = new ObjRelationship(); String nr0 = NameBuilder.builder(r0).in(entity).name(); assertEquals("untitledRel", nr0); r0.setName(nr0); entity.addRelationship(r0); ObjRelationship r1 = new ObjRelationship(); String nr1 = NameBuilder.builder(r1).in(entity).name(); assertEquals("untitledRel1", nr1); r1.setName(nr1); entity.addRelationship(r1); } @Test public void testName_DbEntityContext() { DbEntity entity = new DbEntity(); DbAttribute a0 = new DbAttribute(); String na0 = NameBuilder.builder(a0).in(entity).name(); assertEquals("untitledAttr", na0); a0.setName(na0); entity.addAttribute(a0); DbAttribute a1 = new DbAttribute(); String na1 = NameBuilder.builder(a1).in(entity).name(); assertEquals("untitledAttr1", na1); a1.setName(na1); entity.addAttribute(a1); DbRelationship r0 = new DbRelationship(); String nr0 = NameBuilder.builder(r0).in(entity).name(); assertEquals("untitledRel", nr0); r0.setName(nr0); entity.addRelationship(r0); DbRelationship r1 = new DbRelationship(); String nr1 = NameBuilder.builder(r1).in(entity).name(); assertEquals("untitledRel1", nr1); r1.setName(nr1); entity.addRelationship(r1); } @Test public void testName_ProcedureContext() { Procedure procedure = new Procedure(); ProcedureParameter p0 = new ProcedureParameter(); p0.setName(NameBuilder.builder(p0).in(procedure).name()); assertEquals("UntitledProcedureParameter", p0.getName()); procedure.addCallParameter(p0); ProcedureParameter p1 = new ProcedureParameter(); p1.setName(NameBuilder.builder(p1).in(procedure).name()); assertEquals("UntitledProcedureParameter1", p1.getName()); procedure.addCallParameter(p1); } @Test public void testName_EmbeddableContext() { Embeddable embeddable = new Embeddable(); EmbeddableAttribute ea0 = new EmbeddableAttribute(); ea0.setName(NameBuilder.builder(ea0).in(embeddable).name()); assertEquals("untitledAttr", ea0.getName()); embeddable.addAttribute(ea0); EmbeddableAttribute ea1 = new EmbeddableAttribute(); ea1.setName(NameBuilder.builder(ea1).in(embeddable).name()); assertEquals("untitledAttr1", ea1.getName()); embeddable.addAttribute(ea1); } @Test public void testName_UncapitalizeAttributeNames() throws Exception { ObjEntity entity = new ObjEntity(); ObjAttribute a0 = new ObjAttribute(); String na0 = NameBuilder.builder(a0).in(entity).baseName("myName").name(); assertEquals("myName", na0); a0.setName(na0); entity.addAttribute(a0); ObjAttribute a1 = new ObjAttribute(); String na1 = NameBuilder.builder(a1).in(entity).baseName("MyName").name(); assertEquals("myName1", na1); a1.setName(na1); entity.addAttribute(a1); } @Test public void testName_Callbacks_ObjEntityContext() { ObjEntity entity = new ObjEntity(); String c0 = NameBuilder.builderForCallbackMethod(entity).name(); assertEquals("onEvent", c0); entity.getCallbackMap().getPostAdd().addCallbackMethod(c0); String c1 = NameBuilder.builderForCallbackMethod(entity).name(); assertEquals("onEvent1", c1); entity.getCallbackMap().getPostAdd().addCallbackMethod(c1); entity.addAttribute(new ObjAttribute("untitledAttr")); String c3 = NameBuilder.builderForCallbackMethod(entity).baseName("getUntitledAttr").name(); assertEquals("getUntitledAttr1", c3); entity.getCallbackMap().getPostAdd().addCallbackMethod(c3); } }