Include automation arguments and deeper folder searching for fiber link

folders.
master
sigonasr2 6 years ago
commit d74971613d
  1. 27
      CCSDFolderAnalyzer/.project
  2. BIN
      CCSDFolderAnalyzer/CCSD Folder Analyzer.jar
  3. 18
      CCSDFolderAnalyzer/projectBuilder.xml
  4. 324
      CCSDFolderAnalyzer/src/sig/ccsd/Analyzer.java
  5. 141
      CCSDFolderAnalyzer/src/sig/ccsd/CCSD.java
  6. 51
      CCSDFolderAnalyzer/src/sig/ccsd/CCSDComponent.java
  7. 7
      CCSDFolderAnalyzer/src/sig/ccsd/SelectAllButton.java
  8. 60
      CCSDFolderAnalyzer/src/sig/ccsd/TableRenderer.java
  9. 13
      CCSDFolderAnalyzer/src/sig/ccsd/Warning.java
  10. 20
      CCSDFolderAnalyzer/src/sig/ccsd/WarningLabel.java

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>CCSDFolderAnalyzer</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/New_Builder (8).launch</value>
</dictionary>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project CCSD Folder Analyzer">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required -->
<!--define folder properties-->
<property name="dir.buildfile" value="."/>
<property name="dir.workspace" value="${dir.buildfile}/.."/>
<property name="dir.jarfile" value="${dir.buildfile}"/>
<target name="create_run_jar">
<jar destfile="${dir.jarfile}/CCSD Folder Analyzer.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="sig.ccsd.Analyzer"/>
<attribute name="Class-Path" value="."/>
</manifest>
<fileset dir="${dir.jarfile}/bin"/>
</jar>
</target>
</project>

