// Path: src/main/java/org/calrissian/flowmix/api/Filter.java
// public interface Filter extends Serializable {
// 
//   boolean accept(Event event);
// }
// 
// Path: src/main/java/org/calrissian/flowmix/api/filter/NoFilter.java
// public class NoFilter implements Filter {
//   @Override public boolean accept(Event event) {
//     return true;
//   }
// }
// 
// Path: src/main/java/org/calrissian/flowmix/core/model/op/SplitOp.java
// public class SplitOp implements FlowOp{
// 
//   public static final String SPLIT = "split";
// 
//   // default path should just pass through to the next component in the chain
//   private Filter defaultPath;
// 
//   // events that path each given filter should go out to the stream with the specified id.
//   private List<Pair<Filter, String>> paths;
// 
//   public SplitOp(Filter defaultPath, List<Pair<Filter,String>> paths) {
//     this.defaultPath = defaultPath;
//     this.paths = paths;
//   }
// 
//   public Filter getDefaultPath() {
//     return defaultPath;
//   }
// 
//   public List<Pair<Filter,String>> getPaths() {
//     return paths;
//   }
// 
//   @Override public String getComponentName() {
//     return SPLIT;
//   }
// }


import java.util.ArrayList;
import java.util.List;
import org.calrissian.flowmix.api.Filter;
import org.calrissian.flowmix.api.filter.NoFilter;
import org.calrissian.flowmix.core.model.op.SplitOp;
import org.calrissian.mango.domain.Pair;
/*
 * Copyright (C) 2014 The Calrissian Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.calrissian.flowmix.api.builder;



public class SplitBuilder extends AbstractOpBuilder {

  private Filter defaultPath;
  private List<Pair<Filter, String>> paths = new ArrayList<Pair<Filter,String>>();

  public SplitBuilder(StreamBuilder flowOpsBuilder) {
    super(flowOpsBuilder);
  }

  public SplitBuilder defaultPath(Filter filter) {
    this.defaultPath = filter;
    return this;
  }

  public SplitBuilder path(Filter filter, String destinationStream) {
    this.paths.add(new Pair<Filter,String>(filter, destinationStream));
    return this;
  }

  public SplitBuilder all(String destinationStream) {
// Path: src/main/java/org/calrissian/flowmix/api/Filter.java
// public interface Filter extends Serializable {
// 
//   boolean accept(Event event);
// }
// 
// Path: src/main/java/org/calrissian/flowmix/api/filter/NoFilter.java
// public class NoFilter implements Filter {
//   @Override public boolean accept(Event event) {
//     return true;
//   }
// }
// 
// Path: src/main/java/org/calrissian/flowmix/core/model/op/SplitOp.java
// public class SplitOp implements FlowOp{
// 
//   public static final String SPLIT = "split";
// 
//   // default path should just pass through to the next component in the chain
//   private Filter defaultPath;
// 
//   // events that path each given filter should go out to the stream with the specified id.
//   private List<Pair<Filter, String>> paths;
// 
//   public SplitOp(Filter defaultPath, List<Pair<Filter,String>> paths) {
//     this.defaultPath = defaultPath;
//     this.paths = paths;
//   }
// 
//   public Filter getDefaultPath() {
//     return defaultPath;
//   }
// 
//   public List<Pair<Filter,String>> getPaths() {
//     return paths;
//   }
// 
//   @Override public String getComponentName() {
//     return SPLIT;
//   }
// }


// Path: src/main/java/org/calrissian/flowmix/api/builder/SplitBuilder.java
import java.util.ArrayList;
import java.util.List;
import org.calrissian.flowmix.api.Filter;
import org.calrissian.flowmix.api.filter.NoFilter;
import org.calrissian.flowmix.core.model.op.SplitOp;
import org.calrissian.mango.domain.Pair;

/*
 * Copyright (C) 2014 The Calrissian Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.calrissian.flowmix.api.builder;



public class SplitBuilder extends AbstractOpBuilder {

  private Filter defaultPath;
  private List<Pair<Filter, String>> paths = new ArrayList<Pair<Filter,String>>();

  public SplitBuilder(StreamBuilder flowOpsBuilder) {
    super(flowOpsBuilder);
  }

  public SplitBuilder defaultPath(Filter filter) {
    this.defaultPath = filter;
    return this;
  }

  public SplitBuilder path(Filter filter, String destinationStream) {
    this.paths.add(new Pair<Filter,String>(filter, destinationStream));
    return this;
  }

  public SplitBuilder all(String destinationStream) {
    this.paths.add(new Pair<Filter,String>(new NoFilter(), destinationStream));