Skip to content

Commit

Permalink
Use an accumulator in PrimeNumbersTask
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Jan 18, 2016
1 parent 1f5d1bb commit 4be6faa
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ public void setModel(SampleModel model) {
}

public void start() {
PrimeNumbersTask task = new PrimeNumbersTask(model.getCount());
task.setPrimes(model.getPrimes());
PrimeNumbersTask task = new PrimeNumbersTask(model.getCount(), model.getPrimes());
taskControl = taskManager.create(task);
taskControl.getContext().addListener(new TaskListenerAdapter() {
@Override
Expand All @@ -54,7 +53,6 @@ public void stateChanged(ChangeEvent<Task.State> event) {
switch (event.getNewValue()) {
case STARTED:
model.setRunning(true);
model.getPrimes().clear();
break;
case DONE:
case CANCELLED:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,31 @@
package org.example;

import griffon.plugins.tasks.Tracker;
import javafx.collections.ObservableList;
import org.codehaus.griffon.runtime.tasks.AbstractTask;

import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;

import static griffon.util.GriffonClassUtils.requireState;
import static java.util.Objects.requireNonNull;

public class PrimeNumbersTask extends AbstractTask<List<Integer>, Integer> {
private final int numbersToFind;
private final List<Integer> numbers = new ArrayList<>();
private ObservableList<Integer> primes;
private final List<Integer> accumulator;

public PrimeNumbersTask(int numbersToFind) {
public PrimeNumbersTask(int numbersToFind, @Nonnull List<Integer> accumulator) {
super(PrimeNumbersTask.class.getSimpleName() + "-" + System.currentTimeMillis());
requireState(numbersToFind > 0, "The quantity of prime numbers to find must be greater than zero");
this.numbersToFind = numbersToFind;
}

public void setPrimes(ObservableList<Integer> primes) {
this.primes = primes;
this.accumulator = requireNonNull(accumulator, "Argument 'accumulator' must not be null");
}

@Override
public List<Integer> execute(Tracker<Integer> tracker) throws Exception {
int candidate = -1;
accumulator.clear();
while (numbers.size() < numbersToFind) {
candidate = nextPrimeNumber(++candidate);
numbers.add(candidate);
Expand All @@ -52,7 +53,7 @@ public List<Integer> execute(Tracker<Integer> tracker) throws Exception {

@Override
public void process(@Nonnull List<Integer> chunks) {
primes.addAll(chunks);
accumulator.addAll(chunks);
}

private int nextPrimeNumber(int candidate) {
Expand Down

0 comments on commit 4be6faa

Please sign in to comment.