package org.jkan997.slingbeans.nbprojects.maven;
import java.awt.Image;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.Action;
import org.jkan997.slingbeans.helper.LogHelper;
import org.jkan997.slingbeans.nbprojects.maven.actions.OpenFilterAction;
import org.jkan997.slingbeans.nbprojects.maven.actions.RefreshAction;
import org.jkan997.slingbeans.nbprojects.maven.actions.VltImportAction;
import org.jkan997.slingbeans.slingfs.local.LocalFileSystem;
import org.netbeans.api.progress.ProgressUtils;
import org.netbeans.api.project.Project;
import org.openide.filesystems.FileUtil;
import org.openide.loaders.DataFolder;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.nodes.NodeAdapter;
import org.openide.nodes.NodeEvent;
import org.openide.util.ImageUtilities;
public class LocalSlingRootNode extends LocalAbstractNode {
public static final String IMAGE = "org/jkan997/slingbeans/nbprojects/maven/sling.png";
private Action[] actionArr = null;
private RefreshAction refreshAction;
private VltImportAction vltImportAction;
private LocalFileSystem fileSystem;
private Project project;
private OpenFilterAction openFilterAction;
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
public LocalSlingRootNode(Children children) {
super(children != null ? children : Children.LEAF);
initActions();
LogHelper.logInfo(this, "Local Root Node adding listener!");
this.addNodeListener(new NodeAdapter() {
@Override
public void nodeDestroyed(NodeEvent ev) {
LogHelper.logInfo(this, "Local Root Node Destroyed!");
}
});
}
private void initActions() {
refreshAction = new RefreshAction(this);
vltImportAction = new VltImportAction(this);
openFilterAction = new OpenFilterAction(this);
}
public String getContentPath() {
return fileSystem.getContentPath();
}
@Override
public Action[] getActions(boolean popup) {
if (actionArr == null) {
List<Action> actions = new ArrayList<Action>();
actions.add(refreshAction);
actions.add(vltImportAction);
actions.add(openFilterAction);
actionArr = actions.toArray(new Action[]{});
}
return actionArr;
}
public final static String SLING_CONTENT = "Sling Content";
@Override
public String getDisplayName() {
return SLING_CONTENT;
}
@Override
public Image getIcon(int type) {
DataFolder root = DataFolder.findFolder(FileUtil.getConfigRoot());
LogHelper.logInfo(LocalSlingRootNode.class, "Project path " + root.getPrimaryFile().getPath());
Image original = root.getNodeDelegate().getIcon(type);
return ImageUtilities.loadImage(IMAGE);
}
@Override
public Image getOpenedIcon(int type) {
/*DataFolder root = DataFolder.findFolder(FileUtil.getConfigRoot());
Image original = root.getNodeDelegate().getIcon(type);
return ImageUtilities.mergeImages(original,
ImageUtilities.loadImage(IMAGE), 7, 7);*/
return getIcon(type);
}
public LocalFileSystem getLocalFileSystem() {
return fileSystem;
}
public void setFileSystem(LocalFileSystem fileSystem) {
this.fileSystem = fileSystem;
}
public void initChildren() {
LocalSlingNodeChildren children = new LocalSlingNodeChildren(fileSystem.getRootFileObject());
this.setChildren(children);
}
public void refresh() {
refresh(null);
}
public void refresh(final Runnable uiActionAfterRefresh) {
final Runnable loadWorkflowsTask = new Runnable() {
@Override
public void run() {
refreshAsync();
if (uiActionAfterRefresh != null) {
uiActionAfterRefresh.run();
}
}
};
ProgressUtils.runOffEventDispatchThread(loadWorkflowsTask, "Reading local FS", new AtomicBoolean(false), false);
}
public void refreshAsync() {
fileSystem.refresh();
initChildren();
}
public LocalFileSystem getFileSystem() {
return fileSystem;
}
public Node getNodeByPath(String[] pathArr) {
Node node = this;
boolean foundNode = false;
for (String pathPart : pathArr) {
foundNode = false;
Node[] nodes = node.getChildren().getNodes();
for (Node n : nodes) {
if (n.getDisplayName().equals(pathPart)) {
node = n;
foundNode = true;
break;
}
}
if (!foundNode) {
break;
}
}
return node;
}
}