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.flow.planner; 022 023import java.util.HashMap; 024import java.util.Map; 025import java.util.Properties; 026 027import cascading.flow.Flow; 028import cascading.flow.FlowDef; 029import cascading.flow.planner.iso.transformer.ElementFactory; 030import cascading.flow.planner.rule.RuleRegistry; 031import cascading.operation.PlannerLevel; 032import cascading.property.PropertyUtil; 033import cascading.util.ProcessLogger; 034 035/** 036 * 037 */ 038public class PlannerContext 039 { 040 public static final PlannerContext NULL = new PlannerContext(); 041 042 RuleRegistry ruleRegistry; 043 FlowPlanner flowPlanner; 044 FlowDef flowDef; 045 Flow flow; 046 boolean isTransformTracingEnabled = false; 047 private Map properties; 048 049 public PlannerContext() 050 { 051 this.properties = new Properties(); 052 } 053 054 public PlannerContext( RuleRegistry ruleRegistry ) 055 { 056 this.ruleRegistry = ruleRegistry; 057 } 058 059 public PlannerContext( RuleRegistry ruleRegistry, FlowPlanner flowPlanner, FlowDef flowDef, Flow flow, boolean isTransformTracingEnabled ) 060 { 061 this.ruleRegistry = ruleRegistry; 062 this.flowPlanner = flowPlanner; 063 this.flowDef = flowDef; 064 this.flow = flow; 065 this.isTransformTracingEnabled = isTransformTracingEnabled; 066 067 if( flowPlanner != null ) 068 this.properties = flowPlanner.getDefaultProperties(); 069 else 070 this.properties = new Properties(); 071 } 072 073 public String getStringProperty( String property ) 074 { 075 return PropertyUtil.getStringProperty( System.getProperties(), properties, property ); 076 } 077 078 public int getIntProperty( String property, int defaultValue ) 079 { 080 return PropertyUtil.getIntProperty( System.getProperties(), properties, property, defaultValue ); 081 } 082 083 public RuleRegistry getRuleRegistry() 084 { 085 return ruleRegistry; 086 } 087 088 public FlowPlanner getFlowPlanner() 089 { 090 return flowPlanner; 091 } 092 093 public FlowDef getFlowDef() 094 { 095 return flowDef; 096 } 097 098 public Flow getFlow() 099 { 100 return flow; 101 } 102 103 public ProcessLogger getLogger() 104 { 105 Flow flow = getFlow(); 106 107 if( flow == null ) 108 return ProcessLogger.NULL; 109 110 return (ProcessLogger) flow; 111 } 112 113 public boolean isTransformTracingEnabled() 114 { 115 return isTransformTracingEnabled; 116 } 117 118 public PlannerLevel getPlannerLevelFor( Class<? extends PlannerLevel> plannerLevelClass ) 119 { 120 Map<Class<? extends PlannerLevel>, PlannerLevel> levels = new HashMap<>(); 121 122 addLevel( levels, flowPlanner.getDebugLevel( flowDef ) ); 123 addLevel( levels, flowPlanner.getAssertionLevel( flowDef ) ); 124 125 return levels.get( plannerLevelClass ); 126 } 127 128 private void addLevel( Map<Class<? extends PlannerLevel>, PlannerLevel> levels, PlannerLevel level ) 129 { 130 if( level != null ) 131 levels.put( level.getClass(), level ); 132 } 133 134 public ElementFactory getElementFactoryFor( String factoryName ) 135 { 136 return ruleRegistry.getElementFactory( factoryName ); 137 } 138 }