" *#
8 | #* @vtlvariable name="loggedOut" type="java.lang.String" *#
9 | #* @vtlvariable name="authenticationFailed" type="java.lang.String" *#
10 | #* @vtlvariable name="authenticationSucceeded" type="java.lang.String" *#
11 | #* @vtlvariable name="loginRedirect" type="java.lang.String" *#
12 |
--------------------------------------------------------------------------------
/chartfx-bench/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 |
6 | io.fair-acc
7 | chartfx-parent
8 | ${revision}${sha1}${changelist}
9 | ../pom.xml
10 |
11 |
12 | bench
13 | chartfx-bench
14 |
15 |
16 | io.fair_acc.bench
17 | 1.8
18 | 1.8
19 |
20 |
21 |
22 | Utilities for benchmarking during live operations.
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/chartfx-bench/src/main/java/io/fair_acc/bench/AggregateDurationMeasure.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.bench;
2 |
3 | /**
4 | * A measure that performs some aggregate function on durations, e.g., min / max / sum / mean
5 | *
6 | * @author ennerf
7 | */
8 | public interface AggregateDurationMeasure extends DurationMeasure {
9 | /**
10 | * Records the measure determined by all start and stop calls. Resets statistics.
11 | */
12 | void recordResult();
13 |
14 | static final AggregateDurationMeasure DISABLED = new AggregateDurationMeasure() {
15 | @Override
16 | public void start() {
17 | // no-op
18 | }
19 |
20 | @Override
21 | public void stop() {
22 | // no-op
23 | }
24 |
25 | @Override
26 | public void recordResult() {
27 | // no-op
28 | }
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/chartfx-bench/src/main/java/io/fair_acc/bench/BenchLevel.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.bench;
2 |
3 | import java.util.function.IntSupplier;
4 |
5 | /**
6 | * Levels for different types of benchmark information.
7 | * Copied from logging conventions.
8 | *
9 | * @author ennerf
10 | */
11 | public enum BenchLevel implements IntSupplier {
12 | /**
13 | * Coarse-grained high-level information
14 | */
15 | Info(400),
16 |
17 | /**
18 | * Information often used for debugging
19 | */
20 | Debug(500),
21 |
22 | /**
23 | * Used for debugging purposes. Includes the most detailed information
24 | */
25 | Trace(600);
26 |
27 | BenchLevel(int level) {
28 | this.level = level;
29 | }
30 |
31 | @Override
32 | public int getAsInt() {
33 | return level;
34 | }
35 |
36 | final int level;
37 | }
38 |
--------------------------------------------------------------------------------
/chartfx-bench/src/main/java/io/fair_acc/bench/DurationMeasure.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.bench;
2 |
3 | /**
4 | * Determines a duration based on the elapsed time between start and stop.
5 | * May record time.
6 | *
7 | * @author ennerf
8 | */
9 | public interface DurationMeasure {
10 | /**
11 | * Called when an action begins. Sets the start timestamp.
12 | */
13 | void start();
14 |
15 | /**
16 | * Called when an action is done. Records delta from the start timestamp.
17 | */
18 | void stop();
19 |
20 | /**
21 | * Calling stop without start is typically an invalid call that may throw an
22 | * error. This method explicitly allows it and simply ignores bad measurements.
23 | *
24 | * @return this
25 | */
26 | default DurationMeasure ignoreMissingStart() {
27 | return this;
28 | }
29 |
30 | /**
31 | * A default implementation that does nothing and may be eliminated at runtime
32 | */
33 | static final DurationMeasure DISABLED = new DurationMeasure() {
34 | @Override
35 | public void start() {
36 | // no-op
37 | }
38 |
39 | @Override
40 | public void stop() {
41 | // no-op
42 | }
43 | };
44 | }
45 |
--------------------------------------------------------------------------------
/chartfx-bench/src/main/java/io/fair_acc/bench/Measurable.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.bench;
2 |
3 | /**
4 | * An interface for classes that contain measurable actions
5 | *
6 | * @author ennerf
7 | */
8 | public interface Measurable {
9 | /**
10 | * @param recorder records benchmark measurements
11 | */
12 | void setRecorder(MeasurementRecorder recorder);
13 |
14 | /**
15 | * Adds an empty default method for Measurable
16 | * classes where the implementation is optional.
17 | */
18 | public interface EmptyDefault {
19 | default void setRecorder(MeasurementRecorder recorder){};
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/chartfx-chart/assets/error_icon.odg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/assets/error_icon.odg
--------------------------------------------------------------------------------
/chartfx-chart/assets/info_icon.odg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/assets/info_icon.odg
--------------------------------------------------------------------------------
/chartfx-chart/assets/warn_icon.odg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/assets/warn_icon.odg
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/AxisLabelOverlapPolicy.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes;
2 |
3 | public enum AxisLabelOverlapPolicy {
4 | /**
5 | omen-est-omen allow overlap
6 | */
7 | DO_NOTHING,
8 | /**
9 | make every other label invisible (ie. gain a factor 2 margin
10 | */
11 | SKIP_ALT,
12 | /**
13 | narrow font where possible
14 | */
15 | NARROW_FONT,
16 | /**
17 | * shift every second label by one label height/width (N.B. especially useful for category axes
18 | */
19 | SHIFT_ALT,
20 | /**
21 | * shift every second label by one label height/width (N.B. especially useful for category axes
22 | */
23 | FORCED_SHIFT_ALT
24 | }
25 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/AxisMode.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes;
2 |
3 | /**
4 | * Defines mode of axis-related operations such as zooming or panning.
5 | *
6 | * @author Grzegorz Kruk
7 | */
8 | public enum AxisMode {
9 | /**
10 | * The operation should be allowed only along the X axis.
11 | */
12 | X,
13 | /**
14 | * The operation should be allowed only along Y axis.
15 | */
16 | Y,
17 |
18 | /**
19 | * The operation can be performed on both X and Y axis.
20 | */
21 | XY;
22 |
23 | /**
24 | * Returns {@code true} for {@link #X} and {@link #XY}, {@code false} for {@link #Y}.
25 | *
26 | * @return {@code true} for {@code X} and {@code XY}, {@code false} for {@code Y}.
27 | */
28 | public boolean allowsX() {
29 | return this == X || this == XY;
30 | }
31 |
32 | /**
33 | * Returns {@code true} for {@link #Y} and {@link #XY}, {@code false} for {@link #X}.
34 | *
35 | * @return {@code true} for {@code Y} and {@code XY}, {@code false} for {@code X}.
36 | */
37 | public boolean allowsY() {
38 | return this == Y || this == XY;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/AxisTransform.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes;
2 |
3 | /**
4 | * Small interface for defining axis transforms (e.g. logarithmic-base 10, 2, other transforms etc.
5 | *
6 | * @author rstein
7 | */
8 | public interface AxisTransform {
9 | /**
10 | * default backward transform for affine functions: backward(forward(val)) = forward(backward(val)) = val;
11 | *
12 | * @param val input value
13 | * @return output value
14 | */
15 | double backward(double val);
16 |
17 | /**
18 | * default forward transform for affine functions: backward(forward(val)) = forward(backward(val)) = val;
19 | *
20 | * @param val input value
21 | * @return output value
22 | */
23 | double forward(double val);
24 |
25 | double getMaximumRange();
26 |
27 | double getMinimumRange();
28 |
29 | double getRoundedMaximumRange(double val);
30 |
31 | double getRoundedMinimumRange(double val);
32 |
33 | void setMaximumRange(double val);
34 |
35 | void setMinimumRange(double val);
36 | }
37 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/LogAxisType.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes;
2 |
3 | public enum LogAxisType {
4 | LINEAR_SCALE,
5 | LOG10_SCALE,
6 | DB_SCALE
7 | }
8 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/TickUnitSupplier.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2016 European Organisation for Nuclear Research (CERN), All Rights Reserved.
3 | */
4 |
5 | package io.fair_acc.chartfx.axes;
6 |
7 | /**
8 | * Supplier of Axis tick units that is expected to compute a tick unit that is equal or greater than the one given as
9 | * argument. In case the calculated tick labels don't fit on the axis, the {@link #computeTickUnit(double)} method is
10 | * called again with a grater reference unit so that the supplier can calculate next bigger value of the tick unit.
11 | *
12 | * If the {@link #computeTickUnit(double)} returns value that is smaller than the reference unit, the value will be used
13 | * without further checks which may result in tick labels overlapping.
14 | *
15 | * If the {@link #computeTickUnit(double)} returns value smaller than or equal to zero, IllegalArgumentException will be
16 | * thrown at runtime.
17 | *
18 | * @author Grzegorz Kruk
19 | */
20 | @FunctionalInterface
21 | public interface TickUnitSupplier {
22 | /**
23 | * Should return tick unit that is equal or grater to the given reference tick unit.
24 | *
25 | * @param referenceTickUnit reference tick unit
26 | * @return the computed unit that is equal or grater to the specified one
27 | */
28 | double computeTickUnit(double referenceTickUnit);
29 | }
30 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/format/FormatterLabelCache.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes.spi.format;
2 |
3 | import java.util.WeakHashMap;
4 |
5 | import javafx.util.StringConverter;
6 |
7 | import org.slf4j.Logger;
8 | import org.slf4j.LoggerFactory;
9 |
10 | /**
11 | * Simple cache to keep recurring results of String formatters
12 | *
13 | * @author rstein
14 | */
15 | public class FormatterLabelCache extends WeakHashMap {
16 | private static final Logger LOGGER = LoggerFactory.getLogger(FormatterLabelCache.class);
17 |
18 | public FormatterLabelCache() {
19 | super();
20 | }
21 |
22 | public String get(final StringConverter formatter, final Number value) {
23 | return computeIfAbsent(value, formatter::toString);
24 | }
25 |
26 | // @Override
27 | // public String get(Object key) {
28 | // String ret = super.get(key);
29 | // if (ret == null) {
30 | // System.out.println("cache missed");
31 | // } else {
32 | // System.out.println("cache hit");
33 | // }
34 | // return ret;
35 | // }
36 | }
37 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/transforms/AbstractAxisTransform.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes.spi.transforms;
2 |
3 | import io.fair_acc.chartfx.axes.Axis;
4 | import io.fair_acc.chartfx.axes.AxisTransform;
5 |
6 | /**
7 | * @author rstein
8 | */
9 | public abstract class AbstractAxisTransform implements AxisTransform {
10 | protected final Axis axis;
11 | protected double rangeMin = -Double.MAX_VALUE;
12 | protected double rangeMax = +Double.MAX_VALUE;
13 |
14 | protected AbstractAxisTransform(final Axis axis) {
15 | this.axis = axis;
16 | axis.minProperty().addListener((ch, o, n) -> rangeMin = n.doubleValue());
17 | axis.maxProperty().addListener((ch, o, n) -> rangeMax = n.doubleValue());
18 | }
19 |
20 | @Override
21 | public double getMaximumRange() {
22 | return rangeMax;
23 | }
24 |
25 | @Override
26 | public double getMinimumRange() {
27 | return rangeMin;
28 | }
29 |
30 | @Override
31 | public void setMaximumRange(final double val) {
32 | axis.maxProperty().set(val);
33 | }
34 |
35 | @Override
36 | public void setMinimumRange(final double val) {
37 | axis.minProperty().set(val);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/transforms/DefaultAxisTransform.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes.spi.transforms;
2 |
3 | import io.fair_acc.chartfx.axes.Axis;
4 |
5 | /**
6 | * Identity axis transform
7 | *
8 | * @author rstein
9 | */
10 | public class DefaultAxisTransform extends AbstractAxisTransform {
11 | public DefaultAxisTransform(final Axis axis) {
12 | super(axis);
13 | }
14 |
15 | @Override
16 | public double backward(final double val) {
17 | return val;
18 | }
19 |
20 | @Override
21 | public double forward(final double val) {
22 | return val;
23 | }
24 |
25 | @Override
26 | public double getRoundedMaximumRange(final double max) {
27 | return Math.ceil(max);
28 | }
29 |
30 | @Override
31 | public double getRoundedMinimumRange(final double min) {
32 | return Math.floor(min);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/transforms/LogarithmicTimeAxisTransform.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes.spi.transforms;
2 |
3 | import io.fair_acc.chartfx.axes.Axis;
4 |
5 | /**
6 | * @author rstein
7 | */
8 | public class LogarithmicTimeAxisTransform extends LogarithmicAxisTransform {
9 | public LogarithmicTimeAxisTransform(final Axis axis) {
10 | super(axis);
11 | }
12 |
13 | @Override
14 | public double backward(final double val) {
15 | // return pow(val) + rangeMax;
16 | return pow(val);
17 | }
18 |
19 | @Override
20 | public double forward(final double val) {
21 | // return log(rangeMax - val);
22 | return log(val);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/bench/MeasurementRecorders.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.bench;
2 |
3 | import java.util.concurrent.TimeUnit;
4 |
5 | /**
6 | * Convenience methods for creating commonly used recorders
7 | *
8 | * @author ennerf
9 | */
10 | public interface MeasurementRecorders {
11 | /**
12 | * A low-overhead hdr histogram recorder that writes an aggregate histogram to disk once a second.
13 | * Check hdrhistogram.org for more information
14 | *
15 | * @param fileName the disk file
16 | * @return recorder
17 | */
18 | static HdrHistogramRecorder newHdrHistogram(String fileName) {
19 | return HdrHistogramRecorder.createStarted(fileName, 1, TimeUnit.SECONDS);
20 | }
21 |
22 | /**
23 | * A recorder that creates a chart in a new stage and displays measurements in real time
24 | *
25 | * @param title title of the chart
26 | * @return recorder
27 | */
28 | static LiveDisplayRecorder newLiveDisplay(String title) {
29 | return LiveDisplayRecorder.showInNewStage(title);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/legend/Legend.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.legend;
2 |
3 | import java.util.List;
4 |
5 | import javafx.scene.Node;
6 |
7 | import io.fair_acc.chartfx.renderer.Renderer;
8 | import io.fair_acc.chartfx.ui.geometry.Side;
9 |
10 | public interface Legend {
11 | Node getNode();
12 |
13 | Side getSide();
14 |
15 | void setSide(Side side);
16 |
17 | boolean isVertical();
18 |
19 | void setVertical(boolean value);
20 |
21 | /**
22 | * This is called whenever a series is added or removed and the legend needs to be updated
23 | *
24 | * @param renderers corresponding renderers
25 | */
26 | default void updateLegend(List renderers) {
27 | updateLegend(renderers, false);
28 | }
29 |
30 | /**
31 | * This is called whenever a series is added or removed and the legend needs to be updated
32 | *
33 | * @param renderers corresponding renderers
34 | * @param forceUpdate {@code true} force update
35 | */
36 | void updateLegend(List renderers, boolean forceUpdate);
37 |
38 | void drawLegend();
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/marker/Marker.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.marker;
2 |
3 | import javafx.scene.canvas.GraphicsContext;
4 |
5 | /**
6 | * @author rstein
7 | */
8 | public interface Marker {
9 | void draw(GraphicsContext gc, double x, double y, double size);
10 | }
11 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/plugins/MouseEventsHelper.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.plugins;
2 |
3 | import static javafx.scene.input.MouseButton.PRIMARY;
4 | import static javafx.scene.input.MouseButton.SECONDARY;
5 |
6 | import javafx.scene.input.MouseEvent;
7 |
8 | /**
9 | * Utility methods for operating on {@link MouseEvent}s. (Unfortunately, the original by G.Kruk is package scoped)
10 | *
11 | * @author Grzegorz Kruk
12 | * @author braeun
13 | */
14 | public class MouseEventsHelper {
15 | public static boolean isOnlyCtrlModifierDown(final MouseEvent event) {
16 | return event.isControlDown() && !event.isAltDown() && !event.isMetaDown() && !event.isShiftDown();
17 | }
18 |
19 | public static boolean isOnlyMiddleButtonDown(final MouseEvent event) {
20 | return event.isMiddleButtonDown() && !event.isPrimaryButtonDown() && !event.isSecondaryButtonDown();
21 | }
22 |
23 | public static boolean isOnlyPrimaryButtonDown(final MouseEvent event) {
24 | return event.getButton() == PRIMARY && !event.isMiddleButtonDown() && !event.isSecondaryButtonDown();
25 | }
26 |
27 | public static boolean isOnlySecondaryButtonDown(final MouseEvent event) {
28 | return event.getButton() == SECONDARY && !event.isPrimaryButtonDown() && !event.isMiddleButtonDown();
29 | }
30 |
31 | public static boolean modifierKeysUp(final MouseEvent event) {
32 | return !event.isAltDown() && !event.isControlDown() && !event.isMetaDown() && !event.isShiftDown();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/plugins/ValueIndicator.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.plugins;
2 |
3 | import javafx.beans.property.DoubleProperty;
4 |
5 | import io.fair_acc.chartfx.axes.Axis;
6 |
7 | public interface ValueIndicator {
8 | /**
9 | * returns the Axis that this indicator is associated with.
10 | *
11 | * @return associated Axis
12 | */
13 | Axis getAxis();
14 |
15 | /**
16 | * @return text displayed within or next to the indicator
17 | */
18 | String getText();
19 |
20 | /**
21 | * Returns the indicated value.
22 | *
23 | * @return indicated value
24 | */
25 | double getValue();
26 |
27 | /**
28 | *
29 | * @param text the new text. If {@code null}, the label will be hidden.
30 | */
31 | void setText(final String text);
32 |
33 | /**
34 | * Sets the value that should be indicated.
35 | *
36 | * @param newValue value to be indicated
37 | */
38 | void setValue(double newValue);
39 |
40 | /**
41 | * Value indicated by this plugin.
42 | *
43 | * @return value property
44 | */
45 | DoubleProperty valueProperty();
46 | }
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/ContourType.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer;
2 |
3 | public enum ContourType {
4 | CONTOUR, // marching-square based contour plotting algorithm
5 | CONTOUR_FAST, // experimental contour plotting algorithm
6 | CONTOUR_HEXAGON, // hexagon-map based contour plotting algorithm
7 | HEATMAP, // 2D orthogonal projection based plotting algorithm
8 | HEATMAP_HEXAGON // hexagon-based plotting algorithm
9 | }
10 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/ErrorStyle.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer;
2 |
3 | /**
4 | * enum to encode the various error styles that can be drawn by the ErrorDataSetRenderer and HistoryDataSetRenderer
5 | *
6 | * @author rstein
7 | */
8 | public enum ErrorStyle {
9 | NONE("NONE"),
10 | ERRORBARS("ERRORBARS"),
11 | ERRORSURFACE("ERRORSURFACE"),
12 | ERRORCOMBO("ERRORCOMBO");
13 | private final String value;
14 |
15 | ErrorStyle(final String value) {
16 | this.value = value;
17 | }
18 |
19 | public String getValue() {
20 | return value;
21 | }
22 | }
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/LineStyle.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer;
2 |
3 | public enum LineStyle {
4 | NONE,
5 | NORMAL,
6 | AREA,
7 | ZERO_ORDER_HOLDER,
8 | STAIR_CASE, // aka. ZERO-ORDER_HOLDER
9 | HISTOGRAM,
10 | HISTOGRAM_FILLED, // similar to area but enclosing histogram style-type bars
11 | BEZIER_CURVE // smooth Bezier-type curve - beware this can be slow for many data points
12 | }
13 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/PolarTickStep.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer;
2 |
3 | public enum PolarTickStep {
4 | FIVE(5),
5 | FIFTEEN(15),
6 | THIRTY(30),
7 | FOURTY_FIVE(45),
8 | SIXTY(60),
9 | NINETY(90);
10 |
11 | private final double value;
12 |
13 | PolarTickStep(final double value) {
14 | this.value = value;
15 | }
16 |
17 | public double get() {
18 | return value;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/datareduction/ReductionType.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.datareduction;
2 |
3 | public enum ReductionType {
4 | MIN,
5 | MAX,
6 | AVERAGE,
7 | DOWN_SAMPLE
8 | }
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/datareduction/VisvalingamMaheswariWhyattDataReducer.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.datareduction;
2 |
3 | /**
4 | * Line generalisation by repeated elimination of the smallest area Visvalingam, Maheswari; Whyatt, J. D. (James Duncan)
5 | * Cartography -- Data processing; Computer science July 1992 https://hydra.hull.ac.uk/resources/hull:8338
6 | * https://bost.ocks.org/mike/simplify/
7 | *
8 | *
9 | * TODO: flesh out algorithm
10 | *
11 | */
12 | public class VisvalingamMaheswariWhyattDataReducer {
13 | }
14 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/FinancialTheme.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial;
2 |
3 | import javafx.css.PseudoClass;
4 |
5 | import io.fair_acc.chartfx.Chart;
6 |
7 | /**
8 | * A port of the string-ified themes to CSS pseudo classes
9 | *
10 | * @author ennerf
11 | */
12 | public enum FinancialTheme {
13 | Default, // no pseudo classes
14 | Classic("classic"),
15 | Clearlook("clearlook"),
16 | Sand("sand"),
17 | Blackberry("blackberry"),
18 | Dark("dark");
19 |
20 | private FinancialTheme() {
21 | this.pseudoClass = null;
22 | }
23 |
24 | private FinancialTheme(String name) {
25 | this.pseudoClass = PseudoClass.getPseudoClass("financial-" + name);
26 | }
27 |
28 | public PseudoClass getPseudoClass() {
29 | return pseudoClass;
30 | }
31 |
32 | public void applyPseudoClasses(Chart node) {
33 | for (var palette : values) {
34 | node.pseudoClassStateChanged(palette.getPseudoClass(), this == palette);
35 | }
36 | }
37 |
38 | private final PseudoClass pseudoClass;
39 | private static final FinancialTheme[] values = values();
40 | }
41 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/DataSetAware.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.service;
2 |
3 | import io.fair_acc.dataset.DataSet;
4 |
5 | /**
6 | * Provides DataSet Aware
7 | */
8 | public interface DataSetAware {
9 | DataSet getDataSet();
10 | }
11 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/PaintBarMarker.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.service;
2 |
3 | import javafx.scene.paint.Paint;
4 |
5 | /**
6 | * Specific painting/coloring of OHLCV/Candle bars.
7 | * Addon and extension possibilities.
8 | * The PaintBar is know techniques in the trading frameworks and platforms.
9 | */
10 | public interface PaintBarMarker {
11 | /**
12 | * Provides paint by selected OHLCV item domain object.
13 | * @param data domain object for Renderer Extension Points
14 | * @return paint bar
15 | */
16 | Paint getPaintBy(OhlcvRendererEpData data);
17 | }
18 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/RendererPaintAfterEP.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.service;
2 |
3 | /**
4 | * Extension point service for Renderers
5 | * Placement: Paint After bar painting
6 | */
7 | @FunctionalInterface
8 | public interface RendererPaintAfterEP {
9 | void paintAfter(OhlcvRendererEpData data);
10 | }
11 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/RendererPaintAfterEPAware.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.service;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * Provides DataSet Aware
7 | */
8 | public interface RendererPaintAfterEPAware {
9 | /**
10 | * Inject extension point for Paint after bar.
11 | *
12 | * @param paintAfterEP service
13 | */
14 | void addPaintAfterEp(RendererPaintAfterEP paintAfterEP);
15 |
16 | /**
17 | * Get Paint after extension points
18 | *
19 | * @return list of the Paint after extension points.
20 | */
21 | List getPaintAfterEps();
22 | }
23 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/footprint/NbColumnColorGroup.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.service.footprint;
2 |
3 | import java.util.HashMap;
4 | import java.util.Map;
5 |
6 | import javafx.scene.paint.Color;
7 | import javafx.scene.text.Font;
8 |
9 | /**
10 | * The domain object provides data for footprint column colors.
11 | * Defines specific colors for each footprint lines by column color services.
12 | */
13 | public class NbColumnColorGroup {
14 | public Map fontColorMap = new HashMap<>();
15 |
16 | public static class FontColor {
17 | public final Font bidFont;
18 | public final Color bidColor;
19 | public final Font askFont;
20 | public final Color askColor;
21 |
22 | public FontColor(Font bidFont, Color bidColor, Font askFont, Color askColor) {
23 | this.bidFont = bidFont;
24 | this.bidColor = bidColor;
25 | this.askFont = askFont;
26 | this.askColor = askColor;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/HexagonCallback.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.hexagon;
2 |
3 | public interface HexagonCallback {
4 | void handle(Hexagon hexagon);
5 | }
6 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/IHexagonCreator.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.hexagon;
2 |
3 | import javafx.scene.paint.Color;
4 |
5 | public interface IHexagonCreator {
6 | void createHexagon(int q, int r, Color imagePixelColor, HexagonMap map);
7 | }
8 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/IPathInfoSupplier.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.hexagon;
2 |
3 | public interface IPathInfoSupplier {
4 | int getMovementCost(Hexagon from, Hexagon to);
5 |
6 | boolean isBlockingPath(Hexagon hexagon);
7 | }
8 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Linus Törnkrantz
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/NoHexagonFoundException.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.hexagon;
2 |
3 | /**
4 | * This exception is thrown when trying to retrieve a Hexagon from a position where ther is no Hexagon
5 | */
6 | public class NoHexagonFoundException extends Exception {
7 | private static final long serialVersionUID = -3886480899940588279L;
8 |
9 | public NoHexagonFoundException(String message) {
10 | super(message);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/NoPathFoundException.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.hexagon;
2 |
3 | /**
4 | * This exception is thrown when the pathfinding algorithm cannot find any path to the goal
5 | */
6 | public class NoPathFoundException extends Exception {
7 | private static final long serialVersionUID = 1362775696243612783L;
8 |
9 | public NoPathFoundException(String message) {
10 | super(message);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/ResizableCanvas.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui;
2 |
3 | import javafx.scene.canvas.Canvas;
4 |
5 | /**
6 | * extended default Canvas class to be embeddable and resizable within a StackPane or Region
7 | *
8 | * @author rstein
9 | */
10 | public class ResizableCanvas extends Canvas {
11 | public ResizableCanvas() {
12 | super();
13 | }
14 |
15 | @Override
16 | public boolean isResizable() {
17 | return true;
18 | }
19 |
20 | @Override
21 | public double maxHeight(final double width) {
22 | return Double.MAX_VALUE;
23 | }
24 |
25 | @Override
26 | public double maxWidth(final double height) {
27 | return Double.MAX_VALUE;
28 | }
29 |
30 | @Override
31 | public double minHeight(final double width) {
32 | return 1;
33 | }
34 |
35 | @Override
36 | public double minWidth(final double height) {
37 | return 1;
38 | }
39 |
40 | @Override
41 | public double prefHeight(final double width) {
42 | return getHeight();
43 | }
44 |
45 | @Override
46 | public double prefWidth(final double height) {
47 | return this.getWidth();
48 | }
49 |
50 | @Override
51 | public void resize(final double w, final double h) {
52 | super.resize(w, h);
53 | setWidth(w);
54 | setHeight(h);
55 | // System.err.println("canvas resize to = " + String.format("%fx%f",
56 | // getWidth(), getHeight()));
57 | }
58 | }
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/css/ColorPalette.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui.css;
2 |
3 | import javafx.css.PseudoClass;
4 | import javafx.scene.Node;
5 |
6 | /**
7 | * Built-in color palettes that apply pseudo classes.
8 | *
9 | * @author ennerf
10 | */
11 | public enum ColorPalette {
12 | DEFAULT,
13 | MISC("misc"),
14 | ADOBE("adobe"),
15 | DELL("dell"),
16 | EQUIDISTANT("equidistant"),
17 | TUNEVIEWER("tuneviewer"),
18 | MATLAB_LIGHT("matlab-light"),
19 | MATLAB_DARK("matlab-dark"),
20 | MODENA("modena"),
21 | ATLANTAFX("atlantafx");
22 |
23 | private ColorPalette() {
24 | this.pseudoClass = null;
25 | }
26 |
27 | private ColorPalette(String name) {
28 | this.pseudoClass = PseudoClass.getPseudoClass("palette-" + name);
29 | }
30 |
31 | public PseudoClass getPseudoClass() {
32 | return pseudoClass;
33 | }
34 |
35 | public void applyPseudoClasses(Node node) {
36 | for (var palette : values) {
37 | node.pseudoClassStateChanged(palette.getPseudoClass(), this == palette);
38 | }
39 | }
40 |
41 | private final PseudoClass pseudoClass;
42 | private static final ColorPalette[] values = values();
43 | }
44 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/css/LineStyle.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui.css;
2 |
3 | import javafx.beans.property.LongProperty;
4 | import javafx.beans.property.ReadOnlyLongProperty;
5 | import javafx.beans.property.SimpleLongProperty;
6 | import javafx.scene.shape.Line;
7 |
8 | /**
9 | * @author ennerf
10 | */
11 | public class LineStyle extends Line implements StyleUtil.StyleNode {
12 | public LineStyle(String... styles) {
13 | StyleUtil.styleNode(this, styles);
14 | StyleUtil.forEachStyleProp(this, StyleUtil.incrementOnChange(changeCounter));
15 | }
16 |
17 | @Override
18 | public String toString() {
19 | return StyleUtil.toStyleString(this);
20 | }
21 |
22 | public ReadOnlyLongProperty changeCounterProperty() {
23 | return changeCounter;
24 | }
25 |
26 | private final LongProperty changeCounter = new SimpleLongProperty(0);
27 | }
28 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/css/TextStyle.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui.css;
2 |
3 | import javafx.beans.property.LongProperty;
4 | import javafx.beans.property.ReadOnlyLongProperty;
5 | import javafx.beans.property.SimpleLongProperty;
6 | import javafx.scene.text.Text;
7 |
8 | /**
9 | * @author ennerf
10 | */
11 | public class TextStyle extends Text implements StyleUtil.StyleNode {
12 | public TextStyle(String... styles) {
13 | StyleUtil.styleNode(this, styles);
14 | StyleUtil.forEachStyleProp(this, StyleUtil.incrementOnChange(changeCounter));
15 | }
16 |
17 | protected void incrementChangeCounter() {
18 | changeCounter.set(changeCounter.get() + 1);
19 | }
20 |
21 | @Override
22 | public String toString() {
23 | return StyleUtil.toStyleString(this);
24 | }
25 |
26 | public ReadOnlyLongProperty changeCounterProperty() {
27 | return changeCounter;
28 | }
29 |
30 | private final LongProperty changeCounter = new SimpleLongProperty(0);
31 | }
32 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/geometry/Corner.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui.geometry;
2 |
3 | /**
4 | * Enum for which edge of a rectangle something should be. @see also Side
5 | *
6 | * @author rstein
7 | */
8 | public enum Corner {
9 | /**
10 | * Represents top-left edge of a rectangle.
11 | */
12 | TOP_LEFT,
13 |
14 | /**
15 | * Represents top-right edge of a rectangle.
16 | */
17 | TOP_RIGHT,
18 |
19 | /**
20 | * Represents bottom-left edge of a rectangle.
21 | */
22 | BOTTOM_LEFT,
23 |
24 | /**
25 | * Represents top-right edge of a rectangle.
26 | */
27 | BOTTOM_RIGHT
28 | }
29 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/FastDoubleArrayCache.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.utils;
2 |
3 | import io.fair_acc.math.ArrayUtils;
4 |
5 | /**
6 | * A highly efficient cache for temporary arrays that
7 | * only gets accessed by a single thread.
8 | *
9 | * @author ennerf
10 | */
11 | public class FastDoubleArrayCache {
12 | public FastDoubleArrayCache(int maxArrays) {
13 | cache = new double[maxArrays][];
14 | }
15 |
16 | public void trim() {
17 | for (int i = 0; i < cache.length; i++) {
18 | cache[i] = ArrayUtils.clearIfLarger(cache[i], lastRequestedSize);
19 | }
20 | }
21 |
22 | public double[] getArray(int index, int minSize) {
23 | return cache[index] = ArrayUtils.resizeMin(cache[index], lastRequestedSize = minSize);
24 | }
25 |
26 | int lastRequestedSize;
27 | private final double[][] cache;
28 | }
29 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/NumberFormatter.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.utils;
2 |
3 | public interface NumberFormatter {
4 | int getDecimalPlaces();
5 |
6 | boolean isExponentialForm();
7 |
8 | NumberFormatter setExponentialForm(boolean state);
9 |
10 | NumberFormatter setDecimalPlaces(int precision);
11 |
12 | String toString(double val);
13 | }
14 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/PaletteQuantizer.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.utils;
2 |
3 | public interface PaletteQuantizer {
4 | int[] getColor(int i);
5 |
6 | int getColorCount();
7 |
8 | int getTransparentIndex();
9 |
10 | int lookup(int r, int g, int b);
11 |
12 | int lookup(int r, int g, int b, int a);
13 | }
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/financial/chart-blackberry.css:
--------------------------------------------------------------------------------
1 | .axis-label {
2 | -fx-fill: #f5f5f5;
3 | -fx-axis-label-alignment: center;
4 | }
5 |
6 | .value-watch-indicator-label {
7 | -fx-background-color: transparent;
8 | -fx-border-color: transparent;
9 | -fx-border-radius: 0;
10 | -fx-font-size: 11;
11 | -fx-font-weight: bold;
12 | -fx-text-fill: white;
13 | -fx-text-alignment: center;
14 | -fx-padding: 2 4 1 8;
15 | }
16 |
17 | .value-watch-indicator-line {
18 | -fx-stroke-width: 1;
19 | -fx-stroke: #696969;
20 | -fx-stroke-dash-array: 8;
21 | }
22 |
23 | .value-watch-indicator-marker {
24 | -fx-stroke-width: 0.5;
25 | -fx-stroke: black;
26 | -fx-fill: #ce0614;
27 | }
28 |
29 | .price-value-watch-indicator-marker {
30 | -fx-stroke-width: 0.5;
31 | -fx-stroke: black;
32 | -fx-fill: #3bdacd;
33 | }
34 |
35 | .range-indicator-label {
36 | -fx-background-color: transparent;
37 | -fx-border-color: transparent;
38 | -fx-border-radius: 0;
39 | -fx-font-size: 12;
40 | -fx-font-weight: bold;
41 | -fx-text-fill: white;
42 | -fx-text-alignment: center;
43 | -fx-padding: 1 2 1 2;
44 | }
45 |
46 | .range-indicator-rect {
47 | -fx-stroke: transparent;
48 | -fx-fill: #9c1d1d70;
49 | }
50 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/financial/chart-dark.css:
--------------------------------------------------------------------------------
1 | .axis-label {
2 | -fx-fill: #c2c2c2ff;
3 | -fx-axis-label-alignment: center;
4 | }
5 |
6 | .value-watch-indicator-label {
7 | -fx-background-color: transparent;
8 | -fx-border-color: transparent;
9 | -fx-border-radius: 0;
10 | -fx-font-size: 11;
11 | -fx-font-weight: bold;
12 | -fx-text-fill: white;
13 | -fx-text-alignment: center;
14 | -fx-padding: 2 4 1 8;
15 | }
16 |
17 | .value-watch-indicator-line {
18 | -fx-stroke-width: 1;
19 | -fx-stroke: #a8a8a8;
20 | -fx-stroke-dash-array: 8;
21 | }
22 |
23 | .value-watch-indicator-marker {
24 | -fx-stroke-width: 0.5;
25 | -fx-stroke: black;
26 | -fx-fill: #ce0614;
27 | }
28 |
29 | .price-value-watch-indicator-marker {
30 | -fx-stroke-width: 0.5;
31 | -fx-stroke: black;
32 | -fx-fill: #3bdacd;
33 | }
34 |
35 | .range-indicator-label {
36 | -fx-background-color: transparent;
37 | -fx-border-color: transparent;
38 | -fx-border-radius: 0;
39 | -fx-font-size: 12;
40 | -fx-font-weight: bold;
41 | -fx-text-fill: white;
42 | -fx-text-alignment: center;
43 | -fx-padding: 1 2 1 2;
44 | }
45 |
46 | .range-indicator-rect {
47 | -fx-stroke: transparent;
48 | -fx-fill: #9c1d1d70;
49 | }
50 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/financial/chart.css:
--------------------------------------------------------------------------------
1 | .value-watch-indicator-label {
2 | -fx-background-color: transparent;
3 | -fx-border-color: transparent;
4 | -fx-border-radius: 0;
5 | -fx-font-size: 11;
6 | -fx-font-weight: bold;
7 | -fx-text-fill: white;
8 | -fx-text-alignment: center;
9 | -fx-padding: 2.5 4 1 8;
10 | }
11 |
12 | .value-watch-indicator-line {
13 | -fx-stroke-width: 1;
14 | -fx-stroke: black;
15 | -fx-stroke-dash-array: 8;
16 | }
17 |
18 | .value-watch-indicator-marker {
19 | -fx-stroke-width: 0.5;
20 | -fx-stroke: black;
21 | -fx-fill: #ce0614;
22 | }
23 |
24 | .price-value-watch-indicator-marker {
25 | -fx-stroke-width: 0.5;
26 | -fx-stroke: black;
27 | -fx-fill: #78015b;
28 | }
29 |
30 | .range-indicator-label {
31 | -fx-background-color: transparent;
32 | -fx-border-color: transparent;
33 | -fx-border-radius: 0;
34 | -fx-font-size: 12;
35 | -fx-font-weight: bold;
36 | -fx-text-fill: white;
37 | -fx-text-alignment: center;
38 | -fx-padding: 1 2 1 2;
39 | }
40 |
41 | .range-indicator-rect {
42 | -fx-stroke: transparent;
43 | -fx-fill: #9c1d1d70;
44 | }
45 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.eot
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.ttf
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.woff
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_b.png
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_w.png
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/images/sand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/images/sand.png
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/plugins/editaxis.css:
--------------------------------------------------------------------------------
1 | .root {
2 | -icons-color: rgb(61, 114, 144);
3 | -fx-font-size: 10px;
4 | }
5 |
6 | .glyph-icon {
7 | -fx-text-fill: -icons-color;
8 | -fx-fill: -icons-color;
9 | -glyph-size: 48px;
10 | }
11 |
12 | .glyph-icon:hover {
13 | -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.2), 4, 0, 0, 0);
14 | }
15 |
16 | .bluesky-icon {
17 | -glyph-name: "CLOUD";
18 | -icons-color: blue;
19 | -fx-fill: linear-gradient(-icons-color 0%, derive(-icons-color, 100%) 30%, derive(blueviolet, 30%) 85%);
20 | }
21 |
22 | .axis-editor-view-pane {
23 | -fx-background-color: blue;
24 | }
25 |
26 | .enlargeButton {
27 | -fx-icon: bluesky-icon;
28 | -fx-background-color: red;
29 | -fx-shape: "M1344 800v64q0 14-9 23t-23 9h-832q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h832q14 0 23 9t9 23zm128 448v-832q0-66-47-113t-113-47h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113zm128-832v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z";
30 | }
31 |
32 | .icons:hover {
33 | -fx-effect: dropshadow(three-pass-box, derive(-icons-color, 0%), 0.01em, 0, 0, 0);
34 | }
35 |
--------------------------------------------------------------------------------
/chartfx-chart/src/main/resources/io/fair_acc/chartfx/ui/titled-border.css:
--------------------------------------------------------------------------------
1 | .bordered-titled-title {
2 | -fx-padding: 0 2 0 2;
3 | -fx-font-size: 14px;
4 | -fx-background-color: -fx-background;
5 | -fx-translate-y: -9;
6 | -fx-translate-x: +4;
7 | }
8 |
9 | .bordered-titled-border {
10 | -fx-content-display: top;
11 | -fx-border-insets: 8 5 5 5;
12 | -fx-border-color: black;
13 | -fx-border-width: 1;
14 | }
15 |
16 | .bordered-titled-content {
17 | -fx-padding: 10 5 5 5;
18 | }
19 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/AxisModeTests.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.axes;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertFalse;
4 | import static org.junit.jupiter.api.Assertions.assertTrue;
5 |
6 | import org.junit.jupiter.api.Test;
7 |
8 | /**
9 | * @author rstein
10 | */
11 | public class AxisModeTests {
12 | @Test
13 | public void axisModeTests() {
14 | assertTrue(AxisMode.X.allowsX());
15 | assertFalse(AxisMode.X.allowsY());
16 |
17 | assertFalse(AxisMode.Y.allowsX());
18 | assertTrue(AxisMode.Y.allowsY());
19 |
20 | assertTrue(AxisMode.XY.allowsX());
21 | assertTrue(AxisMode.XY.allowsY());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/marker/DefaultMarkerTests.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.marker;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
4 | import static org.junit.jupiter.api.Assertions.assertEquals;
5 | import static org.junit.jupiter.api.Assertions.assertThrows;
6 |
7 | import javafx.scene.canvas.Canvas;
8 | import javafx.scene.canvas.GraphicsContext;
9 |
10 | import org.junit.jupiter.api.Test;
11 |
12 | /**
13 | * @author rstein
14 | */
15 | public class DefaultMarkerTests {
16 | @Test
17 | public void defaultMarkerTests() {
18 | Canvas canvas = new Canvas();
19 | GraphicsContext gc = canvas.getGraphicsContext2D();
20 |
21 | for (Marker marker : DefaultMarker.values()) {
22 | assertDoesNotThrow(() -> marker.draw(gc, 0, 0, 20));
23 |
24 | assertEquals(marker, DefaultMarker.get(marker.toString()));
25 | }
26 |
27 | assertThrows(IllegalArgumentException.class, () -> DefaultMarker.get(null));
28 | assertThrows(IllegalArgumentException.class, () -> DefaultMarker.get("unknown marker name ObeyDoo"));
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/utils/Interval.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.utils;
2 |
3 | public class Interval {
4 | public T from;
5 | public T to;
6 |
7 | public Interval(T from, T to) {
8 | this.from = from;
9 | this.to = to;
10 | }
11 |
12 | @Override
13 | public int hashCode() {
14 | final int prime = 31;
15 | int result = 1;
16 | result = prime * result + ((from == null) ? 0 : from.hashCode());
17 | result = prime * result + ((to == null) ? 0 : to.hashCode());
18 | return result;
19 | }
20 |
21 | @Override
22 | public boolean equals(Object obj) {
23 | if (this == obj)
24 | return true;
25 | if (obj == null)
26 | return false;
27 | if (getClass() != obj.getClass())
28 | return false;
29 | Interval other = (Interval) obj;
30 | if (from == null) {
31 | if (other.from != null)
32 | return false;
33 | } else if (!from.equals(other.from))
34 | return false;
35 | if (to == null) {
36 | return other.to == null;
37 | } else
38 | return to.equals(other.to);
39 | }
40 |
41 | @Override
42 | public String toString() {
43 | return "Interval [from=" + from + ", to=" + to + "]";
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/utils/Ohlcv.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.renderer.spi.financial.utils;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Iterator;
5 | import java.util.List;
6 |
7 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel;
8 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcv;
9 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcvItem;
10 |
11 | public class Ohlcv implements IOhlcv {
12 | final List items = new ArrayList<>();
13 |
14 | @Override
15 | public IOhlcvItem getOhlcvItem(int index) {
16 | return items.get(index);
17 | }
18 |
19 | public Ohlcv addOhlcvItem(IOhlcvItem ohlcvItem) {
20 | items.add(ohlcvItem);
21 | return this;
22 | }
23 |
24 | // just for unit tests
25 | public List getItems() {
26 | return items;
27 | }
28 |
29 | @Override
30 | public int size() {
31 | return items.size();
32 | }
33 |
34 | public void clear() {
35 | items.clear();
36 | }
37 |
38 | @Override
39 | public AttributeModel getAddon() {
40 | throw new IllegalStateException("Not supported!");
41 | }
42 |
43 | @Override
44 | public AttributeModel getAddonOrCreate() {
45 | throw new IllegalStateException("Not supported!");
46 | }
47 |
48 | @Override
49 | public Iterator iterator() {
50 | return items.iterator();
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/ui/ObservableDequeTest.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertEquals;
4 |
5 | import java.util.ArrayDeque;
6 | import java.util.Arrays;
7 |
8 | import org.junit.jupiter.api.BeforeEach;
9 | import org.junit.jupiter.api.Test;
10 |
11 | /**
12 | * Based on javafx.base/src/test/java/test/javafx/collections/ObservableListTest.java
13 | *
14 | * @author Alexander Krimm
15 | */
16 | class ObservableDequeTest {
17 | private ObservableDeque deque;
18 | private MockListObserver mlo;
19 |
20 | @BeforeEach
21 | public void setUp() throws Exception {
22 | deque = new ObservableDeque<>(new ArrayDeque<>());
23 | mlo = new MockListObserver<>();
24 | deque.addListener(mlo);
25 | deque.add(1);
26 | deque.addAll(1, 3);
27 | mlo.clear();
28 | }
29 |
30 | @Test
31 | public void setupCorrect() {
32 | assertEquals(deque.size(), 3);
33 | assertEquals(deque.get(2), 3);
34 | assertEquals(deque.get(0), 1);
35 | }
36 |
37 | @Test
38 | public void testClear() {
39 | assertEquals(deque.size(), 3);
40 | deque.clear();
41 | mlo.check1AddRemove(deque, Arrays.asList(1, 1, 3), 0, 0);
42 | assertEquals(deque.size(), 0);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/ui/utils/TestFx.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.ui.utils;
2 |
3 | import java.lang.annotation.Documented;
4 | import java.lang.annotation.ElementType;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.RetentionPolicy;
7 | import java.lang.annotation.Target;
8 |
9 | import org.junit.jupiter.api.Tag;
10 | import org.junit.jupiter.api.Test;
11 |
12 | /**
13 | * extension of JUnits @Test annotation to indicate that a particular test should be explicitly executed within the JavaFX thread.
14 | * See also {@link JavaFXInterceptorUtils.SelectiveJavaFxInterceptor }
15 | * @author rstein
16 | *
17 | */
18 | @Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD })
19 | @Retention(RetentionPolicy.RUNTIME)
20 | @Documented
21 | @Test
22 | @Tag("TestWithinJavaFX")
23 | public @interface TestFx {
24 | }
25 |
--------------------------------------------------------------------------------
/chartfx-chart/src/test/java/io/fair_acc/chartfx/utils/SchubfachTest.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.chartfx.utils;
2 |
3 | import static org.junit.jupiter.api.Assertions.*;
4 |
5 | import org.junit.jupiter.api.Test;
6 |
7 | import io.fair_acc.chartfx.utils.Schubfach.DecomposedDouble;
8 |
9 | /**
10 | * @author Florian Enner
11 | * @since 08 Mär 2023
12 | */
13 | class SchubfachTest {
14 | @Test
15 | void testDecomposition() {
16 | // Initial normalized decomp
17 | var one = assertResultEquals(10000000000000000L, 1, Schubfach.decomposeDouble(1.0));
18 | var two = assertResultEquals(20000000000000000L, 1, Schubfach.decomposeDouble(2.0));
19 | var hal = assertResultEquals(50000000000000000L, 0, Schubfach.decomposeDouble(0.5));
20 |
21 | // Shifted to the same exponent
22 | int maxExp = Math.max(one.getExponent(), Math.max(two.getExponent(), hal.getExponent()));
23 | assertResultEquals(10000000000000000L, 1, one.shiftExponentTo(maxExp));
24 | assertResultEquals(20000000000000000L, 1, two.shiftExponentTo(maxExp));
25 | assertResultEquals(5000000000000000L, 1, hal.shiftExponentTo(maxExp));
26 | }
27 |
28 | static DecomposedDouble assertResultEquals(long significand, int exponent, DecomposedDouble value) {
29 | assertEquals(significand, value.getSignificand(), "significand");
30 | assertEquals(exponent, value.getExponent(), "exponent");
31 | return value;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/chartfx-dataset/.gitignore:
--------------------------------------------------------------------------------
1 | /*.hprof
2 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/CategoryHistogram.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset;
2 |
3 | // for library loggers
4 | // import org.slf4j.Logger;
5 | // import org.slf4j.LoggerFactory;
6 |
7 | // for application loggers
8 | // import io.fair_acc.cs.co.ap.common.gui.elements.logger.AppLogger;
9 |
10 | /**
11 | * @deprecated Work in Progress, don't use yet
12 | * @author Alexander Krimm
13 | */
14 | @Deprecated
15 | public interface CategoryHistogram extends Histogram {
16 | /**
17 | * Increment bin with name with by 1. if x is less than the low-edge of the first bin, the Underflow bin is
18 | * incremented if x is equal to or greater than the upper edge of last bin, the Overflow bin is incremented
19 | *
20 | * @param name name to be added
21 | * @return corresponding bin number which has its content incremented by w
22 | */
23 | default int fill(final String name) {
24 | return fill(name, 1.0);
25 | }
26 |
27 | /**
28 | * Increment bin with name with a weight w. if x is less than the low-edge of the first bin, the Underflow bin is
29 | * incremented if x is equal to or greater than the upper edge of last bin, the Overflow bin is incremented
30 | *
31 | * @param name name to be added
32 | * @param w weight for given name
33 | * @return corresponding bin number which has its content incremented by w
34 | */
35 | int fill(final String name, double w);
36 | }
37 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/DataSet3D.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset;
2 |
3 | /**
4 | * A DataSet
extension used to represent 3-dimensional data points.
5 | * This class only contains convenience methods to make
6 | *
7 | * @author gkruk
8 | * @author rstein
9 | */
10 | public interface DataSet3D extends GridDataSet {
11 | /**
12 | * Returns Z coordinate for the specified data point.
13 | * This is a convenience interface not used by chartfx internally.
14 | * Always returns the first non grid coordinate, so for dim > 3 it is not actually Z.
15 | *
16 | * @param xIndex index of X coordinate
17 | * @param yIndex index of Y coordinate
18 | * @return Z coordinate
19 | */
20 | default double getZ(int xIndex, int yIndex) {
21 | return this.get(getNGrid(), xIndex, yIndex);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/DataSetMetaData.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset;
2 |
3 | import java.util.List;
4 | import java.util.Map;
5 |
6 | /**
7 | * Interface for defining common measurement meta data tags
8 | *
9 | * @author rstein
10 | */
11 | public interface DataSetMetaData {
12 | String TAG_OVERSHOOT = "over-range";
13 | String TAG_UNDERSHOOT = "under-range";
14 | String TAG_GAIN_RANGE = "gain-range";
15 |
16 | List getErrorList();
17 |
18 | List getInfoList();
19 |
20 | Map getMetaInfo();
21 |
22 | List getWarningList();
23 | }
24 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/EditableDataSet.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset;
2 |
3 | /**
4 | * @author rstein
5 | */
6 | public interface EditableDataSet extends DataSet {
7 | /**
8 | * add point to the data set
9 | *
10 | * @param index data point index at which the new data point should be added
11 | * @param newValue new data point coordinate
12 | * @return itself (fluent design)
13 | */
14 | EditableDataSet add(final int index, final double... newValue);
15 |
16 | /**
17 | *
18 | * @return edit constraints for data set
19 | */
20 | EditConstraints getEditConstraints();
21 |
22 | /**
23 | * remove point from data set
24 | *
25 | * @param index data point which should be removed
26 | * @return itself (fluent design)
27 | */
28 | EditableDataSet remove(final int index);
29 |
30 | /**
31 | * modify point in the the data set
32 | *
33 | * @param index data point index at which the new data point should be added
34 | * @param newValue new data point coordinate
35 | * @return itself (fluent design)
36 | */
37 | EditableDataSet set(final int index, final double... newValue);
38 |
39 | /**
40 | *
41 | * @param constraints new edit constraints
42 | * @return itself (fluent design)
43 | */
44 | EditableDataSet setEditConstraints(final EditConstraints constraints);
45 |
46 | /**
47 | * @param name the new data set name
48 | * @return itself (fluent design)
49 | */
50 | EditableDataSet setName(final String name);
51 | }
52 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/events/EventProcessor.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.events;
2 |
3 | public interface EventProcessor {
4 | void addAction(BitState obj, Runnable action);
5 | }
6 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/events/StateListener.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.events;
2 |
3 | /**
4 | * @author ennerf
5 | */
6 | @FunctionalInterface
7 | public interface StateListener {
8 | /**
9 | * @param source where the update came from
10 | * @param bits changed or set bits
11 | */
12 | void accept(BitState source, int bits);
13 |
14 | // Compatible with InvalidationListener, but no JavaFX dependency
15 | @FunctionalInterface
16 | public interface OnInvalidateSetter {
17 | public void set(Object observable);
18 | }
19 |
20 | @FunctionalInterface
21 | public interface OnChangeSetter {
22 | public void set(Object observable, Object oldValue, Object newValue);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/AbstractStylable.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi;
2 |
3 | import io.fair_acc.dataset.DataSet;
4 |
5 | /**
6 | * Class to define CSS-based style features N.B. needed for DataSet and rendering styling
7 | *
8 | * @author rstein
9 | *
10 | * @param java generics handling of DataSet for derived classes (needed for fluent design)
11 | */
12 | public abstract class AbstractStylable implements DataSet {
13 | private static final long serialVersionUID = 1L;
14 | private String style = "";
15 |
16 | AbstractStylable() {
17 | super();
18 | }
19 |
20 | /**
21 | * A string representation of the CSS style associated with this specific {@code Node}. This is analogous to the
22 | * "style" attribute of an HTML element. Note that, like the HTML style attribute, this variable contains style
23 | * properties and values and not the selector portion of a style rule.
24 | */
25 | @Override
26 | public String getStyle() {
27 | return style;
28 | }
29 |
30 | @SuppressWarnings("unchecked")
31 | protected D getThis() {
32 | return (D) this;
33 | }
34 |
35 | @Override
36 | public D setStyle(final String style) {
37 | this.style = style;
38 | return getThis();
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/fastutil/ArrayUtil.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.fastutil;
2 |
3 | /**
4 | * Utilities for shading fastutil lists.
5 | */
6 | class ArrayUtil {
7 | /**
8 | * Ensures that a range given by its first (inclusive) and last (exclusive) elements fits an array of given length.
9 | *
10 | * This method may be used whenever an array range check is needed.
11 | *
12 | * @param arrayLength an array length.
13 | * @param from a start index (inclusive).
14 | * @param to an end index (inclusive).
15 | * @throws IllegalArgumentException if {@code from} is greater than {@code to}.
16 | * @throws ArrayIndexOutOfBoundsException if {@code from} or {@code to} are greater than {@code arrayLength} or negative.
17 | */
18 | public static void ensureFromTo(final int arrayLength, final int from, final int to) {
19 | if (from < 0)
20 | throw new ArrayIndexOutOfBoundsException("Start index (" + from + ") is negative");
21 | if (from > to)
22 | throw new IllegalArgumentException("Start index (" + from + ") is greater than end index (" + to + ")");
23 | if (to > arrayLength)
24 | throw new ArrayIndexOutOfBoundsException("End index (" + to + ") is greater than array length (" + arrayLength + ")");
25 | }
26 |
27 | public static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
28 | }
29 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/attrs/AttributeKey.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.attrs;
2 |
3 | public class AttributeKey extends TypeKey {
4 | protected AttributeKey(Class type, String name) {
5 | super(type, name);
6 | }
7 |
8 | public static AttributeKey create(Class type, String name) {
9 | return new AttributeKey(type, name);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/attrs/AttributeModelAware.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.attrs;
2 |
3 | /**
4 | * Provides access to Domain Objects Extensions
5 | * Common dynamic extension of API to transmit additional (addon) data.
6 | */
7 | public interface AttributeModelAware {
8 | /**
9 | * @return OHLCV addon. If not available, null is return.
10 | */
11 | AttributeModel getAddon();
12 |
13 | /**
14 | * @return OHLCV Item addon. If not available, create it.
15 | */
16 | AttributeModel getAddonOrCreate();
17 | }
18 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/attrs/TypeKey.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.attrs;
2 |
3 | public abstract class TypeKey implements Comparable> {
4 | private final Class type;
5 | private final String name;
6 |
7 | protected TypeKey(Class type, String name) {
8 | this.type = type;
9 | this.name = name;
10 | }
11 |
12 | public Class getType() {
13 | return type;
14 | }
15 |
16 | public String getName() {
17 | return name;
18 | }
19 |
20 | @Override
21 | public boolean equals(Object obj) {
22 | if (obj == this) {
23 | return true;
24 | }
25 | if (!(obj instanceof TypeKey>) ) {
26 | return false;
27 | }
28 | TypeKey> other = (TypeKey>) obj;
29 | /* equality is defined only by name */
30 | return getName().equals(other.getName());
31 | }
32 |
33 | @Override
34 | public int hashCode() {
35 | int _hashCode = 17;
36 | _hashCode += getName().hashCode();
37 | return _hashCode;
38 | }
39 |
40 | @Override
41 | public String toString() {
42 | return getName();
43 | }
44 |
45 | @Override
46 | public int compareTo(TypeKey typeKey) {
47 | return this.toString().compareTo(typeKey.toString());
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/ohlcv/IOhlcv.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.ohlcv;
2 |
3 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel;
4 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModelAware;
5 |
6 | /**
7 | * Domain Object implements this API for providing of OHLCV information data.
8 | */
9 | public interface IOhlcv extends Iterable, AttributeModelAware {
10 | /**
11 | * @param index index of the ohlcv item
12 | * @return provides ohlcv item
13 | */
14 | IOhlcvItem getOhlcvItem(int index);
15 |
16 | /**
17 | * @return count of actual available items
18 | */
19 | int size();
20 |
21 | /**
22 | * @return OHLCV addon. If not available, null is return.
23 | */
24 | AttributeModel getAddon();
25 |
26 | /**
27 | * @return OHLCV Item addon. If not available, create it.
28 | */
29 | AttributeModel getAddonOrCreate();
30 | }
31 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/ohlcv/IOhlcvItem.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.ohlcv;
2 |
3 | import java.util.Date;
4 |
5 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel;
6 |
7 | /**
8 | * OHLCV Item data. Basic API Domain object for standard visualization processing.
9 | */
10 | public interface IOhlcvItem {
11 | /**
12 | * @return get timestamp of this ohlcv item
13 | */
14 | Date getTimeStamp();
15 |
16 | /**
17 | * @return get instrument open value
18 | */
19 | double getOpen();
20 |
21 | /**
22 | * @return get instrument high value
23 | */
24 | double getHigh();
25 |
26 | /**
27 | * @return get instrument low value
28 | */
29 | double getLow();
30 |
31 | /**
32 | * @return get instrument close value
33 | */
34 | double getClose();
35 |
36 | /**
37 | * @return get instrument volume information (Up/Down Tick together)
38 | */
39 | double getVolume();
40 |
41 | /**
42 | * @return get instrument OI (Open interest)
43 | */
44 | double getOpenInterest();
45 |
46 | /**
47 | * @return OHLCV Item addon. If not available, null is return.
48 | */
49 | AttributeModel getAddon();
50 |
51 | /**
52 | * @return OHLCV Item addon. If not available, create it.
53 | */
54 | AttributeModel getAddonOrCreate();
55 | }
56 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/ohlcv/IOhlcvItemAware.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.ohlcv;
2 |
3 | /**
4 | * Provides access to addons and extensions for OHLCV based datasets.
5 | */
6 | public interface IOhlcvItemAware {
7 | /**
8 | * Provides OHLCV domain object with extensions
9 | * @param index to the dataset/domain structure
10 | * @return the filled ohlcv item
11 | */
12 | IOhlcvItem getItem(int index);
13 |
14 | /**
15 | * Provides the last available item in the OHLC/V structure
16 | * @return the last filled ohlcv item
17 | */
18 | IOhlcvItem getLastItem();
19 | }
20 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/utils/DoublePoint.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.utils;
2 |
3 | /**
4 | * @author rstein
5 | */
6 | public class DoublePoint extends Tuple {
7 | /**
8 | * default constructor (zero coordinates)
9 | */
10 | public DoublePoint() {
11 | super(0.0, 0.0);
12 | }
13 |
14 | /**
15 | * @param x coordinate
16 | * @param y coordinate
17 | */
18 | public DoublePoint(final Double x, final Double y) {
19 | super(x, y);
20 | }
21 |
22 | /**
23 | * @return the x coordinate
24 | */
25 | public Double getX() {
26 | return x;
27 | }
28 |
29 | /**
30 | * @return the y coordinate
31 | */
32 | public Double getY() {
33 | return y;
34 | }
35 |
36 | /**
37 | * @param newX the x coordinate to set
38 | * @param newY the Y coordinate to set
39 | */
40 | public void set(final double newX, final double newY) {
41 | x = newX;
42 | y = newY;
43 | }
44 |
45 | @Override
46 | public String toString() {
47 | return "DoublePoint [" + x + ", " + y + "]";
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/utils/Tuple.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.utils;
2 |
3 | /**
4 | * @author rstein
5 | * @param the x coordinate (usually a Number but may be also a String etc.)
6 | * @param the y coordinate (usually a Number but may be also a String etc.)
7 | */
8 | public class Tuple {
9 | protected transient X x;
10 | protected transient Y y;
11 |
12 | /**
13 | *
14 | * @param x the x coordinate (usually a Number but may be also a String etc.)
15 | * @param y the y coordinate (usually a Number but may be also a String etc.)
16 | */
17 | public Tuple(final X x, final Y y) {
18 | this.x = x;
19 | this.y = y;
20 | }
21 |
22 | /**
23 | *
24 | * @return the x coordinate
25 | */
26 | public X getXValue() {
27 | return x;
28 | }
29 |
30 | /**
31 | *
32 | * @return the y coordinate
33 | */
34 | public Y getYValue() {
35 | return y;
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "Tuple [" + this.x + ", " + this.y + "]";
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/TestDataSet.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.testdata;
2 |
3 | import io.fair_acc.dataset.DataSet2D;
4 |
5 | /**
6 | * Standard interface for test data set
7 | *
8 | * @author rstein
9 | * @param generics for fluent design
10 | */
11 | public interface TestDataSet> extends DataSet2D {
12 | /**
13 | * generate test data set
14 | *
15 | * @param count number of bins
16 | * @return the generated array
17 | */
18 | double[] generateX(final int count);
19 |
20 | /**
21 | * generate test data set
22 | *
23 | * @param count number of bins
24 | * @return the generated array
25 | */
26 | double[] generateY(final int count);
27 |
28 | /**
29 | * generate a new set of numbers
30 | *
31 | * @return itself (fluent design)
32 | */
33 | D update();
34 | }
35 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/RandomStepFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.testdata.spi;
2 |
3 | import java.util.SplittableRandom;
4 |
5 | /**
6 | * abstract error data set for graphical testing purposes this implementation generates a random step function
7 | *
8 | * @author rstein
9 | */
10 | public class RandomStepFunction extends AbstractTestFunction {
11 | private static final long serialVersionUID = -5338037806123143152L;
12 | protected static SplittableRandom rnd = new SplittableRandom(System.currentTimeMillis());
13 |
14 | /**
15 | *
16 | * @param name data set name
17 | * @param count number of samples
18 | */
19 | public RandomStepFunction(final String name, final int count) {
20 | super(name, count);
21 | }
22 |
23 | @Override
24 | public double[] generateY(final int count) {
25 | final double[] retVal = new double[count];
26 | final long step = RandomStepFunction.rnd.nextInt(count);
27 | for (int i = 0; i < count; i++) {
28 | retVal[i] = i < step ? 0.0 : 1.0;
29 | }
30 | return retVal;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/RandomWalkFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.testdata.spi;
2 |
3 | /**
4 | * abstract error data set for graphical testing purposes this implementation generates a random walk (Brownian noise)
5 | * function.
6 | *
7 | * @author rstein
8 | */
9 | public class RandomWalkFunction extends AbstractTestFunction {
10 | private static final long serialVersionUID = 5274313670852663800L;
11 |
12 | /**
13 | *
14 | * @param name data set name
15 | * @param count number of samples
16 | */
17 | public RandomWalkFunction(final String name, final int count) {
18 | super(name, count);
19 | }
20 |
21 | @Override
22 | public double[] generateY(final int count) {
23 | return RandomDataGenerator.generateDoubleArray(0, 0.01, count);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/SincFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.testdata.spi;
2 |
3 | /**
4 | * abstract error data set for graphical testing purposes this implementation generates a sinc function
5 | *
6 | * @author rstein
7 | */
8 | public class SincFunction extends AbstractTestFunction {
9 | private static final long serialVersionUID = 8401471155758562066L;
10 |
11 | /**
12 | *
13 | * @param name data set name
14 | * @param count number of samples
15 | */
16 | public SincFunction(final String name, final int count) {
17 | super(name, count);
18 | }
19 |
20 | @Override
21 | public double[] generateY(final int count) {
22 | final double[] retVal = new double[count];
23 | for (int i = 0; i < count; i++) {
24 | final double x = i / (0.05 * count);
25 |
26 | if (x == 0) {
27 | retVal[i] = 1.0;
28 | } else {
29 | retVal[i] = Math.sin(x) / x;
30 | }
31 | }
32 | return retVal;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/SingleOutlierFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.testdata.spi;
2 |
3 | import java.util.SplittableRandom;
4 |
5 | /**
6 | * abstract error data set for graphical testing purposes this implementation generates a function with a single random
7 | * outlier
8 | *
9 | * @author rstein
10 | */
11 | public class SingleOutlierFunction extends AbstractTestFunction {
12 | private static final long serialVersionUID = -7456808511068971349L;
13 | protected static SplittableRandom rnd = new SplittableRandom(System.currentTimeMillis());
14 |
15 | /**
16 | *
17 | * @param name data set name
18 | * @param count number of samples
19 | */
20 | public SingleOutlierFunction(final String name, final int count) {
21 | super(name, count);
22 | }
23 |
24 | @Override
25 | public double[] generateY(final int count) {
26 | final long step = SingleOutlierFunction.rnd.nextInt(count);
27 | final double[] retVal = new double[count];
28 | for (int i = 0; i < count; i++) {
29 | retVal[i] = i == step ? 1.0 : 0.0;
30 | }
31 | return retVal;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/TriangleFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.testdata.spi;
2 |
3 | /**
4 | * abstract error data set for graphical testing purposes this implementation generates a triangular function
5 | *
6 | * @author Alexander Krimm
7 | */
8 | public class TriangleFunction extends AbstractTestFunction {
9 | private static final long serialVersionUID = -3391027911729531271L;
10 | private double offset;
11 |
12 | /**
13 | * Creates a triangular function which rises from zero to one and back.
14 | *
15 | * @param name data set name
16 | * @param count number of samples
17 | */
18 | public TriangleFunction(final String name, final int count) {
19 | super(name, count);
20 | }
21 |
22 | /**
23 | * Creates a triangular function which rises from offset to offset+1 and back.
24 | *
25 | * @param name data set name
26 | * @param count number of samples
27 | * @param offset offset to zero
28 | */
29 | public TriangleFunction(final String name, final int count, double offset) {
30 | super(name, count);
31 | this.offset = offset;
32 | update();
33 | }
34 |
35 | @Override
36 | public double[] generateY(final int count) {
37 | final double[] retVal = new double[count];
38 | for (int i = 0; i < (count + 1) / 2; i++) {
39 | retVal[i] = offset + ((double) (i * 2)) / count;
40 | retVal[count - 1 - i] = retVal[i];
41 | }
42 | return retVal;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/CachedDaemonThreadFactory.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.utils;
2 |
3 | import java.util.concurrent.ExecutorService;
4 | import java.util.concurrent.Executors;
5 | import java.util.concurrent.ThreadFactory;
6 | import java.util.concurrent.atomic.AtomicInteger;
7 |
8 | public final class CachedDaemonThreadFactory implements ThreadFactory {
9 | private static final int MAX_THREADS = Math.max(4, Runtime.getRuntime().availableProcessors());
10 | private static final ThreadFactory DEFAULT_FACTORY = Executors.defaultThreadFactory();
11 | private static final CachedDaemonThreadFactory SELF = new CachedDaemonThreadFactory();
12 | private static final ExecutorService COMMON_POOL = Executors.newFixedThreadPool(2 * MAX_THREADS, SELF);
13 | private static final AtomicInteger THREAD_COUNTER = new AtomicInteger();
14 |
15 | private CachedDaemonThreadFactory() {
16 | // helper class
17 | }
18 |
19 | @Override
20 | public Thread newThread(Runnable r) {
21 | Thread thread = DEFAULT_FACTORY.newThread(r);
22 | THREAD_COUNTER.incrementAndGet();
23 | thread.setName("daemonised_chartfx_thread_#" + THREAD_COUNTER.intValue());
24 | thread.setDaemon(true);
25 | return thread;
26 | }
27 |
28 | public static ExecutorService getCommonPool() {
29 | return COMMON_POOL;
30 | }
31 |
32 | public static CachedDaemonThreadFactory getInstance() {
33 | return SELF;
34 | }
35 |
36 | public static int getNumbersOfThreads() {
37 | return MAX_THREADS;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/IndexedStringConsumer.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.utils;
2 |
3 | /**
4 | * @author ennerf
5 | */
6 | @FunctionalInterface
7 | public interface IndexedStringConsumer {
8 | void accept(int index, String string);
9 | }
10 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/LimitedQueue.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.utils;
2 |
3 | import java.util.LinkedList;
4 |
5 | /**
6 | * @author rstein
7 | * @param generic list element type
8 | */
9 | public class LimitedQueue extends LinkedList {
10 | private static final long serialVersionUID = 7158175707385120597L;
11 | private int limit;
12 |
13 | /**
14 | *
15 | * @param limit length of queue in terms of number of elements
16 | */
17 | public LimitedQueue(final int limit) {
18 | if (limit < 1) {
19 | throw new IllegalArgumentException("limit = '" + limit + "'must be >=1 ");
20 | }
21 | this.limit = limit;
22 | }
23 |
24 | @Override
25 | public boolean add(final E o) {
26 | final boolean added = super.add(o);
27 | while (added && size() > limit) {
28 | super.remove();
29 | }
30 | return added;
31 | }
32 |
33 | /**
34 | *
35 | * @return length of queue in terms of number of elements
36 | */
37 | public int getLimit() {
38 | return limit;
39 | }
40 |
41 | /**
42 | *
43 | * @param newLimit length of queue in terms of number of elements
44 | * @return newly set limit (if valid)
45 | */
46 | public int setLimit(final int newLimit) {
47 | if (newLimit < 1) {
48 | throw new IllegalArgumentException("limit = '" + limit + "'must be >=1 ");
49 | }
50 | limit = newLimit;
51 | return limit;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/NoDuplicatesList.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.utils;
2 |
3 | import java.util.Collection;
4 | import java.util.LinkedList;
5 |
6 | /**
7 | * @author unknown
8 | * @param generics
9 | */
10 | public class NoDuplicatesList extends LinkedList {
11 | private static final long serialVersionUID = -8547667608571765668L;
12 |
13 | @Override
14 | public boolean add(E e) {
15 | if (this.contains(e)) {
16 | return false;
17 | }
18 | return super.add(e);
19 | }
20 |
21 | @Override
22 | public void add(int index, E element) {
23 | if (this.contains(element)) {
24 | return;
25 | }
26 | super.add(index, element);
27 | }
28 |
29 | @Override
30 | public boolean addAll(Collection extends E> collection) {
31 | Collection copy = new LinkedList<>(collection);
32 | copy.removeAll(this);
33 | return super.addAll(copy);
34 | }
35 |
36 | @Override
37 | public boolean addAll(int index, Collection extends E> collection) {
38 | Collection copy = new LinkedList<>(collection);
39 | copy.removeAll(this);
40 | return super.addAll(index, copy);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/trees/IndexedNavigableSet.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.utils.trees;
2 |
3 | import java.util.NavigableSet;
4 |
5 | /**
6 | * User: Vitaly Sazanovich Date: 08/02/13 Time: 09:56 Email: Vitaly.Sazanovich@gmail.com
7 | *
8 | * @param generics reference
9 | */
10 | public interface IndexedNavigableSet extends NavigableSet {
11 | /**
12 | * Returns the entry located at the index offset from the beginning of the sorted set
13 | *
14 | * @param index index of the entry
15 | * @return the entry located at the index (@code index) offset from the beginning of the sorted set
16 | * @throws ArrayIndexOutOfBoundsException if the specified index is less than 0 or greater than size-1
17 | */
18 | E get(int index);
19 |
20 | /**
21 | * Searches the specified tree map for the specified entry using the put algorithm. Calculates its offset from the
22 | * beginning of the sorted map using weights.
23 | *
24 | * @param e the entry
25 | * @return index of the searched entry, if it is contained in the tree map; otherwise a NullPointerException is
26 | * thrown
27 | * @throws NullPointerException if the specified entry is null or does not exist
28 | */
29 | int getIndex(E e);
30 | }
31 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/test/java/io/fair_acc/dataset/event/TestEventSource.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.event;
2 |
3 | import io.fair_acc.dataset.events.BitState;
4 | import io.fair_acc.dataset.events.EventSource;
5 |
6 | /**
7 | * Default event source for testing
8 | * @author rstein
9 | */
10 | public class TestEventSource implements EventSource {
11 | protected BitState state = BitState.initDirty(this);
12 |
13 | @Override
14 | public BitState getBitState() {
15 | return state;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/api/attrs/AttributeKeyTest.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.attrs;
2 |
3 | import static org.junit.jupiter.api.Assertions.*;
4 |
5 | import java.util.Set;
6 |
7 | import org.junit.jupiter.api.Test;
8 |
9 | public class AttributeKeyTest {
10 | // normal attribute
11 | public static final AttributeKey TEST_ATTR = AttributeKey.create(String.class, "TEST_ATTR");
12 |
13 | // attribute with generics
14 | @SuppressWarnings({ "unchecked", "rawtypes" })
15 | public static final AttributeKey> TEST_COUNTER_LISTENERS = AttributeKey.create((Class>) (Class) Set.class, "TEST_COUNTER_LISTENERS");
16 |
17 | @Test
18 | public void create() {
19 | assertEquals("TEST_COUNTER_LISTENERS", TEST_COUNTER_LISTENERS.getName());
20 | assertEquals(Set.class, TEST_COUNTER_LISTENERS.getType());
21 |
22 | assertEquals("TEST_ATTR", TEST_ATTR.getName());
23 | assertEquals(String.class, TEST_ATTR.getType());
24 | }
25 | }
--------------------------------------------------------------------------------
/chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/api/attrs/TypeKeyTest.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.api.attrs;
2 |
3 | import static org.junit.jupiter.api.Assertions.*;
4 |
5 | import org.junit.jupiter.api.Test;
6 |
7 | class TypeKeyTest {
8 | public static final AttributeKey TEST_ATTR = AttributeKey.create(String.class, "TEST_ATTR");
9 |
10 | public static final AttributeKey TEST_ATTR_SAME = AttributeKey.create(String.class, "TEST_ATTR");
11 |
12 | @Test
13 | void testTypeKey() {
14 | assertEquals(String.class, TEST_ATTR.getType());
15 | }
16 |
17 | @Test
18 | void getName() {
19 | assertEquals("TEST_ATTR", TEST_ATTR.getName());
20 | }
21 |
22 | @Test
23 | void testEquals() {
24 | assertEquals(TEST_ATTR, TEST_ATTR_SAME);
25 | }
26 |
27 | @Test
28 | void testHashCode() {
29 | assertNotEquals(0, TEST_ATTR.hashCode());
30 | }
31 |
32 | @Test
33 | void testToString() {
34 | assertNotNull(TEST_ATTR.toString());
35 | }
36 |
37 | @Test
38 | void compareTo() {
39 | assertEquals(0, TEST_ATTR.compareTo(TEST_ATTR_SAME));
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/utils/FinancialTestUtils.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.utils;
2 |
3 | import java.time.LocalDate;
4 | import java.time.ZoneId;
5 | import java.util.Date;
6 |
7 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcv;
8 |
9 | public class FinancialTestUtils {
10 | public static IOhlcv createTestOhlcv() {
11 | LocalDate date = LocalDate.parse("2020-11-19");
12 | return new Ohlcv()
13 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 3001.0, 3005.0, 3000.10, 3002.84, 15001.0, 18007.0))
14 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 3002.0, 3007.0, 3001.35, 3005.64, 16005.0, 19002.0))
15 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 3003.0, 3009.15, 3002.50, 3008.75, 14004.0, 20005.0))
16 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 2999.0, 3000.75, 2997.15, 2998.10, 100085.0, 35001.0))
17 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 2996.0, 2998.0, 2994.10, 2993.50, 135001.0, 64010.0));
18 | }
19 |
20 | public static Date toDate(LocalDate ldate) {
21 | return Date.from(ldate.atStartOfDay(ZoneId.systemDefault()).toInstant());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/utils/Ohlcv.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.dataset.spi.financial.utils;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Iterator;
5 | import java.util.List;
6 |
7 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel;
8 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcv;
9 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcvItem;
10 |
11 | public class Ohlcv implements IOhlcv {
12 | final List items = new ArrayList<>();
13 |
14 | @Override
15 | public IOhlcvItem getOhlcvItem(int index) {
16 | return items.get(index);
17 | }
18 |
19 | public Ohlcv addOhlcvItem(IOhlcvItem ohlcvItem) {
20 | items.add(ohlcvItem);
21 | return this;
22 | }
23 |
24 | // just for unit tests
25 | public List getItems() {
26 | return items;
27 | }
28 |
29 | @Override
30 | public int size() {
31 | return items.size();
32 | }
33 |
34 | public void clear() {
35 | items.clear();
36 | }
37 |
38 | @Override
39 | public AttributeModel getAddon() {
40 | throw new IllegalStateException("Not supported!");
41 | }
42 |
43 | @Override
44 | public AttributeModel getAddonOrCreate() {
45 | throw new IllegalStateException("Not supported!");
46 | }
47 |
48 | @Override
49 | public Iterator iterator() {
50 | return items.iterator();
51 | }
52 | }
--------------------------------------------------------------------------------
/chartfx-dataset/src/test/resources/junit-platform.properties:
--------------------------------------------------------------------------------
1 | junit.jupiter.execution.parallel.enabled=false
2 | junit.jupiter.execution.parallel.mode.default = same_thread
3 | junit.jupiter.execution.parallel.mode.classes.default = concurrent
4 | junit.jupiter.execution.parallel.config.strategy=dynamic
--------------------------------------------------------------------------------
/chartfx-math/.pmd:
--------------------------------------------------------------------------------
1 |
2 |
3 | Aggregate:Java Main Sources:Java Test Sources:
4 | true
5 | pmd_rules.xml
6 | false
7 | false
8 | true
9 |
10 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/MathBasePrecise.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math;
2 |
3 | /**
4 | * Provide access to basic math routines with improved/guaranteed precision.
5 | * // TODO: implement e.g. using apache commons math's PreciseMath
6 | *
7 | * @author akrimm
8 | * @deprecated not implemented yet
9 | */
10 | @Deprecated
11 | public class MathBasePrecise extends MathBase {
12 | private MathBasePrecise() {
13 | // static helper class
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/TRandom3.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math;
2 |
3 | public class TRandom3 extends TRandom {
4 | public TRandom3(int seed) {
5 | super(seed);
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/filter/FilterType.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.filter;
2 |
3 | public enum FilterType {
4 | LOW_PASS,
5 | HIGH_PASS
6 | }
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/filter/iir/DirectFormAbstract.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one or more
3 | * contributor license agreements. See the NOTICE file distributed with
4 | * this work for additional information regarding copyright ownership.
5 | * The ASF licenses this file to You under the Apache License, Version 2.0
6 | * (the "License"); you may not use this file except in compliance with
7 | * the License. You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | *
17 | * Copyright (c) 2009 by Vinnie Falco
18 | * Copyright (c) 2016 by Bernd Porr
19 | * Copyright (c) 2019 by Ralph J. Steinhagen
20 | */
21 |
22 | package io.fair_acc.math.filter.iir;
23 |
24 | /**
25 | * Abstract form of the a filter which can have different state variables Direct form I or II is derived from it
26 | */
27 | public abstract class DirectFormAbstract {
28 | public static final int DIRECT_FORM_I = 0;
29 |
30 | public static final int DIRECT_FORM_II = 1;
31 |
32 | public DirectFormAbstract() {
33 | reset();
34 | }
35 |
36 | public abstract double process1(double in, Biquad s);
37 |
38 | public abstract void reset();
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/BetaDistributionFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import io.fair_acc.math.Math;
4 |
5 | public class BetaDistributionFunction extends AbstractFunction1D implements Function1D {
6 | /**
7 | * initialise the Beta distribution function parameter order: parameter[0] = p (default: 5.0) parameter[1] = q
8 | * (default: 1.0)
9 | *
10 | * @param name function name
11 | */
12 | public BetaDistributionFunction(final String name) {
13 | this(name, null);
14 | }
15 |
16 | /**
17 | * initialise the Beta distribution function parameter order: parameter[0] = p (default: 5.0) parameter[1] = q
18 | * (default: 1.0)
19 | *
20 | * @param name function name
21 | * @param parameter 0:p 1:q
22 | */
23 | public BetaDistributionFunction(final String name, final double[] parameter) {
24 | super(name, new double[2]);
25 | setParameterName(0, "p");
26 | setParameterValue(0, 5.0);
27 | setParameterName(1, "q");
28 | setParameterValue(1, 1.0);
29 |
30 | if (parameter == null) {
31 | return;
32 | }
33 |
34 | for (int i = 0; i < Math.min(parameter.length, 2); i++) {
35 | setParameterValue(i, parameter[i]);
36 | }
37 | }
38 |
39 | @Override
40 | public double getValue(final double x) {
41 | return Math.betaDist(x, fparameter[0], fparameter[1]);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/BetaFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import io.fair_acc.math.Math;
4 |
5 | public class BetaFunction extends AbstractFunction1D implements Function1D {
6 | /**
7 | * initialise (Euler's) Beta function parameter order: parameter[0] = par (default: 1.0)
8 | *
9 | * @param name function name
10 | */
11 | public BetaFunction(final String name) {
12 | this(name, null);
13 | }
14 |
15 | /**
16 | * initialise (Euler's) Beta function parameter order: parameter[0] = par (default: 1.0)
17 | *
18 | * @param name function name
19 | * @param parameter 0:par
20 | */
21 | public BetaFunction(final String name, final double[] parameter) {
22 | super(name, new double[1]);
23 | setParameterName(0, "par");
24 | setParameterValue(0, 1);
25 |
26 | if (parameter == null) {
27 | return;
28 | }
29 |
30 | for (int i = 0; i < Math.min(parameter.length, 1); i++) {
31 | setParameterValue(i, parameter[i]);
32 | }
33 | }
34 |
35 | @Override
36 | public double getValue(final double x) {
37 | return Math.beta(x, fparameter[0]);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/BreitWignerFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import io.fair_acc.math.Math;
4 |
5 | public class BreitWignerFunction extends AbstractFunction1D implements Function1D {
6 | /**
7 | * initialise the Breit-Wigner distribution function parameter order: parameter[0] = mean (default: 0.0)
8 | * parameter[1] = gamma (default: 1.0)
9 | *
10 | * @param name function name
11 | */
12 | public BreitWignerFunction(final String name) {
13 | this(name, null);
14 | }
15 |
16 | /**
17 | * initialise the Breit-Wigner distribution function parameter order: parameter[0] = mean (default: 0.0)
18 | * parameter[1] = gamma (default: 1.0)
19 | *
20 | * @param name function name
21 | * @param parameter parameter of function 0: mean: 1: gamma
22 | */
23 | public BreitWignerFunction(final String name, final double[] parameter) {
24 | super(name, new double[2]);
25 | setParameterName(0, "mean");
26 | setParameterValue(0, 0);
27 | setParameterName(1, "gamma");
28 | setParameterValue(1, 1.0);
29 |
30 | if (parameter == null) {
31 | return;
32 | }
33 |
34 | for (int i = 0; i < Math.min(parameter.length, 2); i++) {
35 | setParameterValue(i, parameter[i]);
36 | }
37 | }
38 |
39 | @Override
40 | public double getValue(final double x) {
41 | return Math.breitWigner(x, fparameter[0], fparameter[1]);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/CauchyLorentzFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import io.fair_acc.math.Math;
4 |
5 | public class CauchyLorentzFunction extends AbstractFunction1D implements Function1D {
6 | /**
7 | * initialise the Cauchy-Lorentz distribution function parameter order: parameter[0] = location (default: 0.0)
8 | * parameter[1] = scale (default: 1.0)
9 | *
10 | * @param name function name
11 | */
12 | public CauchyLorentzFunction(final String name) {
13 | this(name, null);
14 | }
15 |
16 | /**
17 | * initialise the Cauchy-Lorentz distribution function parameter order: parameter[0] = location (default: 0.0)
18 | * parameter[1] = scale (default: 1.0)
19 | *
20 | * @param name function name
21 | * @param parameter parameter
22 | */
23 | public CauchyLorentzFunction(final String name, final double[] parameter) {
24 | super(name, new double[2]);
25 | setParameterName(0, "location");
26 | setParameterValue(0, 0);
27 | setParameterName(1, "scale");
28 | setParameterValue(1, 1.0);
29 |
30 | if (parameter == null) {
31 | return;
32 | }
33 |
34 | for (int i = 0; i < Math.min(parameter.length, 2); i++) {
35 | setParameterValue(i, parameter[i]);
36 | }
37 | }
38 |
39 | @Override
40 | public double getValue(final double x) {
41 | return Math.cauchyDist(x, fparameter[0], fparameter[1]);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/CombFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import io.fair_acc.math.MathBase;
4 |
5 | public class CombFunction extends AbstractFunction1D {
6 | public CombFunction(final String name, final double[] parameter) {
7 | super(name, new double[3]);
8 | // declare parameter names
9 | setParameterName(0, "fundamental");
10 | setParameterName(1, "scale");
11 | setParameterName(2, "width");
12 |
13 | if (parameter == null) {
14 | return;
15 | }
16 |
17 | // assign default values
18 | final int maxIndex = MathBase.min(parameter.length, getParameterCount());
19 | for (int i = 0; i < maxIndex; i++) {
20 | setParameterValue(i, parameter[i]);
21 | }
22 | }
23 |
24 | @Override
25 | public double getValue(final double x) {
26 | double y = 0.0;
27 | final double fundamental = fparameter[0];
28 | if (fundamental == 0) {
29 | return 0;
30 | }
31 | for (int i = 1; i < 1024; i++) {
32 | // y += TMath.Gauss(x, i*fundamental, fparameter[2], false);
33 | if (Math.abs(i * fundamental - x) < fparameter[2]) {
34 | y += 1.0;
35 | }
36 | }
37 |
38 | return fparameter[1] * y;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/FunctionND.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | /**
4 | * generic n-dimensional function interface
5 | *
6 | * @author rstein
7 | */
8 | public interface FunctionND extends Function {
9 | /**
10 | * @param x input parameter array
11 | * @return array of function values
12 | */
13 | double[] getValue(double[] x);
14 |
15 | /**
16 | * @param x input parameter array
17 | * @param i output index
18 | * @return value of function
19 | */
20 | double getValue(double[] x, int i);
21 | }
22 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/PoissonFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import io.fair_acc.math.Math;
4 |
5 | public class PoissonFunction extends AbstractFunction1D implements Function1D {
6 | /**
7 | * initialise Poisson function parameter order: parameter[0] = par (default: 1.0)
8 | *
9 | * @param name function name
10 | */
11 | public PoissonFunction(final String name) {
12 | this(name, null);
13 | }
14 |
15 | /**
16 | * initialise Poisson function parameter order: parameter[0] = par (default: 1.0)
17 | *
18 | * @param name function name
19 | * @param parameter function parameter
20 | */
21 | public PoissonFunction(final String name, final double[] parameter) {
22 | super(name, new double[1]);
23 | setParameterName(0, "par");
24 | setParameterValue(0, 1);
25 |
26 | if (parameter == null) {
27 | return;
28 | }
29 |
30 | for (int i = 0; i < Math.min(parameter.length, 1); i++) {
31 | setParameterValue(i, parameter[i]);
32 | }
33 | }
34 |
35 | @Override
36 | public double getValue(final double x) {
37 | return Math.poissonI(x, fparameter[0]);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/RandomFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import java.util.Random;
4 |
5 | public class RandomFunction extends AbstractFunction1D implements Function1D {
6 | private static final Random RANDOM = new Random(System.currentTimeMillis());
7 | private double amplitude = 0.5;
8 |
9 | public RandomFunction(final String name, final double amplitude) {
10 | super(name, 0);
11 | this.amplitude = amplitude;
12 | }
13 |
14 | @Override
15 | public double getValue(final double x) {
16 | return amplitude * RANDOM.nextGaussian();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/functions/RandomWalkFunction.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.functions;
2 |
3 | import java.util.Random;
4 |
5 | public class RandomWalkFunction extends AbstractFunction1D implements Function1D {
6 | private static final Random RANDOM = new Random(System.currentTimeMillis());
7 | private double fstate = 0.0;
8 | private double fstep = 0.5;
9 |
10 | public RandomWalkFunction(final String name, final double step) {
11 | super(name, 0);
12 | fstep = step;
13 | }
14 |
15 | @Override
16 | public double getValue(final double x) {
17 | fstate += fstep * RANDOM.nextGaussian();
18 | return fstate;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/matrix/Matrix.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.matrix;
2 |
3 | public interface Matrix extends Cloneable, java.io.Serializable {
4 | void checkMatrixDimensions(Matrix B);
5 |
6 | /**
7 | * @return copy of matrix
8 | */
9 | Matrix copy();
10 |
11 | /**
12 | * @param i row index
13 | * @param j column index
14 | * @return value of matrix element
15 | */
16 | double get(int i, int j);
17 |
18 | /**
19 | * Get column dimension.
20 | *
21 | * @return n, the number of columns.
22 | */
23 | int getColumnDimension();
24 |
25 | /**
26 | * Get row dimension
27 | *
28 | * @return m, the number of rows.
29 | */
30 | int getRowDimension();
31 |
32 | /**
33 | * @param i row index
34 | * @param j column index
35 | * @param val new value
36 | */
37 | void set(int i, int j, double val);
38 | }
39 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/storage/VoxelArrayND.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.storage;
2 |
3 | public interface VoxelArrayND {
4 | VoxelArrayND copy();
5 |
6 | double[] get(int[] index);
7 |
8 | int[] getInverseLocalIndex(int index);
9 |
10 | double[] getLocal(int localIndex);
11 |
12 | int getLocalIndex(int[] index);
13 |
14 | int getLocalStorageDim();
15 |
16 | int getValueDimension();
17 |
18 | void initialiseWithValue(double val);
19 |
20 | void set(int[] index, double[] val);
21 |
22 | void setLocal(int localIndex, double[] val);
23 | }
24 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/java/io/fair_acc/math/utils/UpdateListener.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.utils;
2 |
3 | public interface UpdateListener {
4 | void Update(Object source);
5 | }
6 |
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-harris.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-harris.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-nuttall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-nuttall.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_flat_top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_flat_top.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hamming.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hamming.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hann.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hann.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_nuttall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_nuttall.png
--------------------------------------------------------------------------------
/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_rectangular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_rectangular.png
--------------------------------------------------------------------------------
/chartfx-math/src/test/java/io/fair_acc/math/spectra/EEMDTests.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.math.spectra;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertArrayEquals;
4 | import static org.junit.jupiter.api.Assertions.assertEquals;
5 |
6 | import org.junit.jupiter.api.Test;
7 |
8 | public class EEMDTests {
9 | @Test
10 | public void extremeTest() {
11 | double[][] spmax = new double[2][10];
12 | double[][] spmin = new double[2][10];
13 |
14 | assertEquals(-1, EEMD.extrema(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, spmax, spmin));
15 | assertArrayEquals(new double[] { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[0]);
16 | assertArrayEquals(new double[] { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[1]);
17 | assertArrayEquals(new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[0]);
18 | assertArrayEquals(new double[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[1]);
19 |
20 | assertEquals(1, EEMD.extrema(new double[] { 1, 2, 3, 2, 1, 5 }, spmax, spmin));
21 | assertArrayEquals(new double[] { 2, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[0]);
22 | assertArrayEquals(new double[] { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[1]);
23 | assertArrayEquals(new double[] { 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[0]);
24 | assertArrayEquals(new double[] { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[1]);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/ChartFxSampler.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample;
2 |
3 | import java.io.File;
4 | import java.nio.file.Path;
5 | import java.util.Arrays;
6 | import java.util.Optional;
7 |
8 | import fxsampler.FXSampler;
9 |
10 | public class ChartFxSampler {
11 | private static boolean debug = Optional.ofNullable(System.getenv("chartfx.debug"))
12 | .map(Boolean::parseBoolean)
13 | .orElse(false);
14 |
15 | public static void main(String[] args) {
16 | if (debug) {
17 | // Debug output for checking classpath
18 | System.out.println("\nJars on ClassPath:");
19 | String classpath = System.getProperty("java.class.path");
20 | Arrays.stream(classpath.split(File.pathSeparator))
21 | .map(String::toString)
22 | .filter(str -> str.endsWith(".jar"))
23 | .map(str -> "* " + str.substring(str.lastIndexOf(File.separatorChar) + 1))
24 | .sorted()
25 | .forEach(System.out::println);
26 |
27 | // The FX Sampler only searches for jars/classes at and below the working directory
28 | System.out.println("\nworkingDir = " + Path.of(".").toAbsolutePath().normalize() + "\n");
29 | }
30 |
31 | FXSampler.main(args);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartSample.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.chart;
2 |
3 | import javafx.scene.Node;
4 | import javafx.scene.control.Label;
5 | import javafx.stage.Stage;
6 |
7 | import fxsampler.SampleBase;
8 |
9 | public abstract class ChartSample extends SampleBase {
10 | @Override
11 | public String getSampleName() {
12 | return this.getClass().getSimpleName();
13 | }
14 |
15 | @Override
16 | public String getProjectVersion() {
17 | return "11.3.0";
18 | }
19 |
20 | @Override
21 | public Node getPanel(final Stage stage) {
22 | System.out.println("loading sample");
23 | return getChartPanel(stage);
24 | }
25 |
26 | public Node getChartPanel(final Stage stage) {
27 | System.out.println("loading sample");
28 | return new Label("Sample hast to override getPanel() or getChartPanel()");
29 | }
30 |
31 | @Override
32 | public String getJavaDocURL() {
33 | return "";
34 | }
35 |
36 | @Override
37 | public String getControlStylesheetURL() {
38 | return null;
39 | }
40 |
41 | @Override
42 | public String getSampleSourceURL() {
43 | return "";
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/chart/legacy/ChartHighUpdateRateSample.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.chart.legacy;
2 |
3 | import javafx.application.Application;
4 | import javafx.scene.layout.BorderPane;
5 |
6 | import com.sun.javafx.tk.Toolkit;
7 |
8 | import io.fair_acc.sample.chart.RollingBufferSample;
9 |
10 | /**
11 | * chart-fx stress test for updates at 100 Hz to 1 kHz
12 | *
13 | * @author rstein
14 | */
15 | public class ChartHighUpdateRateSample extends RollingBufferSample {
16 | static {
17 | N_SAMPLES = 30000;
18 | UPDATE_PERIOD = 1;
19 | BUFFER_CAPACITY = 7500;
20 | }
21 | private static int counter = 0;
22 |
23 | @Override
24 | public BorderPane initComponents() {
25 | BorderPane pane = super.initComponents();
26 | Toolkit.getToolkit().addSceneTkPulseListener(() -> {
27 | counter = (counter + 1) % 100;
28 | if (counter == 0) {
29 | System.err.println("pulse auto dipole, "
30 | + " auto beam ");
31 | }
32 | });
33 |
34 | Toolkit.getToolkit().checkFxUserThread();
35 | return pane;
36 | }
37 |
38 | public static void main(final String[] args) {
39 | Application.launch(args);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/chart/legacy/utils/ChartTestCase.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.chart.legacy.utils;
2 |
3 | import javafx.scene.Node;
4 |
5 | public interface ChartTestCase {
6 | Node getChart(final int nSamples);
7 |
8 | void setNumberOfSamples(final int nSamples);
9 |
10 | void updateDataSet();
11 | }
12 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/FinancialCandlestickSample.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial;
2 |
3 | import javafx.application.Application;
4 |
5 | import io.fair_acc.chartfx.XYChart;
6 | import io.fair_acc.chartfx.renderer.ErrorStyle;
7 | import io.fair_acc.chartfx.renderer.spi.ErrorDataSetRenderer;
8 | import io.fair_acc.chartfx.renderer.spi.financial.CandleStickRenderer;
9 | import io.fair_acc.dataset.spi.DefaultDataSet;
10 | import io.fair_acc.dataset.spi.financial.OhlcvDataSet;
11 |
12 | /**
13 | * Candlestick Renderer Sample
14 | *
15 | * @author afischer
16 | */
17 | public class FinancialCandlestickSample extends AbstractBasicFinancialApplication {
18 | protected void prepareRenderers(XYChart chart, OhlcvDataSet ohlcvDataSet, DefaultDataSet indiSet) {
19 | // create and apply renderers
20 | CandleStickRenderer candleStickRenderer = new CandleStickRenderer();
21 | candleStickRenderer.getDatasets().addAll(ohlcvDataSet);
22 |
23 | ErrorDataSetRenderer avgRenderer = new ErrorDataSetRenderer();
24 | avgRenderer.setDrawMarker(false);
25 | avgRenderer.setErrorStyle(ErrorStyle.NONE);
26 | avgRenderer.getDatasets().addAll(indiSet);
27 |
28 | chart.getRenderers().clear();
29 | chart.getRenderers().add(candleStickRenderer);
30 | chart.getRenderers().add(avgRenderer);
31 | }
32 |
33 | /**
34 | * @param args the command line arguments
35 | */
36 | public static void main(final String[] args) {
37 | Application.launch(args);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/FinancialFootprintSample.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial;
2 |
3 | import io.fair_acc.chartfx.XYChart;
4 | import io.fair_acc.chartfx.renderer.ErrorStyle;
5 | import io.fair_acc.chartfx.renderer.spi.ErrorDataSetRenderer;
6 | import io.fair_acc.chartfx.renderer.spi.financial.CandleStickRenderer;
7 | import io.fair_acc.dataset.spi.DefaultDataSet;
8 | import io.fair_acc.dataset.spi.financial.OhlcvDataSet;
9 |
10 | /**
11 | * Footprint Renderer Sample
12 | *
13 | * @author afischer
14 | */
15 | public class FinancialFootprintSample extends AbstractBasicFinancialApplication {
16 | protected void prepareRenderers(XYChart chart, OhlcvDataSet ohlcvDataSet, DefaultDataSet indiSet) {
17 | // create and apply renderers
18 | CandleStickRenderer candleStickRenderer = new CandleStickRenderer();
19 | candleStickRenderer.getDatasets().addAll(ohlcvDataSet);
20 |
21 | ErrorDataSetRenderer avgRenderer = new ErrorDataSetRenderer();
22 | avgRenderer.setDrawMarker(false);
23 | avgRenderer.setErrorStyle(ErrorStyle.NONE);
24 | avgRenderer.getDatasets().addAll(indiSet);
25 |
26 | chart.getRenderers().clear();
27 | chart.getRenderers().add(candleStickRenderer);
28 | chart.getRenderers().add(avgRenderer);
29 | }
30 |
31 | /**
32 | * @param args the command line arguments
33 | */
34 | public static void main(final String[] args) {
35 | launch(args);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/FinancialHiLowSample.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial;
2 |
3 | import io.fair_acc.chartfx.XYChart;
4 | import io.fair_acc.chartfx.renderer.ErrorStyle;
5 | import io.fair_acc.chartfx.renderer.spi.ErrorDataSetRenderer;
6 | import io.fair_acc.chartfx.renderer.spi.financial.HighLowRenderer;
7 | import io.fair_acc.dataset.spi.DefaultDataSet;
8 | import io.fair_acc.dataset.spi.financial.OhlcvDataSet;
9 |
10 | /**
11 | * OHLC (HiLo) Renderer Sample
12 | *
13 | * @author afischer
14 | */
15 | public class FinancialHiLowSample extends AbstractBasicFinancialApplication {
16 | protected void prepareRenderers(XYChart chart, OhlcvDataSet ohlcvDataSet, DefaultDataSet indiSet) {
17 | // create and apply renderers
18 | HighLowRenderer highLowRenderer = new HighLowRenderer();
19 | highLowRenderer.getDatasets().addAll(ohlcvDataSet);
20 |
21 | ErrorDataSetRenderer avgRenderer = new ErrorDataSetRenderer();
22 | avgRenderer.setDrawMarker(false);
23 | avgRenderer.setErrorStyle(ErrorStyle.NONE);
24 | avgRenderer.getDatasets().addAll(indiSet);
25 |
26 | chart.getRenderers().clear();
27 | chart.getRenderers().add(highLowRenderer);
28 | chart.getRenderers().add(avgRenderer);
29 | }
30 |
31 | /**
32 | * @param args the command line arguments
33 | */
34 | public static void main(final String[] args) {
35 | launch(args);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/dos/AbsorptionClusterDO.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.dos;
2 |
3 | import java.util.LinkedHashSet;
4 | import java.util.Set;
5 |
6 | public class AbsorptionClusterDO {
7 | // ordered from bottom to top
8 | private final Set> bidClusters = new LinkedHashSet<>();
9 | // ordered from top to bottom
10 | private final Set> askClusters = new LinkedHashSet<>();
11 |
12 | public void addBidCluster(Interval cluster) {
13 | bidClusters.add(cluster);
14 | }
15 |
16 | public void addAskCluster(Interval cluster) {
17 | askClusters.add(cluster);
18 | }
19 |
20 | public Set> getBidClusters() {
21 | return bidClusters;
22 | }
23 |
24 | public Set> getAskClusters() {
25 | return askClusters;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/dos/Interval.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.dos;
2 |
3 | public class Interval {
4 | public T from;
5 | public T to;
6 |
7 | public Interval(T from, T to) {
8 | this.from = from;
9 | this.to = to;
10 | }
11 |
12 | @Override
13 | public int hashCode() {
14 | final int prime = 31;
15 | int result = 1;
16 | result = prime * result + ((from == null) ? 0 : from.hashCode());
17 | result = prime * result + ((to == null) ? 0 : to.hashCode());
18 | return result;
19 | }
20 |
21 | @Override
22 | public boolean equals(Object obj) {
23 | if (this == obj)
24 | return true;
25 | if (obj == null)
26 | return false;
27 | if (getClass() != obj.getClass())
28 | return false;
29 | Interval other = (Interval) obj;
30 | if (from == null) {
31 | if (other.from != null)
32 | return false;
33 | } else if (!from.equals(other.from))
34 | return false;
35 | if (to == null) {
36 | return other.to == null;
37 | } else
38 | return to.equals(other.to);
39 | }
40 |
41 | @Override
42 | public String toString() {
43 | return "Interval [from=" + from + ", to=" + to + "]";
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/dos/ResettableIterator.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.dos;
2 |
3 | import java.util.Iterator;
4 |
5 | /**
6 | * Defines an iterator that can be reset back to an initial state.
7 | *
8 | * This interface allows an iterator to be repeatedly reused.
9 | *
10 | * @param the type to iterate over
11 | * @version $Id: ResettableIterator.java 1543263 2013-11-19 00:47:55Z ggregory $
12 | * @since 3.0
13 | */
14 | public interface ResettableIterator extends Iterator {
15 | /**
16 | * Resets the iterator back to the position at which the iterator
17 | * was created.
18 | */
19 | void reset();
20 | }
21 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/OhlcvChangeListener.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service;
2 |
3 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcvItem;
4 |
5 | /**
6 | * OHLCV Listener about structure changes.
7 | */
8 | public interface OhlcvChangeListener {
9 | /**
10 | * Notification event about new ohlcv item changed
11 | * @param ohlcvItem new or changed ohlcv item
12 | * @exception Exception if the processing failed
13 | */
14 | void tickEvent(IOhlcvItem ohlcvItem) throws Exception;
15 | }
16 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/StandardTradePlanAttributes.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service;
2 |
3 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeKey;
4 | import io.fair_acc.sample.financial.dos.OrderContainer;
5 | import io.fair_acc.sample.financial.dos.PositionContainer;
6 |
7 | public class StandardTradePlanAttributes {
8 | /**
9 | * The performed trading orders
10 | */
11 | public static final AttributeKey ORDERS = AttributeKey.create(OrderContainer.class, "ORDERS");
12 |
13 | /**
14 | * The opened/closed trading positions
15 | */
16 | public static final AttributeKey POSITIONS = AttributeKey.create(PositionContainer.class, "POSITIONS");
17 |
18 | /**
19 | * The trading asset identification - this symbol will be traded by execution platform
20 | * The more providers are supported, this one is main for trading.
21 | */
22 | public static final AttributeKey ASSET_NAME = AttributeKey.create(String.class, "ASSET_NAME");
23 |
24 | /**
25 | * The account ID
26 | */
27 | public static final AttributeKey ACCOUNT_ID = AttributeKey.create(String.class, "ACCOUNT_ID");
28 |
29 | private StandardTradePlanAttributes() {
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/TickDataFinishedException.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service;
2 |
3 | public class TickDataFinishedException extends Exception {
4 | private static final long serialVersionUID = 5241232871349317846L;
5 |
6 | public TickDataFinishedException(String message) {
7 | super(message);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/TickOhlcvDataProvider.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service;
2 |
3 | import java.io.IOException;
4 |
5 | import io.fair_acc.sample.financial.dos.OHLCVItem;
6 |
7 | /**
8 | * Provides actual tick data
9 | */
10 | public interface TickOhlcvDataProvider {
11 | /**
12 | * Every get() returns tick ohlcv item. If it is replay mode - the boundary is reached the TickDataFinishedException is thrown.
13 | * If the realtime mode is used - never-end loop is used. The thread waits to next data.
14 | * @return provides tick ohlcv data
15 | * @throws TickDataFinishedException if the data are reached the boundary
16 | * @throws IOException - the data are not reachable
17 | */
18 | OHLCVItem get() throws TickDataFinishedException, IOException;
19 | }
20 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/consolidate/IncrementalOhlcvConsolidation.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.consolidate;
2 |
3 | import io.fair_acc.sample.financial.dos.DefaultOHLCV;
4 | import io.fair_acc.sample.financial.dos.OHLCVItem;
5 | import io.fair_acc.sample.financial.service.period.IntradayPeriod;
6 |
7 | public interface IncrementalOhlcvConsolidation {
8 | /**
9 | * Base method for incremental consolidation process
10 | * @param ohlcv existed consolidated ohlcv structure
11 | * @param incrementItem tick actual ohlcv item
12 | * @return consolidated signal
13 | */
14 | DefaultOHLCV consolidate(DefaultOHLCV ohlcv, OHLCVItem incrementItem);
15 |
16 | /**
17 | * @return provides information about consolidation settings period
18 | */
19 | IntradayPeriod getPeriod();
20 | }
21 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/consolidate/OhlcvConsolidationAddon.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.consolidate;
2 |
3 | import io.fair_acc.sample.financial.dos.DefaultOHLCV;
4 | import io.fair_acc.sample.financial.dos.OHLCVItem;
5 |
6 | public interface OhlcvConsolidationAddon {
7 | /**
8 | * Base method for addon calculation process
9 | * @param ohlcv existed ohlcv structure
10 | * @param incrementItem incremental ohlc item
11 | * @return enhanced signal
12 | */
13 | DefaultOHLCV consolidationUpdateAddon(DefaultOHLCV ohlcv, OHLCVItem incrementItem);
14 |
15 | /**
16 | * Base method for addon calculation process
17 | * @param ohlcv existed ohlcv structure
18 | * @param incrementItem incremental ohlc item
19 | * @return enhanced signal
20 | */
21 | DefaultOHLCV consolidationAdditionAddon(DefaultOHLCV ohlcv, OHLCVItem incrementItem);
22 |
23 | /**
24 | * @return true = addon needs recalculation per tick in the consolidation process,
25 | * false = the computation is processing by new tick which create new bar. It means
26 | * in the end of previous closed bar - on close of bar.
27 | */
28 | boolean isDynamic();
29 | }
30 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/ExecutionPlatform.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.execution;
2 |
3 | import io.fair_acc.sample.financial.dos.Order;
4 |
5 | public interface ExecutionPlatform {
6 | /**
7 | * Execute the trading order
8 | *
9 | * @param order Order
10 | * @return result
11 | */
12 | ExecutionResult performOrder(Order order);
13 |
14 | /**
15 | * Cancel the trading order
16 | *
17 | * @param orderId int
18 | * @return result
19 | */
20 | ExecutionResult cancelOrder(int orderId);
21 |
22 | /**
23 | * Cancel the trading order
24 | *
25 | * @param order instance
26 | * @return result
27 | */
28 | ExecutionResult cancelOrder(Order order);
29 |
30 | /**
31 | * Add the listener of execution platform
32 | *
33 | * @param listener ExecutionPlatformListener
34 | */
35 | void addExecutionPlatformListener(ExecutionPlatformListener listener);
36 |
37 | /**
38 | * Remove the listener of execution platform
39 | *
40 | * @param listener ExecutionPlatformListener
41 | */
42 | void removeExecutionPlatformListener(ExecutionPlatformListener listener);
43 | }
44 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/ExecutionPlatformListener.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.execution;
2 |
3 | import java.util.EventListener;
4 |
5 | public interface ExecutionPlatformListener extends EventListener {
6 | /**
7 | * The order was filled
8 | *
9 | * @param event OrderEvent
10 | */
11 | void orderFilled(OrderEvent event);
12 |
13 | /**
14 | * The order was cancelled
15 | *
16 | * @param event OrderEvent
17 | */
18 | void orderCancelled(OrderEvent event);
19 | }
20 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/ExecutionResult.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.execution;
2 |
3 | import io.fair_acc.sample.financial.dos.Order;
4 |
5 | public class ExecutionResult {
6 | public enum ExecutionResultEnum {
7 | OK,
8 | ERROR,
9 | CANCEL
10 | }
11 |
12 | private final Order order;
13 | private ExecutionResultEnum result;
14 | private String errorMessage;
15 |
16 | public ExecutionResult(Order order) {
17 | this(ExecutionResultEnum.OK, order);
18 | }
19 |
20 | public ExecutionResult(ExecutionResultEnum resultEnum, Order order) {
21 | this.order = order;
22 | setResult(resultEnum);
23 | }
24 |
25 | public Order getOrder() {
26 | return order;
27 | }
28 |
29 | public String getErrorMessage() {
30 | return errorMessage;
31 | }
32 |
33 | public void setErrorMessage(String errorMessage) {
34 | this.errorMessage = errorMessage;
35 | }
36 |
37 | public ExecutionResultEnum getResult() {
38 | return result;
39 | }
40 |
41 | public void setResult(ExecutionResultEnum result) {
42 | this.result = result;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/OrderEvent.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.execution;
2 |
3 | import java.util.EventObject;
4 |
5 | import io.fair_acc.sample.financial.dos.Order;
6 |
7 | public class OrderEvent extends EventObject {
8 | private static final long serialVersionUID = 3995883467037156877L;
9 |
10 | private final Order order;
11 |
12 | public OrderEvent(Object source, Order order) {
13 | super(source);
14 | this.order = order;
15 | }
16 |
17 | public Order getOrder() {
18 | return order;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/footprint/NbColumnColorGroupService.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.footprint;
2 |
3 | import io.fair_acc.chartfx.renderer.spi.financial.service.footprint.NbColumnColorGroup;
4 | import io.fair_acc.sample.financial.dos.PriceVolumeContainer;
5 |
6 | /**
7 | * Calculate color group settings for each bid/ask volume in each level price
8 | */
9 | public interface NbColumnColorGroupService {
10 | /**
11 | * Calculate color group settings for each bid/ask volume in each level price
12 | * @param priceVolumeContainer which has to be painted
13 | * @return the result with column color group data result
14 | */
15 | NbColumnColorGroup calculate(PriceVolumeContainer priceVolumeContainer);
16 | }
17 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/order/InternalOrderIdGenerator.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.order;
2 |
3 | public class InternalOrderIdGenerator {
4 | private static final ThreadLocal generator = new ThreadLocal() {
5 | @Override
6 | protected Integer initialValue() {
7 | return 0;
8 | }
9 | };
10 |
11 | public static Integer generateId() {
12 | generator.set(generator.get() + 1);
13 | return generator.get();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/order/InternalPositionIdGenerator.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.order;
2 |
3 | public class InternalPositionIdGenerator {
4 | private static final ThreadLocal generator = ThreadLocal.withInitial(() -> 0);
5 |
6 | public static Integer generateId() {
7 | generator.set(generator.get() + 1);
8 | return generator.get();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/period/EodPeriod.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.period;
2 |
3 | /**
4 | * End-of-Day Periods Domain object
5 | *
6 | * @author afischer
7 | */
8 | public class EodPeriod extends Period {
9 | public static final EodPeriod DAILY = new EodPeriod();
10 |
11 | public enum PeriodEnum {
12 | DAILY,
13 | WEEKLY,
14 | MONTHLY
15 | }
16 |
17 | private final PeriodEnum period;
18 |
19 | public EodPeriod() {
20 | this(PeriodEnum.DAILY);
21 | }
22 |
23 | public EodPeriod(PeriodEnum period) {
24 | this.period = period;
25 | }
26 |
27 | public PeriodEnum getPeriod() {
28 | return period;
29 | }
30 |
31 | @Override
32 | public long getMillis() {
33 | switch (period) {
34 | case DAILY:
35 | return 24 * 60 * 60 * 1000;
36 | case WEEKLY:
37 | return 7 * 24 * 60 * 60 * 1000;
38 | case MONTHLY:
39 | return 2592000000L;
40 | default:
41 | throw new IllegalArgumentException("The method getMillis() is not supported for this type of period: " + this);
42 | }
43 | }
44 |
45 | @Override
46 | public String toString() {
47 | return period.toString();
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/period/Period.java:
--------------------------------------------------------------------------------
1 | package io.fair_acc.sample.financial.service.period;
2 |
3 | public abstract class Period {
4 | public enum PeriodType {
5 | EOD,
6 | INTRA
7 | }
8 |
9 | private final PeriodType type;
10 |
11 | public Period(PeriodType type) {
12 | this.type = type;
13 | }
14 |
15 | public Period() {
16 | this(PeriodType.EOD);
17 | }
18 |
19 | /**
20 | * @return common type of the time period
21 | */
22 | public PeriodType getType() {
23 | return type;
24 | }
25 |
26 | /**
27 | * @return get period in millis
28 | */
29 | public abstract long getMillis();
30 |
31 | @Override
32 | public int hashCode() {
33 | final int prime = 31;
34 | int result = 1;
35 | result = prime * result + ((type == null) ? 0 : type.hashCode());
36 | return result;
37 | }
38 |
39 | @Override
40 | public boolean equals(Object obj) {
41 | if (this == obj)
42 | return true;
43 | if (obj == null)
44 | return false;
45 | if (getClass() != obj.getClass())
46 | return false;
47 | Period other = (Period) obj;
48 | return type == other.type;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/META-INF/services/fxsampler.FXSamplerProject:
--------------------------------------------------------------------------------
1 | io.fair_acc.sample.ChartFxSamplerProject
2 | io.fair_acc.sample.ChartFxMathSamplerProject
3 | io.fair_acc.sample.ChartFxFinancialSamplerProject
4 | io.fair_acc.sample.ChartFxMiscSamplerProject
5 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/banner.png
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/CustomCss1.css:
--------------------------------------------------------------------------------
1 | .chart-crosshair-path {
2 | -fx-stroke-width: 3;
3 | -fx-stroke: green;
4 | }
5 |
6 | .chart-zoom-rect {
7 | -fx-fill: lime;
8 | -fx-stroke: pink;
9 | -fx-stroke-type: inside;
10 | -fx-stroke-width: 5;
11 | -fx-opacity: 0.1;
12 | }
13 |
14 | .chart-datapoint-tooltip-label {
15 | -fx-background-color: purple;
16 | -fx-border-color: black;
17 | -fx-border-radius: 9;
18 | -fx-font-size: 22;
19 | -fx-font-weight: lighter;
20 | -fx-text-alignment: left;
21 | }
22 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/CustomCss2.css:
--------------------------------------------------------------------------------
1 | .chart-crosshair-path {
2 | -fx-stroke-width: 3;
3 | -fx-stroke: orange;
4 | }
5 |
6 | .chart-major-grid-lines {
7 | -fx-stroke: derive(red, -10%);
8 | -fx-stroke-dash-array: 1.5, 2.5;
9 | -fx-stroke-width: 0.5;
10 | -fx-grid-on-top: true;
11 | }
12 |
13 | .axis-label {
14 | -fx-stroke: blue;
15 | -fx-axis-label-alignment: right;
16 | -fx-font-family: "Times New Roman";
17 | }
18 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/ValueIndicatorSample.css:
--------------------------------------------------------------------------------
1 | .x-value-indicator-line0 {
2 | -fx-stroke-width: 4;
3 | -fx-stroke: red;
4 | -fx-stroke-dash-array: 8;
5 | }
6 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/YWatchValueIndicatorSample.css:
--------------------------------------------------------------------------------
1 | .valA-value-watch-indicator-marker {
2 | -fx-stroke-width: 0.5;
3 | -fx-stroke: black;
4 | -fx-fill: #78015b;
5 | }
6 |
7 | .valB-value-watch-indicator-marker {
8 | -fx-stroke-width: 0.5;
9 | -fx-stroke: black;
10 | -fx-fill: green;
11 | }
12 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/financial/NQ-201609-GLOBEX.scid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/financial/NQ-201609-GLOBEX.scid
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/RollingBufferLegacy.css:
--------------------------------------------------------------------------------
1 | .chart-line-symbol {
2 | -fx-shape: "";
3 | }
4 |
5 | .chart-line-symbol {
6 | -fx-background-insets: 0, 0;
7 | -fx-background-radius: 0;
8 | -fx-padding: 0;
9 | -fx-shape: "";
10 | -fx-background-color: transparent;
11 | }
12 |
13 | .chart-series-line {
14 | -fx-stroke-width: 1.5px;
15 | -fx-effect: null;
16 | }
17 |
18 | .default-color0.chart-series-line {
19 | -fx-stroke: #0000c8;
20 | }
21 |
22 | .default-color1.chart-series-line {
23 | -fx-stroke: #c80000;
24 | }
25 |
26 | .default-color2.chart-series-line {
27 | -fx-stroke: #00c800;
28 | }
29 |
30 | .default-color0.chart-line-symbol {
31 | -fx-background-color: #0000c8, white;
32 | }
33 |
34 | .default-color1.chart-line-symbol {
35 | -fx-background-color: #c80000, white;
36 | }
37 |
38 | .default-color2.chart-line-symbol {
39 | -fx-background-color: #00c800, white;
40 | }
41 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark25Hz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark25Hz.png
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark2Hz.csv:
--------------------------------------------------------------------------------
1 | # JavaFX Chart,new Chart (ErrorDataSetRenderer),new Chart (ReducingLineRenderer),,,,
2 | # X,Y,X,Y,X,Y,
3 | 10000.000000,47.290954,1000000.000000,33.983683,900000.000000,39.820995,
4 | 5000.000000,33.047188,900000.000000,46.941989,800000.000000,60.037898,
5 | 4000.000000,24.810113,800000.000000,52.897618,700000.000000,47.323796,
6 | 3000.000000,19.315507,700000.000000,39.176174,600000.000000,50.793981,
7 | 2000.000000,14.132313,600000.000000,32.529530,500000.000000,49.415321,
8 | 1000.000000,9.356243,500000.000000,28.966534,400000.000000,33.684677,
9 | 500.000000,10.188517,400000.000000,33.265944,300000.000000,45.049130,
10 | 100.000000,9.436126,300000.000000,35.139491,200000.000000,33.405787,
11 | ,,200000.000000,29.100013,100000.000000,20.513644,
12 | ,,100000.000000,18.799078,50000.000000,16.189995,
13 | ,,50000.000000,13.579958,40000.000000,13.308956,
14 | ,,40000.000000,14.274627,30000.000000,11.653522,
15 | ,,30000.000000,11.370320,20000.000000,11.002520,
16 | ,,20000.000000,12.233456,10000.000000,8.081661,
17 | ,,10000.000000,9.258133,5000.000000,8.095744,
18 | ,,5000.000000,7.006405,4000.000000,7.891423,
19 | ,,4000.000000,6.570112,3000.000000,7.343850,
20 | ,,3000.000000,6.308637,2000.000000,7.605479,
21 | ,,2000.000000,11.535793,1000.000000,7.391776,
22 | ,,1000.000000,6.320327,500.000000,8.079306,
23 | ,,500.000000,6.224253,100.000000,6.011448,
24 | ,,100.000000,6.059982,,,
25 |
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark2Hz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark2Hz.png
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/testdata/EU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/testdata/EU.png
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/utils/alla-turca.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/utils/alla-turca.mid
--------------------------------------------------------------------------------
/chartfx-samples/src/main/resources/io/fair_acc/sample/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/icon.png
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "*/src/test/**/*"
3 | - "chartfx-samples/**/*"
4 |
--------------------------------------------------------------------------------
/config/hooks/pre-commit-stub:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # stub pre-commit hook
4 | # just a runner for the real pre-commit script
5 | # if script cannot be found, exit without error
6 | # (to not block local commits)
7 |
8 | set -e
9 |
10 | REPO_ROOT_DIR="$(git rev-parse --show-toplevel)"
11 | PRE_COMMIT_SCRIPT="${REPO_ROOT_DIR}/config/hooks/pre-commit"
12 |
13 | if [ -f $PRE_COMMIT_SCRIPT ]; then
14 | source $PRE_COMMIT_SCRIPT
15 | fi
--------------------------------------------------------------------------------
/dependency-check-suppressions.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 | ^pkg:maven/pl\.edu\.icm/JLargeArrays@.*$
8 | cpe:/a:gitlab:gitlab
9 |
10 |
11 |
--------------------------------------------------------------------------------
/docs/THPRB028.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/THPRB028.pdf
--------------------------------------------------------------------------------
/docs/THPRB028_poster.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/THPRB028_poster.pdf
--------------------------------------------------------------------------------
/docs/banner/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/banner/banner.png
--------------------------------------------------------------------------------
/docs/icons/icon-rounded-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-1024.png
--------------------------------------------------------------------------------
/docs/icons/icon-rounded-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-128.png
--------------------------------------------------------------------------------
/docs/icons/icon-rounded-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-256.png
--------------------------------------------------------------------------------
/docs/icons/icon-rounded-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-512.png
--------------------------------------------------------------------------------
/docs/icons/icon-rounded-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-64.png
--------------------------------------------------------------------------------
/docs/icons/icon-square-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-1024.png
--------------------------------------------------------------------------------
/docs/icons/icon-square-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-128.png
--------------------------------------------------------------------------------
/docs/icons/icon-square-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-256.png
--------------------------------------------------------------------------------
/docs/icons/icon-square-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-512.png
--------------------------------------------------------------------------------
/docs/icons/icon-square-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-64.png
--------------------------------------------------------------------------------
/docs/pics/CategoryAxisSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/CategoryAxisSample.png
--------------------------------------------------------------------------------
/docs/pics/ChartAnatomySample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ChartAnatomySample.png
--------------------------------------------------------------------------------
/docs/pics/ChartIndicatorSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ChartIndicatorSample.png
--------------------------------------------------------------------------------
/docs/pics/ContourChartSample1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ContourChartSample1.png
--------------------------------------------------------------------------------
/docs/pics/ContourChartSample2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ContourChartSample2.png
--------------------------------------------------------------------------------
/docs/pics/DataSetAverageSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetAverageSample.png
--------------------------------------------------------------------------------
/docs/pics/DataSetFilterSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetFilterSample.png
--------------------------------------------------------------------------------
/docs/pics/DataSetIntegrateDifferentiateSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetIntegrateDifferentiateSample.png
--------------------------------------------------------------------------------
/docs/pics/DataSetSpectrumSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetSpectrumSample.png
--------------------------------------------------------------------------------
/docs/pics/EditDataSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/EditDataSample.png
--------------------------------------------------------------------------------
/docs/pics/ErrorDataSetRendererStylingSample1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ErrorDataSetRendererStylingSample1.png
--------------------------------------------------------------------------------
/docs/pics/ErrorDataSetRendererStylingSample2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ErrorDataSetRendererStylingSample2.png
--------------------------------------------------------------------------------
/docs/pics/FinancialAdvancedCandlestickSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialAdvancedCandlestickSample.png
--------------------------------------------------------------------------------
/docs/pics/FinancialCandlestickSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialCandlestickSample.png
--------------------------------------------------------------------------------
/docs/pics/FinancialHiLowSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialHiLowSample.png
--------------------------------------------------------------------------------
/docs/pics/FinancialRealtimeCandlestickSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialRealtimeCandlestickSample.png
--------------------------------------------------------------------------------
/docs/pics/FinancialRealtimeFootprintSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialRealtimeFootprintSample.png
--------------------------------------------------------------------------------
/docs/pics/FourierSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FourierSample.png
--------------------------------------------------------------------------------
/docs/pics/FrequencyFilterSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FrequencyFilterSample.png
--------------------------------------------------------------------------------
/docs/pics/GaussianFitSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/GaussianFitSample.png
--------------------------------------------------------------------------------
/docs/pics/GridRendererSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/GridRendererSample.png
--------------------------------------------------------------------------------
/docs/pics/Histogram2DimSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/Histogram2DimSample.png
--------------------------------------------------------------------------------
/docs/pics/HistogramRendererTests.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/HistogramRendererTests.png
--------------------------------------------------------------------------------
/docs/pics/HistogramSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/HistogramSample.png
--------------------------------------------------------------------------------
/docs/pics/HistoryDataSetRendererSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/HistoryDataSetRendererSample.png
--------------------------------------------------------------------------------
/docs/pics/IIRFilterSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/IIRFilterSample.png
--------------------------------------------------------------------------------
/docs/pics/LabelledMarkerSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/LabelledMarkerSample.png
--------------------------------------------------------------------------------
/docs/pics/LogAxisSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/LogAxisSample.png
--------------------------------------------------------------------------------
/docs/pics/MetaDataRendererSample2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/MetaDataRendererSample2.png
--------------------------------------------------------------------------------
/docs/pics/MountainRangeRendererSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/MountainRangeRendererSample.png
--------------------------------------------------------------------------------
/docs/pics/MultipleAxesSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/MultipleAxesSample.png
--------------------------------------------------------------------------------
/docs/pics/PolarPlotSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/PolarPlotSample.png
--------------------------------------------------------------------------------
/docs/pics/RollingBufferSortedTreeSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/RollingBufferSortedTreeSample.png
--------------------------------------------------------------------------------
/docs/pics/ScatterAndBubbleRendererSample1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ScatterAndBubbleRendererSample1.png
--------------------------------------------------------------------------------
/docs/pics/ScatterAndBubbleRendererSample2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ScatterAndBubbleRendererSample2.png
--------------------------------------------------------------------------------
/docs/pics/SimpleChartSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/SimpleChartSample.png
--------------------------------------------------------------------------------
/docs/pics/THPRB028_fig2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/THPRB028_fig2.png
--------------------------------------------------------------------------------
/docs/pics/TimeAxisSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/TimeAxisSample.png
--------------------------------------------------------------------------------
/docs/pics/WaveletScalogram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/WaveletScalogram.png
--------------------------------------------------------------------------------
/docs/pics/chartfx-example1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-example1.png
--------------------------------------------------------------------------------
/docs/pics/chartfx-performance-test-case.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance-test-case.png
--------------------------------------------------------------------------------
/docs/pics/chartfx-performance1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance1.png
--------------------------------------------------------------------------------
/docs/pics/chartfx-performance1a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance1a.png
--------------------------------------------------------------------------------
/docs/pics/chartfx-performance1b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance1b.png
--------------------------------------------------------------------------------
/setupGitHooks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # git config core.hooksPath $PWD/config/hooks
3 | # safe fall-back for older git versions
4 | ln -s -r ./config/hooks/pre* -t ./.git/hooks/
5 |
--------------------------------------------------------------------------------