--- a/tool/src/main/actions.java
+++ b/tool/src/main/actions.java
@@ -13,22 +13,41 @@
package main;
+import GUI.NodeType;
+import GUI.TreeNodeSPDX;
+import GUI.swingUtils;
+import static GUI.swingUtils.nodeCreate;
import definitions.is;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.swing.JTree;
import script.log;
import spdxlib.SPDXfile;
+import static utils.files.findFilesFiltered;
public class actions {
+
+ /**
+ * This method adds up all the licenses found on the licenses folder
+ */
+ public static void addLicenses(){
+ File folder = new File(core.getWorkFolder(), "licenses");
+ ArrayList<File> files = utils.files.findFilesFiltered(folder, ".java", 2);
+ for(File file : files){
+ core.script.runJava(file, null, is.license);
+ }
+ }
/**
* Find all files within a given folder, return the respective
* details such as hashes and other details relevant for SPDX processing
* @param folder The folder location where we will look for SPDX files
+ * @return
*/
public static ArrayList<SPDXfile> findSPDX(File folder){
// only find the SPDX documents with .SPDX extension
@@ -65,16 +84,231 @@
return list;
}
+
+ /**
+ * This is a critical method. It will look for all SPDX files inside a given
+ * folder and them as tree nodes
+ * @param tree
+ */
+ public static void addTreeSPDX(JTree tree) {
+ // only find the SPDX documents with .SPDX extension
+ ArrayList<File> fileList = utils.files
+ .findFilesFiltered(core.getProductsFolder(), ".spdx", 25);
+
+ if(fileList.isEmpty()){
+ // no need to continue, just leave here
+ return;
+ }
+
+ // get the root node where we have our treeview
+ TreeNodeSPDX rootNode = swingUtils.getRootNode(tree);
+
+ // create the node for hosting our list of SPDX documents
+ TreeNodeSPDX softwareNode = nodeCreate(
+ "Software"
+ //+ " (" + fileList.size() + ")"
+ , NodeType.other, rootNode);
+ // add the identification to this tag
+ softwareNode.id = "Software";
+ softwareNode.setIcon("box-label.png");
+
+ // create a tree based on folder tree on disk
+ findFolders(core.getProductsFolder(), 25, softwareNode);
+
+ }
+
/**
- * This method adds up all the licenses found on the licenses folder
- */
- public static void addLicenses(){
- File folder = new File(core.getWorkFolder(), "licenses");
- ArrayList<File> files = utils.files.findFilesFiltered(folder, ".java", 2);
- for(File file : files){
- core.script.runJava(file, null, is.license);
- }
- }
-
+ * Find all subfolders in a given folder.
+ * @param where A file object of the start folder
+ * @param maxDeep How deep is the crawl allowed to proceed
+ * @param rootNode
+// * @return An array containing all the found files, returns null if none is
+// * found
+ * @return the number of relevant children that should be accounted
+ */
+ public static int findFolders(File where, int maxDeep
+ , TreeNodeSPDX rootNode){
+
+ // get a list of the current files on this folder
+ File[] files = where.listFiles();
+
+ // we use this for counting files that were added
+ int count = 0;
+
+ // go through all the files/folders that were listed
+ if(files != null)
+ for (File file : files) {
+ // only accept folders, ignore files
+ if ( (file.isDirectory())
+ &&( maxDeep-1 > 0 ) ){
+ String folderName = file.getName();
+ // ignore SVN folders
+ if(folderName.equals(".svn")){
+ continue;
+ }
+ // create a new node for the current folder
+ TreeNodeSPDX node = new TreeNodeSPDX(folderName);
+ node.setIcon("folder-horizontal.png");
+ node.setIconWhenSelected("folder-horizontal-open.png");
+ node.nodeType = NodeType.folder;
+ node.id = folderName;
+ // we want to track if something new was added
+ int oldCount = count;
+ // do the recursive crawling
+ count += findFolders(file, maxDeep-1, node);
+ // only add this node if we found something interesting there
+ if(count > oldCount){
+ // add the node as a child of the root node
+ rootNode.add(node);
+ }
+ }
+
+ // perhaps we can add this file if it is an SPDX?
+ if(file.isFile()){
+ String fileName = file.getName();
+ // we only want files with an SPDX extension
+ if(file.getName().endsWith(".spdx")==false){
+ continue;
+ }
+ // we don't generic SPDX files here
+ if(file.getName().endsWith("-info.spdx")){
+ continue;
+ }
+ // create the new node
+ TreeNodeSPDX node = new TreeNodeSPDX(fileName);
+ node.setIcon("box.png");
+ node.nodeType = NodeType.SPDX;
+ node.id = fileName;
+ // set here what we want to happen when the user clicks on it
+ File scriptFile = new File(core.getPluginsFolder(), "/spdx/show.java");
+ node.scriptFile = scriptFile;
+ node.scriptFolder = scriptFile.getParentFile();
+ node.scriptMethod = "summary";
+ // create the correct parameters
+ String relativePath =
+ file.getAbsolutePath().replace(core.getProductsFolder().getAbsolutePath(), "");
+ node.scriptParameters.add(new String[]{param.spdx, relativePath});
+ // add it up
+ rootNode.add(node);
+ count++;
+ }
+
+ }
+ // how many files were found here?
+ rootNode.setCounter(count);
+ return count;
+ }
+
+ /**
+ * This is a critical method. It will look for all SPDX files inside a given
+ * folder and them as tree nodes
+ * @param tree
+ */
+ public static void addTreeSPDXOld(JTree tree) {
+ // only find the SPDX documents with .SPDX extension
+ ArrayList<File> initialFileList = utils.files
+ .findFilesFiltered(core.getProductsFolder(), ".spdx", 25);
+
+ if(initialFileList.isEmpty()){
+ // no need to continue, just leave here
+ return;
+ }
+
+ // this is used for filtering duplicate folders in the initial indexing
+ ArrayList<File> tempFolderList = new ArrayList();
+ // where are our spdx files stored?
+ String baseFolder = core.getProductsFolder().getAbsolutePath();
+ // get the root node where we have our treeview
+ TreeNodeSPDX rootNode = swingUtils.getRootNode(tree);
+
+ // where we place all results after being filtered
+ ArrayList<File> fileList = new ArrayList();
+ // iterate all files in our array that were found as products
+ for(File file: initialFileList){
+ // now we need to filter what we don't want to have in our array
+ String filename = file.getName();
+ // we don't need SVN files, ignore them completely
+ if(filename.endsWith(".svn-base")){
+ continue;
+ }
+ // add this file to our final list
+ fileList.add(file);
+ // now take care of the folder where this file was placed
+ // get only the folder base, be careful with path separators here
+ String folderName = file.getParent().replace(baseFolder, "");
+ // no need to add in case the folder is the root
+ if(folderName.isEmpty()){
+ continue;
+ }
+ File folder = file.getParentFile();
+ // no need to continue in case this folder was already added before
+ if(tempFolderList.contains(folder)){
+ continue;
+ }
+ // add it up
+ tempFolderList.add(folder);
+ }
+
+ // create the node for hosting our list of SPDX documents
+ TreeNodeSPDX softwareNode = nodeCreate(
+ "Software (" + fileList.size() + ")"
+ , NodeType.other, rootNode);
+ // add the identification to this tag
+ softwareNode.id = "Software";
+ softwareNode.setIcon("box.png");
+
+ // we need to map a list of spdx folders and files
+ HashMap<File, TreeNodeSPDX> folderList = new HashMap();
+ // first pass to add up all nodes and folders
+ for(File folder : tempFolderList){
+ TreeNodeSPDX node = new TreeNodeSPDX(folder.getName());
+ node.setIcon("envelope.png");
+ folderList.put(folder, node);
+ }
+
+
+
+ // second pass to add them all up on the tree view
+ for(File folder : folderList.keySet()){
+ TreeNodeSPDX node = folderList.get(folder);
+ softwareNode.add(node);
+ }
+
+
+
+ //System.exit(-1981);
+ }
+
+
+//
+// // iterate through the final list, build the folder list, add tree nodes
+// for(File file: fileList){
+// // get only the folder base, be careful with path separators here
+// String folderName = file.getParent().replace(baseFolder, "");
+// // no need to add in case the folder is the root
+// if(folderName.isEmpty()){
+// continue;
+// }
+// // no need to continue in case this folder was already added before
+// if(folderList.containsKey(folderName)){
+// continue;
+// }
+//
+// String simpleFolderName = file.getParentFile().getName();
+//
+// // create the node for hosting our list of SPDX documents
+// TreeNodeSPDX node = nodeCreate(
+// simpleFolderName // get the normal name (no path components)
+// , NodeType.folder // just a normal folder
+// , rootNode); // add
+// // add the identification to this tag
+// softwareNode.id = "";
+//
+// // build up our list of folders
+// System.err.println(folderName);
+// folderList.put(folderName, rootNode);
+// }
+
+
}