package com.revolsys.swing.tree.node; import java.awt.Window; import java.io.File; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import com.revolsys.io.FileUtil; import com.revolsys.io.connection.AbstractConnection; import com.revolsys.io.connection.AbstractConnectionRegistry; import com.revolsys.io.connection.Connection; import com.revolsys.io.connection.ConnectionRegistry; import com.revolsys.io.file.FileNameExtensionFilter; import com.revolsys.swing.SwingUtil; import com.revolsys.swing.menu.MenuFactory; import com.revolsys.swing.parallel.Invoke; import com.revolsys.swing.tree.TreeNodes; public class ConnectionManagerTrees { static { // AbstractConnectionRegistry final MenuFactory connectionRegistryMenu = MenuFactory .getMenu(AbstractConnectionRegistry.class); LazyLoadTreeNode.addRefreshMenuItem(connectionRegistryMenu); // AbstractConnection final MenuFactory connectionMenu = MenuFactory.getMenu(AbstractConnection.class); LazyLoadTreeNode.addRefreshMenuItem(connectionMenu); TreeNodes.addMenuItemNodeValue(connectionMenu, "default", "Delete Connection", "delete", Connection::isEditable, ConnectionManagerTrees::deleteConnection); } private static void deleteConnection(final Connection connection) { if (!connection.isReadOnly()) { final int confirm = JOptionPane.showConfirmDialog(SwingUtil.getActiveWindow(), "Delete connection '" + connection.getName() + "'? This action cannot be undone.", "Delete Connection", JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE); if (confirm == JOptionPane.OK_OPTION) { connection.deleteConnection(); } } } protected static void exportConnection(final Connection connection) { final ConnectionRegistry<?> connectionRegistry = connection.getRegistry(); String connectionType = connectionRegistry.getConnectionManager().getName(); if (connectionType.endsWith("s")) { connectionType = connectionType.substring(0, connectionType.length() - 1); } if (!connectionType.endsWith(" Connection")) { connectionType += " Connection"; } final Window window = SwingUtil.getActiveWindow(); final Class<?> chooserClass = connectionRegistry.getClass(); final JFileChooser fileChooser = SwingUtil.newFileChooser(chooserClass, "currentDirectory"); fileChooser.setDialogTitle("Export " + connectionType); fileChooser.setMultiSelectionEnabled(false); final String fileExtension = connectionRegistry.getFileExtension(); final FileNameExtensionFilter allFilter = new FileNameExtensionFilter("*." + fileExtension, fileExtension); fileChooser.addChoosableFileFilter(allFilter); fileChooser.setAcceptAllFileFilterUsed(false); fileChooser.setFileFilter(allFilter); final String connectionName = connection.getName(); fileChooser.setSelectedFile( new File(fileChooser.getCurrentDirectory(), connectionName + "." + fileExtension)); final int status = fileChooser.showSaveDialog(window); if (status == JFileChooser.APPROVE_OPTION) { Invoke.background("Export " + connectionType, () -> { File file = fileChooser.getSelectedFile(); file = FileUtil.getFileWithExtension(file, fileExtension); connection.writeToFile(file); }); } SwingUtil.saveFileChooserDirectory(chooserClass, "currentDirectory", fileChooser); } protected static void importConnection( final ConnectionRegistry<? extends Connection> connectionRegistry) { String name = connectionRegistry.getConnectionManager().getName(); if (name.endsWith("s")) { name = name.substring(0, name.length() - 1); } if (!name.endsWith(" Connection")) { name += " Connection"; } final Window window = SwingUtil.getActiveWindow(); final Class<?> chooserClass = connectionRegistry.getClass(); final JFileChooser fileChooser = SwingUtil.newFileChooser(chooserClass, "currentDirectory"); fileChooser.setDialogTitle("Import " + name); fileChooser.setMultiSelectionEnabled(true); final String fileExtension = connectionRegistry.getFileExtension(); final FileNameExtensionFilter allFilter = new FileNameExtensionFilter("*." + fileExtension, fileExtension); fileChooser.addChoosableFileFilter(allFilter); fileChooser.setAcceptAllFileFilterUsed(false); fileChooser.setFileFilter(allFilter); final int status = fileChooser.showDialog(window, "Import"); if (status == JFileChooser.APPROVE_OPTION) { Invoke.background("Import " + name, () -> { for (final File file : fileChooser.getSelectedFiles()) { connectionRegistry.importConnection(file); } }); } SwingUtil.saveFileChooserDirectory(chooserClass, "currentDirectory", fileChooser); } }