|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.spi.project.support;
import java.beans.PropertyChangeListener;
import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.event.ChangeListener;
import org.netbeans.api.project.FileOwnerQuery;
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.api.queries.SharabilityQuery;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Utilities;
// XXX need test
/**
* Factories for standard {@link Sources} implementations.
* @author Jesse Glick
*/
public class GenericSources {
private GenericSources() {}
/**
* Lists only one source folder group, of {@link Sources#TYPE_GENERIC},
* containing the project directory, as by {@link #group}.
* @param p a project
* @return a simple sources implementation
*/
public static Sources genericOnly(Project p) {
return new GenericOnlySources(p);
}
private static final class GenericOnlySources implements Sources {
private final Project p;
GenericOnlySources(Project p) {
this.p = p;
}
public SourceGroup[] getSourceGroups(String type) {
if (type.equals(Sources.TYPE_GENERIC)) {
return new SourceGroup[] {
group(p, p.getProjectDirectory(), "generic", // NOI18N
ProjectUtils.getInformation(p).getDisplayName(),
null, null),
};
} else {
return new SourceGroup[0];
}
}
public void addChangeListener(ChangeListener listener) {}
public void removeChangeListener(ChangeListener listener) {}
}
/**
* Default kind of source folder group.
* Contains everything inside the supplied root folder which belongs to the
* supplied project and is considered sharable by VCS.
* @param p a project
* @param rootFolder the root folder to use for sources
* @param name a code name for the source group
* @param displayName a display name for the source group
* @param icon a regular icon to use for the source group, or null
* @param openedIcon an opened variant icon to use, or null
*/
public static SourceGroup group(Project p, FileObject rootFolder, String name, String displayName, Icon icon, Icon openedIcon) {
return new Group(p, rootFolder, name, displayName, icon, openedIcon);
}
private static final class Group implements SourceGroup {
private final Project p;
private final FileObject rootFolder;
private final String name;
private final String displayName;
private final Icon icon;
private final Icon openedIcon;
Group(Project p, FileObject rootFolder, String name, String displayName, Icon icon, Icon openedIcon) {
this.p = p;
this.rootFolder = rootFolder;
this.name = name;
this.displayName = displayName;
this.icon = icon;
this.openedIcon = openedIcon;
}
public FileObject getRootFolder() {
return rootFolder;
}
public String getName() {
return name;
}
public String getDisplayName() {
return displayName;
}
public Icon getIcon(boolean opened) {
return opened ? icon : openedIcon;
}
public boolean contains(FileObject file) throws IllegalArgumentException {
if (file != rootFolder && !FileUtil.isParentOf(rootFolder, file)) {
throw new IllegalArgumentException();
}
if (FileOwnerQuery.getOwner(file) != p) {
return false;
}
File f = FileUtil.toFile(file);
if (f != null) {
// MIXED, UNKNOWN, and SHARABLE -> include it
return SharabilityQuery.getSharability(f) != SharabilityQuery.NOT_SHARABLE;
} else {
// Not on disk, include it.
return true;
}
}
public void addPropertyChangeListener(PropertyChangeListener l) {
// XXX should react to ProjectInformation changes
}
public void removePropertyChangeListener(PropertyChangeListener l) {
// XXX
}
public String toString() {
return "GenericSources.Group[name=" + name + ",rootFolder=" + rootFolder + "]"; // NOI18N
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.