/******************************************************************************* * (c) Copyright 2016 Hewlett-Packard Development Company, L.P. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Apache License v2.0 which accompany this distribution. * * The Apache License is available at * http://www.apache.org/licenses/LICENSE-2.0 * *******************************************************************************/ package io.cloudslang.lang.runtime.env; import io.cloudslang.lang.entities.bindings.values.Value; import io.cloudslang.lang.entities.bindings.values.ValueFactory; import java.io.Serializable; import java.util.Iterator; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; public class ForLoopCondition implements LoopCondition { private final Iterable<? extends Serializable> iterable; private int index = 0; public ForLoopCondition(Iterable<? extends Serializable> iterable) { this.iterable = iterable; } private Iterator<? extends Serializable> loopToCurrentObject() { Iterator<? extends Serializable> iterator = iterable.iterator(); for (int i = 0; i < index; i++) { iterator.next(); } return iterator; } public Value next() { Serializable serializable = loopToCurrentObject().next(); Value next = serializable instanceof Value ? (Value) serializable : ValueFactory.create(serializable); index++; return next; } @Override public boolean hasMore() { return loopToCurrentObject().hasNext(); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } ForLoopCondition that = (ForLoopCondition) o; return new EqualsBuilder() .append(this.iterable, that.iterable) .append(this.index, that.index) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() .append(iterable) .append(index) .toHashCode(); } }