Skip to content

Commit

Permalink
whiteboard
Browse files Browse the repository at this point in the history
Signed-off-by: Mark Hoffmann <m.hoffmann@data-in-motion.biz>
  • Loading branch information
maho7791 committed May 18, 2023
1 parent 99f4b53 commit 9dacbb1
Show file tree
Hide file tree
Showing 22 changed files with 128 additions and 18 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
.gradle/
generated/
.metadata
bin/
11 changes: 11 additions & 0 deletions org.gecko.playground.ds.whiteboard/.classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="aQute.bnd.classpath.container"/>
<classpathentry kind="src" output="bin" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
1 change: 1 addition & 0 deletions org.gecko.playground.ds.whiteboard/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/bin/
23 changes: 23 additions & 0 deletions org.gecko.playground.ds.whiteboard/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.gecko.playground.ds.whiteboard</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>bndtools.core.bndbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>bndtools.core.bndnature</nature>
</natures>
</projectDescription>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
encoding/bnd.bnd=UTF-8
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17
6 changes: 6 additions & 0 deletions org.gecko.playground.ds.whiteboard/bnd.bnd
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-buildpath: \
org.gecko.playground.exchange.api,\
org.gecko.playground.ds.simple
-privatepackage: \
org.gecko.playground.ds.whiteboard,\
org.gecko.playground.ds.whiteboard.logger
22 changes: 22 additions & 0 deletions org.gecko.playground.ds.whiteboard/launch-whiteboard.bndrun
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
-runfw: org.apache.felix.framework;version='[7.0.5,7.0.5]'
-runee: JavaSE-17
-runrequires: \
bnd.identity;id='org.gecko.playground.exchange.impl',\
bnd.identity;id='org.gecko.playground.exchange.client',\
bnd.identity;id='org.gecko.playground.ds.whiteboard',\
bnd.identity;id='org.apache.felix.gogo.command',\
bnd.identity;id='org.apache.felix.gogo.shell'
-runbundles: \
org.apache.felix.gogo.command;version='[1.1.2,1.1.3)',\
org.apache.felix.gogo.runtime;version='[1.1.6,1.1.7)',\
org.apache.felix.gogo.shell;version='[1.1.4,1.1.5)',\
org.apache.felix.scr;version='[2.2.6,2.2.7)',\
org.gecko.playground.ds.simple;version=snapshot,\
org.gecko.playground.ds.whiteboard;version=snapshot,\
org.gecko.playground.exchange.api;version=snapshot,\
org.gecko.playground.exchange.impl;version=snapshot,\
org.osgi.service.component;version='[1.5.1,1.5.2)',\
org.osgi.service.log;version='[1.5.0,1.5.1)',\
org.osgi.util.function;version='[1.2.0,1.2.1)',\
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
org.gecko.playground.exchange.client;version=snapshot
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package org.gecko.playground.exchange.logger;
package org.gecko.playground.ds.whiteboard.logger;

import org.gecko.playground.ds.simple.logging.Log;
import org.gecko.playground.exchange.api.ExchangeListener;
import org.gecko.playground.model.orders.Order;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component(service = ExchangeListener.class)
public class LoggingExchangeListener extends ExchangeListener {

private Log log;
Expand All @@ -12,23 +15,24 @@ public Log getLog() {
return log;
}

@Reference
public void setLog(Log log) {
this.log = log;
}

@Override
public void orderSubmitted(String exchangeId, Order order) {
log.logMessage("LoggingExchangeListener: order submitted.");
log.logMessage("LEL: Order submitted" + order.toString());
}

@Override
public void orderCancelled(String exchangeId, Order order) {
log.logMessage("LoggingExchangeListener: order cancelled.");
log.logMessage("LEL: order cancelled: " + order.toString());
}

@Override
public void orderExpired(String exchangeId, Order order) {
log.logMessage("LoggingExchangeListener: order expired.");
log.logMessage("LEL: order expired: " + order.toString());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package org.gecko.playground.ds.whiteboard.logger;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package org.gecko.playground.ds.whiteboard;
1 change: 0 additions & 1 deletion org.gecko.playground.exchange.api/bin/.gitignore

This file was deleted.

Binary file not shown.
Empty file.
Binary file not shown.
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
import static java.util.Objects.isNull;

import org.gecko.playground.exchange.api.Exchange;
import org.gecko.playground.model.orders.Order;
import org.gecko.playground.model.orders.Side;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;

@Component (service = Object.class ,
property = { "osgi.command.scope=exchange",
"osgi.command.function=orders"})
"osgi.command.function=orders",
"osgi.command.function=askOrder",})
public class ExchangeCommand {

private Exchange exchange;

// @Reference
@Reference(cardinality = ReferenceCardinality.OPTIONAL)
@Reference
public void setExchange(Exchange exchange) {
this.exchange = exchange;
}
Expand All @@ -32,5 +32,16 @@ public void orders() {
System.out.println(String.format("There are %d orders", exchange.getAllOrders().size()));
}
}

public void askOrder(String symbol, int quantity, long price) {
System.out.println("Ask for order of " + quantity + " for " + symbol + " at the price of " + price + " cent." );
Order o = new Order(symbol, Side.Ask, quantity, price);
try {
exchange.submitOrder(o);
System.out.println("Order was submitted ...");
} catch (Exception e) {
System.out.println("Error submitting the order: " + e.getMessage());
}
}

}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
package org.gecko.playground.exchange.impl;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.atomic.AtomicLong;

import org.gecko.playground.exchange.api.Exchange;
import org.gecko.playground.exchange.api.ExchangeListener;
import org.gecko.playground.model.orders.Fill;
import org.gecko.playground.model.orders.Order;
import org.osgi.framework.Constants;
Expand All @@ -22,11 +25,12 @@
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.component.annotations.ReferencePolicyOption;
import org.osgi.service.log.Logger;
import org.osgi.service.log.LoggerFactory;

@Component(
@Component(immediate = true,
property = {
"name=Local",
"symbols=MSFT",
Expand All @@ -36,7 +40,7 @@
public class ExchangeImpl implements Exchange {

private static final AtomicLong instanceCounter = new AtomicLong(0L);

private final List <ExchangeListener > listeners = new CopyOnWriteArrayList<>();
private final ConcurrentMap<UUID, Order> orders = new ConcurrentHashMap<UUID, Order>();
private final BlockingDeque<Order> orderQueue = new LinkedBlockingDeque<Order>(128);
private final BlockingDeque<Fill> fillQueue = new LinkedBlockingDeque<Fill>(128);
Expand All @@ -47,9 +51,6 @@ public class ExchangeImpl implements Exchange {
@Reference(service = LoggerFactory.class, cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY)
private Logger log;

// TODO: bind to ExchangeListener services.
// You will need to add a final field of type List<ExchangeListener>.

/**
* Activate without OSGi ComponentContext. Used for tests.
* @param configProps
Expand Down Expand Up @@ -99,13 +100,25 @@ public Collection<Order> getAllOrders() {
return orders.values();
}

@Reference (cardinality = ReferenceCardinality.MULTIPLE , policy = ReferencePolicy.DYNAMIC)
public void addExchangeListener(ExchangeListener listener) {
System.out.println("Add listener to exchange: " + listener);
listeners.add(listener);
}

public void removeExchangeListener(ExchangeListener listener) {
System.out.println("Remove listener from exchange: " + listener);
listeners.remove(listener);
}

void orderSubmitted(Order order) {
orders.put(order.getId(), order);
fireOrderSubmitted(order);
}

private void fireOrderSubmitted(Order order) {
// TODO: iterate over ExchangeListeners and call orderSubmitted(exchangeId, order).
for (ExchangeListener l : listeners)
l.orderSubmitted(id , order);
}

private void fireFill(Fill fill) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;

@Component(immediate=true, name="org.gecko.playground.exchange.prices.feed")
//@Component(immediate=true, name="org.gecko.playground.exchange.prices.feed")
public class RandomPriceFeed implements Runnable {

private static final String TOPIC_PREFIX = "PRICES/STOCKS/NASDAQ/";
Expand Down

0 comments on commit 9dacbb1

Please sign in to comment.