@SuppressWarnings("unchecked")
    public Multimap<String, Processor> getAllRequiredAttributes() {
        Multimap<String, Processor> requiredInputs = HashMultimap.create();
        for (ProcessorGraphNode root: this.roots) {
            final BiMap<String, String> inputMapper = root.getInputMapper();
            for (String attr: inputMapper.keySet()) {
                requiredInputs.put(attr, root.getProcessor());
            }
            final Object inputParameter = root.getProcessor().createInputParameter();
            if (inputParameter instanceof Values) {
                continue;
            } else if (inputParameter != null) {
                final Class<?> inputParameterClass = inputParameter.getClass();
                final Set<String> requiredAttributesDefinedInInputParameter =
                        getAttributeNames(inputParameterClass,
                                          FILTER_ONLY_REQUIRED_ATTRIBUTES);
                for (String attName: requiredAttributesDefinedInInputParameter) {
                    try {
                        if (inputParameterClass.getField(attName).getType() == Values.class) {
                            continue;
                        }
                    } catch (NoSuchFieldException e) {
                        throw new RuntimeException(e);
                    }
                    String mappedName = ProcessorUtils.getInputValueName(
                            root.getProcessor().getInputPrefix(),
                            inputMapper, attName);
                    requiredInputs.put(mappedName, root.getProcessor());
                }
            }
        }

        return requiredInputs;
    }
@ SuppressWarnings ( "unchecked" ) public Multimap < String , Processor > getAllRequiredAttributes ( ) { Multimap < String , Processor > requiredInputs = HashMultimap . create ( ) ; for ( ProcessorGraphNode root : this . roots ) { final BiMap < String , String > inputMapper = root . getInputMapper ( ) ; for ( String attr : inputMapper . keySet ( ) ) { requiredInputs . put ( attr , root . getProcessor ( ) ) ; } final Object inputParameter = root . getProcessor ( ) . createInputParameter ( ) ; if ( inputParameter instanceof Values ) { continue ; } else if ( inputParameter != null ) { final Class < ? > inputParameterClass = inputParameter . getClass ( ) ; final Set < String > requiredAttributesDefinedInInputParameter = getAttributeNames ( inputParameterClass , FILTER_ONLY_REQUIRED_ATTRIBUTES ) ; for ( String attName : requiredAttributesDefinedInInputParameter ) { try { if ( inputParameterClass . getField ( attName ) . getType ( ) == Values . class ) { continue ; } } catch ( NoSuchFieldException e ) { throw new RuntimeException ( e ) ; } String mappedName = ProcessorUtils . getInputValueName ( root . getProcessor ( ) . getInputPrefix ( ) , inputMapper , attName ) ; requiredInputs . put ( mappedName , root . getProcessor ( ) ) ; } } } return requiredInputs ; }
Get all the names of inputs that are required to be in the Values object when this graph is executed.