org.eclipse.che.ide.ext.git.client.action.StatusBarBranchPointer.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.ide.ext.git.client.action.StatusBarBranchPointer.java

Source

/*
 * Copyright (c) 2012-2018 Red Hat, Inc.
 * 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:
 *   Red Hat, Inc. - initial API and implementation
 */
package org.eclipse.che.ide.ext.git.client.action;

import com.google.common.annotations.Beta;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Cursor;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.ide.api.action.ActionEvent;
import org.eclipse.che.ide.api.action.BaseAction;
import org.eclipse.che.ide.api.action.CustomComponentAction;
import org.eclipse.che.ide.api.action.Presentation;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.resources.Project;
import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant;
import org.eclipse.che.ide.ext.git.client.GitResources;
import org.eclipse.che.ide.ext.git.client.branch.BranchPresenter;
import org.vectomatic.dom.svg.ui.SVGImage;

/**
 * Displays in status bar current project name with vcs branch if present.
 *
 * @author Vlad Zhukovskyi
 * @since 6.0.0
 */
@Singleton
@Beta
public class StatusBarBranchPointer extends BaseAction implements CustomComponentAction {

    public static final String GIT_CURRENT_HEAD_NAME = "git.current.head.name";

    private final AppContext appContext;
    private final GitResources resources;
    private final BranchPresenter branchPresenter;
    private final GitLocalizationConstant constant;
    private final HorizontalPanel panel;

    @Inject
    public StatusBarBranchPointer(AppContext appContext, GitResources resources, BranchPresenter branchPresenter,
            GitLocalizationConstant constant) {
        super();
        this.appContext = appContext;
        this.resources = resources;
        this.branchPresenter = branchPresenter;
        this.constant = constant;

        panel = new HorizontalPanel();
        panel.ensureDebugId("statusBarProjectBranchPointerPanel");
    }

    @Override
    public Widget createCustomComponent(Presentation presentation) {
        return panel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    }

    @Override
    public void update(ActionEvent e) {
        panel.clear();

        Project project = appContext.getRootProject();
        if (project != null && project.getAttributes().containsKey(GIT_CURRENT_HEAD_NAME)) {
            Label projectNameLabel = new Label(project.getName());
            projectNameLabel.ensureDebugId("statusBarProjectBranchRepositoryName");
            projectNameLabel.getElement().getStyle().setMarginLeft(5., Unit.PX);
            panel.add(projectNameLabel);

            SVGImage branchIcon = new SVGImage(resources.checkoutReference());
            branchIcon.getSvgElement().getStyle().setMarginLeft(5., Unit.PX);
            panel.add(branchIcon);

            Label headLabel = new Label(project.getAttribute(GIT_CURRENT_HEAD_NAME));
            headLabel.ensureDebugId("statusBarProjectBranchName");
            headLabel.setTitle(constant.branchesControlTitle());
            Style headLabelStyle = headLabel.getElement().getStyle();
            headLabelStyle.setCursor(Cursor.POINTER);
            headLabelStyle.setMarginLeft(5., Unit.PX);
            headLabel.addClickHandler(event -> branchPresenter.showBranches(project));
            panel.add(headLabel);
        }
    }
}