/***************************************************************************** * Copyright (c) 2006-2013, Cloudsmith Inc. * The code, documentation and other materials contained herein have been * licensed under the Eclipse Public License - v 1.0 by the copyright holder * listed above, as the Initial Contributor under such license. The text of * such license is available at www.eclipse.org. *****************************************************************************/ package org.eclipse.buckminster.pde.prefs; import org.eclipse.buckminster.cmdline.BasicPreferenceHandler; import org.eclipse.buckminster.pde.Messages; import org.eclipse.buckminster.runtime.Buckminster; import org.eclipse.buckminster.runtime.BuckminsterException; import org.eclipse.buckminster.runtime.Trivial; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.osgi.util.NLS; import org.eclipse.pde.core.target.ITargetDefinition; import org.eclipse.pde.core.target.ITargetHandle; import org.eclipse.pde.core.target.ITargetPlatformService; import org.eclipse.pde.core.target.LoadTargetDefinitionJob; import org.osgi.service.prefs.BackingStoreException; /** * @author Thomas Hallgren */ @SuppressWarnings("restriction") public class TargetDefinitionHandler extends BasicPreferenceHandler { @Override public String get(String defaultValue) throws CoreException { Buckminster bucky = Buckminster.getDefault(); ITargetPlatformService service = bucky.getService(ITargetPlatformService.class); try { ITargetHandle activeHandle = service.getWorkspaceTargetHandle(); if (activeHandle == null) return defaultValue; return activeHandle.getTargetDefinition().getName(); } finally { bucky.ungetService(service); } } @Override public void set(String targetDefinitionName) throws BackingStoreException { Buckminster bucky = Buckminster.getDefault(); ITargetPlatformService service = null; try { service = bucky.getService(ITargetPlatformService.class); ITargetDefinition target = null; for (ITargetHandle targetHandle : service.getTargets(new NullProgressMonitor())) { ITargetDefinition candidate = targetHandle.getTargetDefinition(); if (Trivial.equalsAllowNull(targetDefinitionName, candidate.getName())) { ITargetHandle activeHandle = service.getWorkspaceTargetHandle(); if (activeHandle != null && activeHandle.equals(targetHandle)) // This target is already active. Nothing left to do // here return; target = candidate; break; } } if (target == null) throw BuckminsterException.fromMessage(NLS.bind(Messages.Found_no_target_definition_named_0, targetDefinitionName)); LoadTargetDefinitionJob job = new LoadTargetDefinitionJob(target); IStatus status = job.run(new NullProgressMonitor()); if (status.getSeverity() == IStatus.ERROR) throw new CoreException(status); } catch (CoreException e) { throw new BackingStoreException(e.getMessage(), e); } finally { bucky.ungetService(service); } } @Override public void unset() { } }