/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.test.petstore.extension;
import static java.util.concurrent.Executors.newSingleThreadExecutor;
import org.mule.runtime.api.connection.ConnectionException;
import org.mule.runtime.api.exception.MuleException;
import org.mule.runtime.api.message.Attributes;
import org.mule.runtime.extension.api.annotation.Alias;
import org.mule.runtime.extension.api.annotation.param.Optional;
import org.mule.runtime.extension.api.annotation.param.Parameter;
import org.mule.runtime.extension.api.annotation.param.Config;
import org.mule.runtime.extension.api.runtime.source.Source;
import org.mule.runtime.extension.api.runtime.source.SourceCallback;
import java.util.concurrent.ExecutorService;
@Alias("source")
public class FailingPetStoreSource extends Source<String, Attributes> {
@Config
PetStoreConnector config;
@Parameter
@Optional(defaultValue = "false")
boolean failOnStart;
@Parameter
@Optional(defaultValue = "false")
boolean failOnException;
public static boolean failedDueOnException = false;
public static ConnectionException connectionException = new ConnectionException("ERROR");
public static ExecutorService executor;
@Override
public void onStart(SourceCallback<String, Attributes> sourceCallback) throws MuleException {
PetStoreConnector.timesStarted++;
if (failOnStart || failedDueOnException) {
throw new RuntimeException(connectionException);
}
if (failOnException) {
failedDueOnException = true;
executor = newSingleThreadExecutor();
executor.execute(() -> sourceCallback.onSourceException(connectionException));
}
}
@Override
public void onStop() {}
}