All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.codearte.accurest.stubrunner.BatchStubRunner.groovy Maven / Gradle / Ivy

There is a newer version: 1.1.1
Show newest version
package io.codearte.accurest.stubrunner

import groovy.transform.CompileStatic
import io.codearte.accurest.dsl.GroovyDsl
/**
 * Manages lifecycle of multiple {@link StubRunner} instances.
 *
 * @see StubRunner
 */
@CompileStatic
class BatchStubRunner implements StubRunning {

	private final Iterable stubRunners

	BatchStubRunner(Iterable stubRunners) {
		this.stubRunners = stubRunners
	}

	@Override
	RunningStubs runStubs() {
		Map appsAndPorts = stubRunners.inject([:]) { Map acc, StubRunner value ->
			acc.putAll(value.runStubs().namesAndPorts)
			return acc
		} as Map
		return new RunningStubs(appsAndPorts)
	}

	@Override
	URL findStubUrl(String groupId, String artifactId) {
		return stubRunners.findResult(null) { StubRunner stubRunner ->
			return stubRunner.findStubUrl(groupId, artifactId)
		} as URL
	}

	@Override
	URL findStubUrl(String ivyNotation) {
		String[] splitString = ivyNotation.split(":")
		if (splitString.length > 3) {
			throw new IllegalArgumentException("$ivyNotation is invalid")
		} else if (splitString.length == 2) {
			return findStubUrl(splitString[0], splitString[1])
		}
		return findStubUrl(null, splitString[0])
	}

	@Override
	RunningStubs findAllRunningStubs() {
		return new RunningStubs(stubRunners.collect { StubRunner runner -> runner.findAllRunningStubs() })
	}

	@Override
	Map> getAccurestContracts() {
		return stubRunners.inject([:]) { Map> map, StubRunner stubRunner ->
			map.putAll(stubRunner.accurestContracts ?: [:])
			return map
		} as Map>
	}

	@Override
	boolean trigger(String ivyNotation, String labelName) {
		boolean triggered = stubRunners.inject(false) { boolean acc, StubRunner stubRunner ->
			boolean success = stubRunner.trigger(ivyNotation, labelName)
			if (acc) {
				return true
			}
			return success
		}
		if (!triggered) {
			throw new IllegalArgumentException("No label with name [$labelName] for " +
					"dependency [$ivyNotation] was found. Here you have the list of dependencies " +
					"and their labels [${ivyToLabels()}")
		}
		return triggered
	}

	private String ivyToLabels() {
		return labels().entrySet().collect {
			"Dependency [${it.key}] has labels ${it.value}]"
		}.join('\n')
	}

	@Override
	boolean trigger(String labelName) {
		boolean triggered = stubRunners.inject(false) { boolean acc, StubRunner stubRunner ->
			boolean success = stubRunner.trigger(labelName)
			if (acc) {
				return true
			}
			return success
		}
		if (!triggered) {
			throw new IllegalArgumentException("No label with name [$labelName] was found. " +
					"Here you have the list of dependencies and their labels [${ivyToLabels()}")
		}
		return triggered
	}

	@Override
	boolean trigger() {
		return stubRunners.inject(false) { boolean acc, StubRunner stubRunner ->
			boolean success = stubRunner.trigger()
			if (acc) {
				return true
			}
			return success
		}
	}

	@Override
	Map> labels() {
		return stubRunners.inject([:]) { Map> map, StubRunner stubRunner ->
			if (stubRunner) {
				map.putAll(stubRunner.labels() ?: [:])
			}
			return map
		} as Map>
	}

	@Override
	void close() throws IOException {
		stubRunners.each {
			it.close()
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy