summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/config/WildProjectNameProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/config/WildProjectNameProvider.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/config/WildProjectNameProvider.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/WildProjectNameProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/WildProjectNameProvider.java
new file mode 100644
index 0000000000..bf35ca8beb
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/WildProjectNameProvider.java
@@ -0,0 +1,45 @@
+package com.google.gerrit.server.config;
+
+import com.google.gerrit.reviewdb.Project;
+import com.google.gerrit.reviewdb.ReviewDb;
+import com.google.gerrit.reviewdb.SystemConfig;
+import com.google.gwtorm.client.OrmException;
+import com.google.gwtorm.client.SchemaFactory;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.ProvisionException;
+
+class WildProjectNameProvider implements Provider<Project.NameKey> {
+ /** Project.Id meaning "any and all projects on this server". */
+ static final Project.Id WILD_PROJECT_ID = new Project.Id(0);
+
+ private final SchemaFactory<ReviewDb> schema;
+
+ @Inject
+ WildProjectNameProvider(final SchemaFactory<ReviewDb> schema,
+ /*
+ * Unused, but we need to force it to load before we do, otherwise we risk
+ * reading an empty database without the wild project being in the database.
+ * Asking for it should ensures Guice loads it first.
+ */
+ final SystemConfig config) {
+ this.schema = schema;
+ }
+
+ public Project.NameKey get() {
+ try {
+ final ReviewDb db = schema.open();
+ try {
+ final Project p = db.projects().get(WILD_PROJECT_ID);
+ if (p == null) {
+ throw new ProvisionException("No project " + WILD_PROJECT_ID);
+ }
+ return p.getNameKey();
+ } finally {
+ db.close();
+ }
+ } catch (OrmException e) {
+ throw new ProvisionException("Cannot load " + WILD_PROJECT_ID, e);
+ }
+ }
+}