/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.execute;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import de.rcenvironment.core.communication.common.LogicalNodeId;
import de.rcenvironment.core.communication.management.WorkflowHostService;
import de.rcenvironment.core.component.api.ComponentUtils;
import de.rcenvironment.core.component.api.DistributedComponentKnowledge;
import de.rcenvironment.core.component.api.DistributedComponentKnowledgeService;
import de.rcenvironment.core.component.model.api.ComponentDescription;
import de.rcenvironment.core.component.model.api.ComponentInstallation;
import de.rcenvironment.core.utils.incubator.ServiceRegistry;
import de.rcenvironment.core.utils.incubator.ServiceRegistryAccess;
/**
* Helper class providing utility functions aiding in the configuration of a workflow description and execution.
*
* @author Heinrich Wendel
* @author Christian Weiss
*/
public final class NodeIdentifierConfigurationHelper {
/**
* Compares NodeIdentifier instances by their name.
*
* @author Christian Weiss
*/
private static final class NodeIdentifierNameComparator implements Comparator<LogicalNodeId> {
private static final int LT = -1;
private static final int GT = 1;
@Override
public int compare(LogicalNodeId o1, LogicalNodeId o2) {
int result;
if (o1 == null && o2 == null) {
result = 0;
} else if (o1 == null) {
result = LT;
} else if (o2 == null) {
result = GT;
} else {
result = o1.getLogicalNodeIdString().compareTo(o2.getLogicalNodeIdString());
}
return result;
}
}
/** Comparator to sort NodeIdentifier instances by their name. */
private static final NodeIdentifierNameComparator NODE_IDENTIFIER_COMPARATOR = new NodeIdentifierNameComparator();
private Collection<ComponentInstallation> installations;
private ServiceRegistryAccess serviceRegistryAccess;
private DistributedComponentKnowledge compKnowledge;
public NodeIdentifierConfigurationHelper() {
serviceRegistryAccess = ServiceRegistry.createAccessFor(this);
compKnowledge = serviceRegistryAccess.getService(DistributedComponentKnowledgeService.class)
.getCurrentComponentKnowledge();
installations = compKnowledge.getAllInstallations();
}
/**
* @return platforms
*/
public List<LogicalNodeId> getWorkflowControllerNodesSortedByName() {
List<LogicalNodeId> result = new ArrayList<LogicalNodeId>(serviceRegistryAccess.getService(WorkflowHostService.class)
.getLogicalWorkflowHostNodes());
Collections.sort(result, NODE_IDENTIFIER_COMPARATOR);
return result;
}
/**
* Returns a list of platforms the component is installed on, sorted by their name.
*
* @param compDesc Description of the component.
* @return List of platform the component is installed on.
*/
public Map<LogicalNodeId, Integer> getTargetPlatformsForComponent(ComponentDescription compDesc) {
return ComponentUtils.getNodesForComponent(installations, compDesc);
}
/**
* @param nodes nodes to sort
* @return sorted list of nodes
*/
public List<LogicalNodeId> sortNodes(List<LogicalNodeId> nodes) {
Collections.sort(nodes, NODE_IDENTIFIER_COMPARATOR);
return nodes;
}
/**
*
* Refresh installations when connection is reestablished or lost.
*
*/
public synchronized void refreshInstallations() {
compKnowledge = serviceRegistryAccess.getService(DistributedComponentKnowledgeService.class)
.getCurrentComponentKnowledge();
installations = compKnowledge.getAllInstallations();
}
}