@ -0,0 +1,324 @@
package sig.ccsd;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
public class Analyzer {
public static String BASEPATH;
public static List<CCSD> ccsd_list = new ArrayList<CCSD>();
public static Analyzer ANALYZER;
public static boolean SILENT = false;
static void validate(File f) {
DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
String datestamp = dtf.format(LocalDateTime.now());
if (f==null) {
Analyzer.writetoFile(new StringBuilder("["+datestamp+"] null folder detected. THIS SHOULD NOT BE HAPPENING."), new File("error.log"));
} else
if (f.exists()) {
Analyzer.writetoFile(new StringBuilder("["+datestamp+"] Could not find folder "+f.getAbsolutePath()), new File("error.log"));
} else
if (!f.isDirectory()) {
Analyzer.writetoFile(new StringBuilder("["+datestamp+"] Location "+f.getAbsolutePath()+" is not a directory."), new File("error.log"));
}
}
public static void main(String[] args) {
File user_folder_path = null;
File results_folder_path = null;
for (int i=0;i<args.length;i++) {
String arg = args[i];
switch (i) {
case 0:{
user_folder_path = new File(arg);
validate(user_folder_path);
}break;
case 1:{
results_folder_path = new File(arg);
validate(results_folder_path);
}break;
default:{
if (arg.equalsIgnoreCase("silent")) {
SILENT=true;
System.out.println("Running in silent mode...");
}
}
}
}
final JFrame frame = new JFrame("CCSD Analyzer");
final JFrame warning_frame = new JFrame("CCSD Analyzer - Warnings");
ANALYZER = new Analyzer();
if (user_folder_path!=null && user_folder_path.exists() && user_folder_path.isDirectory()) {
BASEPATH = user_folder_path.getAbsolutePath();
} else {
JFileChooser j = new JFileChooser();
j.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
j.setDialogTitle("Select a folder containing all CCSD folders.");
while (BASEPATH==null) {
if (j.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
BASEPATH = j.getSelectedFile().getAbsolutePath();
}
}
}
List<File> directorylist = GetDirectories(BASEPATH);
ANALYZER.AnalyzeDirectories(directorylist);
//System.out.println(directorylist);
String[] columnlist = new String[]{
"CCSD","T&A","TSO","SAM","CLR","UNL","TSR","IER","EXR","DSR","RFU","MISC"
};
Object[][] objects = new Object[ANALYZER.ccsd_list.size()][];
int count=0;
for (CCSD c : ANALYZER.ccsd_list) {
System.out.println("S:"+c);
objects[count++] = c.getTableData();
}
//System.out.println(Arrays.deepToString(objects));
String[] warningcolumnlist = new String[]{
"CCSD","Component","Location","Warning Description"
};
Object[][] warningobjects = new Object[ANALYZER.GetWarningSize()][];
count=0;
for (CCSD c : ANALYZER.ccsd_list) {
for (Warning w : c.warnings) {
warningobjects[count++] =
new Object[]{
c.id,
"",
w.f,
w.type.desc
};
//System.out.print("count: "+count);
}
for (String s : c.map.keySet()) {
for (CCSDComponent cc : c.map.get(s)) {
for (Warning w : cc.warnings) {
warningobjects[count++] =
new Object[]{
c.id,
cc.label,
w.f,
w.type.desc
};
//System.out.print("count: "+count);
}
}
}
}
final JTable table = new JTable(objects,columnlist);
JButton button = new JButton("Select All");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
table.selectAll();
}
});
table.setAutoCreateRowSorter(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
table.setColumnSelectionAllowed(true);
table.setDefaultRenderer(Object.class, new TableRenderer());
JScrollPane scroll = new JScrollPane(table);
table.setFillsViewportHeight(true);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(scroll,BorderLayout.CENTER);
frame.getContentPane().add(button,BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
if (!SILENT) {
frame.setVisible(true);
}
JTable warning_table = new JTable(warningobjects,warningcolumnlist);
JButton fixbutton = new JButton("Create Missing Folders");
fixbutton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
CreateMissingFolders();
}
private void CreateMissingFolders() {
for (CCSD cc : Analyzer.ANALYZER.ccsd_list) {
for (Warning w : cc.warnings) {
if (w.type == WarningLabel.MISSING_FOLDER) {
w.f.mkdirs();
}
}
}
frame.dispose();
warning_frame.dispose();
//Analyzer.BASEPATH = null;
Analyzer.ANALYZER = null;
Analyzer.ccsd_list.clear();
Analyzer.main(new String[]{});
}
});
warning_table.setAutoCreateRowSorter(true);
warning_table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
warning_table.setColumnSelectionAllowed(true);
warning_table.setDefaultRenderer(Object.class, new TableRenderer());
warning_table.getColumnModel().getColumn(0).setWidth(120);
warning_table.getColumnModel().getColumn(1).setWidth(120);
warning_table.getColumnModel().getColumn(2).setWidth(320);
warning_table.getColumnModel().getColumn(3).setWidth(480);
JScrollPane warning_scroll = new JScrollPane(warning_table);
warning_table.setFillsViewportHeight(true);
warning_frame.getContentPane().setLayout(new BorderLayout());
warning_frame.getContentPane().add(warning_scroll,BorderLayout.CENTER);
warning_frame.getContentPane().add(fixbutton,BorderLayout.PAGE_END);
warning_frame.setSize(800, 600);
if (!SILENT) {
warning_frame.setVisible(true);
}
if (results_folder_path!=null && results_folder_path.exists() && results_folder_path.isDirectory()) {
StringBuilder sb_results1 = new StringBuilder();
StringBuilder sb_results2 = new StringBuilder();
for (int i=0;i<columnlist.length;i++) {
if (sb_results1.length()!=0) {
sb_results1.append("\t");
}
sb_results1.append(columnlist[i]);
}
for (int i=0;i<objects.length;i++) {
sb_results1.append("\n");
Object[] data = objects[i];
for (int j=0;j<data.length;j++) {
if (j!=0) {
sb_results1.append("\t");
}
sb_results1.append((String)data[j]);
}
}
Analyzer.writetoFile(sb_results1,new File(results_folder_path,"ccsd_results.txt"));
for (int i=0;i<warningcolumnlist.length;i++) {
if (sb_results2.length()!=0) {
sb_results2.append("\t");
}
sb_results2.append(warningcolumnlist[i]);
}
for (int i=0;i<warningobjects.length;i++) {
sb_results2.append("\n");
Object[] data = warningobjects[i];
for (int j=0;j<data.length;j++) {
if (j!=0) {
sb_results2.append("\t");
}
if (data[j] instanceof File) {
sb_results2.append(((File)(data[j])).getAbsolutePath());
} else {
sb_results2.append((String)data[j]);
}
}
}
Analyzer.writetoFile(sb_results2,new File(results_folder_path,"warning_results.txt"));
}
}
public static void writeToFile(StringBuilder data, File filename, boolean append) {
File file = filename;
try {
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file,append);
PrintWriter pw = new PrintWriter(fw);
pw.print(data.toString());
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writetoFile(StringBuilder data, File filename) {
Analyzer.writeToFile(data, filename, false);
}
private int GetWarningSize() {
int warnings=0;
for (CCSD c : ccsd_list) {
warnings+=c.warnings.size();
for (String s : c.map.keySet()) {
for (CCSDComponent cc : c.map.get(s)) {
warnings+=cc.warnings.size();
}
}
}
return warnings;
}
public static List<File> GetDirectories(String basepath) {
File[] filelist = new File(basepath).listFiles();
List<File> directorylist = new ArrayList<File>();
if (filelist!=null) {
for (File f : filelist) {
if (f!=null && f.isDirectory() && !f.isFile()) {
directorylist.add(f);
}
}
}
return directorylist;
}
void AnalyzeDirectories(List<File> directories) {
JFrame progressmeter = new JFrame("Progress Meter");
JProgressBar progressbar = new JProgressBar(0,directories.size());
if (!SILENT) {
progressbar.setStringPainted(true);
progressmeter.getContentPane().setLayout(new BorderLayout());
progressmeter.getContentPane().add(progressbar, BorderLayout.CENTER);
progressmeter.setSize(240,120);
progressmeter.setVisible(true);
}
int count=0;
for (File f : directories) {
ccsd_list.add(new CCSD(f));
if (!SILENT) {
progressbar.setValue(++count);
}
}
for (int i=0;i<ccsd_list.size();i++) {
CCSD c = ccsd_list.get(i);
if (c.toBeRemoved) {
ccsd_list.remove(i--);
}
}
if (!SILENT) {
progressmeter.dispose();
}
}
}

