/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.foundation.xml; import java.lang.reflect.Modifier; import java.util.Enumeration; import java.util.Iterator; import java.util.logging.Logger; import org.openflexo.foundation.FlexoTestCase; import org.openflexo.foundation.cg.GeneratedCode; import org.openflexo.foundation.cg.GeneratedDoc; import org.openflexo.foundation.dkv.DKVModel; import org.openflexo.foundation.dm.DMModel; import org.openflexo.foundation.ie.IEWOComponent; import org.openflexo.foundation.ie.cl.FlexoComponentLibrary; import org.openflexo.foundation.ie.menu.FlexoNavigationMenu; import org.openflexo.foundation.rm.FlexoProject; import org.openflexo.foundation.toc.TOCData; import org.openflexo.foundation.view.ViewLibrary; import org.openflexo.foundation.wkf.FlexoProcess; import org.openflexo.foundation.wkf.FlexoWorkflow; import org.openflexo.foundation.ws.FlexoWSLibrary; import org.openflexo.foundation.xml.FlexoXMLMappings.ClassModels; import org.openflexo.toolbox.FlexoVersion; import org.openflexo.xmlcode.ModelEntity; import org.openflexo.xmlcode.ModelProperty; import org.openflexo.xmlcode.XMLMapping; public class TestXMLMappings extends FlexoTestCase { protected static final Logger logger = Logger.getLogger(TestXMLMappings.class.getPackage().getName()); private FlexoXMLMappings xmlMappings; public TestXMLMappings() { super("TestXMLMappings"); } @Override protected void setUp() throws Exception { super.setUp(); xmlMappings = new FlexoXMLMappings(); xmlMappings.initialize(); } public void testRMMappings() { checkClassModels(FlexoProject.class); } public void testWorkflowMappings() { checkClassModels(FlexoWorkflow.class); } public void testProcessMappings() { checkClassModels(FlexoProcess.class); } public void testComponentMappings() { checkClassModels(IEWOComponent.class); } public void testNavigationMenuMappings() { checkClassModels(FlexoNavigationMenu.class); } public void testComponentLibraryMappings() { checkClassModels(FlexoComponentLibrary.class); } public void testDataModelMappings() { checkClassModels(DMModel.class); } public void testDKVMappings() { checkClassModels(DKVModel.class); } public void testWSLibraryMappings() { checkClassModels(FlexoWSLibrary.class); } public void testShemaLibraryMappings() { checkClassModels(ViewLibrary.class); } public void testShemaMappings() { // checkClassModels(View.class); } public void testGeneratedCodeMappings() { checkClassModels(GeneratedCode.class); } public void testGeneratedDocMappings() { checkClassModels(GeneratedDoc.class); } public void testTOCDataMappings() { checkClassModels(TOCData.class); } private void checkClassModels(Class aClass) { boolean testFails = false; ClassModels classModels = xmlMappings.getModelsForClass(aClass); logger.info("-----------> Check class models for " + aClass.getName()); for (FlexoVersion version : classModels.getAvailableVersions()) { try { XMLMapping mapping = xmlMappings.getMappingForClassAndVersion(aClass, version); if (mapping != null) { logger.info("Successfully decoded mapping for class " + aClass.getSimpleName() + ", version " + version); } else { logger.warning("Failed decoded mapping for class " + aClass.getSimpleName() + ", version " + version); testFails = true; } checkXMLMapping(mapping); } catch (Exception e) { e.printStackTrace(); logger.warning("Failed decoded mapping for class " + aClass.getSimpleName() + ", version " + version + " " + e.getMessage()); testFails = true; } } if (testFails) { fail(); } } protected void checkXMLMapping(XMLMapping mapping) throws Exception { Iterator<ModelEntity> i = mapping.allModelEntities(); while (i.hasNext()) { ModelEntity me = i.next(); checkModelEntity(me); } } private void checkModelEntity(ModelEntity me) throws Exception { checkProperties(me); checkAbstracticity(me); } private void checkProperties(ModelEntity me) { Enumeration<ModelProperty> en = me.getModelProperties(); while (en.hasMoreElements()) { ModelProperty mp = en.nextElement(); mp.getKeyValueProperty(); } } private void checkAbstracticity(ModelEntity me) throws Exception { String className = me.getName(); Class<?> klass = Class.forName(className); if (!me.isAbstract() && Modifier.isAbstract(klass.getModifiers())) { fail(me.getName() + " is declared as not abstract but class is not instanciable"); } } }