blob: 08c021cf942dfcc664d5c7a00a256419598d4d58 [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.common;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.api.project.libraries.Library;
import org.netbeans.api.project.libraries.LibraryManager;
import org.netbeans.spi.project.support.ant.AntProjectHelper;
import org.netbeans.spi.project.support.ant.ReferenceHelper;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.URLMapper;
import org.openide.util.Exceptions;
/**
*
* @author Petr Hejl
* @since 1.21
*/
public final class SharabilityUtility {
public static final String DEFAULT_LIBRARIES_FILENAME = "nblibraries.properties";
private SharabilityUtility() {
super();
}
public static String getLibraryLocation(String librariesDir) {
String librariesDefinition = librariesDir;
if (librariesDefinition != null) {
if (!librariesDefinition.endsWith(File.separator)) {
librariesDefinition += File.separatorChar;
}
librariesDefinition += SharabilityUtility.DEFAULT_LIBRARIES_FILENAME;
}
return librariesDefinition;
}
/**
* Method makes sure that sharable project always has a correct version of
* CopyLibs library. As described in issue 146736 CopyLibs library
* was enhanced in NetBeans version 6.5 and needs to be automatically upgraded
* which is ensured by this method as well.
* @since org.netbeans.modules.java.api.common/1 1.5
*/
public static void makeSureProjectHasCopyLibsLibrary(final AntProjectHelper helper, final ReferenceHelper refHelper) {
if (!helper.isSharableProject() || refHelper.getProjectLibraryManager() == null) {
return;
}
ProjectManager.mutex().writeAccess(new Runnable() {
public void run() {
Library lib = refHelper.getProjectLibraryManager().getLibrary("CopyLibs");
if (lib == null) {
try {
refHelper.copyLibrary(LibraryManager.getDefault().getLibrary("CopyLibs")); // NOI18N
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
} else {
// #146736 - check that NB6.5 version of CopyLibs is available:
List<URL> roots = lib.getContent("classpath"); // NOI18N
// CopyFiles.class was not present in NB 6.1
boolean version61 = org.netbeans.spi.java.classpath.support.ClassPathSupport.
createClassPath(roots.toArray(new URL[roots.size()])).
findResource("org/netbeans/modules/java/j2seproject/copylibstask/CopyFiles.class") == null; // NOI18N
if (!version61) {
return;
}
// update 6.1 version of CopyLibs library to the latest one:
try {
refHelper.getProjectLibraryManager().removeLibrary(lib);
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
// perform removal of library files in separate try/catch:
// if removal fails we can still add CopyLibs library
try {
FileObject parent = null;
for (URL u : roots) {
URL u2 = FileUtil.getArchiveFile(u);
if (u2 != null) {
u = u2;
}
FileObject fo = URLMapper.findFileObject(u);
if (fo != null) {
if (parent == null) {
parent = fo.getParent();
}
fo.delete();
}
}
if (parent != null && parent.getChildren().length == 0 && parent.getNameExt().equals("CopyLibs")) { // NOI18N
parent.delete();
}
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
try {
// this should recreate latest version of library
refHelper.copyLibrary(LibraryManager.getDefault().getLibrary("CopyLibs")); // NOI18N
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
}
}
});
}
}