Search in sources :

Example 1 with LicenseInfoParsingResult

use of org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult in project sw360portal by sw360.

the class LicenseInfoHandler method getLicenseInfoFile.

@Override
public LicenseInfoFile getLicenseInfoFile(Project project, User user, String outputGenerator, Map<String, Set<String>> releaseIdsToSelectedAttachmentIds, Map<String, Set<LicenseNameWithText>> excludedLicensesPerAttachment) throws TException {
    assertNotNull(project);
    assertNotNull(user);
    assertNotNull(outputGenerator);
    assertNotNull(releaseIdsToSelectedAttachmentIds);
    assertNotNull(excludedLicensesPerAttachment);
    Map<Release, Set<String>> releaseToAttachmentId = mapKeysToReleases(releaseIdsToSelectedAttachmentIds, user);
    Collection<LicenseInfoParsingResult> projectLicenseInfoResults = getAllReleaseLicenseInfos(releaseToAttachmentId, user, excludedLicensesPerAttachment);
    String[] outputGeneratorClassnameAndVariant = outputGenerator.split("::");
    if (outputGeneratorClassnameAndVariant.length != 2) {
        throw new TException("Unsupported output generator value: " + outputGenerator);
    }
    String outputGeneratorClassName = outputGeneratorClassnameAndVariant[0];
    OutputFormatVariant outputGeneratorVariant = Enums.getIfPresent(OutputFormatVariant.class, outputGeneratorClassnameAndVariant[1]).orNull();
    OutputGenerator<?> generator = getOutputGeneratorByClassnameAndVariant(outputGeneratorClassName, outputGeneratorVariant);
    LicenseInfoFile licenseInfoFile = new LicenseInfoFile();
    licenseInfoFile.setOutputFormatInfo(generator.getOutputFormatInfo());
    String licenseInfoHeaderText = (project.isSetLicenseInfoHeaderText()) ? project.getLicenseInfoHeaderText() : getDefaultLicenseInfoHeaderText();
    Object output = generator.generateOutputFile(projectLicenseInfoResults, project.getName(), project.getVersion(), licenseInfoHeaderText);
    if (output instanceof byte[]) {
        licenseInfoFile.setGeneratedOutput((byte[]) output);
    } else if (output instanceof String) {
        licenseInfoFile.setGeneratedOutput(((String) output).getBytes());
    } else {
        throw new TException("Unsupported output generator result: " + output.getClass().getSimpleName());
    }
    return licenseInfoFile;
}
Also used : WrappedException.wrapTException(org.eclipse.sw360.datahandler.common.WrappedException.wrapTException) TException(org.apache.thrift.TException) WrappedTException(org.eclipse.sw360.datahandler.common.WrappedException.WrappedTException) CommonUtils.nullToEmptySet(org.eclipse.sw360.datahandler.common.CommonUtils.nullToEmptySet) Release(org.eclipse.sw360.datahandler.thrift.components.Release)

Example 2 with LicenseInfoParsingResult

use of org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult in project sw360portal by sw360.

the class LicenseInfoHandler method getLicenseInfoForAttachment.

