001/* 002 * Copyright (c) 2007-2015 Concurrent, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020 021package cascading.cascade; 022 023import java.util.Map; 024import java.util.Properties; 025 026import cascading.property.Props; 027 028/** 029 * Class CascadeProps is a fluent helper class for setting various {@link Cascade} level properties passed 030 * through a {@link CascadeConnector}. 031 */ 032public class CascadeProps extends Props 033 { 034 public static final String MAX_CONCURRENT_FLOWS = "cascading.cascade.maxconcurrentflows"; 035 036 int maxConcurrentFlows = 0; 037 038 /** 039 * Method setMaxConcurrentFlows sets the maximum number of Flows that a Cascade can run concurrently. 040 * <p/> 041 * A value of one (1) will run one Flow at a time. A value of zero (0), the default, disables the restriction. 042 * <p/> 043 * By default a Cascade will attempt to run all give Flow instances at the same time. But there are occasions 044 * where limiting the number for flows helps manages resources. 045 * 046 * @param properties of type Map<Object, Object> 047 * @param numConcurrentFlows of type int 048 */ 049 public static void setMaxConcurrentFlows( Map<Object, Object> properties, int numConcurrentFlows ) 050 { 051 properties.put( MAX_CONCURRENT_FLOWS, Integer.toString( numConcurrentFlows ) ); 052 } 053 054 /** 055 * Creates a new CascadeProps instance. 056 * 057 * @return CascadeProps instance 058 */ 059 public static CascadeProps cascadeProps() 060 { 061 return new CascadeProps(); 062 } 063 064 public CascadeProps() 065 { 066 } 067 068 public int getMaxConcurrentFlows() 069 { 070 return maxConcurrentFlows; 071 } 072 073 /** 074 * Method setMaxConcurrentFlows sets the maximum number of Flows that a Cascade can run concurrently. 075 * <p/> 076 * A value of one (1) will run one Flow at a time. A value of zero (0), the default, disables the restriction. 077 * <p/> 078 * By default a Cascade will attempt to run all give Flow instances at the same time, if eligible. But there are 079 * occasions where limiting the number for flows helps manages resources. 080 * 081 * @param maxConcurrentFlows of type int 082 */ 083 public CascadeProps setMaxConcurrentFlows( int maxConcurrentFlows ) 084 { 085 this.maxConcurrentFlows = maxConcurrentFlows; 086 087 return this; 088 } 089 090 @Override 091 protected void addPropertiesTo( Properties properties ) 092 { 093 setMaxConcurrentFlows( properties, maxConcurrentFlows ); 094 } 095 }