Adding limit to comparison.

This commit is contained in:
Rob Greene 2022-03-13 20:50:31 -05:00
parent 087df7535e
commit 8ea6990dd5
6 changed files with 50 additions and 8 deletions

View File

@ -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<Integer> 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;

View File

@ -33,6 +33,17 @@ public class ComparisonResult {
return errors.size() + warnings.size();
}
public List<String> getAllMessages() {
List<String> messages = new ArrayList<>();
messages.addAll(errors);
messages.addAll(warnings);
return messages;
}
public List<String> getLimitedMessages(int limit) {
List<String> messages = getAllMessages();
return messages.subList(0, Math.min(messages.size(), limit));
}
public void addError(Exception ex) {
errors.add(ex.getMessage());
}

View File

@ -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

View File

@ -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$

View File

@ -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()));
}
}
}

View File

@ -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;
}
}