SignatureService methods are now generic with respect to Bitsquare's
domain, i.e. there is no longer any awareness of "contracts",
"registration data", or the like. In fact, because SignatureService
holds no state whatsoever, it would be reasonable to refactor the class
into a set of static utility methods. However, this change leaves
SignatureService as a DI-managed POJO for the time being.
Major changes:
- Rename #signContract => #signMessage
- Rename #getEmbeddedAccountRegistrationData => #digestMessageWithSignature
The build now exposes two explicit ShadowJar tasks: one for the main
JavaFX client (`appJar`) and one for the headless bootstrap node
(`bootstrapNodeJar`).
Run as follows:
./gradlew appJar
-- or --
./gradlew bootstrapNodeJar
The resulting executable jar for each will be found in the `build/libs`
directory.
Thanks to @johnrengleman for his help at johnrengelman/shadow#108
Resolves#265Resolves#252
* cbeams:
Reorder methods in BitsquareEnvironment for clarity
Introduce 'app.version' property and remove hardcoded version
Use Preconditions#checkNotNull vs. #checkArgument
Rename name, port properties to node.name, node.port
Remove unused ApplicationPreferences variable
Rename config file from bitsquare.{conf=>properties}
- Introduce a test-time dependency on spring-test module for access to
MockPropertySource and friends.
- Add BitsquareEnvironmentTests and test that property source precedence
works as expected, i.e. that properties supplied on the command line
have highest precedence, overriding those picked up via environment
variables, system properties, the bitsquare.properties file or any of
the other available property sources.
These changes eliminate the use of "appName" throughout the codebase in
favor of explicitly named, and therefore individually configurable
alternatives specific to each component. For example, instead of passing
the application name through the WalletFacade boundary and then using a
utility like AppDirectory to put construct the wallet directory on the
fly, the path to wallet directory is now passed explicitly as a
@Named(WALLET_DIR) parameter to the WalletFacade constructor.
The result is not only better configurability (e.g. the WALLET_DIR
property can be overridden without affecting any other parts of the
system), but also better understandability. See
BitsquareEnvironment#defaultProperties to see how it all comes together.
Note how the value of appName is mapped to each of these new properties,
all in one place where it's easy to get an overview etc.
Also, as of this commit, there is only one place in the codebase where
the word "Bitsquare" is hard-coded (in `i.b.app.BitsquareEnvironment`):
$ git grep -h '"Bitsquare"' src
public static final String DEFAULT_APP_NAME = "Bitsquare";
To keep things clean, further hard-coding should be avoided from this
point forward.
See extended comments for each commit for details.
* wip-cbeams:
Eliminate remaining uses of @Named("appName")
Introduce explicit title param in ViewCB
Introduce io.bitsquare.btc.UserAgent
Introduce explicit dir and prefix params in Persistence
Introduce explicit wallet and useragent params in WalletFacade
Rename environment "app properties"=>"default properties"
Changes include:
- Remove lighthouse.files.AppDirectory. Several methods from this class
have, as of this commit, been rewritten and moved into the
BitsquareEnvironment and BitsquareApp classes as appropriate.
- Rename "appName" property => "app.name" for consistency with other
configurable properties.
- Allow configuration of both user and application data directories on
the command line. See --help menu for details.
Like previous commits, this change removes reliance on the global
"appName" in favor of an explicit and configurable "view.title"
parameter. It is still set by default to the value of appName, but this
assignment is now done in BitsquareEnvironment, as are the other similar
parameters that have been broken out in previous commits.
Like the previous commit, this change eliminates the reliance on
"appName" within the Persistence class in favor of explicit and
independently configurable parameters.
Additionally, the FileUtil class has been removed as it is no longer
necessary.
Previously, WalletFacade relied on "appName" to derive all information
related to the location of the bitcoinj wallet, the prefix of that
wallet, and the useragent name that will be used for bitcoin version
messages.
Now explicit parameters have been exposed for each of these, making for
a clearer and more configurable arrangement. The values associated with
each parameter still default to the value of "appName" (usually
"Bitsquare", "Bitsquare-Alice", or similar), however the assignment of
these defaults is now done in BitsquareEnvironment#defaultProperties
PropertySource. This approach allows for overriding any or all of these
parameters in any of the property sources that have higher precedence
than the default set, (e.g. in system environment variables, the
bitsquare.properties file, etc).
As a result of these changes, WalletFacade now has no awareness whatsover
of the Bitsquare "application", which is as it should be. This change
removes a conceptual tangle, and what would have become a code-level
tangle had we tried to replace the use of @Named("appName") with a
reference to BitsquareEnvironment#APP_NAME_KEY.
This begins a series of such changes, in which references to "appName"
will be eliminated in favor of similar explicit parameters.
Use of the Spring Environment
-----------------------------
This change replaces the use of the argparse4j library and basic
Properties objects with the Spring Framework's Environment abstraction.
The Environment allows for managing any number of 'property sources' in
a hierarchical fashion, such that a call to
`environment.getProperty("someKey")` iterates through an ordered set of
property sources, returning the first value associated with the given
key.
BitsquareEnvironment, introduced in this commit, eliminates the
functionality previously present in ConfigLoader, modeling the
bitsquare.conf and bitsquare.properties files as Spring Resource
objects, and in turn creating ResourcePropertySources out of them. These
custom property sources are combined with standard property sources
based on system environment variables and Java system properties as well
as a property source based on the command-line arguments passed to a
Bitsquare application to form a unified, one-stop configuration
hierarchy.
For example, let's say a Bitsquare user wishes to customize the port
that his Bitsquare application listens on. The simplest approach
(assuming the user is comfortable with the command line), would be the
following:
java -jar bitsquare.jar --port=1234
where '1234' is the custom port of choice. This is convenient enough for
one-off experimentation, but if the user wishes to make this a permanent
arrangement, he may want to add a `port=1234` entry to his
{bitsquare_app_dir}/bitsquare.conf file.
Alternatively, the user may wish to specify the port value as an
environment variable, e.g.:
PORT=1234 java -jar bitsquare.jar
or with a JVM system property, e.g.:
java -jar -DPORT=1234 bitsquare.jar
With BitsquareEnvironment, and its customized set of PropertySources in
place, the value of the port property may be specified in any of the
ways described above, and it is all handled in a unified way.
Restructuring of *Main classes
------------------------------
This commit also introduces significant changes to the structure of
executable Bitsquare applications. For example, prior to this change,
the io.bitsquare.app.gui.Main class was responsible for being both a
JavaFX Application and a standard Java main class.
Now, however, these concerns have been renamed and separated.
BitsquareApp is the JavaFX Application, and BitsquareAppMain is the Java
main class. Likewise, BootstrapNode has been broken out into
BootstrapNode and BootstrapNodeMain.
A common base class for the *Main classes has been extracted, named
BitsquareExecutable, which creates a template for option parsing,
environment creation, and ultimately application execution that applies
both to the BootstrapNode and BitsquareApp cases.
Improved help text
------------------
With the removal of argparse4j and the introduction of JOpt for argument
parsing, the application's help text has been improved. Use --help to
display this text, where you'll see information about default values,
etc. To do this easily from the Gradle build, run any of the following
commands:
# Display help text
./gradlew run -Pargs="--help"
# Qualify the application name as "Bitsquare-Alice"
./gradlew run -Pargs="--appName=Alice"
# Customize the port
./gradlew run -Pargs="--port=7377"
Renaming of FatalException
--------------------------
Finally, the exception formerly known as io.bitsquare.gui.FatalException
has been moved up a package and generalized to
io.bitsquare.BitsquareException, as it is now used more widely.