/*******************************************************************************
* Copyright (c) 2013 Cloud Bees, Inc.
* All rights reserved.
* This program is 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:
* Cloud Bees, Inc. - initial API and implementation
*******************************************************************************/
package com.cloudbees.eclipse.ui.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import com.cloudbees.eclipse.core.CloudBeesCorePlugin;
import com.cloudbees.eclipse.core.CloudBeesException;
import com.cloudbees.eclipse.ui.CBImages;
import com.cloudbees.eclipse.ui.CloudBeesUIPlugin;
public class ActiveAccountContributionItem extends CompoundContributionItem {
boolean onlyAccountRelated = false;
public ActiveAccountContributionItem() {
super();
}
public ActiveAccountContributionItem(boolean onlyAccountRelated) {
this.onlyAccountRelated = onlyAccountRelated;
}
@Override
protected IContributionItem[] getContributionItems() {
List<IContributionItem> list = new ArrayList<IContributionItem>();
if (!onlyAccountRelated) {
// Add new project wiz only when RUN@cloud is available
if (CloudBeesCorePlugin.validateRUNatCloudJRE()) {
CommandContributionItemParameter params = new CommandContributionItemParameter(CloudBeesUIPlugin.getDefault()
.getWorkbench(), null, "com.cloudbees.eclipse.run.ui.commands.newSampleWebApp",
CommandContributionItem.STYLE_PUSH);
params.label = "New CloudBees ClickStart Project...";
params.mnemonic = "N";
params.tooltip = "Create a new project from ClickStart templates";
params.icon = CloudBeesUIPlugin.getImageDescription(CBImages.ICON_16X16_NEW_CB_PROJ_WIZ);
list.add(new CommandContributionItem(params));
}
{
CommandContributionItemParameter params = new CommandContributionItemParameter(CloudBeesUIPlugin.getDefault()
.getWorkbench(), null, "com.cloudbees.eclipse.ui.commands.showCloudBeesView",
CommandContributionItem.STYLE_PUSH);
params.label = "CloudBees View";
params.mnemonic = "V";
params.tooltip = "Open CloudBees View";
params.icon = CloudBeesUIPlugin.getImageDescription(CBImages.ICON_16X16_CB_PLAIN);
list.add(new CommandContributionItem(params));
}
list.add(new Separator());
}
addActiveAccount(list);
{
CommandContributionItemParameter params = new CommandContributionItemParameter(CloudBeesUIPlugin.getDefault()
.getWorkbench(), null, "com.cloudbees.eclipse.run.ui.commands.cloudBeesAccount",
CommandContributionItem.STYLE_PUSH);
params.label = "Configure...";
params.mnemonic = "C";
params.tooltip = "Manage CloudBees Eclipse Toolkit settings";
//params.icon = CloudBeesUIPlugin.getImageDescription(CBImages.ICON_16X16_CB_PLAIN);
list.add(new CommandContributionItem(params));
}
return list.toArray(new IContributionItem[0]);
}
private void addActiveAccount(List<IContributionItem> list) {
try {
final String accountName = CloudBeesUIPlugin.getDefault().getActiveAccountName(new NullProgressMonitor());
String email = CloudBeesCorePlugin.getDefault().getGrandCentralService().getEmail();
final String accounts[] = CloudBeesCorePlugin.getDefault().getGrandCentralService().getCachedAccounts();
if (accounts != null && accounts.length >= 1) {
String post = "";
if (accountName != null && accountName.length() > 0) {
post = " (" + accountName + ")";
}
MenuManager submenuActiveAccount = new MenuManager(email + post, "com.cloudbees.eclipse.ui.activeAccount");
submenuActiveAccount.add(new CompoundContributionItem("accountitems") {
protected IContributionItem[] getContributionItems() {
// Here's where you would dynamically generate your list
List<IContributionItem> sublist = new ArrayList<IContributionItem>();
for (String ac : accounts) {
ActionContributionItem item = new ActionContributionItem(new SelectAccountAction(ac, ac
.equals(accountName)));
sublist.add(item);
}
return sublist.toArray(new IContributionItem[0]);
}
});
list.add(submenuActiveAccount);
}
} catch (CloudBeesException e) {
e.printStackTrace();
}
}
}