/* * 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.web; import java.util.concurrent.atomic.AtomicReference; import org.netbeans.api.project.Project; import org.netbeans.gradle.javaee.models.NbWebModel; import org.netbeans.gradle.javaee.web.nodes.WebModuleExtensionNodes; import org.netbeans.gradle.javaee.web.sources.GradleWebProjectSources; import org.netbeans.gradle.project.api.entry.GradleProjectExtension2; import org.netbeans.modules.web.beans.WebCdiUtil; import org.openide.filesystems.FileObject; import org.openide.util.Lookup; import org.openide.util.lookup.Lookups; /** * * @author Ed */ public class WebModuleExtension implements GradleProjectExtension2<NbWebModel> { private final Project project; // NetBeans project private Lookup permanentProjectLookup; private Lookup projectLookup; private Lookup extensionLookup; private final AtomicReference<NbWebModel> currentModelRef; public WebModuleExtension(Project project) { this.project = project; this.currentModelRef = new AtomicReference<>(null); } @Override public synchronized Lookup getPermanentProjectLookup() { if (permanentProjectLookup == null) { permanentProjectLookup = Lookups.fixed(this); } return permanentProjectLookup; } @Override public synchronized Lookup getProjectLookup() { if (projectLookup == null) { projectLookup = Lookups.fixed( new GradleWebModuleProvider(this), new WebCdiUtil(project), new GradleWebProjectSources(this) ); } return projectLookup; } @Override public synchronized Lookup getExtensionLookup() { if (extensionLookup == null) { extensionLookup = Lookups.fixed( new WebModuleExtensionNodes(this) ); } return extensionLookup; } @Override public void activateExtension(NbWebModel parsedModel) { NbWebModel prevModel = currentModelRef.getAndSet(parsedModel); for (ModelReloadListener listener: getExtensionLookup().lookupAll(ModelReloadListener.class)) { listener.onModelChange(prevModel, parsedModel); } } @Override public void deactivateExtension() { activateExtension(null); } public NbWebModel getCurrentModel() { return currentModelRef.get(); } public Project getProject() { return project; } public FileObject getWebDir() { NbWebModel model = getCurrentModel(); return model != null ? project.getProjectDirectory().getFileObject(model.getWebAppDir()) : null; } }