diff --git a/app/cli-acx/src/main/java/io/github/applecommander/acx/command/CompareCommand.java b/app/cli-acx/src/main/java/io/github/applecommander/acx/command/CompareCommand.java index 7791f50..b3d5cba 100644 --- a/app/cli-acx/src/main/java/io/github/applecommander/acx/command/CompareCommand.java +++ b/app/cli-acx/src/main/java/io/github/applecommander/acx/command/CompareCommand.java @@ -19,6 +19,7 @@ */ package io.github.applecommander.acx.command; +import java.util.Optional; import java.util.function.Consumer; import com.webcodepro.applecommander.storage.Disk; @@ -39,6 +40,9 @@ public class CompareCommand extends ReadOnlyDiskImageCommandOptions { @ArgGroup(heading = "%nComparison Strategy Selection:%n") private StrategySelection strategySelection = new StrategySelection(); + + @Option(names = { "-l", "--limit" }, description = "Set limit to messages displayed.") + private Optional limit = Optional.empty(); @Override public int handleCommand() throws Exception { @@ -51,8 +55,12 @@ public class CompareCommand extends ReadOnlyDiskImageCommandOptions { } else { System.out.println("The disks do not match."); - result.getErrors().forEach(System.out::println); - result.getWarnings().forEach(System.out::println); + limit.map(result::getLimitedMessages) + .orElseGet(result::getAllMessages) + .forEach(System.out::println); + if (result.getDifferenceCount() > limit.orElse(Integer.MAX_VALUE)) { + System.out.printf("There are %d more messages.\n", result.getDifferenceCount() - limit.get()); + } } return 0; diff --git a/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/compare/ComparisonResult.java b/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/compare/ComparisonResult.java index 0c831d8..5ba3d28 100644 --- a/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/compare/ComparisonResult.java +++ b/lib/ac-api/src/main/java/com/webcodepro/applecommander/storage/compare/ComparisonResult.java @@ -33,6 +33,17 @@ public class ComparisonResult { return errors.size() + warnings.size(); } + public List getAllMessages() { + List messages = new ArrayList<>(); + messages.addAll(errors); + messages.addAll(warnings); + return messages; + } + public List getLimitedMessages(int limit) { + List messages = getAllMessages(); + return messages.subList(0, Math.min(messages.size(), limit)); + } + public void addError(Exception ex) { errors.add(ex.getMessage()); } diff --git a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/Wizard.java b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/Wizard.java index 022d2ce..4465bdf 100644 --- a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/Wizard.java +++ b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/Wizard.java @@ -83,6 +83,7 @@ public abstract class Wizard { RowData rowData = new RowData(); rowData.width = logo.getImageData().width; rowData.height = logo.getImageData().height; + System.out.println(rowData.toString()); imageCanvas = new ImageCanvas(dialog, SWT.BORDER, logo, rowData); // Starting pane diff --git a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksResultsPane.java b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksResultsPane.java index 2d2176e..b42c3f7 100644 --- a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksResultsPane.java +++ b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksResultsPane.java @@ -117,8 +117,7 @@ public class CompareDisksResultsPane extends WizardPane { } if (disk1 != null && disk2 != null) { ComparisonResult result = DiskDiff.compare(disk1, disk2); - errorMessages.addAll(result.getErrors()); - errorMessages.addAll(result.getWarnings()); + errorMessages.addAll(result.getLimitedMessages(wizard.getMessageLimit())); } if (errorMessages.size() == 0) { return textBundle.get("CompareDisksResultsPane.DisksMatch"); //$NON-NLS-1$ diff --git a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksStartPane.java b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksStartPane.java index 8d8b863..fab4c27 100644 --- a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksStartPane.java +++ b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksStartPane.java @@ -24,7 +24,6 @@ import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.RowData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; @@ -50,6 +49,7 @@ public class CompareDisksStartPane extends WizardPane { private CompareDisksWizard wizard; private Text diskname1Text; private Text diskname2Text; + private Text limitText; /** * Constructor for CompareDisksStartPane. */ @@ -75,6 +75,7 @@ public class CompareDisksStartPane extends WizardPane { layout.marginTop = 5; layout.spacing = 3; control.setLayout(layout); + Label label = new Label(control, SWT.WRAP); label.setText(textBundle.get("CompareDisksStartPane.Description")); //$NON-NLS-1$ @@ -84,7 +85,6 @@ public class CompareDisksStartPane extends WizardPane { diskname1Text = new Text(control, SWT.WRAP | SWT.BORDER); if (wizard.getDiskname1() != null) diskname1Text.setText(wizard.getDiskname1()); diskname1Text.setLayoutData(new RowData(300, -1)); - diskname1Text.setBackground(new Color(control.getDisplay(), 255,255,255)); diskname1Text.setFocus(); diskname1Text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { @@ -113,7 +113,6 @@ public class CompareDisksStartPane extends WizardPane { diskname2Text = new Text(control, SWT.WRAP | SWT.BORDER); if (wizard.getDiskname2() != null) diskname2Text.setText(wizard.getDiskname2()); diskname2Text.setLayoutData(new RowData(300, -1)); - diskname2Text.setBackground(new Color(control.getDisplay(), 255,255,255)); diskname2Text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { Text text = (Text) event.getSource(); @@ -134,6 +133,16 @@ public class CompareDisksStartPane extends WizardPane { } } }); + + label = new Label(control, SWT.WRAP); + label.setText("Set limit on messages displayed:"); + + limitText = new Text(control, SWT.WRAP | SWT.BORDER); + limitText.setText(Integer.toString(wizard.getMessageLimit())); + limitText.setLayoutData(new RowData(200, -1)); + limitText.addModifyListener(this::limitTextModifyListener); + + parent.pack(); } /** * Get the next pane. A null return indicates the end of the wizard. @@ -166,4 +175,12 @@ public class CompareDisksStartPane extends WizardPane { return textBundle.format("CompareDisksStartPane.DiskNLabel", //$NON-NLS-1$ diskNumber); } + + protected void limitTextModifyListener(ModifyEvent event) { + try { + wizard.setMessageLimit(Integer.parseInt(limitText.getText())); + } catch (NumberFormatException e) { + limitText.setText(Integer.toString(wizard.getMessageLimit())); + } + } } diff --git a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksWizard.java b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksWizard.java index a06411d..da3acb6 100644 --- a/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksWizard.java +++ b/lib/ac-swt-common/src/main/java/com/webcodepro/applecommander/ui/swt/wizard/comparedisks/CompareDisksWizard.java @@ -34,6 +34,7 @@ import com.webcodepro.applecommander.ui.swt.wizard.WizardPane; public class CompareDisksWizard extends Wizard { private String diskname1; private String diskname2; + private int messageLimit = 10; /** * Constructor for ExportWizard. */ @@ -54,11 +55,16 @@ public class CompareDisksWizard extends Wizard { public String getDiskname2() { return diskname2; } + public int getMessageLimit() { + return messageLimit; + } public void setDiskname1(String string) { diskname1 = string; } public void setDiskname2(String string) { diskname2 = string; } - + public void setMessageLimit(int messageLimit) { + this.messageLimit = messageLimit; + } }