/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.netbeans.gradle.javaee.jpa;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import java.util.logging.Logger;
import org.netbeans.api.project.Project;
import org.netbeans.gradle.javaee.models.GradleEEModelBuilders;
import org.netbeans.gradle.javaee.models.NbJpaModel;
import org.netbeans.gradle.project.api.entry.GradleProjectExtension2;
import org.netbeans.gradle.project.api.entry.GradleProjectExtensionDef;
import org.netbeans.gradle.project.api.entry.ModelLoadResult;
import org.netbeans.gradle.project.api.entry.ParsedModel;
import org.netbeans.gradle.project.api.modelquery.GradleModelDef;
import org.netbeans.gradle.project.api.modelquery.GradleModelDefQuery2;
import org.netbeans.gradle.project.api.modelquery.GradleTarget;
import org.openide.modules.SpecificationVersion;
import org.openide.util.Lookup;
import org.openide.util.lookup.Lookups;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author ed
*/
@ServiceProvider(service = GradleProjectExtensionDef.class)
public class JpaModuleExtensionDef implements GradleProjectExtensionDef<NbJpaModel> {
private static final Logger LOGGER = Logger.getLogger(JpaModuleExtensionDef.class.getName());
private static final String EXTENSION_NAME = "og.netbeans.gradle.javaee.jpa.JpaModuleExtensionDef";
private final Lookup extensionLookup;
public JpaModuleExtensionDef() {
extensionLookup = Lookups.singleton(new Query2());
}
@Override
public String getName() {
return EXTENSION_NAME;
}
@Override
public String getDisplayName() {
return "JavaEE JPA";
}
@Override
public Lookup getLookup() {
return extensionLookup;
}
@Override
public Class<NbJpaModel> getModelType() {
return NbJpaModel.class;
}
@Override
public ParsedModel<NbJpaModel> parseModel(ModelLoadResult retrievedModels) {
LOGGER.entering(this.getClass().getName(), "parseModel", retrievedModels);
ParsedModel<NbJpaModel> returnValue = null;
NbJpaModel jpaModel = retrievedModels.getMainProjectModels().lookup(NbJpaModel.class);
if (jpaModel != null) {
returnValue = new ParsedModel<>(jpaModel);
}
LOGGER.exiting(this.getClass().getName(), "parseModel", returnValue);
return returnValue;
}
@Override
public GradleProjectExtension2<NbJpaModel> createExtension(Project project) throws IOException {
LOGGER.entering(this.getClass().getName(), "createExtension", project);
GradleProjectExtension2<NbJpaModel> returnValue = new JpaModuleExtension(project);
LOGGER.exiting(this.getClass().getName(), "createExtension", returnValue);
return returnValue;
}
@Override
public Set<String> getSuppressedExtensions() {
return Collections.emptySet();
}
private static final class Query2 implements GradleModelDefQuery2 {
private static final SpecificationVersion MINIMUM_JDK_VERSION = new SpecificationVersion("1.7");
private static final GradleModelDef RESULT = GradleModelDef.fromProjectInfoBuilders2(GradleEEModelBuilders.JPA_BUILDER);
@Override
public GradleModelDef getModelDef(GradleTarget gradleTarget) {
if (gradleTarget.getJavaVersion().compareTo(MINIMUM_JDK_VERSION) < 0) {
return GradleModelDef.EMPTY;
}
return RESULT;
}
}
}