/* * Copyright 2011 Instituto Superior Tecnico * * https://fenix-ashes.ist.utl.pt/ * * This file is part of the vaadin-framework. * * The vaadin-framework Infrastructure is free software: you can * redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation, either version * 3 of the License, or (at your option) any later version.* * * vaadin-framework 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with vaadin-framework. If not, see <http://www.gnu.org/licenses/>. * */ package pt.ist.vaadinframework.annotation; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashSet; import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; import org.apache.commons.io.FileUtils; @SupportedSourceVersion(SourceVersion.RELEASE_7) @SupportedAnnotationTypes({ "pt.ist.vaadinframework.annotation.EmbeddedComponent" }) public class EmbeddedAnnotationProcessor extends AbstractProcessor { public static final String LOG_FILENAME = ".embeddedAnnotationLog"; public static final String ENTRY_SEPERATOR = "\n"; @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { final Set<String> actions = new HashSet<String>(); final File file = new File(LOG_FILENAME); if (file.exists()) { try { final String contents = FileUtils.readFileToString(file); for (final String line : contents.split(ENTRY_SEPERATOR)) { actions.add(line); } } catch (final IOException e) { e.printStackTrace(); } } final Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(EmbeddedComponent.class); for (final Element element : elements) { if (element instanceof TypeElement) { final TypeElement typeElement = (TypeElement) element; actions.add(typeElement.getQualifiedName().toString()); } else { System.out.println("Skipping processing of element: " + element.getClass().getName() + ", this type was not expected!"); } } FileWriter fileWriter = null; try { fileWriter = new FileWriter(LOG_FILENAME, false); for (final String action : actions) { fileWriter.append(action); fileWriter.write(ENTRY_SEPERATOR); } } catch (final IOException e) { e.printStackTrace(); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (final IOException e) { e.printStackTrace(); } } } return true; } }