@Override
public List<LicenseInfoParsingResult> getLicenseInfoForAttachment(Release release, String attachmentContentId, User user) throws TException {
    if (release == null) {
        return Collections.singletonList(noSourceParsingResult(MSG_NO_RELEASE_GIVEN));
    }
    List<LicenseInfoParsingResult> cachedResults = licenseInfoCache.getIfPresent(attachmentContentId);
    if (cachedResults != null) {
        return cachedResults;
    }
    Attachment attachment = nullToEmptySet(release.getAttachments()).stream().filter(a -> a.getAttachmentContentId().equals(attachmentContentId)).findFirst().orElseThrow(() -> {
        String message = String.format("Attachment selected for license info generation is not found in release's attachments. Release id: %s. Attachment content id: %s", release.getId(), attachmentContentId);
        return new IllegalStateException(message);
    });
    try {
        List<LicenseInfoParser> applicableParsers = parsers.stream().filter(parser -> wrapTException(() -> parser.isApplicableTo(attachment, user, release))).collect(Collectors.toList());
        if (applicableParsers.size() == 0) {
            LOGGER.warn("No applicable parser has been found for the attachment selected for license information");
            return assignReleaseToLicenseInfoParsingResult(assignFileNameToLicenseInfoParsingResult(noSourceParsingResult("No applicable parser has been found for the attachment"), attachment.getFilename()), release);
        } else if (applicableParsers.size() > 1) {
            LOGGER.info("More than one parser claims to be able to parse attachment with contend id " + attachmentContentId);
        }
        List<LicenseInfoParsingResult> results = applicableParsers.stream().map(parser -> wrapTException(() -> parser.getLicenseInfos(attachment, user, release))).flatMap(Collection::stream).collect(Collectors.toList());
        filterEmptyLicenses(results);
        results = assignReleaseToLicenseInfoParsingResults(results, release);
        licenseInfoCache.put(attachmentContentId, results);
        return results;
    } catch (WrappedTException exception) {
        throw exception.getCause();
    }
}
Also used : org.eclipse.sw360.licenseinfo.parsers(org.eclipse.sw360.licenseinfo.parsers) java.util(java.util) User(org.eclipse.sw360.datahandler.thrift.users.User) Release(org.eclipse.sw360.datahandler.thrift.components.Release) AttachmentDatabaseHandler(org.eclipse.sw360.attachments.db.AttachmentDatabaseHandler) LicenseNameWithTextUtils(org.eclipse.sw360.licenseinfo.util.LicenseNameWithTextUtils) Enums(com.google.common.base.Enums) Logger(org.apache.log4j.Logger) Lists(com.google.common.collect.Lists) Attachment(org.eclipse.sw360.datahandler.thrift.attachments.Attachment) org.eclipse.sw360.licenseinfo.outputGenerators(org.eclipse.sw360.licenseinfo.outputGenerators) Project(org.eclipse.sw360.datahandler.thrift.projects.Project) WrappedException.wrapTException(org.eclipse.sw360.datahandler.common.WrappedException.wrapTException) MalformedURLException(java.net.MalformedURLException) TException(org.apache.thrift.TException) ComponentDatabaseHandler(org.eclipse.sw360.datahandler.db.ComponentDatabaseHandler) Maps(com.google.common.collect.Maps) Collectors(java.util.stream.Collectors) REPORT(org.eclipse.sw360.datahandler.thrift.licenseinfo.OutputFormatVariant.REPORT) DISCLOSURE(org.eclipse.sw360.datahandler.thrift.licenseinfo.OutputFormatVariant.DISCLOSURE) Sets(com.google.common.collect.Sets) DatabaseSettings(org.eclipse.sw360.datahandler.common.DatabaseSettings) TimeUnit(java.util.concurrent.TimeUnit) CommonUtils(org.eclipse.sw360.datahandler.common.CommonUtils) Entry(java.util.Map.Entry) org.eclipse.sw360.datahandler.thrift.licenseinfo(org.eclipse.sw360.datahandler.thrift.licenseinfo) VisibleForTesting(com.google.common.annotations.VisibleForTesting) CacheBuilder(com.google.common.cache.CacheBuilder) Cache(com.google.common.cache.Cache) WrappedTException(org.eclipse.sw360.datahandler.common.WrappedException.WrappedTException) SW360Assert.assertNotNull(org.eclipse.sw360.datahandler.common.SW360Assert.assertNotNull) CommonUtils.nullToEmptySet(org.eclipse.sw360.datahandler.common.CommonUtils.nullToEmptySet) WrappedTException(org.eclipse.sw360.datahandler.common.WrappedException.WrappedTException) Attachment(org.eclipse.sw360.datahandler.thrift.attachments.Attachment)

Example 3 with LicenseInfoParsingResult

use of org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult in project sw360portal by sw360.

the class CLIParser method getLicenseInfos.

@Override
public <T> List<LicenseInfoParsingResult> getLicenseInfos(Attachment attachment, User user, T context) throws TException {
    AttachmentContent attachmentContent = attachmentContentProvider.getAttachmentContent(attachment);
    LicenseInfo licenseInfo = new LicenseInfo().setFilenames(Arrays.asList(attachmentContent.getFilename()));
    LicenseInfoParsingResult result = new LicenseInfoParsingResult().setLicenseInfo(licenseInfo);
    InputStream attachmentStream = null;
    try {
        attachmentStream = attachmentConnector.getAttachmentStream(attachmentContent, user, context);
        Document doc = getDocument(attachmentStream);
        Set<String> copyrights = getCopyrights(doc);
        licenseInfo.setCopyrights(copyrights);
        Set<LicenseNameWithText> licenseNamesWithTexts = getLicenseNameWithTexts(doc);
        licenseInfo.setLicenseNamesWithTexts(licenseNamesWithTexts);
        result.setStatus(LicenseInfoRequestStatus.SUCCESS);
    } catch (ParserConfigurationException | IOException | XPathExpressionException | SAXException | SW360Exception e) {
        log.error(e);
        result.setStatus(LicenseInfoRequestStatus.FAILURE).setMessage("Error while parsing CLI file: " + e.toString());
    } finally {
        closeQuietly(attachmentStream, log);
    }
    return Collections.singletonList(result);
}
Also used : LicenseInfo(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfo) InputStream(java.io.InputStream) XPathExpressionException(javax.xml.xpath.XPathExpressionException) LicenseNameWithText(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseNameWithText) AttachmentContent(org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent) IOException(java.io.IOException) Document(org.w3c.dom.Document) LicenseInfoParsingResult(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult) SAXException(org.xml.sax.SAXException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) SW360Exception(org.eclipse.sw360.datahandler.thrift.SW360Exception)

Example 4 with LicenseInfoParsingResult

use of org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult in project sw360portal by sw360.

the class LicenseInfoHandlerTest method testThatEmptyLicensesAreFiltered.

