package org.xmind.ui.internal.resourcemanager; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.SafeRunnable; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.xmind.ui.internal.MindMapMessages; import org.xmind.ui.internal.e4models.IContextRunnable; import org.xmind.ui.internal.e4models.IModelConstants; import org.xmind.ui.internal.resourcemanager.TemplateResourceManagerViewer.TemplateGalleryCore; import org.xmind.ui.internal.utils.ResourceUtils; import org.xmind.ui.mindmap.IResourceManagerListener; import org.xmind.ui.mindmap.ITemplate; import org.xmind.ui.mindmap.ITemplateGroup; import org.xmind.ui.mindmap.MindMapUI; public class TemplateResourceManagerPage extends ResourceManagerDialogPage implements IResourceManagerListener { private static final int IMPORT_BUTTON_ID = IDialogConstants.CLIENT_ID + 1; private static final String IMPORT_RESOURCE_BUNDLE_COMMAND_ID = "org.xmind.ui.command.importXMindResourceBundle"; //$NON-NLS-1$ private TemplateResourceManagerViewer viewer; @Override protected ResourceManagerViewer createViewer() { viewer = new TemplateResourceManagerViewer(); MindMapUI.getResourceManager().addResourceManagerListener(this); return viewer; } @Override public void dispose() { MindMapUI.getResourceManager().removeResourceManagerListener(this); super.dispose(); } public void userTemplateAdded(ITemplate template) { if (!(template instanceof ITemplate)) return; if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) return; viewer.refresh(); viewer.reveal(TemplateGalleryCore.getInstance() .getGroupByName(TemplateGalleryCore.USER_GROUP_NAME)); viewer.setSelection(new StructuredSelection(template)); } public void userTemplateRemoved(ITemplate template) { if (template instanceof ITemplate) { if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) return; viewer.refresh(); } } @Override protected void createButtonsForButtonBar(Composite composite) { Button importButton = createButton(composite, IMPORT_BUTTON_ID, MindMapMessages.TemplateResourceManagerPage_Import_button, false); final IAction addTemplateAction = getAddTemplateAction(); importButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addTemplateAction.run(); } }); } private IAction getAddTemplateAction() { Action addTemplateAction = new Action( MindMapMessages.TemplateResourceManagerPage_AddTemplates_label) { @Override public void run() { FileDialog dialog = new FileDialog( Display.getCurrent().getActiveShell(), SWT.OPEN); String ext = "*" + MindMapUI.FILE_EXT_TEMPLATE; //$NON-NLS-1$ dialog.setFilterExtensions(new String[] { ext }); dialog.setFilterNames(new String[] { NLS.bind("{0} ({1})", //$NON-NLS-1$ MindMapMessages.TemplateResourceManagerPage_TemplateFilterName_label, ext) }); String path = dialog.open(); if (path == null) return; final File templateFile = new File(path); if (templateFile != null && templateFile.exists()) { SafeRunner.run(new SafeRunnable() { public void run() throws Exception { MindMapUI.getResourceManager() .addUserTemplateFromWorkbookURI( templateFile.toURI()); } }); } } }; addTemplateAction.setToolTipText( MindMapMessages.TemplateResourceManagerPage_AddTemplates_tooltip); return addTemplateAction; } @Override protected void registerRunnable(IEclipseContext eclipseContext) { super.registerRunnable(eclipseContext); eclipseContext.set( getId() + "/" + IModelConstants.KEY_MODEL_PART_DELETE, //$NON-NLS-1$ new IContextRunnable() { @Override public void run() { if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { List<ITemplate> templates = getSelectedTemplates(); if (templates.isEmpty()) { return; } StringBuilder sb = new StringBuilder( templates.size() * 10); for (ITemplate template : templates) { if (sb.length() > 0) { sb.append(','); sb.append(' '); } sb.append('\''); sb.append(template.getName()); sb.append('\''); } if (!MessageDialog.openConfirm( viewer.getControl().getShell(), MindMapMessages.TemplateResourceManagerPage_Delete_ConfirmDialog_title, NLS.bind( MindMapMessages.TemplateResourceManagerPage_Delete_ConfirmDialog_message, sb.toString()))) { return; } ResourceUtils.deleteTemplates(templates); } } @Override public boolean canExecute(IEclipseContext context, String contextKey) { List<ITemplate> templates = getSelectedTemplates(); List<ITemplate> sysTemplates = MindMapUI .getResourceManager().getSystemTemplates(); boolean canExecute = !templates.isEmpty(); for (ITemplate template : templates) { canExecute = canExecute && !sysTemplates.contains(template); } List<ITemplateGroup> sysGroups = MindMapUI .getResourceManager().getSystemTemplateGroups(); for (ITemplateGroup group : sysGroups) { List<ITemplate> gTemplates = group.getTemplates(); for (ITemplate template : templates) canExecute = canExecute && !gTemplates.contains(template); } return canExecute; } }); eclipseContext.set( getId() + "/" + IModelConstants.KEY_MODEL_PART_DUPLICATE, //$NON-NLS-1$ new IContextRunnable() { @Override public void run() { if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { List<ITemplate> selectedTemplates = getSelectedTemplates(); if (!selectedTemplates.isEmpty()) { ResourceUtils .duplicateTemplates(selectedTemplates); } } } @Override public boolean canExecute(IEclipseContext context, String contextKey) { List<ITemplate> templates = getSelectedTemplates(); boolean canExecute = !templates.isEmpty(); return canExecute; } }); eclipseContext.set( getId() + "/" + IModelConstants.KEY_MODEL_PART_RENAME, //$NON-NLS-1$ new IContextRunnable() { @Override public void run() { if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { List<ITemplate> selectedTemplates = getSelectedTemplates(); if (selectedTemplates.size() == 1) { ITemplate template = selectedTemplates.get(0); viewer.startEditing(template); } } } @Override public boolean canExecute(IEclipseContext context, String contextKey) { List<ITemplate> selectedTemplates = getSelectedTemplates(); List<ITemplate> systemTemplates = MindMapUI .getResourceManager().getSystemTemplates(); boolean canExecute = selectedTemplates.size() == 1; for (ITemplate template : selectedTemplates) { canExecute = canExecute && !systemTemplates.contains(template); } List<ITemplateGroup> sysGroups = MindMapUI .getResourceManager().getSystemTemplateGroups(); for (ITemplateGroup group : sysGroups) { List<ITemplate> gTemplates = group.getTemplates(); for (ITemplate template : selectedTemplates) canExecute = canExecute && !gTemplates.contains(template); } return canExecute; } }); } private List<ITemplate> getSelectedTemplates() { ArrayList<ITemplate> templates = new ArrayList<ITemplate>(); if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed()) { ISelection selection = viewer.getStructuredSelection(); if (selection instanceof IStructuredSelection) { for (Object element : ((IStructuredSelection) selection) .toList()) { templates.add((ITemplate) element); } } } return templates; } @Override protected String getContextMenuId() { return IModelConstants.POPUPMENU_ID_RESOURCEMANAGER_TEMPLATE; } @Override public String getModelPageId() { return IModelConstants.PAGE_ID_RESOURCE_MANAGER_TEMPLATE; } @Override public String getModelPageTitle() { return null; } }