spdxedit.license.FileLicenseEditor.java Source code

Java tutorial

Introduction

Here is the source code for spdxedit.license.FileLicenseEditor.java

Source

package spdxedit.license;

import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.stage.Stage;
import org.apache.commons.lang3.StringUtils;
import org.spdx.rdfparser.InvalidSPDXAnalysisException;
import org.spdx.rdfparser.SpdxDocumentContainer;
import org.spdx.rdfparser.license.AnyLicenseInfo;
import org.spdx.rdfparser.license.ExtractedLicenseInfo;
import org.spdx.rdfparser.model.SpdxFile;
import spdxedit.Main;
import spdxedit.SpdxLogic;
import spdxedit.util.UiUtils;

import java.util.Arrays;
import java.util.Optional;

public class FileLicenseEditor {

    public static void editConcludedLicense(SpdxFile file, SpdxDocumentContainer container) {
        LicenseEditControl control = new LicenseEditControl(container, file, true);
        if (file.getLicenseConcluded() != null) {
            control.setInitialValue(file.getLicenseConcluded());
        }

        Dialog<Boolean> dialog = UiUtils.newDialog("Edit License", ButtonType.OK);
        dialog.getDialogPane().setContent(control.getUi());

        dialog.setResultConverter(buttonType -> {
            if (buttonType == ButtonType.OK) {
                return true;
            } else {
                return false;
            }
        });

        boolean acceptChange = dialog.showAndWait().orElse(false);

        if (acceptChange) {
            try {
                file.setLicenseConcluded(control.getValue());
            } catch (InvalidSPDXAnalysisException e) {
                throw new RuntimeException(e);

            }
        }

    }

    public static void extractLicenseFromFile(SpdxFile file, SpdxDocumentContainer container) {

        Dialog dialog = new Dialog();
        dialog.setTitle(Main.APP_TITLE);
        dialog.setHeaderText("Extract license");

        ((Stage) dialog.getDialogPane().getScene().getWindow()).getIcons()
                .addAll(UiUtils.ICON_IMAGE_VIEW.getImage());

        dialog.getDialogPane().getButtonTypes().addAll(ButtonType.CANCEL, ButtonType.OK);

        String licenseName = "";
        String licenseText = null;
        String licenseId = "";
        //TODO: Add support for multiple extracted licenses.
        if (file.getLicenseInfoFromFiles() != null && file.getLicenseInfoFromFiles().length > 0) {
            Optional<AnyLicenseInfo> foundExtractedLicense = Arrays.stream(file.getLicenseInfoFromFiles())
                    .filter(license -> license instanceof ExtractedLicenseInfo).findFirst();
            if (foundExtractedLicense.isPresent()) {
                licenseName = ((ExtractedLicenseInfo) foundExtractedLicense.get()).getName();
                licenseText = ((ExtractedLicenseInfo) foundExtractedLicense.get()).getExtractedText();
                licenseId = ((ExtractedLicenseInfo) foundExtractedLicense.get()).getLicenseId();

            }
        }

        LicenseExtractControl licenseExtractControl = new LicenseExtractControl(licenseName, licenseText,
                licenseId);

        dialog.getDialogPane().setContent(licenseExtractControl.getUi());
        Optional<ButtonType> result = dialog.showAndWait();

        licenseName = licenseExtractControl.getLicenseName();
        licenseText = licenseExtractControl.getLicenseText();
        licenseId = licenseExtractControl.getLicenseId();

        //No selection
        if (!result.isPresent() || result.get() == ButtonType.CANCEL) {
            return;
        }
        //Omitted data
        if (StringUtils.isBlank(licenseName)) {
            new Alert(Alert.AlertType.ERROR, "License name cannot be blank. Use \"NOASSERTION\" instead",
                    ButtonType.OK).showAndWait();
            return;
        }
        if (StringUtils.isBlank(licenseText)) {
            new Alert(Alert.AlertType.ERROR, "License text cannot be blank.", ButtonType.OK).showAndWait();
            return;
        }
        if (StringUtils.isBlank(licenseId)) {
            new Alert(Alert.AlertType.ERROR, "License ID cannot be blank.", ButtonType.OK).showAndWait();
            return;
        }
        //License already extracted
        if (SpdxLogic.findExtractedLicenseByNameAndText(container, licenseName, licenseText).isPresent()) {
            new Alert(Alert.AlertType.WARNING,
                    "License " + licenseName + " with the same text has already been extracted.", ButtonType.OK)
                            .showAndWait();
            return;
        }
        //License with ID already exists
        if (SpdxLogic.findExtractedLicenseInfoById(container, licenseId).isPresent()) {
            new Alert(Alert.AlertType.WARNING, "License with ID " + licenseId + " already exists.", ButtonType.OK)
                    .showAndWait();
            return;
        }

        SpdxLogic.addExtractedLicenseFromFile(file, container, licenseId, licenseName, licenseText);

    }

}