blob: 9a2033bee8ce7f1e6ad857cb3bbc2c0f4e4aeee2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2012 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.jpa.core.internal;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.IProject;
import org.eclipse.jpt.common.core.JptResourceModel;
import org.eclipse.jpt.common.core.JptResourceType;
import org.eclipse.jpt.common.utility.internal.Tools;
import org.eclipse.jpt.jpa.core.JpaProject;
/**
* Property tester for {@link JptResourceModel}.
* See <code>org.eclipse.jpt.jpa.core/plugin.xml</code>
*/
public class JptResourceModelPropertyTester
extends PropertyTester
{
public static final String IS_LATEST_SUPPORTED_VERSION = "isLatestSupportedVersion"; //$NON-NLS-1$
public static final String IS_NOT_LATEST_SUPPORTED_VERSION = "isNotLatestSupportedVersion"; //$NON-NLS-1$
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (receiver instanceof JptResourceModel) {
return this.test((JptResourceModel) receiver, property, expectedValue);
}
return false;
}
private boolean test(JptResourceModel resourceModel, String property, Object expectedValue) {
if (property.equals(IS_NOT_LATEST_SUPPORTED_VERSION)) {
return ! this.test(resourceModel, IS_LATEST_SUPPORTED_VERSION, expectedValue);
}
if (property.equals(IS_LATEST_SUPPORTED_VERSION)) {
boolean expected = (expectedValue == null) ? true : ((Boolean) expectedValue).booleanValue();
boolean actual = this.isLatestSupportedVersion(resourceModel);
return actual == expected;
}
return false;
}
private boolean isLatestSupportedVersion(JptResourceModel resourceModel) {
JpaProject jpaProject = this.getJpaProject(resourceModel.getFile().getProject());
if (jpaProject == null) {
// if we get to this tester, the JPA project should be there;
// so this will probably never happen
return true; // effectively disable "upgrade"
}
JptResourceType resourceType = resourceModel.getResourceType();
if (resourceType == null) {
return true; // effectively disable "upgrade"
}
String latestVersion = jpaProject.getJpaPlatform().getMostRecentSupportedResourceType(resourceType.getContentType()).getVersion();
return Tools.valuesAreEqual(resourceType.getVersion(), latestVersion);
}
private JpaProject getJpaProject(IProject project) {
return (JpaProject) project.getAdapter(JpaProject.class);
}
}