Plugin.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.monitor.engine.dynamic;
- import java.io.File;
- import java.io.IOException;
- import java.io.Serializable;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import org.openspcoop2.core.config.RegistroPlugin;
- import org.openspcoop2.core.config.RegistroPluginArchivio;
- import org.openspcoop2.core.plugins.constants.TipoPlugin;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.regexp.RegExpException;
- import org.openspcoop2.utils.regexp.RegExpNotFoundException;
- import org.openspcoop2.utils.regexp.RegExpNotValidException;
- import org.openspcoop2.utils.resources.DynamicClassLoader;
- /**
- * Plugin
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class Plugin implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private String nome;
- public String getNome() {
- return this.nome;
- }
- private Date date; // data di creazione del plugin
- public Date getDate() {
- return this.date;
- }
- private List<String> compatibilita;
-
- private List<PluginJar> archivePlugin = new ArrayList<>();
-
- private transient DynamicClassLoader classLoader;
-
- public Plugin(RegistroPlugin plugin) throws UtilsException, IOException, RegExpException, RegExpNotValidException, RegExpNotFoundException {
- this.nome = plugin.getNome();
- this.date = plugin.getData();
- this.compatibilita = plugin.getCompatibilitaList();
-
- List<URL> listUrl = new ArrayList<>();
-
- for (RegistroPluginArchivio pluginJar : plugin.getArchivioList()) {
- init(pluginJar, listUrl);
- }
- this.classLoader = new DynamicClassLoader(listUrl.toArray(new URL[1]));
- }
- private void init(RegistroPluginArchivio pluginJar, List<URL> listUrl) throws UtilsException, IOException, RegExpException, RegExpNotValidException, RegExpNotFoundException {
- String archivioPrefix = "Archivio '"+pluginJar.getNome()+"' ";
- PluginJar plug = null;
- switch (pluginJar.getSorgente()) {
- case JAR:
- if(pluginJar.getContenuto()==null) {
- throw new UtilsException(archivioPrefix+"senza contenuto (sorgente: "+pluginJar.getSorgente()+")");
- }
- plug = new PluginJar(pluginJar.getNome(), pluginJar.getData(), pluginJar.getContenuto());
- this.archivePlugin.add(plug);
- listUrl.add(plug.getResourceURL());
- break;
- case URL:
- if(pluginJar.getUrl()==null) {
- throw new UtilsException(archivioPrefix+"senza url (sorgente: "+pluginJar.getSorgente()+")");
- }
- plug = new PluginJar(pluginJar.getNome(), pluginJar.getData(), pluginJar.getUrl());
- this.archivePlugin.add(plug);
- listUrl.add(plug.getResourceURL());
- break;
- case DIR:
- if(pluginJar.getDir()==null) {
- throw new UtilsException(archivioPrefix+"senza directory (sorgente: "+pluginJar.getSorgente()+")");
- }
- File fDir = new File(pluginJar.getDir());
- if(!fDir.exists()) {
- throw new UtilsException(archivioPrefix+"indica una directory '"+fDir.getAbsolutePath()+"' non esistente (sorgente: "+pluginJar.getSorgente()+")");
- }
- if(fDir.isDirectory()) {
- loadJar(pluginJar.getNome(), pluginJar.getData(), fDir, listUrl);
- }
- else {
- plug = new PluginJar(pluginJar.getNome(), pluginJar.getData(), pluginJar.getDir());
- this.archivePlugin.add(plug);
- listUrl.add(plug.getResourceURL());
- }
- break;
- }
- }
-
- private void loadJar(String nomePlugin, Date data, File dir, List<URL> listUrl) throws UtilsException, MalformedURLException, RegExpException, RegExpNotValidException, RegExpNotFoundException {
-
- List<File> dirs = new ArrayList<>();
-
- File [] files = dir.listFiles();
- if(files!=null && files.length>0) {
- for (int i = 0; i < files.length; i++) {
- File f = files[i];
- if(f.isFile()) {
- if(f.getName().endsWith(".jar")) {
- PluginJar plug = new PluginJar(nomePlugin+"#"+f.getAbsolutePath(), data, f.getAbsolutePath());
- this.archivePlugin.add(plug);
- listUrl.add(plug.getResourceURL());
- }
- }
- else if(f.isDirectory()) {
- dirs.add(f);
- }
- }
- }
-
- if(!dirs.isEmpty()) {
- for (File dirChild : dirs) {
- loadJar(nomePlugin, data, dirChild, listUrl);
- }
- }
- }
-
-
-
- public ClassLoader getClassLoader(TipoPlugin tipoClasseDaRicercare) {
- return this.getClassLoader(tipoClasseDaRicercare.getValue());
- }
- public ClassLoader getClassLoader(String tipoClasseCustomDaRicercare) {
-
- if(this.compatibilita!=null && !this.compatibilita.isEmpty() &&
- !this.compatibilita.contains(tipoClasseCustomDaRicercare)) {
- return null; // class loader non compatibile con il tipo cercato
- }
-
- return this.classLoader;
- }
-
-
- public void close() {
- if(!this.archivePlugin.isEmpty()) {
- for (PluginJar pluginJar : this.archivePlugin) {
- pluginJar.close();
- }
- }
- }
-
-
- }