// Path: src/main/java/com/netflix/nfgraph/util/ArrayIterator.java
// public class ArrayIterator<T> implements Iterator<T> {
// 
//     private T arr[];
//     private int size;
//     private int counter = 0;
//     
//     public ArrayIterator(T arr[]) {
//         this(arr, arr.length);
//     }
//     
//     public ArrayIterator(T arr[], int size) {
//         this.arr = arr;
//         this.size = size;
//     }
//     
//     @Override
//     public boolean hasNext() {
//         return counter < size;
//     }
// 
//     @Override
//     public T next() {
//         return arr[counter++];
//     }
// 
//     @Override
//     public void remove() {
//         throw new UnsupportedOperationException("Cannot remove elements from this array.");
//     }
//     
// }


import java.util.Iterator;
import com.netflix.nfgraph.exception.NFGraphException;
import com.netflix.nfgraph.util.ArrayIterator;
        this.numSingleProperties = numSingleProperties;
        this.numMultipleProperties = numMultipleProperties;
    }
    
    public String getNodeTypeName() {
    	return nodeTypeName;
    }

    public NFPropertySpec[] getPropertySpecs() {
        return propertySpecs;
    }
    
    public NFPropertySpec getPropertySpec(String propertyName) {
        for(NFPropertySpec spec : propertySpecs) {
            if(spec.getName().equals(propertyName))
                return spec;
        }
        throw new NFGraphException("Property " + propertyName + " is undefined for node type " + nodeTypeName);
    }
    
    public int getNumSingleProperties() {
    	return numSingleProperties;
    }
    
    public int getNumMultipleProperties() {
    	return numMultipleProperties;
    }

    @Override
    public Iterator<NFPropertySpec> iterator() {
// Path: src/main/java/com/netflix/nfgraph/util/ArrayIterator.java
// public class ArrayIterator<T> implements Iterator<T> {
// 
//     private T arr[];
//     private int size;
//     private int counter = 0;
//     
//     public ArrayIterator(T arr[]) {
//         this(arr, arr.length);
//     }
//     
//     public ArrayIterator(T arr[], int size) {
//         this.arr = arr;
//         this.size = size;
//     }
//     
//     @Override
//     public boolean hasNext() {
//         return counter < size;
//     }
// 
//     @Override
//     public T next() {
//         return arr[counter++];
//     }
// 
//     @Override
//     public void remove() {
//         throw new UnsupportedOperationException("Cannot remove elements from this array.");
//     }
//     
// }


// Path: src/main/java/com/netflix/nfgraph/spec/NFNodeSpec.java
import java.util.Iterator;
import com.netflix.nfgraph.exception.NFGraphException;
import com.netflix.nfgraph.util.ArrayIterator;

        this.numSingleProperties = numSingleProperties;
        this.numMultipleProperties = numMultipleProperties;
    }
    
    public String getNodeTypeName() {
    	return nodeTypeName;
    }

    public NFPropertySpec[] getPropertySpecs() {
        return propertySpecs;
    }
    
    public NFPropertySpec getPropertySpec(String propertyName) {
        for(NFPropertySpec spec : propertySpecs) {
            if(spec.getName().equals(propertyName))
                return spec;
        }
        throw new NFGraphException("Property " + propertyName + " is undefined for node type " + nodeTypeName);
    }
    
    public int getNumSingleProperties() {
    	return numSingleProperties;
    }
    
    public int getNumMultipleProperties() {
    	return numMultipleProperties;
    }

    @Override
    public Iterator<NFPropertySpec> iterator() {
        return new ArrayIterator<NFPropertySpec>(propertySpecs);