You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/12/11 10:27:56 UTC

[camel] branch master updated: CAMEL-14284: Configuring endpoint should set properties on endpoint and not configuration object - xchange

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new fc9ef81  CAMEL-14284: Configuring endpoint should set properties on endpoint and not configuration object - xchange
fc9ef81 is described below

commit fc9ef81bcc5223394f39106d45e84bfac93fdbc8
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Dec 11 11:27:35 2019 +0100

    CAMEL-14284: Configuring endpoint should set properties on endpoint and not configuration object - xchange
---
 .../src/main/docs/xchange-component.adoc           |  2 +-
 .../camel/component/xchange/XChangeComponent.java  | 22 +++++++------
 .../component/xchange/XChangeConfiguration.java    | 17 +++++-----
 .../camel/component/xchange/XChangeEndpoint.java   | 36 ++++++++++++++--------
 .../xchange/XChangeMarketDataProducer.java         |  2 +-
 .../component/xchange/XChangeMetaDataProducer.java |  2 +-
 .../dsl/XChangeEndpointBuilderFactory.java         | 15 +--------
 7 files changed, 49 insertions(+), 47 deletions(-)

diff --git a/components/camel-xchange/src/main/docs/xchange-component.adoc b/components/camel-xchange/src/main/docs/xchange-component.adoc
index b8de408..7694fee 100644
--- a/components/camel-xchange/src/main/docs/xchange-component.adoc
+++ b/components/camel-xchange/src/main/docs/xchange-component.adoc
@@ -74,7 +74,7 @@ with the following path and query parameters:
 |===
 | Name | Description | Default | Type
 | *currency* (producer) | The currency |  | Currency
-| *currencyPair* (producer) | The currency pair |  | CurrencyPair
+| *currencyPair* (producer) | The currency pair |  | String
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *method* (producer) | *Required* The method to execute |  | XChangeMethod
 | *service* (producer) | *Required* The service to call |  | XChangeService
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeComponent.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeComponent.java
index 99366d5..c35c853 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeComponent.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeComponent.java
@@ -28,41 +28,43 @@ import org.knowm.xchange.utils.Assert;
 @Component("xchange")
 public class XChangeComponent extends DefaultComponent {
 
-    private XChange exchange;
+    private XChange xchange;
     
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-
         // Init the configuration
         XChangeConfiguration configuration = new XChangeConfiguration(this);
-        setProperties(configuration, parameters);
 
         // Set the required name of the exchange
         configuration.setName(remaining);
 
-        XChange exchange = createXChange(configuration);
-        XChangeEndpoint endpoint = new XChangeEndpoint(uri, this, configuration, exchange);
-        
+        XChangeEndpoint endpoint = new XChangeEndpoint(uri, this, configuration);
+        setProperties(endpoint, parameters);
+
+        // after configuring endpoint then create xchange
+        XChange xchange = createXChange(configuration);
+        endpoint.setXchange(xchange);
+
         return endpoint;
     }
 
     public XChange getXChange() {
-        return exchange;
+        return xchange;
     }
     
     private synchronized XChange createXChange(XChangeConfiguration configuration) {
         
-        if (exchange == null) {
+        if (xchange == null) {
             
             // Get the XChange implementation
             Class<? extends Exchange> exchangeClass = configuration.getXChangeClass();
             Assert.notNull(exchangeClass, "XChange not supported: " + configuration.getName());
             
             // Create the XChange and associated Endpoint
-            exchange = new XChange(ExchangeFactory.INSTANCE.createExchange(exchangeClass));
+            xchange = new XChange(ExchangeFactory.INSTANCE.createExchange(exchangeClass));
         }
         
-        return exchange;
+        return xchange;
     }
 
 }
\ No newline at end of file
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java
index 4e827b1..4a90d09 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java
@@ -59,7 +59,7 @@ public class XChangeConfiguration {
     @UriParam(description = "The currency") 
     private Currency currency;
     @UriParam(description = "The currency pair") 
-    private CurrencyPair currencyPair;
+    private String currencyPair;
 
     public XChangeConfiguration(XChangeComponent component) {
         ObjectHelper.notNull(component, "component");
@@ -101,16 +101,19 @@ public class XChangeConfiguration {
         this.currency = Currency.getInstanceNoCreate(curr);
     }
 
-    public CurrencyPair getCurrencyPair() {
-        return currencyPair;
+    public CurrencyPair getAsCurrencyPair() {
+        if (currencyPair != null) {
+            return new CurrencyPair(currencyPair);
+        }
+        return null;
     }
 
-    public void setCurrencyPair(CurrencyPair currencyPair) {
-        this.currencyPair = currencyPair;
+    public String getCurrencyPair() {
+        return currencyPair;
     }
 
-    public void setCurrencyPair(String pair) {
-        this.currencyPair = new CurrencyPair(pair);
+    public void setCurrencyPair(String currencyPair) {
+        this.currencyPair = currencyPair;
     }
 
     @SuppressWarnings("unchecked")
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java
index f1f3e21..b6454f4 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java
@@ -51,13 +51,12 @@ import org.knowm.xchange.utils.Assert;
 public class XChangeEndpoint extends DefaultEndpoint {
 
     @UriParam
-    private final XChangeConfiguration configuration;
-    private final XChange exchange;
-    
-    public XChangeEndpoint(String uri, XChangeComponent component, XChangeConfiguration configuration, XChange exchange) {
+    private XChangeConfiguration configuration;
+    private transient XChange xchange;
+
+    public XChangeEndpoint(String uri, XChangeComponent component, XChangeConfiguration configuration) {
         super(uri, component);
         this.configuration = configuration;
-        this.exchange = exchange;
     }
 
     @Override
@@ -72,7 +71,6 @@ public class XChangeEndpoint extends DefaultEndpoint {
 
     @Override
     public Producer createProducer() throws Exception {
-        
         Producer producer = null;
         
         XChangeService service = getConfiguration().getService();
@@ -88,29 +86,41 @@ public class XChangeEndpoint extends DefaultEndpoint {
         return producer;
     }
 
+    public void setConfiguration(XChangeConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
     public XChangeConfiguration getConfiguration() {
         return configuration;
     }
 
+    public XChange getXchange() {
+        return xchange;
+    }
+
+    public void setXchange(XChange xchange) {
+        this.xchange = xchange;
+    }
+
     public List<Currency> getCurrencies() {
-        ExchangeMetaData metaData = exchange.getExchangeMetaData();
+        ExchangeMetaData metaData = xchange.getExchangeMetaData();
         return metaData.getCurrencies().keySet().stream().sorted().collect(Collectors.toList());
     }
     
     public CurrencyMetaData getCurrencyMetaData(Currency curr) {
         Assert.notNull(curr, "Null currency");
-        ExchangeMetaData metaData = exchange.getExchangeMetaData();
+        ExchangeMetaData metaData = xchange.getExchangeMetaData();
         return metaData.getCurrencies().get(curr);
     }
     
     public List<CurrencyPair> getCurrencyPairs() {
-        ExchangeMetaData metaData = exchange.getExchangeMetaData();
+        ExchangeMetaData metaData = xchange.getExchangeMetaData();
         return metaData.getCurrencyPairs().keySet().stream().sorted().collect(Collectors.toList());
     }
     
     public CurrencyPairMetaData getCurrencyPairMetaData(CurrencyPair pair) {
         Assert.notNull(pair, "Null currency");
-        ExchangeMetaData metaData = exchange.getExchangeMetaData();
+        ExchangeMetaData metaData = xchange.getExchangeMetaData();
         return metaData.getCurrencyPairs().get(pair);
     }
 
@@ -138,7 +148,7 @@ public class XChangeEndpoint extends DefaultEndpoint {
     }
 
     public List<FundingRecord> getFundingHistory() throws IOException {
-        AccountService accountService = exchange.getAccountService();
+        AccountService accountService = xchange.getAccountService();
         TradeHistoryParams fundingHistoryParams = accountService.createFundingHistoryParams();
         return accountService.getFundingHistory(fundingHistoryParams).stream().sorted(new Comparator<FundingRecord>() {
             public int compare(FundingRecord o1, FundingRecord o2) {
@@ -148,7 +158,7 @@ public class XChangeEndpoint extends DefaultEndpoint {
     }
 
     public List<Wallet> getWallets() throws IOException {
-        AccountService accountService = exchange.getAccountService();
+        AccountService accountService = xchange.getAccountService();
         AccountInfo accountInfo = accountService.getAccountInfo();
         return accountInfo.getWallets().values().stream().sorted(new Comparator<Wallet>() {
             public int compare(Wallet o1, Wallet o2) {
@@ -159,7 +169,7 @@ public class XChangeEndpoint extends DefaultEndpoint {
 
     public Ticker getTicker(CurrencyPair pair) throws IOException {
         Assert.notNull(pair, "Null currency pair");
-        MarketDataService marketService = exchange.getMarketDataService();
+        MarketDataService marketService = xchange.getMarketDataService();
         return marketService.getTicker(pair);
     }
 }
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMarketDataProducer.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMarketDataProducer.java
index f8bb392..5e17492 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMarketDataProducer.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMarketDataProducer.java
@@ -44,7 +44,7 @@ public class XChangeMarketDataProducer extends DefaultProducer {
         if (XChangeMethod.ticker == method) {
             CurrencyPair pair = exchange.getIn().getHeader(HEADER_CURRENCY_PAIR, CurrencyPair.class);
             pair = pair != null ? pair : exchange.getMessage().getBody(CurrencyPair.class);
-            pair = pair != null ? pair : endpoint.getConfiguration().getCurrencyPair();
+            pair = pair != null ? pair : endpoint.getConfiguration().getAsCurrencyPair();
             Ticker ticker = endpoint.getTicker(pair);
             exchange.getMessage().setBody(ticker);
         }
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMetaDataProducer.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMetaDataProducer.java
index c22e292..ee5682b 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMetaDataProducer.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeMetaDataProducer.java
@@ -57,7 +57,7 @@ public class XChangeMetaDataProducer extends DefaultProducer {
         } else if (XChangeMethod.currencyPairMetaData == method) {
             CurrencyPair pair = exchange.getIn().getHeader(HEADER_CURRENCY_PAIR, CurrencyPair.class);
             pair = pair != null ? pair : exchange.getMessage().getBody(CurrencyPair.class);
-            pair = pair != null ? pair : endpoint.getConfiguration().getCurrencyPair();
+            pair = pair != null ? pair : endpoint.getConfiguration().getAsCurrencyPair();
             Object body = endpoint.getCurrencyPairMetaData(pair);
             exchange.getMessage().setBody(body);
         }
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XChangeEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XChangeEndpointBuilderFactory.java
index 47df9fb..6e7e1fe 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XChangeEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/XChangeEndpointBuilderFactory.java
@@ -65,20 +65,7 @@ public interface XChangeEndpointBuilderFactory {
         /**
          * The currency pair.
          * 
-         * The option is a: <code>org.knowm.xchange.currency.CurrencyPair</code>
-         * type.
-         * 
-         * Group: producer
-         */
-        default XChangeEndpointBuilder currencyPair(Object currencyPair) {
-            doSetProperty("currencyPair", currencyPair);
-            return this;
-        }
-        /**
-         * The currency pair.
-         * 
-         * The option will be converted to a
-         * <code>org.knowm.xchange.currency.CurrencyPair</code> type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
          * Group: producer
          */