org.eclipse.egit.ui.internal.actions.PushMenu.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.ui.internal.actions.PushMenu.java

Source

/*******************************************************************************
 * Copyright (C) 2014, Red Hat Inc. 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:
 *   - Mickael Istria (Red Hat Inc.) - 436669 Simply push workflow
 *******************************************************************************/
package org.eclipse.egit.ui.internal.actions;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.internal.CommonUtils;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.selection.SelectionUtils;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.menus.IWorkbenchContribution;
import org.eclipse.ui.services.IServiceLocator;

/**
 * This is the definition of the Push menu on a given node. Depending on the
 * node, it will show either "Push Branch '...'" or "Push HEAD".
 */
public class PushMenu extends CompoundContributionItem implements IWorkbenchContribution {

    private IServiceLocator serviceLocator;

    private IHandlerService handlerService;

    /**    */
    public PushMenu() {
        this(null);
    }

    /**
     * @param id
     */
    public PushMenu(String id) {
        super(id);
    }

    @Override
    public boolean isDynamic() {
        return true;
    }

    @Override
    public void initialize(IServiceLocator locator) {
        this.serviceLocator = locator;
        this.handlerService = CommonUtils.getService(locator, IHandlerService.class);
    }

    @Override
    protected IContributionItem[] getContributionItems() {
        List<IContributionItem> res = new ArrayList<>();

        if (this.handlerService != null) {
            Repository repository = SelectionUtils.getRepository(handlerService.getCurrentState());

            if (repository != null) {
                try {
                    String ref = repository.getFullBranch();
                    String menuLabel = UIText.PushMenu_PushHEAD;
                    if (ref != null && ref.startsWith(Constants.R_HEADS)) {
                        menuLabel = NLS.bind(UIText.PushMenu_PushBranch, Repository.shortenRefName(ref));
                    }
                    CommandContributionItemParameter params = new CommandContributionItemParameter(
                            this.serviceLocator, getClass().getName(), ActionCommands.PUSH_BRANCH_ACTION,
                            CommandContributionItem.STYLE_PUSH);
                    params.label = menuLabel;
                    CommandContributionItem item = new CommandContributionItem(params);
                    res.add(item);
                } catch (IOException ex) {
                    Activator.handleError(ex.getLocalizedMessage(), ex, false);
                }
            }
        }
        return res.toArray(new IContributionItem[res.size()]);
    }
}