/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.view.properties; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; import java.util.Set; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertySource; import org.eclipse.ui.views.properties.TextPropertyDescriptor; import de.rcenvironment.core.communication.api.PlatformService; import de.rcenvironment.core.component.workflow.execution.api.WorkflowExecutionInformation; import de.rcenvironment.core.component.workflow.model.api.WorkflowNode; import de.rcenvironment.core.gui.workflow.view.Messages; import de.rcenvironment.core.utils.incubator.ServiceRegistry; /** * Class that maps information about a running component onto the IPropertySource interface. * * @author Doreen Seider * @author Robert Mischke (minor change) */ public class WorkflowInstancePropertySource implements IPropertySource { protected static final String PROP_KEY_WORKKLOWPLATFORM = "de.rcenvironment.wfCtrlNodeId"; protected static final String PROP_KEY_STARTTIME = "de.rcenvironment.wfStart"; protected static final String PROP_KEY_NAME = "de.rcenvironment.wfName"; protected static final String PROP_KEY_WORKFLOWNODES_COUNT = "de.rcenvironment.wfNodeCnt"; protected static final String PROP_KEY_CONNECTIONS_COUNT = "de.rcenvironment.cnCnt"; protected static final String PROP_KEY_COMPONENT_TYPES = "de.rcenvironment.wfNodeTypes"; protected static final String PROP_KEY_INVOLVED_INSTANCES = "de.rcenvironment.involvedInstances"; protected WorkflowExecutionInformation wfExeInfo; private final PlatformService platformService; public WorkflowInstancePropertySource(WorkflowExecutionInformation wfExeInfo) { this.wfExeInfo = wfExeInfo; this.platformService = ServiceRegistry.createAccessFor(this).getService(PlatformService.class); } @Override public Object getEditableValue() { return this; } @Override public IPropertyDescriptor[] getPropertyDescriptors() { IPropertyDescriptor[] descriptors = new IPropertyDescriptor[7]; descriptors[0] = new TextPropertyDescriptor(PROP_KEY_NAME, Messages.name); descriptors[1] = new TextPropertyDescriptor(PROP_KEY_STARTTIME, Messages.starttime); descriptors[2] = new TextPropertyDescriptor(PROP_KEY_WORKKLOWPLATFORM, Messages.platform); descriptors[3] = new TextPropertyDescriptor(PROP_KEY_WORKFLOWNODES_COUNT, "Component count"); descriptors[4] = new TextPropertyDescriptor(PROP_KEY_CONNECTIONS_COUNT, "Connection count"); descriptors[5] = new TextPropertyDescriptor(PROP_KEY_COMPONENT_TYPES, "Component types count"); descriptors[6] = new TextPropertyDescriptor(PROP_KEY_INVOLVED_INSTANCES, "Instances involved"); return descriptors; } @Override public Object getPropertyValue(Object key) { Object value = null; if (key.equals(PROP_KEY_NAME)) { value = wfExeInfo.getInstanceName(); } else if (key.equals(PROP_KEY_WORKKLOWPLATFORM)) { if (wfExeInfo.getNodeId() == null || platformService.matchesLocalInstance(wfExeInfo.getNodeId())) { value = Messages.local; } else { value = wfExeInfo.getNodeId().getAssociatedDisplayName(); } } else if (key.equals(PROP_KEY_STARTTIME)) { value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(wfExeInfo.getStartTime())); } else if (key.equals(PROP_KEY_WORKFLOWNODES_COUNT)) { value = wfExeInfo.getWorkflowDescription().getWorkflowNodes().size(); } else if (key.equals(PROP_KEY_CONNECTIONS_COUNT)) { value = wfExeInfo.getWorkflowDescription().getConnections().size(); } else if (key.equals(PROP_KEY_COMPONENT_TYPES)) { value = getComponentTypesCount(); } else if (key.equals(PROP_KEY_INVOLVED_INSTANCES)) { value = getInstancesCount(); } return value; } @Override public boolean isPropertySet(Object key) { return true; } private int getComponentTypesCount() { int count = 0; Set<String> componentIdentifiers = new HashSet<>(); for (WorkflowNode node : wfExeInfo.getWorkflowDescription().getWorkflowNodes()) { if (!componentIdentifiers.contains(node.getComponentDescription().getIdentifier())) { componentIdentifiers.add(node.getComponentDescription().getIdentifier()); count++; } } return count; } private int getInstancesCount() { int count = 0; Set<String> nodeIdentifiers = new HashSet<>(); for (WorkflowNode node : wfExeInfo.getWorkflowDescription().getWorkflowNodes()) { if (!nodeIdentifiers.contains(node.getComponentDescription().getComponentInstallation().getNodeId())) { nodeIdentifiers.add(node.getComponentDescription().getComponentInstallation().getNodeId()); count++; } } if (!nodeIdentifiers.contains(wfExeInfo.getNodeId().getLogicalNodeIdString())) { count++; } return count; } @Override public void resetPropertyValue(Object arg0) {} @Override public void setPropertyValue(Object arg0, Object arg1) {} }