@ -0,0 +1,141 @@
package sig.ccsd;
import java.awt.Color;
import java.awt.Component;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class CCSD{
String id;
File file;
HashMap<String,List<CCSDComponent>> map = new HashMap<String,List<CCSDComponent>>();
List<Warning> warnings = new ArrayList<Warning>();
public static String[] map_req_list = new String[]{
"T&A","TSO","IER","EXR","DSR","SAM","MISC","CLR","UNL","TSR","RFU","REPORTS"
};
boolean toBeRemoved=false;
public CCSD(File f) {
if (f.getName().equalsIgnoreCase("FIBER LINK")) {
List<File> directories = Analyzer.GetDirectories(f.getAbsolutePath());
for (File ff : directories) {
Analyzer.ccsd_list.add(new CCSD(ff));
}
toBeRemoved=true;
} else {
id = RemoveErroneousData(f.getName());
this.file = f;
PopulateHashMap();
IterateThroughDirectories();
System.out.println(this);
}
}
private void IterateThroughDirectories() {
List<File> directorylist = Analyzer.GetDirectories(file.getAbsolutePath());
for (File f : directorylist) {
String actualname = f.getName();
String[] wrong_location_list = new String[]{"IER","EXR","DSR","RFU"};
if (!CheckIfExistsInMapAndAddToComponentList(f, actualname, wrong_location_list)) {
String fixedname = RemoveErroneousData(actualname);
if (!CheckIfExistsInMapAndAddToComponentList(f, fixedname, wrong_location_list)) {
warnings.add(new Warning(f,WarningLabel.EXTRA_FILES));
} else {
warnings.add(new Warning(f,WarningLabel.TYPO));
}
}
}
for (String s : map.keySet()) {
if (map.get(s).size()==0) {
String[] wrong_location_list = new String[]{"IER","EXR","DSR","RFU"};
boolean belongsInReport = false;
for (String ss : wrong_location_list) {
if (ss.equalsIgnoreCase(s)) {
belongsInReport=true;
break;
}
}
File newfile;
if (belongsInReport) {
newfile = new File(new File(file.getAbsolutePath(),"REPORTS"),s);
} else {
newfile = new File(file.getAbsolutePath(),s);
}
warnings.add(new Warning(newfile,WarningLabel.MISSING_FOLDER));
}
}
}
private boolean CheckIfExistsInMapAndAddToComponentList(File f, String actualname, String[] wrong_location_list) {
if (map.containsKey(actualname)) {
List<CCSDComponent> tempmap = map.get(actualname);
CCSDComponent cc = new CCSDComponent(f,this);
tempmap.add(cc);
map.put(actualname, tempmap);
for (String s : wrong_location_list) {
if (actualname.equalsIgnoreCase(s)) {
cc.warnings.add(new Warning(f,WarningLabel.WRONG_LOCATION));
}
}
return true;
}
return false;
}
private void PopulateHashMap() {
for (String s : map_req_list) {
map.put(s, new ArrayList<CCSDComponent>());
}
}
public static String RemoveErroneousData(String name) {
for (int i=0;i<name.length();i++) {
if (!ComposedOfAlphanumbericCharacters(name, i)) {
name = name.substring(0,i);
}
}
//System.out.println("Created CCSD with id "+name+".");
return name;
}
public static boolean ComposedOfAlphanumbericCharacters(String name, int i) {
return (name.charAt(i)>='0' && name.charAt(i)<='9') ||
(name.charAt(i)>='A' && name.charAt(i)<='Z') ||
(name.charAt(i)>='a' && name.charAt(i)<='z') || name.charAt(i)=='&';
}
public String toString() {
StringBuilder sb = new StringBuilder("CCSD{\n");
sb.append(" "+id+" ("+warnings.size()+" warnings):\n");
for (String s : map.keySet()) {
int count=0;
for (CCSDComponent cc : map.get(s)) {
sb.append(" "+cc.label+"["+(count++)+"]: "+cc.filelist.size()+" files, "+cc.warnings.size()+" warnings\n");
}
}
sb.append("}");
return sb.toString();
}
public Object[] getTableData() {
return new Object[]{id,
GetOutput("T&A"),
GetOutput("TSO"),
GetOutput("SAM"),
GetOutput("CLR"),
GetOutput("UNL"),
GetOutput("TSR"),
GetOutput("IER"),
GetOutput("EXR"),
GetOutput("DSR"),
GetOutput("RFU"),
GetOutput("MISC"),
};
}
private Object GetOutput(String string) {
if (map.get(string).size()==0) {
return "DOES NOT EXIST";
} else
if (map.get(string).size()>1){
return "DUPLICATE";
} else {
return map.get(string).get(0).filelist.size()+"";
}
}
}

