private String validateRow(Row row) {
   for (int i = 0; i < NUM_COLS; i++) {
     Cell cell = row.getCell(i);
     if (cell == null) {
       if (REQUIRED[i]) {
         return "Required cell "
             + HEADER_TITLES[i]
             + " missing for row "
             + String.valueOf(row.getRowNum());
       }
     } else {
       if (i == DECLARED_LICENSE_COL || i == CONCLUDED_LICENSE_COL) {
         try {
           SPDXLicenseInfoFactory.parseSPDXLicenseString(cell.getStringCellValue());
         } catch (SpreadsheetException ex) {
           if (i == DECLARED_LICENSE_COL) {
             return "Invalid declared license in row "
                 + String.valueOf(row.getRowNum())
                 + " detail: "
                 + ex.getMessage();
           } else {
             return "Invalid seen license in row "
                 + String.valueOf(row.getRowNum())
                 + " detail: "
                 + ex.getMessage();
           }
         }
       } else if (i == LICENSE_INFO_IN_FILES_COL) {
         String[] licenses =
             row.getCell(LICENSE_INFO_IN_FILES_COL).getStringCellValue().split(",");
         if (licenses.length < 1) {
           return "Missing licenss information in files";
         }
         for (int j = 0; j < licenses.length; j++) {
           try {
             SPDXLicenseInfoFactory.parseSPDXLicenseString(cell.getStringCellValue().trim());
           } catch (SpreadsheetException ex) {
             return "Invalid license information in row "
                 + String.valueOf(row.getRowNum())
                 + " detail: "
                 + ex.getMessage();
           }
         }
       }
       //				if (cell.getCellType() != Cell.CELL_TYPE_STRING) {
       //					return "Invalid cell format for "+HEADER_TITLES[i]+" for forw
       // "+String.valueOf(row.getRowNum());
       //				}
     }
   }
   return null;
 }
 private static void copyOrigins(OriginsSheet originsSheet, SPDXDocument analysis)
     throws InvalidSPDXAnalysisException {
   Date createdDate = originsSheet.getCreated();
   String created = format.format(createdDate);
   String[] createdBys = originsSheet.getCreatedBy();
   String creatorComment = originsSheet.getAuthorComments();
   SPDXCreatorInformation creator =
       new SPDXCreatorInformation(createdBys, created, creatorComment);
   String specVersion = originsSheet.getSPDXVersion();
   analysis.setSpdxVersion(specVersion);
   String dataLicenseId = originsSheet.getDataLicense();
   if (dataLicenseId == null
       || dataLicenseId.isEmpty()
       || dataLicenseId.equals(RdfToSpreadsheet.NOT_SUPPORTED_STRING)) {
     if (specVersion.equals(SPDXDocument.ONE_DOT_ZERO_SPDX_VERSION)) {
       dataLicenseId = SpdxRdfConstants.SPDX_DATA_LICENSE_ID_VERSION_1_0;
     } else {
       dataLicenseId = SpdxRdfConstants.SPDX_DATA_LICENSE_ID;
     }
   }
   SPDXStandardLicense dataLicense = null;
   try {
     dataLicense =
         (SPDXStandardLicense) SPDXLicenseInfoFactory.parseSPDXLicenseString(dataLicenseId);
   } catch (Exception ex) {
     try {
       dataLicense =
           (SPDXStandardLicense)
               SPDXLicenseInfoFactory.parseSPDXLicenseString(
                   SpdxRdfConstants.SPDX_DATA_LICENSE_ID);
     } catch (InvalidLicenseStringException e) {
       throw (new InvalidSPDXAnalysisException("Unable to get document license"));
     }
   }
   analysis.setDataLicense(dataLicense);
   analysis.setCreationInfo(creator);
 }
 public SPDXPackageInfo getPackageInfo(int rowNum) throws SpreadsheetException {
   Row row = sheet.getRow(rowNum);
   if (row == null) {
     return null;
   }
   Cell nameCell = row.getCell(NAME_COL);
   if (nameCell == null || nameCell.getStringCellValue().isEmpty()) {
     return null;
   }
   String error = validateRow(row);
   if (error != null && !error.isEmpty()) {
     throw (new SpreadsheetException(error));
   }
   String declaredName = nameCell.getStringCellValue();
   String machineName = row.getCell(MACHINE_NAME_COL).getStringCellValue();
   String sha1 = row.getCell(PACKAGE_SHA_COL).getStringCellValue();
   String sourceInfo;
   Cell sourceInfocol = row.getCell(SOURCE_INFO_COL);
   if (sourceInfocol != null) {
     sourceInfo = sourceInfocol.getStringCellValue();
   } else {
     sourceInfo = "";
   }
   SPDXLicenseInfo declaredLicenses =
       SPDXLicenseInfoFactory.parseSPDXLicenseString(
           row.getCell(DECLARED_LICENSE_COL).getStringCellValue());
   SPDXLicenseInfo concludedLicense;
   Cell concludedLicensesCell = row.getCell(CONCLUDED_LICENSE_COL);
   if (concludedLicensesCell != null && !concludedLicensesCell.getStringCellValue().isEmpty()) {
     concludedLicense =
         SPDXLicenseInfoFactory.parseSPDXLicenseString(concludedLicensesCell.getStringCellValue());
   } else {
     concludedLicense = new SPDXNoneLicense();
   }
   String[] licenseStrings =
       row.getCell(LICENSE_INFO_IN_FILES_COL).getStringCellValue().split(",");
   SPDXLicenseInfo[] licenseInfosFromFiles = new SPDXLicenseInfo[licenseStrings.length];
   for (int i = 0; i < licenseStrings.length; i++) {
     licenseInfosFromFiles[i] =
         SPDXLicenseInfoFactory.parseSPDXLicenseString(licenseStrings[i].trim());
   }
   Cell licenseCommentCell = row.getCell(LICENSE_COMMENT_COL);
   String licenseComment;
   if (licenseCommentCell != null && !licenseCommentCell.getStringCellValue().isEmpty()) {
     licenseComment = licenseCommentCell.getStringCellValue();
   } else {
     licenseComment = "";
   }
   String declaredCopyright = row.getCell(DECLARED_COPYRIGHT_COL).getStringCellValue();
   Cell shortDescCell = row.getCell(SHORT_DESC_COL);
   String shortDesc;
   if (shortDescCell != null && !shortDescCell.getStringCellValue().isEmpty()) {
     shortDesc = shortDescCell.getStringCellValue();
   } else {
     shortDesc = "";
   }
   Cell descCell = row.getCell(FULL_DESC_COL);
   String description;
   if (descCell != null && !descCell.getStringCellValue().isEmpty()) {
     description = descCell.getStringCellValue();
   } else {
     description = "";
   }
   String url = row.getCell(URL_COL).getStringCellValue();
   String packageVerificationValue = row.getCell(FILE_VERIFICATION_VALUE_COL).getStringCellValue();
   String[] excludedFiles;
   String excludedFilesStr = row.getCell(VERIFICATION_EXCLUDED_FILES_COL).getStringCellValue();
   if (excludedFilesStr != null && !excludedFilesStr.isEmpty()) {
     excludedFiles = excludedFilesStr.split(",");
     for (int i = 0; i < excludedFiles.length; i++) {
       excludedFiles[i] = excludedFiles[i].trim();
     }
   } else {
     excludedFiles = new String[0];
   }
   SpdxPackageVerificationCode verificationCode =
       new SpdxPackageVerificationCode(packageVerificationValue, excludedFiles);
   String notAvailable = "Not available from spreadsheet";
   return new SPDXPackageInfo(
       declaredName,
       notAvailable,
       machineName,
       sha1,
       sourceInfo,
       declaredLicenses,
       concludedLicense,
       licenseInfosFromFiles,
       licenseComment,
       declaredCopyright,
       shortDesc,
       description,
       url,
       verificationCode,
       "",
       "");
 }