--- a/tool/src/spdxlib/FileInfo.java
+++ b/tool/src/spdxlib/FileInfo.java
@@ -70,6 +70,7 @@
/**
* Each file can have one or more license applicable.
* This method adds them up as needed.
+ * @param tag
*/
public void addLicense(TagValue tag){
licenseInfoInFile.add(tag);
@@ -77,35 +78,143 @@
@Override
public String toString(){
+ String fileName = getName();
+
+ String licenseText = getLicense();
+
+ if(licenseText.isEmpty() == false){
+ fileName += " (" + licenseText + ")";
+ }
+
+ // output the final result
+ return fileName;
+ }
+
+ /**
+ * Returns the file name without unwanted chars
+ * @return the file name of this object
+ */
+ public String getName(){
+ // get the name in un-processed state (still with slashes)
+ String fileName = tagFileName.toString();
+ // remove slashes from the file name
+ if(fileName.contains("/")){
+ return fileName.substring(fileName.lastIndexOf("/")+1);
+ }
+
+ // all done
+ return fileName;
+ }
+
+
+
+ /**
+ * This method will pick on a given FileInfo object and extract the relevant
+ * licensing details.
+ * @return A string text with a list of licenses when available. If no
+ * license was found, it will return null
+ */
+ public String getLicense(){
+ // where we store the results from this analysis
String licenseOutput = "";
- // priority is the case where a human concludes a license
+
+ // priority is the case where a human concludes a license
if((this.tagLicenseConcluded != null)
&&(tagLicenseConcluded.toString().equals("NOASSERTION")!=true)){
// no need to proceed
- return tagFileName.toString()
- + " ("+ tagLicenseConcluded.toString() +")";
- }
-
+ return tagLicenseConcluded.toString();
+ }
+
+
// second priority are licenses detected inside the code
if(licenseInfoInFile.size()>0){
-
- for(TagValue tag : licenseInfoInFile){
+ // we need to count the valid licenses
+ int counterLicense = 0;
+ // go through all licenses listed
+ for(TagValue tag : licenseInfoInFile){
+ // should this license be ignored?
+ if(tag.toString().equalsIgnoreCase("none")){
+ continue;
+ }
+ // valid license, increase the counter
+ counterLicense++;
+ // add the license to the printable text viewed by user
licenseOutput = licenseOutput.concat(", " + tag.toString());
}
- // remove the first comma added throught our loop
- licenseOutput = " (" + licenseOutput.substring(2) + ")";
- }
-
- // output the final result
- return tagFileName.toString() + licenseOutput;
- }
-
- /**
- * Returns the file name without unwanted chars
- * @return the file name of this object
- */
- public String getName(){
- return tagFileName.toString();
- }
+ // don't display text if no license was accounted
+ if(counterLicense == 0){
+ licenseOutput = "";
+ }else{
+ // remove the first comma added throught our loop
+ licenseOutput = licenseOutput.substring(2);
+ }
+ }
+ return licenseOutput;
+ }
+// String licenseOutput = "";
+// // priority is the case where a human concludes a license
+// if((tagLicenseConcluded != null)
+// &&(tagLicenseConcluded.toString().equals("NOASSERTION")!=true)){
+// // no need to proceed
+// return
+// //file.tagFileName.toString()
+// //+ " ("+
+// tagLicenseConcluded.toString()
+// //+")"
+// ;
+// }
+//
+// // second priority are licenses detected inside the code
+// if(licenseInfoInFile.size()>0){
+//
+// for(TagValue tag : licenseInfoInFile){
+// licenseOutput = licenseOutput.concat(", " + tag.toString());
+// }
+// // remove the first comma added throught our loop
+// licenseOutput = " (" + licenseOutput.substring(2) + ")";
+// }
+// return licenseOutput;
+// }
+
+
+ /**
+ * When given a file, this method checks if it has either a reported or
+ * concluded license. The method is necessary since sometimes one of these
+ * fields is present using infomation like "NOASSERTION" which really
+ * becomes a problem to normalize.
+ * @param file A FileInfo object with the information that we will analyze
+ * @return
+ */
+ public Boolean hasLicense(){
+
+ // do we have a license concluded for this file?
+ if(tagLicenseConcluded != null){
+ // get the text from the license that was concluded
+ String licenseText = tagLicenseConcluded.toString();
+ // a lot of trouble, but necessary to find out what is happening
+ if( (licenseText.equals("NONE")== false)
+ && (licenseText.equals("NOASSERTION")== false)){
+ // we have at least one license concluded. Good enough
+ return true;
+ }
+ }
+
+ // are there any licenses inside this file?
+ for(TagValue licenseTag : licenseInfoInFile){
+ String licenseText = licenseTag.toString();
+ // excluse the cases that shouldn't count for this metric
+ if(licenseText.equals("NONE")){
+ continue;
+ }
+ if(licenseText.equals("NOASSERTION")){
+ continue;
+ }
+ // we just need to find one license to make our day happy! :-)
+ return true;
+ }
+ // no licenses, let's leave
+ return false;
+ }
+
}