Refactoring commands in separate classes.
Change-Id: I2833eeb6497eddc96bdfb7f9e9bebe71a71312bf
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportCommands.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportCommands.scala
index d589feb..881fa3e 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportCommands.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportCommands.scala
@@ -16,53 +16,47 @@
package com.googlesource.gerrit.plugins.support
-import com.google.gerrit.common.Version
-import com.google.gson.{Gson, JsonElement, JsonObject, JsonPrimitive}
+import com.google.gson.{Gson, JsonElement, JsonObject}
import com.google.inject._
-import org.jutils.jhardware.HardwareInfo.{getMemoryInfo, getProcessorInfo}
+import org.slf4j.LoggerFactory
import scala.util.Try
case class CommandResult(entryName: String, content: JsonElement)
-trait GerritSupportCommand {
- def execute: CommandResult
+abstract class GerritSupportCommand {
+ val log = LoggerFactory.getLogger(classOf[GerritSupportCommand])
+ implicit val gson = new Gson
+ val name = camelToUnderscores(this.getClass.getSimpleName.stripSuffix("Command"))
+ .stripPrefix("_")
+
+ def getResult: Any
+
+ def execute = {
+ CommandResult(s"${name}.json",
+ gson.toJsonTree(
+ Try {
+ getResult
+ } getOrElse {
+ val error = s"${name} not available on ${System.getProperty("os.name")}"
+ log.error(error);
+ ErrorInfo("error" -> error)
+ }))
+ }
+
+ private def camelToUnderscores(name: String) = "[A-Z\\d]".r.replaceAllIn(name, { m =>
+ "_" + m.group(0).toLowerCase()
+ })
}
@Singleton
class GerritSupportCommandFactory @Inject()(val injector: Injector) {
+
def apply(name: String): GerritSupportCommand =
injector.getInstance(
- Class.forName(s"com.googlesource.gerrit.plugins.support.${name.capitalize}Command")
+ Class.forName(s"com.googlesource.gerrit.plugins.support.commands.${name.capitalize}Command")
.asInstanceOf[Class[_ <: GerritSupportCommand]])
-}
-class GerritVersionCommand extends GerritSupportCommand {
- def execute = CommandResult("version.json", new JsonPrimitive(Version.getVersion))
-}
-
-class CpuInfoCommand extends GerritSupportCommand {
- implicit val gson = new Gson
-
- def execute = CommandResult("cpu-info.json",
- gson.toJsonTree(
- Try {
- getProcessorInfo
- } getOrElse {
- ErrorInfo("error" -> s"CPU info not available on ${System.getProperty("os.name")}")
- }))
-}
-
-class MemInfoCommand extends GerritSupportCommand {
- implicit val gson = new Gson
-
- def execute = CommandResult("mem-info.json",
- gson.toJsonTree(
- Try {
- getMemoryInfo
- } getOrElse {
- ErrorInfo("error" -> s"Memory info not available on ${System.getProperty("os.name")}")
- }))
}
object ErrorInfo {
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/commands/CpuInfoCommand.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/CpuInfoCommand.scala
new file mode 100644
index 0000000..8cfe2ad
--- /dev/null
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/CpuInfoCommand.scala
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.googlesource.gerrit.plugins.support.commands
+
+import com.googlesource.gerrit.plugins.support.GerritSupportCommand
+import org.jutils.jhardware.HardwareInfo
+
+class CpuInfoCommand extends GerritSupportCommand {
+ override def getResult = HardwareInfo.getProcessorInfo
+}
\ No newline at end of file
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/commands/GerritVersionCommand.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/GerritVersionCommand.scala
new file mode 100644
index 0000000..fe1782d
--- /dev/null
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/GerritVersionCommand.scala
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.googlesource.gerrit.plugins.support.commands
+
+import com.google.gerrit.common.Version
+import com.googlesource.gerrit.plugins.support.GerritSupportCommand
+
+class GerritVersionCommand extends GerritSupportCommand {
+ override def getResult = Version.getVersion
+}
\ No newline at end of file
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/commands/MemInfoCommand.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/MemInfoCommand.scala
new file mode 100644
index 0000000..bf29439
--- /dev/null
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/MemInfoCommand.scala
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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.googlesource.gerrit.plugins.support.commands
+
+import com.googlesource.gerrit.plugins.support.GerritSupportCommand
+import org.jutils.jhardware.HardwareInfo
+
+class MemInfoCommand extends GerritSupportCommand {
+ override def getResult = HardwareInfo.getMemoryInfo
+}
\ No newline at end of file
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala b/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala
index db30eae..dddabcf 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala
@@ -21,6 +21,7 @@
import com.google.gson.{Gson, JsonPrimitive}
import com.googlesource.gerrit.plugins.support.FileMatchers._
+import com.googlesource.gerrit.plugins.support.commands._
import org.scalatest.{FlatSpec, Matchers}
import scala.collection.JavaConverters._