// ============================================================================
//
// 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.dataprofiler.core.ui.action.actions;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.FileEditorInput;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.repository.i18n.Messages;
import org.talend.core.repository.ui.actions.RenameFolderAction;
import org.talend.dataprofiler.core.CorePlugin;
import org.talend.dataprofiler.core.ui.editor.AbstractItemEditorInput;
import org.talend.dataprofiler.core.ui.utils.RepNodeUtils;
import org.talend.dataprofiler.core.ui.views.DQRespositoryView;
import org.talend.dataprofiler.core.ui.views.resources.IRepositoryObjectCRUDAction;
import org.talend.dq.helper.RepositoryNodeHelper;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.IRepositoryNode.ENodeType;
import org.talend.repository.model.RepositoryNode;
/**
* rename tdq folder action.
*/
public class RenameTdqFolderAction extends RenameFolderAction {
protected static Logger log = Logger.getLogger(RenameTdqFolderAction.class);
private IRepositoryObjectCRUDAction repositoryObjectCRUD = RepNodeUtils.getRepositoryObjectCRUD();
/**
* @param node a folder
*/
public RenameTdqFolderAction(RepositoryNode node) {
super();
this.repositoryNode = node;
}
/*
* MOD 20130530 TDQ-7143, when any items are opened under the current folder, should not let it be renamed
*/
@Override
protected String getFirstOpenedChild(IRepositoryNode node) {
if (node.hasChildren()) {
IWorkbenchPage page = getActivePage();
IEditorReference[] editorReferences = page.getEditorReferences();
List<String> openEditor = new ArrayList<String>();
List<IRepositoryNode> children = node.getChildren();
for (IEditorReference tmpInput : editorReferences) {
try {
IEditorInput editorInput = tmpInput.getEditorInput();
if (editorInput instanceof AbstractItemEditorInput) {
AbstractItemEditorInput einput = (AbstractItemEditorInput) editorInput;
openEditor.add(einput.getItem().getProperty().getId());
} else if (editorInput instanceof FileEditorInput) {
if (editorInput instanceof FileEditorInput) {
FileEditorInput fileInput = (FileEditorInput) editorInput;
for (IRepositoryNode currentNode : children) {
IFile nodeFile = RepositoryNodeHelper.getIFile(currentNode);
if (nodeFile != null
&& nodeFile.getFullPath().toString().equals(fileInput.getFile().getFullPath().toString())) {
return currentNode.getObject().getLabel();
}
}
}
}
} catch (PartInitException e) {
ExceptionHandler.process(e, Level.WARN);
}
}
for (IRepositoryNode currentNode : children) {
if (currentNode.getType() == ENodeType.REPOSITORY_ELEMENT) {
if (openEditor.contains(currentNode.getObject().getId())) {
return currentNode.getObject().getLabel();
}
} else if (currentNode.getType() == ENodeType.SIMPLE_FOLDER) {
String childOpen = getFirstOpenedChild(currentNode);
if (childOpen != null) {
return childOpen;
}
}
}
}
return null;
}
@Override
protected Object getLabelOfNode(RepositoryNode node) {
return node.getObject().getLabel();
}// ~
@Override
protected void openFolderWizard(RepositoryNode node, ERepositoryObjectType objectType, IPath path) {
if (repositoryNode.getObject().isDeleted()) {
MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
Messages.getString("RenameFolderAction.warning.cannotFind.title"), Messages //$NON-NLS-1$
.getString("RenameFolderAction.warning.cannotFind.message")); //$NON-NLS-1$
return;
}
if (objectType != null) {
super.openFolderWizard(node, objectType, path);
// refresh the dq repository view
if (this.repositoryNode != null && this.repositoryNode.getParent() != null) {
CorePlugin.getDefault().refreshDQView(this.repositoryNode.getParent());
}
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.ui.actions.AContextualAction#getRepositorySelection()
*/
@Override
protected ISelection getRepositorySelection() {
DQRespositoryView repositoryViewPart = null;
for (IViewReference viewRef : getActivePage().getViewReferences()) {
if (viewRef.getView(false) instanceof DQRespositoryView) {
repositoryViewPart = (DQRespositoryView) viewRef.getView(false);
break;
}
}
if (repositoryViewPart == null) {
return null;
}
return repositoryViewPart.getCommonViewer().getSelection();
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.ui.actions.AContextualAction#getSelection()
*/
@Override
public ISelection getSelection() {
repositoryObjectCRUD.refreshDQViewForRemoteProject();
return repositoryObjectCRUD.getUISelection();
}
}