From 32dd69386830eacf4e06a43a39e97e8526570306 Mon Sep 17 00:00:00 2001 From: Mike Rosseel Date: Mon, 22 Aug 2016 22:02:03 +0200 Subject: [PATCH] first version --- .../java/io/bitsquare/api/ApiApplication.java | 32 +++++ .../io/bitsquare/api/ApiConfiguration.java | 33 ++++++ .../main/java/io/bitsquare/api/ApiModule.java | 110 ++++++++++++++++++ .../java/io/bitsquare/api/ApiResource.java | 32 +++++ .../java/io/bitsquare/api/BitsquareProxy.java | 9 ++ .../main/java/io/bitsquare/api/Saying.java | 30 +++++ pom.xml | 5 +- 7 files changed, 249 insertions(+), 2 deletions(-) create mode 100644 api/src/main/java/io/bitsquare/api/ApiApplication.java create mode 100644 api/src/main/java/io/bitsquare/api/ApiConfiguration.java create mode 100644 api/src/main/java/io/bitsquare/api/ApiModule.java create mode 100644 api/src/main/java/io/bitsquare/api/ApiResource.java create mode 100644 api/src/main/java/io/bitsquare/api/BitsquareProxy.java create mode 100644 api/src/main/java/io/bitsquare/api/Saying.java diff --git a/api/src/main/java/io/bitsquare/api/ApiApplication.java b/api/src/main/java/io/bitsquare/api/ApiApplication.java new file mode 100644 index 0000000000..070b514d17 --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/ApiApplication.java @@ -0,0 +1,32 @@ +package io.bitsquare.api; + +import io.dropwizard.Application; +import io.dropwizard.setup.Bootstrap; +import io.dropwizard.setup.Environment; + +public class ApiApplication extends Application { + public static void main(String[] args) throws Exception { + new ApiApplication().run(args); + } + + @Override + public String getName() { + return "hello-world"; + } + + @Override + public void initialize(Bootstrap bootstrap) { + // nothing to do yet + } + + @Override + public void run(ApiConfiguration configuration, + Environment environment) { + final ApiResource resource = new ApiResource( + configuration.getTemplate(), + configuration.getDefaultName() + ); + environment.jersey().register(resource); + } + +} diff --git a/api/src/main/java/io/bitsquare/api/ApiConfiguration.java b/api/src/main/java/io/bitsquare/api/ApiConfiguration.java new file mode 100644 index 0000000000..cacff71556 --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/ApiConfiguration.java @@ -0,0 +1,33 @@ +package io.bitsquare.api; + +import io.dropwizard.Configuration; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.hibernate.validator.constraints.NotEmpty; + +public class ApiConfiguration extends Configuration { + @NotEmpty + private String template; + + @NotEmpty + private String defaultName = "Stranger"; + + @JsonProperty + public String getTemplate() { + return template; + } + + @JsonProperty + public void setTemplate(String template) { + this.template = template; + } + + @JsonProperty + public String getDefaultName() { + return defaultName; + } + + @JsonProperty + public void setDefaultName(String name) { + this.defaultName = name; + } +} diff --git a/api/src/main/java/io/bitsquare/api/ApiModule.java b/api/src/main/java/io/bitsquare/api/ApiModule.java new file mode 100644 index 0000000000..5c4c11b709 --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/ApiModule.java @@ -0,0 +1,110 @@ +/* + * This file is part of Bitsquare. + * + * Bitsquare is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bitsquare is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bitsquare. If not, see . + */ + +package io.bitsquare.api; + +import com.google.inject.Singleton; +import io.bitsquare.alert.AlertModule; +import io.bitsquare.app.AppModule; +import io.bitsquare.app.BitsquareEnvironment; +import io.bitsquare.arbitration.ArbitratorModule; +import io.bitsquare.btc.BitcoinModule; +import io.bitsquare.common.Clock; +import io.bitsquare.common.crypto.KeyRing; +import io.bitsquare.common.crypto.KeyStorage; +import io.bitsquare.crypto.EncryptionServiceModule; +import io.bitsquare.filter.FilterModule; +import io.bitsquare.p2p.P2PModule; +import io.bitsquare.storage.Storage; +import io.bitsquare.trade.TradeModule; +import io.bitsquare.trade.offer.OfferModule; +import io.bitsquare.user.Preferences; +import io.bitsquare.user.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.env.Environment; + +import java.io.File; + +import static com.google.inject.name.Names.named; + +class ApiModule extends AppModule { + private static final Logger log = LoggerFactory.getLogger(ApiModule.class); + + public ApiModule(Environment env) { + super(env); + } + + @Override + protected void configure() { + bind(KeyStorage.class).in(Singleton.class); + bind(KeyRing.class).in(Singleton.class); + bind(User.class).in(Singleton.class); + bind(Preferences.class).in(Singleton.class); + bind(Clock.class).in(Singleton.class); + + File storageDir = new File(env.getRequiredProperty(Storage.DIR_KEY)); + bind(File.class).annotatedWith(named(Storage.DIR_KEY)).toInstance(storageDir); + + File keyStorageDir = new File(env.getRequiredProperty(KeyStorage.DIR_KEY)); + bind(File.class).annotatedWith(named(KeyStorage.DIR_KEY)).toInstance(keyStorageDir); + + bind(BitsquareEnvironment.class).toInstance((BitsquareEnvironment) env); + + // ordering is used for shut down sequence + install(tradeModule()); + install(encryptionServiceModule()); + install(arbitratorModule()); + install(offerModule()); + install(torModule()); + install(bitcoinModule()); + install(alertModule()); + install(filterModule()); + } + + private TradeModule tradeModule() { + return new TradeModule(env); + } + + private EncryptionServiceModule encryptionServiceModule() { + return new EncryptionServiceModule(env); + } + + private ArbitratorModule arbitratorModule() { + return new ArbitratorModule(env); + } + + private AlertModule alertModule() { + return new AlertModule(env); + } + + private FilterModule filterModule() { + return new FilterModule(env); + } + + private OfferModule offerModule() { + return new OfferModule(env); + } + + private P2PModule torModule() { + return new P2PModule(env); + } + + private BitcoinModule bitcoinModule() { + return new BitcoinModule(env); + } +} diff --git a/api/src/main/java/io/bitsquare/api/ApiResource.java b/api/src/main/java/io/bitsquare/api/ApiResource.java new file mode 100644 index 0000000000..b61e9b5be0 --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/ApiResource.java @@ -0,0 +1,32 @@ +package io.bitsquare.api; + +import com.codahale.metrics.annotation.Timed; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import java.util.concurrent.atomic.AtomicLong; +import java.util.Optional; + +@Path("/hello-world") +@Produces(MediaType.APPLICATION_JSON) +public class ApiResource { + private final String template; + private final String defaultName; + private final AtomicLong counter; + + public ApiResource(String template, String defaultName) { + this.template = template; + this.defaultName = defaultName; + this.counter = new AtomicLong(); + } + + @GET + @Timed + public Saying sayHello(@QueryParam("name") Optional name) { + final String value = String.format(template, name.orElse(defaultName)); + return new Saying(counter.incrementAndGet(), value); + } +} diff --git a/api/src/main/java/io/bitsquare/api/BitsquareProxy.java b/api/src/main/java/io/bitsquare/api/BitsquareProxy.java new file mode 100644 index 0000000000..97051e7c27 --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/BitsquareProxy.java @@ -0,0 +1,9 @@ +package io.bitsquare.api; + +/** + * This class is a proxy for all bitsquare features the api will use. + * + * No methods/representations used in the interface layers (REST/Socket/...) should be used in this class. + */ +public class BitsquareProxy { +} diff --git a/api/src/main/java/io/bitsquare/api/Saying.java b/api/src/main/java/io/bitsquare/api/Saying.java new file mode 100644 index 0000000000..ccf26ad9fa --- /dev/null +++ b/api/src/main/java/io/bitsquare/api/Saying.java @@ -0,0 +1,30 @@ +package io.bitsquare.api; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.hibernate.validator.constraints.Length; + +public class Saying { + private long id; + + @Length(max = 3) + private String content; + + public Saying() { + // Jackson deserialization + } + + public Saying(long id, String content) { + this.id = id; + this.content = content; + } + + @JsonProperty + public long getId() { + return id; + } + + @JsonProperty + public String getContent() { + return content; + } +} diff --git a/pom.xml b/pom.xml index 3bb40ab2b0..0e6c8ffc14 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ + api common core jsocks @@ -160,12 +161,12 @@ ch.qos.logback logback-core - 1.1.3 + 1.1.7 ch.qos.logback logback-classic - 1.1.3 + 1.1.7