├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── LICENSE
├── README.md
├── Release Notes.txt
├── build-all.bat
├── build-distro.bat
├── build-jfx-app.bat
├── build.xml
├── config
├── logging
│ └── log4j2.xml
└── security
│ └── point85-keystore.jks
├── database
├── demo
│ ├── OeeDemoDB.p85x
│ └── PackMLReasons.p85x
├── hsql
│ ├── create_event_table.sql
│ ├── create_event_table_indexes.sql
│ ├── create_indexes.sql
│ ├── create_tables.sql
│ ├── data
│ │ ├── oeedb.data
│ │ ├── oeedb.lck
│ │ ├── oeedb.log
│ │ ├── oeedb.properties
│ │ └── oeedb.script
│ ├── migrate_v4_v5.sql
│ ├── run_hsqldb_server.bat
│ ├── run_hsqldb_server.sh
│ └── server.properties
├── import
│ ├── materials.csv
│ └── reasons.csv
├── mssql
│ ├── create_event_table.sql
│ ├── create_tables.sql
│ ├── migrate_v2_v3.sql
│ └── migrate_v4_v5.sql
├── mysql
│ ├── create_event_table.sql
│ ├── create_tables.sql
│ └── migrate_v4_v5.sql
├── oracle
│ ├── create_event_table.sql
│ ├── create_tables.sql
│ └── migrate_v4_v5.sql
└── postgresql
│ ├── create_event_table.sql
│ ├── create_tables.sql
│ └── migrate_v4_v5.sql
├── docs
├── AvailabilityPage.png
├── PackML and Point85 OEE.pdf
├── Point85 OEE Getting Started Guide.pdf
├── Point85 OEE Getting Started Guide.tmdx
├── Point85 OEE User Guide.pdf
├── Point85 OEE User Guide.tmdx
├── System Architecture.prdx
├── availability-trend.png
├── dashboard-events.png
├── dashboard-first-level-pareto.png
├── dashboard-second-level-pareto.png
├── dashboard-tiles.png
├── dashboard-time-losses.png
├── designer-opc-da-trend.png
├── designer-plant-entities.png
├── domain_docs.zip
├── operator-availability.png
├── operator-web-availability.png
└── system-architecture.png
├── install-oracle-jdbc.bat
├── pom.xml
├── run-collector-app.bat
├── run-collector-app.sh
├── run-designer-app-debug.bat
├── run-designer-app.bat
├── run-designer-app.sh
├── run-monitor-app.bat
├── run-monitor-app.sh
├── run-operator-app.bat
├── run-operator-app.sh
├── run-tester-app.bat
├── run-tester-app.sh
└── src
└── main
├── java
└── org
│ └── point85
│ ├── app
│ ├── AppUtils.java
│ ├── DialogController.java
│ ├── EntityNode.java
│ ├── FXMLLoaderFactory.java
│ ├── ImageManager.java
│ ├── Images.java
│ ├── MaterialNode.java
│ ├── OeeApplication.java
│ ├── ReasonNode.java
│ ├── SplashController.java
│ ├── charts
│ │ ├── CategoryClickListener.java
│ │ ├── DataSubscriber.java
│ │ ├── InterpolationType.java
│ │ ├── ParetoChartController.java
│ │ ├── SampleChartController.java
│ │ ├── StringOrdinal.java
│ │ └── TrendChartController.java
│ ├── collector
│ │ ├── CollectorApplication.java
│ │ ├── CollectorController.java
│ │ └── CollectorLocalizer.java
│ ├── cron
│ │ ├── CronEditorController.java
│ │ ├── CronHelpController.java
│ │ └── CronTrendController.java
│ ├── dashboard
│ │ ├── AvailabilityEditorController.java
│ │ ├── DashboardController.java
│ │ ├── DashboardDialogController.java
│ │ ├── EventEditorController.java
│ │ ├── ProductionEditorController.java
│ │ └── SetupEditorController.java
│ ├── db
│ │ ├── DatabaseServerController.java
│ │ └── DatabaseTrendController.java
│ ├── designer
│ │ ├── ConnectionState.java
│ │ ├── DataCollectorController.java
│ │ ├── DataSourceConnectionController.java
│ │ ├── DesignerApplication.java
│ │ ├── DesignerController.java
│ │ ├── DesignerDialogController.java
│ │ ├── DesignerLocalizer.java
│ │ ├── EntityWorkScheduleController.java
│ │ ├── EquipmentMaterialController.java
│ │ ├── EquipmentResolverController.java
│ │ └── PhysicalModelController.java
│ ├── email
│ │ ├── EmailServerController.java
│ │ └── EmailTrendController.java
│ ├── file
│ │ ├── FileShareController.java
│ │ └── FileTrendController.java
│ ├── generic
│ │ └── GenericSourceController.java
│ ├── http
│ │ ├── HttpServerController.java
│ │ └── HttpTrendController.java
│ ├── material
│ │ └── MaterialEditorController.java
│ ├── messaging
│ │ ├── BaseMessagingTrendController.java
│ │ ├── JmsTrendController.java
│ │ ├── KafkaServerController.java
│ │ ├── KafkaTrendController.java
│ │ ├── MqBrokerController.java
│ │ ├── MqttServerController.java
│ │ ├── MqttTrendController.java
│ │ └── RmqTrendController.java
│ ├── modbus
│ │ ├── ModbusController.java
│ │ ├── ModbusMasterController.java
│ │ └── ModbusTrendController.java
│ ├── monitor
│ │ ├── AbstractNotification.java
│ │ ├── CollectorNotification.java
│ │ ├── CollectorServerStatus.java
│ │ ├── MonitorApplication.java
│ │ ├── MonitorController.java
│ │ ├── MonitorLocalizer.java
│ │ └── OeeEventTrendController.java
│ ├── opc
│ │ ├── da
│ │ │ ├── OpcDaBrowserController.java
│ │ │ ├── OpcDaController.java
│ │ │ ├── OpcDaTagTreeItem.java
│ │ │ ├── OpcDaTagValueChart.java
│ │ │ └── OpcDaTrendController.java
│ │ └── ua
│ │ │ ├── OpcUaBrowserController.java
│ │ │ ├── OpcUaController.java
│ │ │ ├── OpcUaTreeNode.java
│ │ │ └── OpcUaTrendController.java
│ ├── operator
│ │ ├── MaterialSelectorController.java
│ │ ├── OperatorApplication.java
│ │ ├── OperatorController.java
│ │ ├── OperatorLocalizer.java
│ │ └── ReasonSelectorController.java
│ ├── proficy
│ │ ├── ProficyBrowserController.java
│ │ ├── ProficyController.java
│ │ └── ProficyTrendController.java
│ ├── reason
│ │ └── ReasonEditorController.java
│ ├── schedule
│ │ ├── TemplateScheduleDialogController.java
│ │ ├── WorkScheduleEditorController.java
│ │ └── WorkScheduleShiftsController.java
│ ├── script
│ │ └── EventResolverController.java
│ ├── socket
│ │ ├── WebSocketServerController.java
│ │ └── WebSocketTrendController.java
│ ├── tester
│ │ ├── TesterApplication.java
│ │ ├── TesterController.java
│ │ └── TesterLocalizer.java
│ └── uom
│ │ ├── UomConversionController.java
│ │ ├── UomEditorController.java
│ │ └── UomImporterController.java
│ └── tilesfx
│ ├── Alarm.java
│ ├── Command.java
│ ├── Section.java
│ ├── Tile.java
│ ├── TileBuilder.java
│ ├── TimeSection.java
│ ├── ValueObject.java
│ ├── chart
│ ├── ChartData.java
│ ├── MatrixFont.java
│ ├── MatrixFont8x8.java
│ ├── PixelMatrix.java
│ ├── PixelMatrixBuilder.java
│ ├── RadarChart.java
│ ├── SmoothedChart.java
│ ├── SunburstChart.java
│ └── TilesFXSeries.java
│ ├── events
│ ├── AlarmEvent.java
│ ├── AlarmEventListener.java
│ ├── ChartDataEvent.java
│ ├── ChartDataEventListener.java
│ ├── LocationEvent.java
│ ├── LocationEventListener.java
│ ├── PixelMatrixEvent.java
│ ├── PixelMatrixEventListener.java
│ ├── SmoothedChartEvent.java
│ ├── SwitchEvent.java
│ ├── TileEvent.java
│ ├── TileEventListener.java
│ ├── TimeEvent.java
│ ├── TimeEventListener.java
│ ├── TreeNodeEvent.java
│ └── TreeNodeEventListener.java
│ ├── fonts
│ └── Fonts.java
│ ├── skins
│ ├── BarChartItem.java
│ ├── BarChartTileSkin.java
│ ├── CalendarTileSkin.java
│ ├── CharacterTileSkin.java
│ ├── CircularProgressTileSkin.java
│ ├── ClockTileSkin.java
│ ├── CountryTileSkin.java
│ ├── CustomTileSkin.java
│ ├── DateTileSkin.java
│ ├── DonutChartTileSkin.java
│ ├── FlipTileSkin.java
│ ├── GaugeSparkLineTileSkin.java
│ ├── GaugeTileSkin.java
│ ├── HighLowTileSkin.java
│ ├── LeaderBoardItem.java
│ ├── LeaderBoardTileSkin.java
│ ├── MapTileSkin.java
│ ├── MatrixTileSkin.java
│ ├── NumberTileSkin.java
│ ├── PercentageTileSkin.java
│ ├── PlusMinusTileSkin.java
│ ├── RadarChartTileSkin.java
│ ├── RadialChartTileSkin.java
│ ├── RadialPercentageTileSkin.java
│ ├── SliderTileSkin.java
│ ├── SmoothAreaChartTileSkin.java
│ ├── SmoothedChartTileSkin.java
│ ├── SparkLineTileSkin.java
│ ├── StockTileSkin.java
│ ├── SunburstChartTileSkin.java
│ ├── SwitchSliderTileSkin.java
│ ├── SwitchTileSkin.java
│ ├── TextTileSkin.java
│ ├── TileSkin.java
│ ├── TimeTileSkin.java
│ ├── TimerControlTileSkin.java
│ └── WorldMapTileSkin.java
│ └── tools
│ ├── CatmullRom.java
│ ├── Country.java
│ ├── CountryGroup.java
│ ├── CountryPath.java
│ ├── CtxBounds.java
│ ├── CtxCornerRadii.java
│ ├── FlowGridPane.java
│ ├── GradientLookup.java
│ ├── Helper.java
│ ├── Location.java
│ ├── MovingAverage.java
│ ├── NiceScale.java
│ ├── NotifyRegion.java
│ ├── Point.java
│ ├── SectionComparator.java
│ ├── Statistics.java
│ ├── TimeData.java
│ ├── TimeSectionComparator.java
│ └── TreeNode.java
└── resources
├── css
├── dashboard.css
└── pareto_chart.css
├── fxml
├── AvailabilityEditor.fxml
├── CollectorApplication.fxml
├── CronEditor.fxml
├── CronHelp.fxml
├── CronTrend.fxml
├── Dashboard.fxml
├── DashboardDialog.fxml
├── DataCollector.fxml
├── DatabaseServer.fxml
├── DatabaseTrend.fxml
├── DesignerApplication.fxml
├── EmailServer.fxml
├── EmailTrend.fxml
├── EntityWorkSchedule.fxml
├── EquipmentMaterial.fxml
├── EquipmentResolver.fxml
├── EventResolver.fxml
├── FileShare.fxml
├── FileTrend.fxml
├── GenericSource.fxml
├── HttpServer.fxml
├── HttpTrend.fxml
├── JMSTrend.fxml
├── KafkaServer.fxml
├── KafkaTrend.fxml
├── MaterialEditor.fxml
├── MaterialSelector.fxml
├── MenuTest.fxml
├── MessagingTrend.fxml
├── ModbusMaster.fxml
├── ModbusTrend.fxml
├── MonitorApplication.fxml
├── MqBroker.fxml
├── MqttServer.fxml
├── MqttTrend.fxml
├── OeeEventTrend.fxml
├── OpcDaBrowser.fxml
├── OpcDaTrend.fxml
├── OpcUaBrowser.fxml
├── OpcUaTrend.fxml
├── OperatorApplication.fxml
├── ProductionEditor.fxml
├── ProficyBrowser.fxml
├── ProficyTrend.fxml
├── ReasonEditor.fxml
├── ReasonSelector.fxml
├── SampleChart.fxml
├── SetupEditor.fxml
├── Splash.fxml
├── TemplateScheduleDialog.fxml
├── TesterApplication.fxml
├── TrendChart.fxml
├── UomConversion.fxml
├── UomEditor.fxml
├── UomImport.fxml
├── WebSocketServer.fxml
├── WebSocketTrend.fxml
├── WorkScheduleEditor.fxml
└── WorkScheduleShifts.fxml
├── help
└── CronExpression.html
├── i18n
├── CollectorError.properties
├── CollectorLang.properties
├── DesignerError.properties
├── DesignerLang.properties
├── MonitorError.properties
├── MonitorLang.properties
├── OperatorError.properties
├── OperatorLang.properties
├── TesterError.properties
└── TesterLang.properties
├── images
├── About.png
├── Add.png
├── Apply.png
├── Area.png
├── Availability.png
├── Backup.png
├── Cancel.png
├── Category.png
├── Changed.png
├── ChartXY.png
├── Choose.png
├── ChooseFile.png
├── Clear.png
├── Clock.png
├── Collect.png
├── Connect.png
├── Convert.png
├── Dashboard.png
├── DataSource.png
├── DatabaseSource.png
├── Delete.png
├── Disconnect.png
├── Edit.png
├── Editor.png
├── EmailSource.png
├── Enterprise.png
├── Equipment.png
├── Execute.png
├── FactoryEquipment.jpg
├── FileSource.png
├── Filter.png
├── Folder.png
├── Help.png
├── HttpSource.png
├── Import.png
├── Info.png
├── JMSSource.png
├── Job.png
├── KafkaSource.png
├── Login.png
├── MQTTSource.png
├── Material.png
├── ModbusSource.png
├── New.png
├── Node.png
├── OK.png
├── OpcDaSource.png
├── OpcUaSource.png
├── Point85.png
├── Product.png
├── ProductionLine.png
├── Proficy.png
├── RMQSource.png
├── Read.png
├── Reason.png
├── Refresh.png
├── RefreshAll.png
├── Remove.png
├── Restore.png
├── Save.png
├── SaveAll.png
├── Script.png
├── Setup.png
├── Shifts.png
├── Shutdown.png
├── Site.png
├── Source.png
├── Start.png
├── Startup.png
├── Stop.png
├── Tag.png
├── Tool.png
├── UOM.png
├── Update.png
├── Value.png
├── Watch.png
├── WebSource.png
├── WorkCell.png
├── WorkSchedule.png
└── Write.png
└── tilesfx
├── fonts
├── Lato-Bol.otf
├── Lato-Lig.otf
└── Lato-Reg.otf
└── tilesfx.css
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Kent Randall
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.
22 |
--------------------------------------------------------------------------------
/build-all.bat:
--------------------------------------------------------------------------------
1 | echo on
2 | rem Windows shell script to build all of the Point85 projects
3 | rem JAVA_HOME and JAVAFX_HOME environment variables must be set
4 | rem (1) Domain
5 | cd ../OEE-Domain
6 | call install-oee-domain-jar.bat
7 | rem (2) JFX applications
8 | cd ../OEE-Designer
9 | call build-jfx-app.bat
10 | rem (3) Collector
11 | cd ../OEE-Collector
12 | call build-collector.bat
13 | rem (4) Distribution zip
14 | cd ../OEE-Designer
15 | call build-distro.bat
16 | rem (5) Operations
17 | cd ../OEE-Operations
18 | call build-operator.bat
19 | cd ../OEE-Designer
20 | rem Build Finished
--------------------------------------------------------------------------------
/build-distro.bat:
--------------------------------------------------------------------------------
1 | rem build distribution zip file
2 | call ant build-distro
--------------------------------------------------------------------------------
/build-jfx-app.bat:
--------------------------------------------------------------------------------
1 | rem Maven install script for OEE Designer jar
2 | call set JAVAFX_HOME
3 | call mvn -v
4 | call mvn clean package
--------------------------------------------------------------------------------
/config/logging/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 | %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c{1} - %msg%n
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
36 |
37 |
41 |
42 |
46 |
47 |
48 |
49 |
50 |
51 |
55 |
56 |
60 |
61 |
65 |
66 |
70 |
71 |
75 |
76 |
80 |
81 |
85 |
86 |
90 |
91 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/config/security/point85-keystore.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/config/security/point85-keystore.jks
--------------------------------------------------------------------------------
/database/demo/OeeDemoDB.p85x:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/database/demo/OeeDemoDB.p85x
--------------------------------------------------------------------------------
/database/demo/PackMLReasons.p85x:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/database/demo/PackMLReasons.p85x
--------------------------------------------------------------------------------
/database/hsql/create_event_table.sql:
--------------------------------------------------------------------------------
1 | -- HSQLDB script file for creating the database event interface table, schema version 1
2 | -- set to your schema
3 | SET AUTOCOMMIT TRUE;
4 |
5 | /****** Database event table ******/
6 | DROP TABLE DB_EVENT IF EXISTS;
7 |
8 | CREATE CACHED TABLE DB_EVENT (
9 | EVENT_KEY bigint GENERATED BY DEFAULT AS IDENTITY,
10 | SOURCE_ID varchar(128) NOT NULL,
11 | IN_VALUE varchar(64) NOT NULL,
12 | EVENT_TIME timestamp(3) NULL,
13 | EVENT_TIME_OFFSET int NULL,
14 | STATUS varchar(16) NOT NULL,
15 | ERROR varchar(512) NULL,
16 | REASON varchar(64) NULL,
17 | PRIMARY KEY (EVENT_KEY)
18 | );
19 |
--------------------------------------------------------------------------------
/database/hsql/create_event_table_indexes.sql:
--------------------------------------------------------------------------------
1 | -- HSQLDB script file for creating the database event interface index, schema version 1
2 | -- set to your schema
3 | SET AUTOCOMMIT TRUE;
4 |
5 | CREATE INDEX IDX_EVT_STATUS ON DB_EVENT (STATUS);
--------------------------------------------------------------------------------
/database/hsql/create_indexes.sql:
--------------------------------------------------------------------------------
1 | -- HSQLDB index creation script file, schema version 1
2 | -- set to your schema
3 | SET AUTOCOMMIT TRUE;
4 |
5 | CREATE UNIQUE INDEX IDX_ENT_NAME ON PLANT_ENTITY (NAME);
6 | CREATE UNIQUE INDEX IDX_REASON_NAME ON REASON (NAME);
7 | CREATE UNIQUE INDEX IDX_MATL_NAME ON MATERIAL (NAME);
8 | CREATE UNIQUE INDEX IDX_SOURCE_NAME ON DATA_SOURCE (NAME);
9 | CREATE UNIQUE INDEX IDX_ER_SOURCE_ID ON EVENT_RESOLVER (SOURCE_ID);
10 | CREATE UNIQUE INDEX IDX_UOM_SYMBOL ON UOM (SYMBOL);
11 | CREATE UNIQUE INDEX IDX_SCHED_NAME ON WORK_SCHEDULE (NAME);
12 | CREATE UNIQUE INDEX IDX_SHIFT_NAME_WS ON SHIFT (NAME, WS_KEY);
13 | CREATE UNIQUE INDEX IDX_BREAK_NAME_SHIFT ON BREAK_PERIOD (NAME, SHIFT_KEY);
14 | CREATE UNIQUE INDEX IDX_TEAM_NAME_WS ON TEAM (NAME, WS_KEY);
15 | CREATE UNIQUE INDEX IDX_COLLECT_NAME ON COLLECTOR (NAME);
--------------------------------------------------------------------------------
/database/hsql/data/oeedb.data:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/database/hsql/data/oeedb.data
--------------------------------------------------------------------------------
/database/hsql/data/oeedb.lck:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/database/hsql/data/oeedb.lck
--------------------------------------------------------------------------------
/database/hsql/data/oeedb.properties:
--------------------------------------------------------------------------------
1 | #HSQL Database Engine 2.7.1
2 | #Mon Nov 07 17:38:03 PST 2022
3 | tx_timestamp=250
4 | modified=yes
5 | version=2.7.1
6 |
--------------------------------------------------------------------------------
/database/hsql/migrate_v4_v5.sql:
--------------------------------------------------------------------------------
1 | -- HSQLDB schema migration script file, schema version 4 to 5
2 | -- set to your schema
3 | SET AUTOCOMMIT TRUE;
4 |
5 | /****** BREAK table ******/
6 | DROP TABLE BREAK IF EXISTS;
7 |
8 | CREATE CACHED TABLE BREAK (
9 | BREAK_KEY bigint GENERATED BY DEFAULT AS IDENTITY,
10 | NAME nvarchar(64) NULL,
11 | DESCRIPTION nvarchar(128) NULL,
12 | START_TIME time(3) NULL,
13 | DURATION bigint NULL,
14 | SHIFT_KEY bigint NULL,
15 | LOSS nvarchar(32) NULL,
16 | PRIMARY KEY (BREAK_KEY)
17 | );
--------------------------------------------------------------------------------
/database/hsql/run_hsqldb_server.bat:
--------------------------------------------------------------------------------
1 | rem script to execute HSQLDB server locally
2 | java -classpath ../../lib/hsqldb-2.7.2.jar org.hsqldb.server.Server --database.0 file:data/oeedb --dbname.0 OEE
--------------------------------------------------------------------------------
/database/hsql/run_hsqldb_server.sh:
--------------------------------------------------------------------------------
1 | # script to execute HSQLDB server locally
2 | java -classpath ../../lib/hsqldb-2.7.2.jar org.hsqldb.server.Server --database.0 file:data/oeedb --dbname.0 OEE
--------------------------------------------------------------------------------
/database/hsql/server.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/database/hsql/server.properties
--------------------------------------------------------------------------------
/database/import/materials.csv:
--------------------------------------------------------------------------------
1 | B041918-1, Beer #1, Alcoholic
2 | B041918-2, Beer #2, Alcoholic
3 | W181904, Wine #1, Alcoholic
4 | 00168721952, Orange Soda, Non-Alcoholic
5 | 00168721949, Cherry Soda, Non-Alcoholic
--------------------------------------------------------------------------------
/database/import/reasons.csv:
--------------------------------------------------------------------------------
1 | Running, Normal production state, NO_LOSS
2 | Setups, Setup reasons, ,
3 | Setup1, Setup reason #1, SETUP, Setups
4 | Setup2, Setup reason #2, SETUP, Setups
5 | Planned Downtimes, Planned downtime reasons, ,
6 | Planned1, Downtime reason #1, PLANNED_DOWNTIME, Planned Downtimes
7 | Planned2, Downtime reason #2, PLANNED_DOWNTIME, Planned Downtimes
8 | Unplanned Downtimes, Unplanned downtime reasons, ,
9 | Unplanned1, Unplanned downtime reason #1, UNPLANNED_DOWNTIME, Unplanned Downtimes
10 | Unplanned2, Unplanned downtime reason #2, UNPLANNED_DOWNTIME, Unplanned Downtimes
11 | Short Stops, Minor stoppage reasons, ,
12 | Minor1, Minor stoppage reason #1, MINOR_STOPPAGES, Short Stops
13 | Minor2, Minor stoppage reason #2, MINOR_STOPPAGES, Short Stops
14 | Reject Codes, Codes for reject production, ,
15 | 100, Reject reason #1, REJECT_REWORK, Reject Codes
16 | 101, Reject reason #2, REJECT_REWORK, Reject Codes
17 | Startup Codes, Codes for startup production, ,
18 | 200, Startup reason #1, STARTUP_YIELD, Startup Codes
19 | 201, Startup reason #2, STARTUP_YIELD, Startup Codes
20 |
--------------------------------------------------------------------------------
/database/mssql/create_event_table.sql:
--------------------------------------------------------------------------------
1 | -- SQL Server script file for creating the database event interface table, schema version 3
2 | -- set to your database name
3 | USE [OEE]
4 | GO
5 |
6 | SET ANSI_NULLS ON
7 | GO
8 |
9 | SET QUOTED_IDENTIFIER ON
10 | GO
11 |
12 | SET ANSI_PADDING ON
13 | GO
14 |
15 | /****** Database event table ******/
16 | IF OBJECT_ID('dbo.DB_EVENT', 'U') IS NOT NULL
17 | DROP TABLE dbo.DB_EVENT
18 | GO
19 |
20 | CREATE TABLE [dbo].[DB_EVENT](
21 | [EVENT_KEY] [bigint] IDENTITY(1,1) NOT NULL,
22 | [SOURCE_ID] [nvarchar](128) NOT NULL,
23 | [IN_VALUE] [nvarchar](64) NOT NULL,
24 | [EVENT_TIME] [datetime2](3) NULL,
25 | [EVENT_TIME_OFFSET] int NULL,
26 | [STATUS] [nvarchar](16) NOT NULL,
27 | [ERROR] [nvarchar](512) NULL,
28 | [REASON] [nvarchar](64) NULL
29 | ) ON [PRIMARY]
30 | GO
31 | CREATE NONCLUSTERED INDEX [IDX_EVT_STATUS] ON [dbo].[DB_EVENT]
32 | (
33 | [STATUS] ASC
34 | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
35 | GO
--------------------------------------------------------------------------------
/database/mssql/migrate_v2_v3.sql:
--------------------------------------------------------------------------------
1 | -- SQL Server migration script, schema version 2 to 3 as of release 2.5.0
2 | -- set to your database name
3 | USE [MY_DB]
4 | GO
5 |
6 | SET ANSI_NULLS ON
7 | GO
8 |
9 | SET QUOTED_IDENTIFIER ON
10 | GO
11 |
12 | SET ANSI_PADDING ON
13 | GO
14 |
15 | alter table [dbo].[COLLECTOR] add [BROKER_TYPE] [nvarchar](16) NULL
16 | GO
17 |
18 | alter table [dbo].[PLANT_ENTITY] drop column WS_KEY
19 | GO
20 |
21 | alter table [dbo].[OEE_EVENT] add [COLLECTOR] [nvarchar](64) NULL
22 | GO
23 |
24 | /****** Plant Entity Work Schedule table ******/
25 | IF OBJECT_ID('dbo.ENTITY_SCHEDULE', 'U') IS NOT NULL
26 | DROP TABLE dbo.ENTITY_SCHEDULE
27 | GO
28 |
29 | CREATE TABLE [dbo].[ENTITY_SCHEDULE](
30 | [ES_KEY] [bigint] IDENTITY(1,1) NOT NULL,
31 | [ENT_KEY] [bigint] NULL,
32 | [WS_KEY] [bigint] NULL,
33 | [START_DATE_TIME] [datetime] NULL,
34 | [END_DATE_TIME] [datetime] NULL
35 | CONSTRAINT [PK_ENT_WS] PRIMARY KEY CLUSTERED
36 | (
37 | [ES_KEY] ASC
38 | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
39 | ) ON [PRIMARY]
40 | GO
--------------------------------------------------------------------------------
/database/mssql/migrate_v4_v5.sql:
--------------------------------------------------------------------------------
1 | -- SQL Server migration script, schema version 4 to 5
2 | -- set to your database name
3 | USE [MY_DB]
4 | GO
5 |
6 | SET ANSI_NULLS ON
7 | GO
8 |
9 | SET QUOTED_IDENTIFIER ON
10 | GO
11 |
12 | SET ANSI_PADDING ON
13 | GO
14 |
15 | /****** BREAK table ******/
16 | IF OBJECT_ID('dbo.BREAK', 'U') IS NOT NULL
17 | DROP TABLE dbo.BREAK;
18 | GO
19 |
20 | CREATE TABLE [dbo].[BREAK](
21 | [BREAK_KEY] [bigint] IDENTITY(1,1) NOT NULL,
22 | [NAME] [nvarchar](64) NULL,
23 | [DESCRIPTION] [nvarchar](128) NULL,
24 | [START_TIME] [time](3) NULL,
25 | [DURATION] [bigint] NULL,
26 | [SHIFT_KEY] [bigint] NULL,
27 | [LOSS] [nvarchar](32) NULL
28 | CONSTRAINT [PK_BREAK_PERIOD] PRIMARY KEY CLUSTERED
29 | (
30 | [BREAK_KEY] ASC
31 | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
32 | ) ON [PRIMARY]
33 | GO
--------------------------------------------------------------------------------
/database/mysql/create_event_table.sql:
--------------------------------------------------------------------------------
1 | -- MySQL script file for creating the database event interface table, schema version 3
2 | -- set to your database name
3 | USE oee;
4 |
5 | /****** Database event table ******/
6 | DROP TABLE IF EXISTS DB_EVENT;
7 |
8 | CREATE TABLE DB_EVENT (
9 | EVENT_KEY bigint AUTO_INCREMENT,
10 | SOURCE_ID varchar(128) NOT NULL,
11 | IN_VALUE varchar(64) NOT NULL,
12 | EVENT_TIME timestamp(3) NULL,
13 | EVENT_TIME_OFFSET int NULL,
14 | STATUS varchar(16) NOT NULL,
15 | ERROR varchar(512) NULL,
16 | REASON varchar(64) NULL,
17 | PRIMARY KEY (EVENT_KEY)
18 | ) ENGINE=INNODB;
19 | CREATE INDEX IDX_EVT_STATUS ON DB_EVENT (STATUS);
--------------------------------------------------------------------------------
/database/mysql/migrate_v4_v5.sql:
--------------------------------------------------------------------------------
1 | -- MySQL schema migration script file, schema version 4 to 5
2 | -- set to your database name
3 | USE oee;
4 |
5 | /****** BREAK table ******/
6 | DROP TABLE IF EXISTS BREAK;
7 |
8 | CREATE TABLE BREAK (
9 | BREAK_KEY bigint AUTO_INCREMENT,
10 | NAME varchar(64) NULL,
11 | DESCRIPTION varchar(128) NULL,
12 | START_TIME time NULL,
13 | DURATION bigint NULL,
14 | SHIFT_KEY bigint NULL,
15 | LOSS varchar(32) NULL,
16 | PRIMARY KEY (BREAK_KEY)
17 | ) ENGINE=INNODB;
--------------------------------------------------------------------------------
/database/oracle/create_event_table.sql:
--------------------------------------------------------------------------------
1 | -- Oracle script file for creating the database event interface table, schema version 2
2 | -- set to your schema and tablespace names
3 | --------------------------------------------------------
4 | -- DDL for Table DB_EVENT
5 | --------------------------------------------------------
6 | BEGIN
7 | EXECUTE IMMEDIATE 'DROP TABLE "SYSTEM"."DB_EVENT"';
8 | EXCEPTION
9 | WHEN OTHERS THEN
10 | IF SQLCODE != -942 THEN
11 | RAISE;
12 | END IF;
13 | END;
14 | /
15 | CREATE TABLE "SYSTEM"."DB_EVENT"
16 | (
17 | "EVENT_KEY" NUMBER(19,0) GENERATED ALWAYS AS IDENTITY,
18 | "SOURCE_ID" NVARCHAR2(128) NOT NULL,
19 | "IN_VALUE" NVARCHAR2(64) NOT NULL,
20 | "TIME" TIMESTAMP(3) NULL,
21 | "EVENT_TIME_OFFSET" NUMBER(10,0) NULL,
22 | "STATUS" NVARCHAR2(16) NOT NULL,
23 | "ERROR" NVARCHAR2(512) NULL,
24 | "REASON" NVARCHAR2(64) NULL,
25 | PRIMARY KEY (EVENT_KEY)
26 | ) TABLESPACE "SYSTEM" ;
27 | /
28 | CREATE INDEX "SYSTEM"."IDX_EVT_STATUS" ON "SYSTEM"."DB_EVENT" ("STATUS") TABLESPACE "SYSTEM" ;
29 | /
--------------------------------------------------------------------------------
/database/oracle/migrate_v4_v5.sql:
--------------------------------------------------------------------------------
1 | -- Oracle migration script file, schema version 4 to 5
2 | -- set to your schema and tablespace names
3 |
4 | --------------------------------------------------------
5 | -- DDL for Table BREAK
6 | --------------------------------------------------------
7 | BEGIN
8 | EXECUTE IMMEDIATE 'DROP TABLE "SYSTEM"."BREAK"';
9 | EXCEPTION
10 | WHEN OTHERS THEN
11 | IF SQLCODE != -942 THEN
12 | RAISE;
13 | END IF;
14 | END;
15 | /
16 | CREATE TABLE "SYSTEM"."BREAK"
17 | (
18 | "BREAK_KEY" NUMBER(19,0) GENERATED ALWAYS AS IDENTITY,
19 | "NAME" NVARCHAR2(64) NULL,
20 | "DESCRIPTION" NVARCHAR2(128) NULL,
21 | "START_TIME" TIMESTAMP(3) NULL,
22 | "DURATION" NUMBER(19,0) NULL,
23 | "SHIFT_KEY" NUMBER(19,0) NULL,
24 | "LOSS" NVARCHAR2(32) NULL,
25 | PRIMARY KEY (BREAK_KEY)
26 | ) TABLESPACE "SYSTEM" ;
27 | /
--------------------------------------------------------------------------------
/database/postgresql/create_event_table.sql:
--------------------------------------------------------------------------------
1 | -- PostgresQL script file for creating the database event interface table, schema version 2
2 |
3 | /****** Database event table ******/
4 | DROP TABLE IF EXISTS DB_EVENT;
5 |
6 | CREATE TABLE DB_EVENT (
7 | EVENT_KEY bigint GENERATED ALWAYS AS IDENTITY,
8 | SOURCE_ID varchar(128) NOT NULL,
9 | IN_VALUE varchar(64) NOT NULL,
10 | EVENT_TIME timestamp(3) NULL,
11 | EVENT_TIME_OFFSET int NULL,
12 | STATUS varchar(16) NOT NULL,
13 | ERROR varchar(512) NULL,
14 | REASON varchar(64) NULL,
15 | CONSTRAINT PK_DB_EVT_KEY PRIMARY KEY(EVENT_KEY)
16 | );
17 | CREATE INDEX IDX_EVT_STATUS ON DB_EVENT (STATUS);
--------------------------------------------------------------------------------
/database/postgresql/migrate_v4_v5.sql:
--------------------------------------------------------------------------------
1 | -- PostgresQL schema migration script file, schema version 4 to 5
2 |
3 | /****** BREAK table ******/
4 | DROP TABLE IF EXISTS BREAK;
5 |
6 | CREATE TABLE BREAK (
7 | BREAK_KEY bigint GENERATED ALWAYS AS IDENTITY,
8 | NAME varchar(64) NULL,
9 | DESCRIPTION varchar(128) NULL,
10 | START_TIME time(3) NULL,
11 | DURATION bigint NULL,
12 | SHIFT_KEY bigint NULL,
13 | LOSS varchar(32) NULL,
14 | CONSTRAINT PK_BREAK_KEY PRIMARY KEY(BREAK_KEY)
15 | );
--------------------------------------------------------------------------------
/docs/AvailabilityPage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/AvailabilityPage.png
--------------------------------------------------------------------------------
/docs/PackML and Point85 OEE.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/PackML and Point85 OEE.pdf
--------------------------------------------------------------------------------
/docs/Point85 OEE Getting Started Guide.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/Point85 OEE Getting Started Guide.pdf
--------------------------------------------------------------------------------
/docs/Point85 OEE Getting Started Guide.tmdx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/Point85 OEE Getting Started Guide.tmdx
--------------------------------------------------------------------------------
/docs/Point85 OEE User Guide.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/Point85 OEE User Guide.pdf
--------------------------------------------------------------------------------
/docs/Point85 OEE User Guide.tmdx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/Point85 OEE User Guide.tmdx
--------------------------------------------------------------------------------
/docs/System Architecture.prdx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/System Architecture.prdx
--------------------------------------------------------------------------------
/docs/availability-trend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/availability-trend.png
--------------------------------------------------------------------------------
/docs/dashboard-events.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/dashboard-events.png
--------------------------------------------------------------------------------
/docs/dashboard-first-level-pareto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/dashboard-first-level-pareto.png
--------------------------------------------------------------------------------
/docs/dashboard-second-level-pareto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/dashboard-second-level-pareto.png
--------------------------------------------------------------------------------
/docs/dashboard-tiles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/dashboard-tiles.png
--------------------------------------------------------------------------------
/docs/dashboard-time-losses.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/dashboard-time-losses.png
--------------------------------------------------------------------------------
/docs/designer-opc-da-trend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/designer-opc-da-trend.png
--------------------------------------------------------------------------------
/docs/designer-plant-entities.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/designer-plant-entities.png
--------------------------------------------------------------------------------
/docs/domain_docs.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/domain_docs.zip
--------------------------------------------------------------------------------
/docs/operator-availability.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/operator-availability.png
--------------------------------------------------------------------------------
/docs/operator-web-availability.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/operator-web-availability.png
--------------------------------------------------------------------------------
/docs/system-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/docs/system-architecture.png
--------------------------------------------------------------------------------
/install-oracle-jdbc.bat:
--------------------------------------------------------------------------------
1 | rem Maven install script for Oracle JDBC driver jar not in Maven Central, i.e. stored locally
2 | call mvn install:install-file -Dfile=C:\dev\OEE-Domain\lib\jdbc\ojdbc11.jar -DgroupId=com.oracle.jdbc -DartifactId=ojdbc11 -Dversion=11.0 -Dpackaging=jar
--------------------------------------------------------------------------------
/run-collector-app.bat:
--------------------------------------------------------------------------------
1 | rem Launch the Collector application (args: JDBC connection string, user name, password and optional collector name)
2 | start "" "%JAVA_HOME%\bin\javaw.exe" -cp ./oee-apps-3.12.2.jar;lib/*;lib/ext/* -p "%JAVAFX_HOME%\lib" --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication COLLECTOR jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-collector-app.sh:
--------------------------------------------------------------------------------
1 | # Launch the Collector application (args: JDBC connection string, user name, password and optional collector name)
2 | java -cp ./oee-apps-3.12.2.jar:lib/*:lib/ext/* -p $JAVAFX_HOME/lib --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication COLLECTOR jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-designer-app-debug.bat:
--------------------------------------------------------------------------------
1 | rem Launch the Designer application (args: JDBC connection string, user name, password and optional collector name)
2 | java.exe -Xdebug -Xrunjdwp:transport=dt_socket,address=8998,server=y -cp ./oee-apps-3.12.2.jar;lib/*;lib/ext/* -p %JAVAFX_HOME%\lib --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication DESIGNER jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-designer-app.bat:
--------------------------------------------------------------------------------
1 | rem Launch the Designer application (args: JDBC connection string, user name, password and optional collector name)
2 | start "" "%JAVA_HOME%\bin\javaw.exe" -cp ./oee-apps-3.12.2.jar;lib/*;lib/ext/* -p "%JAVAFX_HOME%\lib" --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication DESIGNER jdbc:hsqldb:hsql://localhost/OEE SA
3 |
--------------------------------------------------------------------------------
/run-designer-app.sh:
--------------------------------------------------------------------------------
1 | # Launch the Designer application (args: JDBC connection string, user name, password and optional collector name)
2 | java -cp ./oee-apps-3.12.2.jar:lib/*:lib/ext/* -p $JAVAFX_HOME/lib --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication DESIGNER jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-monitor-app.bat:
--------------------------------------------------------------------------------
1 | rem Launch the Monitor application (args: JDBC connection string, user name, password and optional collector name)
2 | start "" "%JAVA_HOME%\bin\javaw.exe" -cp ./oee-apps-3.12.2.jar;lib/*;lib/ext/* -p "%JAVAFX_HOME%\lib" --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication MONITOR jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-monitor-app.sh:
--------------------------------------------------------------------------------
1 | # Launch the Monitor application (args: JDBC connection string, user name, password and optional collector name)
2 | java -cp ./oee-apps-3.12.2.jar:lib/*:lib/ext/* -p $JAVAFX_HOME/lib --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication MONITOR jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-operator-app.bat:
--------------------------------------------------------------------------------
1 | rem Launch the Operator application (args: JDBC connection string, user name, password and optional collector name)
2 | start "" "%JAVA_HOME%\bin\javaw.exe" -p "%JAVAFX_HOME%\lib" --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml -jar oee-apps-3.12.2.jar OPERATOR jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-operator-app.sh:
--------------------------------------------------------------------------------
1 | # Launch the Operator application (args: JDBC connection string, user name, password and optional collector name)
2 | java -p $JAVAFX_HOME/lib --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml -jar oee-apps-3.12.2.jar OPERATOR jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-tester-app.bat:
--------------------------------------------------------------------------------
1 | rem Launch the Tester application (args: JDBC connection string, user name, password and optional collector name)
2 | start "" "%JAVA_HOME%\bin\javaw.exe" -cp ./oee-apps-3.12.2.jar;lib/*;lib/ext/* -p "%JAVAFX_HOME%\lib" --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication TESTER jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/run-tester-app.sh:
--------------------------------------------------------------------------------
1 | # Launch the Tester application (args: JDBC connection string, user name, password and optional collector name)
2 | java -cp ./oee-apps-3.12.2.jar:lib/*:lib/ext/* -p $JAVAFX_HOME/lib --add-modules javafx.controls,javafx.fxml,javafx.web -Dlog4j2.configurationFile=config/logging/log4j2.xml org.point85.app.OeeApplication TESTER jdbc:hsqldb:hsql://localhost/OEE SA
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/DialogController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app;
2 |
3 | import javafx.fxml.FXML;
4 | import javafx.scene.control.Button;
5 | import javafx.scene.control.ContentDisplay;
6 | import javafx.stage.Stage;
7 |
8 | public abstract class DialogController {
9 | private boolean isCancelled = false;
10 |
11 | @FXML
12 | protected Button btOK;
13 |
14 | @FXML
15 | protected Button btCancel;
16 |
17 | // stage for the dialog
18 | @FXML
19 | private Stage dialogStage;
20 |
21 | public Stage getDialogStage() {
22 | return this.dialogStage;
23 | }
24 |
25 | // reference to the main app stage
26 | public void setDialogStage(Stage dialogStage) {
27 | this.dialogStage = dialogStage;
28 | }
29 |
30 | @FXML
31 | protected void onOK() {
32 | isCancelled = false;
33 |
34 | // close dialog
35 | this.dialogStage.close();
36 | }
37 |
38 | @FXML
39 | protected void onCancel() {
40 | isCancelled = true;
41 |
42 | // close dialog
43 | this.dialogStage.close();
44 | }
45 |
46 | // images for controls
47 | protected void setImages() {
48 | // OK or Done
49 | btOK.setGraphic(ImageManager.instance().getImageView(Images.OK));
50 | btOK.setContentDisplay(ContentDisplay.LEFT);
51 |
52 | // Cancel
53 | if (btCancel != null) {
54 | btCancel.setGraphic(ImageManager.instance().getImageView(Images.CANCEL));
55 | btCancel.setContentDisplay(ContentDisplay.LEFT);
56 | }
57 | }
58 |
59 | public boolean isCancelled() {
60 | return isCancelled;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/EntityNode.java:
--------------------------------------------------------------------------------
1 | package org.point85.app;
2 |
3 | import java.util.Objects;
4 |
5 | import org.point85.domain.plant.PlantEntity;
6 |
7 | // the wrapped PlantEntity
8 | public class EntityNode {
9 | private PlantEntity entity;
10 |
11 | public EntityNode(PlantEntity entity) {
12 | setPlantEntity(entity);
13 | }
14 |
15 | public PlantEntity getPlantEntity() {
16 | return entity;
17 | }
18 |
19 | public void setPlantEntity(PlantEntity entity) {
20 | this.entity = entity;
21 | }
22 |
23 | @Override
24 | public int hashCode() {
25 | return Objects.hash(entity.getName());
26 | }
27 |
28 | @Override
29 | public boolean equals(Object obj) {
30 | if (obj instanceof EntityNode) {
31 | EntityNode other = (EntityNode) obj;
32 | if (entity.getName().equals(other.entity.getName())) {
33 | return true;
34 | }
35 | }
36 | return false;
37 | }
38 |
39 | @Override
40 | public String toString() {
41 | String description = entity.getDescription() != null ? entity.getDescription() : "";
42 | return entity.getName() + " (" + description + ")";
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/Images.java:
--------------------------------------------------------------------------------
1 | package org.point85.app;
2 |
3 | public enum Images {
4 | POINT85, NEW, ADD, REMOVE, SAVE, SAVE_ALL, DELETE, REFRESH, REFRESH_ALL, OK, CANCEL, UPDATE, CHOOSE,
5 | UOM, CONVERT, SOURCE, IMPORT, REASON, MATERIAL, SCHEDULE, SCRIPT, CONNECT, DISCONNECT, CLEAR, TAG,
6 | EXECUTE, APPLY, START, STOP, DASHBOARD, FOLDER, VALUE, CHANGED, CATEGORY, COLLECTOR, ENTERPRISE, SITE,
7 | AREA, LINE, CELL, EQUIPMENT, OPC_UA, OPC_DA, HTTP, RMQ, JMS, MQTT, MODBUS, DB, FILE, WEB, STARTUP, SHUTDOWN,
8 | WATCH, SPLASH, ABOUT, CHOOSE_FILE, SHIFT, PRODUCT, SETUP, AVAILABILITY, CHARTXY, READ, WRITE, HELP, CRON, KAFKA, EMAIL,
9 | PROFICY, FILTER, SOURCE_MENU, EDITOR_MENU, TOOL_MENU, HELP_MENU, BACKUP, RESTORE;
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/MaterialNode.java:
--------------------------------------------------------------------------------
1 | package org.point85.app;
2 |
3 | import org.point85.domain.plant.Material;
4 |
5 | // class for holding attributes of Material in a tree view leaf node
6 | public class MaterialNode {
7 | // material
8 | private Material material;
9 |
10 | // category name
11 | private String category;
12 |
13 | public MaterialNode(String category) {
14 | this.category = category;
15 | }
16 |
17 | public MaterialNode(Material material) {
18 | setMaterial(material);
19 | }
20 |
21 | public String getCategory() {
22 | return category;
23 | }
24 |
25 | public Material getMaterial() {
26 | return material;
27 | }
28 |
29 | public void setMaterial(Material material) {
30 | this.material = material;
31 |
32 | // category could have changed
33 | if (material != null) {
34 | this.category = material.getCategory();
35 | }
36 | }
37 |
38 | public boolean isMaterial() {
39 | return material != null;
40 | }
41 |
42 | @Override
43 | public String toString() {
44 | if (material != null) {
45 | String description = material.getDescription();
46 | String value = material.getName();
47 | if (description != null) {
48 | value += " (" + material.getDescription() + ")";
49 | }
50 | return value;
51 | } else {
52 | return category;
53 | }
54 | }
55 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/ReasonNode.java:
--------------------------------------------------------------------------------
1 | package org.point85.app;
2 |
3 | import org.point85.domain.plant.Reason;
4 |
5 | public class ReasonNode {
6 | private Reason reason;
7 |
8 | public ReasonNode(Reason reason) {
9 | setReason(reason);
10 | }
11 |
12 | public Reason getReason() {
13 | return reason;
14 | }
15 |
16 | public void setReason(Reason reason) {
17 | this.reason = reason;
18 | }
19 |
20 | @Override
21 | public String toString() {
22 | String value = "";
23 | if (reason != null) {
24 | value = reason.getName() + " (" + reason.getDescription() + ")";
25 | }
26 | return value;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/SplashController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app;
2 |
3 | import org.point85.domain.DomainUtils;
4 |
5 | import javafx.fxml.FXML;
6 | import javafx.scene.control.Label;
7 | import javafx.scene.image.ImageView;
8 |
9 | public class SplashController {
10 |
11 | static final int SPLASH_WIDTH = 650;
12 | static final int SPLASH_HEIGHT = 225;
13 |
14 | @FXML
15 | private ImageView ivPoint85;
16 |
17 | @FXML
18 | private Label lbSplash;
19 |
20 | @FXML
21 | private ImageView ivSplash;
22 |
23 | @FXML
24 | private Label lbVersion;
25 |
26 | void initialize() {
27 | // Point85
28 | ivPoint85.setImage(ImageManager.instance().getImage(Images.POINT85));
29 |
30 | // main image
31 | ivSplash.setImage(ImageManager.instance().getImage(Images.SPLASH));
32 |
33 | // version info
34 | lbVersion.setText(DomainUtils.getVersionInfo());
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/charts/CategoryClickListener.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.charts;
2 |
3 | import javafx.scene.chart.XYChart;
4 |
5 | public interface CategoryClickListener {
6 | void onClickCategory(XYChart.Data item);
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/charts/DataSubscriber.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.charts;
2 |
3 | public interface DataSubscriber {
4 | void subscribeToDataSource() throws Exception;
5 | void unsubscribeFromDataSource() throws Exception;
6 | boolean isSubscribed();
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/charts/InterpolationType.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.charts;
2 |
3 | import org.point85.app.designer.DesignerLocalizer;
4 |
5 | public enum InterpolationType {
6 | LINEAR, STAIR_STEP;
7 |
8 | @Override
9 | public String toString() {
10 | String key = null;
11 |
12 | switch (this) {
13 | case LINEAR:
14 | key = "linear.type";
15 | break;
16 | case STAIR_STEP:
17 | key = "stair.step.type";
18 | break;
19 | default:
20 | break;
21 | }
22 | return DesignerLocalizer.instance().getLangString(key);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/charts/StringOrdinal.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.charts;
2 |
3 | import java.util.Objects;
4 |
5 | public class StringOrdinal {
6 | private Integer axisKey;
7 |
8 | private String axisValue;
9 |
10 | public StringOrdinal(Integer axisKey, String axisValue) {
11 | this.axisKey = axisKey;
12 | this.axisValue = axisValue;
13 | }
14 |
15 | public Integer getAxisKey() {
16 | return axisKey;
17 | }
18 |
19 | public void setAxisKey(Integer axisKey) {
20 | this.axisKey = axisKey;
21 | }
22 |
23 | public String getAxisValue() {
24 | return axisValue;
25 | }
26 |
27 | public void setAxisValue(String axisValue) {
28 | this.axisValue = axisValue;
29 | }
30 |
31 | @Override
32 | public boolean equals(Object obj) {
33 | if (obj instanceof StringOrdinal) {
34 | StringOrdinal other = (StringOrdinal) obj;
35 | if (getAxisKey().equals(other.getAxisKey())) {
36 | return true;
37 | }
38 | }
39 | return false;
40 | }
41 |
42 | @Override
43 | public int hashCode() {
44 | return Objects.hashCode(axisValue);
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/collector/CollectorApplication.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.collector;
2 |
3 | import org.point85.app.FXMLLoaderFactory;
4 | import org.point85.app.ImageManager;
5 | import org.point85.app.Images;
6 | import org.slf4j.Logger;
7 | import org.slf4j.LoggerFactory;
8 |
9 | import javafx.fxml.FXMLLoader;
10 | import javafx.scene.Scene;
11 | import javafx.scene.layout.AnchorPane;
12 | import javafx.stage.Stage;
13 |
14 | public class CollectorApplication {
15 | // logger
16 | private static final Logger logger = LoggerFactory.getLogger(CollectorApplication.class);
17 |
18 | // main controller
19 | private CollectorController collectorController;
20 |
21 | // name of a specific collector on this host
22 | private String collectorName;
23 |
24 | public CollectorApplication(String collectorName) {
25 | this.setCollectorName(collectorName);
26 | }
27 |
28 | public void start(Stage primaryStage) {
29 | try {
30 | FXMLLoader loader = FXMLLoaderFactory.collectorApplicationLoader();
31 | AnchorPane mainLayout = loader.getRoot();
32 |
33 | collectorController = loader.getController();
34 | collectorController.initialize(collectorName);
35 |
36 | Scene scene = new Scene(mainLayout);
37 |
38 | primaryStage.setTitle(CollectorLocalizer.instance().getLangString("collector.app.title"));
39 | primaryStage.getIcons().add(ImageManager.instance().getImage(Images.POINT85));
40 | primaryStage.setScene(scene);
41 | primaryStage.show();
42 | } catch (Exception e) {
43 | logger.error(e.getMessage());
44 | stop();
45 | }
46 | }
47 |
48 | public void stop() {
49 | if (collectorController != null) {
50 | collectorController.stop();
51 | }
52 | }
53 |
54 | public String getCollectorName() {
55 | return collectorName;
56 | }
57 |
58 | public void setCollectorName(String collectorName) {
59 | this.collectorName = collectorName;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/collector/CollectorLocalizer.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.collector;
2 |
3 | import org.point85.domain.i18n.Localizer;
4 |
5 | /**
6 | * Provides localization services for the Collector application classes
7 | */
8 | public class CollectorLocalizer extends Localizer {
9 | // name of resource bundle with translatable strings for text
10 | private static final String LANG_BUNDLE_NAME = "i18n.CollectorLang";
11 |
12 | // name of resource bundle with translatable strings for exception messages
13 | private static final String ERROR_BUNDLE_NAME = "i18n.CollectorError";
14 |
15 | // Singleton
16 | private static CollectorLocalizer localizer;
17 |
18 | private CollectorLocalizer() {
19 | setLangBundle(LANG_BUNDLE_NAME);
20 | setErrorBundle(ERROR_BUNDLE_NAME);
21 | }
22 |
23 | public static CollectorLocalizer instance() {
24 | if (localizer == null) {
25 | localizer = new CollectorLocalizer();
26 | }
27 | return localizer;
28 | }
29 |
30 | @Override
31 | public String getLangBundleName() {
32 | return LANG_BUNDLE_NAME;
33 | }
34 |
35 | @Override
36 | public String getErrorBundleName() {
37 | return ERROR_BUNDLE_NAME;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/cron/CronHelpController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.cron;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.InputStreamReader;
5 | import java.net.URL;
6 |
7 | import org.point85.app.AppUtils;
8 | import org.point85.app.designer.DesignerDialogController;
9 |
10 | import javafx.fxml.FXML;
11 | import javafx.scene.web.WebView;
12 |
13 | public class CronHelpController extends DesignerDialogController {
14 |
15 | @FXML
16 | private WebView helpView;
17 |
18 | public void readHelpFile() {
19 | // read help text
20 | URL url = getClass().getResource("/help/CronExpression.html");
21 |
22 | try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) {
23 |
24 | String helpText = "";
25 | String line;
26 | while ((line = reader.readLine()) != null) {
27 | helpText += line;
28 | }
29 |
30 | reader.close();
31 |
32 | helpView.getEngine().loadContent(helpText);
33 | } catch (Exception e) {
34 | AppUtils.showErrorDialog(e);
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/dashboard/DashboardDialogController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.dashboard;
2 |
3 | import org.point85.app.designer.DesignerDialogController;
4 |
5 | import javafx.fxml.FXML;
6 |
7 | public class DashboardDialogController extends DesignerDialogController {
8 | private DashboardController dashboardController;
9 |
10 | public DashboardController getDashboardController() {
11 | return dashboardController;
12 | }
13 |
14 | public void setDashboardController(DashboardController dashboardController) {
15 | this.dashboardController = dashboardController;
16 | }
17 |
18 | @FXML
19 | public void initialize() {
20 | // images for buttons
21 | setImages();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/designer/ConnectionState.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.designer;
2 |
3 | import javafx.scene.paint.Color;
4 |
5 | public enum ConnectionState {
6 | DISCONNECTED, CONNECTING, CONNECTED;
7 |
8 | // connection state colors
9 | public static final Color CONNECTED_COLOR = Color.GREEN;
10 | public static final Color CONNECTING_COLOR = Color.BLUE;
11 | public static final Color DISCONNECTED_COLOR = Color.BLACK;
12 |
13 | @Override
14 | public String toString() {
15 | String key = null;
16 |
17 | switch (this) {
18 | case CONNECTED:
19 | key = "connected.state";
20 | break;
21 | case CONNECTING:
22 | key = "connecting.state";
23 | break;
24 | case DISCONNECTED:
25 | key = "disconnected.state";
26 | break;
27 | default:
28 | break;
29 | }
30 | return DesignerLocalizer.instance().getLangString(key);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/designer/DesignerController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.designer;
2 |
3 | // base controller class
4 | public abstract class DesignerController {
5 | // Reference to the main application
6 | private DesignerApplication app;
7 |
8 | protected DesignerApplication getApp() {
9 | return this.app;
10 | }
11 |
12 | public void setApp(DesignerApplication app) {
13 | this.app = app;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/designer/DesignerDialogController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.designer;
2 |
3 | import java.io.File;
4 |
5 | import org.point85.app.AppUtils;
6 | import org.point85.app.DialogController;
7 | import org.point85.domain.exim.Exporter;
8 |
9 | import javafx.scene.paint.Color;
10 |
11 | public abstract class DesignerDialogController extends DialogController {
12 | protected static final Color STARTED_COLOR = Color.GREEN;
13 | protected static final Color STOPPED_COLOR = Color.BLACK;
14 |
15 | // Reference to the main application
16 | private DesignerApplication app;
17 |
18 | public DesignerApplication getApp() {
19 | return this.app;
20 | }
21 |
22 | public void setApp(DesignerApplication app) {
23 | this.app = app;
24 | }
25 |
26 | protected void backupToFile(Class> clazz) {
27 | try {
28 | // show file chooser
29 | File file = AppUtils.showFileSaveDialog(getApp().getLastDirectory());
30 |
31 | if (file != null) {
32 | getApp().setLastDirectory(file.getParentFile());
33 |
34 | // backup
35 | Exporter.instance().backup(clazz, file);
36 |
37 | AppUtils.showInfoDialog(
38 | DesignerLocalizer.instance().getLangString("backup.successful", file.getCanonicalPath()));
39 | }
40 | } catch (Exception e) {
41 | AppUtils.showErrorDialog(e);
42 | }
43 | }
44 |
45 | protected File getBackupFile() throws Exception {
46 | // show file chooser
47 | File file = AppUtils.showFileSaveDialog(getApp().getLastDirectory());
48 |
49 | if (file != null) {
50 | getApp().setLastDirectory(file.getParentFile());
51 | }
52 | return file;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/designer/DesignerLocalizer.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.designer;
2 |
3 | import org.point85.domain.i18n.Localizer;
4 |
5 | /**
6 | * Provides localization services for the Designer application classes
7 | */
8 | public class DesignerLocalizer extends Localizer {
9 | // name of resource bundle with translatable strings for text
10 | private static final String LANG_BUNDLE_NAME = "i18n.DesignerLang";
11 |
12 | // name of resource bundle with translatable strings for exception messages
13 | private static final String ERROR_BUNDLE_NAME = "i18n.DesignerError";
14 |
15 | // Singleton
16 | private static DesignerLocalizer localizer;
17 |
18 | private DesignerLocalizer() {
19 | setLangBundle(LANG_BUNDLE_NAME);
20 | setErrorBundle(ERROR_BUNDLE_NAME);
21 | }
22 |
23 | public static DesignerLocalizer instance() {
24 | if (localizer == null) {
25 | localizer = new DesignerLocalizer();
26 | }
27 | return localizer;
28 | }
29 |
30 | @Override
31 | public String getLangBundleName() {
32 | return LANG_BUNDLE_NAME;
33 | }
34 |
35 | @Override
36 | public String getErrorBundleName() {
37 | return ERROR_BUNDLE_NAME;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/messaging/JmsTrendController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.messaging;
2 |
3 | import org.point85.app.AppUtils;
4 | import org.point85.app.charts.DataSubscriber;
5 | import org.point85.app.designer.DesignerLocalizer;
6 | import org.point85.domain.jms.JmsClient;
7 | import org.point85.domain.jms.JmsMessageListener;
8 | import org.point85.domain.jms.JmsSource;
9 | import org.point85.domain.messaging.ApplicationMessage;
10 | import org.point85.domain.messaging.EquipmentEventMessage;
11 |
12 | import javafx.concurrent.WorkerStateEvent;
13 | import javafx.event.EventHandler;
14 | import javafx.fxml.FXML;
15 |
16 | public class JmsTrendController extends BaseMessagingTrendController implements JmsMessageListener, DataSubscriber {
17 | // AMQ JMS client
18 | private JmsClient jmsClient;
19 |
20 | @Override
21 | public boolean isSubscribed() {
22 | return jmsClient != null;
23 | }
24 |
25 | @Override
26 | public void subscribeToDataSource() throws Exception {
27 | if (jmsClient != null) {
28 | return;
29 | }
30 |
31 | jmsClient = new JmsClient();
32 |
33 | JmsSource source = (JmsSource) trendChartController.getEventResolver().getDataSource();
34 |
35 | jmsClient.startUp(source.getHost(), source.getPort(), source.getUserName(), source.getUserPassword(), this);
36 |
37 | // subscribe to event messages
38 | jmsClient.consumeEvents(true);
39 |
40 | // add to context
41 | getApp().getAppContext().addJMSClient(jmsClient);
42 |
43 | // start the trend
44 | trendChartController.onStartTrending();
45 | }
46 |
47 | @Override
48 | public void unsubscribeFromDataSource() throws Exception {
49 | if (jmsClient == null) {
50 | return;
51 | }
52 | jmsClient.disconnect();
53 |
54 | // remove from app context
55 | getApp().getAppContext().removeJMSClient(jmsClient);
56 | jmsClient = null;
57 |
58 | // stop the trend
59 | trendChartController.onStopTrending();
60 | }
61 |
62 | @Override
63 | public void onJmsMessage(ApplicationMessage appMessage) {
64 | if (!(appMessage instanceof EquipmentEventMessage)) {
65 | // ignore it
66 | return;
67 | }
68 |
69 | EquipmentEventMessage message = (EquipmentEventMessage) appMessage;
70 |
71 | ResolutionService service = new ResolutionService(message.getValue(), message.getTimestamp(),
72 | message.getReason());
73 |
74 | service.setOnFailed(new EventHandler() {
75 | @Override
76 | public void handle(WorkerStateEvent event) {
77 | Throwable t = event.getSource().getException();
78 |
79 | if (t != null) {
80 | // connection failed
81 | AppUtils.showErrorDialog(t.getMessage());
82 | }
83 | }
84 | });
85 |
86 | // run on application thread
87 | service.start();
88 | }
89 |
90 | @FXML
91 | private void onLoopbackTest() {
92 | try {
93 | if (jmsClient == null) {
94 | throw new Exception(DesignerLocalizer.instance().getErrorString("no.jms.broker"));
95 | }
96 |
97 | EquipmentEventMessage message = createEquipmentEventMessage();
98 | jmsClient.sendEventMessage(message);
99 | } catch (Exception e) {
100 | AppUtils.showErrorDialog(e);
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/messaging/KafkaTrendController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.messaging;
2 |
3 | import org.point85.app.AppUtils;
4 | import org.point85.app.charts.DataSubscriber;
5 | import org.point85.domain.kafka.KafkaMessageListener;
6 | import org.point85.domain.kafka.KafkaOeeClient;
7 | import org.point85.domain.kafka.KafkaSource;
8 | import org.point85.domain.messaging.ApplicationMessage;
9 | import org.point85.domain.messaging.EquipmentEventMessage;
10 |
11 | import javafx.concurrent.WorkerStateEvent;
12 | import javafx.event.EventHandler;
13 | import javafx.fxml.FXML;
14 |
15 | public class KafkaTrendController extends BaseMessagingTrendController implements KafkaMessageListener, DataSubscriber {
16 | // Kafka consumer client
17 | private KafkaOeeClient pubSub;
18 |
19 | @Override
20 | public boolean isSubscribed() {
21 | return pubSub != null;
22 | }
23 |
24 | @Override
25 | public void subscribeToDataSource() throws Exception {
26 | if (isSubscribed()) {
27 | return;
28 | }
29 |
30 | // create a consumer
31 | KafkaSource server = (KafkaSource) trendChartController.getEventResolver().getDataSource();
32 | pubSub = new KafkaOeeClient();
33 |
34 | pubSub.createConsumer(server, KafkaOeeClient.EVENT_TOPIC);
35 | Integer interval = trendChartController.getEventResolver().getUpdatePeriod();
36 |
37 | if (interval == null) {
38 | interval = KafkaOeeClient.DEFAULT_POLLING_INTERVAL;
39 | }
40 | pubSub.setPollingInterval(interval);
41 |
42 | // create a producer
43 | pubSub.createProducer(server, KafkaOeeClient.EVENT_TOPIC);
44 |
45 | // subscribe to event messages
46 | pubSub.startPolling();
47 |
48 | // add to context
49 | getApp().getAppContext().addKafkaClient(pubSub);
50 |
51 | // start the trend
52 | trendChartController.enableTrending(true);
53 |
54 | // start the trend
55 | trendChartController.onStartTrending();
56 |
57 | // register this client as a message listener too
58 | pubSub.registerListener(this);
59 | }
60 |
61 | @Override
62 | public void unsubscribeFromDataSource() throws Exception {
63 | if (pubSub != null) {
64 | pubSub.disconnect();
65 |
66 | // remove from app context
67 | getApp().getAppContext().removeKafkaClient(pubSub);
68 | pubSub = null;
69 | }
70 | }
71 |
72 | @FXML
73 | private void onLoopbackTest() {
74 | try {
75 | EquipmentEventMessage message = createEquipmentEventMessage();
76 | pubSub.sendEventMessage(message);
77 | } catch (Exception e) {
78 | AppUtils.showErrorDialog(e);
79 | }
80 | }
81 |
82 | @Override
83 | public void onKafkaMessage(ApplicationMessage appMessage) {
84 | if (!(appMessage instanceof EquipmentEventMessage)) {
85 | // ignore it
86 | return;
87 | }
88 |
89 | EquipmentEventMessage message = (EquipmentEventMessage) appMessage;
90 |
91 | ResolutionService service = new ResolutionService(message.getValue(), message.getTimestamp(),
92 | message.getReason());
93 |
94 | service.setOnFailed(new EventHandler() {
95 | @Override
96 | public void handle(WorkerStateEvent event) {
97 | Throwable t = event.getSource().getException();
98 |
99 | if (t != null) {
100 | // connection failed
101 | AppUtils.showErrorDialog(t.getMessage());
102 | }
103 | }
104 | });
105 |
106 | // run on application thread
107 | service.start();
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/modbus/ModbusController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.modbus;
2 |
3 | import org.point85.app.designer.DataSourceConnectionController;
4 | import org.point85.app.designer.DesignerLocalizer;
5 | import org.point85.domain.modbus.ModbusMaster;
6 | import org.point85.domain.modbus.ModbusSource;
7 |
8 | public abstract class ModbusController extends DataSourceConnectionController {
9 | // current slave source
10 | private ModbusSource modbusSource;
11 |
12 | public ModbusSource getSource() {
13 | return modbusSource;
14 | }
15 |
16 | protected void setSource(ModbusSource source) {
17 | this.modbusSource = source;
18 | }
19 |
20 | @Override
21 | protected void connectToDataSource() throws Exception {
22 | ModbusMaster modbusMaster = getApp().getModbusMaster();
23 |
24 | if (modbusMaster == null) {
25 | modbusMaster = getApp().createModbusMaster(modbusSource);
26 | } else {
27 | modbusMaster.setDataSource(modbusSource);
28 | }
29 |
30 | if (modbusMaster.getDataSource() == null) {
31 | if (modbusSource == null) {
32 | throw new Exception(DesignerLocalizer.instance().getErrorString("no.modbus.source"));
33 | }
34 | }
35 |
36 | // connect to Modbus master
37 | modbusMaster.connect();
38 | }
39 |
40 | protected void disconnectFromDataSource() {
41 | ModbusMaster modbusMaster = getApp().getModbusMaster();
42 |
43 | if (modbusMaster == null) {
44 | return;
45 | }
46 |
47 | // connect to Modbus master
48 | modbusMaster.disconnect();
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/monitor/AbstractNotification.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.monitor;
2 |
3 | import org.point85.domain.messaging.ApplicationMessage;
4 |
5 | /**
6 | * Base class for notifications
7 | *
8 | */
9 | public abstract class AbstractNotification {
10 | protected String collectorHostName;
11 | protected String collectorIpAddress;
12 | protected String timestamp;
13 |
14 | protected AbstractNotification() {
15 | }
16 |
17 | protected AbstractNotification(ApplicationMessage message) {
18 | this.collectorHostName = message.getSenderHostName();
19 | this.collectorIpAddress = message.getSenderHostAddress();
20 | this.timestamp = message.getTimestamp();
21 | }
22 |
23 | public String getCollectorHost() {
24 | return collectorHostName;
25 | }
26 |
27 | public String getTimestamp() {
28 | return timestamp;
29 | }
30 |
31 | public String getCollectorIpAddress() {
32 | return collectorIpAddress;
33 | }
34 |
35 | @Override
36 | public String toString() {
37 | return "Sender: " + collectorHostName + ", time: " + timestamp;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/monitor/CollectorNotification.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.monitor;
2 |
3 | import org.point85.domain.messaging.CollectorNotificationMessage;
4 | import org.point85.domain.messaging.NotificationSeverity;
5 |
6 | /**
7 | * Notification of a data collector event
8 | *
9 | */
10 | public class CollectorNotification extends AbstractNotification {
11 | private final NotificationSeverity severity;
12 | private final String text;
13 |
14 | public CollectorNotification(CollectorNotificationMessage message) {
15 | super(message);
16 | this.severity = message.getSeverity();
17 | this.text = message.getText();
18 | }
19 |
20 | public NotificationSeverity getSeverity() {
21 | return severity;
22 | }
23 |
24 | public String getText() {
25 | return text;
26 | }
27 |
28 | @Override
29 | public String toString() {
30 | return super.toString() + ", severity: " + severity + ", message: " + text;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/monitor/CollectorServerStatus.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.monitor;
2 |
3 | import java.util.Objects;
4 |
5 | import org.point85.domain.collector.DataCollector;
6 | import org.point85.domain.messaging.CollectorServerStatusMessage;
7 |
8 | public class CollectorServerStatus extends AbstractNotification {
9 | private String dataCollectorName;
10 | private String dataCollectorDescription;
11 | private double usedMemory = 0.0;
12 | private double freeMemory = 0.0;
13 | private double systemLoadAvg = 0.0;
14 |
15 | public CollectorServerStatus(CollectorServerStatusMessage message) {
16 | super(message);
17 | this.usedMemory = message.getUsedMemory();
18 | this.freeMemory = message.getFreeMemory();
19 | this.systemLoadAvg = message.getSystemLoadAvg();
20 | }
21 |
22 | public CollectorServerStatus(DataCollector collector) {
23 | dataCollectorName = collector.getName();
24 | dataCollectorDescription = collector.getDescription();
25 | collectorHostName = collector.getHost();
26 |
27 | }
28 |
29 | public double getUsedMemory() {
30 | return usedMemory;
31 | }
32 |
33 | public double getFreeMemory() {
34 | return freeMemory;
35 | }
36 |
37 | public double getSystemLoadAvg() {
38 | return systemLoadAvg;
39 | }
40 |
41 | public String getDataCollectorName() {
42 | return dataCollectorName;
43 | }
44 |
45 | public void setDataCollectorName(String dataCollectorName) {
46 | this.dataCollectorName = dataCollectorName;
47 | }
48 |
49 | public String getDataCollectorDescription() {
50 | return dataCollectorDescription;
51 | }
52 |
53 | public void setDataCollectorDescription(String dataCollectorDescription) {
54 | this.dataCollectorDescription = dataCollectorDescription;
55 | }
56 |
57 | @Override
58 | public int hashCode() {
59 | return Objects.hash(getCollectorHost());
60 | }
61 |
62 | @Override
63 | public boolean equals(Object other) {
64 |
65 | if (!(other instanceof CollectorServerStatus)) {
66 | return false;
67 | }
68 | CollectorServerStatus otherResolver = (CollectorServerStatus) other;
69 |
70 | String thisHost = getCollectorHost() ;
71 |
72 | if (thisHost == null) {
73 | return false;
74 | }
75 |
76 | // compare host names
77 | if (thisHost.equalsIgnoreCase(otherResolver.getCollectorHost())) {
78 | return true;
79 | } else {
80 | // compare host name (possible IP address) to other IP
81 | if (thisHost.equalsIgnoreCase(otherResolver.getCollectorIpAddress())) {
82 | return true;
83 | }
84 | }
85 | return false;
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/monitor/MonitorLocalizer.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.monitor;
2 |
3 | import org.point85.domain.i18n.Localizer;
4 |
5 | /**
6 | * Provides localization services for the Monitor application classes
7 | */
8 | public class MonitorLocalizer extends Localizer {
9 | // name of resource bundle with translatable strings for text
10 | private static final String LANG_BUNDLE_NAME = "i18n.MonitorLang";
11 |
12 | // name of resource bundle with translatable strings for exception messages
13 | private static final String ERROR_BUNDLE_NAME = "i18n.MonitorError";
14 |
15 | // Singleton
16 | private static MonitorLocalizer localizer;
17 |
18 | private MonitorLocalizer() {
19 | setLangBundle(LANG_BUNDLE_NAME);
20 | setErrorBundle(ERROR_BUNDLE_NAME);
21 | }
22 |
23 | public static MonitorLocalizer instance() {
24 | if (localizer == null) {
25 | localizer = new MonitorLocalizer();
26 | }
27 | return localizer;
28 | }
29 |
30 | @Override
31 | public String getLangBundleName() {
32 | return LANG_BUNDLE_NAME;
33 | }
34 |
35 | @Override
36 | public String getErrorBundleName() {
37 | return ERROR_BUNDLE_NAME;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/opc/da/OpcDaController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.opc.da;
2 |
3 | import org.point85.app.designer.DataSourceConnectionController;
4 | import org.point85.app.designer.DesignerLocalizer;
5 | import org.point85.domain.opc.da.OpcDaSource;
6 |
7 | public abstract class OpcDaController extends DataSourceConnectionController {
8 | // current source
9 | private OpcDaSource source;
10 |
11 | public OpcDaSource getSource() {
12 | if (source == null) {
13 | source = new OpcDaSource();
14 | }
15 | return this.source;
16 | }
17 |
18 | protected void setSource(OpcDaSource source) {
19 | this.source = source;
20 | }
21 |
22 | @Override
23 | protected void terminateConnectionService() throws Exception {
24 | // disconnect
25 | getApp().getOpcDaClient().disconnect();
26 | super.terminateConnectionService();
27 | }
28 |
29 | @Override
30 | protected void connectToDataSource() throws Exception {
31 | if (source == null) {
32 | throw new Exception(DesignerLocalizer.instance().getErrorString("no.da.source"));
33 | }
34 |
35 | // connect to OPC server
36 | getApp().getOpcDaClient().connect(source);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/opc/da/OpcDaTagTreeItem.java:
--------------------------------------------------------------------------------
1 | /*
2 | * To change this template, choose Tools | Templates
3 | * and open the template in the editor.
4 | */
5 | package org.point85.app.opc.da;
6 |
7 | import java.util.Collection;
8 |
9 | import org.point85.domain.opc.da.OpcDaTagTreeBranch;
10 | import org.point85.domain.opc.da.OpcDaTreeBrowser;
11 |
12 | import javafx.collections.FXCollections;
13 | import javafx.collections.ObservableList;
14 | import javafx.scene.control.TreeItem;
15 | import javafx.scene.image.Image;
16 | import javafx.scene.image.ImageView;
17 |
18 | /**
19 | * A node in the OPC DA tag hierarchy
20 | * @author Kent Randall
21 | */
22 | public class OpcDaTagTreeItem extends TreeItem {
23 | // true if TagNode is a leaf (it has OPC items)
24 | private boolean isLeaf = false;
25 | // We do the children and leaf testing only once, and then set these
26 | // booleans to false so that we do not check again during this
27 | // run.
28 | private boolean isFirstTimeChildren = true;
29 | private boolean isFirstTimeLeaf = true;
30 | private final OpcDaTreeBrowser treeBrowser;
31 |
32 | public OpcDaTagTreeItem(OpcDaTagTreeBranch tagNode, OpcDaTreeBrowser browser) {
33 | this.setValue(tagNode);
34 | this.treeBrowser = browser;
35 | }
36 |
37 | public OpcDaTagTreeItem(OpcDaTagTreeBranch tagNode, OpcDaTreeBrowser browser, ImageView imageView) {
38 | this.setValue(tagNode);
39 | this.treeBrowser = browser;
40 | this.setGraphic(imageView);
41 | }
42 |
43 | public OpcDaTreeBrowser getTreeBrowser() {
44 | return this.treeBrowser;
45 | }
46 |
47 | @Override
48 | public ObservableList> getChildren() {
49 | if (isFirstTimeChildren) {
50 | isFirstTimeChildren = false;
51 |
52 | try {
53 | super.getChildren().setAll(buildChildren(this));
54 | } catch (Exception e) {
55 | // ignore
56 | }
57 | }
58 | return super.getChildren();
59 | }
60 |
61 | @Override
62 | public boolean isLeaf() {
63 | if (isFirstTimeLeaf) {
64 | isFirstTimeLeaf = false;
65 |
66 | try {
67 | OpcDaTagTreeBranch tagNode = getValue();
68 | isLeaf = treeBrowser.isLastNode(tagNode);
69 | } catch (Exception ex) {
70 | isLeaf = false;
71 | }
72 | }
73 |
74 | return isLeaf;
75 | }
76 |
77 | private ObservableList buildChildren(OpcDaTagTreeItem treeItem) throws Exception {
78 | OpcDaTagTreeBranch tagBranch = treeItem.getValue();
79 | ObservableList children = FXCollections.observableArrayList();
80 |
81 | if (treeBrowser != null) {
82 | Collection branches = treeBrowser.getBranches(tagBranch);
83 |
84 | Image folder = ((ImageView) getGraphic()).getImage();
85 |
86 | for (OpcDaTagTreeBranch childBranch : branches) {
87 | children.add(new OpcDaTagTreeItem(childBranch, treeBrowser, new ImageView(folder)));
88 | }
89 | }
90 |
91 | return children;
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/opc/da/OpcDaTagValueChart.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.opc.da;
2 |
3 | import org.point85.app.designer.DesignerLocalizer;
4 |
5 | import javafx.scene.chart.LineChart;
6 | import javafx.scene.chart.NumberAxis;
7 | import javafx.scene.chart.XYChart;
8 |
9 | public class OpcDaTagValueChart {
10 |
11 | public static final int LINEAR = 0;
12 | public static final int STAIR_STEP = 1;
13 | private static final int NUM_POINTS = 100;
14 |
15 | private static final String CHART_TITLE = DesignerLocalizer.instance().getLangString("tag.chart.title");
16 | private static final String YAXIS_LABEL = DesignerLocalizer.instance().getLangString("tag.value");
17 | private static final String XAXIS_LABEL = DesignerLocalizer.instance().getLangString("sample.number");
18 | private static final String CHART_ID = "tagValueChart";
19 | private static final String SERIES_NAME = "tagValueSeries";
20 |
21 | private final XYChart.Series valueDataSeries = new XYChart.Series<>();
22 | private final NumberAxis xAxis = new NumberAxis(0, NUM_POINTS, NUM_POINTS / 10.0d);
23 | private final NumberAxis yAxis = new NumberAxis();
24 | private final LineChart tagValueChart = new LineChart<>(xAxis, yAxis);
25 |
26 | private Integer sampleNo = Integer.valueOf(-1);
27 | private int interpolation = OpcDaTagValueChart.LINEAR;
28 |
29 | public LineChart createChart() {
30 |
31 | tagValueChart.setId(CHART_ID);
32 | tagValueChart.setCreateSymbols(true);
33 | tagValueChart.setAnimated(false);
34 | tagValueChart.setLegendVisible(false);
35 |
36 | xAxis.setLabel(XAXIS_LABEL);
37 | xAxis.setForceZeroInRange(false);
38 | yAxis.setLabel(YAXIS_LABEL);
39 | yAxis.setAutoRanging(true);
40 |
41 | valueDataSeries.setName(SERIES_NAME);
42 | tagValueChart.getData().add(valueDataSeries);
43 |
44 | reset(CHART_TITLE);
45 |
46 | return tagValueChart;
47 | }
48 |
49 | public void setInterpolation(int type) {
50 | interpolation = type;
51 | }
52 |
53 | public String getItemId() {
54 | return tagValueChart.getTitle();
55 | }
56 |
57 | public void setItemId(String itemId) {
58 | tagValueChart.setTitle(itemId);
59 | }
60 |
61 | public void plotValue(Number value) {
62 | sampleNo++;
63 | XYChart.Data nextPoint = new XYChart.Data<>(sampleNo, value);
64 |
65 | if ((interpolation == OpcDaTagValueChart.STAIR_STEP || value instanceof Byte) && sampleNo > 0) {
66 | Number nextY = nextPoint.getYValue();
67 |
68 | XYChart.Data stepPoint = new XYChart.Data<>((sampleNo - 1), nextY);
69 | valueDataSeries.getData().add(stepPoint);
70 | }
71 |
72 | valueDataSeries.getData().add(nextPoint);
73 |
74 | // after N count, delete old point
75 | if (sampleNo.intValue() > NUM_POINTS) {
76 | // drop first point
77 | valueDataSeries.getData().remove(0);
78 | }
79 |
80 | if (sampleNo.intValue() > (NUM_POINTS - 1)) {
81 | // move range
82 | xAxis.setLowerBound(xAxis.getLowerBound() + 1);
83 | xAxis.setUpperBound(xAxis.getUpperBound() + 1);
84 | }
85 | }
86 |
87 | public void reset(String itemId) {
88 | valueDataSeries.getData().clear();
89 | sampleNo = -1;
90 | tagValueChart.setTitle(itemId);
91 | xAxis.setLowerBound(0);
92 | xAxis.setUpperBound(NUM_POINTS);
93 | yAxis.setLowerBound(0);
94 | yAxis.setUpperBound(90);
95 | }
96 |
97 | public void reset() {
98 | reset(CHART_TITLE);
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/opc/ua/OpcUaController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.opc.ua;
2 |
3 | import org.point85.app.designer.DataSourceConnectionController;
4 | import org.point85.app.designer.DesignerLocalizer;
5 | import org.point85.domain.opc.ua.OpcUaSource;
6 |
7 | public abstract class OpcUaController extends DataSourceConnectionController {
8 | // current source
9 | protected OpcUaSource dataSource;
10 |
11 | public OpcUaSource getSource() {
12 | if (dataSource == null) {
13 | dataSource = new OpcUaSource();
14 | }
15 | return dataSource;
16 | }
17 |
18 | protected void setSource(OpcUaSource source) {
19 | this.dataSource = source;
20 | }
21 |
22 | @Override
23 | protected void terminateConnectionService() throws Exception {
24 |
25 | // disconnect
26 | if (getApp().getOpcUaClient() != null) {
27 | getApp().getOpcUaClient().disconnect();
28 | }
29 | super.terminateConnectionService();
30 | }
31 |
32 | @Override
33 | protected void connectToDataSource() throws Exception {
34 | if (dataSource == null) {
35 | throw new Exception(DesignerLocalizer.instance().getErrorString("no.ua.source"));
36 | }
37 |
38 | // connect to OPC server
39 | getApp().getOpcUaClient().connect(dataSource);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/opc/ua/OpcUaTreeNode.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.opc.ua;
2 |
3 | import org.eclipse.milo.opcua.stack.core.NamespaceTable;
4 | import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
5 | import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
6 | import org.eclipse.milo.opcua.stack.core.types.enumerated.NodeClass;
7 | import org.eclipse.milo.opcua.stack.core.types.structured.ReferenceDescription;
8 |
9 | public class OpcUaTreeNode {
10 | private ExpandedNodeId nodeDataType;
11 | private boolean browsed = false;
12 |
13 | private ReferenceDescription referenceDescription;
14 |
15 | public OpcUaTreeNode(ReferenceDescription referenceDescription) {
16 | this.referenceDescription = referenceDescription;
17 | }
18 |
19 | public ReferenceDescription getReferenceDescription() {
20 | return referenceDescription;
21 | }
22 |
23 | public void setReferenceDescription(ReferenceDescription referenceDescription) {
24 | this.referenceDescription = referenceDescription;
25 | }
26 |
27 | public NodeClass getNodeClass() {
28 | return referenceDescription.getNodeClass();
29 | }
30 |
31 | public NodeId getNodeId(NamespaceTable nst) {
32 | return referenceDescription.getNodeId().toNodeId(nst).orElse(null);
33 | }
34 |
35 | public String getBrowseName() {
36 | return referenceDescription.getBrowseName().getName();
37 | }
38 |
39 | public String getDisplayName() {
40 | return referenceDescription.getDisplayName().getText();
41 | }
42 |
43 | @Override
44 | public String toString() {
45 | return getDisplayName();
46 | }
47 |
48 | public boolean isBrowsed() {
49 | return browsed;
50 | }
51 |
52 | public void setBrowsed(boolean browsed) {
53 | this.browsed = browsed;
54 | }
55 |
56 | public ExpandedNodeId getNodeDataType() {
57 | return nodeDataType;
58 | }
59 |
60 | public void setNodeDataType(ExpandedNodeId nodeDataType) {
61 | this.nodeDataType = nodeDataType;
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/operator/OperatorApplication.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.operator;
2 |
3 | import org.point85.app.AppUtils;
4 | import org.point85.app.FXMLLoaderFactory;
5 | import org.point85.app.ImageManager;
6 | import org.point85.app.Images;
7 | import org.slf4j.Logger;
8 | import org.slf4j.LoggerFactory;
9 |
10 | import javafx.application.Platform;
11 | import javafx.fxml.FXMLLoader;
12 | import javafx.scene.Scene;
13 | import javafx.scene.layout.AnchorPane;
14 | import javafx.stage.Stage;
15 |
16 | public class OperatorApplication {
17 | // logger
18 | private static final Logger logger = LoggerFactory.getLogger(OperatorApplication.class);
19 |
20 | public void start(Stage primaryStage) {
21 | try {
22 | // load FXML
23 | FXMLLoader loader = FXMLLoaderFactory.operatorApplicationLoader();
24 | AnchorPane mainLayout = (AnchorPane) loader.getRoot();
25 |
26 | // controller for main screen
27 | OperatorController operatorController = loader.getController();
28 | operatorController.initialize();
29 |
30 | Scene scene = new Scene(mainLayout);
31 |
32 | primaryStage.setTitle(OperatorLocalizer.instance().getLangString("operator.app.title"));
33 | primaryStage.getIcons().add(ImageManager.instance().getImage(Images.POINT85));
34 | primaryStage.setScene(scene);
35 | primaryStage.show();
36 |
37 | if (logger.isInfoEnabled()) {
38 | logger.info("Populating top entity nodes.");
39 | }
40 |
41 | Platform.runLater(() -> {
42 | try {
43 | operatorController.populateTopEntityNodes();
44 | } catch (Exception e) {
45 | AppUtils.showErrorDialog(
46 | OperatorLocalizer.instance().getErrorString("no.db.connection") + " " + e.getMessage());
47 | }
48 | });
49 | } catch (Exception e) {
50 | logger.error(e.getMessage());
51 | }
52 | }
53 |
54 | public void stop() {
55 | // nothing to do
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/operator/OperatorLocalizer.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.operator;
2 |
3 | import org.point85.domain.i18n.Localizer;
4 |
5 | /**
6 | * Provides localization services for the Operator application classes
7 | */
8 | public class OperatorLocalizer extends Localizer {
9 | // text
10 | private static final String LANG_BUNDLE_NAME = "i18n.OperatorLang";
11 |
12 | // exception strings
13 | private static final String ERROR_BUNDLE_NAME = "i18n.OperatorError";
14 |
15 | // Singleton
16 | private static OperatorLocalizer localizer;
17 |
18 | private OperatorLocalizer() {
19 | setLangBundle(LANG_BUNDLE_NAME);
20 | setErrorBundle(ERROR_BUNDLE_NAME);
21 | }
22 |
23 | public static OperatorLocalizer instance() {
24 | if (localizer == null) {
25 | localizer = new OperatorLocalizer();
26 | }
27 | return localizer;
28 | }
29 |
30 | @Override
31 | public String getLangBundleName() {
32 | return LANG_BUNDLE_NAME;
33 | }
34 |
35 | @Override
36 | public String getErrorBundleName() {
37 | return ERROR_BUNDLE_NAME;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/proficy/ProficyController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.proficy;
2 |
3 | import org.point85.app.designer.DataSourceConnectionController;
4 | import org.point85.app.designer.DesignerLocalizer;
5 | import org.point85.domain.proficy.ProficySource;
6 |
7 | public abstract class ProficyController extends DataSourceConnectionController {
8 | // current source
9 | private ProficySource source;
10 |
11 | public ProficySource getSource() {
12 | if (source == null) {
13 | source = new ProficySource();
14 | }
15 | return this.source;
16 | }
17 |
18 | protected void setSource(ProficySource source) {
19 | this.source = source;
20 | }
21 |
22 | @Override
23 | protected void terminateConnectionService() throws Exception {
24 | // disconnect
25 | getApp().getOpcDaClient().disconnect();
26 | super.terminateConnectionService();
27 | }
28 |
29 | @Override
30 | protected void connectToDataSource() throws Exception {
31 | if (source == null) {
32 | throw new Exception(DesignerLocalizer.instance().getErrorString("no.proficy.source"));
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/tester/TesterApplication.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.tester;
2 |
3 | import org.point85.app.FXMLLoaderFactory;
4 | import org.point85.app.ImageManager;
5 | import org.point85.app.Images;
6 | import org.slf4j.Logger;
7 | import org.slf4j.LoggerFactory;
8 |
9 | import javafx.fxml.FXMLLoader;
10 | import javafx.scene.Scene;
11 | import javafx.scene.layout.AnchorPane;
12 | import javafx.stage.Stage;
13 |
14 | public class TesterApplication {
15 | // logger
16 | private static final Logger logger = LoggerFactory.getLogger(TesterApplication.class);
17 |
18 | // controller for main screen
19 | private TesterController testerController;
20 |
21 | public void start(Stage primaryStage) {
22 | try {
23 | FXMLLoader loader = FXMLLoaderFactory.testerApplicationLoader();
24 | AnchorPane mainLayout = loader.getRoot();
25 |
26 | testerController = loader.getController();
27 | testerController.initialize();
28 |
29 | Scene scene = new Scene(mainLayout);
30 |
31 | primaryStage.setTitle(TesterLocalizer.instance().getLangString("test.app.title"));
32 | primaryStage.getIcons().add(ImageManager.instance().getImage(Images.POINT85));
33 | primaryStage.setScene(scene);
34 | primaryStage.show();
35 | } catch (Exception e) {
36 | logger.error(e.getMessage());
37 | stop();
38 | }
39 | }
40 |
41 | public void stop() {
42 | if (testerController != null) {
43 | testerController.stop();
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/tester/TesterLocalizer.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.tester;
2 |
3 | import org.point85.domain.i18n.Localizer;
4 |
5 | /**
6 | * Provides localization services for the Tester application classes
7 | */
8 | public class TesterLocalizer extends Localizer {
9 | // name of resource bundle with translatable strings for text
10 | private static final String LANG_BUNDLE_NAME = "i18n.TesterLang";
11 |
12 | // name of resource bundle with translatable strings for exception messages
13 | private static final String ERROR_BUNDLE_NAME = "i18n.TesterError";
14 |
15 | // Singleton
16 | private static TesterLocalizer localizer;
17 |
18 | private TesterLocalizer() {
19 | setLangBundle(LANG_BUNDLE_NAME);
20 | setErrorBundle(ERROR_BUNDLE_NAME);
21 | }
22 |
23 | public static TesterLocalizer instance() {
24 | if (localizer == null) {
25 | localizer = new TesterLocalizer();
26 | }
27 | return localizer;
28 | }
29 |
30 | @Override
31 | public String getLangBundleName() {
32 | return LANG_BUNDLE_NAME;
33 | }
34 |
35 | @Override
36 | public String getErrorBundleName() {
37 | return ERROR_BUNDLE_NAME;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/app/uom/UomImporterController.java:
--------------------------------------------------------------------------------
1 | package org.point85.app.uom;
2 |
3 | import java.util.List;
4 |
5 | import org.point85.app.AppUtils;
6 | import org.point85.app.DialogController;
7 | import org.point85.domain.uom.MeasurementSystem;
8 | import org.point85.domain.uom.UnitOfMeasure;
9 | import org.point85.domain.uom.UnitType;
10 |
11 | import javafx.collections.FXCollections;
12 | import javafx.collections.ObservableList;
13 | import javafx.fxml.FXML;
14 | import javafx.scene.control.ComboBox;
15 |
16 | public class UomImporterController extends DialogController {
17 |
18 | // list of UnitTypes
19 | private final ObservableList unitTypes = FXCollections.observableArrayList();
20 |
21 | // list of UOMs of this type
22 | private final ObservableList unitItems = FXCollections.observableArrayList();
23 |
24 | @FXML
25 | private ComboBox cbUnitTypes;
26 |
27 | @FXML
28 | private ComboBox cbAvailableUnits;
29 |
30 | UnitOfMeasure getSelectedUom() {
31 | UnitOfMeasure selectedUom = null;
32 | UomItem item = cbAvailableUnits.getSelectionModel().getSelectedItem();
33 | if (item != null) {
34 | selectedUom = item.getUOM();
35 | }
36 | return selectedUom;
37 | }
38 |
39 | @FXML
40 | public void initialize() {
41 | // set unit types
42 | List sorted = AppUtils.sortUnitTypes();
43 | unitTypes.addAll(sorted);
44 |
45 | cbUnitTypes.setItems(unitTypes);
46 | cbAvailableUnits.setItems(unitItems);
47 |
48 | // control images
49 | setImages();
50 | }
51 |
52 | @FXML
53 | private void setPossibleUnits() throws Exception {
54 | UnitType unitType = cbUnitTypes.getSelectionModel().getSelectedItem();
55 |
56 | List uoms = MeasurementSystem.instance().getUnitsOfMeasure(unitType);
57 |
58 | unitItems.clear();
59 | for (UnitOfMeasure uom : uoms) {
60 | unitItems.add(new UomItem(uom));
61 | }
62 | }
63 |
64 | private class UomItem {
65 | private final UnitOfMeasure uom;
66 |
67 | private UomItem(UnitOfMeasure uom) {
68 | this.uom = uom;
69 | }
70 |
71 | private UnitOfMeasure getUOM() {
72 | return uom;
73 | }
74 |
75 | @Override
76 | public String toString() {
77 | return uom.getSymbol() + " (" + uom.getName() + ")";
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/Command.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx;
18 |
19 | /**
20 | * Created by hansolo on 19.12.16.
21 | */
22 | @FunctionalInterface
23 | public interface Command {
24 | void execute();
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/ValueObject.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx;
18 |
19 | /**
20 | * Created by hansolo on 21.12.16.
21 | */
22 | public interface ValueObject {
23 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/chart/MatrixFont.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.chart;
18 |
19 | /**
20 | * Created by hansolo on 24.03.17.
21 | */
22 | public interface MatrixFont {
23 | int getCharacterWidth();
24 |
25 | int getCharacterHeight();
26 |
27 | int[] getCharacter(final char CHAR);
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/AlarmEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import org.point85.tilesfx.Alarm;
20 |
21 |
22 | /**
23 | * Created by hansolo on 19.12.16.
24 | */
25 | public class AlarmEvent {
26 | private final Alarm ALARM;
27 |
28 |
29 | // ******************** Constructors **************************************
30 | public AlarmEvent(final Alarm ALARM) {
31 | this.ALARM = ALARM;
32 | }
33 |
34 |
35 | // ******************** Methods *******************************************
36 | public Alarm getAlarm() { return ALARM; }
37 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/AlarmEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | /**
21 | * Created by hansolo on 19.12.16.
22 | */
23 | @FunctionalInterface
24 | public interface AlarmEventListener {
25 | void onAlarmEvent(final AlarmEvent EVENT);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/ChartDataEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import org.point85.tilesfx.chart.ChartData;
20 |
21 |
22 | /**
23 | * Created by hansolo on 17.02.17.
24 | */
25 | public class ChartDataEvent {
26 | public enum EventType { UPDATE, FINISHED }
27 |
28 | private ChartData data;
29 | private EventType type;
30 |
31 |
32 | // ******************** Constructors **************************************
33 | public ChartDataEvent(final EventType TYPE, final ChartData DATA) {
34 | type = TYPE;
35 | data = DATA;
36 | }
37 |
38 |
39 | // ******************** Methods *******************************************
40 | public EventType getType() { return type; }
41 |
42 | public ChartData getData() { return data; }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/ChartDataEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | /**
21 | * Created by hansolo on 17.02.17.
22 | */
23 | @FunctionalInterface
24 | public interface ChartDataEventListener {
25 | void onChartDataEvent(final ChartDataEvent EVENT);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/LocationEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import org.point85.tilesfx.tools.Location;
20 |
21 |
22 | /**
23 | * Created by hansolo on 12.02.17.
24 | */
25 | public class LocationEvent {
26 | private Location LOCATION;
27 |
28 |
29 | // ******************** Constructors **************************************
30 | public LocationEvent(final Location LOCATION) {
31 | this.LOCATION = LOCATION;
32 | }
33 |
34 |
35 | // ******************** Methods *******************************************
36 | public Location getLocation() { return LOCATION; }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/LocationEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | /**
21 | * Created by hansolo on 12.02.17.
22 | */
23 | @FunctionalInterface
24 | public interface LocationEventListener {
25 | void onLocationEvent(final LocationEvent EVENT);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/PixelMatrixEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import javafx.geometry.Point2D;
20 |
21 |
22 | public class PixelMatrixEvent {
23 | private final int X;
24 | private final int Y;
25 | private final double MOUSE_SCREEN_X;
26 | private final double MOUSE_SCREEN_Y;
27 |
28 |
29 | // ******************** Constructors **************************************
30 | public PixelMatrixEvent(final int X, final int Y, final double MOUSE_X, final double MOUSE_Y) {
31 | this.X = X;
32 | this.Y = Y;
33 | MOUSE_SCREEN_X = MOUSE_X;
34 | MOUSE_SCREEN_Y = MOUSE_Y;
35 | }
36 |
37 |
38 | // ******************** Methods *******************************************
39 | public int getX() { return X; }
40 | public int getY() { return Y; }
41 |
42 | public double getMouseScreenX() { return MOUSE_SCREEN_X; }
43 | public double getMouseScreenY() { return MOUSE_SCREEN_Y; }
44 | public Point2D getMouseScreenPos() { return new Point2D(MOUSE_SCREEN_X, MOUSE_SCREEN_Y); }
45 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/PixelMatrixEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | @FunctionalInterface
20 | public interface PixelMatrixEventListener {
21 | void onPixelMatrixEvent(PixelMatrixEvent event);
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/SmoothedChartEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import javafx.event.Event;
20 | import javafx.event.EventTarget;
21 | import javafx.event.EventType;
22 |
23 |
24 | public class SmoothedChartEvent extends Event {
25 | /**
26 | *
27 | */
28 | private static final long serialVersionUID = 521642296251435364L;
29 | public static final EventType DATA_SELECTED = new EventType<>(ANY, "DATA_SELECTED");
30 | private final double value;
31 |
32 |
33 | // ******************** Constructors **************************************
34 | public SmoothedChartEvent(final EventType TYPE, final double VALUE) {
35 | super(TYPE);
36 | value = VALUE;
37 | }
38 | public SmoothedChartEvent(final Object SRC, final EventTarget TARGET, final EventType TYPE, final double VALUE) {
39 | super(SRC, TARGET, TYPE);
40 | value = VALUE;
41 | }
42 |
43 |
44 | // ******************** Methods *******************************************
45 | public double getValue() { return value; }
46 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/SwitchEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import javafx.event.Event;
20 | import javafx.event.EventTarget;
21 | import javafx.event.EventType;
22 |
23 |
24 | /**
25 | * Created by hansolo on 26.12.16.
26 | */
27 | public class SwitchEvent extends Event {
28 | /**
29 | *
30 | */
31 | private static final long serialVersionUID = -7036620372767943775L;
32 | public static final EventType SWITCH_PRESSED = new EventType<>(ANY, "SWITCH_PRESSED");
33 | public static final EventType SWITCH_RELEASED = new EventType<>(ANY, "SWITCH_RELEASED");
34 |
35 |
36 | // ******************** Constructors **************************************
37 | public SwitchEvent(final EventType TYPE) { super(TYPE); }
38 | public SwitchEvent(final Object SOURCE, final EventTarget TARGET, EventType TYPE) { super(SOURCE, TARGET, TYPE); }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/TileEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | import org.point85.tilesfx.chart.ChartData;
21 |
22 |
23 | /**
24 | * Created by hansolo on 19.12.16.
25 | */
26 | public class TileEvent {
27 | public enum EventType { SHOW_NOTIFIER, HIDE_NOTIFIER,
28 | RECALC, REDRAW, REFRESH, RESIZE, VISIBILITY, SECTION, ALERT, VALUE,
29 | THRESHOLD_EXCEEDED, THRESHOLD_UNDERRUN,
30 | MAX_VALUE_EXCEEDED, MIN_VALUE_UNDERRUN, VALUE_IN_RANGE,
31 | FINISHED, SERIES, DATA, GRAPHIC, UPDATE, AVERAGING, LOCATION, TRACK, MAP_PROVIDER,
32 | TOOLTIP_TEXT, VALUE_CHANGING, VALUE_CHANGED, FLIP_START, FLIP_FINISHED,
33 | SELECTED_CHART_DATA}
34 |
35 | private final EventType EVENT_TYPE;
36 | private final ChartData DATA;
37 |
38 |
39 | // ******************** Constructors **************************************
40 | public TileEvent(final EventType EVENT_TYPE) {
41 | this(EVENT_TYPE, null);
42 | }
43 | public TileEvent(final EventType EVENT_TYPE, final ChartData DATA) {
44 | this.EVENT_TYPE = EVENT_TYPE;
45 | this.DATA = DATA;
46 | }
47 |
48 |
49 | // ******************** Methods *******************************************
50 | public EventType getEventType() { return EVENT_TYPE; }
51 |
52 | public ChartData getData() { return DATA; }
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/TileEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | /**
21 | * Created by hansolo on 19.12.16.
22 | */
23 | @FunctionalInterface
24 | public interface TileEventListener {
25 | void onTileEvent(final TileEvent EVENT);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/TimeEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import java.time.ZonedDateTime;
20 |
21 |
22 | /**
23 | * Created by hansolo on 19.12.16.
24 | */
25 | public class TimeEvent {
26 | public enum TimeEventType { HOUR, MINUTE, SECOND };
27 | public final ZonedDateTime TIME;
28 | public final TimeEventType TYPE;
29 |
30 |
31 | // ******************** Constructors **************************************
32 | public TimeEvent(final Object SRC, final ZonedDateTime TIME, final TimeEventType TYPE) {
33 | this.TIME = TIME;
34 | this.TYPE = TYPE;
35 | }
36 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/TimeEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | /**
21 | * Created by hansolo on 19.12.16.
22 | */
23 | @FunctionalInterface
24 | public interface TimeEventListener {
25 | void onTimeEvent(final TimeEvent EVENT);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/TreeNodeEvent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 | import org.point85.tilesfx.tools.TreeNode;
20 |
21 |
22 | public class TreeNodeEvent {
23 | public enum EventType { PARENT_CHANGED, CHILDREN_CHANGED, NODE_SELECTED }
24 |
25 | private final TreeNode SRC;
26 | private final EventType TYPE;
27 |
28 |
29 | // ******************** Constructors **************************************
30 | public TreeNodeEvent(final TreeNode SRC, final EventType TYPE) {
31 | this.SRC = SRC;
32 | this.TYPE = TYPE;
33 | }
34 |
35 |
36 | // ******************** Methods *******************************************
37 | public TreeNode getSource() { return SRC; }
38 |
39 | public EventType getType() { return TYPE; }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/events/TreeNodeEventListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.events;
18 |
19 |
20 | /**
21 | * Created by hansolo on 30.10.17.
22 | */
23 | @FunctionalInterface
24 | public interface TreeNodeEventListener {
25 | void onTreeNodeEvent(final TreeNodeEvent EVENT);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/fonts/Fonts.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.fonts;
18 |
19 | import javafx.scene.text.Font;
20 |
21 | /**
22 | * Created by hansolo on 19.12.16.
23 | */
24 | public class Fonts {
25 | private static final String LATO_LIGHT_NAME;
26 | private static final String LATO_REGULAR_NAME;
27 | private static final String LATO_BOLD_NAME;
28 |
29 | private static String latoLightName;
30 | private static String latoRegularName;
31 | private static String latoBoldName;
32 |
33 | static {
34 | latoLightName = Font.loadFont(Fonts.class.getResourceAsStream("/tilesfx/fonts/Lato-Lig.otf"), 10)
35 | .getName();
36 | latoRegularName = Font.loadFont(Fonts.class.getResourceAsStream("/tilesfx/fonts/Lato-Reg.otf"), 10)
37 | .getName();
38 | latoBoldName = Font.loadFont(Fonts.class.getResourceAsStream("/tilesfx/fonts/Lato-Bol.otf"), 10)
39 | .getName();
40 |
41 | LATO_LIGHT_NAME = latoLightName;
42 | LATO_REGULAR_NAME = latoRegularName;
43 | LATO_BOLD_NAME = latoBoldName;
44 | }
45 |
46 | // ******************** Methods *******************************************
47 | public static Font latoLight(final double SIZE) {
48 | return new Font(LATO_LIGHT_NAME, SIZE);
49 | }
50 |
51 | public static Font latoRegular(final double SIZE) {
52 | return new Font(LATO_REGULAR_NAME, SIZE);
53 | }
54 |
55 | public static Font latoBold(final double SIZE) {
56 | return new Font(LATO_BOLD_NAME, SIZE);
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/CatmullRom.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | public class CatmullRom {
20 | private CatmullRomSpline splineXValues;
21 | private CatmullRomSpline splineYValues;
22 |
23 |
24 | // ******************** Constructors **************************************
25 | public CatmullRom(final Point P0, final Point P1, final Point P2, final Point P3) {
26 | assert P0 != null : "p0 cannot be null";
27 | assert P1 != null : "p1 cannot be null";
28 | assert P2 != null : "p2 cannot be null";
29 | assert P3 != null : "p3 cannot be null";
30 |
31 | splineXValues = new CatmullRomSpline(P0.getX(), P1.getX(), P2.getX(), P3.getX());
32 | splineYValues = new CatmullRomSpline(P0.getY(), P1.getY(), P2.getY(), P3.getY());
33 | }
34 |
35 |
36 | // ******************** Methods *******************************************
37 | public Point q(final double T) { return new Point(splineXValues.q(T), splineYValues.q(T)); }
38 |
39 |
40 | // ******************** Inner Classes *************************************
41 | class CatmullRomSpline {
42 | private double p0;
43 | private double p1;
44 | private double p2;
45 | private double p3;
46 |
47 |
48 | // ******************** Constructors **********************************
49 | protected CatmullRomSpline(final double P0, final double P1, final double P2, final double P3) {
50 | p0 = P0;
51 | p1 = P1;
52 | p2 = P2;
53 | p3 = P3;
54 | }
55 |
56 |
57 | // ******************** Methods ***************************************
58 | protected double q(final double T) {
59 | return 0.5 * ((2 * p1) + (p2 - p0) * T + (2 * p0 - 5 * p1 + 4 * p2 - p3) * T * T + (3 * p1 -p0 - 3 * p2 + p3) * T * T * T);
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/CountryGroup.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | import java.util.ArrayList;
20 | import java.util.List;
21 |
22 | import javafx.scene.paint.Color;
23 |
24 |
25 | public class CountryGroup {
26 | private String name;
27 | private List countries;
28 |
29 |
30 | // ******************** Constructors **************************************
31 | public CountryGroup(final String NAME, final Country... COUNTRIES) {
32 | name = NAME;
33 | countries = new ArrayList<>(COUNTRIES.length);
34 | for (Country country : COUNTRIES) { countries.add(country); }
35 | }
36 |
37 |
38 | // ******************** Methods *******************************************
39 | public String getName() { return name; }
40 |
41 | public List getCountries() { return countries; }
42 |
43 | public void setColor(final Color COLOR) {
44 | for (Country country : getCountries()) { country.setColor(COLOR); }
45 | }
46 | }
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/CountryPath.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | import java.util.Locale;
20 |
21 | import javafx.scene.control.Tooltip;
22 | import javafx.scene.shape.SVGPath;
23 |
24 |
25 | /**
26 | * Created by hansolo on 21.12.16.
27 | */
28 | public class CountryPath extends SVGPath {
29 | private String name;
30 | private Locale locale;
31 | private Tooltip tooltip;
32 |
33 |
34 | // ******************** Constructors **************************************
35 | public CountryPath() {
36 | this ("", null);
37 | }
38 | public CountryPath(final String NAME) {
39 | this(NAME, null);
40 | }
41 | public CountryPath(final String NAME, final String CONTENT) {
42 | super();
43 | name = NAME;
44 | locale = new Locale("", NAME);
45 | tooltip = new Tooltip(locale.getDisplayCountry());
46 | Tooltip.install(CountryPath.this, tooltip);
47 | if (null == CONTENT) return;
48 | setContent(CONTENT);
49 | }
50 |
51 |
52 | // ******************** Methods *******************************************
53 | public String getName() { return name; }
54 | public void setName(final String NAME) { this.name = NAME; }
55 |
56 | public Locale getLocale() { return locale; }
57 | public void setLocale(final Locale LOCALE) { locale = LOCALE; }
58 |
59 | public Tooltip getTooltip() { return tooltip; }
60 | public void setTooltip(final Tooltip TOOLTIP) {
61 | tooltip = TOOLTIP;
62 | Tooltip.install(CountryPath.this, tooltip);
63 | }
64 |
65 | @Override public String toString() {
66 | return new StringBuilder("{\n").append(" name :\"").append(name).append("\"\n")
67 | .append(" locale :\"").append(locale).append("\"\n")
68 | .append(" tooltip:\"").append(tooltip.getText()).append("\"\n")
69 | .append(" content:\"").append(getContent()).append("\"\n")
70 | .append("}\n")
71 | .toString();
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/CtxBounds.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 |
20 | public class CtxBounds {
21 | private double x;
22 | private double y;
23 | private double width;
24 | private double height;
25 |
26 |
27 | // ******************** Constructors **************************************
28 | public CtxBounds() {
29 | this(0, 0, 0, 0);
30 | }
31 | public CtxBounds(final double WIDTH, final double HEIGHT) {
32 | this(0, 0, WIDTH, HEIGHT);
33 | }
34 | public CtxBounds(final double X, final double Y, final double WIDTH, final double HEIGHT) {
35 | x = X;
36 | y = Y;
37 | width = WIDTH;
38 | height = HEIGHT;
39 | }
40 |
41 |
42 | // ******************** Methods *******************************************
43 | public double getX() { return x; }
44 | public void setX(final double X) { x = X; }
45 |
46 | public double getY() { return y; }
47 | public void setY(final double Y) { y = Y; }
48 |
49 | public double getMinX() { return x; }
50 | public double getMaxX() { return x + width; }
51 |
52 | public double getMinY() { return y; }
53 | public double getMaxY() { return y + height; }
54 |
55 | public double getWidth() { return width; }
56 | public void setWidth(final double WIDTH) { width = Helper.clamp(0, Double.MAX_VALUE, WIDTH); }
57 |
58 | public double getHeight() { return height; }
59 | public void setHeight(final double HEIGHT) { height = Helper.clamp(0, Double.MAX_VALUE, HEIGHT); }
60 |
61 | public void set(final CtxBounds BOUNDS) {
62 | set(BOUNDS.getX(), BOUNDS.getY(), BOUNDS.getWidth(), BOUNDS.getHeight());
63 | }
64 | public void set(final double X, final double Y, final double WIDTH, final double HEIGHT) {
65 | x = X;
66 | y = Y;
67 | width = WIDTH;
68 | height = HEIGHT;
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/CtxCornerRadii.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | public class CtxCornerRadii {
20 | private double topLeft;
21 | private double topRight;
22 | private double bottomRight;
23 | private double bottomLeft;
24 |
25 |
26 | // ******************** Constructors **************************************
27 | public CtxCornerRadii() {
28 | this(0, 0, 0, 0);
29 | }
30 | public CtxCornerRadii(final double RADIUS) {
31 | this(RADIUS, RADIUS, RADIUS, RADIUS);
32 | }
33 | public CtxCornerRadii(final double TOP_LEFT, final double TOP_RIGHT,
34 | final double BOTTOM_RIGHT, final double BOTTOM_LEFT) {
35 | topLeft = TOP_LEFT;
36 | topRight = TOP_RIGHT;
37 | bottomRight = BOTTOM_RIGHT;
38 | bottomLeft = BOTTOM_LEFT;
39 | }
40 |
41 |
42 | // ******************** Methods *******************************************
43 | public double getTopLeft() { return topLeft; }
44 | public void setTopLeft(final double VALUE) { topLeft = Helper.clamp(0, Double.MAX_VALUE, VALUE); }
45 |
46 | public double getTopRight() { return topRight; }
47 | public void setTopRight(final double VALUE) { topRight = Helper.clamp(0, Double.MAX_VALUE, VALUE); }
48 |
49 | public double getBottomRight() { return bottomRight; }
50 | public void setBottomRight(final double VALUE) { bottomRight = Helper.clamp(0, Double.MAX_VALUE, VALUE); }
51 |
52 | public double getBottomLeft() { return bottomLeft; }
53 | public void setBottomLeft(final double VALUE) { bottomLeft = Helper.clamp(0, Double.MAX_VALUE, VALUE); }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/NiceScale.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | /**
20 | * Created by hansolo on 23.04.17.
21 | */
22 | public class NiceScale {
23 |
24 | private double min;
25 | private double max;
26 | private double maxTicks = 10;
27 | private double tickSpacing;
28 | private double range;
29 | private double niceMin;
30 | private double niceMax;
31 |
32 |
33 | public NiceScale(final double MIN, final double MAX) {
34 | min = MIN;
35 | max = MAX;
36 | calculate();
37 | }
38 |
39 | private void calculate() {
40 | range = niceNum(max - min, false);
41 | tickSpacing = niceNum(range / (maxTicks - 1), true);
42 | niceMin = Math.floor(min / tickSpacing) * tickSpacing;
43 | niceMax = Math.ceil(max / tickSpacing) * tickSpacing;
44 | }
45 |
46 | private double niceNum(final double RANGE, final boolean ROUND) {
47 | double exponent; // exponent of RANGE
48 | double fraction; // fractional part of RANGE
49 | double niceFraction; // nice, rounded fraction
50 |
51 | exponent = Math.floor(Math.log10(RANGE));
52 | fraction = RANGE / Math.pow(10, exponent);
53 |
54 | if (ROUND) {
55 | if (fraction < 1.5)
56 | niceFraction = 1;
57 | else if (fraction < 3)
58 | niceFraction = 2;
59 | else if (fraction < 7)
60 | niceFraction = 5;
61 | else
62 | niceFraction = 10;
63 | } else {
64 | if (fraction <= 1)
65 | niceFraction = 1;
66 | else if (fraction <= 2)
67 | niceFraction = 2;
68 | else if (fraction <= 5)
69 | niceFraction = 5;
70 | else
71 | niceFraction = 10;
72 | }
73 | return niceFraction * Math.pow(10, exponent);
74 | }
75 |
76 | public void setMinMax(final double MIN, final double MAX) {
77 | min = MIN;
78 | max = MAX;
79 | calculate();
80 | }
81 |
82 | public void setMaxTicks(final double MAX_TICKS) {
83 | maxTicks = MAX_TICKS;
84 | calculate();
85 | }
86 |
87 | public double getTickSpacing() { return tickSpacing; }
88 |
89 | public double getNiceMin() { return niceMin; }
90 |
91 | public double getNiceMax() { return niceMax; }
92 | }
93 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/Point.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | public class Point implements Comparable {
20 | private double x;
21 | private double y;
22 |
23 |
24 | // ******************** Constructors **************************************
25 | public Point() {
26 | this(0.0, 0.0);
27 | }
28 | public Point(final double X, final double Y) {
29 | x = X;
30 | y = Y;
31 | }
32 |
33 |
34 | // ******************** Methods *******************************************
35 | public double getX() { return x; }
36 | public void setX(final double X) { x = X; }
37 |
38 | public double getY() { return y; }
39 | public void setY(final double Y) { y = Y; }
40 |
41 | public void set(final double X, final double Y) {
42 | x = X;
43 | y = Y;
44 | }
45 |
46 | public double distanceTo(final Point P) { return distance(P.getX(), P.getY(), x, y); }
47 | public double distanceTo(final double X, final double Y) { return distance(X, Y, x, y); }
48 |
49 | public static double distance(final Point P1, final Point P2) { return distance(P1.getX(), P1.getY(), P2.getX(), P2.getY()); }
50 | public static double distance(final double X1, final double Y1, final double X2, final double Y2) {
51 | double deltaX = (X2 - X1);
52 | double deltaY = (Y2 - Y1);
53 | return Math.sqrt((deltaX * deltaX) + (deltaY * deltaY));
54 | }
55 |
56 | public int compareTo(final Point POINT) {
57 | return x != POINT.getX() ? Double.compare(x, POINT.x) : Double.compare(y, POINT.y);
58 | }
59 |
60 | @Override public String toString() {
61 | return new StringBuilder().append("x: ").append(x).append(", y: ").append(y).toString();
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/SectionComparator.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | import java.io.Serializable;
20 | import java.util.Comparator;
21 |
22 | import org.point85.tilesfx.Section;
23 |
24 |
25 | /**
26 | * Created by hansolo on 26.01.16.
27 | */
28 | public class SectionComparator implements Comparator, Serializable {
29 | /**
30 | *
31 | */
32 | private static final long serialVersionUID = -954520157460078875L;
33 |
34 | @Override public int compare(final Section SECTION_1, final Section SECTION_2) {
35 | return SECTION_1.compareTo(SECTION_2);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/Statistics.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | import java.util.Collections;
20 | import java.util.List;
21 |
22 |
23 | /**
24 | * Created by hansolo on 06.12.16.
25 | */
26 | public class Statistics {
27 |
28 |
29 | // ******************** Methods *******************************************
30 | public static final double getMean(final List DATA) { return DATA.stream().mapToDouble(v -> v).sum() / DATA.size(); }
31 |
32 | public static final double getVariance(final List DATA) {
33 | double mean = getMean(DATA);
34 | double temp = 0;
35 | for (double a : DATA) { temp += ((a - mean) * (a - mean)); }
36 | return temp / DATA.size();
37 | }
38 |
39 | public static final double getStdDev(final List DATA) { return Math.sqrt(getVariance(DATA)); }
40 |
41 | public static final double getMedian(final List DATA) {
42 | int size = DATA.size();
43 | Collections.sort(DATA);
44 | return size % 2 == 0 ? (DATA.get((size / 2) - 1) + DATA.get(size / 2)) / 2.0 : DATA.get(size / 2);
45 | }
46 |
47 | public static final double getMin(final List DATA) { return DATA.stream().mapToDouble(v -> v).min().orElse(0); }
48 |
49 | public static final double getMax(final List DATA) { return DATA.stream().mapToDouble(v -> v).max().orElse(0); }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/TimeData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | import java.time.Instant;
20 |
21 | import org.point85.tilesfx.chart.ChartData;
22 |
23 |
24 | /**
25 | * Created by hansolo on 01.11.16.
26 | */
27 | public class TimeData extends ChartData {
28 |
29 | // ******************** Constructors **************************************
30 | public TimeData(final double VALUE) {
31 | super(VALUE, Instant.now());
32 | }
33 | public TimeData(final double VALUE, final Instant TIMESTAMP) {
34 | super(VALUE, TIMESTAMP);
35 | }
36 |
37 |
38 | // ******************** Methods *******************************************
39 | @Override public void setValue(final double VALUE) {}
40 |
41 | @Override public String toString() {
42 | return new StringBuilder().append("{\n")
43 | .append(" \"timestamp\":").append(super.getTimestamp().toEpochMilli()).append(",\n")
44 | .append(" \"value\":").append(super.getValue()).append("\n")
45 | .append("}")
46 | .toString();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/org/point85/tilesfx/tools/TimeSectionComparator.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 by Gerrit Grunwald
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.point85.tilesfx.tools;
18 |
19 | import java.io.Serializable;
20 | import java.util.Comparator;
21 |
22 | import org.point85.tilesfx.TimeSection;
23 |
24 |
25 | /**
26 | * Created by hansolo on 31.01.16.
27 | */
28 | public class TimeSectionComparator implements Comparator, Serializable {
29 | /**
30 | *
31 | */
32 | private static final long serialVersionUID = -5197838364488735102L;
33 |
34 | @Override public int compare(final TimeSection SECTION_1, final TimeSection SECTION_2) {
35 | return SECTION_1.compareTo(SECTION_2);
36 | }
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/src/main/resources/css/dashboard.css:
--------------------------------------------------------------------------------
1 | // net time after loss (palegreen, lightgreen, oldlace)
2 | .series0.chart-bar { -fx-bar-fill: gainsboro;}
3 | // not scheduled
4 | .series1.chart-bar { -fx-bar-fill: violet; }
5 | // unscheduled
6 | .series2.chart-bar { -fx-bar-fill: darkblue; }
7 | // planned downtime
8 | .series3.chart-bar { -fx-bar-fill: deepskyblue; }
9 | // waiting
10 | .series4.chart-bar { -fx-bar-fill: aquamarine; }
11 | // unplanned downtime
12 | .series5.chart-bar { -fx-bar-fill: greenyellow ; }
13 | // minor stoppages
14 | .series6.chart-bar { -fx-bar-fill: yellow; }
15 | // reduced speed
16 | .series7.chart-bar { -fx-bar-fill: gold; }
17 | // rejects and rework
18 | .series8.chart-bar { -fx-bar-fill: darkorange; }
19 | // startup and yield
20 | .series9.chart-bar { -fx-bar-fill: red; }
21 |
--------------------------------------------------------------------------------
/src/main/resources/css/pareto_chart.css:
--------------------------------------------------------------------------------
1 | .chart-plot-background {
2 | -fx-background-color: transparent;
3 | }
4 | .default-color0.chart-series-line {
5 | -fx-stroke: cyan;
6 | }
7 | .default-color0.chart-bar {
8 | -fx-bar-fill: forestgreen;
9 | }
--------------------------------------------------------------------------------
/src/main/resources/fxml/CollectorApplication.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/CronHelp.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/CronTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
17 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/DashboardDialog.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/DatabaseTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/EmailTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/FileTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/HttpTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
22 |
23 |
24 |
25 |
26 |
30 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/JMSTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/KafkaTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/MaterialSelector.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/MenuTest.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
23 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/MessagingTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/ModbusTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/MqttTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/OeeEventTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/OpcDaTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/OpcUaTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/ProficyTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
17 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/ReasonSelector.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/SampleChart.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/Splash.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
33 |
34 |
35 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/TemplateScheduleDialog.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/UomImport.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
36 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/src/main/resources/fxml/WebSocketTrend.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
22 |
23 |
24 |
25 |
26 |
30 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/main/resources/i18n/CollectorError.properties:
--------------------------------------------------------------------------------
1 | # exceptions
2 | failed.collector = Failed to start collector {0}.
--------------------------------------------------------------------------------
/src/main/resources/i18n/CollectorLang.properties:
--------------------------------------------------------------------------------
1 | # localizable strings for the Collector Application
2 | # text strings
3 | collector.app.title = OEE Collector Application
4 | starting.collector = Starting collector {0}.
5 | started.collector = Started collector {0}.
6 | shutdown.collector = Shut down collector {0}.
7 | restarted.collector = Restarted collector {0}.
8 | stopped.events = Stopped monitoring events for collector {0}.
9 | started.events = Started monitoring events for collector {0}.
10 | startup = Startup
11 | shutdown = Shutdown
12 | start.monitoring = Start Monitoring
13 | stop.monitoring = Stop Monitoring
14 | restart = Restart
15 |
--------------------------------------------------------------------------------
/src/main/resources/i18n/MonitorError.properties:
--------------------------------------------------------------------------------
1 | # monitor app errors
2 | no.collector.broker = The collector {0} does not have a messaging broker configured.
--------------------------------------------------------------------------------
/src/main/resources/i18n/MonitorLang.properties:
--------------------------------------------------------------------------------
1 | # strings for Monitor app
2 | monitor.app.title = OEE Monitor
3 | monitor.startup = Monitor startup
4 | collector = Collector
5 | host = Host
6 | port = Port
7 | type = Type
8 | name = Name
9 | description = Description
10 | ip.address = IP Address
11 | timestamp = Time Stamp
12 | severity = Severity
13 | message = Message
14 | dashboard = Dashboard
15 | collector.notifications = Collector Notifications
16 | collector.status = Collector Status
17 | max.messages = Maximum Messages
18 | message.page = Messages per Page
19 | memory = Memory (MB)
20 | used = Used
21 | free = Free
22 | cpu = CPU (%)
23 | state = State
24 | msg.broker = Message Broker
25 | clear = Clear
26 | refresh = Refresh
27 | restart = Restart
28 | email.notification.subject = Monitor Notification
--------------------------------------------------------------------------------
/src/main/resources/i18n/OperatorError.properties:
--------------------------------------------------------------------------------
1 | # exceptions
2 | invalid.start = The new setup start time of {0} cannot be before the last start time of {1}.
3 | no.db.connection = Unable to fetch plant entities. Check database connection.
4 | no.equipment = The equipment must be selected.
5 | no.reason = The availability reason must be selected.
6 | no.amount = An amount must be specified.
7 | no.material = A material must be selected.
8 | no.produced.material = No production has been defined for material {0}.
9 | no.setup = No material setup has been defined for equipment {0}.
--------------------------------------------------------------------------------
/src/main/resources/i18n/OperatorLang.properties:
--------------------------------------------------------------------------------
1 | # localizable strings for the Operator Application
2 | operator.app.title = OEE Operator
3 | reason.selector.title = Select Reason
4 | material.selector.title = Select Material
5 | material = Material
6 | job = Job
7 | availability = Availability
8 | production = Production
9 | setup = Setup/Job
10 | by.period = By Time Period
11 | by.event = By Event
12 | reason = Reason
13 | hh.mm = HH:MM
14 | hours = Hours
15 | minutes = Minutes
16 | record = Record
17 | production.type = Production Type
18 | good = Good
19 | reject = Rejects/Rework
20 | startup = Startup/Yield
21 | quantity = Quantity
22 | changeover = Setup Date
23 | amount.prompt = Amount produced
24 | ok = OK
25 | cancel = Cancel
26 | start.date = Start Date
27 | end.date = End Date
28 | type.availability = availability
29 | type.good.production = good production
30 | type.reject.production = reject/rework production
31 | type.startup.production = startup production
32 | type.setup = material change
33 | type.job = job change
34 | type.custom = custom
35 | availability.recorded = Availability event recorded for equipment {0} for reason {1}.
36 | production.recorded = Production event recorded for equipment {0} for type {1}.
37 | setup.recorded = Setup event recorded for equipment {0} for material {1}.
38 | plant.entities = Plant Entities
--------------------------------------------------------------------------------
/src/main/resources/i18n/TesterError.properties:
--------------------------------------------------------------------------------
1 | # exceptions
2 | no.http.server = An HTTP server must be selected.
3 | failed.code = Failed with error code: {0}
4 | no.source = A messaging source must be specified.
5 | no.host = A messaging host must be selected.
6 | no.equipment = Equipment must be selected.
7 | no.file.name = The name of the file must be entered.
8 | no.data.type = Unsupported data type for value {0}.
9 | no.value = A value must be entered.
--------------------------------------------------------------------------------
/src/main/resources/i18n/TesterLang.properties:
--------------------------------------------------------------------------------
1 | # localizable strings for the Tester Application
2 | # text strings
3 | test.app.title = Test Client
4 | data.source = Data Source Type
5 | reset = Reset
6 | test = Test
7 | source.id = Source Id
8 | value = Value
9 | entities = Get Entities
10 | reasons = Get Reasons
11 | materials = Get Materials
12 | category = Category
13 | loss = Loss
14 | level = Level
15 | source = Source
16 | name = Name
17 | description = Description
18 | reason = Reason
19 | material = Material
20 | posted.message = Posted message to URL {0}.
21 | sent.message = Sent event message to {0} on port {1}.
22 | inserted.event = Wrote database event record for source id {0}.
23 | moved.file = Moved file {0} to ready folder.
24 | wrote.register = Wrote {0} to end point {1}.
25 | wrote.opc.ua = Wrote {0} to {1}.
26 | wrote.opc.da = Wrote {0} to {1}.
27 | triggered.job = Triggered job {0} with cron expression {1}.
28 | no.entity = An entity must be selected.
29 | received.message = Received message
30 | email.test.message.subject = Equipment Event from Tester
31 | load.test.start = Start Load
32 | load.test.stop = Stop Load
33 | second = sec
34 | received.data.value = Received data value
35 | wrote.proficy = Wrote {0} to tag {1}.
36 | by.http = By HTTP
37 | script = Script
38 | execute.script = Execute Script
39 |
--------------------------------------------------------------------------------
/src/main/resources/images/About.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/About.png
--------------------------------------------------------------------------------
/src/main/resources/images/Add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Add.png
--------------------------------------------------------------------------------
/src/main/resources/images/Apply.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Apply.png
--------------------------------------------------------------------------------
/src/main/resources/images/Area.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Area.png
--------------------------------------------------------------------------------
/src/main/resources/images/Availability.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Availability.png
--------------------------------------------------------------------------------
/src/main/resources/images/Backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Backup.png
--------------------------------------------------------------------------------
/src/main/resources/images/Cancel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Cancel.png
--------------------------------------------------------------------------------
/src/main/resources/images/Category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Category.png
--------------------------------------------------------------------------------
/src/main/resources/images/Changed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Changed.png
--------------------------------------------------------------------------------
/src/main/resources/images/ChartXY.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/ChartXY.png
--------------------------------------------------------------------------------
/src/main/resources/images/Choose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Choose.png
--------------------------------------------------------------------------------
/src/main/resources/images/ChooseFile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/ChooseFile.png
--------------------------------------------------------------------------------
/src/main/resources/images/Clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Clear.png
--------------------------------------------------------------------------------
/src/main/resources/images/Clock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Clock.png
--------------------------------------------------------------------------------
/src/main/resources/images/Collect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Collect.png
--------------------------------------------------------------------------------
/src/main/resources/images/Connect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Connect.png
--------------------------------------------------------------------------------
/src/main/resources/images/Convert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Convert.png
--------------------------------------------------------------------------------
/src/main/resources/images/Dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Dashboard.png
--------------------------------------------------------------------------------
/src/main/resources/images/DataSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/DataSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/DatabaseSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/DatabaseSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Delete.png
--------------------------------------------------------------------------------
/src/main/resources/images/Disconnect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Disconnect.png
--------------------------------------------------------------------------------
/src/main/resources/images/Edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Edit.png
--------------------------------------------------------------------------------
/src/main/resources/images/Editor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Editor.png
--------------------------------------------------------------------------------
/src/main/resources/images/EmailSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/EmailSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Enterprise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Enterprise.png
--------------------------------------------------------------------------------
/src/main/resources/images/Equipment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Equipment.png
--------------------------------------------------------------------------------
/src/main/resources/images/Execute.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Execute.png
--------------------------------------------------------------------------------
/src/main/resources/images/FactoryEquipment.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/FactoryEquipment.jpg
--------------------------------------------------------------------------------
/src/main/resources/images/FileSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/FileSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Filter.png
--------------------------------------------------------------------------------
/src/main/resources/images/Folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Folder.png
--------------------------------------------------------------------------------
/src/main/resources/images/Help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Help.png
--------------------------------------------------------------------------------
/src/main/resources/images/HttpSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/HttpSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Import.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Import.png
--------------------------------------------------------------------------------
/src/main/resources/images/Info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Info.png
--------------------------------------------------------------------------------
/src/main/resources/images/JMSSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/JMSSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Job.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Job.png
--------------------------------------------------------------------------------
/src/main/resources/images/KafkaSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/KafkaSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Login.png
--------------------------------------------------------------------------------
/src/main/resources/images/MQTTSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/MQTTSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Material.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Material.png
--------------------------------------------------------------------------------
/src/main/resources/images/ModbusSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/ModbusSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/New.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/New.png
--------------------------------------------------------------------------------
/src/main/resources/images/Node.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Node.png
--------------------------------------------------------------------------------
/src/main/resources/images/OK.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/OK.png
--------------------------------------------------------------------------------
/src/main/resources/images/OpcDaSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/OpcDaSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/OpcUaSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/OpcUaSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Point85.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Point85.png
--------------------------------------------------------------------------------
/src/main/resources/images/Product.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Product.png
--------------------------------------------------------------------------------
/src/main/resources/images/ProductionLine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/ProductionLine.png
--------------------------------------------------------------------------------
/src/main/resources/images/Proficy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Proficy.png
--------------------------------------------------------------------------------
/src/main/resources/images/RMQSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/RMQSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/Read.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Read.png
--------------------------------------------------------------------------------
/src/main/resources/images/Reason.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Reason.png
--------------------------------------------------------------------------------
/src/main/resources/images/Refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Refresh.png
--------------------------------------------------------------------------------
/src/main/resources/images/RefreshAll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/RefreshAll.png
--------------------------------------------------------------------------------
/src/main/resources/images/Remove.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Remove.png
--------------------------------------------------------------------------------
/src/main/resources/images/Restore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Restore.png
--------------------------------------------------------------------------------
/src/main/resources/images/Save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Save.png
--------------------------------------------------------------------------------
/src/main/resources/images/SaveAll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/SaveAll.png
--------------------------------------------------------------------------------
/src/main/resources/images/Script.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Script.png
--------------------------------------------------------------------------------
/src/main/resources/images/Setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Setup.png
--------------------------------------------------------------------------------
/src/main/resources/images/Shifts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Shifts.png
--------------------------------------------------------------------------------
/src/main/resources/images/Shutdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Shutdown.png
--------------------------------------------------------------------------------
/src/main/resources/images/Site.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Site.png
--------------------------------------------------------------------------------
/src/main/resources/images/Source.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Source.png
--------------------------------------------------------------------------------
/src/main/resources/images/Start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Start.png
--------------------------------------------------------------------------------
/src/main/resources/images/Startup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Startup.png
--------------------------------------------------------------------------------
/src/main/resources/images/Stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Stop.png
--------------------------------------------------------------------------------
/src/main/resources/images/Tag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Tag.png
--------------------------------------------------------------------------------
/src/main/resources/images/Tool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Tool.png
--------------------------------------------------------------------------------
/src/main/resources/images/UOM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/UOM.png
--------------------------------------------------------------------------------
/src/main/resources/images/Update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Update.png
--------------------------------------------------------------------------------
/src/main/resources/images/Value.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Value.png
--------------------------------------------------------------------------------
/src/main/resources/images/Watch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Watch.png
--------------------------------------------------------------------------------
/src/main/resources/images/WebSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/WebSource.png
--------------------------------------------------------------------------------
/src/main/resources/images/WorkCell.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/WorkCell.png
--------------------------------------------------------------------------------
/src/main/resources/images/WorkSchedule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/WorkSchedule.png
--------------------------------------------------------------------------------
/src/main/resources/images/Write.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/images/Write.png
--------------------------------------------------------------------------------
/src/main/resources/tilesfx/fonts/Lato-Bol.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/tilesfx/fonts/Lato-Bol.otf
--------------------------------------------------------------------------------
/src/main/resources/tilesfx/fonts/Lato-Lig.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/tilesfx/fonts/Lato-Lig.otf
--------------------------------------------------------------------------------
/src/main/resources/tilesfx/fonts/Lato-Reg.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/point85/OEE-Designer/c43b8cd56bba1ada2f91a617ef3847976bff8384/src/main/resources/tilesfx/fonts/Lato-Reg.otf
--------------------------------------------------------------------------------