summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/models
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2014-04-01 00:10:43 -0400
committerJames Moger <james.moger@gitblit.com>2014-04-10 19:00:52 -0400
commite5d0bacbf746e09a9194822b231cb27090f58973 (patch)
treee6d7d2f96384aa89a4f965ad1f47fb130ec907a4 /src/main/java/com/gitblit/models
parentec3b719dab4ae3c51d8bd52ab2b4176f82c5006f (diff)
downloadgitblit-e5d0bacbf746e09a9194822b231cb27090f58973.tar.gz
gitblit-e5d0bacbf746e09a9194822b231cb27090f58973.zip
Implement simple JSON-based plugin registry and install command
Diffstat (limited to 'src/main/java/com/gitblit/models')
-rw-r--r--src/main/java/com/gitblit/models/PluginRegistry.java143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/models/PluginRegistry.java b/src/main/java/com/gitblit/models/PluginRegistry.java
new file mode 100644
index 00000000..c81a0f23
--- /dev/null
+++ b/src/main/java/com/gitblit/models/PluginRegistry.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2014 gitblit.com.
+ *
+ * Licensed 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 com.gitblit.models;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.parboiled.common.StringUtils;
+
+import ro.fortsoft.pf4j.PluginVersion;
+
+/**
+ * Represents a list of plugin registrations.
+ */
+public class PluginRegistry implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public final String name;
+
+ public final List<PluginRegistration> registrations;
+
+ public PluginRegistry(String name) {
+ this.name = name;
+ registrations = new ArrayList<PluginRegistration>();
+ }
+
+ public PluginRegistration lookup(String idOrName) {
+ for (PluginRegistration registration : registrations) {
+ if (registration.id.equalsIgnoreCase(idOrName)
+ || registration.name.equalsIgnoreCase(idOrName)) {
+ return registration;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName();
+ }
+
+ public static enum InstallState {
+ NOT_INSTALLED, INSTALLED, CAN_UPDATE, UNKNOWN
+ }
+
+ /**
+ * Represents a plugin registration.
+ */
+ public static class PluginRegistration implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public final String id;
+
+ public String name;
+
+ public String description;
+
+ public String provider;
+
+ public String projectUrl;
+
+ public String currentRelease;
+
+ public transient String installedRelease;
+
+ public List<PluginRelease> releases;
+
+ public PluginRegistration(String id) {
+ this.id = id;
+ this.releases = new ArrayList<PluginRelease>();
+ }
+
+ public PluginRelease getCurrentRelease() {
+ PluginRelease current = null;
+ if (!StringUtils.isEmpty(currentRelease)) {
+ current = getRelease(currentRelease);
+ }
+
+ if (current == null) {
+ Date date = new Date(0);
+ for (PluginRelease pv : releases) {
+ if (pv.date.after(date)) {
+ current = pv;
+ }
+ }
+ }
+ return current;
+ }
+
+ public PluginRelease getRelease(String version) {
+ for (PluginRelease pv : releases) {
+ if (pv.version.equalsIgnoreCase(version)) {
+ return pv;
+ }
+ }
+ return null;
+ }
+
+ public InstallState getInstallState() {
+ if (StringUtils.isEmpty(installedRelease)) {
+ return InstallState.NOT_INSTALLED;
+ }
+ PluginVersion ir = PluginVersion.createVersion(installedRelease);
+ PluginVersion cr = PluginVersion.createVersion(currentRelease);
+ switch (ir.compareTo(cr)) {
+ case -1:
+ return InstallState.UNKNOWN;
+ case 1:
+ return InstallState.CAN_UPDATE;
+ default:
+ return InstallState.INSTALLED;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return id;
+ }
+ }
+
+ public static class PluginRelease {
+ public String version;
+ public Date date;
+ public String url;
+ }
+}