Java tutorial
/* org.agiso.tempel.core.RecursiveTemplateVerifier (02-10-2012) * * RecursiveTemplateVerifier.java * * Copyright 2012 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.core; import java.util.Iterator; import java.util.LinkedHashSet; import org.agiso.tempel.api.internal.ITemplateProvider; import org.agiso.tempel.api.internal.ITemplateVerifier; import org.agiso.tempel.api.model.Template; import org.springframework.stereotype.Component; /** * * * @author Karol Kopacz * @since 1.0 */ @Component public class RecursiveTemplateVerifier implements ITemplateVerifier { @Override public void verifyTemplate(Template<?> template, ITemplateProvider templateProvider) { verifyTemplate(template, new LinkedHashSet<String>()); } /** * Weryfikuje poprawno szablonu, szablonu nadrzdnego i rekurencyjne * sprawdza wszystkie szablony uywane. Kontroluje, czy drzewie wywoa * szablonw nie wystpuje zaptlenie. * * @param template Szablon do weryfikacji. * @param templates Zbir identyfikatorw szablonw gazi. Wykorzystywany * do wykrywania zaptle wywoa. */ private void verifyTemplate(Template<?> template, LinkedHashSet<String> templates) { String id = template.getKey(); // Sprawdzanie, czy w gazi wywoa szablonw nie ma zaptlenia: if (templates.contains(id)) { // Wywietlanie gazi z zaptleniem i wyrzucanie wyjtku: Iterator<String> t = templates.iterator(); System.out.print(t.next()); while (t.hasNext()) { System.out.print("->" + t.next()); } System.out.println("->" + id); throw new IllegalStateException("Zaptlenie wywoa szablonu '" + id + "'"); } // Szablon OK. Dodawanie do zbioru szablonw gazi: templates.add(id); // // Sprawdzanie kadego z podszablonw szablonu: // if(template.getReferences() != null) { // for(TemplateReference reference : template.getReferences()) { // verifyTemplate(reference, templates); // } // } } }