/** * 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.widgets.tree; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.inject.Inject; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import org.datacleaner.actions.ComponentReferenceDocumentationActionListener; import org.datacleaner.descriptors.ComponentDescriptor; import org.datacleaner.job.builder.AnalysisJobBuilder; import org.datacleaner.util.IconUtils; import org.datacleaner.util.WidgetFactory; public class ComponentDescriptorMouseListener extends MouseAdapter { private final SchemaTree _schemaTree; private final AnalysisJobBuilder _analysisJobBuilder; @Inject protected ComponentDescriptorMouseListener(final SchemaTree schemaTree, final AnalysisJobBuilder analysisJobBuilder) { _schemaTree = schemaTree; _analysisJobBuilder = analysisJobBuilder; } @Override public void mouseClicked(final MouseEvent e) { final TreePath path = _schemaTree.getPathForLocation(e.getX(), e.getY()); if (path == null) { return; } final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); final Object userObject = node.getUserObject(); if (userObject instanceof String && userObject.equals("Library") && e.getButton() == MouseEvent.BUTTON3) { showLibraryPopupMenu(userObject, e); } else if (userObject instanceof ComponentDescriptor<?>) { showComponentPopupMenu(userObject, e); } } private void showComponentPopupMenu(final Object userObject, final MouseEvent mouseEvent) { final ComponentDescriptor<?> componentDescriptor = (ComponentDescriptor<?>) userObject; if (SwingUtilities.isLeftMouseButton(mouseEvent) && mouseEvent.getClickCount() > 1) { _analysisJobBuilder.addComponent(componentDescriptor); } else if (SwingUtilities.isRightMouseButton(mouseEvent)) { final JMenuItem addTableItem = WidgetFactory.createMenuItem("Add component", IconUtils.getDescriptorIcon(componentDescriptor, IconUtils.ICON_SIZE_MENU_ITEM, false)); addTableItem.addActionListener(e -> _analysisJobBuilder.addComponent(componentDescriptor)); final JMenuItem referenceDocumentationItem = WidgetFactory.createMenuItem("Documentation", IconUtils.MENU_DOCUMENTATION); referenceDocumentationItem.addActionListener( new ComponentReferenceDocumentationActionListener(_analysisJobBuilder.getConfiguration(), componentDescriptor)); final JPopupMenu popup = new JPopupMenu(componentDescriptor.getDisplayName()); popup.add(addTableItem); popup.add(referenceDocumentationItem); popup.show((Component) mouseEvent.getSource(), mouseEvent.getX(), mouseEvent.getY()); } } private void showLibraryPopupMenu(final Object userObject, final MouseEvent mouseEvent) { final JMenuItem refreshLibraryMenuItem = WidgetFactory.createMenuItem("Refresh", IconUtils.MENU_REFRESH); refreshLibraryMenuItem.addActionListener( e -> _analysisJobBuilder.getConfiguration().getEnvironment().getDescriptorProvider().refresh()); final JPopupMenu popup = new JPopupMenu(userObject.toString()); popup.add(refreshLibraryMenuItem); popup.show((Component) mouseEvent.getSource(), mouseEvent.getX(), mouseEvent.getY()); } }