/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.database.gui; import java.io.IOException; import java.io.Serializable; import java.net.URL; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import de.rcenvironment.components.database.common.DatabaseComponentConstants; import de.rcenvironment.components.database.common.DatabaseComponentHistoryDataItem; import de.rcenvironment.components.database.common.DatabaseStatementHistoryData; 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.DMBrowserNode; import de.rcenvironment.core.gui.datamanagement.browser.spi.DMBrowserNodeType; import de.rcenvironment.core.gui.datamanagement.browser.spi.DefaultHistoryDataItemSubtreeBuilder; import de.rcenvironment.core.utils.incubator.ServiceRegistry; import de.rcenvironment.core.utils.incubator.ServiceRegistryAccess; /** * Database History Data Item Builder. * * @author Oliver Seebach * @author Sascha Zur */ public class DatabaseHistoryDataItemSubtreeBuilder extends DefaultHistoryDataItemSubtreeBuilder { private static final Image COMPONENT_ICON; static { String bundleName = "de.rcenvironment.components.database.common"; String iconName = "database_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[] { DatabaseComponentConstants.COMPONENT_ID }; } @Override public Image getComponentIcon(String historyDataItemIdentifier) { return COMPONENT_ICON; } @Override public void buildInitialHistoryDataItemSubtree(Serializable historyDataItem, DMBrowserNode parentNode) { ServiceRegistryAccess registryAccess = ServiceRegistry.createAccessFor(this); TypedDatumSerializer serializer = registryAccess.getService(TypedDatumService.class).getSerializer(); if (historyDataItem instanceof String) { DatabaseComponentHistoryDataItem historyData; try { historyData = DatabaseComponentHistoryDataItem.fromString((String) historyDataItem, serializer, DatabaseComponentConstants.COMPONENT_ID); } catch (IOException e) { throw new IllegalArgumentException(e); } CommonHistoryDataItemSubtreeBuilderUtils.buildDefaultHistoryDataItemSubtrees(historyData, parentNode); List<DatabaseStatementHistoryData> databaseStatementHistoryData = historyData.getDatabaseStatementHistoryDataList(); if (databaseStatementHistoryData.size() > 0) { DMBrowserNode statementsFolderNode = DMBrowserNode.addNewChildNode("SQL Statements", DMBrowserNodeType.SqlFolder, parentNode); for (DatabaseStatementHistoryData statement : databaseStatementHistoryData) { DMBrowserNode statementsFolderWithName = DMBrowserNode.addNewChildNode(statement.getStatementName(), DMBrowserNodeType.LogFolder, statementsFolderNode); DMBrowserNode statementPatternNode = DMBrowserNode.addNewLeafNode("Statement pattern: " + StringUtils.abbreviate(statement.getStatementPattern(), CommonHistoryDataItemSubtreeBuilderUtils.MAX_LABEL_LENGTH), DMBrowserNodeType.CommonText, statementsFolderWithName); statementPatternNode.setFileContentAndName(statement.getStatementPattern(), "Statement pattern"); DMBrowserNode statementEffectiveNode = DMBrowserNode.addNewLeafNode("Effective statement: " + StringUtils.abbreviate(statement.getStatementEffective(), CommonHistoryDataItemSubtreeBuilderUtils.MAX_LABEL_LENGTH), DMBrowserNodeType.CommonText, statementsFolderWithName); statementEffectiveNode.setFileContentAndName(statement.getStatementEffective(), "Effective statement"); } } else { DMBrowserNode noStatementsFolderNode = DMBrowserNode.addNewLeafNode("No statements found.", DMBrowserNodeType.SqlFolder, parentNode); } } } }