From 43355fbfca9963acf6e3cbf99c91588a3d101672 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 7 Jan 2019 07:57:58 +0100 Subject: [PATCH 1/4] fix classloading, if the class was not found at the first plugin --- .../sonia/scm/plugin/UberClassLoader.java | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/UberClassLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/UberClassLoader.java index 6906afc7d4..311cb9e879 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/UberClassLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/UberClassLoader.java @@ -73,43 +73,39 @@ public final class UberClassLoader extends ClassLoader //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param name - * - * @return - * - * @throws ClassNotFoundException - */ @Override protected Class findClass(String name) throws ClassNotFoundException { Class clazz = getFromCache(name); - if (clazz == null) - { - for (PluginWrapper plugin : plugins) - { - ClassLoader cl = plugin.getClassLoader(); - - // load class could be slow, perhaps we should call - // find class via reflection ??? - clazz = cl.loadClass(name); - - if (clazz != null) - { - cache.put(name, new WeakReference>(clazz)); - - break; - } - } + if (clazz == null) { + clazz = findClassInPlugins(name); + cache.put(name, new WeakReference<>(clazz)); } return clazz; } + private Class findClassInPlugins(String name) throws ClassNotFoundException { + for (PluginWrapper plugin : plugins) { + Class clazz = findClass(plugin.getClassLoader(), name); + if (clazz != null) { + return clazz; + } + } + throw new ClassNotFoundException("could not find class " + name + " in any of the installed plugins"); + } + + private Class findClass(ClassLoader classLoader, String name) { + try { + // load class could be slow, perhaps we should call + // find class via reflection ??? + return classLoader.loadClass(name); + } catch (ClassNotFoundException ex) { + return null; + } + } + /** * Method description * From b80f0572df2b881958756baa6a48adedda27a45c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 7 Jan 2019 10:10:06 +0100 Subject: [PATCH 2/4] added extension point for primary-navigation and main.route --- .../ui-components/src/navigation/PrimaryNavigation.js | 8 ++++++++ scm-ui/src/containers/Main.js | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/scm-ui-components/packages/ui-components/src/navigation/PrimaryNavigation.js b/scm-ui-components/packages/ui-components/src/navigation/PrimaryNavigation.js index 886890b72e..f2401729d6 100644 --- a/scm-ui-components/packages/ui-components/src/navigation/PrimaryNavigation.js +++ b/scm-ui-components/packages/ui-components/src/navigation/PrimaryNavigation.js @@ -57,6 +57,14 @@ class PrimaryNavigation extends React.Component { append("/groups", "/(group|groups)", "primary-navigation.groups", "groups"); append("/config", "/config", "primary-navigation.config", "config"); + navigationItems.push( + + ); + this.appendLogout(navigationItems, append); return navigationItems; diff --git a/scm-ui/src/containers/Main.js b/scm-ui/src/containers/Main.js index 4bbdf6812a..586d0036c5 100644 --- a/scm-ui/src/containers/Main.js +++ b/scm-ui/src/containers/Main.js @@ -9,6 +9,8 @@ import Login from "../containers/Login"; import Logout from "../containers/Logout"; import { ProtectedRoute } from "@scm-manager/ui-components"; +import { ExtensionPoint } from "@scm-manager/ui-extensions"; + import AddUser from "../users/containers/AddUser"; import SingleUser from "../users/containers/SingleUser"; import RepositoryRoot from "../repos/containers/RepositoryRoot"; @@ -112,6 +114,12 @@ class Main extends React.Component { component={Profile} authenticated={authenticated} /> + + ); From 3d853d2eaf9971c6a501083f46b7b276fa63901d Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 11 Jan 2019 13:10:15 +0100 Subject: [PATCH 3/4] pass links to the main.route extension point --- scm-ui/src/containers/App.js | 2 +- scm-ui/src/containers/Main.js | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/scm-ui/src/containers/App.js b/scm-ui/src/containers/App.js index dd3dd36639..1e1387fd70 100644 --- a/scm-ui/src/containers/App.js +++ b/scm-ui/src/containers/App.js @@ -79,7 +79,7 @@ class App extends Component { /> ); } else { - content =
; + content =
; } return (
diff --git a/scm-ui/src/containers/Main.js b/scm-ui/src/containers/Main.js index 586d0036c5..d2bc50faf2 100644 --- a/scm-ui/src/containers/Main.js +++ b/scm-ui/src/containers/Main.js @@ -2,6 +2,7 @@ import React from "react"; import { Redirect, Route, Switch, withRouter } from "react-router-dom"; +import type {Links} from "@scm-manager/ui-types"; import Overview from "../repos/containers/Overview"; import Users from "../users/containers/Users"; @@ -24,12 +25,13 @@ import Config from "../config/containers/Config"; import Profile from "./Profile"; type Props = { - authenticated?: boolean + authenticated?: boolean, + links: Links }; class Main extends React.Component { render() { - const { authenticated } = this.props; + const { authenticated, links } = this.props; return (
@@ -118,7 +120,7 @@ class Main extends React.Component {
From b239ebdc7cf0bdcbd63b015dd66e9c6ac4bfb1cf Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 11 Jan 2019 13:48:18 +0100 Subject: [PATCH 4/4] close branch feature/changes-for-script-plugin