package spdxedit; import com.google.common.collect.ImmutableList; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.layout.*; import org.spdx.rdfparser.model.SpdxPackage; import spdxedit.util.UiUtils; import java.util.List; import java.util.function.Consumer; /** * Created by yevster on 9/23/16. */ public class PackagePropertyEditor { private final SpdxPackage spdxPackage; final static int rowHeight = 66; final static int left = 45; final static int fieldLeft = 160; public PackagePropertyEditor(SpdxPackage pkg) { this.spdxPackage = pkg; } public void initialize(TitledPane parentContainer) { AnchorPane control = new AnchorPane(); parentContainer.setContent(control); int top = 40; VBox vbox = new VBox(); control.getChildren().addAll(vbox); AnchorPane.setBottomAnchor(vbox,0D); AnchorPane.setTopAnchor(vbox,0D); AnchorPane.setLeftAnchor(vbox,0D); AnchorPane.setRightAnchor(vbox,0D); vbox.setPadding(new Insets(20)); vbox.setSpacing(11); List<Pane> rows = ImmutableList.<Pane>builder().add(createTextBoxEditor("Version Info:", spdxPackage.getVersionInfo(), spdxPackage::setVersionInfo, top += rowHeight), createTextAreaEditor("Description:", spdxPackage.getDescription(), spdxPackage::setDescription, top += rowHeight), createTextBoxEditor("Summary:", spdxPackage.getSummary(), spdxPackage::setSummary, top += rowHeight), createTextBoxEditor("Download Location:", spdxPackage.getDownloadLocation(), spdxPackage::setDownloadLocation, top += rowHeight), createTextBoxEditor("Source Info:", spdxPackage.getSourceInfo(), spdxPackage::setSourceInfo, top += rowHeight), createTextBoxEditor("Copyright Text:", spdxPackage.getCopyrightText(), spdxPackage::setCopyrightText, top += rowHeight), createTextBoxEditor("Package File Name:", spdxPackage.getPackageFileName(), spdxPackage::setPackageFileName, top += rowHeight), createTextBoxEditor("Homepage:", spdxPackage.getHomepage(), spdxPackage::setHomepage, top += rowHeight), createTextBoxEditor("Originator:", spdxPackage.getOriginator(), spdxPackage::setOriginator, top += rowHeight), createTextBoxEditor("Supplier:", spdxPackage.getSupplier(), spdxPackage::setSupplier, top += rowHeight)).build(); vbox.getChildren().addAll(rows); rows.stream().map(Pane::getChildren).flatMap(List::stream).filter(n -> n instanceof TextField).forEach(Node::autosize); rows.forEach(Node::autosize); } private static final Pane createTextBoxEditor(String label, String value, Consumer<String> onUpdate, int top) { HBox box = new HBox(); box.setPrefWidth(Double.MAX_VALUE); box.setMaxWidth(Double.MAX_VALUE); box.setAlignment(Pos.CENTER_LEFT); box.setSpacing(2); TextField result = new TextField(value); result.setMinWidth(750); result.setMaxWidth(Double.MAX_VALUE); result.setLayoutX(fieldLeft); result.setLayoutY(top); result.textProperty().addListener((observable, oldValue, newValue) -> onUpdate.accept(newValue)); AnchorPane ap = UiUtils.wrapInAnchor(result); Label l = new Label(label); l.setMinWidth(fieldLeft); box.getChildren().addAll(l, ap); return UiUtils.wrapInAnchor(box); } private static final Pane createTextAreaEditor(String label, String value, Consumer<String> onUpdate, int top) { HBox box = new HBox(); box.setPrefWidth(Double.MAX_VALUE); box.setMaxWidth(Double.MAX_VALUE); box.setAlignment(Pos.CENTER_LEFT); box.setSpacing(2); TextArea result = new TextArea(value); result.setMinWidth(750); result.setMaxWidth(Double.MAX_VALUE); result.setLayoutX(fieldLeft); result.setLayoutY(top); result.setMinHeight(rowHeight); result.setWrapText(true); result.textProperty().addListener((observable, oldValue, newValue) -> onUpdate.accept(newValue)); AnchorPane ap = UiUtils.wrapInAnchor(result); Label l = new Label(label); l.setMinWidth(fieldLeft); box.getChildren().addAll(l, ap); return UiUtils.wrapInAnchor(box); } }