/*
* 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.impl;
import com.sun.tools.visualvm.core.datasupport.Positionable;
import com.sun.tools.visualvm.jmx.EnvironmentProvider;
import com.sun.tools.visualvm.jmx.JmxConnectionCustomizer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class JmxConnectionSupportImpl {
private static final Map<String, EnvironmentProvider> providers =
Collections.synchronizedMap(new HashMap());
private static final Map<String, JmxConnectionCustomizer> customizers =
Collections.synchronizedMap(new HashMap());
private static JmxConnectionCustomizer defaultCustomizer;
private static boolean defaultHidden = false;
// --- EnvironmentProvider stuff -------------------------------------------
public static void registerProviderImpl(EnvironmentProvider provider) {
String providerId = provider.getId();
if (providers.containsKey(providerId))
throw new UnsupportedOperationException("Provider with id '" + providerId + // NOI18N
"' already registered"); // NOI18N
providers.put(providerId, provider);
}
public static void unregisterProviderImpl(EnvironmentProvider provider) {
providers.remove(provider.getId());
}
public static EnvironmentProvider getProvider(String providerId) {
return providers.get(providerId);
}
// --- JmxConnectionCustomizer stuff ---------------------------------------
public static void registerCustomizer(JmxConnectionCustomizer customizer) {
String customizerId = customizer.getId();
if (customizers.containsKey(customizerId))
throw new UnsupportedOperationException("Customizer with id '" + customizerId + // NOI18N
"' already registered"); // NOI18N
customizers.put(customizerId, customizer);
defaultHidden = defaultHidden || customizer.hidesDefault();
}
public static void unregisterCustomizer(JmxConnectionCustomizer customizer) {
customizers.remove(customizer.getId());
if (customizer.hidesDefault()) updateDefaultHidden();
}
public static JmxConnectionCustomizer getCustomizer(String customizerId) {
return customizers.get(customizerId);
}
public static List<JmxConnectionCustomizer> getCustomizers() {
List<JmxConnectionCustomizer> list = customizers();
if (defaultHidden && defaultCustomizer != null)
list.remove(defaultCustomizer);
Collections.sort(list, Positionable.COMPARATOR);
return list;
}
public static void setDefaultCustomizer(JmxConnectionCustomizer customizer) {
if (defaultCustomizer != null)
throw new UnsupportedOperationException("Default customizer already set"); // NOI18N
defaultCustomizer = customizer;
}
static JmxConnectionCustomizer getDefaultCustomizer() {
return defaultCustomizer;
}
private static List<JmxConnectionCustomizer> customizers() {
List<JmxConnectionCustomizer> list = new ArrayList();
synchronized(customizers) { list.addAll(customizers.values()); }
return list;
}
private static void updateDefaultHidden() {
boolean newDefaultHidden = false;
List<JmxConnectionCustomizer> list = customizers();
for (JmxConnectionCustomizer customizer : list)
if (customizer.hidesDefault()) {
newDefaultHidden = true;
break;
}
defaultHidden = newDefaultHidden;
}
}