/**
* Copyright (c) 2010, 2013 Darmstadt University of Technology.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Olav Lenz - initial API and implementation
*/
package org.eclipse.recommenders.coordinates;
import static com.google.common.base.Optional.absent;
import static org.eclipse.recommenders.utils.Constants.REASON_NOT_IN_CACHE;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.recommenders.utils.Result;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
public class ProjectCoordinateAdvisorService implements IProjectCoordinateAdvisorService {
private List<IProjectCoordinateAdvisor> advisors = new ArrayList<>();
@Override
public ImmutableList<IProjectCoordinateAdvisor> getAdvisors() {
return ImmutableList.copyOf(advisors);
}
@Override
public void addAdvisor(IProjectCoordinateAdvisor strategy) {
advisors.add(strategy);
}
@Override
public void setAdvisors(List<IProjectCoordinateAdvisor> strategies) {
advisors = strategies;
}
/**
* Iterates over all registered {@link IProjectCoordinateAdvisor}s and returns the result of the first successful
* advisor.
*/
@Override
public Optional<ProjectCoordinate> suggest(final DependencyInfo dependencyInfo) {
for (IProjectCoordinateAdvisor a : advisors) {
Optional<ProjectCoordinate> optionalProjectCoordinate = a.suggest(dependencyInfo);
if (optionalProjectCoordinate.isPresent()) {
return optionalProjectCoordinate;
}
}
return absent();
}
@Override
public Result<ProjectCoordinate> trySuggest(DependencyInfo dependencyInfo) {
return Result.absent(REASON_NOT_IN_CACHE);
}
}