/*
* license-updater - Copyright (c) 2012 MSF. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
package br.msf.commons.netbeans.util;
import br.msf.commons.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import org.apache.commons.lang.ArrayUtils;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.SourceGroup;
import org.netbeans.api.project.Sources;
import org.netbeans.api.project.ui.OpenProjects;
import org.openide.filesystems.FileObject;
import org.openide.loaders.DataObject;
import org.openide.util.Lookup;
import org.openide.util.Utilities;
/**
* <p>TODO
*
* @author Marcius da Silva da Fonseca (sf.marcius@gmail.com)
* @version 1.0
* @since license-updater-1.0
*/
public abstract class ProjectUtils {
public static Project getMainProject() {
return OpenProjects.getDefault().getMainProject();
}
public static Project getSelectedProject() {
return getSelectedProject(Utilities.actionsGlobalContext());
}
public static Project getSelectedProject(final Lookup context) {
Lookup.Result<Project> projectLookup = context.lookupResult(Project.class);
Project p = (projectLookup.allInstances().isEmpty()) ? null : projectLookup.allInstances().iterator().next();
if (p == null) {
DataObject packageNode = PackageUtils.getSelectedPackage(context);
if (packageNode != null) {
p = FileOwnerQuery.getOwner(packageNode.getPrimaryFile());
}
}
return p;
}
public static boolean hasOpenProjects() {
return CollectionUtils.isNotEmpty(getOpenProjects());
}
public static Collection<Project> getOpenProjects() {
Project[] open = OpenProjects.getDefault().getOpenProjects();
return ArrayUtils.isEmpty(open) ? CollectionUtils.EMPTY_COLLECTION : Arrays.asList(open);
}
public static ClassPath getSourceClassPath(final Project project) {
Sources sources = org.netbeans.api.project.ProjectUtils.getSources(project);
SourceGroup srcGroup = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA)[0];
return ClassPath.getClassPath(srcGroup.getRootFolder(), ClassPath.SOURCE);
}
public static ClasspathInfo getSourceClassPathInfo(final Project project) {
Sources sources = org.netbeans.api.project.ProjectUtils.getSources(project);
SourceGroup srcGroup = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA)[0];
return ClasspathInfo.create(srcGroup.getRootFolder());
}
public static Collection<JavaPackage> getSourcePackages(final Project project, final boolean includeRootPackage) {
return PackageUtils.getPackages(getSourceClassPath(project), includeRootPackage);
}
public static Collection<FileObject> getProjectFiles(final Project project, final FileType... types) {
Collection<FileObject> fileObjects = new ArrayList<FileObject>();
Sources srcs = org.netbeans.api.project.ProjectUtils.getSources(project);
SourceGroup[] srcGrps = srcs.getSourceGroups(Sources.TYPE_GENERIC);
for (SourceGroup srcGrp : srcGrps) {
fileObjects.addAll(FileObjectUtils.getFiles(srcGrp.getRootFolder(), true, types));
}
return fileObjects;
}
}