View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.giraph.block_app.framework.block;
19  
20  import java.util.Iterator;
21  
22  import org.apache.giraph.block_app.framework.piece.AbstractPiece;
23  import org.apache.giraph.function.Consumer;
24  import org.apache.giraph.function.Supplier;
25  
26  /**
27   * Block that executes one of two branches based on a condition
28   */
29  @SuppressWarnings("rawtypes")
30  public final class IfBlock implements Block {
31    private final Block thenBlock;
32    private final Block elseBlock;
33    private final Supplier<Boolean> condition;
34  
35    public IfBlock(
36        Supplier<Boolean> condition, Block thenBlock, Block elseBlock) {
37      this.condition = condition;
38      this.thenBlock = thenBlock;
39      this.elseBlock = elseBlock;
40    }
41  
42    public IfBlock(Supplier<Boolean> condition, Block thenBlock) {
43      this.condition = condition;
44      this.thenBlock = thenBlock;
45      this.elseBlock = new EmptyBlock();
46    }
47  
48    @Override
49    public Iterator<AbstractPiece> iterator() {
50      if (Boolean.TRUE.equals(condition.get())) {
51        return thenBlock.iterator();
52      } else {
53        return elseBlock.iterator();
54      }
55    }
56  
57    @Override
58    public void forAllPossiblePieces(Consumer<AbstractPiece> consumer) {
59      thenBlock.forAllPossiblePieces(consumer);
60      elseBlock.forAllPossiblePieces(consumer);
61    }
62  
63    @Override
64    public String toString() {
65      if (elseBlock instanceof EmptyBlock) {
66        return "IfBlock(" + thenBlock + ")";
67      }
68      return "IfBlock(" + thenBlock + " , " + elseBlock + ")";
69    }
70  }