/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.switchcmp.gui; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.net.URL; import org.apache.commons.lang3.StringUtils; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import de.rcenvironment.components.switchcmp.common.SwitchComponentConstants; import de.rcenvironment.components.switchcmp.common.SwitchComponentHistoryDataItem; import de.rcenvironment.core.component.api.ComponentUtils; import de.rcenvironment.core.datamodel.api.TypedDatumSerializer; import de.rcenvironment.core.datamodel.api.TypedDatumService; import de.rcenvironment.core.gui.datamanagement.browser.spi.CommonHistoryDataItemSubtreeBuilderUtils; import de.rcenvironment.core.gui.datamanagement.browser.spi.ComponentHistoryDataItemSubtreeBuilder; import de.rcenvironment.core.gui.datamanagement.browser.spi.DMBrowserNode; import de.rcenvironment.core.gui.datamanagement.browser.spi.DMBrowserNodeType; import de.rcenvironment.core.gui.resources.api.ImageManager; import de.rcenvironment.core.gui.resources.api.StandardImages; import de.rcenvironment.core.utils.incubator.ServiceRegistry; import de.rcenvironment.core.utils.incubator.ServiceRegistryAccess; /** * * Implementation of {@link ComponentHistoryDataItemSubtreeBuilder} for this component. * * @author David Scholz * @author Doreen Seider * @author Sascha Zur */ public class SwitchHistoryDataItemSubtreeBuilder implements ComponentHistoryDataItemSubtreeBuilder { private static final Image COMPONENT_ICON; static { String bundleName = "de.rcenvironment.components.switch.common"; String iconName = "switch_16.png"; URL url = ComponentUtils.readIconURL(bundleName, iconName); if (url != null) { COMPONENT_ICON = ImageDescriptor.createFromURL(url).createImage(); } else { COMPONENT_ICON = null; } } @Override public String[] getSupportedHistoryDataItemIdentifier() { return new String[] { SwitchComponentConstants.COMPONENT_ID }; } @Override public Serializable deserializeHistoryDataItem(ObjectInputStream ois) throws IOException, ClassNotFoundException { return (Serializable) ois.readObject(); } @Override public void buildInitialHistoryDataItemSubtree(Serializable historyDataItem, DMBrowserNode parentNode) { ServiceRegistryAccess registryAccess = ServiceRegistry.createAccessFor(this); TypedDatumSerializer serializer = registryAccess.getService(TypedDatumService.class).getSerializer(); if (historyDataItem instanceof String) { SwitchComponentHistoryDataItem historyData; try { historyData = SwitchComponentHistoryDataItem.fromString((String) historyDataItem, serializer, SwitchComponentConstants.COMPONENT_ID); } catch (IOException e) { throw new IllegalArgumentException(e); } CommonHistoryDataItemSubtreeBuilderUtils.buildDefaultHistoryDataItemSubtrees(historyData, parentNode); DMBrowserNode conditionNode = DMBrowserNode.addNewChildNode("Condition", DMBrowserNodeType.Custom, parentNode); conditionNode.setIcon(ImageManager.getInstance().getSharedImage(StandardImages.QUESTION_MARK_16)); DMBrowserNode actualConditionnode = DMBrowserNode.addNewLeafNode( "Actual: " + StringUtils.abbreviate(historyData.getActualCondition(), CommonHistoryDataItemSubtreeBuilderUtils.MAX_LABEL_LENGTH), DMBrowserNodeType.CommonText, conditionNode); actualConditionnode.setFileContentAndName(historyData.getActualCondition(), "Actual condition"); DMBrowserNode templateConditionnode = DMBrowserNode.addNewLeafNode( "Pattern: " + StringUtils.abbreviate(historyData.getConditionPattern(), CommonHistoryDataItemSubtreeBuilderUtils.MAX_LABEL_LENGTH), DMBrowserNodeType.CommonText, conditionNode); templateConditionnode.setFileContentAndName(historyData.getConditionPattern(), "Condition pattern"); } else { String exceptionInformationText = ""; if (historyDataItem != null) { exceptionInformationText = de.rcenvironment.core.utils.common.StringUtils.format( "Parsing history data point failed: Expected type %s, but was of type %s", String.class.getCanonicalName(), historyDataItem.getClass().getCanonicalName()); } else { exceptionInformationText = de.rcenvironment.core.utils.common.StringUtils.format( "Parsing history data point failed: Expected type %s, actual type not available.", String.class.getCanonicalName()); } throw new IllegalArgumentException(exceptionInformationText); } } @Override public Image getComponentIcon(String historyDataItemIdentifier) { return COMPONENT_ICON; } }