// ============================================================================
//
// 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.core.bridge;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.AbstractRepositoryAction;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.RepositoryNode;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class RepositoryViewSelectionProvider implements ISelectionProvider {
private final AbstractRepositoryAction action;
private Map<IRepositoryViewObject, RepositoryNode> allNodes = new HashMap<IRepositoryViewObject, RepositoryNode>();
public RepositoryViewSelectionProvider(AbstractRepositoryAction action) {
this.action = action;
}
public void addSelectionChangedListener(ISelectionChangedListener listener) {
}
public ISelection getSelection() {
allNodes.clear();
List<Object> selectedObjects = action.getSelectedObject();
if (!selectedObjects.isEmpty()) {
List<RepositoryNode> selectedNodes = new ArrayList<RepositoryNode>();
for (Object object : selectedObjects) {
if (object instanceof IRepositoryViewObject) {
IRepositoryViewObject viewObj = (IRepositoryViewObject) object;
if (allNodes.containsKey(viewObj))
selectedNodes.add(allNodes.get(viewObj));
else {
RepositoryNode node = RepositoryResourceUtil.convertToNode(viewObj);
if (node != null) {
selectedNodes.add(node);
}
addToAllNodes(node);
}
}
}
return new StructuredSelection(selectedNodes);
}
return new StructuredSelection();
}
private void addToAllNodes(RepositoryNode... nodes) {
if (nodes == null || nodes.length == 0)
return;
for (RepositoryNode node : nodes) {
allNodes.put(node.getObject(), node);
}
for (RepositoryNode node : nodes) {
List<IRepositoryNode> children = node.getChildren();
if (children != null) {
addToAllNodes(children.toArray(new RepositoryNode[0]));
}
}
}
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
}
public void setSelection(ISelection selection) {
}
}