import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
import org.slf4j.Logger;
* Runs activation over multiple @ drivers.
*
* @author bartosz.michalik@amartus.com
+ * @author krzysztof.bijakowski@amartus.com [modifications]
*/
public class ActivationTransaction {
private static final Logger LOG = LoggerFactory.getLogger(ActivationTransaction.class);
- private List<ActivationDriver> drivers = new ArrayList<>();
+ private List<ActivationDriver> drivers = new ArrayList<>();
public void addDriver(ActivationDriver driver) {
drivers.add(driver);
/**
* Activate the contents of this transaction.
*/
- public void activate() {
+ public Result activate() {
sortDrivers();
try {
for (ActivationDriver d: drivers) {
}
commit();
LOG.info("Activate transaction successful");
+
+ return Result.success();
} catch (Exception e) {
//XXX add transaction identification ???
LOG.warn("Rolling back activate transaction ", e);
rollback();
+
+ return Result.fail(e.getMessage(), e);
}
}
/**
* Deactivate the contents of this transaction.
*/
- public void deactivate() {
+ public Result deactivate() {
sortDrivers();
try {
for (ActivationDriver d: drivers) {
}
LOG.info("Deactivate transaction successful");
commit();
+
+ return Result.success();
} catch (Exception e) {
//XXX add transaction identification ???
LOG.warn("Rolling back deactivate transaction ", e);
rollback();
+
+ return Result.fail(e.getMessage(), e);
}
}
drivers.sort((driverA, driverB) -> driverA.priority() - driverB.priority());
}
+ public static class Result {
+ private boolean successful;
+
+ private Optional<String> message;
+
+ private Optional<Throwable> cause;
+
+ private Result(boolean successful, Optional<String> message, Optional<Throwable> cause) {
+ this.successful = successful;
+ this.message = message;
+ this.cause = cause;
+ }
+
+ public Optional<Throwable> getCause() {
+ return cause;
+ }
+
+ public boolean isSuccessful() {
+ return successful;
+ }
+
+ public Optional<String> getMessage() {
+ return message;
+ }
+
+ public static Result success(){
+ return new Result(true, Optional.empty(), Optional.empty());
+ }
+
+ public static Result fail(String message, Throwable cause){
+ return new Result(false, Optional.of(message), Optional.of(cause));
+ }
+ }
+
}