blob: 7ed6f62e95758ffd77c1f751cddb3e8f3442933d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.glassfish.tooling.server.config;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.netbeans.modules.glassfish.tooling.data.GlassFishServer;
import org.netbeans.modules.glassfish.tooling.data.GlassFishVersion;
/**
* Configuration builder provider.
* <p/>
* This class is responsible for handling providers for individual server
* instances. Because {@link ConfigBuilder} class instance shall not be used
* for multiple GlassFish server versions there must be one configuration class
* instance for every single GlassFish server version.
* Also every single server instance has it's own directory structure which
* is used to search for modules. Because of that every single GlassFish server
* instance must have it's own configuration builder.
* Configuration builder is created with first request for given server version
* and reused for every subsequent request.
* <p/>
* @author Tomas Kraus
*/
public class ConfigBuilderProvider {
////////////////////////////////////////////////////////////////////////////
// Class attributes //
////////////////////////////////////////////////////////////////////////////
/** Library builder default configuration file. */
private static final URL CONFIG_V3
= ConfigBuilderProvider.class.getResource("GlassFishV3.xml");
/** Library builder configuration since GlassFish 4. */
private static final Config.Next CONFIG_V4
= new Config.Next(GlassFishVersion.GF_4,
ConfigBuilderProvider.class.getResource("GlassFishV4.xml"));
/** Library builder configuration since GlassFish 4.1. */
private static final Config.Next CONFIG_V4_1
= new Config.Next(GlassFishVersion.GF_4_1,
ConfigBuilderProvider.class.getResource("GlassFishV4_1.xml"));
/** Library builder configuration since GlassFish 5. */
private static final Config.Next CONFIG_V5
= new Config.Next(GlassFishVersion.GF_5,
ConfigBuilderProvider.class.getResource("GlassFishV5.xml"));
/** Library builder configuration since GlassFish 5.0.1. */
private static final Config.Next CONFIG_V5_0_1
= new Config.Next(GlassFishVersion.GF_5_0_1,
ConfigBuilderProvider.class.getResource("GlassFishV5.xml"));
/** Library builder configuration since GlassFish 5.1. */
private static final Config.Next CONFIG_V5_1
= new Config.Next(GlassFishVersion.GF_5_1_0,
ConfigBuilderProvider.class.getResource("GlassFishV5_1_0.xml"));
/** Library builder configuration since GlassFish 6.0. */
private static final Config.Next CONFIG_V6
= new Config.Next(GlassFishVersion.GF_6,
ConfigBuilderProvider.class.getResource("GlassFishV6.xml"));
/** Library builder configuration since GlassFish 6.1.0. */
private static final Config.Next CONFIG_V6_1_0
= new Config.Next(GlassFishVersion.GF_6_1_0,
ConfigBuilderProvider.class.getResource("GlassFishV6_1_0.xml"));
/** Library builder configuration since GlassFish 6.2.0. */
private static final Config.Next CONFIG_V6_2_0
= new Config.Next(GlassFishVersion.GF_6_2_0,
ConfigBuilderProvider.class.getResource("GlassFishV6_2_0.xml"));
/** Library builder configuration since GlassFish 6.2.1. */
private static final Config.Next CONFIG_V6_2_1
= new Config.Next(GlassFishVersion.GF_6_2_1,
ConfigBuilderProvider.class.getResource("GlassFishV6_2_1.xml"));
/** Library builder configuration since GlassFish 6.2.2. */
private static final Config.Next CONFIG_V6_2_2
= new Config.Next(GlassFishVersion.GF_6_2_2,
ConfigBuilderProvider.class.getResource("GlassFishV6_2_2.xml"));
/** Library builder configuration since GlassFish 6.2.3. */
private static final Config.Next CONFIG_V6_2_3
= new Config.Next(GlassFishVersion.GF_6_2_3,
ConfigBuilderProvider.class.getResource("GlassFishV6_2_3.xml"));
/** Library builder configuration since GlassFish 6.2.4. */
private static final Config.Next CONFIG_V6_2_4
= new Config.Next(GlassFishVersion.GF_6_2_4,
ConfigBuilderProvider.class.getResource("GlassFishV6_2_4.xml"));
/** Library builder configuration since GlassFish 6.2.5. */
private static final Config.Next CONFIG_V6_2_5
= new Config.Next(GlassFishVersion.GF_6_2_5,
ConfigBuilderProvider.class.getResource("GlassFishV6_2_4.xml"));
/** Library builder configuration since GlassFish 7.0.0. */
private static final Config.Next CONFIG_V7_0_0
= new Config.Next(GlassFishVersion.GF_7_0_0,
ConfigBuilderProvider.class.getResource("GlassFishV7_0_0.xml"));
/** Library builder configuration for GlassFish cloud. */
private static final Config config
= new Config(CONFIG_V3, CONFIG_V4, CONFIG_V4_1, CONFIG_V5,
CONFIG_V5_0_1, CONFIG_V5_1, CONFIG_V6, CONFIG_V6_1_0,
CONFIG_V6_2_0, CONFIG_V6_2_1, CONFIG_V6_2_2,
CONFIG_V6_2_3, CONFIG_V6_2_4, CONFIG_V6_2_5, CONFIG_V7_0_0);
/** Builders array for each server instance. */
private static final Map<GlassFishServer, ConfigBuilder> builders
= new HashMap<>();
////////////////////////////////////////////////////////////////////////////
// Static methods //
////////////////////////////////////////////////////////////////////////////
/**
* Get library builder configuration for given GlassFish server version.
* <p/>
* @param version GlassFish server version.
* @return Library builder configuration for given GlassFish server version.
*/
public static URL getBuilderConfig(final GlassFishVersion version) {
return config.configFiles[config.index[version.ordinal()]];
}
/**
* Get configuration builder instance for given GlassFish server entity
* instance.
* <p/>
* @param server GlassFish server entity for which builder is returned.
* <p/>
* @return Configuration builder for given GlassFish server entity.
* @throws ServerConfigException when there is no version ser in GlassFish
* server entity object or this object is null.
*/
public static ConfigBuilder getBuilder(final GlassFishServer server) {
if (server == null) {
throw new ServerConfigException(
"GlassFish server entity shall not be null");
}
ConfigBuilder builder;
synchronized (builders) {
builder = builders.get(server);
if (builder != null) {
return builder;
}
String serverHome = server.getServerHome();
builder = new ConfigBuilder(config, serverHome, serverHome, serverHome);
builders.put(server, builder);
}
return builder;
}
/**
* Remove configuration builder instance for given GlassFish server entity
* instance.
* <p/>
* Allows to free resources when configuration builder instance will no more
* be needed (e.g. GlassFish server entity is being destroyed).
* <p/>
* @param server GlassFish server entity for which builder is destroyed.
*/
public static void destroyBuilder(final GlassFishServer server) {
if (server == null) {
throw new ServerConfigException(
"GlassFish server entity shall not be null");
}
synchronized (builders) {
builders.remove(server);
}
}
}