/******************************************************************************* * Copyright (c) 2012 Red Hat, Inc. * Distributed under license by Red Hat, 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.hibernate.eclipse.console.actions; import java.util.Iterator; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.actions.SelectionListenerAction; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.eclipse.console.HibernateConsoleMessages; import org.hibernate.eclipse.console.HibernateConsolePlugin; import org.hibernate.eclipse.console.utils.LaunchHelper; /** * * @author Dmitry Geraskov (geraskov@gmail.com) * */ public class RenameAction extends SelectionListenerAction { public static final String RENAME_ACTIONID = "actionid.rename"; //$NON-NLS-1$ private final StructuredViewer viewer; private String imageFilePath = "icons/images/refresh_run.gif"; //$NON-NLS-1$ public RenameAction(StructuredViewer viewer) { super(HibernateConsoleMessages.RenameAction_name); this.viewer = viewer; setImageDescriptor(HibernateConsolePlugin.getImageDescriptor(imageFilePath )); setId(RENAME_ACTIONID); } public void run() { for (Iterator<?> i = getSelectedNonResources().iterator(); i.hasNext();) { Object node = i.next(); if (!(node instanceof ConsoleConfiguration)) { continue; } if (renameConsoleConfiuration((ConsoleConfiguration) node)){ viewer.refresh(node); } break; } } public boolean renameConsoleConfiuration(ConsoleConfiguration config){ ILaunchConfiguration launchConfiguration = null;; try { launchConfiguration = LaunchHelper.findHibernateLaunchConfig(config.getName()); } catch (CoreException e) { HibernateConsolePlugin.getDefault().showError(null, HibernateConsoleMessages.RenameAction_error_title, e); } return launchConfiguration != null ? renameLaunchConfiguration(launchConfiguration) : false; } public boolean renameLaunchConfiguration(ILaunchConfiguration launchConfiguration){ Shell mParentShell = null; IInputValidator inputValidator = new NameValidator(); InputDialog d = new InputDialog( mParentShell, HibernateConsoleMessages.RenameAction_dialog_title, HibernateConsoleMessages.RenameAction_dialog_message, launchConfiguration.getName(), inputValidator); if (d.open() == Window.OK ){ try { ILaunchConfigurationWorkingCopy wc = launchConfiguration.getWorkingCopy(); wc.rename(d.getValue()); wc.doSave(); return true; } catch (CoreException e) { HibernateConsolePlugin.getDefault().showError(mParentShell, HibernateConsoleMessages.RenameAction_error_title, e); } } return false; } } class NameValidator implements IInputValidator { @Override public String isValid(String newText) { ILaunchManager mgr = DebugPlugin.getDefault().getLaunchManager(); try { if (mgr.isExistingLaunchConfigurationName(newText)) return HibernateConsoleMessages.RenameAction_existing_name; if (mgr.isValidLaunchConfigurationName(newText)) return null; } catch(Exception iae) { HibernateConsolePlugin.getDefault().log(iae); } return HibernateConsoleMessages.RenameAction_error_name; } }