/* * 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.beans.PropertyChangeListener; import java.util.logging.Level; import java.util.logging.Logger; import org.netbeans.api.j2ee.core.Profile; import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; import org.netbeans.gradle.javaee.models.NbWebModel; import org.netbeans.modules.j2ee.dd.api.web.WebAppMetadata; import org.netbeans.modules.j2ee.dd.spi.MetadataUnit; import org.netbeans.modules.j2ee.dd.spi.web.WebAppMetadataModelFactory; import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel; import org.netbeans.modules.web.spi.webmodule.WebModuleImplementation2; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; /** * * @author Ed */ public class GradleWebModuleImpl implements WebModuleImplementation2 { private static final Logger LOGGER = Logger.getLogger(GradleWebModuleImpl.class.getName()); private final WebModuleExtension webExt; private FileObject documentBase; private FileObject webInf; private FileObject deploymentDescriptor; public GradleWebModuleImpl(WebModuleExtension webExt) { this.webExt = webExt; initialise(); } private void initialise() { if (webExt == null) { return; } NbWebModel model = webExt.getCurrentModel(); LOGGER.log(Level.FINER, "model = {0}", model); if (model == null) { return; } LOGGER.log(Level.FINER, "model.getWebAppDir() = {0}", model.getWebAppDir()); documentBase = webExt.getProject().getProjectDirectory().getFileObject(model.getWebAppDir()); if (documentBase != null) { webInf = documentBase.getFileObject("WEB-INF"); LOGGER.log(Level.FINER, "webInf = {0}", webInf); LOGGER.log(Level.FINER, "model.getDeploymentDescName() = {0}", model.getDeploymentDescName()); if (webInf != null) { deploymentDescriptor = webInf.getFileObject(model.getDeploymentDescName()); } } } private FileObject[] getSourcesForNBProject(Project project) { Sources sources = ProjectUtils.getSources(project); if (sources == null) { return new FileObject[0]; } SourceGroup[] groups = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); FileObject[] returnValue = new FileObject[groups.length]; int idx = 0; for (SourceGroup group : groups) { returnValue[idx++] = group.getRootFolder(); } return returnValue; } @Override public FileObject getDocumentBase() { return documentBase; } @Override public String getContextPath() { /* TODO Returns the context path of the web module. // read from glassfish-web.xml? */ return "/"; } @Override public Profile getJ2eeProfile() { return Profile.JAVA_EE_6_WEB; } @Override public FileObject getWebInf() { return webInf; } @Override public FileObject getDeploymentDescriptor() { return deploymentDescriptor; } @Override @Deprecated public FileObject[] getJavaSources() { return getSourcesForNBProject(webExt.getProject()); } @Override public MetadataModel<WebAppMetadata> getMetadataModel() { // TODO get classpaths from Gradle? MetadataUnit metadataUnit = MetadataUnit.create(ClassPath.EMPTY, ClassPath.EMPTY, ClassPath.EMPTY, FileUtil.toFile(deploymentDescriptor)); return WebAppMetadataModelFactory.createMetadataModel(metadataUnit, true); } @Override public void addPropertyChangeListener(PropertyChangeListener pl) { } @Override public void removePropertyChangeListener(PropertyChangeListener pl) { } }