Ignore:
Timestamp:
08/14/10 15:10:12 (22 months ago)
Author:
kasper
Message:

Made it possible to configure jobs using "configurable bean" acting as a prototype for actual executed beans

File:
1 edited

Legend:

Unmodified
Added
Removed
  • AnalyzerBeans/trunk/src/main/java/org/eobjects/analyzer/job/AbstractBeanWithInputColumnsBuilder.java

    r975 r976  
    11package org.eobjects.analyzer.job; 
    22 
     3import java.lang.reflect.Array; 
    34import java.util.ArrayList; 
    45import java.util.Collection; 
    56import java.util.Collections; 
    6 import java.util.HashMap; 
    77import java.util.List; 
    8 import java.util.Map; 
    98 
    109import org.eobjects.analyzer.data.DataTypeFamily; 
     
    1211import org.eobjects.analyzer.descriptors.BeanDescriptor; 
    1312import org.eobjects.analyzer.descriptors.ConfiguredPropertyDescriptor; 
     13import org.eobjects.analyzer.util.CollectionUtils; 
    1414 
    1515@SuppressWarnings("unchecked") 
    1616class AbstractBeanWithInputColumnsBuilder<D extends BeanDescriptor<E>, E, B> 
    1717                extends AbstractBeanJobBuilder<D, E, B> { 
    18  
    19         private List<InputColumn<?>> _inputColumns = new ArrayList<InputColumn<?>>(); 
    2018 
    2119        public AbstractBeanWithInputColumnsBuilder(D descriptor, 
     
    4442                        } 
    4543                } 
    46                 _inputColumns.add(inputColumn); 
     44 
     45                ConfiguredPropertyDescriptor configuredPropertyForInput = getDescriptor() 
     46                                .getConfiguredPropertyForInput(); 
     47                Object inputColumns = configuredPropertyForInput 
     48                                .getValue(getConfigurableBean()); 
     49                if (inputColumns == null) { 
     50                        if (configuredPropertyForInput.isArray()) { 
     51                                inputColumns = new InputColumn[] { inputColumn }; 
     52                        } else { 
     53                                inputColumns = inputColumn; 
     54                        } 
     55                } else { 
     56                        inputColumns = CollectionUtils.array(InputColumn.class, inputColumns, inputColumn); 
     57                } 
     58                configuredPropertyForInput 
     59                                .setValue(getConfigurableBean(), inputColumns); 
     60 
    4761                return (B) this; 
    4862        } 
     
    6377 
    6478        public B removeInputColumn(InputColumn<?> inputColumn) { 
    65                 _inputColumns.remove(inputColumn); 
    66                 // TODO: Notify consumers 
     79                ConfiguredPropertyDescriptor configuredPropertyForInput = getDescriptor() 
     80                                .getConfiguredPropertyForInput(); 
     81                Object inputColumns = configuredPropertyForInput 
     82                                .getValue(getConfigurableBean()); 
     83                if (inputColumns != null) { 
     84                        if (inputColumns == inputColumn) { 
     85                                inputColumns = null; 
     86                        } else { 
     87                                if (inputColumns.getClass().isArray()) { 
     88                                        inputColumns = CollectionUtils.arrayRemove(inputColumns, 
     89                                                        inputColumn); 
     90                                } 
     91                        } 
     92                        configuredPropertyForInput.setValue(getConfigurableBean(), 
     93                                        inputColumns); 
     94                } 
    6795                return (B) this; 
    6896        } 
    6997 
    7098        public List<InputColumn<?>> getInputColumns() { 
    71                 return Collections.unmodifiableList(_inputColumns); 
    72         } 
    73  
    74         public boolean isConfigured() { 
    75                 if (_inputColumns.isEmpty()) { 
    76                         // no input given 
    77                         return false; 
    78                 } 
    79  
    80                 if (!super.isConfigured()) { 
    81                         return false; 
    82                 } 
    83  
    8499                ConfiguredPropertyDescriptor configuredPropertyForInput = getDescriptor() 
    85100                                .getConfiguredPropertyForInput(); 
    86                 if (!configuredPropertyForInput.isArray()) { 
    87                         if (_inputColumns.size() != 1) { 
    88                                 // exactly one input column is required 
    89                                 return false; 
     101                Object inputColumns = configuredPropertyForInput 
     102                                .getValue(getConfigurableBean()); 
     103                if (inputColumns == null) { 
     104                        return Collections.emptyList(); 
     105                } 
     106                List<InputColumn<?>> result; 
     107                if (inputColumns.getClass().isArray()) { 
     108                        int length = Array.getLength(inputColumns); 
     109                        result = new ArrayList<InputColumn<?>>(length); 
     110                        for (int i = 0; i < length; i++) { 
     111                                result.add((InputColumn<?>) Array.get(inputColumns, i)); 
    90112                        } 
     113                } else { 
     114                        result = new ArrayList<InputColumn<?>>(1); 
     115                        result.add((InputColumn<?>) inputColumns); 
    91116                } 
    92                 return true; 
    93         } 
    94  
    95         @Override 
    96         public Map<ConfiguredPropertyDescriptor, Object> getConfiguredProperties() { 
    97                 Map<ConfiguredPropertyDescriptor, Object> properties = new HashMap<ConfiguredPropertyDescriptor, Object>( 
    98                                 super.getConfiguredProperties()); 
    99  
    100                 // explicitly add the input columns (because they are handled as a 
    101                 // separate variable in this builder 
    102                 List<InputColumn<?>> inputColumns = getInputColumns(); 
    103                 properties.put(getDescriptor().getConfiguredPropertyForInput(), 
    104                                 inputColumns.toArray(new InputColumn<?>[inputColumns.size()])); 
    105  
    106                 return Collections.unmodifiableMap(properties); 
     117                return Collections.unmodifiableList(result); 
    107118        } 
    108119} 
Note: See TracChangeset for help on using the changeset viewer.