Skip to content

Commit

Permalink
Merge pull request #118 from jaa127/version-id-refactor
Browse files Browse the repository at this point in the history
Refactor version info
  • Loading branch information
hrj committed Dec 20, 2016
2 parents cf1ac88 + 7973e2d commit ceb7716
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 57 deletions.
44 changes: 24 additions & 20 deletions base/src/main/scala/co/uproot/abandon/Config.scala
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package co.uproot.abandon

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import com.typesafe.config.{Config, ConfigException, ConfigFactory}
import org.rogach.scallop.ScallopConf

import com.typesafe.config.Config
import com.typesafe.config.ConfigFactory
import scala.collection.JavaConverters._

import collection.JavaConverters._
import org.rogach.scallop.ScallopConf
import SettingsHelper._
import com.typesafe.config.ConfigException
import scala.util.Try
/**
* Holder for application's version identification
* @param id (combined) version information as string
*/
case class VersionId(id: String)

class AbandonCLIConf(arguments: Seq[String]) extends ScallopConf(arguments) {
val inputs = opt[List[String]]("input", short = 'i')
Expand Down Expand Up @@ -63,11 +62,15 @@ object SettingsHelper {
}
}

def getCompleteSettings(args: Seq[String]): Either[String, Settings] = {
def getCompleteSettings(args: Seq[String], version: String): Either[String, Settings] = {
val cliConf = new AbandonCLIConf(args)
cliConf.verify()
val configOpt = cliConf.config.toOption
val withoutVersion = cliConf.unversioned.getOrElse(false)
val versionId = if (cliConf.unversioned.getOrElse(false)) {
None
} else {
Option(VersionId(version))
}
val quiet = cliConf.quiet.getOrElse(false)
val txnFilters =
if (cliConf.filters.isEmpty) {
Expand All @@ -80,11 +83,11 @@ object SettingsHelper {

configOpt match {
case Some(configFileName) =>
makeSettings(configFileName, withoutVersion, quiet, txnFilters)
makeSettings(configFileName, versionId, quiet, txnFilters)
case _ =>
val inputs = cliConf.inputs.toOption.getOrElse(Nil)
val allReport = BalanceReportSettings("All Balances", None, Nil, true)
Right(Settings(inputs, Nil, Nil, Seq(allReport), ReportOptions(Nil), Nil, None, quiet, txnFilters))
Right(Settings(inputs, Nil, Nil, Seq(allReport), ReportOptions(Nil), Nil, None, quiet, versionId, txnFilters))
}
}

Expand All @@ -100,7 +103,7 @@ object SettingsHelper {
}
}

def makeSettings(configFileName: String, withoutVersion: Boolean, quiet: Boolean, txnFiltersCLI: Option[TxnFilterStack]) = {
def makeSettings(configFileName: String, version: Option[VersionId], quiet: Boolean, txnFiltersCLI: Option[TxnFilterStack]) = {
def handleInput(input: String, confPath: String): List[String] = {
val parentPath = Processor.mkParentDirPath(confPath)
if (input.startsWith("glob:")) {
Expand All @@ -121,7 +124,7 @@ object SettingsHelper {
val reportOptions = config.optConfig("reportOptions")
val isRight = reportOptions.flatMap(_.optStringList("isRight")).getOrElse(Nil)
val exportConfigs = config.optConfigList("exports").getOrElse(Nil)
val exports = exportConfigs.map(makeExportSettings(_, withoutVersion))
val exports = exportConfigs.map(makeExportSettings(_, version))
val accountConfigs = config.optConfigList("accounts").getOrElse(Nil)
val accounts = accountConfigs.map(makeAccountSettings)
val eodConstraints = config.optConfigList("eodConstraints").getOrElse(Nil).map(makeEodConstraints(_))
Expand All @@ -144,7 +147,7 @@ object SettingsHelper {
}
}
val dateConstraints = config.optConfigList("dateConstraints").getOrElse(Nil).map(makeDateRangeConstraint(_))
Right(Settings(inputs, eodConstraints ++ dateConstraints, accounts, reports, ReportOptions(isRight), exports, Some(file), quiet, txnFilters))
Right(Settings(inputs, eodConstraints ++ dateConstraints, accounts, reports, ReportOptions(isRight), exports, Some(file), quiet, version, txnFilters))
} catch {
case e: ConfigException => Left(e.getMessage)
}
Expand Down Expand Up @@ -199,7 +202,7 @@ object SettingsHelper {
}
}

def makeExportSettings(config: Config, withoutVersion: Boolean) = {
def makeExportSettings(config: Config, version: Option[VersionId]) = {
val exportType = config.getString("type")
val exportFormat = config.getString("format")

Expand All @@ -216,7 +219,7 @@ object SettingsHelper {
LedgerExportSettings(accountMatch, outFiles, showZeroAmountAccounts, closure)
case "xml" =>
val accountMatch = config.optional("accountMatch") { _.getStringList(_).asScala }
XmlExportSettings(JournalType, accountMatch, outFiles, withoutVersion)
XmlExportSettings(JournalType, accountMatch, outFiles, version)
case _ =>
val message = s"Found '$exportType', '$exportFormat'; expected 'ledger' or 'xml'."
throw new ConfigException.BadValue(config.origin, "type", message)
Expand All @@ -228,7 +231,7 @@ object SettingsHelper {
throw new NotImplementedError(message)
case "xml" =>
val accountMatch = config.optional("accountMatch") { _.getStringList(_).asScala }
XmlExportSettings(BalanceType, accountMatch, outFiles, withoutVersion)
XmlExportSettings(BalanceType, accountMatch, outFiles, version)
case _ =>
val message = s"Found '$exportType', '$exportFormat'; expected 'ledger' or 'xml'."
throw new ConfigException.BadValue(config.origin, "type", message)
Expand Down Expand Up @@ -335,6 +338,7 @@ case class Settings(
exports: Seq[ExportSettings],
configFileOpt: Option[java.io.File],
quiet: Boolean,
version: Option[VersionId],
txnFilters: Option[TxnFilterStack]) {
def getConfigRelativePath(path: String) = {
configFileOpt.map(configFile => Processor.mkRelativeFileName(path, configFile.getAbsolutePath)).getOrElse(path)
Expand Down Expand Up @@ -390,6 +394,6 @@ case class RegisterReportSettings(_title: String, _accountMatch: Option[Seq[Stri
case class BookReportSettings(_title: String, account: String, _outFiles: Seq[String]) extends ReportSettings(_title, Some(Seq(account)), _outFiles) {
}

case class XmlExportSettings(exportType: OutputType, _accountMatch: Option[Seq[String]], _outFiles: Seq[String], withoutVersion: Boolean) extends ExportSettings(_accountMatch, _outFiles)
case class XmlExportSettings(exportType: OutputType, _accountMatch: Option[Seq[String]], _outFiles: Seq[String], version: Option[VersionId]) extends ExportSettings(_accountMatch, _outFiles)

case class ReportOptions(isRight: Seq[String])
14 changes: 6 additions & 8 deletions base/src/main/scala/co/uproot/abandon/Report.scala
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,9 @@ object Reports {
</balance>
</abandon>

if (exportSettings.withoutVersion) {
balance
} else {
addAttribute(balance, "version", BuildInfo.version)
exportSettings.version match {
case Some(version) => addAttribute(balance, "version", version.id)
case None => balance
}
}

Expand Down Expand Up @@ -310,10 +309,9 @@ object Reports {
</journal>
</abandon>

if (exportSettings.withoutVersion) {
journal
} else {
addAttribute(journal, "version", BuildInfo.version)
exportSettings.version match {
case Some(version) => addAttribute(journal, "version", version.id)
case None => journal
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ class ComplexProcessTest extends FlatSpec with Matchers with Inside {
val (parseError, scope, processedFiles) = Processor.parseAll(Seq("tests/small.ledger"), quiet)
assert(!parseError)

val xmlBalSettings = XmlExportSettings(BalanceType, None, Seq("not-used.xml"), true)
val xmlTxnSettings = XmlExportSettings(JournalType, None, Seq("not-used.xml"), true)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(xmlBalSettings), None, quiet, None)
val xmlBalSettings = XmlExportSettings(BalanceType, None, Seq("not-used.xml"), None)
val xmlTxnSettings = XmlExportSettings(JournalType, None, Seq("not-used.xml"), None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(xmlBalSettings), None, quiet, None, None)

val appState = Processor.process(scope,settings.accounts, None)
//TODO: Processor.checkConstaints(appState, settings.eodConstraints)
Expand Down
18 changes: 9 additions & 9 deletions base/src/test/scala/co/uproot/abandon/ProcessorTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val appState = Processor.process(scope, Nil, None)
val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, Nil)

val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = Reports.ledgerExport(appState, settings, balSettings)
inside(ledgerRep) {
Expand Down Expand Up @@ -54,7 +54,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val appState = Processor.process(scope, Nil, None)

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, Nil)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = Reports.ledgerExport(appState, settings, balSettings)
inside(ledgerRep) {
Expand Down Expand Up @@ -84,7 +84,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val appState = Processor.process(scope, Nil, None)

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), true, Nil)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = Reports.ledgerExport(appState, settings, balSettings)
inside(ledgerRep) {
Expand Down Expand Up @@ -112,7 +112,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val appState = Processor.process(scope, Nil, None)

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, Nil)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = Reports.ledgerExport(appState, settings, balSettings)
ledgerRep should be (Nil)
Expand All @@ -136,7 +136,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val closure = Seq(ClosureExportSettings(source, destination))

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, closure)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = Reports.ledgerExport(appState, settings, balSettings)
inside(ledgerRep) {
Expand Down Expand Up @@ -190,7 +190,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val closure = closure1 ++ closure2
val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, closure)

val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = intercept[InputError] {
Reports.ledgerExport(appState, settings, balSettings)
Expand All @@ -215,7 +215,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val closure = Seq(ClosureExportSettings(source, destination))

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, closure)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = intercept[MissingDestinationError] {
Reports.ledgerExport(appState, settings, balSettings)
Expand All @@ -240,7 +240,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val closure = Seq(ClosureExportSettings(source, destination))

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, closure)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, Nil, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val ledgerRep = intercept[SourceDestinationClashError] {
Reports.ledgerExport(appState, settings, balSettings)
Expand All @@ -265,7 +265,7 @@ class ProcessorTest extends FlatSpec with Matchers with Inside {
val accounts = Seq(AccountSettings(name, Some(alias)))

val balSettings = LedgerExportSettings(None, Seq("balSheet12.txt"), false, Nil)
val settings = Settings(Nil, Nil, accounts, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None)
val settings = Settings(Nil, Nil, accounts, Nil, ReportOptions(Nil), Seq(balSettings), None, false, None, None)

val appState = Processor.process(scope, settings.accounts, None)

Expand Down
20 changes: 16 additions & 4 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -40,30 +40,42 @@ lazy val abandon = (project in file(".")).
)

lazy val base = (project in file("base")).
settings(commonSettings: _*).
enablePlugins(BuildInfoPlugin).
settings(commonSettings: _*).
settings(
name := "abandon-base",
fork in run := true,
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoPackage := "co.uproot.abandon"
buildInfoOptions += BuildInfoOption.BuildTime,
buildInfoPackage := "co.uproot.abandon",
buildInfoObject := "BaseBuildInfo"
)


lazy val cli = (project in file("cli")).
enablePlugins(BuildInfoPlugin).
dependsOn(base).
settings(commonSettings: _*).
settings(
name := "abandon-cli",
fork in run := true
fork in run := true,
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoOptions += BuildInfoOption.BuildTime,
buildInfoPackage := "co.uproot.abandon",
buildInfoObject := "CliBuildInfo"
)

lazy val gui = (project in file("gui")).
enablePlugins(BuildInfoPlugin).
dependsOn(base).
settings(commonSettings: _*).
settings(
name := "abandon-gui",
fork in run := true
fork in run := true,
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoOptions += BuildInfoOption.BuildTime,
buildInfoPackage := "co.uproot.abandon",
buildInfoObject := "GuiBuildInfo"
)


Expand Down
10 changes: 7 additions & 3 deletions cli/src/main/scala/co/uproot/abandon/App.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package co.uproot.abandon

import org.rogach.scallop.{ ScallopConf, stringListConverter }
import Helper.{ Zero, filterByType, maxElseZero }
import java.io.FileWriter

import co.uproot.abandon.Helper.maxElseZero

final class ReportWriter(settings: Settings, outFiles: Seq[String]) {
val writesToScreen = outFiles.contains("-") || outFiles.isEmpty
val filePaths = outFiles.filterNot(_ equals "-").map(settings.getConfigRelativePath(_))
Expand Down Expand Up @@ -149,9 +149,13 @@ object CLIMain {
}
reportWriter.endCodeBlock()
}
def buildId: String = {
"Base: " + BaseBuildInfo.version + " [" + BaseBuildInfo.builtAtString + "];" +
"CLI: " + CliBuildInfo.version + " [" + CliBuildInfo.builtAtString + "];"
}

def runAppThrows(args: Array[String]) {
val settingsResult = SettingsHelper.getCompleteSettings(args)
val settingsResult = SettingsHelper.getCompleteSettings(args, buildId)
settingsResult match {
case Left(errorMsg) => printErrAndExit(errorMsg)
case Right(settings) =>
Expand Down
23 changes: 13 additions & 10 deletions gui/src/main/scala/co/uproot/abandon/UI.scala
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package co.uproot.abandon

import scalafx.Includes._
import javafx.event.EventHandler
import javafx.stage.WindowEvent
import scalafx.application.JFXApp

import scala.collection.JavaConverters._
import scalafx.Includes._
import scalafx.application.JFXApp.PrimaryStage
import scalafx.geometry.Insets
import scalafx.scene.{ Node, Scene }
import scalafx.scene.control.{ Label, Tab, TabPane, TreeItem }
import scalafx.scene.layout.{ BorderPane, HBox, Priority }
import scalafx.application.Platform
import collection.JavaConverters._
import scalafx.geometry.Pos
import scalafx.application.{JFXApp, Platform}
import scalafx.geometry.{Insets, Pos}
import scalafx.scene.control.{Label, Tab, TabPane}
import scalafx.scene.layout.{BorderPane, HBox}
import scalafx.scene.{Node, Scene}

trait UIReport {
protected val styleClassName = "report"
Expand Down Expand Up @@ -149,9 +148,13 @@ object AbandonUI extends JFXApp {
}
processedFiles
}
def buildId: String = {
"Base: " + BaseBuildInfo.version + " [" + BaseBuildInfo.builtAtString + "];" +
"GUI: " + GuiBuildInfo.version + " [" + GuiBuildInfo.builtAtString + "];"
}

try {
val settingsResult = SettingsHelper.getCompleteSettings(parameters.raw)
val settingsResult = SettingsHelper.getCompleteSettings(parameters.raw, buildId)
settingsResult match {
case Left(errorMsg) => handleError("Error: " + errorMsg)
case Right(settings) =>
Expand Down

0 comments on commit ceb7716

Please sign in to comment.