package eu.jucy.gui.itemhandler; import java.util.ArrayList; import java.util.Collections; import java.util.List; import logger.LoggerFactory; import org.apache.log4j.Logger; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.ui.ISelectionService; import org.eclipse.ui.actions.CompoundContributionItem; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.menus.IWorkbenchContribution; import org.eclipse.ui.services.IServiceLocator; import uc.IUser; import uc.files.downloadqueue.AbstractDownloadQueueEntry; import eu.jucy.gui.Lang; import eu.jucy.gui.UserColumns; import eu.jucy.gui.itemhandler.DownloadQueueHandlers.ReaddSourceHandler; import eu.jucy.gui.itemhandler.DownloadQueueHandlers.RemoveSourceHandler; import eu.jucy.gui.itemhandler.UserHandlers.GetFilelistHandler; import eu.jucy.gui.itemhandler.UserHandlers.RemoveUserFromQueueHandler; import eu.jucy.gui.itemhandler.UserHandlers.SendPMHandler; public class DownloadQueueContributionItem extends CompoundContributionItem implements IWorkbenchContribution { private static final Logger logger = LoggerFactory.make(); private IServiceLocator serviceLocator; public void initialize(IServiceLocator serviceLocator) { this.serviceLocator = serviceLocator; } @Override protected IContributionItem[] getContributionItems() { List<IContributionItem> topLevel = new ArrayList<IContributionItem>(); ISelectionService selserv = (ISelectionService)serviceLocator.getService(ISelectionService.class); List<AbstractDownloadQueueEntry> entries = DownloadQueueHandlers.getSelected(selserv.getSelection(),true); logger.debug("menu is about to show"); if (entries.size() == 1) { AbstractDownloadQueueEntry adqe = entries.get(0); MenuManager reAddUser = new MenuManager(Lang.ReAddUserToFile); MenuManager getFilelist = new MenuManager(Lang.GetFilelist); MenuManager sendPM = new MenuManager(Lang.SendPrivateMessage); MenuManager removeSource = new MenuManager(Lang.RemoveUserFromFile); MenuManager removeUserFromQueue = new MenuManager(Lang.RemoveUserFromDQ); if (!adqe.getUsers().isEmpty()) { topLevel.add(getFilelist); topLevel.add(sendPM); topLevel.add(removeUserFromQueue); removeSource.add(create(null,RemoveSourceHandler.COMMAND_ID)); removeSource.add(new Separator()); topLevel.add(removeSource); } if (!adqe.getRemovedUsers().isEmpty()) { reAddUser.add(create(null,ReaddSourceHandler.COMMAND_ID)); reAddUser.add(new Separator()); topLevel.add(reAddUser); } for (IUser usr:adqe.getUsers()) { getFilelist.add(create(usr,GetFilelistHandler.COMMAND_ID+UserHandlers.BY_ID_POSTFIX)); if (usr.getHub() != null) { sendPM.add(create(usr,SendPMHandler.COMMAND_ID+UserHandlers.BY_ID_POSTFIX)); } removeSource.add(create(usr,RemoveSourceHandler.COMMAND_ID)); removeUserFromQueue.add(create(usr,RemoveUserFromQueueHandler.COMMAND_ID+UserHandlers.BY_ID_POSTFIX)); logger.debug("added user: "+usr); } for (IUser usr: adqe.getRemovedUsers()) { reAddUser.add(create(usr,ReaddSourceHandler.COMMAND_ID)); } // Set<AbstractDownloadFinished> doAfter = adqe.getDoAfterDownload(); // if (!doAfter.isEmpty()) { // topLevel.add(new Separator()); // for (AbstractDownloadFinished adf:doAfter) { // //TODO works with command... HandlerUtil.updateRadioState(event.getCommand(), currentState); // // } // } } return topLevel.toArray( new IContributionItem[]{}); } private IContributionItem create(IUser usr,String commandId) { CommandContributionItemParameter ccip = new CommandContributionItemParameter(serviceLocator, null, commandId,SWT.PUSH); if (usr != null) { ccip.parameters = Collections.singletonMap( UserHandlers.USER_BY_ID,usr.getUserid().toString()); ccip.label = usr.getNick(); ccip.icon = ImageDescriptor.createFromImage(UserColumns.Nick.getUserImage(usr,false)); } else { ccip.parameters = Collections.singletonMap( UserHandlers.USER_BY_ID,null); //all users ccip.label = Lang.All; } return new CommandContributionItem(ccip); } }