From 28d2d525ccd55cf49a24c5b73639c932bf223ae3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Wed, 13 May 2015 13:43:35 +0200 Subject: [PATCH] add Module concept to component management --- .../platform/platformlevel/PlatformLevel.java | 15 ++++- .../platformlevel/PlatformLevel1.java | 4 +- .../platformlevel/PlatformLevel2.java | 3 +- .../platformlevel/PlatformLevel3.java | 3 +- .../platformlevel/PlatformLevel4.java | 4 +- .../platformlevel/PlatformLevelSafeMode.java | 4 +- .../platformlevel/PlatformLevelStartup.java | 4 +- .../java/org/sonar/core/component/Module.java | 63 +++++++++++++++++++ 8 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 sonar-core/src/main/java/org/sonar/core/component/Module.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java index dbb30dfdd84..28aad7223cc 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java @@ -20,9 +20,11 @@ package org.sonar.server.platform.platformlevel; import java.util.Collection; +import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.sonar.core.platform.ComponentContainer; +import org.sonar.core.component.Module; import static com.google.common.base.Preconditions.checkNotNull; @@ -62,7 +64,18 @@ public abstract class PlatformLevel { return parent.createChild(); } - public abstract PlatformLevel configure(); + public PlatformLevel configure() { + configureLevel(); + + List modules = container.getComponentsByType(Module.class); + for (Module module : modules) { + module.configure(container); + } + + return this; + } + + protected abstract void configureLevel(); /** * Intended to be override by subclasses if needed diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java index 4fa1e41d2aa..1752c5d9a79 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java @@ -90,7 +90,7 @@ public class PlatformLevel1 extends PlatformLevel { } @Override - public PlatformLevel configure() { + public void configureLevel() { add(platform, properties); addExtraRootComponents(); add( @@ -166,8 +166,6 @@ public class PlatformLevel1 extends PlatformLevel { addAll(CorePropertyDefinitions.all()); addAll(MigrationSteps.CLASSES); addAll(DaoUtils.getDaoClasses()); - - return this; } private void addExtraRootComponents() { diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java index ccedb2a3961..062e796de67 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java @@ -41,7 +41,7 @@ public class PlatformLevel2 extends PlatformLevel { } @Override - public PlatformLevel configure() { + protected void configureLevel() { add( DefaultServerUpgradeStatus.class, DatabaseMigrator.class, @@ -66,6 +66,5 @@ public class PlatformLevel2 extends PlatformLevel { // DB migration PlatformDatabaseMigrationExecutorServiceImpl.class, PlatformDatabaseMigration.class); - return this; } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java index 52ec6287938..7df65744ac5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java @@ -34,7 +34,7 @@ public class PlatformLevel3 extends PlatformLevel { } @Override - public PlatformLevel configure() { + protected void configureLevel() { add( PersistentSettings.class, DefaultDatabaseConnector.class, @@ -44,6 +44,5 @@ public class PlatformLevel3 extends PlatformLevel { DefaultHttpDownloader.class, UriReader.class, ServerIdGenerator.class); - return this; } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java index 22c6112ca22..5fee29e8167 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java @@ -301,7 +301,7 @@ public class PlatformLevel4 extends PlatformLevel { } @Override - public PlatformLevel configure() { + protected void configureLevel() { add( PluginDownloader.class, ChartFactory.class, @@ -692,8 +692,6 @@ public class PlatformLevel4 extends PlatformLevel { NavigationWs.class); addAll(level4AddedComponents); - - return this; } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java index 1fa81165fd4..ac863cb139a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java @@ -33,7 +33,7 @@ public class PlatformLevelSafeMode extends PlatformLevel { } @Override - public PlatformLevel configure() { + protected void configureLevel() { add( // DB access required by DatabaseSessionFilter wired into ROR DefaultDatabaseConnector.class, @@ -49,7 +49,5 @@ public class PlatformLevelSafeMode extends PlatformLevel { // WS engine WebServiceEngine.class); - - return this; } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java index acfe928ddc7..9629f23d03f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java @@ -48,7 +48,7 @@ public class PlatformLevelStartup extends PlatformLevel { } @Override - public PlatformLevel configure() { + protected void configureLevel() { add( IndexSynchronizer.class, RegisterMetrics.class, @@ -68,8 +68,6 @@ public class PlatformLevelStartup extends PlatformLevel { ReportQueueCleaner.class, RegisterIssueFilters.class, RenameIssueWidgets.class); - - return this; } @Override diff --git a/sonar-core/src/main/java/org/sonar/core/component/Module.java b/sonar-core/src/main/java/org/sonar/core/component/Module.java new file mode 100644 index 00000000000..6662ebdd24c --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/component/Module.java @@ -0,0 +1,63 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.core.component; + +import java.util.Collection; +import javax.annotation.Nullable; +import org.sonar.core.platform.ComponentContainer; + +import static com.google.common.base.Preconditions.checkNotNull; + +public abstract class Module { + private ComponentContainer container; + + public Module configure(ComponentContainer container) { + this.container = checkNotNull(container); + + configureModule(); + + return this; + } + + protected abstract void configureModule(); + + protected void add(@Nullable Object object, boolean singleton) { + if (object != null) { + container.addComponent(object, singleton); + } + } + + protected T getComponentByType(Class tClass) { + return container.getComponentByType(tClass); + } + + protected void add(Object... objects) { + for (Object object : objects) { + if (object != null) { + container.addComponent(object, true); + } + } + } + + protected void addAll(Collection objects) { + add(objects.toArray(new Object[objects.size()])); + } + +} -- 2.39.5