/** * Copyright (c) 2011 Source Auditor Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.spdx.spdxspreadsheet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; /** * A spreadsheet containing information on an SPDX Document. * * The spreadsheet contains 4 sheets: * - Origins - Information about the origin of the SPDX Document (Version, createdby, ...) * - Package Info - Information about the package itself * - Non-standard licenses - text from any non-standard licenses found * - Per File Info - Information about each file in the document * - Reviewers - Information on any organizations who have reviewed the documents * @author Gary O'Neall * */ public class SPDXSpreadsheet extends AbstractSpreadsheet { private OriginsSheet originsSheet; static final String ORIGIN_SHEET_NAME = "Origins"; private PackageInfoSheet packageInfoSheet; static final String PACKAGE_INFO_SHEET_NAME = "Package Info"; private NonStandardLicensesSheet nonStandardLicensesSheet; static final String NON_STANDARD_LICENSE_SHEET_NAME = "Non Standard Licenses"; private PerFileSheet perFileSheet; static final String PER_FILE_SHEET_NAME = "Per File Info"; private ReviewersSheet reviewersSheet; static final String REVIEWERS_SHEET_NAME = "Reviewers"; /** * @param spreadsheetFile * @param create * @param readonly * @throws SpreadsheetException */ public SPDXSpreadsheet(File spreadsheetFile, boolean create, boolean readonly) throws SpreadsheetException { super(spreadsheetFile, create, readonly); this.originsSheet = new OriginsSheet(this.workbook, ORIGIN_SHEET_NAME); this.packageInfoSheet = new PackageInfoSheet(this.workbook, PACKAGE_INFO_SHEET_NAME); this.nonStandardLicensesSheet = new NonStandardLicensesSheet(this.workbook, NON_STANDARD_LICENSE_SHEET_NAME); this.perFileSheet = new PerFileSheet(this.workbook, PER_FILE_SHEET_NAME); this.reviewersSheet = new ReviewersSheet(this.workbook, REVIEWERS_SHEET_NAME); String verifyMsg = verifyWorkbook(); if (verifyMsg != null) { logger.error(verifyMsg); throw(new SpreadsheetException(verifyMsg)); } } /* (non-Javadoc) * @see org.spdx.rdfparser.AbstractSpreadsheet#create(java.io.File) */ @Override public void create(File spreadsheetFile) throws IOException, SpreadsheetException { if (!spreadsheetFile.createNewFile()) { logger.error("Unable to create "+spreadsheetFile.getName()); throw(new SpreadsheetException("Unable to create "+spreadsheetFile.getName())); } FileOutputStream excelOut = null; try { excelOut = new FileOutputStream(spreadsheetFile); Workbook wb = new HSSFWorkbook(); OriginsSheet.create(wb, ORIGIN_SHEET_NAME); PackageInfoSheet.create(wb, PACKAGE_INFO_SHEET_NAME); NonStandardLicensesSheet.create(wb, NON_STANDARD_LICENSE_SHEET_NAME); PerFileSheet.create(wb, PER_FILE_SHEET_NAME); ReviewersSheet.create(wb, REVIEWERS_SHEET_NAME); wb.write(excelOut); } finally { excelOut.close(); } } /* (non-Javadoc) * @see org.spdx.rdfparser.AbstractSpreadsheet#clear() */ @Override public void clear() { this.originsSheet.clear(); this.packageInfoSheet.clear(); this.nonStandardLicensesSheet.clear(); this.perFileSheet.clear(); this.reviewersSheet.clear(); } /* (non-Javadoc) * @see org.spdx.rdfparser.AbstractSpreadsheet#verifyWorkbook() */ @Override public String verifyWorkbook() { String retval = this.originsSheet.verify(); if (retval == null || retval.isEmpty()) { retval = this.packageInfoSheet.verify(); } if (retval == null || retval.isEmpty()) { retval = this.nonStandardLicensesSheet.verify(); } if (retval == null || retval.isEmpty()) { retval = this.perFileSheet.verify(); } if (retval == null || retval.isEmpty()) { retval = this.reviewersSheet.verify(); } return retval; } /** * @return the originsSheet */ public OriginsSheet getOriginsSheet() { return originsSheet; } /** * @param originsSheet the originsSheet to set */ public void setOriginsSheet(OriginsSheet originsSheet) { this.originsSheet = originsSheet; } /** * @return the packageInfoSheet */ public PackageInfoSheet getPackageInfoSheet() { return packageInfoSheet; } /** * @param packageInfoSheet the packageInfoSheet to set */ public void setPackageInfoSheet(PackageInfoSheet packageInfoSheet) { this.packageInfoSheet = packageInfoSheet; } /** * @return the nonStandardLicensesSheet */ public NonStandardLicensesSheet getNonStandardLicensesSheet() { return nonStandardLicensesSheet; } /** * @param nonStandardLicensesSheet the nonStandardLicensesSheet to set */ public void setNonStandardLicensesSheet( NonStandardLicensesSheet nonStandardLicensesSheet) { this.nonStandardLicensesSheet = nonStandardLicensesSheet; } /** * @return the perFileSheet */ public PerFileSheet getPerFileSheet() { return perFileSheet; } /** * @param perFileSheet the perFileSheet to set */ public void setPerFileSheet(PerFileSheet perFileSheet) { this.perFileSheet = perFileSheet; } /** * @return the reviewersSheet */ public ReviewersSheet getReviewersSheet() { return reviewersSheet; } /** * @param reviewersSheet the reviewersSheet to set */ public void setReviewersSheet(ReviewersSheet reviewersSheet) { this.reviewersSheet = reviewersSheet; } }