/*******************************************************************************
 * Copyright (c) 2005 BEA Systems, Inc. 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    jgarms@bea.com - initial API and implementation
 *    
 *******************************************************************************/
package org.eclipse.jdt.apt.tests.external.annotations.classloader;

import com.sun.mirror.apt.AnnotationProcessor;
import com.sun.mirror.apt.AnnotationProcessorEnvironment;
import com.sun.mirror.declaration.TypeDeclaration;

public class ColorAnnotationProcessor implements AnnotationProcessor {
	
	public static final String PROP_KEY = "ColorAnnotationProcessor";
	public static final String SUCCESS_VALUE = "success";

	private final AnnotationProcessorEnvironment _env;
	
	public ColorAnnotationProcessor(AnnotationProcessorEnvironment env) {
		_env = env;
	}
	
	public void process() {
		System.setProperty(PROP_KEY, "Beginning processing");
		try {
			TypeDeclaration typeDecl = _env.getTypeDeclaration("colortestpackage.ColorTest");
			
			ColorAnnotation colorAnno = typeDecl.getAnnotation(ColorAnnotation.class);
			
			Color color = colorAnno.color();
			
			if (color != Color.RED)
				throw new IllegalStateException("Expecting red, but got: " + color);
			
			ColorWrapper colorWrapper = typeDecl.getAnnotation(ColorWrapper.class);
			ColorAnnotation[] colorAnnoArray = colorWrapper.colors();
			
			if (colorAnnoArray[0].color() != Color.GREEN)
				throw new IllegalStateException("Expecting green, but got: " + color);
			
			if (colorAnnoArray[1].color() != Color.BLUE)
				throw new IllegalStateException("Expecting blue, but got: " + color);
		}
		catch (Throwable t) {
			t.printStackTrace();
			System.setProperty(PROP_KEY, "Failed");
		}
		System.setProperty(PROP_KEY, SUCCESS_VALUE);
		
	}
	
	public static boolean wasSuccessful() {
		return SUCCESS_VALUE.equals(System.getProperty(PROP_KEY));
	}

}
