package com.redhat.ceylon.eclipse.code.preferences;
import static com.redhat.ceylon.eclipse.code.preferences.ModuleCategoryNode.getCategoryNodes;
import static java.util.Collections.emptyMap;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import com.redhat.ceylon.eclipse.code.modulesearch.ModuleSearchViewPart;
import com.redhat.ceylon.ide.common.modulesearch.ModuleNode;
import com.redhat.ceylon.ide.common.modulesearch.ModuleVersionNode;
public final class ModuleImportSelectionDialog extends FilteredElementTreeSelectionDialog {
public ModuleImportSelectionDialog(Shell parent,
ModuleImportContentProvider contentProvider) {
super(parent, new ModuleSelectionLabelProvider(),
contentProvider);
setTitle("Module Selection");
setMessage("Select modules to import:");
}
@Override
protected String getElementName(Object element) {
if (element instanceof ModuleNode) {
ModuleNode moduleNode = (ModuleNode) element;
return moduleNode.getName();
}
else if (element instanceof ModuleVersionNode) {
ModuleVersionNode moduleVersionNode =
(ModuleVersionNode) element;
return moduleVersionNode.getModule().getName();
}
return "";
}
@Override
protected boolean isCategory(Object element) {
return element instanceof ModuleCategoryNode;
}
@Override
protected String getDoc() {
ModuleVersionNode versionNode;
IStructuredSelection selection =
(IStructuredSelection)
getTreeViewer().getSelection();
Object selectedElement = selection
.getFirstElement();
if (selectedElement instanceof ModuleNode) {
ModuleNode moduleNode =
(ModuleNode) selectedElement;
versionNode = moduleNode.getLastVersion();
}
else if (selectedElement instanceof ModuleVersionNode) {
versionNode =
(ModuleVersionNode) selectedElement;
}
else {
return "";
}
return ModuleSearchViewPart.getModuleDoc(versionNode);
}
static Map<String, ModuleVersionNode>
getAddedModulesWithVersions(Object[] results) {
Map<String,ModuleVersionNode> added =
new HashMap<String,ModuleVersionNode>();
for (Object result: results) {
String name; ModuleVersionNode version;
if (result instanceof ModuleNode) {
ModuleNode moduleNode = (ModuleNode) result;
name = moduleNode.getName();
version = moduleNode.getLastVersion();
}
else if (result instanceof ModuleVersionNode) {
ModuleVersionNode moduleVersionNode =
(ModuleVersionNode) result;
name = moduleVersionNode.getModule().getName();
version = moduleVersionNode;
}
else {
continue;
}
added.put(name, version);
}
return added;
}
public static Map<String,ModuleVersionNode>
selectModules(ModuleImportSelectionDialog dialog,
IProject project) {
dialog.setInput(getCategoryNodes(project));
dialog.open();
Object[] results = dialog.getResult();
if (results==null) {
return emptyMap();
}
else {
return getAddedModulesWithVersions(results);
}
}
}