Java tutorial
/* org.agiso.tempel.support.test.AbstractTemplateTest (22-01-2013) * * AbstractTemplateTest.java * * Copyright 2013 agiso.org * * 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.agiso.tempel.support.test; import java.io.File; import java.util.logging.LogManager; import org.agiso.core.test.AbstractOutputTest; import org.agiso.tempel.ITempel; import org.agiso.tempel.support.test.provider.ArchiveTemplateProviderElement; import org.agiso.tempel.support.test.provider.IArchiveTemplateProviderElement; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.importer.ExplodedImporter; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.slf4j.bridge.SLF4JBridgeHandler; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Klasa bazowa dla klas testujcych szablony przechowywane w repozytoriach * Maven. Sablony te posiadaj dedykowane projekty z plikami pom.xml, ktre * po kompilacji w formie plikw .jar umieszczane s w repozytoriach Maven. * </br> * Jeli klasa testowa znajduje si w projekcie szablonu (zawierajcym katalog * src/main/resources/TEMPEL-INF), wykorzystuje {@link ArchiveTemplateProviderElement} * i dodaje do niego archiwum biecego szablonu przygotowywane za pomoc * biblioteki {@link ShrinkWrap}. Szablony zalene (podszablony) musz si * znajdowa w repozytoriach Maven i dostarczane s poprzez klas {@link * ShrinkWrapMvnTemplateProvider}. * </br> * Jeli klasa testowa nie znajduje si w projekcie szablonu, to wszystkie * testowane szablony pobiera {@link ShrinkWrapMvnTemplateProvider}. * * @author Karol Kopacz * @since 1.0 */ public abstract class AbstractTemplateTest extends AbstractOutputTest { private String groupId; private String templateId; private String version; private ITempel tempel; // -------------------------------------------------------------------------- static { LogManager.getLogManager().reset(); SLF4JBridgeHandler.install(); } // -------------------------------------------------------------------------- /** * Konstruktor dla klas testw umieszczonych poza projektami szablonw. * Tworzy obiekt {@link Tempel} i rejestruje w nim provider'a {@link * ShrinkWrapMvnTemplateProvider}, ktry pobiera testowane szablony z * repozytorium Maven. */ public AbstractTemplateTest() { tempel = createTempelInstance(); } /** * Konstruktor dla klas testw umieszczonych wewntrz projektw szablonw. * Tworzy obiekt {@link Tempel} i rejestruje w nim provider'y {@link * ArchiveTemplateProviderElement} i {@link ShrinkWrapMvnTemplateProvider}. Pierwszy * z nich odpowiada za dostarczenie biblioteki testowanego szablonu (ktra * jest tworzona w metodzie {@link #createTemplateArchive()} za pomoc * mechanizmw {@link ShrinkWrap}. Drugi dostarcza podszablonw testowanego * szablonu, ktre musz si znajdowa w lokalnym repozytorium Maven. * * @param groupId Grupa testowanego szablonu. * @param templateId Identyfikator testowanego szablonu. * @param version Wersja testowanego szablonu. */ public AbstractTemplateTest(String groupId, String templateId, String version) { this.groupId = groupId; this.templateId = templateId; this.version = version; tempel = createTempelInstance(); } // -------------------------------------------------------------------------- public ITempel getTempelInstance() { return tempel; } protected ITempel createTempelInstance() { ClassPathXmlApplicationContext ctx = null; try { ctx = new ClassPathXmlApplicationContext(getContextConfigLocations()); File tempelInf = new File("src/main/resources/TEMPEL-INF"); if (tempelInf.exists() && tempelInf.isDirectory()) { Archive<?> archive = createTemplateArchive(); // Mamy do czynienia z testem projektu szablonu: IArchiveTemplateProviderElement atp = ctx.getBean(IArchiveTemplateProviderElement.class); atp.addArchive(groupId + ":" + templateId + ":" + version, archive); } return ctx.getBean(ITempel.class); } finally { if (ctx != null) { try { ctx.close(); } catch (Exception e) { } } } } protected String[] getContextConfigLocations() { return new String[] { "classpath*:/META-INF/spring/tempel-context.xml" }; } protected JavaArchive createTemplateArchive() { JavaArchive archive = ShrinkWrap.create(JavaArchive.class, templateId + ":" + version + ".jar"); archive.as(ExplodedImporter.class).importDirectory("src/main/resources"); return archive; } }