@ -0,0 +1,51 @@
package sig.ccsd;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class CCSDComponent {
File f;
String label;
CCSD ccsd_parent;
List<Warning> warnings = new ArrayList<Warning>();
List<File> filelist = new ArrayList<File>();
public CCSDComponent(File f, CCSD parent) {
this.ccsd_parent = parent;
this.f=f;
this.label = CCSD.RemoveErroneousData(f.getName());
File[] files = f.listFiles();
for (File f1 : files) {
if (f1.isFile() || f1.isDirectory()) {
filelist.add(f1);
if (f1.isDirectory()) {
if (ccsd_parent.map.containsKey(f1.getName())) {
List<CCSDComponent> list = ccsd_parent.map.get(f1.getName());
CCSDComponent cc = new CCSDComponent(f1,ccsd_parent);
list.add(cc);
if (list.size()>1) {
warnings.add(new Warning(f,WarningLabel.DUPLICATE_FOLDER));
}
ccsd_parent.map.put(f1.getName(), list);
boolean found=false;
if (label.equalsIgnoreCase("REPORTS")) {
String[] correct_location_list = new String[]{"IER","EXR","DSR","RFU"};
for (String s : correct_location_list) {
if (s.equalsIgnoreCase(f1.getName())) {
found=true;
}
}
}
if (!found) {
cc.warnings.add(new Warning(f1,WarningLabel.WRONG_LOCATION));
}
}
}
}
}
if (filelist.size()==0) {
warnings.add(new Warning(f,WarningLabel.MISSING_FILES));
}
}
}

