/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.actions;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.jface.action.IAction;
import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants;
import org.eclipse.team.internal.ccvs.ui.operations.BranchOperation;

/**
 * BranchAction tags the selected resources with a branch tag specified by the user,
 * and optionally updates the local resources to point to the new branch.
 */
public class BranchAction extends WorkspaceTraversalAction {

	@Override
	public void execute(IAction action) throws InvocationTargetException, InterruptedException {
		ResourceMapping[] resourceMappings = getCVSResourceMappings();
		if (resourceMappings == null || resourceMappings.length == 0) {
			// Could be a sync element tat is selected
			IResource[] resources = getSelectedResources();
			resourceMappings = getResourceMappings(resources);
		}
		if (resourceMappings == null || resourceMappings.length == 0) {
			// Nothing is select so just return
			return;
		}
		new BranchOperation(getTargetPart(), resourceMappings).run();
	}
	
	private ResourceMapping[] getResourceMappings(IResource[] resources) {
		List<ResourceMapping> mappings = new ArrayList<>();
		for (int i = 0; i < resources.length; i++) {
			IResource resource = resources[i];
			Object o = getAdapter(resource, ResourceMapping.class);
			if (o instanceof ResourceMapping) {
				ResourceMapping mapping = (ResourceMapping) o;
				mappings.add(mapping);
			}
		}
		return mappings.toArray(new ResourceMapping[mappings.size()]);
	}

	@Override
	public String getId() {
		return ICVSUIConstants.CMD_BRANCH;
	}
}

