blob: cb33bea4b0ee7bdc5b851360235509a4d040e8ac [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.j2ee.ejbjarproject.api;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import org.netbeans.api.java.platform.JavaPlatform;
import org.netbeans.api.java.platform.JavaPlatformManager;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
import org.netbeans.spi.project.support.ant.PropertyUtils;
import org.netbeans.spi.project.support.ant.ReferenceHelper;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.api.project.libraries.LibraryManager;
import org.netbeans.api.queries.FileEncodingQuery;
import org.netbeans.modules.j2ee.common.SharabilityUtility;
import org.netbeans.spi.project.support.ant.AntProjectHelper;
import org.netbeans.spi.project.support.ant.EditableProperties;
import org.netbeans.spi.project.support.ant.ProjectGenerator;
import org.netbeans.modules.j2ee.dd.api.ejb.DDProvider;
import org.netbeans.modules.j2ee.dd.api.ejb.EjbJar;
import org.netbeans.api.j2ee.core.Profile;
import org.netbeans.modules.j2ee.common.dd.DDHelper;
import org.netbeans.modules.javaee.project.api.ant.AntProjectConstants;
import org.netbeans.modules.javaee.project.api.ant.DeployOnSaveUtils;
import org.netbeans.modules.javaee.project.api.ant.ui.J2EEProjectProperties;
import org.netbeans.modules.j2ee.ejbjarproject.EjbJarProject;
import org.netbeans.modules.j2ee.ejbjarproject.EjbJarProjectType;
import org.netbeans.modules.j2ee.ejbjarproject.Utils;
import org.netbeans.modules.j2ee.ejbjarproject.ui.customizer.EjbJarProjectProperties;
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
import org.netbeans.modules.java.api.common.project.ProjectProperties;
import org.netbeans.modules.java.api.common.ui.PlatformUiSupport;
import org.netbeans.spi.java.project.support.PreferredProjectPlatform;
import org.openide.filesystems.FileSystem;
import org.openide.filesystems.FileSystem.AtomicAction;
import org.openide.modules.SpecificationVersion;
import org.openide.util.Exceptions;
import org.openide.util.Mutex;
import org.openide.util.MutexException;
import org.openide.util.NbBundle;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* Create a fresh EjbProject from scratch or by importing and exisitng ejb module
* in one of the recognized directory structures.
*
* @author Pavel Buzek
*/
public class EjbJarProjectGenerator {
private static final String DEFAULT_DOC_BASE_FOLDER = "conf"; //NOI18N
private static final String DEFAULT_SRC_FOLDER = "src"; //NOI18N
private static final String DEFAULT_TEST_FOLDER = "test"; //NOI18N
private static final String DEFAULT_RESOURCE_FOLDER = "setup"; //NOI18N
private static final String DEFAULT_JAVA_FOLDER = "java"; //NOI18N
private static final String DEFAULT_BUILD_DIR = "build"; //NOI18N
public static final String MINIMUM_ANT_VERSION = "1.6.5";
private EjbJarProjectGenerator() {}
/**
* Create a new empty EjbJar project.
* @param dir the top-level directory (need not yet exist but if it does it must be empty)
* @param name the code name for the project
* @param j2eeLevel Java EE level
* @param serverInstanceID server instance ID
* @return the helper object permitting it to be further customized
* @throws IOException in case something went wrong
* @deprecated
*/
public static AntProjectHelper createProject(File dir, final String name,
final String j2eeLevel, final String serverInstanceID) throws IOException {
return createProject(dir, name, j2eeLevel, serverInstanceID, null);
}
@Deprecated
public static AntProjectHelper createProject(File dir, final String name,
final String j2eeLevel, final String serverInstanceID,
final String librariesDefinition) throws IOException {
EjbJarProjectCreateData createData = new EjbJarProjectCreateData();
createData.setProjectDir(dir);
createData.setName(name);
createData.setJavaEEProfile(Profile.fromPropertiesString(j2eeLevel));
createData.setServerInstanceID(serverInstanceID);
createData.setLibrariesDefinition(librariesDefinition);
return createProject(createData);
}
public static AntProjectHelper createProject(final EjbJarProjectCreateData createData) throws IOException {
File dir = createData.getProjectDir();
final FileObject projectDir = FileUtil.createFolder(dir);
final AntProjectHelper[] h = new AntProjectHelper[1];
// create project in one FS atomic action:
FileSystem fs = projectDir.getFileSystem();
fs.runAtomicAction(new FileSystem.AtomicAction() {
public void run() throws IOException {
AntProjectHelper helper = createProjectImpl(createData, projectDir);
h[0] = helper;
}});
return h[0];
}
private static AntProjectHelper createProjectImpl(final EjbJarProjectCreateData createData,
final FileObject projectDir) throws IOException {
String name = createData.getName();
String serverInstanceID = createData.getServerInstanceID();
FileObject srcRoot = projectDir.createFolder(DEFAULT_SRC_FOLDER); // NOI18N
srcRoot.createFolder(DEFAULT_JAVA_FOLDER); //NOI18N
if (!createData.skipTests()) {
projectDir.createFolder(DEFAULT_TEST_FOLDER);
}
FileObject confRoot = srcRoot.createFolder(DEFAULT_DOC_BASE_FOLDER); // NOI18N
//create a default manifest
FileUtil.copyFile(FileUtil.getConfigFile("org-netbeans-modules-j2ee-ejbjarproject/MANIFEST.MF"), confRoot, "MANIFEST"); //NOI18N
final AntProjectHelper h = setupProject(projectDir, name,
"src", "test", null, null, null, createData.getJavaEEProfile(), serverInstanceID,
createData.getLibrariesDefinition(), createData.skipTests());
EditableProperties ep = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
ep.put(EjbJarProjectProperties.SOURCE_ROOT, DEFAULT_SRC_FOLDER); //NOI18N
ep.setProperty(EjbJarProjectProperties.META_INF, "${"+EjbJarProjectProperties.SOURCE_ROOT+"}/"+DEFAULT_DOC_BASE_FOLDER); //NOI18N
ep.setProperty(EjbJarProjectProperties.SRC_DIR, "${"+EjbJarProjectProperties.SOURCE_ROOT+"}/"+DEFAULT_JAVA_FOLDER); //NOI18N
ep.setProperty(EjbJarProjectProperties.META_INF_EXCLUDES, "sun-cmp-mappings.xml"); // NOI18N
Charset enc = FileEncodingQuery.getDefaultEncoding();
ep.setProperty(EjbJarProjectProperties.SOURCE_ENCODING, enc.name());
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
EjbJarProject p = (EjbJarProject) ProjectManager.getDefault().findProject(h.getProjectDirectory());
ProjectManager.getDefault().saveProject(p);
final ReferenceHelper refHelper = p.getReferenceHelper();
try {
ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction<Void>() {
public Void run() throws Exception {
copyRequiredLibraries(h, refHelper, createData);
return null;
}
});
} catch (MutexException ex) {
Exceptions.printStackTrace(ex.getException());
}
// create ejb-jar.xml
Profile profile = createData.getJavaEEProfile();
if (!Profile.JAVA_EE_5.equals(profile) && !Profile.JAVA_EE_6_FULL.equals(profile) && !Profile.JAVA_EE_6_WEB.equals(profile) &&
!Profile.JAVA_EE_7_FULL.equals(profile) && !Profile.JAVA_EE_7_WEB.equals(profile)) {
String resource = "org-netbeans-modules-j2ee-ejbjarproject/ejb-jar-2.1.xml";
FileObject ddFile = FileUtil.copyFile(FileUtil.getConfigFile(resource), confRoot, "ejb-jar"); //NOI18N
EjbJar ejbJar = DDProvider.getDefault().getDDRoot(ddFile);
ejbJar.setDisplayName(name);
ejbJar.write(ddFile);
}
if (createData.isCDIEnabled()) {
DDHelper.createBeansXml(profile, confRoot);
}
return h;
}
/**
* Import project from source or exploded archive
* @param dir root directory of project
* @param name name of the project
* @param sourceFolders Array of folders that hold the projects source
* or exploded archive
* @param testFolders folders that hold test code for the project
* @param configFilesBase Folder that holds the projects config files
* like deployment descriptors
* @param libFolder the libraries associated with the project
* @param j2eeLevel spec revision level
* @param serverInstanceID id of target server
* @param fromJavaSources flag whether the project is from source or
* exploded archive of class files
* @throws java.io.IOException if something goes wrong
* @return The AntProjectHelper for the project
*/
public static AntProjectHelper importProject(final File dir, final String name,
final File[] sourceFolders, final File[] testFolders,
final File configFilesBase, final File libFolder, final String j2eeLevel,
String serverInstanceID, boolean fromJavaSources) throws IOException {
return importProject(dir, name, sourceFolders, testFolders, configFilesBase,
libFolder, j2eeLevel, serverInstanceID, fromJavaSources, null);
}
public static AntProjectHelper importProject(final File dir, final String name,
final File[] sourceFolders, final File[] testFolders,
final File configFilesBase, final File libFolder, final String j2eeLevel,
String serverInstanceID, boolean fromJavaSources,
String librariesDefinition) throws IOException {
AntProjectHelper retVal = importProject(dir,name,sourceFolders,testFolders,
configFilesBase,libFolder,j2eeLevel,serverInstanceID, librariesDefinition);
EditableProperties subEp = retVal.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
subEp.setProperty(EjbJarProjectProperties.JAVA_SOURCE_BASED,fromJavaSources+""); // NOI18N
retVal.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH,subEp);
Project subP = ProjectManager.getDefault().findProject(retVal.getProjectDirectory());
ProjectManager.getDefault().saveProject(subP);
return retVal;
}
@Deprecated
public static AntProjectHelper importProject(final File dir, final String name,
final File[] sourceFolders, final File[] testFolders,
final File configFilesBase, final File libFolder, final String j2eeLevel,
final String serverInstanceID) throws IOException {
return importProject(dir, name, sourceFolders, testFolders, configFilesBase,
libFolder, j2eeLevel, serverInstanceID, null);
}
@Deprecated
public static AntProjectHelper importProject(final File dir, final String name,
final File[] sourceFolders, final File[] testFolders,
final File configFilesBase, final File libFolder, final String j2eeLevel,
final String serverInstanceID, final String librariesDefinition) throws IOException {
EjbJarProjectCreateData createData = new EjbJarProjectCreateData();
createData.setProjectDir(dir);
createData.setName(name);
createData.setSourceFolders(sourceFolders);
createData.setTestFolders(testFolders);
createData.setConfigFilesBase(configFilesBase);
createData.setLibFolder(libFolder);
createData.setJavaEEProfile(Profile.fromPropertiesString(j2eeLevel));
createData.setServerInstanceID(serverInstanceID);
createData.setLibrariesDefinition(librariesDefinition);
return importProject(createData);
}
public static AntProjectHelper importProject(final EjbJarProjectCreateData createData) throws IOException {
File dir = createData.getProjectDir();
assert dir != null: "Project folder can't be null"; //NOI18N
final FileObject projectDir = FileUtil.createFolder(dir);
final AntProjectHelper[] h = new AntProjectHelper[1];
// create project in one FS atomic action:
FileSystem fs = projectDir.getFileSystem();
fs.runAtomicAction(new FileSystem.AtomicAction() {
public void run() throws IOException {
AntProjectHelper helper = importProjectImpl(createData, projectDir);
h[0] = helper;
}});
return h[0];
}
private static AntProjectHelper importProjectImpl(final EjbJarProjectCreateData createData,
final FileObject projectDir) throws IOException {
String name = createData.getName();
final File[] sourceFolders = createData.getSourceFolders();
final File[] testFolders = createData.getTestFolders();
Profile j2eeProfile = createData.getJavaEEProfile();
String serverInstanceID = createData.getServerInstanceID();
assert sourceFolders != null && testFolders != null: "Package roots can't be null"; //NOI18N
// this constructor creates only java application type
final AntProjectHelper h = setupProject(projectDir,
name,
null,
null,
createData.getConfigFilesBase(),
createData.getLibFolder(),
null,
j2eeProfile,
serverInstanceID,
createData.getLibrariesDefinition(),
createData.skipTests());
final EjbJarProject p = (EjbJarProject) ProjectManager.getDefault().findProject(projectDir);
final ReferenceHelper refHelper = p.getReferenceHelper();
try {
ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction<Void>() {
public Void run() throws Exception {
Element data = h.getPrimaryConfigurationData(true);
Document doc = data.getOwnerDocument();
NodeList nl = data.getElementsByTagNameNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"source-roots"); //NOI18N
assert nl.getLength() == 1;
Element sourceRoots = (Element) nl.item(0);
nl = data.getElementsByTagNameNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"test-roots"); //NOI18N
assert nl.getLength() == 1;
Element testRoots = (Element) nl.item(0);
for (int i=0; i<sourceFolders.length; i++) {
String propName = "src.dir" + (i == 0 ? "" : Integer.toString(i+1)); //NOI18N
String srcReference = refHelper.createForeignFileReference(sourceFolders[i], JavaProjectConstants.SOURCES_TYPE_JAVA);
Element root = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"root"); //NOI18N
root.setAttribute("id",propName); //NOI18N
sourceRoots.appendChild(root);
EditableProperties props = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
props.put(propName,srcReference);
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, props); // #47609
}
if (testFolders.length == 0) {
EditableProperties props = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
props.put("test.src.dir", ""); // NOI18N
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, props); // #47609
} else {
for (int i=0; i<testFolders.length; i++) {
if (!testFolders[i].exists()) {
FileUtil.createFolder(testFolders[i]);
}
String propName = "test.src.dir" + (i == 0 ? "" : Integer.toString(i+1)); //NOI18N
String testReference = refHelper.createForeignFileReference(testFolders[i], JavaProjectConstants.SOURCES_TYPE_JAVA);
Element root = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"root"); //NOI18N
root.setAttribute("id",propName); //NOI18N
testRoots.appendChild(root);
EditableProperties props = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); // #47609
props.put(propName,testReference);
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, props);
}
}
h.putPrimaryConfigurationData(data,true);
copyRequiredLibraries(h, refHelper, createData);
ProjectManager.getDefault().saveProject(p);
return null;
}
});
} catch (MutexException me ) {
IOException ex = new IOException("project creation failed");
ex.initCause(me);
throw ex;
}
// AB: fix for #53170: if j2eeLevel is 1.4 and ejb-jar.xml is version 2.0, we upgrade it to version 2.1
FileObject ejbJarXml = FileUtil.toFileObject(createData.getConfigFilesBase()).getFileObject("ejb-jar.xml"); // NOI18N
if (ejbJarXml != null) {
try {
EjbJar root = DDProvider.getDefault().getDDRoot(ejbJarXml);
boolean writeDD = false;
boolean updateXml = root.getVersion() == null ? true :
new BigDecimal(EjbJar.VERSION_2_1).compareTo(root.getVersion()) > 0;
if (updateXml && Profile.J2EE_14.equals(j2eeProfile)) {
root.setVersion(new BigDecimal(EjbJar.VERSION_2_1));
writeDD = true;
}
// also set the display name if not set (#55733)
String dispName = root.getDefaultDisplayName();
if (null == dispName || dispName.trim().length() == 0) {
root.setDisplayName(name);
writeDD = true;
}
if (writeDD) {
root.write(ejbJarXml);
}
} catch (IOException e) {
Exceptions.printStackTrace(e);
}
}
return h;
}
private static void copyRequiredLibraries(AntProjectHelper h, ReferenceHelper rh, EjbJarProjectCreateData data) throws IOException {
if (!h.isSharableProject()) {
return;
}
if (!data.skipTests() && rh.getProjectLibraryManager().getLibrary("junit") == null) { // NOI18N
if (LibraryManager.getDefault().getLibrary("junit") != null) {
rh.copyLibrary(LibraryManager.getDefault().getLibrary("junit")); // NOI18N
}
}
if (!data.skipTests() && rh.getProjectLibraryManager().getLibrary("junit_4") == null) { // NOI18N
if (LibraryManager.getDefault().getLibrary("junit_4") != null) {
rh.copyLibrary(LibraryManager.getDefault().getLibrary("junit_4")); // NOI18N
}
}
Profile j2eeProfile = data.getJavaEEProfile();
String libraryName = null;
if (j2eeProfile.equals(Profile.JAVA_EE_6_FULL) || j2eeProfile.equals(Profile.JAVA_EE_6_WEB)) {
libraryName = AntProjectConstants.ENDORSED_LIBRARY_NAME_6;
}
if (j2eeProfile.equals(Profile.JAVA_EE_7_FULL) || j2eeProfile.equals(Profile.JAVA_EE_7_WEB)) {
libraryName = AntProjectConstants.ENDORSED_LIBRARY_NAME_7;
}
if (libraryName != null) {
if (rh.getProjectLibraryManager().getLibrary(libraryName) == null) { // NOI18N
rh.copyLibrary(LibraryManager.getDefault().getLibrary(libraryName)); // NOI18N
}
}
SharabilityUtility.makeSureProjectHasCopyLibsLibrary(h, rh);
}
private static String createFileReference(ReferenceHelper refHelper, FileObject projectFO, FileObject referencedFO) {
if (FileUtil.isParentOf(projectFO, referencedFO)) {
return relativePath(projectFO, referencedFO);
} else {
return refHelper.createForeignFileReference(FileUtil.toFile(referencedFO), null);
}
}
private static String relativePath(FileObject parent, FileObject child) {
if (child.equals(parent)) {
return "";
}
if (!FileUtil.isParentOf(parent, child)) {
throw new IllegalArgumentException("Cannot find relative path, " + parent + " is not parent of " + child);
}
return child.getPath().substring(parent.getPath().length() + 1);
}
private static AntProjectHelper setupProject(FileObject dirFO, String name,
String srcRoot, String testRoot, File configFiles, File libraries, String resources,
Profile j2eeProfile, String serverInstanceID, String librariesDefinition, boolean skipTests) throws IOException {
Utils.logUI(NbBundle.getBundle(EjbJarProjectGenerator.class), "UI_EJB_PROJECT_CREATE_SHARABILITY", // NOI18N
new Object[]{Boolean.valueOf(librariesDefinition != null), Boolean.FALSE});
AntProjectHelper h = ProjectGenerator.createProject(dirFO, EjbJarProjectType.TYPE, librariesDefinition);
final EjbJarProject prj = (EjbJarProject) ProjectManager.getDefault().findProject(h.getProjectDirectory());
final ReferenceHelper referenceHelper = prj.getReferenceHelper();
Element data = h.getPrimaryConfigurationData(true);
Document doc = data.getOwnerDocument();
Element nameEl = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
nameEl.appendChild(doc.createTextNode(name));
data.appendChild(nameEl);
Element minant = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "minimum-ant-version"); // NOI18N
minant.appendChild(doc.createTextNode(MINIMUM_ANT_VERSION));
data.appendChild(minant);
// TODO: ma154696: not sure if needed
// Element addLibs = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "ejb-module-additional-libraries"); //NOI18N
// data.appendChild(addLibs);
EditableProperties ep = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
EditableProperties epPriv = h.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH);
Element sourceRoots = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"source-roots"); //NOI18N
if (srcRoot != null) {
Element root = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"root"); //NOI18N
root.setAttribute("id","src.dir"); //NOI18N
root.setAttribute("name",NbBundle.getMessage(EjbJarProjectGenerator.class, "NAME_src.dir"));
sourceRoots.appendChild(root);
ep.setProperty("src.dir", srcRoot); // NOI18N
}
data.appendChild(sourceRoots);
Element testRoots = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"test-roots"); //NOI18N
if (testRoot != null) {
Element root = doc.createElementNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,"root"); //NOI18N
root.setAttribute("id","test.src.dir"); //NOI18N
root.setAttribute("name",NbBundle.getMessage(EjbJarProjectGenerator.class, "NAME_test.src.dir"));
testRoots.appendChild(root);
ep.setProperty("test.src.dir", testRoot); // NOI18N
}
data.appendChild(testRoots);
h.putPrimaryConfigurationData(data, true);
if (resources != null) {
ep.setProperty(EjbJarProjectProperties.RESOURCE_DIR, resources);
} else {
ep.setProperty(EjbJarProjectProperties.RESOURCE_DIR, DEFAULT_RESOURCE_FOLDER);
}
JavaPlatform defaultPlatform = JavaPlatformManager.getDefault().getDefaultPlatform();
SpecificationVersion v = defaultPlatform.getSpecification().getVersion();
String sourceLevel = v.toString();
// #181215: JDK 6 should be the default source/binary format for Java EE 6 projects
if (sourceLevel.equals("1.7")) {
sourceLevel = "1.6";
}
ep.setProperty(EjbJarProjectProperties.JAVAC_SOURCE, sourceLevel); //NOI18N
ep.setProperty(EjbJarProjectProperties.JAVAC_TARGET, sourceLevel); //NOI18N
ep.setProperty(EjbJarProjectProperties.DIST_DIR, "dist");
ep.setProperty(EjbJarProjectProperties.DIST_JAR, "${"+EjbJarProjectProperties.DIST_DIR+"}/" + "${" + EjbJarProjectProperties.JAR_NAME + "}");
//XXX the name of the dist.ear.jar file should be different, but now it cannot be since the name is used as a key in module provider mapping
ep.setProperty(EjbJarProjectProperties.DIST_EAR_JAR, "${"+EjbJarProjectProperties.DIST_DIR+"}/" + "${" + EjbJarProjectProperties.JAR_NAME + "}");
ep.setProperty(EjbJarProjectProperties.J2EE_PLATFORM, j2eeProfile.toPropertiesString());
ep.setProperty(EjbJarProjectProperties.JAR_NAME, PropertyUtils.getUsablePropertyName(name) + ".jar");
ep.setProperty(EjbJarProjectProperties.JAR_COMPRESS, "false");
// ep.setProperty(EjbJarProjectProperties.JAR_CONTENT_ADDITIONAL, "");
ep.setProperty(ProjectProperties.JAVAC_CLASSPATH, "");
J2EEProjectProperties.setServerProperties(ep, epPriv, null, null, serverInstanceID, j2eeProfile, J2eeModule.Type.EJB);
// deploy on save since nb 6.5
ep.setProperty(EjbJarProjectProperties.J2EE_COMPILE_ON_SAVE, "true");
ep.setProperty(EjbJarProjectProperties.J2EE_DEPLOY_ON_SAVE, DeployOnSaveUtils.isDeployOnSaveSupported(serverInstanceID));
ep.setProperty(EjbJarProjectProperties.JAVAC_DEBUG, "true");
ep.setProperty(EjbJarProjectProperties.JAVAC_DEPRECATION, "false");
ep.setProperty(ProjectProperties.JAVAC_TEST_CLASSPATH, skipTests ? new String[] {
"${javac.classpath}:", // NOI18N
"${build.classes.dir}", // NOI18N
} : new String[] {
"${javac.classpath}:", // NOI18N
"${build.classes.dir}:", // NOI18N
"${libs.junit.classpath}:", // NOI18N
"${libs.junit_4.classpath}", // NOI18N
});
ep.setProperty(ProjectProperties.RUN_TEST_CLASSPATH, new String[] {
"${javac.test.classpath}:", // NOI18N
"${build.test.classes.dir}", // NOI18N
});
ep.setProperty(EjbJarProjectProperties.DEBUG_TEST_CLASSPATH, new String[] {
"${run.test.classpath}", // NOI18N
});
ep.setProperty(EjbJarProjectProperties.BUILD_DIR, DEFAULT_BUILD_DIR);
ep.setProperty(ProjectProperties.BUILD_TEST_CLASSES_DIR, "${build.dir}/test/classes"); // NOI18N
ep.setProperty(EjbJarProjectProperties.BUILD_TEST_RESULTS_DIR, "${build.dir}/test/results"); // NOI18N
ep.setProperty(EjbJarProjectProperties.BUILD_GENERATED_DIR, "${"+EjbJarProjectProperties.BUILD_DIR+"}/generated");
ep.setProperty(ProjectProperties.BUILD_CLASSES_DIR, "${"+EjbJarProjectProperties.BUILD_DIR+"}/classes");
ep.setProperty("build.generated.sources.dir", "${build.dir}/generated-sources"); // NOI18N
ep.setProperty(EjbJarProjectProperties.BUILD_EAR_CLASSES_DIR, "${"+EjbJarProjectProperties.BUILD_DIR+"}/classes");
ep.setProperty(EjbJarProjectProperties.BUILD_CLASSES_EXCLUDES, "**/*.java,**/*.form,**/.nbattrs");
ep.setProperty(EjbJarProjectProperties.DIST_JAVADOC_DIR, "${"+EjbJarProjectProperties.DIST_DIR+"}/javadoc");
ep.setProperty(EjbJarProjectProperties.JAVA_PLATFORM, "default_platform");
ep.setProperty(EjbJarProjectProperties.DEBUG_CLASSPATH, "${"+ProjectProperties.JAVAC_CLASSPATH+"}:${"+ProjectProperties.BUILD_CLASSES_DIR+"}");
ep.setProperty(EjbJarProjectProperties.JAVADOC_PRIVATE, "false"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_NO_TREE, "false"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_USE, "true"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_NO_NAVBAR, "false"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_NO_INDEX, "false"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_SPLIT_INDEX, "true"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_AUTHOR, "false"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_VERSION, "false"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_WINDOW_TITLE, ""); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_ENCODING, "${" + EjbJarProjectProperties.SOURCE_ENCODING + "}"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_PREVIEW, "true"); // NOI18N
ep.setProperty(EjbJarProjectProperties.JAVADOC_ADDITIONALPARAM, ""); // NOI18N
ep.setProperty(EjbJarProjectProperties.RUNMAIN_JVM_ARGS, ""); // NOI18N
ep.setComment(EjbJarProjectProperties.RUNMAIN_JVM_ARGS, new String[] { // NOI18N
"# " + NbBundle.getMessage(EjbJarProjectGenerator.class, "COMMENT_runmain.jvmargs"), // NOI18N
"# " + NbBundle.getMessage(EjbJarProjectGenerator.class, "COMMENT_runmain.jvmargs_2"), // NOI18N
}, false);
// use the default encoding
Charset enc = FileEncodingQuery.getDefaultEncoding();
ep.setProperty(EjbJarProjectProperties.SOURCE_ENCODING, enc.name());
if (j2eeProfile.equals(Profile.JAVA_EE_6_FULL) || j2eeProfile.equals(Profile.JAVA_EE_6_WEB)) {
ep.setProperty(ProjectProperties.ENDORSED_CLASSPATH, new String[]{AntProjectConstants.ENDORSED_LIBRARY_CLASSPATH_6});
}
if (j2eeProfile.equals(Profile.JAVA_EE_7_FULL) || j2eeProfile.equals(Profile.JAVA_EE_7_WEB)) {
ep.setProperty(ProjectProperties.ENDORSED_CLASSPATH, new String[]{AntProjectConstants.ENDORSED_LIBRARY_CLASSPATH_7});
}
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
if (configFiles != null) {
String ref = createFileReference(referenceHelper, dirFO, FileUtil.toFileObject(configFiles));
EditableProperties props = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
props.setProperty(EjbJarProjectProperties.META_INF, ref);
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, props);
}
if (libraries != null) {
String ref = createFileReference(referenceHelper, dirFO, FileUtil.toFileObject(libraries));
EditableProperties props = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
props.setProperty(EjbJarProjectProperties.LIBRARIES_DIR, ref);
h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, props);
}
J2EEProjectProperties.createDeploymentScript(dirFO, ep, epPriv, serverInstanceID, J2eeModule.Type.EJB);
h.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, epPriv);
Project p = ProjectManager.getDefault().findProject(dirFO);
ProjectManager.getDefault().saveProject(p);
return h;
}
// AB: this method is also called from the enterprise application, so we can't pass UpdateHelper here
// well, actually we can, but let's not expose too many classes
public static void setPlatform(final AntProjectHelper helper, final String platformName, final String sourceLevel) {
FileObject projectDir = helper.getProjectDirectory();
if (projectDir == null) {
return;
}
// issue 89278: do not fire file change events under ProjectManager.MUTEX,
// it is deadlock-prone
try {
projectDir.getFileSystem().runAtomicAction(new AtomicAction() {
public void run() throws IOException {
ProjectManager.mutex().writeAccess(new Runnable() {
public void run() {
try {
EjbJarProject project = (EjbJarProject)ProjectManager.getDefault().findProject(helper.getProjectDirectory());
UpdateHelper updateHelper = project.getUpdateHelper();
EditableProperties ep = helper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
String finalPlatformName = platformName;
if (finalPlatformName == null) {
JavaPlatform platform = PreferredProjectPlatform.getPreferredPlatform(JavaPlatform.getDefault().getSpecification().getName());
if (platform != null) {
finalPlatformName = platform.getDisplayName();
}
}
PlatformUiSupport.storePlatform(ep, updateHelper, EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE, finalPlatformName, sourceLevel != null ? new SpecificationVersion(sourceLevel) : null);
helper.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
ProjectManager.getDefault().saveProject(ProjectManager.getDefault().findProject(helper.getProjectDirectory()));
} catch (IOException e) {
Exceptions.printStackTrace(e);
}
}
});
}
});
} catch (IOException e) {
Exceptions.printStackTrace(e);
}
}
}