/* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.visualvm.jmx; import com.sun.tools.visualvm.application.Application; import com.sun.tools.visualvm.core.properties.PropertiesPanel; import com.sun.tools.visualvm.core.properties.PropertiesProvider; import com.sun.tools.visualvm.jmx.impl.JmxPropertiesProvider; /** * Provider of a special JMX connection type. By registering the customizer * using JmxApplicationsSupport.registerConnectionCustomizer() a new connection * type is added to the Add JMX Connection dialog. * * If the hidesDefault flag is set for the customizer the default JMX connection * type provided by VisualVM is not displayed. This is useful when the custom * connection type extends the default one by adding new settings and it's not * desired to present both types to the user. * * @since VisualVM 1.2 * @author Jiri Sedlacek */ public abstract class JmxConnectionCustomizer extends PropertiesProvider<Application> { private final boolean hidesDefault; /** * Creates new instance of the JmxConnectionCustomizer. Typically only one * instance of the customizer is needed, use * JmxConnectionSupport.registerCustomizer to register the instance. * * @param customizerName name of the customizer to be displayed in the UI * @param customizerDescription optional description of the customizer, may be null * @param customizerPosition preferred position of this customizer in UI * @param hidesDefault true if the default connection type should be hidden by this customizer, false otherwise */ public JmxConnectionCustomizer(String customizerName, String customizerDescription, int customizerPosition, boolean hidesDefault) { super(customizerName, customizerDescription, JmxPropertiesProvider.CATEGORY_JMX_CONNECTION, customizerPosition); if (customizerName == null) throw new IllegalArgumentException("customizerName cannot be null"); // NOI18N this.hidesDefault = hidesDefault; } /** * Returns an unique String identifying the JmxConnectionCustomizer. The return * value is used for persistency purposes and must be constant for customizers * customizing persistent JMX connections. Default implementation returns * this.getClass().getName(). * * @return unique String identifying the JmxConnectionCustomizer */ public String getId() { return getClass().getName(); } /** * Returns the Setup defining the JMX connection to be created. * * @param customizerPanel PropertiesPanel with the user-defined settings * @return Setup defining the JMX connection to be created */ public abstract Setup getConnectionSetup(PropertiesPanel customizerPanel); /** * Returns true if the JmxConnectionCustomizer works as a PropertiesProvider * for the provided Application, false otherwise. * * @param application Application for which to provide the properties (never null) * @return true if the JmxConnectionCustomizer works as a PropertiesProvider for the provided Application, false otherwise */ public boolean providesProperties(Application application) { return true; } /** * Returns true if the default connection type should be hidden by this customizer, false otherwise. * * @return true if the default connection type should be hidden by this customizer, false otherwise */ public final boolean hidesDefault() { return hidesDefault; } /** * Default implementation of the PropertiesProvider.supportsDataSource method, * cannot be further overriden. JmxConnectionCustomizer always supports providing * initial properties for a JMX application being created. Use the providesProperties * method to control whether to provide a properties category for an existing * application or not. * * @param application Application for which to provide the properites * @return true for null Application, providesProperties(application) result otherwise */ public final boolean supportsDataSource(Application application) { return application == null ? true : providesProperties(application); } public void propertiesDefined(PropertiesPanel panel, Application application) {}; public void propertiesChanged(PropertiesPanel panel, Application application) {}; public void propertiesCancelled(PropertiesPanel panel, Application application) {}; public final String toString() { return getPropertiesName(); } /** * Setup based on the user-provided settings in the Panel defining the JMX * connection to be created. * * @since VisualVM 1.2 * @author Jiri Sedlacek */ public static final class Setup { private final String connectionString; private final String displayName; private final EnvironmentProvider environmentProvider; private final boolean persistentConnection; private final boolean allowsInsecureConnection; /** * Creates new instance of Setup. * * @param connectionString connection string for the JMX connection * @param displayName display name of the JMX connection or null * @param environmentProvider EnvironmentProvider for the JMX connection * @param persistentConnection true if the connection should be persisted for another VisualVM sessions, false otherwise */ public Setup(String connectionString, String displayName, EnvironmentProvider environmentProvider, boolean persistentConnection) { this(connectionString, displayName, environmentProvider, persistentConnection, false); } /** * Creates new instance of Setup. * * @param connectionString connection string for the JMX connection * @param displayName display name of the JMX connection or null * @param environmentProvider EnvironmentProvider for the JMX connection * @param persistentConnection true if the connection should be persisted for another VisualVM sessions, false otherwise * @param allowsInsecureConnection true if SSL is not required for the connection, false otherwise * * @since VisualVM 1.3.7 */ public Setup(String connectionString, String displayName, EnvironmentProvider environmentProvider, boolean persistentConnection, boolean allowsInsecureConnection) { if (connectionString == null) throw new IllegalArgumentException("connectionString cannot be null"); // NOI18N if (environmentProvider == null) throw new IllegalArgumentException("environmentProvider cannot be null"); // NOI18N this.connectionString = connectionString; this.displayName = displayName; this.environmentProvider = environmentProvider; this.persistentConnection = persistentConnection; this.allowsInsecureConnection = allowsInsecureConnection; } /** * Returns the JMX connection string defining the connection to be created. * * @return JMX connection string defining the connection to be created */ public String getConnectionString() { return connectionString; } /** * Returns the display name of the JMX connection to be created. * * @return display name of the JMX connection to be created */ public String getDisplayName() { return displayName; } /** * Returns the EnvironmentProvider for the JMX connection to be created or null. * * @return EnvironmentProvider for the JMX connection to be created or null */ public EnvironmentProvider getEnvironmentProvider() { return environmentProvider; } /** * Returns true if the JMX connection to be created should be restored for another VisualVM sessions, false otherwise * * @return true if the JMX connection to be created should be restored for another VisualVM sessions, false otherwise */ public boolean isConnectionPersistent() { return persistentConnection; } /** * Returns true if SSL is not required for the connection. * * @return true if SSL is not required for the connection, false otherwise * * @since VisualVM 1.3.7 */ public boolean allowsInsecureConnection() { return allowsInsecureConnection; } } }