org.eclipse.egit.ui.internal.repository.BranchPropertySource.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.ui.internal.repository.BranchPropertySource.java

Source

/*******************************************************************************
 * Copyright (c) 2012 SAP AG.
 * 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:
 *    Mathias Kinzler (SAP AG) - initial implementation
 *******************************************************************************/
package org.eclipse.egit.ui.internal.repository;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.egit.ui.internal.UIIcons;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.dialogs.BranchConfigurationDialog;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.PropertyDescriptor;
import org.eclipse.ui.views.properties.PropertySheetPage;

/**
 * Properties for repository and user configuration (read-only).
 * <p>
 * Depending on which mode is selected, either the user configuration, the
 * repository configuration, or the effective configuration is shown.
 */
public class BranchPropertySource implements IPropertySource {
    static final String EDITACTIONID = "EditBranch"; //$NON-NLS-1$

    private static class EditAction extends Action {

        private BranchPropertySource source;

        public EditAction(String text, ImageDescriptor image, BranchPropertySource source) {
            super(text, image);
            this.source = source;
        }

        public EditAction setSource(BranchPropertySource source) {
            this.source = source;
            return this;
        }

        @Override
        public String getId() {
            return EDITACTIONID;
        }

        @Override
        public void run() {
            new BranchConfigurationDialog(source.myPage.getSite().getShell(), source.myBranchName,
                    source.myRepository).open();
            source.myPage.refresh();
        }

        @Override
        public int getStyle() {
            return IAction.AS_PUSH_BUTTON;
        }
    }

    private final PropertySheetPage myPage;

    private final Repository myRepository;

    private final String myBranchName;

    private ActionContributionItem editAction;

    /**
     * @param repository
     *            the repository
     * @param fullBranchName
     *            the full name of the branch to show
     * @param page
     *            the page showing the properties
     */
    public BranchPropertySource(Repository repository, String fullBranchName, PropertySheetPage page) {
        myPage = page;
        myBranchName = Repository.shortenRefName(fullBranchName);
        myRepository = repository;

        synchronized (myPage) {
            // check if the actions are already there, if not, create them
            IActionBars bars = myPage.getSite().getActionBars();
            IToolBarManager mgr = bars.getToolBarManager();

            editAction = ((ActionContributionItem) mgr.find(EDITACTIONID));
            if (editAction != null)
                ((EditAction) editAction.getAction()).setSource(this);
            else {
                editAction = new ActionContributionItem(
                        new EditAction(UIText.RepositoryPropertySource_EditConfigButton, UIIcons.EDITCONFIG, this));

                mgr.add(new Separator());
                mgr.add(editAction);
            }

            mgr.update(false);
        }
    }

    public Object getEditableValue() {
        return null;
    }

    public IPropertyDescriptor[] getPropertyDescriptors() {
        List<IPropertyDescriptor> resultList = new ArrayList<IPropertyDescriptor>();

        PropertyDescriptor desc = new PropertyDescriptor(ConfigConstants.CONFIG_KEY_MERGE,
                UIText.BranchPropertySource_UpstreamBranchDescriptor);
        desc.setCategory(UIText.BranchPropertySource_UpstreamConfigurationCategory);
        resultList.add(desc);
        desc = new PropertyDescriptor(ConfigConstants.CONFIG_KEY_REMOTE,
                UIText.BranchPropertySource_RemoteDescriptor);
        desc.setCategory(UIText.BranchPropertySource_UpstreamConfigurationCategory);
        resultList.add(desc);
        desc = new PropertyDescriptor(ConfigConstants.CONFIG_KEY_REBASE,
                UIText.BranchPropertySource_RebaseDescriptor);
        desc.setCategory(UIText.BranchPropertySource_UpstreamConfigurationCategory);
        resultList.add(desc);

        return resultList.toArray(new IPropertyDescriptor[0]);
    }

    public Object getPropertyValue(Object id) {
        String actId = ((String) id);
        String value = myRepository.getConfig().getString(ConfigConstants.CONFIG_BRANCH_SECTION, myBranchName,
                actId);
        if (value == null || value.length() == 0)
            return UIText.BranchPropertySource_ValueNotSet;

        return value;
    }

    public boolean isPropertySet(Object id) {
        return false;
    }

    public void resetPropertyValue(Object id) {
        // no editing here
    }

    public void setPropertyValue(Object id, Object value) {
        // no editing here
    }
}