/* * Copyright 2015 Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.net.intent.impl.phase; import java.util.Optional; import java.util.concurrent.Callable; import static com.google.common.base.Preconditions.checkNotNull; /** * Worker to process a submitted intent. {@link #call()} method generates */ public final class IntentWorker implements Callable { private final IntentProcessPhase initial; /** * Create an instance with the specified arguments. * * @param initial initial intent process phase */ public IntentWorker(IntentProcessPhase initial) { this.initial = checkNotNull(initial); } @Override public FinalIntentProcessPhase call() throws Exception { IntentProcessPhase update = initial; Optional currentPhase = Optional.of(update); IntentProcessPhase previousPhase = update; while (currentPhase.isPresent()) { previousPhase = currentPhase.get(); currentPhase = previousPhase.execute(); } return (FinalIntentProcessPhase) previousPhase; } }