// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.mdm.repository.ui.actions; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.window.Window; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.mdm.repository.core.AbstractRepositoryAction; import org.talend.mdm.repository.core.IRepositoryNodeConfiguration; import org.talend.mdm.repository.core.IServerObjectRepositoryType; import org.talend.mdm.repository.core.command.CommandManager; import org.talend.mdm.repository.core.command.ICommand; import org.talend.mdm.repository.core.service.ContainerCacheService; import org.talend.mdm.repository.extension.RepositoryNodeConfigurationManager; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef; import org.talend.mdm.repository.model.mdmproperties.ContainerItem; import org.talend.mdm.repository.model.mdmproperties.MDMServerObjectItem; import org.talend.mdm.repository.model.mdmserverobject.MDMServerObject; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.mdm.repository.utils.ValidateUtil; import org.talend.repository.model.IProxyRepositoryFactory; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; /** * DOC hbhong class global comment. Detailled comment */ public class RenameObjectAction extends AbstractRepositoryAction { static Logger log = Logger.getLogger(RenameObjectAction.class); IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory(); /** * DOC hbhong RemoveFromRepositoryAction constructor comment. * * @param text */ public RenameObjectAction() { super(""); //$NON-NLS-1$ setImageDescriptor(ImageCache.getImage(EImage.RENAME.getPath())); } @Override public String getGroupName() { return GROUP_EDIT; } @Override public String getText() { return Messages.RenameObjectAction_rename; } @Override protected boolean needValidateLockedObject() { return true; } @Override protected void doRun() { Object obj = getSelectedObject().get(0); if (obj instanceof IRepositoryViewObject) { IRepositoryViewObject viewObj = (IRepositoryViewObject) obj; MDMServerObjectItem item = (MDMServerObjectItem) viewObj.getProperty().getItem(); MDMServerObject serverObject = item.getMDMServerObject(); IRepositoryNodeConfiguration configuration = RepositoryNodeConfigurationManager.getConfiguration(item); if (configuration != null) { ERepositoryObjectType type = configuration.getResourceProvider().getRepositoryObjectType(item); IRepositoryViewObject parentViewObj = ContainerCacheService.get(type, item.getState().getPath()); try { if (serverObject != null) { String oldName = serverObject.getName(); String newName = showRenameDlg(type, (ContainerItem) parentViewObj.getProperty().getItem(), oldName); if (newName != null && factory.isEditableAndLockIfPossible(item)) { serverObject.setName(newName); viewObj.getProperty().setLabel(newName); viewObj.getProperty().setDisplayName(newName); factory.save(viewObj.getProperty().getItem(), false); MDMServerDef lastServerDef = RepositoryResourceUtil.getLastServerDef(viewObj); if (lastServerDef != null) { CommandManager.getInstance().pushCommand(ICommand.CMD_RENAME, viewObj.getId(), new String[] { oldName, newName }); } } } commonViewer.refresh(obj); } catch (PersistenceException e) { log.error(e.getMessage(), e); } finally { try { factory.unlock(item); } catch (PersistenceException e) { log.error(e.getMessage(), e); } catch (LoginException e) { log.error(e.getMessage(), e); } } } } } private String showRenameDlg(final ERepositoryObjectType type, final ContainerItem parentItem, final String originalName) { InputDialog dlg = new InputDialog(getShell(), Messages.RenameObjectAction_rename, Messages.Common_rename, originalName, new IInputValidator() { public String isValid(String newText) { if (newText == null || newText.trim().length() == 0) { return Messages.Common_nameCanNotBeEmpty; } if (type.equals(IServerObjectRepositoryType.TYPE_TRANSFORMERV2) || type.equals(IServerObjectRepositoryType.TYPE_VIEW)) { if (!ValidateUtil.matchViewProcessRegex(newText)) { return Messages.Common_nameInvalid; } } else if (!ValidateUtil.matchCommonRegex(newText)) { return Messages.Common_nameInvalid; } // if (RepositoryResourceUtil.isExistByName(parentItem.getRepObjType(), newText.trim())) { return Messages.Common_nameIsUsed; } return null; }; }); dlg.setBlockOnOpen(true); if (dlg.open() == Window.CANCEL) { return null; } return dlg.getValue(); } @Override public boolean isVisible(IRepositoryViewObject viewObj) { if (getSelectedObject().size() == 1) { String path = viewObj.getPath(); if (path != null && path.equalsIgnoreCase("system")) {//$NON-NLS-1$ return false; } return true; } return false; } }