/******************************************************************************* * Copyright (c) 2008, 2009 Andrew Gvozdev. * 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: * Andrew Gvozdev (Quoin Inc.) - Initial implementation *******************************************************************************/ package org.eclipse.cdt.make.internal.ui.dnd; import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.make.core.IMakeTarget; import org.eclipse.cdt.make.core.IMakeTargetManager; import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; /** * {@code MakeTargetTransferData} serves for transferring data during a drag and * drop operation between different plug-ins. This object contains an extension * identifier and a block of bytes. When the drop occurs, the data is * interpreted by an action defined in the specified extension. * <p> * Clients using MakeTargetTransfer should create an instance to contain the * drop data. * </p> * * @see IMakeTarget */ public class MakeTargetTransferData { class MakeTargetData { private final String name; // IMakeTarget attributes private final boolean runAllBuilders; private final boolean appendProjectEnvironment; private final String buildTarget; // IMakeCommonBuildInfo attributes private final String buildCommand; private final String buildArguments; private final boolean stopOnError; private final boolean useDefaultBuildCmd; private final boolean appendEnvironment; /** * Constructor to populate the transfer data record with * {@link IMakeTarget} data. * * @param name - make target name. * @param runAllBuilders - make target runAllBuilders flag. * @param appendProjectEnvironment - make target * appendProjectEnvironment flag. * @param buildTarget - make target buildTarget. * @param buildCommand - make target buildCommand. * @param buildArguments - make target buildArguments. * @param stopOnError - make target stopOnError flag. * @param useDefaultBuildCmd - make target useDefaultBuildCmd flag. * @param appendEnvironment - make target appendEnvironment flag. */ MakeTargetData(String name, boolean runAllBuilders, boolean appendProjectEnvironment, String buildTarget, String buildCommand, String buildArguments, boolean stopOnError, boolean useDefaultBuildCmd, boolean appendEnvironment) { this.name = name; this.runAllBuilders = runAllBuilders; this.appendProjectEnvironment = appendProjectEnvironment; this.buildTarget = buildTarget; this.buildCommand = buildCommand; this.buildArguments = buildArguments; this.stopOnError = stopOnError; this.useDefaultBuildCmd = useDefaultBuildCmd; this.appendEnvironment = appendEnvironment; } boolean runAllBuilders() { return runAllBuilders; } boolean appendProjectEnvironment() { return appendProjectEnvironment; } String getBuildTarget() { return buildTarget; } String getBuildCommand() { return buildCommand; } String getBuildArguments() { return buildArguments; } boolean isStopOnError() { return stopOnError; } boolean isDefaultBuildCmd() { return useDefaultBuildCmd; } boolean appendEnvironment() { return appendEnvironment; } String getName() { return name; } } private final List<MakeTargetData> makeTargetData; /** * Default constructor. * */ public MakeTargetTransferData() { makeTargetData = new ArrayList<MakeTargetData>(); } /** * Method to add make target to the target list in preparation to transfer. * * @param target - make target being added. */ public void addMakeTarget(IMakeTarget target) { addMakeTarget(target.getName(), target.runAllBuilders(), target.appendProjectEnvironment(), target.getBuildAttribute(IMakeTarget.BUILD_TARGET, ""), //$NON-NLS-1$ target.getBuildAttribute(IMakeTarget.BUILD_COMMAND, ""), //$NON-NLS-1$ target.getBuildAttribute(IMakeTarget.BUILD_ARGUMENTS, ""), //$NON-NLS-1$ target.isStopOnError(), target.isDefaultBuildCmd(), target.appendEnvironment()); } /** * Add another target to the list of make target transfer records. * * @param name - make target name. * @param runAllBuilders - make target runAllBuilders flag. * @param appendProjectEnvironment - make target appendProjectEnvironment flag. * @param buildTarget - make target buildTarget. * @param buildCommand - make target buildCommand. * @param buildArguments - make target buildArguments. * @param stopOnError - make target stopOnError flag. * @param useDefaultBuildCmd - make target useDefaultBuildCmd flag. * @param appendEnvironment - make target appendEnvironment flag. */ public void addMakeTarget(String name, boolean runAllBuilders, boolean appendProjectEnvironment, String buildTarget, String buildCommand, String buildArguments, boolean stopOnError, boolean useDefaultBuildCmd, boolean appendEnvironment) { makeTargetData.add(new MakeTargetData(name, runAllBuilders, appendProjectEnvironment, buildTarget, buildCommand, buildArguments, stopOnError, useDefaultBuildCmd, appendEnvironment)); } /** * Create an array of make targets from transfer records. Creating of actual {@link IMakeTarget}s * requires supplying a project where they will be assigned by {@link IMakeTargetManager}. * * @param project - project to assign the targets. * @return the array of created {@link IMakeTarget}s * * @see IMakeTarget * @see IMakeTargetManager */ public IMakeTarget[] createMakeTargets(IProject project) { IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager(); ArrayList<IMakeTarget> makeTargets = new ArrayList<IMakeTarget>(makeTargetData.size()); String[] ids = makeTargetManager.getTargetBuilders(project); String builderId = ids[0]; for (MakeTargetData element : makeTargetData) { try { IMakeTarget target = makeTargetManager.createTarget(project, element.getName(), builderId); target.setRunAllBuilders(element.runAllBuilders()); target.setAppendProjectEnvironment(element.appendProjectEnvironment()); target.setBuildAttribute(IMakeTarget.BUILD_TARGET, element.getBuildTarget()); target.setBuildAttribute(IMakeTarget.BUILD_COMMAND, element.getBuildCommand()); target.setBuildAttribute(IMakeTarget.BUILD_ARGUMENTS, element.getBuildArguments()); target.setStopOnError(element.isStopOnError()); target.setUseDefaultBuildCmd(element.isDefaultBuildCmd()); target.setAppendEnvironment(element.appendEnvironment()); makeTargets.add(target); } catch (CoreException e) { MakeUIPlugin.log(e); } } return makeTargets.toArray(new IMakeTarget[makeTargets.size()]); } /** * @return list of make target transfer records for {@link MakeTargetTransfer}. */ List<MakeTargetData> getMakeTargetDataList() { return makeTargetData; } }