@ -0,0 +1,7 @@
package sig.ccsd;
import javax.swing.JButton;
public class SelectAllButton extends JButton{
}

@ -0,0 +1,60 @@
package sig.ccsd;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class TableRenderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Color ccc = Color.WHITE;
if(column!=0 && value instanceof String) {
String s = (String)value;
switch (s.trim()) {
case "DOES NOT EXIST":{
ccc=Color.RED;
}break;
case "DUPLICATE":{
ccc=Color.MAGENTA;
}break;
case "0":{
ccc=Color.YELLOW;
}break;
default:{
ccc=Color.GREEN;
}
}
}
if (table.getValueAt(row, 3) instanceof String) {
String s = (String)table.getValueAt(row, 3);
if (s.equalsIgnoreCase(WarningLabel.DUPLICATE_FOLDER.desc)) {
ccc = Color.MAGENTA;
} else
if (s.equalsIgnoreCase(WarningLabel.EXTRA_FILES.desc)) {
ccc = Color.CYAN;
} else
if (s.equalsIgnoreCase(WarningLabel.MISSING_FILES.desc)) {
ccc = Color.YELLOW;
} else
if (s.equalsIgnoreCase(WarningLabel.TYPO.desc)) {
ccc = Color.GREEN;
} else
if (s.equalsIgnoreCase(WarningLabel.MISSING_FOLDER.desc)) {
ccc = Color.RED;
} else
if (s.equalsIgnoreCase(WarningLabel.WRONG_LOCATION.desc)) {
ccc = new Color(120,120,255);
}
}
if (isSelected) {
ccc = new Color((int)(ccc.getRed()/1.5f),(int)(ccc.getGreen()/1.5f),(int)(ccc.getBlue()/1.5f));
} else {
ccc = new Color((int)Math.min(ccc.getRed()+64,255),(int)Math.min((ccc.getGreen()+64),255),(int)Math.min((ccc.getBlue()+64),255));
}
c.setBackground(ccc);
return c;
}
}

@ -0,0 +1,13 @@
package sig.ccsd;
import java.io.File;
public class Warning {
WarningLabel type;
File f;
public Warning(File f, WarningLabel type) {
this.f=f;
this.type=type;
}
}

@ -0,0 +1,20 @@
package sig.ccsd;
public enum WarningLabel {
WRONG_LOCATION("The folder is located in the wrong place."),
TYPO("The folder is not named properly."),
MISSING_FILES("There are no files located in this folder."),
EXTRA_FILES("There are extra folders that don't belong in this folder."),
DUPLICATE_FOLDER("There is already a copy of this folder elsewhere for this CCSD."),
MISSING_FOLDER("Folder does not exist in this location.");
String desc;
WarningLabel(String desc) {
this.desc=desc;
}
public String getDescription() {
return desc;
}
}
Loading…
Cancel
Save