@Test
public void testThatEmptyLicensesAreFiltered() {
    LicenseInfoParsingResult emptyResult = new LicenseInfoParsingResult();
    LicenseInfoParsingResult emptyLicenseInfo = new LicenseInfoParsingResult();
    emptyLicenseInfo.setLicenseInfo(new LicenseInfo());
    LicenseInfoParsingResult parsingResults = new LicenseInfoParsingResult();
    LicenseInfo licenseInfo = new LicenseInfo();
    // @formatter:off
    licenseInfo.setLicenseNamesWithTexts(ImmutableSet.of(createLicense("nameOnly", null, null), createLicense(null, null, null), createLicense(null, "textOnly", null), createLicense("", null, null), createLicense(null, null, "ackOnly"), createLicense("", "", ""), createLicense("name", "text", "ack")));
    // @formatter:on
    parsingResults.setLicenseInfo(licenseInfo);
    handler.filterEmptyLicenses(ImmutableList.of(emptyResult, emptyLicenseInfo, parsingResults));
    // @formatter:off
    Assert.assertThat(parsingResults.getLicenseInfo().getLicenseNamesWithTexts(), Matchers.containsInAnyOrder(createLicense("nameOnly", null, null), createLicense(null, "textOnly", null), createLicense(null, null, "ackOnly"), createLicense("name", "text", "ack")));
// @formatter:on
}
Also used : LicenseInfo(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfo) LicenseInfoParsingResult(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult) Test(org.junit.Test)

Example 5 with LicenseInfoParsingResult

use of org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult in project sw360portal by sw360.

the class LicenseInfoHandlerTest method testThatLicensesAreFilteredAndOriginalObejctIsNotTouched.

@Test
public void testThatLicensesAreFilteredAndOriginalObejctIsNotTouched() {
    LicenseInfoParsingResult parsingResults = new LicenseInfoParsingResult();
    LicenseInfo licenseInfo = new LicenseInfo();
    // @formatter:off
    licenseInfo.setLicenseNamesWithTexts(ImmutableSet.of(createLicense("l1", null, null), createLicense("l1", "t1", null), createLicense("l2", "t2", null), createLicense("l3", "t3", null), createLicense("l3", "t3", "a3"), createLicense(null, "t4", null), createLicense("l4", "t4", null), createLicense(null, null, "a5"), createLicense("l5", null, "a5"), createLicense("l", "t", "a6"), createLicense("l", "t", "a7"), createLicense("l8", null, null), createLicense("l8", "t8", null), createLicense("l9", "t9", "a9"), createLicense(null, "t9", "a9")));
    // @formatter:on
    parsingResults.setLicenseInfo(licenseInfo);
    // @formatter:off
    LicenseInfoParsingResult filteredResult = handler.filterLicenses(parsingResults, ImmutableSet.of(createLicense("l1", "t1", null), createLicense("l3", "t3", "a3"), createLicense(null, "t4", null), createLicense(null, null, "a5"), createLicense("l", "t", "a6"), createLicense("l8", null, null), createLicense(null, "t9", "a9")));
    // @formatter:on
    // @formatter:off
    Assert.assertThat(filteredResult.getLicenseInfo().getLicenseNamesWithTexts(), Matchers.containsInAnyOrder(createLicense("l1", null, null), createLicense("l2", "t2", null), createLicense("l3", "t3", null), createLicense("l4", "t4", null), createLicense("l5", null, "a5"), createLicense("l", "t", "a7"), createLicense("l8", "t8", null), createLicense("l9", "t9", "a9")));
// @formatter:on
}
Also used : LicenseInfo(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfo) LicenseInfoParsingResult(org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult) Test(org.junit.Test)

Aggregations

LicenseInfoParsingResult (org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfoParsingResult)12 Test (org.junit.Test)7 CommonUtils.nullToEmptyString (org.eclipse.sw360.datahandler.common.CommonUtils.nullToEmptyString)5 Attachment (org.eclipse.sw360.datahandler.thrift.attachments.Attachment)5 Release (org.eclipse.sw360.datahandler.thrift.components.Release)5 LicenseInfo (org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseInfo)5 Project (org.eclipse.sw360.datahandler.thrift.projects.Project)5 User (org.eclipse.sw360.datahandler.thrift.users.User)5 XWPFParagraph (org.apache.poi.xwpf.usermodel.XWPFParagraph)4 XWPFRun (org.apache.poi.xwpf.usermodel.XWPFRun)4 TException (org.apache.thrift.TException)4 SW360Exception (org.eclipse.sw360.datahandler.thrift.SW360Exception)4 AttachmentContent (org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent)4 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 StringReader (java.io.StringReader)3 WrappedTException (org.eclipse.sw360.datahandler.common.WrappedException.WrappedTException)3 LicenseNameWithText (org.eclipse.sw360.datahandler.thrift.licenseinfo.LicenseNameWithText)3 Maps (com.google.common.collect.Maps)2 Sets (com.google.common.collect.Sets)2