/******************************************************************************* * Copyright (c) 2014 IBM Corporation and others * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.orion.server.cf.ds; import java.util.ArrayList; import java.util.List; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.orion.server.cf.ds.objects.Plan; import org.eclipse.orion.server.cf.manifest.v2.ManifestParseTree; public final class DeploymentService implements IDeploymentService { private List<IDeploymentPlanner> planners; private List<IDeploymentPackager> packagers; protected synchronized void bindPlanner(IDeploymentPlanner planner) { planners.add(planner); } protected synchronized void unbindPlanner(IDeploymentPlanner planner) { planners.remove(planner); } protected synchronized void bindPackager(IDeploymentPackager packager) { packagers.add(packager); } protected synchronized void unbindPackager(IDeploymentPackager packager) { packagers.remove(packager); } public DeploymentService() { planners = new ArrayList<IDeploymentPlanner>(); packagers = new ArrayList<IDeploymentPackager>(); } @Override public String getDefaultDeplomentPlannerId() { return GenericDeploymentPlanner.class.getCanonicalName(); } @Override public IDeploymentPlanner getDefaultDeplomentPlanner() { return getDeploymentPlanner(getDefaultDeplomentPlannerId()); } @Override public IDeploymentPlanner getDeploymentPlanner(String id) { if (id == null) return null; for (IDeploymentPlanner planner : planners) if (id.equals(planner.getId())) return planner; return null; } @Override public List<Plan> getDeploymentPlans(IFileStore contentLocation, ManifestParseTree manifest, IFileStore manifestStore) { List<Plan> plans = new ArrayList<Plan>(); for (IDeploymentPlanner planner : planners) { Plan plan = planner.getDeploymentPlan(contentLocation, manifest != null ? new ManifestParseTree(manifest) : null, manifestStore); if (plan != null) plans.add(plan); } return plans; } @Override public String getDefaultDeplomentPackagerId() { return GenericDeploymentPackager.class.getCanonicalName(); } @Override public IDeploymentPackager getDefaultDeplomentPackager() { return getDeploymentPackager(getDefaultDeplomentPackagerId()); } @Override public IDeploymentPackager getDeploymentPackager(String id) { if (id == null) return null; for (IDeploymentPackager packager : packagers) if (id.equals(packager.getId())) return packager; return null; } }