/** * 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 java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.spdx.rdfparser.LicenseSheet; import org.spdx.rdfparser.SPDXStandardLicense; /** * A spreadhseet containing license information * @author Source Auditor * */ public class SPDXLicenseSpreadsheet extends AbstractSpreadsheet { public class LicenseIterator implements Iterator<SPDXStandardLicense> { private int currentRowNum; SPDXStandardLicense currentLicense; public LicenseIterator() { this.currentRowNum = 2; // skip past header row currentLicense = licenseSheet.getLicense(currentRowNum); } @Override public boolean hasNext() { if (currentLicense == null) { return false; } else { return true; } } @Override public SPDXStandardLicense next() { SPDXStandardLicense retval = currentLicense; currentRowNum++; currentLicense = licenseSheet.getLicense(currentRowNum); return retval; } @Override public void remove() { // not implementd } } static final String LICENSE_SHEET_NAME = "Licenses"; private LicenseSheet licenseSheet; public SPDXLicenseSpreadsheet(File spreadsheetFile, boolean create, boolean readonly) throws SpreadsheetException { super(spreadsheetFile, create, readonly); this.licenseSheet = new LicenseSheet(this.workbook, LICENSE_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(); LicenseSheet.create(wb, LICENSE_SHEET_NAME); wb.write(excelOut); } finally { excelOut.close(); } } /* (non-Javadoc) * @see org.spdx.rdfparser.AbstractSpreadsheet#clear() */ @Override public void clear() { this.licenseSheet.clear(); } /* (non-Javadoc) * @see org.spdx.rdfparser.AbstractSpreadsheet#verifyWorkbook() */ @Override public String verifyWorkbook() { return this.licenseSheet.verify(); } /** * @return the licenseSheet */ public LicenseSheet getLicenseSheet() { return licenseSheet; } public Iterator<SPDXStandardLicense> getIterator() { return new LicenseIterator(); } }