/*******************************************************************************
 * Copyright (c) 2007, 2008 Oracle. 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:
 *     Oracle - initial API and implementation
 ******************************************************************************/
package org.eclipse.jpt.core.internal.context;

import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.jpt.core.MappingKeys;
import org.eclipse.jpt.core.context.PersistentAttribute;
import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;

public class PersistentAttributePropertyTester extends PropertyTester 
{
	public static final String IS_MAPPED = "isMapped";
	
	public static final String IS_VIRTUAL = "isVirtual";
	
	
	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
		if (IS_MAPPED.equals(property)) {
			Boolean expectedIsMapped;
			
			try {
				expectedIsMapped = (Boolean) expectedValue;
			}
			catch (ClassCastException cce) {
				return false;
			}
			
			Boolean actualIsMapped = ((PersistentAttribute) receiver).getMappingKey() != MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY;
			
			return actualIsMapped == expectedIsMapped;
		}
		else if (IS_VIRTUAL.equals(property)) {
			Boolean expectedIsVirtual;
			
			try {
				expectedIsVirtual = (Boolean) expectedValue;
			}
			catch (ClassCastException cce) {
				return false;
			}
			
			Boolean actualIsVirtual = false;
			if (receiver instanceof OrmPersistentAttribute) {
				actualIsVirtual = ((OrmPersistentAttribute) receiver).isVirtual();
			}
			
			return actualIsVirtual == expectedIsVirtual;
		}
		
		return false;
	}
}
