/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.nbstudio.project;
import java.awt.Image;
import javax.swing.Action;
import org.nbstudio.core.Connection;
import org.netbeans.spi.project.ui.LogicalViewProvider;
import org.netbeans.spi.project.ui.support.CommonProjectActions;
import org.netbeans.spi.project.ui.support.NodeFactorySupport;
import org.openide.filesystems.FileObject;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObjectNotFoundException;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
import org.openide.nodes.FilterNode;
import org.openide.nodes.Node;
import org.openide.util.Exceptions;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;
import org.openide.util.lookup.Lookups;
import org.openide.util.lookup.ProxyLookup;
/**
*
* @author daimor
*/
public class CacheProjectLogicalView implements LogicalViewProvider {
private final CacheProject project;
private final Connection conn;
private final String projectName;
public CacheProjectLogicalView(CacheProject project) {
this.project = project;
this.projectName = project.getProjectDirectory().getName();
this.conn = project.getConnection();
// FileObject projectFO = project.getProjectDirectory();
// try {
// CacheFileSystem fs;
// fs = (CacheFileSystem) projectFO.getFileSystem();
// this.conn = fs.getConnection();
// } catch (FileStateInvalidException ex) {
// throw new InternalError("Error open project");
// }
}
@Override
public Node createLogicalView() {
try {
FileObject projectDirectory = project.getProjectDirectory();
DataFolder projectFolder = DataFolder.findFolder(projectDirectory);
Node nodeOfProjectFolder = projectFolder.getNodeDelegate();
return new ProjectNode(nodeOfProjectFolder, project);
} catch (DataObjectNotFoundException donfe) {
Exceptions.printStackTrace(donfe);
return new AbstractNode(Children.LEAF);
}
}
@Override
public Node findPath(Node root, Object target) {
return null;
}
private final class ProjectNode extends FilterNode {
final CacheProject project;
public ProjectNode(Node node, CacheProject project) throws DataObjectNotFoundException {
super(node,
NodeFactorySupport.createCompositeChildren(project, "Projects/org-nbstudio-project/Nodes"),
// new FilterNode.Children(node),
new ProxyLookup(
new Lookup[]{
Lookups.singleton(project),
node.getLookup()
}
));
this.project = project;
}
@Override
public Action[] getActions(boolean arg0) {
return new Action[]{
CommonProjectActions.newFileAction(),
CommonProjectActions.copyProjectAction(),
CommonProjectActions.deleteProjectAction(),
CommonProjectActions.closeProjectAction(),
CommonProjectActions.customizeProjectAction()
};
}
@Override
public Image getIcon(int type) {
return ImageUtilities.loadImage("resources/prjFilesIcon.gif");
}
@Override
public Image getOpenedIcon(int type) {
return getIcon(type);
}
@Override
public String getDisplayName() {
return project.getProjectDirectory().getName();
}
}
// class ProjectNodes extends Children.Array {
//
// public ProjectNodes() {
// }
//
// @Override
// protected void addNotify() {
// ConnectionFolderNode[] nodesArr = new ConnectionFolderNode[2];
// if (project.getProjectDirectory().isRoot()) {
// try {
// nodesArr[0] = new ClassesNode(conn);
// nodesArr[1] = new RoutinesNode(conn);
// } catch (IntrospectionException ex) {
// }
// } else {
// try {
// List<CacheFileObject> classFiles = new ArrayList<>();
// List<CacheFileObject> routineFiles = new ArrayList<>();
// CacheFileSystem fs = conn.getFileSystem();
// CacheFileObject root = (CacheFileObject) fs.getRoot();
//
// CacheQuery q = new CacheQuery(conn.getAssociatedConnection(), "%Studio.Project", "ProjectItemsList");
// java.sql.ResultSet rs = q.execute(new Object[]{projectName});
// while (rs.next()) {
// String fileName = rs.getString("Name");
// String fileType = rs.getString("Type");
// CacheFileObject fo;
//
// if (null != fileType) {
// switch (fileType) {
// case "MAC":
// fo = new CacheFileObject(fs, root, fileName);
// routineFiles.add(fo);
// break;
// case "CLS":
// fo = new CacheFileObject(fs, root, fileName + ".cls");
// classFiles.add(fo);
// break;
// }
// }
// }
//
// nodesArr[0] = new ProjectSubNodes(conn, "Classess", classFiles);
// nodesArr[1] = new ProjectSubNodes(conn, "Routines", routineFiles);
// } catch (CacheException | IntrospectionException | SQLException | DataObjectNotFoundException ex) {
// }
// }
// this.add(nodesArr);
// }
// }
// class ProjectSubNodes extends ConnectionFolderNode {
//
// public ProjectSubNodes(Connection conn, String name, List<CacheFileObject> files) throws IntrospectionException, DataObjectNotFoundException {
// super(conn, name);
//
// Children.Array children = new Children.Array();
// ArrayList<Node> nodes = new ArrayList<>();
//
// for (CacheFileObject file : files) {
// nodes.add(DataObject.find(file).getNodeDelegate());
// }
//
// children.add(nodes.toArray(new Node[nodes.size()]));
// setChildren(children);
// }
// }
}