/** * DataCleaner (community edition) * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.datacleaner.util; import java.awt.Color; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.FilteredImageSource; import java.awt.image.ImageProducer; import java.awt.image.RGBImageFilter; import java.net.URL; import java.util.Set; import javax.swing.Icon; import javax.swing.ImageIcon; import org.apache.metamodel.schema.Column; import org.datacleaner.api.ComponentCategory; import org.datacleaner.api.ComponentSuperCategory; import org.datacleaner.api.InputColumn; import org.datacleaner.components.categories.WriteDataCategory; import org.datacleaner.configuration.RemoteServerState; import org.datacleaner.connection.AccessDatastore; import org.datacleaner.connection.CassandraDatastore; import org.datacleaner.connection.CompositeDatastore; import org.datacleaner.connection.CouchDbDatastore; import org.datacleaner.connection.CsvDatastore; import org.datacleaner.connection.DataHubDatastore; import org.datacleaner.connection.Datastore; import org.datacleaner.connection.DbaseDatastore; import org.datacleaner.connection.ElasticSearchDatastore; import org.datacleaner.connection.ExcelDatastore; import org.datacleaner.connection.FixedWidthDatastore; import org.datacleaner.connection.HBaseDatastore; import org.datacleaner.connection.JdbcDatastore; import org.datacleaner.connection.JsonDatastore; import org.datacleaner.connection.MongoDbDatastore; import org.datacleaner.connection.Neo4jDatastore; import org.datacleaner.connection.OdbDatastore; import org.datacleaner.connection.SalesforceDatastore; import org.datacleaner.connection.SasDatastore; import org.datacleaner.connection.SugarCrmDatastore; import org.datacleaner.connection.XmlDatastore; import org.datacleaner.database.DatabaseDriverCatalog; import org.datacleaner.database.DatabaseDriverDescriptor; import org.datacleaner.descriptors.Allowable; import org.datacleaner.descriptors.AnalyzerDescriptor; import org.datacleaner.descriptors.ComponentDescriptor; import org.datacleaner.descriptors.FilterDescriptor; import org.datacleaner.descriptors.HasIcon; import org.datacleaner.descriptors.RemoteTransformerDescriptor; import org.datacleaner.descriptors.TransformerDescriptor; /** * Contains utility methods concerned with icons, primarily datastore and * component icons. */ public final class IconUtils { private static class DisabledFilter extends RGBImageFilter { @Override public int filterRGB(final int x, final int y, final int rgb) { if ((rgb >> 24) == 0x00) { // is transparent return rgb; } final int red = new Color(rgb).getRed(); final int green = new Color(rgb).getGreen(); final int blue = new Color(rgb).getBlue(); final int max = Math.max(Math.max(red, green), blue); final int min = Math.min(Math.min(red, green), blue); final int gray = brighter((max + min) / 2, 40); return (rgb & 0xff000000) | (gray << 16) | (gray << 8) | gray; } private int brighter(final int rgb, final int percent) { final double q = 255 * percent * 0.01; final double k = (255 - q) / 255; return (int) (k * rgb + q); } } public static final int ICON_SIZE_LARGE = 32; public static final int ICON_SIZE_MEDIUM = 22; public static final int ICON_SIZE_SMALL = 16; public static final int ICON_SIZE_MENU_ITEM = ICON_SIZE_SMALL; public static final int ICON_SIZE_BUTTON = ICON_SIZE_MEDIUM; public static final int ICON_SIZE_TAB = ICON_SIZE_MEDIUM; public static final int ICON_SIZE_TASK_PANE = ICON_SIZE_SMALL; public static final String TRANSFORMER_IMAGEPATH = "images/component-types/transformer.png"; public static final String ANALYZER_IMAGEPATH = "images/component-types/analyzer.png"; public static final String FILTER_IMAGEPATH = "images/component-types/filter.png"; public static final String FILTER_OUTCOME_PATH = "images/component-types/filter-outcome.png"; public static final String OUTPUT_DATA_STREAM_PATH = "images/component-types/output-data-stream.png"; public static final String MODEL_SCHEMA = "images/model/schema.png"; public static final String MODEL_SCHEMA_INFORMATION = "images/model/schema_information.png"; public static final String MODEL_TABLE = "images/model/table.png"; public static final String MODEL_COLUMN = "images/model/column.png"; public static final String MODEL_COLUMN_KEY = "images/model/column_primary_key.png"; public static final String MODEL_COLUMN_EXPRESSION = "images/model/column_expression.png"; public static final String MODEL_QUERY = "images/model/query.png"; public static final String MODEL_ROW = "images/model/row.png"; public static final String MODEL_JOB = "images/model/job.png"; public static final String MODEL_RESULT = "images/model/result.png"; public static final String MODEL_SOURCE = "images/model/source.png"; public static final String MODEL_METADATA = "images/model/metadata.png"; public static final String MODEL_QUICK_ANALYSIS = ANALYZER_IMAGEPATH; public static final String MODEL_COMPONENT_LIBRARY = "images/model/component_library.png"; public static final String MENU_OPEN = "images/menu/open.png"; public static final String MENU_NEW = "images/menu/new.png"; public static final String MENU_EXECUTE = "images/menu/execute.png"; public static final String MENU_REFRESH = "images/menu/refresh.png"; public static final String MENU_OPTIONS = "images/menu/options.png"; public static final String MENU_DQ_MONITOR = "images/menu/dq_monitor.png"; public static final String MENU_DATACLOUD = "images/menu/datacloud.png"; public static final String MENU_DOCUMENTATION = "images/menu/documentation.png"; public static final String ACTION_EXECUTE = "images/menu/execute.png"; public static final String ACTION_EDIT = "images/actions/edit.png"; public static final String ACTION_SAVE_BRIGHT = "images/actions/save_bright.png"; public static final String ACTION_SAVE_DARK = "images/actions/save_dark.png"; /** * @deprecated use {@link #ACTION_SAVE_BRIGHT} or {@link #ACTION_SAVE_DARK} * instead */ @Deprecated public static final String ACTION_SAVE = ACTION_SAVE_DARK; public static final String ACTION_CLOSE_BRIGHT = "images/actions/close_bright.png"; public static final String ACTION_CLOSE_DARK = "images/actions/close_dark.png"; public static final String ACTION_COPY = "images/actions/copy.png"; public static final String ACTION_CANCEL = "images/actions/cancel.png"; public static final String ACTION_ADD_DARK = "images/actions/add_dark.png"; public static final String ACTION_REMOVE_DARK = "images/actions/remove_dark.png"; public static final String ACTION_ADD_BRIGHT = "images/actions/add_bright.png"; public static final String ACTION_REMOVE_BRIGHT = "images/actions/remove_bright.png"; /** * @deprecated use {@link #ACTION_ADD_DARK} or {@link #ACTION_ADD_BRIGHT} */ @Deprecated public static final String ACTION_ADD = ACTION_ADD_DARK; /** * @deprecated use {@link #ACTION_REMOVE_DARK} or {@link #ACTION_REMOVE_BRIGHT} */ @Deprecated public static final String ACTION_REMOVE = ACTION_REMOVE_DARK; public static final String ACTION_RESET = "images/actions/reset.png"; public static final String ACTION_RENAME = "images/actions/rename.png"; public static final String ACTION_REFRESH = "images/actions/refresh.png"; public static final String ACTION_PREVIEW = "images/actions/preview_data.png"; public static final String ACTION_BROWSE = "images/actions/browse.png"; public static final String ACTION_HELP = "images/actions/help.png"; public static final String ACTION_BACK = "images/actions/back.png"; public static final String ACTION_FORWARD = "images/actions/forward.png"; public static final String ACTION_SCROLLDOWN_DARK = "images/actions/scrolldown_dark.png"; public static final String ACTION_SCROLLDOWN_BRIGHT = "images/actions/scrolldown_bright.png"; public static final String ACTION_STOP = "images/actions/stop.png"; public static final String ACTION_LOG = "images/actions/log.png"; public static final String ACTION_DRILL_TO_DETAIL = "images/actions/drill-to-detail.png"; public static final String ACTION_DOWNLOAD = "images/actions/download.png"; public static final String ACTION_DELETE = "images/actions/delete.png"; public static final String ACTION_DROP_TABLE = "images/actions/drop_table.png"; public static final String ACTION_CREATE_TABLE = "images/actions/create_table.png"; public static final String APPLICATION_ICON = "images/window/app-icon.png"; public static final String WEBSITE = "images/actions/website.png"; public static final String PLUGIN = "images/component-types/plugin.png"; public static final String STATUS_VALID = "images/status/valid.png"; public static final String STATUS_INFO = "images/status/info.png"; public static final String STATUS_WARNING = "images/status/warning.png"; public static final String STATUS_ERROR = "images/status/error.png"; public static final String ACTION_REORDER_COLUMNS = "images/actions/reorder-columns.png"; public static final String CHART_BAR = "images/chart-types/bar.png"; public static final String CHART_LINE = "images/chart-types/line.png"; public static final String CHART_SCATTER = "images/chart-types/scatter.png"; public static final String CLOUD_GREY = "images/datacloud/cloudGrey.png"; public static final String CLOUD_ORANGE = "images/datacloud/cloudOrange.png"; public static final String CLOUD_GREEN = "images/datacloud/cloudGreen.png"; public static final String CLOUD_RED = "images/datacloud/cloudRed.png"; public static final String DICTIONARY_IMAGEPATH = "images/model/dictionary.png"; public static final String DICTIONARY_SIMPLE_IMAGEPATH = "images/model/dictionary_simple.png"; public static final String DICTIONARY_TEXTFILE_IMAGEPATH = "images/model/dictionary_textfile.png"; public static final String DICTIONARY_DATASTORE_IMAGEPATH = "images/model/dictionary_datastore.png"; public static final String NEWS_CHANNEL_READ_STATUS = "images/news/news_channel_read.png"; public static final String NEWS_CHANNEL_TITLE_ICON = "images/news/news_channel_title.png"; public static final String NEWS_CHANNEL_NOT_READ_STATUS = "images/news/news_channel_not_read.png"; public static final String SYNONYM_CATALOG_IMAGEPATH = "images/model/synonym.png"; public static final String SYNONYM_CATALOG_TEXTFILE_IMAGEPATH = "images/model/synonym_textfile.png"; public static final String SYNONYM_CATALOG_DATASTORE_IMAGEPATH = "images/model/synonym_datastore.png"; public static final String STRING_PATTERN_IMAGEPATH = "images/model/stringpattern.png"; public static final String STRING_PATTERN_SIMPLE_IMAGEPATH = "images/model/stringpattern_simple.png"; public static final String STRING_PATTERN_REGEX_IMAGEPATH = "images/model/stringpattern_regex.png"; public static final String STRING_PATTERN_REGEXSWAP_IMAGEPATH = "images/model/stringpattern_regexswap.png"; public static final String CLOUD_IMAGEPATH = "images/datastore-types/cloud.png"; public static final String GENERIC_DATASTORE_IMAGEPATH = "images/model/datastore.png"; public static final String CSV_IMAGEPATH = "images/datastore-types/csv.png"; public static final String XML_IMAGEPATH = "images/datastore-types/xml.png"; public static final String EXCEL_IMAGEPATH = "images/datastore-types/excel.png"; public static final String ACCESS_IMAGEPATH = "images/datastore-types/access.png"; public static final String DBASE_IMAGEPATH = "images/datastore-types/dbase.png"; public static final String SAS_IMAGEPATH = "images/datastore-types/sas.png"; public static final String FIXEDWIDTH_IMAGEPATH = "images/datastore-types/fixedwidth.png"; public static final String ODB_IMAGEPATH = "images/datastore-types/odb.png"; public static final String COMPOSITE_IMAGEPATH = "images/datastore-types/composite.png"; public static final String MONGODB_IMAGEPATH = "images/datastore-types/mongodb.png"; public static final String COUCHDB_IMAGEPATH = "images/datastore-types/couchdb.png"; public static final String SALESFORCE_IMAGEPATH = "images/datastore-types/salesforce.png"; public static final String SUGAR_CRM_IMAGEPATH = "images/datastore-types/sugarcrm.png"; public static final String JSON_IMAGEPATH = "images/datastore-types/json.png"; public static final String HBASE_IMAGEPATH = "images/datastore-types/hbase.png"; public static final String CASSANDRA_IMAGEPATH = "images/datastore-types/cassandra.png"; public static final String ELASTICSEARCH_IMAGEPATH = "images/datastore-types/elasticsearch.png"; public static final String DATAHUB_IMAGEPATH = "images/datastore-types/datahub.png"; public static final String NEO4J_IMAGEPATH = "images/datastore-types/neo4j.png"; public static final String FILE_FOLDER = "images/filetypes/folder.png"; public static final String FILE_ARCHIVE = "images/filetypes/archive.png"; public static final String FILE_FILE = "images/filetypes/file.png"; public static final String FILE_HDFS = "images/filetypes/hadoop.png"; public static final String FILE_DESKTOP_FOLDER = "images/filetypes/desktop-folder.png"; public static final String FILE_HOME_FOLDER = "images/filetypes/home-folder.png"; public static final String FILE_HIDDEN_FOLDER = "images/filetypes/hidden-folder.png"; public static final String FILE_SEARCH = "images/filetypes/search-folder.png"; public static final String REMOTE_ICON_OVERLAY = "images/remote-icon-overlay.png"; public static final String REMOTE_ICON_OVERLAY_SMALL = "images/remote-icon-overlay-small.png"; public static final String PASSWORD_INPUT = "images/widgets/PasswordInput.png"; public static final String USERNAME_INPUT = "images/widgets/UsernameInput.png"; public static final String COMPONENT_TYPE_WRITE_DATA = "images/component-types/type_output_writer.png"; private static final ImageIcon ICON_TRANSPARENT_SMALL = createTransparentIcon(ICON_SIZE_SMALL); private static final ImageIcon ICON_TRANSPARENT_MEDIUM = createTransparentIcon(ICON_SIZE_MEDIUM); private static final ImageIcon ICON_TRANSPARENT_LARGE = createTransparentIcon(ICON_SIZE_LARGE); private static final ImageManager _imageManager = ImageManager.get(); private IconUtils() { // prevent instantiation } public static Icon getDescriptorIcon(final ComponentDescriptor<?> descriptor, final boolean configured, final int iconWidth) { boolean serverDown = false; if (descriptor instanceof RemoteTransformerDescriptor) { if (((RemoteTransformerDescriptor<?>) descriptor).getRemoteDescriptorProvider().getServerState() .getActualState().equals(RemoteServerState.State.ERROR)) { serverDown = true; } } if (descriptor instanceof HasIcon) { final ImageIcon imageIcon = getIconFromData(descriptor, iconWidth); if (imageIcon != null) { return serverDown ? addErrorOverlay(imageIcon) : imageIcon; } } final ImageIcon descriptorIcon = getDescriptorIcon(descriptor, iconWidth); if (configured) { return serverDown ? addErrorOverlay(descriptorIcon) : descriptorIcon; } return addErrorOverlay(descriptorIcon); } public static ImageIcon addErrorOverlay(final ImageIcon imageIcon) { final int offset = 4; final int iconWidth = imageIcon.getIconWidth(); final int decorationSize = iconWidth / 2; final Image errorImage = _imageManager.getImage(STATUS_ERROR, decorationSize); final BufferedImage bufferedImage = new BufferedImage(iconWidth + offset, iconWidth + offset, BufferedImage.TYPE_INT_ARGB); bufferedImage.getGraphics().drawImage(imageIcon.getImage(), offset, 0, null); bufferedImage.getGraphics().drawImage(errorImage, 0, iconWidth + offset - decorationSize, null); return new ImageIcon(bufferedImage); } /** * Gets the icon of a component based on it's {@link ComponentDescriptor}. * * @param descriptor * @param newWidth * @return */ public static ImageIcon getDescriptorIcon(final ComponentDescriptor<?> descriptor, final int newWidth) { return getDescriptorIcon(descriptor, newWidth, false); } /** * Gets the icon of a component based on it's {@link ComponentDescriptor}. * * @param descriptor * @param newWidth * @param allowTransparentForUnspecific * whether or not to use a transparent icon in case only a * generic icon could be found. This is useful for menu items * where the icon is not a requirement. * @return */ public static ImageIcon getDescriptorIcon(final ComponentDescriptor<?> descriptor, final int newWidth, final boolean allowTransparentForUnspecific) { if (descriptor instanceof HasIcon) { final ImageIcon imageIcon = getIconFromData(descriptor, newWidth); if (imageIcon != null) { return imageIcon; } } final ClassLoader classLoader = descriptor.getComponentClass().getClassLoader(); final boolean allowGeneric = !allowTransparentForUnspecific; final String imagePath = getDescriptorImagePath(descriptor, classLoader, allowGeneric); if (imagePath == null) { return getTransparentIcon(newWidth); } return _imageManager.getImageIcon(imagePath, newWidth, classLoader); } private static ImageIcon getIconFromData(final ComponentDescriptor<?> componentDescriptor, final int width) { final String cacheKey = "remote: " + componentDescriptor.getDisplayName() + ",width=" + width; final Image image = _imageManager.getImageFromCache(cacheKey); ImageIcon imageIcon; if (image == null) { final HasIcon descriptorWithIcon = (HasIcon) componentDescriptor; if (descriptorWithIcon.getIconData() == null || descriptorWithIcon.getIconData().length == 0) { // If no data from server, use generic icon. (Then it will be possible to overlay it) final ClassLoader classLoader = componentDescriptor.getComponentClass().getClassLoader(); final String imagePath = getDescriptorImagePath(componentDescriptor, classLoader, true); if (imagePath == null) { return null; } imageIcon = _imageManager.getImageIcon(imagePath, width, classLoader); } else { imageIcon = new ImageIcon(descriptorWithIcon.getIconData()); } final BufferedImage bufferedImage = new BufferedImage(width, width, BufferedImage.TYPE_INT_ARGB); bufferedImage.getGraphics().drawImage(imageIcon.getImage(), 0, 0, width, width, null); imageIcon = new ImageIcon(bufferedImage); if (componentDescriptor instanceof Allowable && !((Allowable) componentDescriptor).isAllowed()) { imageIcon = getDisabledIcon(imageIcon); } imageIcon = addRemoteOverlay(imageIcon); _imageManager.storeImageIntoCache(cacheKey, imageIcon.getImage()); } else { imageIcon = new ImageIcon(image); } return imageIcon; } public static ImageIcon addRemoteOverlay(final ImageIcon imageIcon) { final BufferedImage bufferedImage; final int offset; final Image remoteIndicatorImage; final int iconWidth = imageIcon.getIconWidth(); if (iconWidth >= ICON_SIZE_LARGE) { offset = 8; remoteIndicatorImage = _imageManager.getImage(REMOTE_ICON_OVERLAY); } else { offset = 4; remoteIndicatorImage = _imageManager.getImage(REMOTE_ICON_OVERLAY_SMALL); } bufferedImage = new BufferedImage(iconWidth + offset, iconWidth + offset, BufferedImage.TYPE_INT_ARGB); bufferedImage.getGraphics().drawImage(imageIcon.getImage(), 0, offset, null); bufferedImage.getGraphics() .drawImage(remoteIndicatorImage, iconWidth - remoteIndicatorImage.getWidth(null) + offset, 0, null); return new ImageIcon(bufferedImage); } public static ImageIcon getTransparentIcon(final int width) { switch (width) { case ICON_SIZE_SMALL: return ICON_TRANSPARENT_SMALL; case ICON_SIZE_MEDIUM: return ICON_TRANSPARENT_MEDIUM; case ICON_SIZE_LARGE: return ICON_TRANSPARENT_LARGE; default: return createTransparentIcon(width); } } private static ImageIcon createTransparentIcon(final int width) { final Image image = new BufferedImage(width, width, BufferedImage.TYPE_4BYTE_ABGR); return new ImageIcon(image); } public static ImageIcon getDescriptorIcon(final ComponentDescriptor<?> descriptor) { return getDescriptorIcon(descriptor, ICON_SIZE_LARGE); } public static ImageIcon getDatastoreIcon(final Datastore datastore, final int newWidth) { final String imagePath = getDatastoreImagePath(datastore, true); return _imageManager.getImageIcon(imagePath, newWidth); } public static ImageIcon getDatastoreIcon(final Datastore datastore) { final String imagePath = getDatastoreImagePath(datastore, true); return _imageManager.getImageIcon(imagePath); } public static ImageIcon getComponentSuperCategoryIcon(final ComponentSuperCategory superCategory) { return getComponentSuperCategoryIcon(superCategory, ICON_SIZE_LARGE); } public static ImageIcon getComponentSuperCategoryIcon(final ComponentSuperCategory superCategory, final int newWidth) { final Class<? extends ComponentSuperCategory> superCategoryClass = superCategory.getClass(); return getCategoryIcon(superCategoryClass, false, newWidth); } public static ImageIcon getComponentCategoryIcon(final ComponentCategory category) { return getComponentCategoryIcon(category, ICON_SIZE_LARGE); } public static ImageIcon getComponentCategoryIcon(final ComponentCategory category, final int newWidth) { final Class<? extends ComponentCategory> categoryClass = category.getClass(); return getCategoryIcon(categoryClass, true, newWidth); } private static ImageIcon getCategoryIcon(final Class<?> cls, final boolean decorateWithFolder, final int newWidth) { final String bundledIconPath = getImagePathForClass(cls); if (!decorateWithFolder && bundledIconPath != null) { return _imageManager.getImageIcon(bundledIconPath, newWidth); } final Image decoration; final int decorationSize = newWidth * 3 / 4; if (bundledIconPath == null) { decoration = null; } else { final ClassLoader classLoader = cls.getClassLoader(); decoration = _imageManager.getImage(bundledIconPath, decorationSize, classLoader); } final Image folderIcon = _imageManager.getImage("images/component-types/category.png", newWidth); if (decoration == null) { return new ImageIcon(folderIcon); } final BufferedImage bufferedImage = new BufferedImage(newWidth, newWidth, BufferedImage.TYPE_INT_ARGB); bufferedImage.getGraphics().drawImage(folderIcon, 0, 0, null); bufferedImage.getGraphics().drawImage(decoration, newWidth - decorationSize, newWidth - decorationSize, null); return new ImageIcon(bufferedImage); } public static Icon getDatastoreSpecificAnalysisJobIcon(final Datastore datastore) { final int decorationSize = ICON_SIZE_MEDIUM; final int totalWidth = ICON_SIZE_LARGE; final int totalHeight = ICON_SIZE_LARGE + 6; final Image datastoreIcon; if (datastore == null) { datastoreIcon = _imageManager.getImage(IconUtils.GENERIC_DATASTORE_IMAGEPATH, decorationSize); } else { final String datastoreImagePath = getDatastoreImagePath(datastore, false); datastoreIcon = _imageManager.getImage(datastoreImagePath, decorationSize); } final Image jobIcon = _imageManager.getImage(MODEL_JOB, decorationSize); final BufferedImage bufferedImage = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_ARGB); bufferedImage.getGraphics().drawImage(jobIcon, 0, 0, null); bufferedImage.getGraphics() .drawImage(datastoreIcon, totalWidth - decorationSize, totalHeight - decorationSize, null); return new ImageIcon(bufferedImage); } public static String getImagePathForClass(final Class<?> cls) { return getImagePathForClass(cls, cls.getClassLoader()); } public static String getImagePathForClass(final Class<?> cls, final ClassLoader classLoader) { final String iconPath = cls.getName().replaceAll("\\.", "/") + ".png"; final URL url = ResourceManager.get().getUrl(iconPath, classLoader); if (url == null) { return null; } return iconPath; } protected static String getDescriptorImagePath(final ComponentDescriptor<?> descriptor, final ClassLoader classLoader, final boolean allowGeneric) { final Class<?> componentClass = descriptor.getComponentClass(); final String bundledIconPath = getImagePathForClass(componentClass, classLoader); if (bundledIconPath != null) { return bundledIconPath; } if (!allowGeneric) { return null; } final ComponentDescriptor<?> descriptorDescriptor = (ComponentDescriptor<?>) descriptor; final Set<ComponentCategory> categories = descriptorDescriptor.getComponentCategories(); if (categories.contains(new WriteDataCategory())) { return COMPONENT_TYPE_WRITE_DATA; } if (descriptor instanceof TransformerDescriptor) { return TRANSFORMER_IMAGEPATH; } if (descriptor instanceof FilterDescriptor) { return FILTER_IMAGEPATH; } if (descriptor instanceof AnalyzerDescriptor) { return ANALYZER_IMAGEPATH; } /* * DC monitor can run Custom jobs and therefore do not have a * descriptor. We want to be able to render the results, therefore we * return a image */ return FILE_FILE; } public static Icon getColumnIcon(final InputColumn<?> column, final int iconSize) { if (column.isPhysicalColumn()) { return getColumnIcon(column.getPhysicalColumn(), iconSize); } return _imageManager.getImageIcon(MODEL_COLUMN, IconUtils.ICON_SIZE_SMALL); } public static Icon getColumnIcon(final Column column, final int iconSize) { if (column.isPrimaryKey()) { return _imageManager.getImageIcon(MODEL_COLUMN_KEY, iconSize); } return _imageManager.getImageIcon(MODEL_COLUMN, iconSize); } protected static String getDatastoreImagePath(final Datastore datastore, final boolean considerOrderdbSpecialization) { String imagePath = GENERIC_DATASTORE_IMAGEPATH; if (datastore == null) { return imagePath; } else if (datastore instanceof JdbcDatastore) { final JdbcDatastore jdbcDatastore = (JdbcDatastore) datastore; if (considerOrderdbSpecialization && "jdbc:hsqldb:res:orderdb;readonly=true" .equals(jdbcDatastore.getJdbcUrl())) { imagePath = "images/datastore-types/orderdb.png"; } else { final String driverClass = jdbcDatastore.getDriverClass(); if (!StringUtils.isNullOrEmpty(driverClass)) { final DatabaseDriverDescriptor driver = DatabaseDriverCatalog.getDatabaseDriverByDriverClassName(driverClass); if (driver != null) { imagePath = driver.getIconImagePath(); } } } } else if (datastore instanceof CsvDatastore) { imagePath = CSV_IMAGEPATH; } else if (datastore instanceof ExcelDatastore) { imagePath = EXCEL_IMAGEPATH; } else if (datastore instanceof AccessDatastore) { imagePath = ACCESS_IMAGEPATH; } else if (datastore instanceof OdbDatastore) { imagePath = ODB_IMAGEPATH; } else if (datastore instanceof FixedWidthDatastore) { imagePath = FIXEDWIDTH_IMAGEPATH; } else if (datastore instanceof DbaseDatastore) { imagePath = DBASE_IMAGEPATH; } else if (datastore instanceof SasDatastore) { imagePath = SAS_IMAGEPATH; } else if (datastore instanceof XmlDatastore) { imagePath = XML_IMAGEPATH; } else if (datastore instanceof HBaseDatastore) { imagePath = HBASE_IMAGEPATH; } else if (datastore instanceof ElasticSearchDatastore) { imagePath = ELASTICSEARCH_IMAGEPATH; } else if (datastore instanceof CassandraDatastore) { imagePath = CASSANDRA_IMAGEPATH; } else if (datastore instanceof JsonDatastore) { imagePath = JSON_IMAGEPATH; } else if (datastore instanceof CouchDbDatastore) { imagePath = COUCHDB_IMAGEPATH; } else if (datastore instanceof MongoDbDatastore) { imagePath = MONGODB_IMAGEPATH; } else if (datastore instanceof SalesforceDatastore) { imagePath = SALESFORCE_IMAGEPATH; } else if (datastore instanceof SugarCrmDatastore) { imagePath = SUGAR_CRM_IMAGEPATH; } else if (datastore instanceof CompositeDatastore) { imagePath = COMPOSITE_IMAGEPATH; } else if (datastore instanceof DataHubDatastore) { imagePath = DATAHUB_IMAGEPATH; } else if (datastore instanceof Neo4jDatastore) { imagePath = NEO4J_IMAGEPATH; } return imagePath; } public static ImageIcon getDisabledIcon(final ImageIcon inputIcon) { final DisabledFilter filter = new DisabledFilter(); final ImageProducer prod = new FilteredImageSource(inputIcon.getImage().getSource(), filter); return new ImageIcon(Toolkit.getDefaultToolkit().createImage(prod)); } }