Skip to content

Commit

Permalink
This has the remainder of 4.4 functionality (#532)
Browse files Browse the repository at this point in the history
* #521 change site to new org, auto-populate common fonts.
* #491 some fixes for client remote
* #491 use heartbeat frequency for reconnect interval.
* #522 Forms are completely removed from Java code.
* #531 EmbedControl Java API version tracks the project. Make serial blocking wait configurable
* Test cases and minor tweaks
  • Loading branch information
davetcc authored Oct 19, 2024
1 parent 669b9da commit 4b04722
Show file tree
Hide file tree
Showing 89 changed files with 2,280 additions and 2,339 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ jobs:
distribution: 'liberica'
cache: maven

- name: Build embedCONTROLCore
run: mvn -B install -Dgpg.skip=true --file embedCONTROLCore/pom.xml

- name: Build tcMenuJavaApi
run: mvn -B install -Dgpg.skip=true --file tcMenuJavaApi/pom.xml

- name: Build embedCONTROLCore
run: mvn -B install -Dgpg.skip=true --file embedCONTROLCore/pom.xml

- name: Build tcMenuGenerator
run: mvn -B install -Dgpg.skip=true --file tcMenuGenerator/pom.xml
Expand Down
4 changes: 2 additions & 2 deletions embedCONTROLCore/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<artifactId>embedCONTROLCore</artifactId>
<name>embedCONTROLCore</name>
<description>TcMenu embedCONTROL shared core</description>
<version>4.3.1</version>
<version>4.4.0-SNAPSHOT</version>
<url>https://tcmenu.github.io/documentation/arduino-libraries/tc-menu/</url>

<licenses>
Expand Down Expand Up @@ -63,7 +63,7 @@
<dependency>
<groupId>com.thecoderscorner.tcmenu</groupId>
<artifactId>tcMenuJavaAPI</artifactId>
<version>4.2.1</version>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class Rs232RemoteConnector extends StreamRemoteConnector {

public Rs232RemoteConnector(LocalIdentifier localId, String portName, int baud, MenuCommandProtocol protocol,
ScheduledExecutorService executor, Clock clock, ConnectMode connectMode) throws IOException {
super(localId, protocol, executor, clock);
super(localId, protocol, executor, clock, null);
serialPort = Arrays.stream(SerialPort.getCommPorts())
.filter(sp -> sp.getSystemPortName().equals(portName))
.findFirst().orElseThrow(IOException::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,5 @@ public interface AppDataStore {
*/
void updateGlobalSettings(TcPreferencesPersistence settings) throws DataException;

List<TcMenuFormPersistence> getAllForms();
List<TcMenuFormPersistence> getAllFormsForUuid(String uuid);
List<TcMenuFormPersistence> getAllProjectBasedForms();
void updateForm(TcMenuFormPersistence form) throws DataException;
void deleteForm(TcMenuFormPersistence form) throws DataException;

String getUniqueFormData(int formId);

TccDatabaseUtilities getUtilities();
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,9 @@
import com.thecoderscorner.embedcontrol.core.util.TccDatabaseUtilities;
import com.thecoderscorner.embedcontrol.customization.ApplicationThemeManager;

import java.nio.file.Files;
import java.util.List;
import java.util.Optional;

import static java.lang.System.Logger.Level.ERROR;
import static java.lang.System.Logger.Level.INFO;

/**
* Creates a connection with the local database stored in the .tcmenu directory and provides the core config
* for both embedControl and other key tables.
Expand All @@ -24,7 +20,6 @@ public DatabaseAppDataStore(TccDatabaseUtilities databaseHelper) {
try {
databaseHelper.ensureTableFormatCorrect(
TcMenuPersistedConnection.class,
TcMenuFormPersistence.class,
TcPreferencesPersistence.class,
TcPreferencesColor.class
);
Expand Down Expand Up @@ -87,74 +82,6 @@ public void updateGlobalSettings(TcPreferencesPersistence settings) throws DataE
}
}

@Override
public List<TcMenuFormPersistence> getAllForms() {
try {
removeAnyFormsWithBrokenLinks();
return databaseHelper.queryRecords(TcMenuFormPersistence.class, "");
} catch (DataException e) {
logger.log(System.Logger.Level.ERROR, "GetAllForms failed", e);
return List.of();
}
}

@Override
public List<TcMenuFormPersistence> getAllFormsForUuid(String uuid) {
try {
removeAnyFormsWithBrokenLinks();
return databaseHelper.queryRecords(TcMenuFormPersistence.class, "FORM_UUID = ?", uuid);
} catch (DataException e) {
logger.log(System.Logger.Level.ERROR, "GetAllFormsForUUID failed on " + uuid, e);
return List.of();
}
}

private void removeAnyFormsWithBrokenLinks() {
try {
var allProjectForms = databaseHelper.queryRecords(TcMenuFormPersistence.class, "FORM_MODE = 'WITHIN_PROJECT'");
for(var f : allProjectForms) {
if(!Files.exists(f.getFileNameIfPresent().orElseThrow())) {
logger.log(INFO,"Form " + f.getFormName() + " in " + f.getUuid() + " to path " + f.getFileNameIfPresent() + " no longer exists, removing");
deleteForm(f);
}
}
} catch (DataException e) {
logger.log(ERROR, "Remove any broken form links failed", e);
}
}

@Override
public List<TcMenuFormPersistence> getAllProjectBasedForms() {
try {
removeAnyFormsWithBrokenLinks();
return databaseHelper.queryRecords(TcMenuFormPersistence.class, "FORM_MODE = 'WITHIN_PROJECT'");
} catch (DataException e) {
logger.log(System.Logger.Level.ERROR, "getAllProjectBasedForms failed", e);
return List.of();
}
}

@Override
public void updateForm(TcMenuFormPersistence form) throws DataException {
databaseHelper.updateRecord(TcMenuFormPersistence.class, form);
}

@Override
public void deleteForm(TcMenuFormPersistence form) throws DataException {
databaseHelper.executeRaw("DELETE FROM TC_FORM WHERE FORM_ID=?", form.getFormId());
}

@Override
public String getUniqueFormData(int formId) {
try {
var form = databaseHelper.queryPrimaryKey(TcMenuFormPersistence.class, formId);
return form.orElseThrow().getXmlData();
} catch (Exception e) {
logger.log(System.Logger.Level.ERROR, "Get Form data failed on " + formId, e);
return "";
}
}

@Override
public TccDatabaseUtilities getUtilities() {
return databaseHelper;
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import com.thecoderscorner.embedcontrol.core.util.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;

@TableMapping(tableName = "TC_CONNECTION", uniqueKeyField = "LOCAL_ID")
Expand Down Expand Up @@ -33,7 +31,6 @@ public enum StoreConnectionType { MANUAL_SOCKET, SERIAL_CONNECTION, SIMULATOR }
private LocalDateTime lastModified;
@ProvideStore
private TccDatabaseUtilities dataStore;
private List<TcMenuFormPersistence> attachedForms = null;

public TcMenuPersistedConnection(int localId, String name, String uuid, String formName, StoreConnectionType conType,
String hostOrSerialId, String portOrBaud, String extraData, TccDatabaseUtilities dataStore) {
Expand Down Expand Up @@ -85,28 +82,6 @@ public String getFormName() {
return formName;
}

public Optional<TcMenuFormPersistence> getSelectedForm() {
ensurePopulated();
return attachedForms.stream().filter(form -> form.getFormName().equals(formName)).findFirst();
}

public List<TcMenuFormPersistence> getAllForms() {
ensurePopulated();
return attachedForms;
}

private void ensurePopulated() {
if(StringHelper.isStringEmptyOrNull(uuid)) {
attachedForms = List.of();
} else if(attachedForms == null || attachedForms.isEmpty()) {
try {
attachedForms = dataStore.queryRecords(TcMenuFormPersistence.class, "FORM_UUID = ?", uuid);
} catch (DataException e) {
logger.log(System.Logger.Level.ERROR, "Could not load forms for " + uuid, e);
}
}
}

public String getHostOrSerialId() {
return hostOrSerialId;
}
Expand Down Expand Up @@ -134,13 +109,12 @@ public boolean equals(Object obj) {
Objects.equals(this.formName, that.formName) &&
Objects.equals(this.hostOrSerialId, that.hostOrSerialId) &&
Objects.equals(this.portOrBaud, that.portOrBaud) &&
Objects.equals(this.extraData, that.extraData) &&
Objects.equals(this.attachedForms, that.attachedForms);
Objects.equals(this.extraData, that.extraData);
}

@Override
public int hashCode() {
return Objects.hash(localId, name, uuid, formName, hostOrSerialId, portOrBaud, extraData, attachedForms);
return Objects.hash(localId, name, uuid, formName, hostOrSerialId, portOrBaud, extraData);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.thecoderscorner.embedcontrol.customization.customdraw;

import com.thecoderscorner.embedcontrol.core.service.GlobalSettings;
import com.thecoderscorner.embedcontrol.customization.MenuItemStore;
import com.thecoderscorner.embedcontrol.customization.formbuilder.FormMenuComponent;
import com.thecoderscorner.embedcontrol.jfx.controlmgr.JfxNavigationHeader;
import com.thecoderscorner.embedcontrol.jfx.controlmgr.JfxNavigationManager;
import com.thecoderscorner.embedcontrol.jfx.controlmgr.panels.BaseDialogSupport;
Expand All @@ -24,17 +22,13 @@ public class CustomDrawablesSelectionController {
public TableColumn<CustomDrawingConfiguration, String> drawingNameCol;
public TableColumn<CustomDrawingConfiguration, String> drawingTypeCol;
private GlobalSettings settings;
private FormMenuComponent component;
private JfxNavigationManager navMgr;
private MenuItemStore store;
AtomicReference<EditCustomDrawablesController> controllerRef = new AtomicReference<>();

public void initialise(GlobalSettings settings, FormMenuComponent component, JfxNavigationManager navMgr) {
public void initialise(GlobalSettings settings, JfxNavigationManager navMgr) {

this.settings = settings;
this.component = component;
this.navMgr = navMgr;
this.store = component.getStore();

drawingNameCol.setCellValueFactory(cell -> new ReadOnlyObjectWrapper<>(cell.getValue().getName()));
drawingTypeCol.setCellValueFactory(cell -> new ReadOnlyObjectWrapper<>(cell.getValue().getClass().getSimpleName()));
Expand Down Expand Up @@ -68,19 +62,17 @@ private void editItem(CustomDrawingConfiguration toEdit) {
BaseDialogSupport.tryAndCreateDialog(stage, "/core_fxml/formCustomDrawingEditor.fxml", "Drawing " + toEdit.getName(),
JfxNavigationHeader.getCoreResources(), true, (EditCustomDrawablesController controller) -> {
this.controllerRef.set( controller);
controller.initialise(settings, component, toEdit);
controller.initialise(settings, toEdit);
});

var result = controllerRef.get().getResult();
if(result.isPresent()) {
store.addUpdateCustomDrawing(result.get());
refreshTable();
}
}

private void refreshTable() {
drawingTable.getItems().clear();
drawingTable.getItems().addAll(component.getStore().getCustomDrawingElements().toArray(new CustomDrawingConfiguration[0]));
drawingTable.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
drawingTable.getSelectionModel().select(0);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import com.thecoderscorner.embedcontrol.core.controlmgr.color.ControlColor;
import com.thecoderscorner.embedcontrol.core.service.GlobalSettings;
import com.thecoderscorner.embedcontrol.customization.MenuItemStore;
import com.thecoderscorner.embedcontrol.customization.formbuilder.FormMenuComponent;
import com.thecoderscorner.menu.domain.state.PortableColor;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.event.ActionEvent;
Expand All @@ -30,16 +28,12 @@ public class EditCustomDrawablesController {
public Button deleteRangeButton;
public Button saveButton;
private GlobalSettings settings;
private FormMenuComponent component;
private MenuItemStore store;
private CustomDrawingConfiguration customDrawIn;
private Optional<CustomDrawingConfiguration> result = Optional.empty();

public void initialise(GlobalSettings settings, FormMenuComponent component, CustomDrawingConfiguration custom) {
public void initialise(GlobalSettings settings, CustomDrawingConfiguration custom) {
this.settings = settings;
this.component = component;
this.customDrawIn = custom;
this.store = component.getStore();
drawingTypeCombo.getItems().addAll("Numeric Color Ranges");
drawingTypeCombo.getItems().addAll("String Color Maps");
drawingTypeCombo.getItems().addAll("Boolean Color/Icon Map");
Expand Down
Loading

0 comments on commit 4b04722

Please sign in to comment.