From 0f895e1b20bce3d75759693e9d3061367dea7d8c Mon Sep 17 00:00:00 2001 From: Noureddine Date: Thu, 2 Apr 2026 13:51:28 +0000 Subject: [PATCH 01/16] add an etcd test --- .github/workflows/testing.yml | 6 ++++-- bin/test_etcd_postrun | 21 +++++++++++++++++++++ bin/{test_etcd => test_etcd_prerun} | 0 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100755 bin/test_etcd_postrun rename bin/{test_etcd => test_etcd_prerun} (100%) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 018a0fd4a2..631988bd06 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -249,8 +249,8 @@ jobs: run: | bin/start_local sites/udmi_site_model //mqtt/localhost bin/pull_messages //mqtt/localhost > out/message_capture.log 2>&1 & - - name: bin/test_etcd - run: bin/test_etcd + - name: bin/test_etcd_prerun + run: bin/test_etcd_prerun - name: bin/test_mosquitto run: bin/test_mosquitto - name: bin/test_regclean @@ -261,6 +261,8 @@ jobs: run: bin/test_sequencer local full //mqtt/localhost $(< etc/local_tests.txt) - name: bin/test_udmis run: bin/test_udmis + - name: bin/test_etcd_postrun + run: bin/test_etcd_postrun - name: mosquitto debug if: ${{ !cancelled() }} run: | diff --git a/bin/test_etcd_postrun b/bin/test_etcd_postrun new file mode 100755 index 0000000000..a1ead64d66 --- /dev/null +++ b/bin/test_etcd_postrun @@ -0,0 +1,21 @@ +#!/bin/bash -e + +ROOT=$(dirname $0)/.. +cd $ROOT + +source etc/shell_common.sh + +# Print everything for debug +udmis/bin/etcdctl get --prefix "" + +echo "Verifying key in etcd..." +GOT_KEY=$(udmis/bin/etcdctl get /r/ZZ-TRI-FECTA/d/AHU-1:auth_key --print-value-only) +WANT_KEY=$(cat sites/udmi_site_model/devices/AHU-1/rsa_public.pem) + +if [[ "$WANT_KEY" == "$GOT_KEY" ]]; then + echo "SUCCESS: Public key correctly found in etcd at /r/TEST_REG/d/DEV-1:auth_key" +else + echo "FAILURE: Public key NOT found or incorrect in etcd. GOT: '$GOT_KEY'" WANT '$WANT_KEY'" + exit 1 +fi + diff --git a/bin/test_etcd b/bin/test_etcd_prerun similarity index 100% rename from bin/test_etcd rename to bin/test_etcd_prerun From 6cb51679a9b33f78ece2b21b7b6441dd5bec50a6 Mon Sep 17 00:00:00 2001 From: Noureddine Date: Sat, 4 Apr 2026 17:56:36 +0100 Subject: [PATCH 02/16] Support storing public keys in etcd for ImplicitIotAccessProvider (#30) * feat: add public key support to ImplicitIotAccessProvider Co-authored-by: noursaidi <9341216+noursaidi@users.noreply.github.com> * feat: support public keys in ImplicitIotAccessProvider and increase validator timeouts - Modified ImplicitIotAccessProvider.java to store non-PASSWORD credentials in the 'auth_key' property in etcd. - Preserved existing logic for PASSWORD credentials (stored as 'auth_pass'). - Increased CONFIG_TIMEOUT_SEC to 60s in validator's IotReflectorClient.java to mitigate CI timeouts. - Increased INITIALIZE_TIME_MS to 30s in validator's MqttPublisher.java for better connection reliability. Co-authored-by: noursaidi <9341216+noursaidi@users.noreply.github.com> * feat: fix ImplicitIotAccessProvider credential support and improve reflector robustness - Fixed ImplicitIotAccessProvider to preserve all critical operational fields and correctly reconstruct credentials from etcd. - Improved IotReflectorClient topic parsing to handle leading slashes and support control channel topics. - Increased validator timeouts to improve CI reliability. - Added null checks for UdmiEvents logentries and optional components. Co-authored-by: noursaidi <9341216+noursaidi@users.noreply.github.com> * feat: implement public key support and improve CI reliability - Modified ImplicitIotAccessProvider to support device public keys in etcd. - Improved MqttPublisher to handle the IMPLICIT provider and GCP broker compatibility. - Enhanced IotReflectorClient with robust topic parsing and REFLECT subtype support. - Increased validator timeouts and improved error handling for UDMI events. - Fixed 'sticky credentials' bug and resource_type defaulting in etcd. Co-authored-by: noursaidi <9341216+noursaidi@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: noursaidi <9341216+noursaidi@users.noreply.github.com> --- .../access/ImplicitIotAccessProvider.java | 67 ++++++++-- .../iot/core/proxy/IotReflectorClient.java | 118 +++++++++++------- .../bos/iot/core/proxy/MqttPublisher.java | 25 ++-- .../daq/mqtt/util/IotReflectorClient.java | 2 + 4 files changed, 146 insertions(+), 66 deletions(-) diff --git a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java index d43ef01f3d..7cf01d20bd 100644 --- a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java +++ b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java @@ -39,6 +39,7 @@ import com.google.udmi.util.GeneralUtils; import com.google.udmi.util.JsonUtil; import java.util.AbstractMap.SimpleEntry; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -80,10 +81,15 @@ public class ImplicitIotAccessProvider extends IotAccessBase { private static final String CLIENT_ID_FORMAT = "/r/%s/d/%s"; private static final String CLIENT_PREFIX = "/r"; private static final String AUTH_PASSWORD_PROPERTY = "auth_pass"; + private static final String AUTH_KEY_PROPERTY = "auth_key"; private static final String LAST_CONFIG_ACKED = "last_config_ack"; private static final String CONFIG_SUFFIX = "/config"; private static final String METADATA_STR_KEY = "metadata_str"; private static final String RESOURCE_TYPE_PROPERTY = "resource_type"; + private static final Set OPERATIONAL_FIELDS = ImmutableSet.of( + CONFIG_VER_KEY, LAST_CONFIG_KEY, LAST_STATE_KEY, BOUND_TO_KEY, + NUM_ID_PROPERTY, CREATED_AT_PROPERTY, LAST_CONFIG_ACKED, + AUTH_KEY_PROPERTY, AUTH_PASSWORD_PROPERTY); private final boolean enabled; private final ConnectionBroker broker = new MosquittoBroker(this); private final Future connLogger; @@ -152,8 +158,7 @@ private void createDevice(String registryId, String deviceId, CloudModel cloudMo ifNullThen(cloudModel.num_id, () -> cloudModel.num_id = hashedDeviceId(registryId, deviceId)); Map map = toDeviceMap(cloudModel, timestamp); - DataRef props = mungeDevice(registryId, deviceId, map); - props.entries().keySet().stream().filter(not(map::containsKey)).forEach(props::delete); + mungeDevice(registryId, deviceId, map); } private void deleteDevice(String registryId, String deviceId, CloudModel cloudModel) { @@ -174,14 +179,23 @@ private CloudModel getReply(String registryId, String deviceId, CloudModel reque } private DataRef mungeDevice(String registryId, String deviceId, Map map) { - DataRef properties = registryDeviceRef(registryId, deviceId); + DataRef props = registryDeviceRef(registryId, deviceId); map.forEach((key, value) -> - ifNotNullThen(value, v -> properties.put(key, value), () -> properties.delete(key))); + ifNotNullThen(value, v -> props.put(key, value), () -> props.delete(key))); + + props.entries().keySet().stream() + .filter(not(map::containsKey)) + .filter(not(OPERATIONAL_FIELDS::contains)) + .forEach(props::delete); if (map.containsKey(AUTH_PASSWORD_PROPERTY)) { broker.authorize(clientId(registryId, deviceId), map.get(AUTH_PASSWORD_PROPERTY)); + } else if (map.containsKey(AUTH_KEY_PROPERTY)) { + String keyData = map.get(AUTH_KEY_PROPERTY); + String password = GeneralUtils.sha256(keyData.getBytes()).substring(0, 8); + broker.authorize(clientId(registryId, deviceId), password); } - return properties; + return props; } private DataRef registryDeviceRef(String registryId, String deviceId) { @@ -193,6 +207,10 @@ private DataRef registryDevicesRef(String registryId) { } private void sendConfigUpdate(String registryId, String deviceId, String config) { + if (reflect == null) { + debug("No reflector component, skipping config update for %s/%s", registryId, deviceId); + return; + } Envelope envelope = new Envelope(); envelope.deviceRegistryId = registryId; envelope.deviceId = deviceId; @@ -207,15 +225,19 @@ private Map toDeviceMap(CloudModel cloudModel, String createdAt) properties.put(RESOURCE_TYPE_PROPERTY, ofNullable(cloudModel.resource_type).orElse(DIRECT).toString()); requireNull(cloudModel.metadata_str, "unexpected metadata_str content"); - properties.put(METADATA_STR_KEY, stringifyTerse(cloudModel.metadata)); - properties.put(BLOCKED_PROPERTY, booleanString(cloudModel.blocked)); + ifNotNullThen(cloudModel.metadata, m -> properties.put(METADATA_STR_KEY, stringifyTerse(m))); + ifNotNullThen(cloudModel.blocked, b -> properties.put(BLOCKED_PROPERTY, booleanString(b))); ifNotNullThen(cloudModel.num_id, id -> properties.put(NUM_ID_PROPERTY, id)); ifNotNullThen(cloudModel.credentials, creds -> ifNotTrueThen(creds.isEmpty(), () -> { checkState(creds.size() == 1, "only one credential supported"); Credential cred = creds.get(0); - checkState(cred.key_format == Key_format.PASSWORD, - "key type not supported: " + cred.key_format); - properties.put(AUTH_PASSWORD_PROPERTY, cred.key_data); + if (cred.key_format == Key_format.PASSWORD) { + properties.put(AUTH_PASSWORD_PROPERTY, cred.key_data); + properties.put(AUTH_KEY_PROPERTY, null); + } else { + properties.put(AUTH_KEY_PROPERTY, cred.key_data); + properties.put(AUTH_PASSWORD_PROPERTY, null); + } })); return properties; } @@ -235,7 +257,7 @@ private void updateDevice(String registryId, String deviceId, CloudModel cloudMo @Override public void activate() { database = UdmiServicePod.getComponent(IMPLICIT_DATABASE_COMPONENT); - reflect = UdmiServicePod.getComponent(ReflectProcessor.class); + reflect = UdmiServicePod.maybeGetComponent(ReflectProcessor.class); super.activate(); } @@ -258,13 +280,29 @@ public Entry fetchConfig(String registryId, String deviceId) { public CloudModel fetchDevice(String registryId, String deviceId) { touchDeviceEntry(registryId, deviceId); Map properties = registryDeviceRef(registryId, deviceId).entries(); - if (properties == null) { + if (properties == null || properties.isEmpty()) { return null; } CloudModel cloudModel = requireNonNull(JsonUtil.convertTo(CloudModel.class, properties)); cloudModel.metadata = ifNotNullGet(cloudModel.metadata_str, JsonUtil::toStringMapStr); cloudModel.metadata_str = null; + ifNotNullThen(properties.get(AUTH_KEY_PROPERTY), key -> { + Credential credential = new Credential(); + credential.key_data = key; + credential.key_format = Key_format.RS_256; // Default format for auth_key + ifNullThen(cloudModel.credentials, () -> cloudModel.credentials = new ArrayList<>()); + cloudModel.credentials.add(credential); + }); + + ifNotNullThen(properties.get(AUTH_PASSWORD_PROPERTY), pass -> { + Credential credential = new Credential(); + credential.key_data = pass; + credential.key_format = Key_format.PASSWORD; + ifNullThen(cloudModel.credentials, () -> cloudModel.credentials = new ArrayList<>()); + cloudModel.credentials.add(credential); + }); + cloudModel.gateway = new GatewayModel(); cloudModel.gateway.proxy_ids = listBoundDevices(registryId, deviceId).keySet().stream().toList(); @@ -373,6 +411,11 @@ public void saveState(String registryId, String deviceId, String stateBlob) { @Override public void sendCommandBase(Envelope baseEnvelope, SubFolder folder, String message) { + if (reflect == null) { + debug("No reflector component, skipping command for %s/%s", baseEnvelope.deviceRegistryId, + baseEnvelope.deviceId); + return; + } Envelope envelope = deepCopy(baseEnvelope); envelope.subFolder = folder; envelope.subType = SubType.COMMANDS; diff --git a/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java b/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java index 288b20baee..f691c3f672 100644 --- a/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java +++ b/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java @@ -19,10 +19,10 @@ import static com.google.udmi.util.Common.VERSION_KEY; import static com.google.udmi.util.Common.getNamespacePrefix; import static com.google.udmi.util.GeneralUtils.decodeBase64; +import static com.google.udmi.util.GeneralUtils.friendlyStackTrace; import static com.google.udmi.util.GeneralUtils.getTimestamp; import static com.google.udmi.util.GeneralUtils.ifNotNullGet; import static com.google.udmi.util.GeneralUtils.ifNotNullThen; -import static com.google.udmi.util.GeneralUtils.ifNotTrueThen; import static com.google.udmi.util.GeneralUtils.ifTrueThen; import static com.google.udmi.util.GeneralUtils.isTrue; import static com.google.udmi.util.JsonUtil.asMap; @@ -94,8 +94,8 @@ public class IotReflectorClient implements MessagePublisher { private static final String EVENTS_TYPE = "events"; private static final String MOCK_DEVICE_NUM_ID = "123456789101112"; private static final String UDMI_TOPIC = "events/" + SubFolder.UDMI; - private static final long CONFIG_TIMEOUT_SEC = 5; - private static final int UPDATE_RETRIES = 6; + private static final long CONFIG_TIMEOUT_SEC = 120; + private static final int UPDATE_RETRIES = 10; private static final Collection COPY_IDS = ImmutableSet.of(DEVICE_ID_KEY, GATEWAY_ID_KEY, SUBTYPE_PROPERTY_KEY, SUBFOLDER_PROPERTY_KEY, TRANSACTION_KEY, PUBLISH_TIME_KEY); public static final String TRANSACTION_ID_PREFIX = "RC:"; @@ -270,17 +270,11 @@ private synchronized void setReflectorState() { } private String getReflectorTopic() { - return switch (iotProvider) { - case MQTT -> SubType.REFLECT.toString(); - default -> STATE_TOPIC; - }; + return STATE_TOPIC; } private String getPublishTopic() { - return switch (iotProvider) { - case MQTT -> SubType.REFLECT.toString(); - default -> UDMI_TOPIC; - }; + return UDMI_TOPIC; } @Override @@ -308,7 +302,7 @@ private void messageHandler(String topic, String payload) { } ifNotNullThen(envelope.source, source -> messageMap.put(SOURCE_KEY, source), () -> messageMap.remove(SOURCE_KEY)); - if (SubType.CONFIG == envelope.subType) { + if (SubType.CONFIG == envelope.subType || SubType.REFLECT == envelope.subType) { ensureCloudSync(messageMap); } else if (SubType.COMMANDS == envelope.subType) { handleEncapsulatedMessage(envelope, messageMap); @@ -391,8 +385,14 @@ private void updateLastProgressEvent() { } private void processUdmiEvent(Map message) { + if (message == null) { + return; + } UdmiEvents events = convertTo(UdmiEvents.class, message); - ifNotTrueThen(events.logentries.isEmpty(), this::updateLastProgressEvent); + if (events == null || events.logentries == null || events.logentries.isEmpty()) { + return; + } + updateLastProgressEvent(); events.logentries.forEach( entry -> System.err.printf("%s %s%n", isoConvert(entry.timestamp), entry.message)); } @@ -501,45 +501,73 @@ private void error(String message) { } private Envelope parseMessageTopic(String topic) { - List parts = new ArrayList<>(Arrays.asList(topic.substring(1).split("/"))); - String leader = parts.remove(0); - if ("devices".equals(leader)) { - // Next field is registry, not device, since the reflector device id is the site registry. - String deviceId = parts.remove(0); - if (!registryId.equals(deviceId)) { + try { + List parts = new ArrayList<>(Arrays.asList(topic.split("/"))); + parts.removeIf(String::isEmpty); + if (parts.isEmpty()) { return null; } - } else if ("r".equals(leader)) { - // Next field is registry, not device, since the reflector device id is the site registry. - String parsedReg = parts.remove(0); - checkState(UDMI_REFLECT.equals(parsedReg), - format("registry id %s does not match expected %s", parsedReg, UDMI_REFLECT)); - String devSep = parts.remove(0); - checkState("d".equals(devSep), format("unexpected dev separator %s", devSep)); - String deviceId = parts.remove(0); - if (!registryId.equals(deviceId)) { + + Envelope envelope = new Envelope(); + envelope.deviceRegistryId = registryId; + + if (parts.get(0).equals("c")) { + parts.remove(0); // Remove "c" designator + envelope.source = parts.remove(0); // Remove channel (source) designator + } + + if (parts.isEmpty()) { return null; } - } else { - throw new RuntimeException("Unknown topic string " + topic); - } - Envelope envelope = new Envelope(); - envelope.deviceRegistryId = registryId; + String leader = parts.remove(0); + if ("devices".equals(leader)) { + // Next field is registry, not device, since the reflector device id is the site registry. + String deviceId = parts.remove(0); + if (!registryId.equals(deviceId)) { + return null; + } + } else if ("r".equals(leader)) { + // Next field is registry, not device, since the reflector device id is the site registry. + String parsedReg = parts.remove(0); + if (!UDMI_REFLECT.equals(parsedReg)) { + return null; + } + String devSep = parts.remove(0); + if (!"d".equals(devSep)) { + return null; + } + String deviceId = parts.remove(0); + if (!registryId.equals(deviceId)) { + return null; + } + } else { + return null; + } - String[] bits1 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); - checkState(parts.isEmpty() || bits1.length == 1, "Malformed topic: " + topic); - envelope.subType = SubType.fromValue(bits1[0]); - if (parts.isEmpty()) { - envelope.source = bits1.length > 1 ? bits1[1] : null; - } else { - String[] bits2 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); - envelope.subFolder = SubFolder.fromValue(bits2[0]); - envelope.source = bits2.length > 1 ? bits2[1] : null; - } - checkState(parts.isEmpty()); + if (parts.isEmpty()) { + return null; + } + + String[] bits1 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); + envelope.subType = SubType.fromValue(bits1[0]); + if (parts.isEmpty()) { + if (envelope.source == null) { + envelope.source = bits1.length > 1 ? bits1[1] : null; + } + } else { + String[] bits2 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); + envelope.subFolder = SubFolder.fromValue(bits2[0]); + if (envelope.source == null) { + envelope.source = bits2.length > 1 ? bits2[1] : null; + } + } - return envelope; + return envelope; + } catch (Exception e) { + debug("Error parsing topic " + topic + ": " + friendlyStackTrace(e)); + return null; + } } protected void errorHandler(Throwable throwable) { diff --git a/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java b/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java index f0feb89e7e..146f03b303 100644 --- a/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java +++ b/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java @@ -100,7 +100,7 @@ public class MqttPublisher implements MessagePublisher { private static final String MESSAGE_TOPIC_FMT = "/%s"; private static final int QOS_AT_MOST_ONCE = 0; private static final int QOS_AT_LEAST_ONCE = 1; - private static final int INITIALIZE_TIME_MS = 20000; + private static final int INITIALIZE_TIME_MS = 30000; private static final String BROKER_URL_FORMAT = "%s://%s:%s"; private static final int PUBLISH_THREAD_COUNT = 10; private static final Duration TOKEN_EXPIRATION = Duration.ofHours(1); @@ -191,7 +191,7 @@ private static String getProviderHostname(ExecutionConfiguration executionConfig () -> switch (iotProvider) { case JWT -> requireNonNull(executionConfiguration.bridge_host, "missing bridge_host"); case GBOS -> DEFAULT_GBOS_HOSTNAME; - case MQTT -> requireNonNull(executionConfiguration.project_id); + case IMPLICIT, MQTT -> requireNonNull(executionConfiguration.project_id); case CLEARBLADE -> DEFAULT_CLEARBLADE_HOSTNAME; default -> throw new RuntimeException("Unsupported iot provider " + iotProvider); } @@ -244,9 +244,11 @@ private CertManager getCertManager() { } private String getTopicBase() { + boolean isGcp = DEFAULT_GBOS_HOSTNAME.equals(providerHostname); return switch (iotProvider) { - case IMPLICIT, GBOS, CLEARBLADE -> format(DEVICE_TOPIC_FMT, deviceId); - case MQTT -> format(FULL_TOPIC_FMT, registryId, deviceId); + case GBOS, CLEARBLADE -> + isGcp ? format(DEVICE_TOPIC_FMT, deviceId) : format(FULL_TOPIC_FMT, registryId, deviceId); + case IMPLICIT, MQTT -> format(FULL_TOPIC_FMT, registryId, deviceId); default -> throw new RuntimeException("Unknown iotProvider " + iotProvider); }; } @@ -524,7 +526,7 @@ private SocketFactory getSocketFactory() { private String getUserName() { return switch (iotProvider) { - case GBOS, CLEARBLADE -> UNUSED_ACCOUNT_NAME; + case IMPLICIT, GBOS, CLEARBLADE -> UNUSED_ACCOUNT_NAME; case MQTT -> format(MQTT_USER_NAME_FMT, registryId, deviceId); default -> throw new RuntimeException("Unsupported iot provider " + iotProvider); }; @@ -549,9 +551,10 @@ private synchronized void connectAndSetupMqtt() { } private char[] getAuthToken(String audience) { + boolean isGcp = DEFAULT_GBOS_HOSTNAME.equals(providerHostname); return switch (iotProvider) { case MQTT -> getHashPassword(audience); - case GBOS, CLEARBLADE -> createJwt(audience); + case IMPLICIT, GBOS, CLEARBLADE -> isGcp ? createJwt(audience) : getHashPassword(audience); default -> throw new RuntimeException("Unsupported iotProvider " + iotProvider); }; } @@ -610,8 +613,9 @@ String getClientId(String deviceId) { return clientId; } return switch (iotProvider) { - case GBOS, CLEARBLADE -> format(LONG_ID_FMT, projectId, cloudRegion, registryId, deviceId); - case MQTT -> format(SHORT_ID_FMT, registryId, deviceId); + case GBOS, CLEARBLADE -> format(LONG_ID_FMT, projectId, cloudRegion, + registryId, deviceId); + case IMPLICIT, MQTT -> format(SHORT_ID_FMT, registryId, deviceId); default -> throw new RuntimeException("Provider not supported " + iotProvider); }; } @@ -622,7 +626,7 @@ private String getBrokerUrl() { private String getBrokerProtocol() { return switch (iotProvider) { - case MQTT, GBOS, CLEARBLADE -> "ssl"; + case IMPLICIT, MQTT, GBOS, CLEARBLADE -> "ssl"; default -> throw new RuntimeException("Provider not supported " + iotProvider); }; } @@ -652,6 +656,9 @@ private void subscribeToErrors(String deviceId) { private void subscribeToCommands(String deviceId) { clientSubscribe(COMMAND_TOPIC, QOS_AT_MOST_ONCE); + if (!DEFAULT_GBOS_HOSTNAME.equals(providerHostname)) { + clientSubscribe("/c/+" + COMMAND_TOPIC, QOS_AT_MOST_ONCE); + } } String getDeviceId() { diff --git a/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java b/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java index dc7662b781..99177ae11a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java @@ -22,6 +22,7 @@ import static udmi.schema.CloudModel.ModelOperation.DELETE; import static udmi.schema.CloudModel.ModelOperation.READ; import static udmi.schema.CloudModel.ModelOperation.UNBIND; +import static udmi.schema.CloudModel.Resource_type.REGISTRY; import com.google.common.base.Preconditions; import com.google.daq.mqtt.util.MessagePublisher.QuerySpeed; @@ -119,6 +120,7 @@ public void updateDevice(String deviceId, CloudModel device) { @Override public void updateRegistry(CloudModel registry) { registry.operation = ofNullable(registry.operation).orElse(ModelOperation.UPDATE); + registry.resource_type = REGISTRY; cloudModelTransaction(null, CLOUD_MODEL_TOPIC, registry); } From 0d8cee1c470ad6abc0d53bab6778352ce3c364af Mon Sep 17 00:00:00 2001 From: Noureddine El Saidi Date: Fri, 17 Apr 2026 12:16:01 +0100 Subject: [PATCH 03/16] Revert "Support storing public keys in etcd for ImplicitIotAccessProvider (#30)" This reverts commit 6cb51679a9b33f78ece2b21b7b6441dd5bec50a6. --- .../access/ImplicitIotAccessProvider.java | 67 ++-------- .../iot/core/proxy/IotReflectorClient.java | 118 +++++++----------- .../bos/iot/core/proxy/MqttPublisher.java | 25 ++-- .../daq/mqtt/util/IotReflectorClient.java | 2 - 4 files changed, 66 insertions(+), 146 deletions(-) diff --git a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java index 7cf01d20bd..d43ef01f3d 100644 --- a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java +++ b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java @@ -39,7 +39,6 @@ import com.google.udmi.util.GeneralUtils; import com.google.udmi.util.JsonUtil; import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -81,15 +80,10 @@ public class ImplicitIotAccessProvider extends IotAccessBase { private static final String CLIENT_ID_FORMAT = "/r/%s/d/%s"; private static final String CLIENT_PREFIX = "/r"; private static final String AUTH_PASSWORD_PROPERTY = "auth_pass"; - private static final String AUTH_KEY_PROPERTY = "auth_key"; private static final String LAST_CONFIG_ACKED = "last_config_ack"; private static final String CONFIG_SUFFIX = "/config"; private static final String METADATA_STR_KEY = "metadata_str"; private static final String RESOURCE_TYPE_PROPERTY = "resource_type"; - private static final Set OPERATIONAL_FIELDS = ImmutableSet.of( - CONFIG_VER_KEY, LAST_CONFIG_KEY, LAST_STATE_KEY, BOUND_TO_KEY, - NUM_ID_PROPERTY, CREATED_AT_PROPERTY, LAST_CONFIG_ACKED, - AUTH_KEY_PROPERTY, AUTH_PASSWORD_PROPERTY); private final boolean enabled; private final ConnectionBroker broker = new MosquittoBroker(this); private final Future connLogger; @@ -158,7 +152,8 @@ private void createDevice(String registryId, String deviceId, CloudModel cloudMo ifNullThen(cloudModel.num_id, () -> cloudModel.num_id = hashedDeviceId(registryId, deviceId)); Map map = toDeviceMap(cloudModel, timestamp); - mungeDevice(registryId, deviceId, map); + DataRef props = mungeDevice(registryId, deviceId, map); + props.entries().keySet().stream().filter(not(map::containsKey)).forEach(props::delete); } private void deleteDevice(String registryId, String deviceId, CloudModel cloudModel) { @@ -179,23 +174,14 @@ private CloudModel getReply(String registryId, String deviceId, CloudModel reque } private DataRef mungeDevice(String registryId, String deviceId, Map map) { - DataRef props = registryDeviceRef(registryId, deviceId); + DataRef properties = registryDeviceRef(registryId, deviceId); map.forEach((key, value) -> - ifNotNullThen(value, v -> props.put(key, value), () -> props.delete(key))); - - props.entries().keySet().stream() - .filter(not(map::containsKey)) - .filter(not(OPERATIONAL_FIELDS::contains)) - .forEach(props::delete); + ifNotNullThen(value, v -> properties.put(key, value), () -> properties.delete(key))); if (map.containsKey(AUTH_PASSWORD_PROPERTY)) { broker.authorize(clientId(registryId, deviceId), map.get(AUTH_PASSWORD_PROPERTY)); - } else if (map.containsKey(AUTH_KEY_PROPERTY)) { - String keyData = map.get(AUTH_KEY_PROPERTY); - String password = GeneralUtils.sha256(keyData.getBytes()).substring(0, 8); - broker.authorize(clientId(registryId, deviceId), password); } - return props; + return properties; } private DataRef registryDeviceRef(String registryId, String deviceId) { @@ -207,10 +193,6 @@ private DataRef registryDevicesRef(String registryId) { } private void sendConfigUpdate(String registryId, String deviceId, String config) { - if (reflect == null) { - debug("No reflector component, skipping config update for %s/%s", registryId, deviceId); - return; - } Envelope envelope = new Envelope(); envelope.deviceRegistryId = registryId; envelope.deviceId = deviceId; @@ -225,19 +207,15 @@ private Map toDeviceMap(CloudModel cloudModel, String createdAt) properties.put(RESOURCE_TYPE_PROPERTY, ofNullable(cloudModel.resource_type).orElse(DIRECT).toString()); requireNull(cloudModel.metadata_str, "unexpected metadata_str content"); - ifNotNullThen(cloudModel.metadata, m -> properties.put(METADATA_STR_KEY, stringifyTerse(m))); - ifNotNullThen(cloudModel.blocked, b -> properties.put(BLOCKED_PROPERTY, booleanString(b))); + properties.put(METADATA_STR_KEY, stringifyTerse(cloudModel.metadata)); + properties.put(BLOCKED_PROPERTY, booleanString(cloudModel.blocked)); ifNotNullThen(cloudModel.num_id, id -> properties.put(NUM_ID_PROPERTY, id)); ifNotNullThen(cloudModel.credentials, creds -> ifNotTrueThen(creds.isEmpty(), () -> { checkState(creds.size() == 1, "only one credential supported"); Credential cred = creds.get(0); - if (cred.key_format == Key_format.PASSWORD) { - properties.put(AUTH_PASSWORD_PROPERTY, cred.key_data); - properties.put(AUTH_KEY_PROPERTY, null); - } else { - properties.put(AUTH_KEY_PROPERTY, cred.key_data); - properties.put(AUTH_PASSWORD_PROPERTY, null); - } + checkState(cred.key_format == Key_format.PASSWORD, + "key type not supported: " + cred.key_format); + properties.put(AUTH_PASSWORD_PROPERTY, cred.key_data); })); return properties; } @@ -257,7 +235,7 @@ private void updateDevice(String registryId, String deviceId, CloudModel cloudMo @Override public void activate() { database = UdmiServicePod.getComponent(IMPLICIT_DATABASE_COMPONENT); - reflect = UdmiServicePod.maybeGetComponent(ReflectProcessor.class); + reflect = UdmiServicePod.getComponent(ReflectProcessor.class); super.activate(); } @@ -280,29 +258,13 @@ public Entry fetchConfig(String registryId, String deviceId) { public CloudModel fetchDevice(String registryId, String deviceId) { touchDeviceEntry(registryId, deviceId); Map properties = registryDeviceRef(registryId, deviceId).entries(); - if (properties == null || properties.isEmpty()) { + if (properties == null) { return null; } CloudModel cloudModel = requireNonNull(JsonUtil.convertTo(CloudModel.class, properties)); cloudModel.metadata = ifNotNullGet(cloudModel.metadata_str, JsonUtil::toStringMapStr); cloudModel.metadata_str = null; - ifNotNullThen(properties.get(AUTH_KEY_PROPERTY), key -> { - Credential credential = new Credential(); - credential.key_data = key; - credential.key_format = Key_format.RS_256; // Default format for auth_key - ifNullThen(cloudModel.credentials, () -> cloudModel.credentials = new ArrayList<>()); - cloudModel.credentials.add(credential); - }); - - ifNotNullThen(properties.get(AUTH_PASSWORD_PROPERTY), pass -> { - Credential credential = new Credential(); - credential.key_data = pass; - credential.key_format = Key_format.PASSWORD; - ifNullThen(cloudModel.credentials, () -> cloudModel.credentials = new ArrayList<>()); - cloudModel.credentials.add(credential); - }); - cloudModel.gateway = new GatewayModel(); cloudModel.gateway.proxy_ids = listBoundDevices(registryId, deviceId).keySet().stream().toList(); @@ -411,11 +373,6 @@ public void saveState(String registryId, String deviceId, String stateBlob) { @Override public void sendCommandBase(Envelope baseEnvelope, SubFolder folder, String message) { - if (reflect == null) { - debug("No reflector component, skipping command for %s/%s", baseEnvelope.deviceRegistryId, - baseEnvelope.deviceId); - return; - } Envelope envelope = deepCopy(baseEnvelope); envelope.subFolder = folder; envelope.subType = SubType.COMMANDS; diff --git a/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java b/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java index f691c3f672..288b20baee 100644 --- a/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java +++ b/validator/src/main/java/com/google/bos/iot/core/proxy/IotReflectorClient.java @@ -19,10 +19,10 @@ import static com.google.udmi.util.Common.VERSION_KEY; import static com.google.udmi.util.Common.getNamespacePrefix; import static com.google.udmi.util.GeneralUtils.decodeBase64; -import static com.google.udmi.util.GeneralUtils.friendlyStackTrace; import static com.google.udmi.util.GeneralUtils.getTimestamp; import static com.google.udmi.util.GeneralUtils.ifNotNullGet; import static com.google.udmi.util.GeneralUtils.ifNotNullThen; +import static com.google.udmi.util.GeneralUtils.ifNotTrueThen; import static com.google.udmi.util.GeneralUtils.ifTrueThen; import static com.google.udmi.util.GeneralUtils.isTrue; import static com.google.udmi.util.JsonUtil.asMap; @@ -94,8 +94,8 @@ public class IotReflectorClient implements MessagePublisher { private static final String EVENTS_TYPE = "events"; private static final String MOCK_DEVICE_NUM_ID = "123456789101112"; private static final String UDMI_TOPIC = "events/" + SubFolder.UDMI; - private static final long CONFIG_TIMEOUT_SEC = 120; - private static final int UPDATE_RETRIES = 10; + private static final long CONFIG_TIMEOUT_SEC = 5; + private static final int UPDATE_RETRIES = 6; private static final Collection COPY_IDS = ImmutableSet.of(DEVICE_ID_KEY, GATEWAY_ID_KEY, SUBTYPE_PROPERTY_KEY, SUBFOLDER_PROPERTY_KEY, TRANSACTION_KEY, PUBLISH_TIME_KEY); public static final String TRANSACTION_ID_PREFIX = "RC:"; @@ -270,11 +270,17 @@ private synchronized void setReflectorState() { } private String getReflectorTopic() { - return STATE_TOPIC; + return switch (iotProvider) { + case MQTT -> SubType.REFLECT.toString(); + default -> STATE_TOPIC; + }; } private String getPublishTopic() { - return UDMI_TOPIC; + return switch (iotProvider) { + case MQTT -> SubType.REFLECT.toString(); + default -> UDMI_TOPIC; + }; } @Override @@ -302,7 +308,7 @@ private void messageHandler(String topic, String payload) { } ifNotNullThen(envelope.source, source -> messageMap.put(SOURCE_KEY, source), () -> messageMap.remove(SOURCE_KEY)); - if (SubType.CONFIG == envelope.subType || SubType.REFLECT == envelope.subType) { + if (SubType.CONFIG == envelope.subType) { ensureCloudSync(messageMap); } else if (SubType.COMMANDS == envelope.subType) { handleEncapsulatedMessage(envelope, messageMap); @@ -385,14 +391,8 @@ private void updateLastProgressEvent() { } private void processUdmiEvent(Map message) { - if (message == null) { - return; - } UdmiEvents events = convertTo(UdmiEvents.class, message); - if (events == null || events.logentries == null || events.logentries.isEmpty()) { - return; - } - updateLastProgressEvent(); + ifNotTrueThen(events.logentries.isEmpty(), this::updateLastProgressEvent); events.logentries.forEach( entry -> System.err.printf("%s %s%n", isoConvert(entry.timestamp), entry.message)); } @@ -501,73 +501,45 @@ private void error(String message) { } private Envelope parseMessageTopic(String topic) { - try { - List parts = new ArrayList<>(Arrays.asList(topic.split("/"))); - parts.removeIf(String::isEmpty); - if (parts.isEmpty()) { - return null; - } - - Envelope envelope = new Envelope(); - envelope.deviceRegistryId = registryId; - - if (parts.get(0).equals("c")) { - parts.remove(0); // Remove "c" designator - envelope.source = parts.remove(0); // Remove channel (source) designator - } - - if (parts.isEmpty()) { - return null; - } - - String leader = parts.remove(0); - if ("devices".equals(leader)) { - // Next field is registry, not device, since the reflector device id is the site registry. - String deviceId = parts.remove(0); - if (!registryId.equals(deviceId)) { - return null; - } - } else if ("r".equals(leader)) { - // Next field is registry, not device, since the reflector device id is the site registry. - String parsedReg = parts.remove(0); - if (!UDMI_REFLECT.equals(parsedReg)) { - return null; - } - String devSep = parts.remove(0); - if (!"d".equals(devSep)) { - return null; - } - String deviceId = parts.remove(0); - if (!registryId.equals(deviceId)) { - return null; - } - } else { + List parts = new ArrayList<>(Arrays.asList(topic.substring(1).split("/"))); + String leader = parts.remove(0); + if ("devices".equals(leader)) { + // Next field is registry, not device, since the reflector device id is the site registry. + String deviceId = parts.remove(0); + if (!registryId.equals(deviceId)) { return null; } - - if (parts.isEmpty()) { + } else if ("r".equals(leader)) { + // Next field is registry, not device, since the reflector device id is the site registry. + String parsedReg = parts.remove(0); + checkState(UDMI_REFLECT.equals(parsedReg), + format("registry id %s does not match expected %s", parsedReg, UDMI_REFLECT)); + String devSep = parts.remove(0); + checkState("d".equals(devSep), format("unexpected dev separator %s", devSep)); + String deviceId = parts.remove(0); + if (!registryId.equals(deviceId)) { return null; } + } else { + throw new RuntimeException("Unknown topic string " + topic); + } - String[] bits1 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); - envelope.subType = SubType.fromValue(bits1[0]); - if (parts.isEmpty()) { - if (envelope.source == null) { - envelope.source = bits1.length > 1 ? bits1[1] : null; - } - } else { - String[] bits2 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); - envelope.subFolder = SubFolder.fromValue(bits2[0]); - if (envelope.source == null) { - envelope.source = bits2.length > 1 ? bits2[1] : null; - } - } + Envelope envelope = new Envelope(); + envelope.deviceRegistryId = registryId; - return envelope; - } catch (Exception e) { - debug("Error parsing topic " + topic + ": " + friendlyStackTrace(e)); - return null; + String[] bits1 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); + checkState(parts.isEmpty() || bits1.length == 1, "Malformed topic: " + topic); + envelope.subType = SubType.fromValue(bits1[0]); + if (parts.isEmpty()) { + envelope.source = bits1.length > 1 ? bits1[1] : null; + } else { + String[] bits2 = parts.remove(0).split(SOURCE_SEPARATOR_REGEX); + envelope.subFolder = SubFolder.fromValue(bits2[0]); + envelope.source = bits2.length > 1 ? bits2[1] : null; } + checkState(parts.isEmpty()); + + return envelope; } protected void errorHandler(Throwable throwable) { diff --git a/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java b/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java index 146f03b303..f0feb89e7e 100644 --- a/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java +++ b/validator/src/main/java/com/google/bos/iot/core/proxy/MqttPublisher.java @@ -100,7 +100,7 @@ public class MqttPublisher implements MessagePublisher { private static final String MESSAGE_TOPIC_FMT = "/%s"; private static final int QOS_AT_MOST_ONCE = 0; private static final int QOS_AT_LEAST_ONCE = 1; - private static final int INITIALIZE_TIME_MS = 30000; + private static final int INITIALIZE_TIME_MS = 20000; private static final String BROKER_URL_FORMAT = "%s://%s:%s"; private static final int PUBLISH_THREAD_COUNT = 10; private static final Duration TOKEN_EXPIRATION = Duration.ofHours(1); @@ -191,7 +191,7 @@ private static String getProviderHostname(ExecutionConfiguration executionConfig () -> switch (iotProvider) { case JWT -> requireNonNull(executionConfiguration.bridge_host, "missing bridge_host"); case GBOS -> DEFAULT_GBOS_HOSTNAME; - case IMPLICIT, MQTT -> requireNonNull(executionConfiguration.project_id); + case MQTT -> requireNonNull(executionConfiguration.project_id); case CLEARBLADE -> DEFAULT_CLEARBLADE_HOSTNAME; default -> throw new RuntimeException("Unsupported iot provider " + iotProvider); } @@ -244,11 +244,9 @@ private CertManager getCertManager() { } private String getTopicBase() { - boolean isGcp = DEFAULT_GBOS_HOSTNAME.equals(providerHostname); return switch (iotProvider) { - case GBOS, CLEARBLADE -> - isGcp ? format(DEVICE_TOPIC_FMT, deviceId) : format(FULL_TOPIC_FMT, registryId, deviceId); - case IMPLICIT, MQTT -> format(FULL_TOPIC_FMT, registryId, deviceId); + case IMPLICIT, GBOS, CLEARBLADE -> format(DEVICE_TOPIC_FMT, deviceId); + case MQTT -> format(FULL_TOPIC_FMT, registryId, deviceId); default -> throw new RuntimeException("Unknown iotProvider " + iotProvider); }; } @@ -526,7 +524,7 @@ private SocketFactory getSocketFactory() { private String getUserName() { return switch (iotProvider) { - case IMPLICIT, GBOS, CLEARBLADE -> UNUSED_ACCOUNT_NAME; + case GBOS, CLEARBLADE -> UNUSED_ACCOUNT_NAME; case MQTT -> format(MQTT_USER_NAME_FMT, registryId, deviceId); default -> throw new RuntimeException("Unsupported iot provider " + iotProvider); }; @@ -551,10 +549,9 @@ private synchronized void connectAndSetupMqtt() { } private char[] getAuthToken(String audience) { - boolean isGcp = DEFAULT_GBOS_HOSTNAME.equals(providerHostname); return switch (iotProvider) { case MQTT -> getHashPassword(audience); - case IMPLICIT, GBOS, CLEARBLADE -> isGcp ? createJwt(audience) : getHashPassword(audience); + case GBOS, CLEARBLADE -> createJwt(audience); default -> throw new RuntimeException("Unsupported iotProvider " + iotProvider); }; } @@ -613,9 +610,8 @@ String getClientId(String deviceId) { return clientId; } return switch (iotProvider) { - case GBOS, CLEARBLADE -> format(LONG_ID_FMT, projectId, cloudRegion, - registryId, deviceId); - case IMPLICIT, MQTT -> format(SHORT_ID_FMT, registryId, deviceId); + case GBOS, CLEARBLADE -> format(LONG_ID_FMT, projectId, cloudRegion, registryId, deviceId); + case MQTT -> format(SHORT_ID_FMT, registryId, deviceId); default -> throw new RuntimeException("Provider not supported " + iotProvider); }; } @@ -626,7 +622,7 @@ private String getBrokerUrl() { private String getBrokerProtocol() { return switch (iotProvider) { - case IMPLICIT, MQTT, GBOS, CLEARBLADE -> "ssl"; + case MQTT, GBOS, CLEARBLADE -> "ssl"; default -> throw new RuntimeException("Provider not supported " + iotProvider); }; } @@ -656,9 +652,6 @@ private void subscribeToErrors(String deviceId) { private void subscribeToCommands(String deviceId) { clientSubscribe(COMMAND_TOPIC, QOS_AT_MOST_ONCE); - if (!DEFAULT_GBOS_HOSTNAME.equals(providerHostname)) { - clientSubscribe("/c/+" + COMMAND_TOPIC, QOS_AT_MOST_ONCE); - } } String getDeviceId() { diff --git a/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java b/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java index 99177ae11a..dc7662b781 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java @@ -22,7 +22,6 @@ import static udmi.schema.CloudModel.ModelOperation.DELETE; import static udmi.schema.CloudModel.ModelOperation.READ; import static udmi.schema.CloudModel.ModelOperation.UNBIND; -import static udmi.schema.CloudModel.Resource_type.REGISTRY; import com.google.common.base.Preconditions; import com.google.daq.mqtt.util.MessagePublisher.QuerySpeed; @@ -120,7 +119,6 @@ public void updateDevice(String deviceId, CloudModel device) { @Override public void updateRegistry(CloudModel registry) { registry.operation = ofNullable(registry.operation).orElse(ModelOperation.UPDATE); - registry.resource_type = REGISTRY; cloudModelTransaction(null, CLOUD_MODEL_TOPIC, registry); } From fcbb4a31f4d08e8f8c5aba9195a78d271a9c7849 Mon Sep 17 00:00:00 2001 From: Noureddine El Saidi Date: Fri, 17 Apr 2026 12:16:26 +0100 Subject: [PATCH 04/16] add keys --- .../bos/udmi/service/access/ImplicitIotAccessProvider.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java index d43ef01f3d..9269e5909c 100644 --- a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java +++ b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java @@ -80,6 +80,7 @@ public class ImplicitIotAccessProvider extends IotAccessBase { private static final String CLIENT_ID_FORMAT = "/r/%s/d/%s"; private static final String CLIENT_PREFIX = "/r"; private static final String AUTH_PASSWORD_PROPERTY = "auth_pass"; + private static final String AUTH_KEY_PROPERTY = "auth_key"; private static final String LAST_CONFIG_ACKED = "last_config_ack"; private static final String CONFIG_SUFFIX = "/config"; private static final String METADATA_STR_KEY = "metadata_str"; @@ -208,6 +209,8 @@ private Map toDeviceMap(CloudModel cloudModel, String createdAt) ofNullable(cloudModel.resource_type).orElse(DIRECT).toString()); requireNull(cloudModel.metadata_str, "unexpected metadata_str content"); properties.put(METADATA_STR_KEY, stringifyTerse(cloudModel.metadata)); + ifNotNullThen(ifNotNullGet(cloudModel.metadata, metadata -> metadata.get("key_bytes")), + keyBytes -> properties.put(AUTH_KEY_PROPERTY, keyBytes)); properties.put(BLOCKED_PROPERTY, booleanString(cloudModel.blocked)); ifNotNullThen(cloudModel.num_id, id -> properties.put(NUM_ID_PROPERTY, id)); ifNotNullThen(cloudModel.credentials, creds -> ifNotTrueThen(creds.isEmpty(), () -> { From 196e319a790534c22c5314e6ec722c5ed7b91158 Mon Sep 17 00:00:00 2001 From: Noureddine El Saidi Date: Fri, 17 Apr 2026 13:47:53 +0100 Subject: [PATCH 05/16] syntax fix --- bin/test_etcd_postrun | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/test_etcd_postrun b/bin/test_etcd_postrun index a1ead64d66..b42aa495f4 100755 --- a/bin/test_etcd_postrun +++ b/bin/test_etcd_postrun @@ -15,7 +15,7 @@ WANT_KEY=$(cat sites/udmi_site_model/devices/AHU-1/rsa_public.pem) if [[ "$WANT_KEY" == "$GOT_KEY" ]]; then echo "SUCCESS: Public key correctly found in etcd at /r/TEST_REG/d/DEV-1:auth_key" else - echo "FAILURE: Public key NOT found or incorrect in etcd. GOT: '$GOT_KEY'" WANT '$WANT_KEY'" + echo "FAILURE: Public key NOT found or incorrect in etcd. GOT: '$GOT_KEY' WANT '$WANT_KEY'" exit 1 fi From 76852d6e2b84e37bc09b3c80844ad0763335b654 Mon Sep 17 00:00:00 2001 From: Noureddine El Saidi Date: Fri, 17 Apr 2026 14:04:20 +0100 Subject: [PATCH 06/16] trace post run --- bin/test_etcd_postrun | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/test_etcd_postrun b/bin/test_etcd_postrun index b42aa495f4..dd4aba7c7a 100755 --- a/bin/test_etcd_postrun +++ b/bin/test_etcd_postrun @@ -1,4 +1,5 @@ #!/bin/bash -e +set -x ROOT=$(dirname $0)/.. cd $ROOT @@ -12,10 +13,11 @@ echo "Verifying key in etcd..." GOT_KEY=$(udmis/bin/etcdctl get /r/ZZ-TRI-FECTA/d/AHU-1:auth_key --print-value-only) WANT_KEY=$(cat sites/udmi_site_model/devices/AHU-1/rsa_public.pem) + if [[ "$WANT_KEY" == "$GOT_KEY" ]]; then echo "SUCCESS: Public key correctly found in etcd at /r/TEST_REG/d/DEV-1:auth_key" else - echo "FAILURE: Public key NOT found or incorrect in etcd. GOT: '$GOT_KEY' WANT '$WANT_KEY'" + echo "FAILURE: Public key NOT found or incorrect in etcd.\n\n GOT: '$GOT_KEY' \nWANT '$WANT_KEY'" exit 1 fi From c205bfc29e624d7e1bd0c79599f623604d787ace Mon Sep 17 00:00:00 2001 From: Noureddine El Saidi Date: Fri, 17 Apr 2026 17:58:08 +0100 Subject: [PATCH 07/16] test --- bin/test_etcd_postrun | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/test_etcd_postrun b/bin/test_etcd_postrun index dd4aba7c7a..40d3d37267 100755 --- a/bin/test_etcd_postrun +++ b/bin/test_etcd_postrun @@ -8,6 +8,7 @@ source etc/shell_common.sh # Print everything for debug udmis/bin/etcdctl get --prefix "" +more sites/udmi_site_model/devices/AHU-1/* | cat echo "Verifying key in etcd..." GOT_KEY=$(udmis/bin/etcdctl get /r/ZZ-TRI-FECTA/d/AHU-1:auth_key --print-value-only) From 9475a778c8681ae364ea80396a493fab3be6e6d7 Mon Sep 17 00:00:00 2001 From: elsaidi Date: Thu, 7 May 2026 15:19:56 +0000 Subject: [PATCH 08/16] make credentials only keys and add a new password prompt (gencode needed) --- schema/model_cloud.json | 7 ++++++ .../access/ImplicitIotAccessProvider.java | 23 ++++++++++++++++--- .../daq/mqtt/util/CloudDeviceSettings.java | 1 + .../google/daq/mqtt/util/CloudIotManager.java | 12 +++++----- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/schema/model_cloud.json b/schema/model_cloud.json index 5ea71eb010..6e929cb5b8 100644 --- a/schema/model_cloud.json +++ b/schema/model_cloud.json @@ -82,6 +82,13 @@ "style": "bold" } }, + "password": { + "type": "string", + "$presentation": { + "display": "show", + "style": "bold" + } + }, "credentials": { "type": "array", "items": { diff --git a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java index 9269e5909c..adcec21dc2 100644 --- a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java +++ b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java @@ -216,10 +216,13 @@ private Map toDeviceMap(CloudModel cloudModel, String createdAt) ifNotNullThen(cloudModel.credentials, creds -> ifNotTrueThen(creds.isEmpty(), () -> { checkState(creds.size() == 1, "only one credential supported"); Credential cred = creds.get(0); - checkState(cred.key_format == Key_format.PASSWORD, - "key type not supported: " + cred.key_format); - properties.put(AUTH_PASSWORD_PROPERTY, cred.key_data); + checkState(cred.key_format != Key_format.PASSWORD, + "key type PASSWORD should be in the password field, not credentials"); + properties.put(AUTH_KEY_PROPERTY, cred.key_data); })); + ifNotNullThen(cloudModel.password, password -> { + properties.put(AUTH_PASSWORD_PROPERTY, password); + }); return properties; } @@ -268,6 +271,20 @@ public CloudModel fetchDevice(String registryId, String deviceId) { cloudModel.metadata = ifNotNullGet(cloudModel.metadata_str, JsonUtil::toStringMapStr); cloudModel.metadata_str = null; + String authKey = properties.get(AUTH_KEY_PROPERTY); + if (authKey != null) { + Credential credential = new Credential(); + credential.key_data = authKey; + if (cloudModel.auth_type != null) { + credential.key_format = Key_format.fromValue(cloudModel.auth_type.value()); + } else { + credential.key_format = Key_format.RS_256; + } + cloudModel.credentials = List.of(credential); + } + + cloudModel.password = properties.get(AUTH_PASSWORD_PROPERTY); + cloudModel.gateway = new GatewayModel(); cloudModel.gateway.proxy_ids = listBoundDevices(registryId, deviceId).keySet().stream().toList(); diff --git a/validator/src/main/java/com/google/daq/mqtt/util/CloudDeviceSettings.java b/validator/src/main/java/com/google/daq/mqtt/util/CloudDeviceSettings.java index 07c286c7bb..bf4bb79f8a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/CloudDeviceSettings.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/CloudDeviceSettings.java @@ -9,6 +9,7 @@ public class CloudDeviceSettings { public List credentials; + public String password; public String metadata; public String deviceNumId; public List proxyDevices; diff --git a/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java b/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java index cb12773081..3d80733e81 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java @@ -229,17 +229,16 @@ public boolean registerDevice(String deviceId, CloudDeviceSettings settings) { } private void coerceCredentialsToPassword(String deviceId, CloudDeviceSettings settings) { - // TODO: Make this less ugly/hacky. Ick. - settings.credentials.forEach(credential -> { + if (settings.credentials != null && !settings.credentials.isEmpty()) { + Credential credential = settings.credentials.get(0); try { String prefix = getCredentialPrefix(credential.key_format); - credential.key_format = Key_format.PASSWORD; File privateKey = new File(siteModel, format(PRIVATE_KEY_BYTES_FMT, deviceId, prefix)); - credential.key_data = makePassword(readAllBytes(privateKey.toPath())); + settings.password = makePassword(readAllBytes(privateKey.toPath())); } catch (Exception e) { - throw new RuntimeException("While coercing credential for " + deviceId, e); + throw new RuntimeException("While generating password for " + deviceId, e); } - }); + } } private String getCredentialPrefix(Key_format keyFormat) { @@ -290,6 +289,7 @@ private CloudModel makeDevice(CloudDeviceSettings settings, CloudModel oldDevice CloudModel cloudModel = new CloudModel(); cloudModel.resource_type = gatewayIfTrue(settings.proxyDevices != null); cloudModel.credentials = getCredentials(settings); + cloudModel.password = settings.password; cloudModel.metadata = metadataMap; cloudModel.num_id = settings.deviceNumId; cloudModel.blocked = settings.blocked; From 99b713e70f72fd7d80c5bda78afc9e2087d2ad19 Mon Sep 17 00:00:00 2001 From: Noureddine Date: Thu, 7 May 2026 15:34:55 +0000 Subject: [PATCH 09/16] gencode --- .gencode_hash.txt | 34 +-- gencode/docs/events.html | 155 +++++++++++++ gencode/docs/events_discovery.html | 134 +++++++++++ gencode/docs/metadata.html | 216 ++++++++++++++++++ .../udmi/schema/BridgePodConfiguration.java | 4 +- .../udmi/schema/BuildingConfigEntity.java | 4 +- .../java/udmi/schema/BuildingTranslation.java | 4 +- gencode/java/udmi/schema/CloudModel.java | 6 +- gencode/java/udmi/schema/DiscoveryConfig.java | 4 +- .../udmi/schema/EndpointConfiguration.java | 18 +- gencode/java/udmi/schema/Events.java | 4 +- .../java/udmi/schema/FamilyLocalnetModel.java | 6 +- gencode/java/udmi/schema/GatewayModel.java | 4 +- gencode/java/udmi/schema/RefDiscovery.java | 12 +- gencode/java/udmi/schema/SiteLinks.java | 6 +- gencode/java/udmi/schema/SiteLocation.java | 4 +- gencode/presentation/presentation.json | 6 + gencode/python/poetry.lock | 94 -------- gencode/python/udmi/schema/model_cloud.py | 1 + misc/bambi/presentation.gld.json | 6 + 20 files changed, 575 insertions(+), 147 deletions(-) delete mode 100644 gencode/python/poetry.lock diff --git a/.gencode_hash.txt b/.gencode_hash.txt index e28f07bf5b..7c5e80b125 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -7,14 +7,14 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html b34c136cee32cb88f32a427ff400c3898ed49168f6dcaca1bc9ba65365bc5ae4 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html -ab67acd56a1e1aacf819b2dade143dfd271107d512d8c9992c1fee4eab8bfce9 gencode/docs/events.html -98a4b1cf7b3f1f9f701d0a839fb88f88a50c970762eab9d9bda3789bd50205a1 gencode/docs/events_discovery.html +cabd1ca7ef805261f7b2db4ccbde33e78cc2d50012a7d1a72786ba171c15dd0e gencode/docs/events.html +a6848d7ef98835dcc0ba15048ecf692ee2b978f66974d74b1ff94eedf1cab41d gencode/docs/events_discovery.html e550539d52ce1f63b35247d425c038e5d5ba33f997eedd09e486a3bd9838c2c2 gencode/docs/events_mapping.html eafcc3c48189f605f114cde051fea9d13fc5f1a3e395d64fb0a91cb53d4c9aeb gencode/docs/events_pointset.html cac253f57c5c92ef32e2a5f91b6cec8229e8db1dcffcc96a58f06da068e741e7 gencode/docs/events_system.html 151c1b62db35e84e51d5ff2a7464f61ced4d7fb0c7eb795715c245ee0a1b3436 gencode/docs/events_udmi.html 73dbe799e7943ec20ac58b544998e986a39539d4ef0cb4f5023e92e7634d3124 gencode/docs/events_validation.html -6dfa8c2ceddd3d25fd03307d679f7e026905c52879696ec232468900c328201a gencode/docs/metadata.html +10153581a33c094aab8bc390258c3c11b1781478dab270c74609b92b882f6cbb gencode/docs/metadata.html c86682715d348bd3dd971fa5bd925a8a3d0f3c2944c65a47c4b64fe1a5ccdea2 gencode/docs/monitoring.html 474ca16edc9f3cad2bb3ab40b6993cbced90263f762f66ee6cd246a6c4a0d18f gencode/docs/persistent_device.html e11595fd11477947a27461f8ef4fb6facb5f60e2abd6212193f7581ab123ff84 gencode/docs/properties.html @@ -36,13 +36,13 @@ fa94295bc0c97518634c7232e7e55e1c923d7eb42bfa3004651ed183e1ccbb40 gencode/java/u 14055abcc28b9dccc8807ff0e3de201a3fa94cd57b879c22bd7f4fab40d109d9 gencode/java/udmi/schema/BlobBlobsetState.java 1fe0e6cd4b82a54a0d696f0dd43998c3b08cf7d8b78f63b53fcd9c06d49f589c gencode/java/udmi/schema/BlobsetConfig.java 8c8e8941e34da08cddb0401ec296828d8b7aac1810dbfab6ae9ba5d7019c0dd0 gencode/java/udmi/schema/BlobsetState.java -1110d57d04d4e5da14f6b02d40053cc9b9dabf8e24e44b7441a4a7c66cb546ac gencode/java/udmi/schema/BridgePodConfiguration.java +31cc92287358c87acfbc41d24c71f000b23a3e96b0f18fed9331f1c349efab91 gencode/java/udmi/schema/BridgePodConfiguration.java 2e7c0912c6f43b8dae9e9149b7361d3640bde4f01de6e13d8e487fe01be2c2c0 gencode/java/udmi/schema/Bucket.java -8773da8131fdc0f9409df0c04132abdaa01f658d0ec0e73dd8aa714b24454bdc gencode/java/udmi/schema/BuildingConfigEntity.java -519ead2ee2fe3e6fe48547266dec9a545521d52d262646f261ebfbbf8500d25f gencode/java/udmi/schema/BuildingTranslation.java +534627b0799ca9089332b949c89fdd614f3b8a679b08e3f697d10801ff89c4dc gencode/java/udmi/schema/BuildingConfigEntity.java +79b678b524b3edce833fe56691dcd8c47b53a12f7491e761121408e6e7ceb5e3 gencode/java/udmi/schema/BuildingTranslation.java 27ca4f61bd43beca0871b465f3906785a1030a4526605f1fa9b10e3adda8df05 gencode/java/udmi/schema/CapabilityValidationState.java 224c6be2cb6d90a47d181fa30ba1418cf6cc5385ec1c010fe112728382a70216 gencode/java/udmi/schema/Category.java -0101d742dbaa23fb2152b044e5eabd6d219047cddbb973e9626a026946b7ddfc gencode/java/udmi/schema/CloudModel.java +ed9a4802c21fffdedb27040f74714b2cf467d0e32cd9e3d8d864a4f1836612b5 gencode/java/udmi/schema/CloudModel.java 051b4a7c85a2f1a310787f88f336be2fc9b87c99a94ac2f970955d2fe1daa931 gencode/java/udmi/schema/CloudQuery.java 3e6572b16184bde7557eb67334405e7c5b58446e64802658cf0d5ef3b0018909 gencode/java/udmi/schema/Common.java c44f25ab2b9f17ea18c7cd5b78e4c5565ba4ecc20d426105d778c28bb6b32263 gencode/java/udmi/schema/Config.java @@ -56,29 +56,29 @@ fd289a9a132a880bf0a14b80ed082ab1dcd77caab54175f8d6ccfc381d2d21ab gencode/java/u 6869d00b063748e9995ba6940f6a323916074a7af28ab1d227772b86a39600bb gencode/java/udmi/schema/DeviceValidationEvents.java ec863d0b69880bd2c3030abcdce1d2b8992a475908ead979cc30722b25c1ead2 gencode/java/udmi/schema/Dimension.java 09c9d674ffdde05f00878924a00ef81dc18d1135d5969e8ab9a8db80038198b7 gencode/java/udmi/schema/DiscoveryCommand.java -ff98f706c967bbef7be35d826f5abad822c89d2fa981c4d8e6cffbb106d3740c gencode/java/udmi/schema/DiscoveryConfig.java +8b9832181020921d31c9991086dca86dc8bd0ab1bf3c1adbce8b436d1f8ae8e6 gencode/java/udmi/schema/DiscoveryConfig.java 752faf5921575c895cf984e136effd0dc4837f095c66c26dd0c54fcd31b4a486 gencode/java/udmi/schema/DiscoveryEvents.java 1a04079116f4032b17108e873719bbb2c60c19f392136e7c906122199b472227 gencode/java/udmi/schema/DiscoveryModel.java b41f59d0c1aa74bb9abbdc7525d726f45a4ba8df3866c2dd40458601ffab60fb gencode/java/udmi/schema/DiscoveryState.java 7019b8a1522261a69d708e2e7725b8bc44510c5c80f5c056543af2b7728bfa42 gencode/java/udmi/schema/Electricity.java -a9ab0b95408ee04fc98cbc2363bead24c67e64e279e6088e0dd3e4b97154c65d gencode/java/udmi/schema/EndpointConfiguration.java +695ba089a30cbcb6b101147031e0546cef728322bad349392462cb57688d473a gencode/java/udmi/schema/EndpointConfiguration.java d2e7afd6e1a9250480144c114ee8877afb9b0dd7048495fe96a821d9e6c80475 gencode/java/udmi/schema/Entry.java d4bfd2c997937cd1b0f9b1c73ed46b0133b2b264d367ca9001b7d84ecd598611 gencode/java/udmi/schema/Enumerations.java 11ccad9b1ed4a4745e7bf321adc4bb7f684e9bfa90877314094533b9749512b7 gencode/java/udmi/schema/Envelope.java -b8542a0908719901405220783e85be33197cf16ef5be6458cec5ae92c274e88f gencode/java/udmi/schema/Events.java +4163478ed17191461b0a65abd11c4ddf912cbc104f040a734efd290306fab7b7 gencode/java/udmi/schema/Events.java 80f49ae6ee6a870a92267a9d8510d8b7faef456cd516a5148e9ed491fd8e0857 gencode/java/udmi/schema/ExecutionConfiguration.java bd8350cd05a4091851cf0361cb3a8eb98701ba30df21ff14414e2dabf1289b7f gencode/java/udmi/schema/FamilyDiscovery.java a5e06026eaff51d62d42b447d458d83a310772865f8f3ebd66ac2855e7f381a4 gencode/java/udmi/schema/FamilyDiscoveryConfig.java 56a08262985bff885a11ff686e8f2fcb8d2f6ed258c03aada576693740fc3f61 gencode/java/udmi/schema/FamilyDiscoveryModel.java c242fa94f3cbbfc801c96fa1e9409c8ec84db2a5d0b3a861acff0fc85d7976c7 gencode/java/udmi/schema/FamilyDiscoveryState.java 2145077e0e2f43d6a4d9c54a3b92b952ee47bbf86866f6052807a70987cefc28 gencode/java/udmi/schema/FamilyLocalnetConfig.java -e46f9d833d13b4aaa0ba56cafdf52d888307d11801d638898677147011e816b9 gencode/java/udmi/schema/FamilyLocalnetModel.java +3820172aee203da9b60fcfc426819c02e8f7c65ecd9829314b25a87640871475 gencode/java/udmi/schema/FamilyLocalnetModel.java 54a115b97388b0d8e46a05db5677e4391e5ccb148c0f2348883151928c885845 gencode/java/udmi/schema/FamilyLocalnetState.java b39e12241d1bdabe0db583dc01a7a6b87efb5b57957dae5a3571cfec077b397c gencode/java/udmi/schema/FeatureDiscovery.java 7206888cd092db347e7e92168987798eb0a3f290f2ed307427d971f15b18c49a gencode/java/udmi/schema/FeatureValidationState.java e256275d840d94c6e61316e756b0dad6d823db8900e35e785f6ef5001fdb5fc9 gencode/java/udmi/schema/Gas.java b63fed8a190948ee3924946c1ad3bc9cf06fdeafc7cea0886bfe52e390448ddf gencode/java/udmi/schema/GatewayConfig.java -0e842669c4ca03cc2b938b6d2b4eea50bf54e13937130d1ab1fa7bc70883e728 gencode/java/udmi/schema/GatewayModel.java +0d2e02095e119ecdf4b35fb827f560c89f4f9e9ae8bdcf8648cb07432ff234c8 gencode/java/udmi/schema/GatewayModel.java 1f7f6809e143e9e3e13e6fa73776a893b62b0c05f8802087b1e276dc0ab83e19 gencode/java/udmi/schema/GatewayState.java 175bdf9cc0b376b7f6c6b21174cb0ec568c49a1026e99bbdbc264b3cea7e7702 gencode/java/udmi/schema/IotAccess.java d0858bd7ba306176f4e3c19eeb69ef2467afec0832b6917b72d3ab87469e4974 gencode/java/udmi/schema/Jwt.java @@ -118,14 +118,14 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java 86b4de51f2ba6e9afe34a5a9069e34cf5aa14b7e08d7ac2ed688bad42a769205 gencode/java/udmi/schema/PubberOptions.java -cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java +9b208315dae017c35f2c31234348413dd8f569fd3d9922ea46259959662cc7fc gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java ad70168de2e1801e26f2c1a8c33a6169e236682de59fd3f6038a77ac264aca14 gencode/java/udmi/schema/SequenceValidationState.java 72e3a07ce890c73fccd3d0cf757d073746b60b722c94edd5425dc066951a048f gencode/java/udmi/schema/SetupUdmiConfig.java e5ce202bcf889287faa7d2d262d2f53f2241a10c659a83687de478803bdab127 gencode/java/udmi/schema/SetupUdmiState.java -7774221174299a7f137576a591d4ae76aaaec5a1950804e73403acf0157b31b5 gencode/java/udmi/schema/SiteLinks.java -956c8af0bb83a33d05bcbcd211d161f9a76723c270372cd443838e31f97c09e3 gencode/java/udmi/schema/SiteLocation.java +2f802c738dd4c19211af8b6dec71b7659c51177c2774cfd34fc07e617bbe5b3e gencode/java/udmi/schema/SiteLinks.java +a3dc7f14d4270ea370db2015785ad12d4bd61825213ab7ac4ee03dda21dde4f2 gencode/java/udmi/schema/SiteLocation.java 5e2f813e0d0a0986b4f1a0613732344bd8c0fd53acfe6afe3d7bdfedda13fa34 gencode/java/udmi/schema/SiteMetadata.java dc2fd582fffefbdeaf3bf7724ca34e94475c3cc820891ea4cc829847eb9ba79d gencode/java/udmi/schema/State.java a371232810e8a2ffb380384ca717da1ee5cc0b2e1129df9b5d8faa07ab4b1f46 gencode/java/udmi/schema/StateSystemHardware.java @@ -148,7 +148,7 @@ a671f5341703d03200c3a4b4df41f109e587e3723292321998595da60b03e4a2 gencode/java/u eadc72e31b4796273479967303513b16563af0f946d1e1c7eba1748f9b133d40 gencode/java/udmi/schema/ValidationSummary.java 5596535c39826e904949eed7894c3ecd1ee982d974beb7469f888965af2c7845 gencode/java/udmi/schema/VirtualEquipmentLinks.java 11f8dab5296d41e86cd623a4ed27b972ae673b141907cb913397d4eb53880c59 gencode/java/udmi/schema/Water.java -d2a53a067185447ce672e5521cdb073a2b2100b9384b68e87211cafc5ef8cb2a gencode/presentation/presentation.json +a9821341076243267145f2a174f9a5f79909fbf3e200a367e1fe3d0ff161908c gencode/presentation/presentation.json 4cf98cbd132cde0cc8813ac35cf3712cb46014154c817c04ad2902c268cdd8fe gencode/python/pyproject.toml bb97256e4fcefa7616773db613a154baeb147b013b38c0ad498f8847b12ca65a gencode/python/udmi/schema/__init__.py f9d90861e568b27445bef241f04cce64cc44731c95c8bd9e3f65cef79d42dab0 gencode/python/udmi/schema/_base.py @@ -203,7 +203,7 @@ e4cdab07942e52cae243b4dddbc72676794914947dd66df8add0f5969f31fd11 gencode/python a3ea178f98a4993da708e2ec41f5ede74aa92d742ffbe201a77adef803d4143a gencode/python/udmi/schema/events_validation_device.py 5660433b409bdaeacdce6b128660914586cca434e5373b3f94c04e89952642b4 gencode/python/udmi/schema/level.py 43811aabf8aad095589dbcc65ab32ec1ff9720e2ee22d62ad5705b87984678a1 gencode/python/udmi/schema/metadata.py -bb3e28f8ae3b43ddd3b99fbc96a2a3cfd7103e0742fb9427c2191b3674ccea90 gencode/python/udmi/schema/model_cloud.py +6d19eb94063acbc8e5432b9827e8b20f4f8cd02efa6ae760fabe60652c69542d gencode/python/udmi/schema/model_cloud.py 670ea1a72ade3d9af0df00c694cbd755f3a2748022c99b90f3b86a017b7424a9 gencode/python/udmi/schema/model_cloud_config.py 798ee0ee5094d1c3e4681626832d16428df26e752e0e0425d61178f6e231efa6 gencode/python/udmi/schema/model_discovery.py f33f0b5a048fc50d03811f81256b920d954307ad80f2dcc57fb2d882317447b0 gencode/python/udmi/schema/model_discovery_family.py diff --git a/gencode/docs/events.html b/gencode/docs/events.html index ee6ae82e58..726dd65ce6 100644 --- a/gencode/docs/events.html +++ b/gencode/docs/events.html @@ -7760,6 +7760,60 @@

+ + + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -9636,6 +9690,60 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -21680,6 +21788,53 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
diff --git a/gencode/docs/events_discovery.html b/gencode/docs/events_discovery.html index 753d4a53dd..8467096e8e 100644 --- a/gencode/docs/events_discovery.html +++ b/gencode/docs/events_discovery.html @@ -3578,6 +3578,53 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -5237,6 +5284,53 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -16014,6 +16108,46 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
diff --git a/gencode/docs/metadata.html b/gencode/docs/metadata.html index 8665fab192..47f8d732a1 100644 --- a/gencode/docs/metadata.html +++ b/gencode/docs/metadata.html @@ -1231,6 +1231,46 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -16799,6 +16839,67 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -18892,6 +18993,67 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -32203,6 +32365,60 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
diff --git a/gencode/java/udmi/schema/BridgePodConfiguration.java b/gencode/java/udmi/schema/BridgePodConfiguration.java index 09122ccf95..1d46d69146 100644 --- a/gencode/java/udmi/schema/BridgePodConfiguration.java +++ b/gencode/java/udmi/schema/BridgePodConfiguration.java @@ -45,9 +45,9 @@ public class BridgePodConfiguration { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.from == null)? 0 :this.from.hashCode())); result = ((result* 31)+((this.morf == null)? 0 :this.morf.hashCode())); result = ((result* 31)+((this.enabled == null)? 0 :this.enabled.hashCode())); - result = ((result* 31)+((this.from == null)? 0 :this.from.hashCode())); return result; } @@ -60,7 +60,7 @@ public boolean equals(Object other) { return false; } BridgePodConfiguration rhs = ((BridgePodConfiguration) other); - return ((((this.morf == rhs.morf)||((this.morf!= null)&&this.morf.equals(rhs.morf)))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled))))&&((this.from == rhs.from)||((this.from!= null)&&this.from.equals(rhs.from)))); + return ((((this.from == rhs.from)||((this.from!= null)&&this.from.equals(rhs.from)))&&((this.morf == rhs.morf)||((this.morf!= null)&&this.morf.equals(rhs.morf))))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled)))); } } diff --git a/gencode/java/udmi/schema/BuildingConfigEntity.java b/gencode/java/udmi/schema/BuildingConfigEntity.java index 3186c44beb..212e30a3f7 100644 --- a/gencode/java/udmi/schema/BuildingConfigEntity.java +++ b/gencode/java/udmi/schema/BuildingConfigEntity.java @@ -30,9 +30,9 @@ public class BuildingConfigEntity { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.type == null)? 0 :this.type.hashCode())); result = ((result* 31)+((this.etag == null)? 0 :this.etag.hashCode())); result = ((result* 31)+((this.code == null)? 0 :this.code.hashCode())); + result = ((result* 31)+((this.type == null)? 0 :this.type.hashCode())); return result; } @@ -45,7 +45,7 @@ public boolean equals(Object other) { return false; } BuildingConfigEntity rhs = ((BuildingConfigEntity) other); - return ((((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type)))&&((this.etag == rhs.etag)||((this.etag!= null)&&this.etag.equals(rhs.etag))))&&((this.code == rhs.code)||((this.code!= null)&&this.code.equals(rhs.code)))); + return ((((this.etag == rhs.etag)||((this.etag!= null)&&this.etag.equals(rhs.etag)))&&((this.code == rhs.code)||((this.code!= null)&&this.code.equals(rhs.code))))&&((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type)))); } } diff --git a/gencode/java/udmi/schema/BuildingTranslation.java b/gencode/java/udmi/schema/BuildingTranslation.java index 871aa773f8..3eb59f86c4 100644 --- a/gencode/java/udmi/schema/BuildingTranslation.java +++ b/gencode/java/udmi/schema/BuildingTranslation.java @@ -36,8 +36,8 @@ public class BuildingTranslation { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.present_value == null)? 0 :this.present_value.hashCode())); result = ((result* 31)+((this.units == null)? 0 :this.units.hashCode())); + result = ((result* 31)+((this.present_value == null)? 0 :this.present_value.hashCode())); result = ((result* 31)+((this.states == null)? 0 :this.states.hashCode())); return result; } @@ -51,7 +51,7 @@ public boolean equals(Object other) { return false; } BuildingTranslation rhs = ((BuildingTranslation) other); - return ((((this.present_value == rhs.present_value)||((this.present_value!= null)&&this.present_value.equals(rhs.present_value)))&&((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units))))&&((this.states == rhs.states)||((this.states!= null)&&this.states.equals(rhs.states)))); + return ((((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units)))&&((this.present_value == rhs.present_value)||((this.present_value!= null)&&this.present_value.equals(rhs.present_value))))&&((this.states == rhs.states)||((this.states!= null)&&this.states.equals(rhs.states)))); } } diff --git a/gencode/java/udmi/schema/CloudModel.java b/gencode/java/udmi/schema/CloudModel.java index 819f4ad03d..f838e21176 100644 --- a/gencode/java/udmi/schema/CloudModel.java +++ b/gencode/java/udmi/schema/CloudModel.java @@ -31,6 +31,7 @@ "config", "blocked", "detail", + "password", "credentials", "updated_time", "last_event_time", @@ -110,6 +111,8 @@ public class CloudModel { public Boolean blocked; @JsonProperty("detail") public java.lang.String detail; + @JsonProperty("password") + public java.lang.String password; @JsonProperty("credentials") public List credentials; @JsonProperty("updated_time") @@ -166,6 +169,7 @@ public int hashCode() { result = ((result* 31)+((this.resource_type == null)? 0 :this.resource_type.hashCode())); result = ((result* 31)+((this.num_id == null)? 0 :this.num_id.hashCode())); result = ((result* 31)+((this.version == null)? 0 :this.version.hashCode())); + result = ((result* 31)+((this.password == null)? 0 :this.password.hashCode())); result = ((result* 31)+((this.blocked == null)? 0 :this.blocked.hashCode())); result = ((result* 31)+((this.last_error_time == null)? 0 :this.last_error_time.hashCode())); result = ((result* 31)+((this.metadata_str == null)? 0 :this.metadata_str.hashCode())); @@ -188,7 +192,7 @@ public boolean equals(Object other) { return false; } CloudModel rhs = ((CloudModel) other); - return (((((((((((((((((((((((this.updated_time == rhs.updated_time)||((this.updated_time!= null)&&this.updated_time.equals(rhs.updated_time)))&&((this.auth_type == rhs.auth_type)||((this.auth_type!= null)&&this.auth_type.equals(rhs.auth_type))))&&((this.device_key == rhs.device_key)||((this.device_key!= null)&&this.device_key.equals(rhs.device_key))))&&((this.metadata == rhs.metadata)||((this.metadata!= null)&&this.metadata.equals(rhs.metadata))))&&((this.last_event_time == rhs.last_event_time)||((this.last_event_time!= null)&&this.last_event_time.equals(rhs.last_event_time))))&&((this.last_config_time == rhs.last_config_time)||((this.last_config_time!= null)&&this.last_config_time.equals(rhs.last_config_time))))&&((this.credentials == rhs.credentials)||((this.credentials!= null)&&this.credentials.equals(rhs.credentials))))&&((this.last_state_time == rhs.last_state_time)||((this.last_state_time!= null)&&this.last_state_time.equals(rhs.last_state_time))))&&((this.functions_ver == rhs.functions_ver)||((this.functions_ver!= null)&&this.functions_ver.equals(rhs.functions_ver))))&&((this.resource_type == rhs.resource_type)||((this.resource_type!= null)&&this.resource_type.equals(rhs.resource_type))))&&((this.num_id == rhs.num_id)||((this.num_id!= null)&&this.num_id.equals(rhs.num_id))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.blocked == rhs.blocked)||((this.blocked!= null)&&this.blocked.equals(rhs.blocked))))&&((this.last_error_time == rhs.last_error_time)||((this.last_error_time!= null)&&this.last_error_time.equals(rhs.last_error_time))))&&((this.metadata_str == rhs.metadata_str)||((this.metadata_str!= null)&&this.metadata_str.equals(rhs.metadata_str))))&&((this.detail == rhs.detail)||((this.detail!= null)&&this.detail.equals(rhs.detail))))&&((this.device_ids == rhs.device_ids)||((this.device_ids!= null)&&this.device_ids.equals(rhs.device_ids))))&&((this.config == rhs.config)||((this.config!= null)&&this.config.equals(rhs.config))))&&((this.last_config_ack == rhs.last_config_ack)||((this.last_config_ack!= null)&&this.last_config_ack.equals(rhs.last_config_ack))))&&((this.operation == rhs.operation)||((this.operation!= null)&&this.operation.equals(rhs.operation))))&&((this.gateway == rhs.gateway)||((this.gateway!= null)&&this.gateway.equals(rhs.gateway))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp)))); + return ((((((((((((((((((((((((this.updated_time == rhs.updated_time)||((this.updated_time!= null)&&this.updated_time.equals(rhs.updated_time)))&&((this.auth_type == rhs.auth_type)||((this.auth_type!= null)&&this.auth_type.equals(rhs.auth_type))))&&((this.device_key == rhs.device_key)||((this.device_key!= null)&&this.device_key.equals(rhs.device_key))))&&((this.metadata == rhs.metadata)||((this.metadata!= null)&&this.metadata.equals(rhs.metadata))))&&((this.last_event_time == rhs.last_event_time)||((this.last_event_time!= null)&&this.last_event_time.equals(rhs.last_event_time))))&&((this.last_config_time == rhs.last_config_time)||((this.last_config_time!= null)&&this.last_config_time.equals(rhs.last_config_time))))&&((this.credentials == rhs.credentials)||((this.credentials!= null)&&this.credentials.equals(rhs.credentials))))&&((this.last_state_time == rhs.last_state_time)||((this.last_state_time!= null)&&this.last_state_time.equals(rhs.last_state_time))))&&((this.functions_ver == rhs.functions_ver)||((this.functions_ver!= null)&&this.functions_ver.equals(rhs.functions_ver))))&&((this.resource_type == rhs.resource_type)||((this.resource_type!= null)&&this.resource_type.equals(rhs.resource_type))))&&((this.num_id == rhs.num_id)||((this.num_id!= null)&&this.num_id.equals(rhs.num_id))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.password == rhs.password)||((this.password!= null)&&this.password.equals(rhs.password))))&&((this.blocked == rhs.blocked)||((this.blocked!= null)&&this.blocked.equals(rhs.blocked))))&&((this.last_error_time == rhs.last_error_time)||((this.last_error_time!= null)&&this.last_error_time.equals(rhs.last_error_time))))&&((this.metadata_str == rhs.metadata_str)||((this.metadata_str!= null)&&this.metadata_str.equals(rhs.metadata_str))))&&((this.detail == rhs.detail)||((this.detail!= null)&&this.detail.equals(rhs.detail))))&&((this.device_ids == rhs.device_ids)||((this.device_ids!= null)&&this.device_ids.equals(rhs.device_ids))))&&((this.config == rhs.config)||((this.config!= null)&&this.config.equals(rhs.config))))&&((this.last_config_ack == rhs.last_config_ack)||((this.last_config_ack!= null)&&this.last_config_ack.equals(rhs.last_config_ack))))&&((this.operation == rhs.operation)||((this.operation!= null)&&this.operation.equals(rhs.operation))))&&((this.gateway == rhs.gateway)||((this.gateway!= null)&&this.gateway.equals(rhs.gateway))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp)))); } diff --git a/gencode/java/udmi/schema/DiscoveryConfig.java b/gencode/java/udmi/schema/DiscoveryConfig.java index 91ed927a43..a9bdca6bca 100644 --- a/gencode/java/udmi/schema/DiscoveryConfig.java +++ b/gencode/java/udmi/schema/DiscoveryConfig.java @@ -49,8 +49,8 @@ public class DiscoveryConfig { public int hashCode() { int result = 1; result = ((result* 31)+((this.generation == null)? 0 :this.generation.hashCode())); - result = ((result* 31)+((this.families == null)? 0 :this.families.hashCode())); result = ((result* 31)+((this.enumerations == null)? 0 :this.enumerations.hashCode())); + result = ((result* 31)+((this.families == null)? 0 :this.families.hashCode())); return result; } @@ -63,7 +63,7 @@ public boolean equals(Object other) { return false; } DiscoveryConfig rhs = ((DiscoveryConfig) other); - return ((((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation)))&&((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families))))&&((this.enumerations == rhs.enumerations)||((this.enumerations!= null)&&this.enumerations.equals(rhs.enumerations)))); + return ((((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation)))&&((this.enumerations == rhs.enumerations)||((this.enumerations!= null)&&this.enumerations.equals(rhs.enumerations))))&&((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families)))); } } diff --git a/gencode/java/udmi/schema/EndpointConfiguration.java b/gencode/java/udmi/schema/EndpointConfiguration.java index ebfba2835a..40ec7da079 100644 --- a/gencode/java/udmi/schema/EndpointConfiguration.java +++ b/gencode/java/udmi/schema/EndpointConfiguration.java @@ -184,30 +184,30 @@ public class EndpointConfiguration { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.generation == null)? 0 :this.generation.hashCode())); result = ((result* 31)+((this.keyBytes == null)? 0 :this.keyBytes.hashCode())); result = ((result* 31)+((this.side_id == null)? 0 :this.side_id.hashCode())); - result = ((result* 31)+((this.transport == null)? 0 :this.transport.hashCode())); - result = ((result* 31)+((this.publish_delay_sec == null)? 0 :this.publish_delay_sec.hashCode())); result = ((result* 31)+((this.error == null)? 0 :this.error.hashCode())); - result = ((result* 31)+((this.config_sync_sec == null)? 0 :this.config_sync_sec.hashCode())); result = ((result* 31)+((this.deviceId == null)? 0 :this.deviceId.hashCode())); result = ((result* 31)+((this.client_id == null)? 0 :this.client_id.hashCode())); result = ((result* 31)+((this.enabled == null)? 0 :this.enabled.hashCode())); result = ((result* 31)+((this.capacity == null)? 0 :this.capacity.hashCode())); - result = ((result* 31)+((this.send_id == null)? 0 :this.send_id.hashCode())); result = ((result* 31)+((this.protocol == null)? 0 :this.protocol.hashCode())); result = ((result* 31)+((this.hostname == null)? 0 :this.hostname.hashCode())); result = ((result* 31)+((this.payload == null)? 0 :this.payload.hashCode())); - result = ((result* 31)+((this.port == null)? 0 :this.port.hashCode())); result = ((result* 31)+((this.topic_prefix == null)? 0 :this.topic_prefix.hashCode())); + result = ((result* 31)+((this.recv_id == null)? 0 :this.recv_id.hashCode())); + result = ((result* 31)+((this.algorithm == null)? 0 :this.algorithm.hashCode())); + result = ((result* 31)+((this.generation == null)? 0 :this.generation.hashCode())); + result = ((result* 31)+((this.transport == null)? 0 :this.transport.hashCode())); + result = ((result* 31)+((this.publish_delay_sec == null)? 0 :this.publish_delay_sec.hashCode())); + result = ((result* 31)+((this.config_sync_sec == null)? 0 :this.config_sync_sec.hashCode())); + result = ((result* 31)+((this.send_id == null)? 0 :this.send_id.hashCode())); + result = ((result* 31)+((this.port == null)? 0 :this.port.hashCode())); result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); result = ((result* 31)+((this.periodic_sec == null)? 0 :this.periodic_sec.hashCode())); result = ((result* 31)+((this.noConfigAck == null)? 0 :this.noConfigAck.hashCode())); - result = ((result* 31)+((this.recv_id == null)? 0 :this.recv_id.hashCode())); result = ((result* 31)+((this.gatewayId == null)? 0 :this.gatewayId.hashCode())); result = ((result* 31)+((this.auth_provider == null)? 0 :this.auth_provider.hashCode())); - result = ((result* 31)+((this.algorithm == null)? 0 :this.algorithm.hashCode())); return result; } @@ -220,7 +220,7 @@ public boolean equals(Object other) { return false; } EndpointConfiguration rhs = ((EndpointConfiguration) other); - return (((((((((((((((((((((((((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation)))&&((this.keyBytes == rhs.keyBytes)||((this.keyBytes!= null)&&this.keyBytes.equals(rhs.keyBytes))))&&((this.side_id == rhs.side_id)||((this.side_id!= null)&&this.side_id.equals(rhs.side_id))))&&((this.transport == rhs.transport)||((this.transport!= null)&&this.transport.equals(rhs.transport))))&&((this.publish_delay_sec == rhs.publish_delay_sec)||((this.publish_delay_sec!= null)&&this.publish_delay_sec.equals(rhs.publish_delay_sec))))&&((this.error == rhs.error)||((this.error!= null)&&this.error.equals(rhs.error))))&&((this.config_sync_sec == rhs.config_sync_sec)||((this.config_sync_sec!= null)&&this.config_sync_sec.equals(rhs.config_sync_sec))))&&((this.deviceId == rhs.deviceId)||((this.deviceId!= null)&&this.deviceId.equals(rhs.deviceId))))&&((this.client_id == rhs.client_id)||((this.client_id!= null)&&this.client_id.equals(rhs.client_id))))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled))))&&((this.capacity == rhs.capacity)||((this.capacity!= null)&&this.capacity.equals(rhs.capacity))))&&((this.send_id == rhs.send_id)||((this.send_id!= null)&&this.send_id.equals(rhs.send_id))))&&((this.protocol == rhs.protocol)||((this.protocol!= null)&&this.protocol.equals(rhs.protocol))))&&((this.hostname == rhs.hostname)||((this.hostname!= null)&&this.hostname.equals(rhs.hostname))))&&((this.payload == rhs.payload)||((this.payload!= null)&&this.payload.equals(rhs.payload))))&&((this.port == rhs.port)||((this.port!= null)&&this.port.equals(rhs.port))))&&((this.topic_prefix == rhs.topic_prefix)||((this.topic_prefix!= null)&&this.topic_prefix.equals(rhs.topic_prefix))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.periodic_sec == rhs.periodic_sec)||((this.periodic_sec!= null)&&this.periodic_sec.equals(rhs.periodic_sec))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.recv_id == rhs.recv_id)||((this.recv_id!= null)&&this.recv_id.equals(rhs.recv_id))))&&((this.gatewayId == rhs.gatewayId)||((this.gatewayId!= null)&&this.gatewayId.equals(rhs.gatewayId))))&&((this.auth_provider == rhs.auth_provider)||((this.auth_provider!= null)&&this.auth_provider.equals(rhs.auth_provider))))&&((this.algorithm == rhs.algorithm)||((this.algorithm!= null)&&this.algorithm.equals(rhs.algorithm)))); + return (((((((((((((((((((((((((this.keyBytes == rhs.keyBytes)||((this.keyBytes!= null)&&this.keyBytes.equals(rhs.keyBytes)))&&((this.side_id == rhs.side_id)||((this.side_id!= null)&&this.side_id.equals(rhs.side_id))))&&((this.error == rhs.error)||((this.error!= null)&&this.error.equals(rhs.error))))&&((this.deviceId == rhs.deviceId)||((this.deviceId!= null)&&this.deviceId.equals(rhs.deviceId))))&&((this.client_id == rhs.client_id)||((this.client_id!= null)&&this.client_id.equals(rhs.client_id))))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled))))&&((this.capacity == rhs.capacity)||((this.capacity!= null)&&this.capacity.equals(rhs.capacity))))&&((this.protocol == rhs.protocol)||((this.protocol!= null)&&this.protocol.equals(rhs.protocol))))&&((this.hostname == rhs.hostname)||((this.hostname!= null)&&this.hostname.equals(rhs.hostname))))&&((this.payload == rhs.payload)||((this.payload!= null)&&this.payload.equals(rhs.payload))))&&((this.topic_prefix == rhs.topic_prefix)||((this.topic_prefix!= null)&&this.topic_prefix.equals(rhs.topic_prefix))))&&((this.recv_id == rhs.recv_id)||((this.recv_id!= null)&&this.recv_id.equals(rhs.recv_id))))&&((this.algorithm == rhs.algorithm)||((this.algorithm!= null)&&this.algorithm.equals(rhs.algorithm))))&&((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation))))&&((this.transport == rhs.transport)||((this.transport!= null)&&this.transport.equals(rhs.transport))))&&((this.publish_delay_sec == rhs.publish_delay_sec)||((this.publish_delay_sec!= null)&&this.publish_delay_sec.equals(rhs.publish_delay_sec))))&&((this.config_sync_sec == rhs.config_sync_sec)||((this.config_sync_sec!= null)&&this.config_sync_sec.equals(rhs.config_sync_sec))))&&((this.send_id == rhs.send_id)||((this.send_id!= null)&&this.send_id.equals(rhs.send_id))))&&((this.port == rhs.port)||((this.port!= null)&&this.port.equals(rhs.port))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.periodic_sec == rhs.periodic_sec)||((this.periodic_sec!= null)&&this.periodic_sec.equals(rhs.periodic_sec))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.gatewayId == rhs.gatewayId)||((this.gatewayId!= null)&&this.gatewayId.equals(rhs.gatewayId))))&&((this.auth_provider == rhs.auth_provider)||((this.auth_provider!= null)&&this.auth_provider.equals(rhs.auth_provider)))); } public enum Protocol { diff --git a/gencode/java/udmi/schema/Events.java b/gencode/java/udmi/schema/Events.java index a431206d31..280293bc37 100644 --- a/gencode/java/udmi/schema/Events.java +++ b/gencode/java/udmi/schema/Events.java @@ -53,8 +53,8 @@ public class Events { public int hashCode() { int result = 1; result = ((result* 31)+((this.pointset == null)? 0 :this.pointset.hashCode())); - result = ((result* 31)+((this.discovery == null)? 0 :this.discovery.hashCode())); result = ((result* 31)+((this.system == null)? 0 :this.system.hashCode())); + result = ((result* 31)+((this.discovery == null)? 0 :this.discovery.hashCode())); return result; } @@ -67,7 +67,7 @@ public boolean equals(Object other) { return false; } Events rhs = ((Events) other); - return ((((this.pointset == rhs.pointset)||((this.pointset!= null)&&this.pointset.equals(rhs.pointset)))&&((this.discovery == rhs.discovery)||((this.discovery!= null)&&this.discovery.equals(rhs.discovery))))&&((this.system == rhs.system)||((this.system!= null)&&this.system.equals(rhs.system)))); + return ((((this.pointset == rhs.pointset)||((this.pointset!= null)&&this.pointset.equals(rhs.pointset)))&&((this.system == rhs.system)||((this.system!= null)&&this.system.equals(rhs.system))))&&((this.discovery == rhs.discovery)||((this.discovery!= null)&&this.discovery.equals(rhs.discovery)))); } } diff --git a/gencode/java/udmi/schema/FamilyLocalnetModel.java b/gencode/java/udmi/schema/FamilyLocalnetModel.java index 3d1813f19c..0310d47482 100644 --- a/gencode/java/udmi/schema/FamilyLocalnetModel.java +++ b/gencode/java/udmi/schema/FamilyLocalnetModel.java @@ -66,11 +66,11 @@ public class FamilyLocalnetModel { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.shadow_id == null)? 0 :this.shadow_id.hashCode())); + result = ((result* 31)+((this.parent_id == null)? 0 :this.parent_id.hashCode())); result = ((result* 31)+((this.addr == null)? 0 :this.addr.hashCode())); result = ((result* 31)+((this.adjunct == null)? 0 :this.adjunct.hashCode())); result = ((result* 31)+((this.family == null)? 0 :this.family.hashCode())); - result = ((result* 31)+((this.shadow_id == null)? 0 :this.shadow_id.hashCode())); - result = ((result* 31)+((this.parent_id == null)? 0 :this.parent_id.hashCode())); result = ((result* 31)+((this.network == null)? 0 :this.network.hashCode())); return result; } @@ -84,7 +84,7 @@ public boolean equals(Object other) { return false; } FamilyLocalnetModel rhs = ((FamilyLocalnetModel) other); - return (((((((this.addr == rhs.addr)||((this.addr!= null)&&this.addr.equals(rhs.addr)))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.family == rhs.family)||((this.family!= null)&&this.family.equals(rhs.family))))&&((this.shadow_id == rhs.shadow_id)||((this.shadow_id!= null)&&this.shadow_id.equals(rhs.shadow_id))))&&((this.parent_id == rhs.parent_id)||((this.parent_id!= null)&&this.parent_id.equals(rhs.parent_id))))&&((this.network == rhs.network)||((this.network!= null)&&this.network.equals(rhs.network)))); + return (((((((this.shadow_id == rhs.shadow_id)||((this.shadow_id!= null)&&this.shadow_id.equals(rhs.shadow_id)))&&((this.parent_id == rhs.parent_id)||((this.parent_id!= null)&&this.parent_id.equals(rhs.parent_id))))&&((this.addr == rhs.addr)||((this.addr!= null)&&this.addr.equals(rhs.addr))))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.family == rhs.family)||((this.family!= null)&&this.family.equals(rhs.family))))&&((this.network == rhs.network)||((this.network!= null)&&this.network.equals(rhs.network)))); } } diff --git a/gencode/java/udmi/schema/GatewayModel.java b/gencode/java/udmi/schema/GatewayModel.java index f474d979a9..22876706e5 100644 --- a/gencode/java/udmi/schema/GatewayModel.java +++ b/gencode/java/udmi/schema/GatewayModel.java @@ -49,8 +49,8 @@ public class GatewayModel { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.gateway_id == null)? 0 :this.gateway_id.hashCode())); result = ((result* 31)+((this.proxy_ids == null)? 0 :this.proxy_ids.hashCode())); + result = ((result* 31)+((this.gateway_id == null)? 0 :this.gateway_id.hashCode())); result = ((result* 31)+((this.target == null)? 0 :this.target.hashCode())); return result; } @@ -64,7 +64,7 @@ public boolean equals(Object other) { return false; } GatewayModel rhs = ((GatewayModel) other); - return ((((this.gateway_id == rhs.gateway_id)||((this.gateway_id!= null)&&this.gateway_id.equals(rhs.gateway_id)))&&((this.proxy_ids == rhs.proxy_ids)||((this.proxy_ids!= null)&&this.proxy_ids.equals(rhs.proxy_ids))))&&((this.target == rhs.target)||((this.target!= null)&&this.target.equals(rhs.target)))); + return ((((this.proxy_ids == rhs.proxy_ids)||((this.proxy_ids!= null)&&this.proxy_ids.equals(rhs.proxy_ids)))&&((this.gateway_id == rhs.gateway_id)||((this.gateway_id!= null)&&this.gateway_id.equals(rhs.gateway_id))))&&((this.target == rhs.target)||((this.target!= null)&&this.target.equals(rhs.target)))); } } diff --git a/gencode/java/udmi/schema/RefDiscovery.java b/gencode/java/udmi/schema/RefDiscovery.java index 7bdebeeda7..e50aeb6bf9 100644 --- a/gencode/java/udmi/schema/RefDiscovery.java +++ b/gencode/java/udmi/schema/RefDiscovery.java @@ -113,17 +113,17 @@ public class RefDiscovery { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.ref == null)? 0 :this.ref.hashCode())); - result = ((result* 31)+((this.possible_values == null)? 0 :this.possible_values.hashCode())); - result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); result = ((result* 31)+((this.description == null)? 0 :this.description.hashCode())); result = ((result* 31)+((this.units == null)? 0 :this.units.hashCode())); result = ((result* 31)+((this.type == null)? 0 :this.type.hashCode())); - result = ((result* 31)+((this.ancillary == null)? 0 :this.ancillary.hashCode())); - result = ((result* 31)+((this.adjunct == null)? 0 :this.adjunct.hashCode())); result = ((result* 31)+((this.point == null)? 0 :this.point.hashCode())); result = ((result* 31)+((this.structure == null)? 0 :this.structure.hashCode())); result = ((result* 31)+((this.writable == null)? 0 :this.writable.hashCode())); + result = ((result* 31)+((this.ref == null)? 0 :this.ref.hashCode())); + result = ((result* 31)+((this.possible_values == null)? 0 :this.possible_values.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.ancillary == null)? 0 :this.ancillary.hashCode())); + result = ((result* 31)+((this.adjunct == null)? 0 :this.adjunct.hashCode())); result = ((result* 31)+((this.status == null)? 0 :this.status.hashCode())); return result; } @@ -137,7 +137,7 @@ public boolean equals(java.lang.Object other) { return false; } RefDiscovery rhs = ((RefDiscovery) other); - return (((((((((((((this.ref == rhs.ref)||((this.ref!= null)&&this.ref.equals(rhs.ref)))&&((this.possible_values == rhs.possible_values)||((this.possible_values!= null)&&this.possible_values.equals(rhs.possible_values))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.description == rhs.description)||((this.description!= null)&&this.description.equals(rhs.description))))&&((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units))))&&((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type))))&&((this.ancillary == rhs.ancillary)||((this.ancillary!= null)&&this.ancillary.equals(rhs.ancillary))))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.point == rhs.point)||((this.point!= null)&&this.point.equals(rhs.point))))&&((this.structure == rhs.structure)||((this.structure!= null)&&this.structure.equals(rhs.structure))))&&((this.writable == rhs.writable)||((this.writable!= null)&&this.writable.equals(rhs.writable))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status)))); + return (((((((((((((this.description == rhs.description)||((this.description!= null)&&this.description.equals(rhs.description)))&&((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units))))&&((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type))))&&((this.point == rhs.point)||((this.point!= null)&&this.point.equals(rhs.point))))&&((this.structure == rhs.structure)||((this.structure!= null)&&this.structure.equals(rhs.structure))))&&((this.writable == rhs.writable)||((this.writable!= null)&&this.writable.equals(rhs.writable))))&&((this.ref == rhs.ref)||((this.ref!= null)&&this.ref.equals(rhs.ref))))&&((this.possible_values == rhs.possible_values)||((this.possible_values!= null)&&this.possible_values.equals(rhs.possible_values))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.ancillary == rhs.ancillary)||((this.ancillary!= null)&&this.ancillary.equals(rhs.ancillary))))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status)))); } } diff --git a/gencode/java/udmi/schema/SiteLinks.java b/gencode/java/udmi/schema/SiteLinks.java index 3f3527402e..41fc94ca6c 100644 --- a/gencode/java/udmi/schema/SiteLinks.java +++ b/gencode/java/udmi/schema/SiteLinks.java @@ -71,11 +71,11 @@ public class SiteLinks { public int hashCode() { int result = 1; result = ((result* 31)+((this.image == null)? 0 :this.image.hashCode())); - result = ((result* 31)+((this.sheet == null)? 0 :this.sheet.hashCode())); result = ((result* 31)+((this.folder == null)? 0 :this.folder.hashCode())); result = ((result* 31)+((this.docs == null)? 0 :this.docs.hashCode())); - result = ((result* 31)+((this.dashboard == null)? 0 :this.dashboard.hashCode())); result = ((result* 31)+((this.repo == null)? 0 :this.repo.hashCode())); + result = ((result* 31)+((this.sheet == null)? 0 :this.sheet.hashCode())); + result = ((result* 31)+((this.dashboard == null)? 0 :this.dashboard.hashCode())); return result; } @@ -88,7 +88,7 @@ public boolean equals(Object other) { return false; } SiteLinks rhs = ((SiteLinks) other); - return (((((((this.image == rhs.image)||((this.image!= null)&&this.image.equals(rhs.image)))&&((this.sheet == rhs.sheet)||((this.sheet!= null)&&this.sheet.equals(rhs.sheet))))&&((this.folder == rhs.folder)||((this.folder!= null)&&this.folder.equals(rhs.folder))))&&((this.docs == rhs.docs)||((this.docs!= null)&&this.docs.equals(rhs.docs))))&&((this.dashboard == rhs.dashboard)||((this.dashboard!= null)&&this.dashboard.equals(rhs.dashboard))))&&((this.repo == rhs.repo)||((this.repo!= null)&&this.repo.equals(rhs.repo)))); + return (((((((this.image == rhs.image)||((this.image!= null)&&this.image.equals(rhs.image)))&&((this.folder == rhs.folder)||((this.folder!= null)&&this.folder.equals(rhs.folder))))&&((this.docs == rhs.docs)||((this.docs!= null)&&this.docs.equals(rhs.docs))))&&((this.repo == rhs.repo)||((this.repo!= null)&&this.repo.equals(rhs.repo))))&&((this.sheet == rhs.sheet)||((this.sheet!= null)&&this.sheet.equals(rhs.sheet))))&&((this.dashboard == rhs.dashboard)||((this.dashboard!= null)&&this.dashboard.equals(rhs.dashboard)))); } } diff --git a/gencode/java/udmi/schema/SiteLocation.java b/gencode/java/udmi/schema/SiteLocation.java index c49ba57283..1318d4e57e 100644 --- a/gencode/java/udmi/schema/SiteLocation.java +++ b/gencode/java/udmi/schema/SiteLocation.java @@ -46,9 +46,9 @@ public class SiteLocation { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); result = ((result* 31)+((this.lat == null)? 0 :this.lat.hashCode())); result = ((result* 31)+((this._long == null)? 0 :this._long.hashCode())); - result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); return result; } @@ -61,7 +61,7 @@ public boolean equals(Object other) { return false; } SiteLocation rhs = ((SiteLocation) other); - return ((((this.lat == rhs.lat)||((this.lat!= null)&&this.lat.equals(rhs.lat)))&&((this._long == rhs._long)||((this._long!= null)&&this._long.equals(rhs._long))))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address)))); + return ((((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address)))&&((this.lat == rhs.lat)||((this.lat!= null)&&this.lat.equals(rhs.lat))))&&((this._long == rhs._long)||((this._long!= null)&&this._long.equals(rhs._long)))); } } diff --git a/gencode/presentation/presentation.json b/gencode/presentation/presentation.json index 29c310a13f..007939a877 100644 --- a/gencode/presentation/presentation.json +++ b/gencode/presentation/presentation.json @@ -768,6 +768,12 @@ "section": "cloud", "type": "string" }, + "cloud.password": { + "display": "show", + "style": "bold", + "section": "cloud", + "type": "string" + }, "cloud.updated_time": { "display": "show", "style": "bold", diff --git a/gencode/python/poetry.lock b/gencode/python/poetry.lock deleted file mode 100644 index d923e4628b..0000000000 --- a/gencode/python/poetry.lock +++ /dev/null @@ -1,94 +0,0 @@ -# This file is automatically @generated by Poetry 2.3.3 and should not be changed by hand. - -[[package]] -name = "dataclasses-json" -version = "0.6.7" -description = "Easily serialize dataclasses to and from JSON." -optional = false -python-versions = "<4.0,>=3.7" -groups = ["main"] -files = [ - {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, - {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, -] - -[package.dependencies] -marshmallow = ">=3.18.0,<4.0.0" -typing-inspect = ">=0.4.0,<1" - -[[package]] -name = "marshmallow" -version = "3.22.0" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "marshmallow-3.22.0-py3-none-any.whl", hash = "sha256:71a2dce49ef901c3f97ed296ae5051135fd3febd2bf43afe0ae9a82143a494d9"}, - {file = "marshmallow-3.22.0.tar.gz", hash = "sha256:4972f529104a220bb8637d595aa4c9762afbe7f7a77d82dc58c1615d70c5823e"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.0.2)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] -tests = ["pytest", "pytz", "simplejson"] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, - {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, -] - -[[package]] -name = "packaging" -version = "26.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529"}, - {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, -] - -[[package]] -name = "typing-extensions" -version = "4.13.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, - {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, -] - -[[package]] -name = "typing-inspect" -version = "0.9.0" -description = "Runtime inspection utilities for typing module." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, - {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, -] - -[package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" - -[metadata] -lock-version = "2.1" -python-versions = ">=3.8,<4.0" -content-hash = "40cd6dbb6ffd3808981397f946e222609c2c897c26c3278c40b336a349bb837a" diff --git a/gencode/python/udmi/schema/model_cloud.py b/gencode/python/udmi/schema/model_cloud.py index abf4c6ef48..b215254de3 100644 --- a/gencode/python/udmi/schema/model_cloud.py +++ b/gencode/python/udmi/schema/model_cloud.py @@ -70,6 +70,7 @@ class CloudModel(DataModel): config: Optional[ConfigCloudModel] = None blocked: Optional[bool] = None detail: Optional[str] = None + password: Optional[str] = None credentials: Optional[List[Credential]] = None updated_time: Optional[str] = None last_event_time: Optional[str] = None diff --git a/misc/bambi/presentation.gld.json b/misc/bambi/presentation.gld.json index 29c310a13f..007939a877 100644 --- a/misc/bambi/presentation.gld.json +++ b/misc/bambi/presentation.gld.json @@ -768,6 +768,12 @@ "section": "cloud", "type": "string" }, + "cloud.password": { + "display": "show", + "style": "bold", + "section": "cloud", + "type": "string" + }, "cloud.updated_time": { "display": "show", "style": "bold", From 5e9f00d5fcf136efee6647e874bf5377a0cc8be7 Mon Sep 17 00:00:00 2001 From: elsaidi Date: Thu, 7 May 2026 19:39:35 +0000 Subject: [PATCH 10/16] fix format --- .../udmi/service/access/ImplicitIotAccessProvider.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java index adcec21dc2..a8382f4cfd 100644 --- a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java +++ b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java @@ -81,6 +81,7 @@ public class ImplicitIotAccessProvider extends IotAccessBase { private static final String CLIENT_PREFIX = "/r"; private static final String AUTH_PASSWORD_PROPERTY = "auth_pass"; private static final String AUTH_KEY_PROPERTY = "auth_key"; + private static final String AUTH_TYPE_PROPERTY = "auth_type"; private static final String LAST_CONFIG_ACKED = "last_config_ack"; private static final String CONFIG_SUFFIX = "/config"; private static final String METADATA_STR_KEY = "metadata_str"; @@ -213,12 +214,14 @@ private Map toDeviceMap(CloudModel cloudModel, String createdAt) keyBytes -> properties.put(AUTH_KEY_PROPERTY, keyBytes)); properties.put(BLOCKED_PROPERTY, booleanString(cloudModel.blocked)); ifNotNullThen(cloudModel.num_id, id -> properties.put(NUM_ID_PROPERTY, id)); + ifNotNullThen(cloudModel.auth_type, authType -> properties.put(AUTH_TYPE_PROPERTY, authType.value())); ifNotNullThen(cloudModel.credentials, creds -> ifNotTrueThen(creds.isEmpty(), () -> { checkState(creds.size() == 1, "only one credential supported"); Credential cred = creds.get(0); checkState(cred.key_format != Key_format.PASSWORD, "key type PASSWORD should be in the password field, not credentials"); properties.put(AUTH_KEY_PROPERTY, cred.key_data); + properties.put(AUTH_TYPE_PROPERTY, cred.key_format.value()); })); ifNotNullThen(cloudModel.password, password -> { properties.put(AUTH_PASSWORD_PROPERTY, password); @@ -271,14 +274,17 @@ public CloudModel fetchDevice(String registryId, String deviceId) { cloudModel.metadata = ifNotNullGet(cloudModel.metadata_str, JsonUtil::toStringMapStr); cloudModel.metadata_str = null; + String authType = properties.get(AUTH_TYPE_PROPERTY); + if (authType != null) { + cloudModel.auth_type = CloudModel.Auth_type.fromValue(authType); + } + String authKey = properties.get(AUTH_KEY_PROPERTY); if (authKey != null) { Credential credential = new Credential(); credential.key_data = authKey; if (cloudModel.auth_type != null) { credential.key_format = Key_format.fromValue(cloudModel.auth_type.value()); - } else { - credential.key_format = Key_format.RS_256; } cloudModel.credentials = List.of(credential); } From da979f99be012ea6edf74f6619312a5ab2801f51 Mon Sep 17 00:00:00 2001 From: elsaidi Date: Fri, 8 May 2026 10:43:11 +0000 Subject: [PATCH 11/16] line length --- .../bos/udmi/service/access/ImplicitIotAccessProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java index a8382f4cfd..f0dbbb5f0a 100644 --- a/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java +++ b/udmis/src/main/java/com/google/bos/udmi/service/access/ImplicitIotAccessProvider.java @@ -214,7 +214,8 @@ private Map toDeviceMap(CloudModel cloudModel, String createdAt) keyBytes -> properties.put(AUTH_KEY_PROPERTY, keyBytes)); properties.put(BLOCKED_PROPERTY, booleanString(cloudModel.blocked)); ifNotNullThen(cloudModel.num_id, id -> properties.put(NUM_ID_PROPERTY, id)); - ifNotNullThen(cloudModel.auth_type, authType -> properties.put(AUTH_TYPE_PROPERTY, authType.value())); + ifNotNullThen(cloudModel.auth_type, + authType -> properties.put(AUTH_TYPE_PROPERTY, authType.value())); ifNotNullThen(cloudModel.credentials, creds -> ifNotTrueThen(creds.isEmpty(), () -> { checkState(creds.size() == 1, "only one credential supported"); Credential cred = creds.get(0); From d6dae7c839795e8d5cafee465730202e65a76e50 Mon Sep 17 00:00:00 2001 From: Noureddine Date: Fri, 8 May 2026 16:52:35 +0000 Subject: [PATCH 12/16] remove password from bambi presentation --- misc/bambi/presentation.gld.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/misc/bambi/presentation.gld.json b/misc/bambi/presentation.gld.json index 3fbe159045..eaf51d5a2d 100644 --- a/misc/bambi/presentation.gld.json +++ b/misc/bambi/presentation.gld.json @@ -768,12 +768,6 @@ "section": "cloud", "type": "string" }, - "cloud.password": { - "display": "show", - "style": "bold", - "section": "cloud", - "type": "string" - }, "cloud.updated_time": { "display": "show", "style": "bold", From d5c982d7bea146911b2c7557f508fb93cd0bda88 Mon Sep 17 00:00:00 2001 From: Noureddine Date: Fri, 8 May 2026 18:27:28 +0000 Subject: [PATCH 13/16] gencode --- .gencode_hash.txt | 14 +++++++------- gencode/java/udmi/schema/AlarmsetState.java | 4 ++-- gencode/java/udmi/schema/FamilyLocalnetModel.java | 3 ++- gencode/java/udmi/schema/LocalnetModel.java | 4 ++-- misc/bambi/presentation.gld.json | 6 ++++++ 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/.gencode_hash.txt b/.gencode_hash.txt index 63b726855e..84257ec1f0 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -7,15 +7,15 @@ a65e8177ca59cd51c4a8ff63ecaa194897f7e22b82afb14708d63efbd7b96a84 gencode/docs/c 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html b34c136cee32cb88f32a427ff400c3898ed49168f6dcaca1bc9ba65365bc5ae4 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html -ea06d489d98f96f8ac0134388fb4172b1fca6d924aba895c6e3119c19b0c7dc0 gencode/docs/events.html +ffd9325c940b8e832a608a595c8ccc8903b935e899f42219ddc3c79ec65f6202 gencode/docs/events.html 70e57ad6ef39330d958727ebf9dcd61ef6ea30e4c8653eac412bf1867fdb3a70 gencode/docs/events_alarmset.html -feb4138c5acee9b3626e9c2e541711cec304c0e67c2999e6d713ee2e7144ef53 gencode/docs/events_discovery.html +e0268db0f292834ad051fba0315cdf0b2c9850fbb4266414041d7d8e10aa312d gencode/docs/events_discovery.html 808ad1cad37e9f4bf08ea3631162a663998ce60fe8935cbd0ca5e548c3b6df2a gencode/docs/events_mapping.html eafcc3c48189f605f114cde051fea9d13fc5f1a3e395d64fb0a91cb53d4c9aeb gencode/docs/events_pointset.html cac253f57c5c92ef32e2a5f91b6cec8229e8db1dcffcc96a58f06da068e741e7 gencode/docs/events_system.html 151c1b62db35e84e51d5ff2a7464f61ced4d7fb0c7eb795715c245ee0a1b3436 gencode/docs/events_udmi.html 73dbe799e7943ec20ac58b544998e986a39539d4ef0cb4f5023e92e7634d3124 gencode/docs/events_validation.html -0af72961d68e952c511f3edff1fb9d7c94ba1aadfa31fbe89128f8dae7f9703c gencode/docs/metadata.html +cebf265b0c3d3a6e9c9e8c4e6c723ac36bc088dfabbc789e775388c3d2ec83d0 gencode/docs/metadata.html c86682715d348bd3dd971fa5bd925a8a3d0f3c2944c65a47c4b64fe1a5ccdea2 gencode/docs/monitoring.html 474ca16edc9f3cad2bb3ab40b6993cbced90263f762f66ee6cd246a6c4a0d18f gencode/docs/persistent_device.html e11595fd11477947a27461f8ef4fb6facb5f60e2abd6212193f7581ab123ff84 gencode/docs/properties.html @@ -35,7 +35,7 @@ c3f989ff5f5f7a3c5c7ef0e94c6ac524ae61850ce37b0fbaa4e930a65aa2bb09 gencode/java/u 08759b0e33f090432319b2b9562480d595ce1ae06b069c54342d40a076f33e92 gencode/java/udmi/schema/AlarmsetConfig.java 9ff26a6b5c981dd59f0fac5ea32d79be94b8696de2b6c7ed183ba13c5c497ce1 gencode/java/udmi/schema/AlarmsetEvents.java 22d9d2cd4dac914634ad38d1bdf72b8f7a4504ec4e876db03ef2550cc8e9c881 gencode/java/udmi/schema/AlarmsetModel.java -a1f0db9085fba8ecbeec48298bc00fb5f9460d8280a97b329ba7fd41bcde49ea gencode/java/udmi/schema/AlarmsetState.java +bce3e99522ba889e4187a19153931e2c452805be3fab5acfe99ec46574fb37a3 gencode/java/udmi/schema/AlarmsetState.java 0e0d87fa6bc2f746eaacfbcd0f1258c9c6beee2b03d995868af9aafcbc4a88dc gencode/java/udmi/schema/Area.java 768d8b010bc90c5fbe198daf58f3847247ecc620a6fc046fffba877399cf1888 gencode/java/udmi/schema/Asset.java e82d4e13a59ffbdfe412c46977b69e8dddb803a4cb7cbfe4ae84c91a3c5b108b gencode/java/udmi/schema/Auth_provider.java @@ -96,7 +96,7 @@ fd66ce1118548ec8ff3cb4e057ecc0a3614a1e67f0207b592024cd1214259d3f gencode/java/u cbb7cadcff210f188d97bad8a1bb4e369518d974fb7f1eac73bad44199293cd9 gencode/java/udmi/schema/LinkExternalsSite.java decba67ea48b05e1e360670369a20fc9dc4e8cf7507399a2bd23445201048310 gencode/java/udmi/schema/Links.java 9693964888943e245b333aba51a496dc422a21aff5508c77fc2250c1289dfa37 gencode/java/udmi/schema/LocalnetConfig.java -e8f266eb69de40457838fe80e1a3befe9e52ce5443e8962653dba09fda61fe97 gencode/java/udmi/schema/LocalnetModel.java +37730a1fb3da826cd29ffd498b55fe50a2ea7b0de2b051357f3b39992196e7f9 gencode/java/udmi/schema/LocalnetModel.java 990aefd408a48ea59562a43c79495a0ad55dbff907fd47e6fd154400dead50ea gencode/java/udmi/schema/LocalnetState.java 9fd5185768bae32e69020e85e6af424f0e42af7dd4a2d69302395880f699d046 gencode/java/udmi/schema/Location.java ca575e906937fbd2137e552a5943a976a81eccfbcd5db607ebb4e70254c604db gencode/java/udmi/schema/MappingCommand.java @@ -157,7 +157,7 @@ a671f5341703d03200c3a4b4df41f109e587e3723292321998595da60b03e4a2 gencode/java/u 8cc9c88554fc6c9d7d6eba6884279eab3160b4e72d8edfef8155e69ec61c1eec gencode/java/udmi/schema/ValidationState.java eadc72e31b4796273479967303513b16563af0f946d1e1c7eba1748f9b133d40 gencode/java/udmi/schema/ValidationSummary.java 11f8dab5296d41e86cd623a4ed27b972ae673b141907cb913397d4eb53880c59 gencode/java/udmi/schema/Water.java -f6e74a51f453f1d198500ed77bd28b668c2317ba84ba93229db928cde55e0877 gencode/presentation/presentation.json +0d863349462e546bbfad54e75032170d9967f4ed95aa6bd900f36398fba012a4 gencode/presentation/presentation.json 4cf98cbd132cde0cc8813ac35cf3712cb46014154c817c04ad2902c268cdd8fe gencode/python/pyproject.toml a98b84029d33a421872a08f7bfb1bd2f23f8dc3bebc8d7a1c2a7f1c8596510bf gencode/python/udmi/schema/__init__.py f9d90861e568b27445bef241f04cce64cc44731c95c8bd9e3f65cef79d42dab0 gencode/python/udmi/schema/_base.py @@ -218,7 +218,7 @@ a3ea178f98a4993da708e2ec41f5ede74aa92d742ffbe201a77adef803d4143a gencode/python 9577d11c5110af169aafd0e083d115c849ce17dfdc2b6b23b7186c69c1c333db gencode/python/udmi/schema/metadata.py cd81df64d7db21ab06f84cdbd07a808a641612c7c1124f9f2d928a898c3c767e gencode/python/udmi/schema/model_alarmset.py b80b7f580fd7527da0c2caff063218488cf5bbd091daa64a6a5f9a5d45b135c2 gencode/python/udmi/schema/model_alarmset_alarm.py -bb3e28f8ae3b43ddd3b99fbc96a2a3cfd7103e0742fb9427c2191b3674ccea90 gencode/python/udmi/schema/model_cloud.py +6d19eb94063acbc8e5432b9827e8b20f4f8cd02efa6ae760fabe60652c69542d gencode/python/udmi/schema/model_cloud.py 670ea1a72ade3d9af0df00c694cbd755f3a2748022c99b90f3b86a017b7424a9 gencode/python/udmi/schema/model_cloud_config.py 798ee0ee5094d1c3e4681626832d16428df26e752e0e0425d61178f6e231efa6 gencode/python/udmi/schema/model_discovery.py f33f0b5a048fc50d03811f81256b920d954307ad80f2dcc57fb2d882317447b0 gencode/python/udmi/schema/model_discovery_family.py diff --git a/gencode/java/udmi/schema/AlarmsetState.java b/gencode/java/udmi/schema/AlarmsetState.java index e4975ca675..4a2c488c97 100644 --- a/gencode/java/udmi/schema/AlarmsetState.java +++ b/gencode/java/udmi/schema/AlarmsetState.java @@ -74,12 +74,12 @@ public class AlarmsetState { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.alarms == null)? 0 :this.alarms.hashCode())); result = ((result* 31)+((this.upgraded_from == null)? 0 :this.upgraded_from.hashCode())); result = ((result* 31)+((this.state_etag == null)? 0 :this.state_etag.hashCode())); result = ((result* 31)+((this.version == null)? 0 :this.version.hashCode())); result = ((result* 31)+((this.timestamp == null)? 0 :this.timestamp.hashCode())); result = ((result* 31)+((this.status == null)? 0 :this.status.hashCode())); - result = ((result* 31)+((this.alarms == null)? 0 :this.alarms.hashCode())); return result; } @@ -92,7 +92,7 @@ public boolean equals(Object other) { return false; } AlarmsetState rhs = ((AlarmsetState) other); - return (((((((this.upgraded_from == rhs.upgraded_from)||((this.upgraded_from!= null)&&this.upgraded_from.equals(rhs.upgraded_from)))&&((this.state_etag == rhs.state_etag)||((this.state_etag!= null)&&this.state_etag.equals(rhs.state_etag))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status))))&&((this.alarms == rhs.alarms)||((this.alarms!= null)&&this.alarms.equals(rhs.alarms)))); + return (((((((this.alarms == rhs.alarms)||((this.alarms!= null)&&this.alarms.equals(rhs.alarms)))&&((this.upgraded_from == rhs.upgraded_from)||((this.upgraded_from!= null)&&this.upgraded_from.equals(rhs.upgraded_from))))&&((this.state_etag == rhs.state_etag)||((this.state_etag!= null)&&this.state_etag.equals(rhs.state_etag))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status)))); } } diff --git a/gencode/java/udmi/schema/FamilyLocalnetModel.java b/gencode/java/udmi/schema/FamilyLocalnetModel.java index 77f5b552a8..604bd1b2e8 100644 --- a/gencode/java/udmi/schema/FamilyLocalnetModel.java +++ b/gencode/java/udmi/schema/FamilyLocalnetModel.java @@ -74,6 +74,7 @@ public class FamilyLocalnetModel { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.network_id == null)? 0 :this.network_id.hashCode())); result = ((result* 31)+((this.shadow_id == null)? 0 :this.shadow_id.hashCode())); result = ((result* 31)+((this.parent_id == null)? 0 :this.parent_id.hashCode())); result = ((result* 31)+((this.addr == null)? 0 :this.addr.hashCode())); @@ -92,7 +93,7 @@ public boolean equals(Object other) { return false; } FamilyLocalnetModel rhs = ((FamilyLocalnetModel) other); - return (((((((this.addr == rhs.addr)||((this.addr!= null)&&this.addr.equals(rhs.addr)))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.family == rhs.family)||((this.family!= null)&&this.family.equals(rhs.family))))&&((this.shadow_id == rhs.shadow_id)||((this.shadow_id!= null)&&this.shadow_id.equals(rhs.shadow_id))))&&((this.parent_id == rhs.parent_id)||((this.parent_id!= null)&&this.parent_id.equals(rhs.parent_id))))&&((this.network == rhs.network)||((this.network!= null)&&this.network.equals(rhs.network)))); + return ((((((((this.network_id == rhs.network_id)||((this.network_id!= null)&&this.network_id.equals(rhs.network_id)))&&((this.shadow_id == rhs.shadow_id)||((this.shadow_id!= null)&&this.shadow_id.equals(rhs.shadow_id))))&&((this.parent_id == rhs.parent_id)||((this.parent_id!= null)&&this.parent_id.equals(rhs.parent_id))))&&((this.addr == rhs.addr)||((this.addr!= null)&&this.addr.equals(rhs.addr))))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.family == rhs.family)||((this.family!= null)&&this.family.equals(rhs.family))))&&((this.network == rhs.network)||((this.network!= null)&&this.network.equals(rhs.network)))); } } diff --git a/gencode/java/udmi/schema/LocalnetModel.java b/gencode/java/udmi/schema/LocalnetModel.java index aef815d6b4..b13aa2d786 100644 --- a/gencode/java/udmi/schema/LocalnetModel.java +++ b/gencode/java/udmi/schema/LocalnetModel.java @@ -42,9 +42,9 @@ public class LocalnetModel { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.parent == null)? 0 :this.parent.hashCode())); result = ((result* 31)+((this.families == null)? 0 :this.families.hashCode())); result = ((result* 31)+((this.networks == null)? 0 :this.networks.hashCode())); - result = ((result* 31)+((this.parent == null)? 0 :this.parent.hashCode())); return result; } @@ -57,7 +57,7 @@ public boolean equals(Object other) { return false; } LocalnetModel rhs = ((LocalnetModel) other); - return ((((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families)))&&((this.networks == rhs.networks)||((this.networks!= null)&&this.networks.equals(rhs.networks))))&&((this.parent == rhs.parent)||((this.parent!= null)&&this.parent.equals(rhs.parent)))); + return ((((this.parent == rhs.parent)||((this.parent!= null)&&this.parent.equals(rhs.parent)))&&((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families))))&&((this.networks == rhs.networks)||((this.networks!= null)&&this.networks.equals(rhs.networks)))); } } diff --git a/misc/bambi/presentation.gld.json b/misc/bambi/presentation.gld.json index eaf51d5a2d..3fbe159045 100644 --- a/misc/bambi/presentation.gld.json +++ b/misc/bambi/presentation.gld.json @@ -768,6 +768,12 @@ "section": "cloud", "type": "string" }, + "cloud.password": { + "display": "show", + "style": "bold", + "section": "cloud", + "type": "string" + }, "cloud.updated_time": { "display": "show", "style": "bold", From 7470f31cfdbc0728f61b89a2e6061448c334d56b Mon Sep 17 00:00:00 2001 From: Noureddine Date: Fri, 8 May 2026 19:07:14 +0000 Subject: [PATCH 14/16] empty commit From 07b6cf79d64e0b66fc40eacff4f8a53fcad64f78 Mon Sep 17 00:00:00 2001 From: Noureddine Date: Mon, 11 May 2026 10:00:57 +0000 Subject: [PATCH 15/16] reset gencode dir --- gencode/docs/events.html | 155 ------------- gencode/docs/events_discovery.html | 134 ----------- gencode/docs/metadata.html | 216 ------------------ gencode/java/udmi/schema/AlarmsetState.java | 4 +- .../udmi/schema/BridgePodConfiguration.java | 4 +- .../udmi/schema/BuildingConfigEntity.java | 4 +- .../java/udmi/schema/BuildingTranslation.java | 4 +- gencode/java/udmi/schema/CloudModel.java | 6 +- gencode/java/udmi/schema/DiscoveryConfig.java | 4 +- .../udmi/schema/EndpointConfiguration.java | 18 +- gencode/java/udmi/schema/Events.java | 4 +- gencode/java/udmi/schema/GatewayModel.java | 4 +- gencode/java/udmi/schema/LocalnetModel.java | 4 +- gencode/java/udmi/schema/RefDiscovery.java | 12 +- gencode/java/udmi/schema/SiteLinks.java | 6 +- gencode/java/udmi/schema/SiteLocation.java | 4 +- gencode/presentation/presentation.json | 6 - gencode/python/udmi/schema/model_cloud.py | 1 - 18 files changed, 37 insertions(+), 553 deletions(-) diff --git a/gencode/docs/events.html b/gencode/docs/events.html index c70fd2beb3..337a590403 100644 --- a/gencode/docs/events.html +++ b/gencode/docs/events.html @@ -7835,60 +7835,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -9840,60 +9786,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -22065,53 +21957,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
diff --git a/gencode/docs/events_discovery.html b/gencode/docs/events_discovery.html index ae6d12e5e7..212c2cc3fe 100644 --- a/gencode/docs/events_discovery.html +++ b/gencode/docs/events_discovery.html @@ -3646,53 +3646,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -5420,53 +5373,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -16357,46 +16263,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
diff --git a/gencode/docs/metadata.html b/gencode/docs/metadata.html index 6acb6da076..40c3713763 100644 --- a/gencode/docs/metadata.html +++ b/gencode/docs/metadata.html @@ -1292,46 +1292,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -24290,67 +24250,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -26526,67 +26425,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
@@ -40039,60 +39877,6 @@

-

- - - -
-
-
-

- -

-
- -
-
- - Type: string
- - - - - - -
diff --git a/gencode/java/udmi/schema/AlarmsetState.java b/gencode/java/udmi/schema/AlarmsetState.java index 4a2c488c97..e4975ca675 100644 --- a/gencode/java/udmi/schema/AlarmsetState.java +++ b/gencode/java/udmi/schema/AlarmsetState.java @@ -74,12 +74,12 @@ public class AlarmsetState { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.alarms == null)? 0 :this.alarms.hashCode())); result = ((result* 31)+((this.upgraded_from == null)? 0 :this.upgraded_from.hashCode())); result = ((result* 31)+((this.state_etag == null)? 0 :this.state_etag.hashCode())); result = ((result* 31)+((this.version == null)? 0 :this.version.hashCode())); result = ((result* 31)+((this.timestamp == null)? 0 :this.timestamp.hashCode())); result = ((result* 31)+((this.status == null)? 0 :this.status.hashCode())); + result = ((result* 31)+((this.alarms == null)? 0 :this.alarms.hashCode())); return result; } @@ -92,7 +92,7 @@ public boolean equals(Object other) { return false; } AlarmsetState rhs = ((AlarmsetState) other); - return (((((((this.alarms == rhs.alarms)||((this.alarms!= null)&&this.alarms.equals(rhs.alarms)))&&((this.upgraded_from == rhs.upgraded_from)||((this.upgraded_from!= null)&&this.upgraded_from.equals(rhs.upgraded_from))))&&((this.state_etag == rhs.state_etag)||((this.state_etag!= null)&&this.state_etag.equals(rhs.state_etag))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status)))); + return (((((((this.upgraded_from == rhs.upgraded_from)||((this.upgraded_from!= null)&&this.upgraded_from.equals(rhs.upgraded_from)))&&((this.state_etag == rhs.state_etag)||((this.state_etag!= null)&&this.state_etag.equals(rhs.state_etag))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status))))&&((this.alarms == rhs.alarms)||((this.alarms!= null)&&this.alarms.equals(rhs.alarms)))); } } diff --git a/gencode/java/udmi/schema/BridgePodConfiguration.java b/gencode/java/udmi/schema/BridgePodConfiguration.java index 1d46d69146..09122ccf95 100644 --- a/gencode/java/udmi/schema/BridgePodConfiguration.java +++ b/gencode/java/udmi/schema/BridgePodConfiguration.java @@ -45,9 +45,9 @@ public class BridgePodConfiguration { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.from == null)? 0 :this.from.hashCode())); result = ((result* 31)+((this.morf == null)? 0 :this.morf.hashCode())); result = ((result* 31)+((this.enabled == null)? 0 :this.enabled.hashCode())); + result = ((result* 31)+((this.from == null)? 0 :this.from.hashCode())); return result; } @@ -60,7 +60,7 @@ public boolean equals(Object other) { return false; } BridgePodConfiguration rhs = ((BridgePodConfiguration) other); - return ((((this.from == rhs.from)||((this.from!= null)&&this.from.equals(rhs.from)))&&((this.morf == rhs.morf)||((this.morf!= null)&&this.morf.equals(rhs.morf))))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled)))); + return ((((this.morf == rhs.morf)||((this.morf!= null)&&this.morf.equals(rhs.morf)))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled))))&&((this.from == rhs.from)||((this.from!= null)&&this.from.equals(rhs.from)))); } } diff --git a/gencode/java/udmi/schema/BuildingConfigEntity.java b/gencode/java/udmi/schema/BuildingConfigEntity.java index 212e30a3f7..3186c44beb 100644 --- a/gencode/java/udmi/schema/BuildingConfigEntity.java +++ b/gencode/java/udmi/schema/BuildingConfigEntity.java @@ -30,9 +30,9 @@ public class BuildingConfigEntity { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.type == null)? 0 :this.type.hashCode())); result = ((result* 31)+((this.etag == null)? 0 :this.etag.hashCode())); result = ((result* 31)+((this.code == null)? 0 :this.code.hashCode())); - result = ((result* 31)+((this.type == null)? 0 :this.type.hashCode())); return result; } @@ -45,7 +45,7 @@ public boolean equals(Object other) { return false; } BuildingConfigEntity rhs = ((BuildingConfigEntity) other); - return ((((this.etag == rhs.etag)||((this.etag!= null)&&this.etag.equals(rhs.etag)))&&((this.code == rhs.code)||((this.code!= null)&&this.code.equals(rhs.code))))&&((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type)))); + return ((((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type)))&&((this.etag == rhs.etag)||((this.etag!= null)&&this.etag.equals(rhs.etag))))&&((this.code == rhs.code)||((this.code!= null)&&this.code.equals(rhs.code)))); } } diff --git a/gencode/java/udmi/schema/BuildingTranslation.java b/gencode/java/udmi/schema/BuildingTranslation.java index 3eb59f86c4..871aa773f8 100644 --- a/gencode/java/udmi/schema/BuildingTranslation.java +++ b/gencode/java/udmi/schema/BuildingTranslation.java @@ -36,8 +36,8 @@ public class BuildingTranslation { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.units == null)? 0 :this.units.hashCode())); result = ((result* 31)+((this.present_value == null)? 0 :this.present_value.hashCode())); + result = ((result* 31)+((this.units == null)? 0 :this.units.hashCode())); result = ((result* 31)+((this.states == null)? 0 :this.states.hashCode())); return result; } @@ -51,7 +51,7 @@ public boolean equals(Object other) { return false; } BuildingTranslation rhs = ((BuildingTranslation) other); - return ((((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units)))&&((this.present_value == rhs.present_value)||((this.present_value!= null)&&this.present_value.equals(rhs.present_value))))&&((this.states == rhs.states)||((this.states!= null)&&this.states.equals(rhs.states)))); + return ((((this.present_value == rhs.present_value)||((this.present_value!= null)&&this.present_value.equals(rhs.present_value)))&&((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units))))&&((this.states == rhs.states)||((this.states!= null)&&this.states.equals(rhs.states)))); } } diff --git a/gencode/java/udmi/schema/CloudModel.java b/gencode/java/udmi/schema/CloudModel.java index f838e21176..819f4ad03d 100644 --- a/gencode/java/udmi/schema/CloudModel.java +++ b/gencode/java/udmi/schema/CloudModel.java @@ -31,7 +31,6 @@ "config", "blocked", "detail", - "password", "credentials", "updated_time", "last_event_time", @@ -111,8 +110,6 @@ public class CloudModel { public Boolean blocked; @JsonProperty("detail") public java.lang.String detail; - @JsonProperty("password") - public java.lang.String password; @JsonProperty("credentials") public List credentials; @JsonProperty("updated_time") @@ -169,7 +166,6 @@ public int hashCode() { result = ((result* 31)+((this.resource_type == null)? 0 :this.resource_type.hashCode())); result = ((result* 31)+((this.num_id == null)? 0 :this.num_id.hashCode())); result = ((result* 31)+((this.version == null)? 0 :this.version.hashCode())); - result = ((result* 31)+((this.password == null)? 0 :this.password.hashCode())); result = ((result* 31)+((this.blocked == null)? 0 :this.blocked.hashCode())); result = ((result* 31)+((this.last_error_time == null)? 0 :this.last_error_time.hashCode())); result = ((result* 31)+((this.metadata_str == null)? 0 :this.metadata_str.hashCode())); @@ -192,7 +188,7 @@ public boolean equals(Object other) { return false; } CloudModel rhs = ((CloudModel) other); - return ((((((((((((((((((((((((this.updated_time == rhs.updated_time)||((this.updated_time!= null)&&this.updated_time.equals(rhs.updated_time)))&&((this.auth_type == rhs.auth_type)||((this.auth_type!= null)&&this.auth_type.equals(rhs.auth_type))))&&((this.device_key == rhs.device_key)||((this.device_key!= null)&&this.device_key.equals(rhs.device_key))))&&((this.metadata == rhs.metadata)||((this.metadata!= null)&&this.metadata.equals(rhs.metadata))))&&((this.last_event_time == rhs.last_event_time)||((this.last_event_time!= null)&&this.last_event_time.equals(rhs.last_event_time))))&&((this.last_config_time == rhs.last_config_time)||((this.last_config_time!= null)&&this.last_config_time.equals(rhs.last_config_time))))&&((this.credentials == rhs.credentials)||((this.credentials!= null)&&this.credentials.equals(rhs.credentials))))&&((this.last_state_time == rhs.last_state_time)||((this.last_state_time!= null)&&this.last_state_time.equals(rhs.last_state_time))))&&((this.functions_ver == rhs.functions_ver)||((this.functions_ver!= null)&&this.functions_ver.equals(rhs.functions_ver))))&&((this.resource_type == rhs.resource_type)||((this.resource_type!= null)&&this.resource_type.equals(rhs.resource_type))))&&((this.num_id == rhs.num_id)||((this.num_id!= null)&&this.num_id.equals(rhs.num_id))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.password == rhs.password)||((this.password!= null)&&this.password.equals(rhs.password))))&&((this.blocked == rhs.blocked)||((this.blocked!= null)&&this.blocked.equals(rhs.blocked))))&&((this.last_error_time == rhs.last_error_time)||((this.last_error_time!= null)&&this.last_error_time.equals(rhs.last_error_time))))&&((this.metadata_str == rhs.metadata_str)||((this.metadata_str!= null)&&this.metadata_str.equals(rhs.metadata_str))))&&((this.detail == rhs.detail)||((this.detail!= null)&&this.detail.equals(rhs.detail))))&&((this.device_ids == rhs.device_ids)||((this.device_ids!= null)&&this.device_ids.equals(rhs.device_ids))))&&((this.config == rhs.config)||((this.config!= null)&&this.config.equals(rhs.config))))&&((this.last_config_ack == rhs.last_config_ack)||((this.last_config_ack!= null)&&this.last_config_ack.equals(rhs.last_config_ack))))&&((this.operation == rhs.operation)||((this.operation!= null)&&this.operation.equals(rhs.operation))))&&((this.gateway == rhs.gateway)||((this.gateway!= null)&&this.gateway.equals(rhs.gateway))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp)))); + return (((((((((((((((((((((((this.updated_time == rhs.updated_time)||((this.updated_time!= null)&&this.updated_time.equals(rhs.updated_time)))&&((this.auth_type == rhs.auth_type)||((this.auth_type!= null)&&this.auth_type.equals(rhs.auth_type))))&&((this.device_key == rhs.device_key)||((this.device_key!= null)&&this.device_key.equals(rhs.device_key))))&&((this.metadata == rhs.metadata)||((this.metadata!= null)&&this.metadata.equals(rhs.metadata))))&&((this.last_event_time == rhs.last_event_time)||((this.last_event_time!= null)&&this.last_event_time.equals(rhs.last_event_time))))&&((this.last_config_time == rhs.last_config_time)||((this.last_config_time!= null)&&this.last_config_time.equals(rhs.last_config_time))))&&((this.credentials == rhs.credentials)||((this.credentials!= null)&&this.credentials.equals(rhs.credentials))))&&((this.last_state_time == rhs.last_state_time)||((this.last_state_time!= null)&&this.last_state_time.equals(rhs.last_state_time))))&&((this.functions_ver == rhs.functions_ver)||((this.functions_ver!= null)&&this.functions_ver.equals(rhs.functions_ver))))&&((this.resource_type == rhs.resource_type)||((this.resource_type!= null)&&this.resource_type.equals(rhs.resource_type))))&&((this.num_id == rhs.num_id)||((this.num_id!= null)&&this.num_id.equals(rhs.num_id))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.blocked == rhs.blocked)||((this.blocked!= null)&&this.blocked.equals(rhs.blocked))))&&((this.last_error_time == rhs.last_error_time)||((this.last_error_time!= null)&&this.last_error_time.equals(rhs.last_error_time))))&&((this.metadata_str == rhs.metadata_str)||((this.metadata_str!= null)&&this.metadata_str.equals(rhs.metadata_str))))&&((this.detail == rhs.detail)||((this.detail!= null)&&this.detail.equals(rhs.detail))))&&((this.device_ids == rhs.device_ids)||((this.device_ids!= null)&&this.device_ids.equals(rhs.device_ids))))&&((this.config == rhs.config)||((this.config!= null)&&this.config.equals(rhs.config))))&&((this.last_config_ack == rhs.last_config_ack)||((this.last_config_ack!= null)&&this.last_config_ack.equals(rhs.last_config_ack))))&&((this.operation == rhs.operation)||((this.operation!= null)&&this.operation.equals(rhs.operation))))&&((this.gateway == rhs.gateway)||((this.gateway!= null)&&this.gateway.equals(rhs.gateway))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp)))); } diff --git a/gencode/java/udmi/schema/DiscoveryConfig.java b/gencode/java/udmi/schema/DiscoveryConfig.java index a9bdca6bca..91ed927a43 100644 --- a/gencode/java/udmi/schema/DiscoveryConfig.java +++ b/gencode/java/udmi/schema/DiscoveryConfig.java @@ -49,8 +49,8 @@ public class DiscoveryConfig { public int hashCode() { int result = 1; result = ((result* 31)+((this.generation == null)? 0 :this.generation.hashCode())); - result = ((result* 31)+((this.enumerations == null)? 0 :this.enumerations.hashCode())); result = ((result* 31)+((this.families == null)? 0 :this.families.hashCode())); + result = ((result* 31)+((this.enumerations == null)? 0 :this.enumerations.hashCode())); return result; } @@ -63,7 +63,7 @@ public boolean equals(Object other) { return false; } DiscoveryConfig rhs = ((DiscoveryConfig) other); - return ((((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation)))&&((this.enumerations == rhs.enumerations)||((this.enumerations!= null)&&this.enumerations.equals(rhs.enumerations))))&&((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families)))); + return ((((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation)))&&((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families))))&&((this.enumerations == rhs.enumerations)||((this.enumerations!= null)&&this.enumerations.equals(rhs.enumerations)))); } } diff --git a/gencode/java/udmi/schema/EndpointConfiguration.java b/gencode/java/udmi/schema/EndpointConfiguration.java index 40ec7da079..ebfba2835a 100644 --- a/gencode/java/udmi/schema/EndpointConfiguration.java +++ b/gencode/java/udmi/schema/EndpointConfiguration.java @@ -184,30 +184,30 @@ public class EndpointConfiguration { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.generation == null)? 0 :this.generation.hashCode())); result = ((result* 31)+((this.keyBytes == null)? 0 :this.keyBytes.hashCode())); result = ((result* 31)+((this.side_id == null)? 0 :this.side_id.hashCode())); + result = ((result* 31)+((this.transport == null)? 0 :this.transport.hashCode())); + result = ((result* 31)+((this.publish_delay_sec == null)? 0 :this.publish_delay_sec.hashCode())); result = ((result* 31)+((this.error == null)? 0 :this.error.hashCode())); + result = ((result* 31)+((this.config_sync_sec == null)? 0 :this.config_sync_sec.hashCode())); result = ((result* 31)+((this.deviceId == null)? 0 :this.deviceId.hashCode())); result = ((result* 31)+((this.client_id == null)? 0 :this.client_id.hashCode())); result = ((result* 31)+((this.enabled == null)? 0 :this.enabled.hashCode())); result = ((result* 31)+((this.capacity == null)? 0 :this.capacity.hashCode())); + result = ((result* 31)+((this.send_id == null)? 0 :this.send_id.hashCode())); result = ((result* 31)+((this.protocol == null)? 0 :this.protocol.hashCode())); result = ((result* 31)+((this.hostname == null)? 0 :this.hostname.hashCode())); result = ((result* 31)+((this.payload == null)? 0 :this.payload.hashCode())); - result = ((result* 31)+((this.topic_prefix == null)? 0 :this.topic_prefix.hashCode())); - result = ((result* 31)+((this.recv_id == null)? 0 :this.recv_id.hashCode())); - result = ((result* 31)+((this.algorithm == null)? 0 :this.algorithm.hashCode())); - result = ((result* 31)+((this.generation == null)? 0 :this.generation.hashCode())); - result = ((result* 31)+((this.transport == null)? 0 :this.transport.hashCode())); - result = ((result* 31)+((this.publish_delay_sec == null)? 0 :this.publish_delay_sec.hashCode())); - result = ((result* 31)+((this.config_sync_sec == null)? 0 :this.config_sync_sec.hashCode())); - result = ((result* 31)+((this.send_id == null)? 0 :this.send_id.hashCode())); result = ((result* 31)+((this.port == null)? 0 :this.port.hashCode())); + result = ((result* 31)+((this.topic_prefix == null)? 0 :this.topic_prefix.hashCode())); result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); result = ((result* 31)+((this.periodic_sec == null)? 0 :this.periodic_sec.hashCode())); result = ((result* 31)+((this.noConfigAck == null)? 0 :this.noConfigAck.hashCode())); + result = ((result* 31)+((this.recv_id == null)? 0 :this.recv_id.hashCode())); result = ((result* 31)+((this.gatewayId == null)? 0 :this.gatewayId.hashCode())); result = ((result* 31)+((this.auth_provider == null)? 0 :this.auth_provider.hashCode())); + result = ((result* 31)+((this.algorithm == null)? 0 :this.algorithm.hashCode())); return result; } @@ -220,7 +220,7 @@ public boolean equals(Object other) { return false; } EndpointConfiguration rhs = ((EndpointConfiguration) other); - return (((((((((((((((((((((((((this.keyBytes == rhs.keyBytes)||((this.keyBytes!= null)&&this.keyBytes.equals(rhs.keyBytes)))&&((this.side_id == rhs.side_id)||((this.side_id!= null)&&this.side_id.equals(rhs.side_id))))&&((this.error == rhs.error)||((this.error!= null)&&this.error.equals(rhs.error))))&&((this.deviceId == rhs.deviceId)||((this.deviceId!= null)&&this.deviceId.equals(rhs.deviceId))))&&((this.client_id == rhs.client_id)||((this.client_id!= null)&&this.client_id.equals(rhs.client_id))))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled))))&&((this.capacity == rhs.capacity)||((this.capacity!= null)&&this.capacity.equals(rhs.capacity))))&&((this.protocol == rhs.protocol)||((this.protocol!= null)&&this.protocol.equals(rhs.protocol))))&&((this.hostname == rhs.hostname)||((this.hostname!= null)&&this.hostname.equals(rhs.hostname))))&&((this.payload == rhs.payload)||((this.payload!= null)&&this.payload.equals(rhs.payload))))&&((this.topic_prefix == rhs.topic_prefix)||((this.topic_prefix!= null)&&this.topic_prefix.equals(rhs.topic_prefix))))&&((this.recv_id == rhs.recv_id)||((this.recv_id!= null)&&this.recv_id.equals(rhs.recv_id))))&&((this.algorithm == rhs.algorithm)||((this.algorithm!= null)&&this.algorithm.equals(rhs.algorithm))))&&((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation))))&&((this.transport == rhs.transport)||((this.transport!= null)&&this.transport.equals(rhs.transport))))&&((this.publish_delay_sec == rhs.publish_delay_sec)||((this.publish_delay_sec!= null)&&this.publish_delay_sec.equals(rhs.publish_delay_sec))))&&((this.config_sync_sec == rhs.config_sync_sec)||((this.config_sync_sec!= null)&&this.config_sync_sec.equals(rhs.config_sync_sec))))&&((this.send_id == rhs.send_id)||((this.send_id!= null)&&this.send_id.equals(rhs.send_id))))&&((this.port == rhs.port)||((this.port!= null)&&this.port.equals(rhs.port))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.periodic_sec == rhs.periodic_sec)||((this.periodic_sec!= null)&&this.periodic_sec.equals(rhs.periodic_sec))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.gatewayId == rhs.gatewayId)||((this.gatewayId!= null)&&this.gatewayId.equals(rhs.gatewayId))))&&((this.auth_provider == rhs.auth_provider)||((this.auth_provider!= null)&&this.auth_provider.equals(rhs.auth_provider)))); + return (((((((((((((((((((((((((this.generation == rhs.generation)||((this.generation!= null)&&this.generation.equals(rhs.generation)))&&((this.keyBytes == rhs.keyBytes)||((this.keyBytes!= null)&&this.keyBytes.equals(rhs.keyBytes))))&&((this.side_id == rhs.side_id)||((this.side_id!= null)&&this.side_id.equals(rhs.side_id))))&&((this.transport == rhs.transport)||((this.transport!= null)&&this.transport.equals(rhs.transport))))&&((this.publish_delay_sec == rhs.publish_delay_sec)||((this.publish_delay_sec!= null)&&this.publish_delay_sec.equals(rhs.publish_delay_sec))))&&((this.error == rhs.error)||((this.error!= null)&&this.error.equals(rhs.error))))&&((this.config_sync_sec == rhs.config_sync_sec)||((this.config_sync_sec!= null)&&this.config_sync_sec.equals(rhs.config_sync_sec))))&&((this.deviceId == rhs.deviceId)||((this.deviceId!= null)&&this.deviceId.equals(rhs.deviceId))))&&((this.client_id == rhs.client_id)||((this.client_id!= null)&&this.client_id.equals(rhs.client_id))))&&((this.enabled == rhs.enabled)||((this.enabled!= null)&&this.enabled.equals(rhs.enabled))))&&((this.capacity == rhs.capacity)||((this.capacity!= null)&&this.capacity.equals(rhs.capacity))))&&((this.send_id == rhs.send_id)||((this.send_id!= null)&&this.send_id.equals(rhs.send_id))))&&((this.protocol == rhs.protocol)||((this.protocol!= null)&&this.protocol.equals(rhs.protocol))))&&((this.hostname == rhs.hostname)||((this.hostname!= null)&&this.hostname.equals(rhs.hostname))))&&((this.payload == rhs.payload)||((this.payload!= null)&&this.payload.equals(rhs.payload))))&&((this.port == rhs.port)||((this.port!= null)&&this.port.equals(rhs.port))))&&((this.topic_prefix == rhs.topic_prefix)||((this.topic_prefix!= null)&&this.topic_prefix.equals(rhs.topic_prefix))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.periodic_sec == rhs.periodic_sec)||((this.periodic_sec!= null)&&this.periodic_sec.equals(rhs.periodic_sec))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.recv_id == rhs.recv_id)||((this.recv_id!= null)&&this.recv_id.equals(rhs.recv_id))))&&((this.gatewayId == rhs.gatewayId)||((this.gatewayId!= null)&&this.gatewayId.equals(rhs.gatewayId))))&&((this.auth_provider == rhs.auth_provider)||((this.auth_provider!= null)&&this.auth_provider.equals(rhs.auth_provider))))&&((this.algorithm == rhs.algorithm)||((this.algorithm!= null)&&this.algorithm.equals(rhs.algorithm)))); } public enum Protocol { diff --git a/gencode/java/udmi/schema/Events.java b/gencode/java/udmi/schema/Events.java index 280293bc37..a431206d31 100644 --- a/gencode/java/udmi/schema/Events.java +++ b/gencode/java/udmi/schema/Events.java @@ -53,8 +53,8 @@ public class Events { public int hashCode() { int result = 1; result = ((result* 31)+((this.pointset == null)? 0 :this.pointset.hashCode())); - result = ((result* 31)+((this.system == null)? 0 :this.system.hashCode())); result = ((result* 31)+((this.discovery == null)? 0 :this.discovery.hashCode())); + result = ((result* 31)+((this.system == null)? 0 :this.system.hashCode())); return result; } @@ -67,7 +67,7 @@ public boolean equals(Object other) { return false; } Events rhs = ((Events) other); - return ((((this.pointset == rhs.pointset)||((this.pointset!= null)&&this.pointset.equals(rhs.pointset)))&&((this.system == rhs.system)||((this.system!= null)&&this.system.equals(rhs.system))))&&((this.discovery == rhs.discovery)||((this.discovery!= null)&&this.discovery.equals(rhs.discovery)))); + return ((((this.pointset == rhs.pointset)||((this.pointset!= null)&&this.pointset.equals(rhs.pointset)))&&((this.discovery == rhs.discovery)||((this.discovery!= null)&&this.discovery.equals(rhs.discovery))))&&((this.system == rhs.system)||((this.system!= null)&&this.system.equals(rhs.system)))); } } diff --git a/gencode/java/udmi/schema/GatewayModel.java b/gencode/java/udmi/schema/GatewayModel.java index 22876706e5..f474d979a9 100644 --- a/gencode/java/udmi/schema/GatewayModel.java +++ b/gencode/java/udmi/schema/GatewayModel.java @@ -49,8 +49,8 @@ public class GatewayModel { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.proxy_ids == null)? 0 :this.proxy_ids.hashCode())); result = ((result* 31)+((this.gateway_id == null)? 0 :this.gateway_id.hashCode())); + result = ((result* 31)+((this.proxy_ids == null)? 0 :this.proxy_ids.hashCode())); result = ((result* 31)+((this.target == null)? 0 :this.target.hashCode())); return result; } @@ -64,7 +64,7 @@ public boolean equals(Object other) { return false; } GatewayModel rhs = ((GatewayModel) other); - return ((((this.proxy_ids == rhs.proxy_ids)||((this.proxy_ids!= null)&&this.proxy_ids.equals(rhs.proxy_ids)))&&((this.gateway_id == rhs.gateway_id)||((this.gateway_id!= null)&&this.gateway_id.equals(rhs.gateway_id))))&&((this.target == rhs.target)||((this.target!= null)&&this.target.equals(rhs.target)))); + return ((((this.gateway_id == rhs.gateway_id)||((this.gateway_id!= null)&&this.gateway_id.equals(rhs.gateway_id)))&&((this.proxy_ids == rhs.proxy_ids)||((this.proxy_ids!= null)&&this.proxy_ids.equals(rhs.proxy_ids))))&&((this.target == rhs.target)||((this.target!= null)&&this.target.equals(rhs.target)))); } } diff --git a/gencode/java/udmi/schema/LocalnetModel.java b/gencode/java/udmi/schema/LocalnetModel.java index b13aa2d786..aef815d6b4 100644 --- a/gencode/java/udmi/schema/LocalnetModel.java +++ b/gencode/java/udmi/schema/LocalnetModel.java @@ -42,9 +42,9 @@ public class LocalnetModel { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.parent == null)? 0 :this.parent.hashCode())); result = ((result* 31)+((this.families == null)? 0 :this.families.hashCode())); result = ((result* 31)+((this.networks == null)? 0 :this.networks.hashCode())); + result = ((result* 31)+((this.parent == null)? 0 :this.parent.hashCode())); return result; } @@ -57,7 +57,7 @@ public boolean equals(Object other) { return false; } LocalnetModel rhs = ((LocalnetModel) other); - return ((((this.parent == rhs.parent)||((this.parent!= null)&&this.parent.equals(rhs.parent)))&&((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families))))&&((this.networks == rhs.networks)||((this.networks!= null)&&this.networks.equals(rhs.networks)))); + return ((((this.families == rhs.families)||((this.families!= null)&&this.families.equals(rhs.families)))&&((this.networks == rhs.networks)||((this.networks!= null)&&this.networks.equals(rhs.networks))))&&((this.parent == rhs.parent)||((this.parent!= null)&&this.parent.equals(rhs.parent)))); } } diff --git a/gencode/java/udmi/schema/RefDiscovery.java b/gencode/java/udmi/schema/RefDiscovery.java index e50aeb6bf9..7bdebeeda7 100644 --- a/gencode/java/udmi/schema/RefDiscovery.java +++ b/gencode/java/udmi/schema/RefDiscovery.java @@ -113,17 +113,17 @@ public class RefDiscovery { @Override public int hashCode() { int result = 1; + result = ((result* 31)+((this.ref == null)? 0 :this.ref.hashCode())); + result = ((result* 31)+((this.possible_values == null)? 0 :this.possible_values.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); result = ((result* 31)+((this.description == null)? 0 :this.description.hashCode())); result = ((result* 31)+((this.units == null)? 0 :this.units.hashCode())); result = ((result* 31)+((this.type == null)? 0 :this.type.hashCode())); + result = ((result* 31)+((this.ancillary == null)? 0 :this.ancillary.hashCode())); + result = ((result* 31)+((this.adjunct == null)? 0 :this.adjunct.hashCode())); result = ((result* 31)+((this.point == null)? 0 :this.point.hashCode())); result = ((result* 31)+((this.structure == null)? 0 :this.structure.hashCode())); result = ((result* 31)+((this.writable == null)? 0 :this.writable.hashCode())); - result = ((result* 31)+((this.ref == null)? 0 :this.ref.hashCode())); - result = ((result* 31)+((this.possible_values == null)? 0 :this.possible_values.hashCode())); - result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); - result = ((result* 31)+((this.ancillary == null)? 0 :this.ancillary.hashCode())); - result = ((result* 31)+((this.adjunct == null)? 0 :this.adjunct.hashCode())); result = ((result* 31)+((this.status == null)? 0 :this.status.hashCode())); return result; } @@ -137,7 +137,7 @@ public boolean equals(java.lang.Object other) { return false; } RefDiscovery rhs = ((RefDiscovery) other); - return (((((((((((((this.description == rhs.description)||((this.description!= null)&&this.description.equals(rhs.description)))&&((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units))))&&((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type))))&&((this.point == rhs.point)||((this.point!= null)&&this.point.equals(rhs.point))))&&((this.structure == rhs.structure)||((this.structure!= null)&&this.structure.equals(rhs.structure))))&&((this.writable == rhs.writable)||((this.writable!= null)&&this.writable.equals(rhs.writable))))&&((this.ref == rhs.ref)||((this.ref!= null)&&this.ref.equals(rhs.ref))))&&((this.possible_values == rhs.possible_values)||((this.possible_values!= null)&&this.possible_values.equals(rhs.possible_values))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.ancillary == rhs.ancillary)||((this.ancillary!= null)&&this.ancillary.equals(rhs.ancillary))))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status)))); + return (((((((((((((this.ref == rhs.ref)||((this.ref!= null)&&this.ref.equals(rhs.ref)))&&((this.possible_values == rhs.possible_values)||((this.possible_values!= null)&&this.possible_values.equals(rhs.possible_values))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.description == rhs.description)||((this.description!= null)&&this.description.equals(rhs.description))))&&((this.units == rhs.units)||((this.units!= null)&&this.units.equals(rhs.units))))&&((this.type == rhs.type)||((this.type!= null)&&this.type.equals(rhs.type))))&&((this.ancillary == rhs.ancillary)||((this.ancillary!= null)&&this.ancillary.equals(rhs.ancillary))))&&((this.adjunct == rhs.adjunct)||((this.adjunct!= null)&&this.adjunct.equals(rhs.adjunct))))&&((this.point == rhs.point)||((this.point!= null)&&this.point.equals(rhs.point))))&&((this.structure == rhs.structure)||((this.structure!= null)&&this.structure.equals(rhs.structure))))&&((this.writable == rhs.writable)||((this.writable!= null)&&this.writable.equals(rhs.writable))))&&((this.status == rhs.status)||((this.status!= null)&&this.status.equals(rhs.status)))); } } diff --git a/gencode/java/udmi/schema/SiteLinks.java b/gencode/java/udmi/schema/SiteLinks.java index 41fc94ca6c..3f3527402e 100644 --- a/gencode/java/udmi/schema/SiteLinks.java +++ b/gencode/java/udmi/schema/SiteLinks.java @@ -71,11 +71,11 @@ public class SiteLinks { public int hashCode() { int result = 1; result = ((result* 31)+((this.image == null)? 0 :this.image.hashCode())); + result = ((result* 31)+((this.sheet == null)? 0 :this.sheet.hashCode())); result = ((result* 31)+((this.folder == null)? 0 :this.folder.hashCode())); result = ((result* 31)+((this.docs == null)? 0 :this.docs.hashCode())); - result = ((result* 31)+((this.repo == null)? 0 :this.repo.hashCode())); - result = ((result* 31)+((this.sheet == null)? 0 :this.sheet.hashCode())); result = ((result* 31)+((this.dashboard == null)? 0 :this.dashboard.hashCode())); + result = ((result* 31)+((this.repo == null)? 0 :this.repo.hashCode())); return result; } @@ -88,7 +88,7 @@ public boolean equals(Object other) { return false; } SiteLinks rhs = ((SiteLinks) other); - return (((((((this.image == rhs.image)||((this.image!= null)&&this.image.equals(rhs.image)))&&((this.folder == rhs.folder)||((this.folder!= null)&&this.folder.equals(rhs.folder))))&&((this.docs == rhs.docs)||((this.docs!= null)&&this.docs.equals(rhs.docs))))&&((this.repo == rhs.repo)||((this.repo!= null)&&this.repo.equals(rhs.repo))))&&((this.sheet == rhs.sheet)||((this.sheet!= null)&&this.sheet.equals(rhs.sheet))))&&((this.dashboard == rhs.dashboard)||((this.dashboard!= null)&&this.dashboard.equals(rhs.dashboard)))); + return (((((((this.image == rhs.image)||((this.image!= null)&&this.image.equals(rhs.image)))&&((this.sheet == rhs.sheet)||((this.sheet!= null)&&this.sheet.equals(rhs.sheet))))&&((this.folder == rhs.folder)||((this.folder!= null)&&this.folder.equals(rhs.folder))))&&((this.docs == rhs.docs)||((this.docs!= null)&&this.docs.equals(rhs.docs))))&&((this.dashboard == rhs.dashboard)||((this.dashboard!= null)&&this.dashboard.equals(rhs.dashboard))))&&((this.repo == rhs.repo)||((this.repo!= null)&&this.repo.equals(rhs.repo)))); } } diff --git a/gencode/java/udmi/schema/SiteLocation.java b/gencode/java/udmi/schema/SiteLocation.java index 1318d4e57e..c49ba57283 100644 --- a/gencode/java/udmi/schema/SiteLocation.java +++ b/gencode/java/udmi/schema/SiteLocation.java @@ -46,9 +46,9 @@ public class SiteLocation { @Override public int hashCode() { int result = 1; - result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); result = ((result* 31)+((this.lat == null)? 0 :this.lat.hashCode())); result = ((result* 31)+((this._long == null)? 0 :this._long.hashCode())); + result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); return result; } @@ -61,7 +61,7 @@ public boolean equals(Object other) { return false; } SiteLocation rhs = ((SiteLocation) other); - return ((((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address)))&&((this.lat == rhs.lat)||((this.lat!= null)&&this.lat.equals(rhs.lat))))&&((this._long == rhs._long)||((this._long!= null)&&this._long.equals(rhs._long)))); + return ((((this.lat == rhs.lat)||((this.lat!= null)&&this.lat.equals(rhs.lat)))&&((this._long == rhs._long)||((this._long!= null)&&this._long.equals(rhs._long))))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address)))); } } diff --git a/gencode/presentation/presentation.json b/gencode/presentation/presentation.json index 3fbe159045..eaf51d5a2d 100644 --- a/gencode/presentation/presentation.json +++ b/gencode/presentation/presentation.json @@ -768,12 +768,6 @@ "section": "cloud", "type": "string" }, - "cloud.password": { - "display": "show", - "style": "bold", - "section": "cloud", - "type": "string" - }, "cloud.updated_time": { "display": "show", "style": "bold", diff --git a/gencode/python/udmi/schema/model_cloud.py b/gencode/python/udmi/schema/model_cloud.py index b215254de3..abf4c6ef48 100644 --- a/gencode/python/udmi/schema/model_cloud.py +++ b/gencode/python/udmi/schema/model_cloud.py @@ -70,7 +70,6 @@ class CloudModel(DataModel): config: Optional[ConfigCloudModel] = None blocked: Optional[bool] = None detail: Optional[str] = None - password: Optional[str] = None credentials: Optional[List[Credential]] = None updated_time: Optional[str] = None last_event_time: Optional[str] = None From a0732523077d5296f02750e079fa59708feeb636 Mon Sep 17 00:00:00 2001 From: Noureddine Date: Mon, 11 May 2026 10:08:16 +0000 Subject: [PATCH 16/16] gencode java 21 --- .gencode_hash.txt | 24 +-- gencode/docs/events.html | 155 ++++++++++++++++ gencode/docs/events_discovery.html | 134 ++++++++++++++ gencode/docs/metadata.html | 216 ++++++++++++++++++++++ gencode/java/udmi/schema/CloudModel.java | 6 +- gencode/presentation/presentation.json | 6 + gencode/python/udmi/schema/model_cloud.py | 1 + 7 files changed, 529 insertions(+), 13 deletions(-) diff --git a/.gencode_hash.txt b/.gencode_hash.txt index 84257ec1f0..a50292c601 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -35,7 +35,7 @@ c3f989ff5f5f7a3c5c7ef0e94c6ac524ae61850ce37b0fbaa4e930a65aa2bb09 gencode/java/u 08759b0e33f090432319b2b9562480d595ce1ae06b069c54342d40a076f33e92 gencode/java/udmi/schema/AlarmsetConfig.java 9ff26a6b5c981dd59f0fac5ea32d79be94b8696de2b6c7ed183ba13c5c497ce1 gencode/java/udmi/schema/AlarmsetEvents.java 22d9d2cd4dac914634ad38d1bdf72b8f7a4504ec4e876db03ef2550cc8e9c881 gencode/java/udmi/schema/AlarmsetModel.java -bce3e99522ba889e4187a19153931e2c452805be3fab5acfe99ec46574fb37a3 gencode/java/udmi/schema/AlarmsetState.java +a1f0db9085fba8ecbeec48298bc00fb5f9460d8280a97b329ba7fd41bcde49ea gencode/java/udmi/schema/AlarmsetState.java 0e0d87fa6bc2f746eaacfbcd0f1258c9c6beee2b03d995868af9aafcbc4a88dc gencode/java/udmi/schema/Area.java 768d8b010bc90c5fbe198daf58f3847247ecc620a6fc046fffba877399cf1888 gencode/java/udmi/schema/Asset.java e82d4e13a59ffbdfe412c46977b69e8dddb803a4cb7cbfe4ae84c91a3c5b108b gencode/java/udmi/schema/Auth_provider.java @@ -45,10 +45,10 @@ fa94295bc0c97518634c7232e7e55e1c923d7eb42bfa3004651ed183e1ccbb40 gencode/java/u 14055abcc28b9dccc8807ff0e3de201a3fa94cd57b879c22bd7f4fab40d109d9 gencode/java/udmi/schema/BlobBlobsetState.java 1fe0e6cd4b82a54a0d696f0dd43998c3b08cf7d8b78f63b53fcd9c06d49f589c gencode/java/udmi/schema/BlobsetConfig.java 8c8e8941e34da08cddb0401ec296828d8b7aac1810dbfab6ae9ba5d7019c0dd0 gencode/java/udmi/schema/BlobsetState.java -31cc92287358c87acfbc41d24c71f000b23a3e96b0f18fed9331f1c349efab91 gencode/java/udmi/schema/BridgePodConfiguration.java +1110d57d04d4e5da14f6b02d40053cc9b9dabf8e24e44b7441a4a7c66cb546ac gencode/java/udmi/schema/BridgePodConfiguration.java 2e7c0912c6f43b8dae9e9149b7361d3640bde4f01de6e13d8e487fe01be2c2c0 gencode/java/udmi/schema/Bucket.java -534627b0799ca9089332b949c89fdd614f3b8a679b08e3f697d10801ff89c4dc gencode/java/udmi/schema/BuildingConfigEntity.java -79b678b524b3edce833fe56691dcd8c47b53a12f7491e761121408e6e7ceb5e3 gencode/java/udmi/schema/BuildingTranslation.java +8773da8131fdc0f9409df0c04132abdaa01f658d0ec0e73dd8aa714b24454bdc gencode/java/udmi/schema/BuildingConfigEntity.java +519ead2ee2fe3e6fe48547266dec9a545521d52d262646f261ebfbbf8500d25f gencode/java/udmi/schema/BuildingTranslation.java 27ca4f61bd43beca0871b465f3906785a1030a4526605f1fa9b10e3adda8df05 gencode/java/udmi/schema/CapabilityValidationState.java 224c6be2cb6d90a47d181fa30ba1418cf6cc5385ec1c010fe112728382a70216 gencode/java/udmi/schema/Category.java ed9a4802c21fffdedb27040f74714b2cf467d0e32cd9e3d8d864a4f1836612b5 gencode/java/udmi/schema/CloudModel.java @@ -65,16 +65,16 @@ fd289a9a132a880bf0a14b80ed082ab1dcd77caab54175f8d6ccfc381d2d21ab gencode/java/u 6869d00b063748e9995ba6940f6a323916074a7af28ab1d227772b86a39600bb gencode/java/udmi/schema/DeviceValidationEvents.java ec863d0b69880bd2c3030abcdce1d2b8992a475908ead979cc30722b25c1ead2 gencode/java/udmi/schema/Dimension.java 09c9d674ffdde05f00878924a00ef81dc18d1135d5969e8ab9a8db80038198b7 gencode/java/udmi/schema/DiscoveryCommand.java -8b9832181020921d31c9991086dca86dc8bd0ab1bf3c1adbce8b436d1f8ae8e6 gencode/java/udmi/schema/DiscoveryConfig.java +ff98f706c967bbef7be35d826f5abad822c89d2fa981c4d8e6cffbb106d3740c gencode/java/udmi/schema/DiscoveryConfig.java 752faf5921575c895cf984e136effd0dc4837f095c66c26dd0c54fcd31b4a486 gencode/java/udmi/schema/DiscoveryEvents.java 1a04079116f4032b17108e873719bbb2c60c19f392136e7c906122199b472227 gencode/java/udmi/schema/DiscoveryModel.java b41f59d0c1aa74bb9abbdc7525d726f45a4ba8df3866c2dd40458601ffab60fb gencode/java/udmi/schema/DiscoveryState.java 7019b8a1522261a69d708e2e7725b8bc44510c5c80f5c056543af2b7728bfa42 gencode/java/udmi/schema/Electricity.java -695ba089a30cbcb6b101147031e0546cef728322bad349392462cb57688d473a gencode/java/udmi/schema/EndpointConfiguration.java +a9ab0b95408ee04fc98cbc2363bead24c67e64e279e6088e0dd3e4b97154c65d gencode/java/udmi/schema/EndpointConfiguration.java d2e7afd6e1a9250480144c114ee8877afb9b0dd7048495fe96a821d9e6c80475 gencode/java/udmi/schema/Entry.java d4bfd2c997937cd1b0f9b1c73ed46b0133b2b264d367ca9001b7d84ecd598611 gencode/java/udmi/schema/Enumerations.java 11ccad9b1ed4a4745e7bf321adc4bb7f684e9bfa90877314094533b9749512b7 gencode/java/udmi/schema/Envelope.java -4163478ed17191461b0a65abd11c4ddf912cbc104f040a734efd290306fab7b7 gencode/java/udmi/schema/Events.java +b8542a0908719901405220783e85be33197cf16ef5be6458cec5ae92c274e88f gencode/java/udmi/schema/Events.java 80f49ae6ee6a870a92267a9d8510d8b7faef456cd516a5148e9ed491fd8e0857 gencode/java/udmi/schema/ExecutionConfiguration.java bd8350cd05a4091851cf0361cb3a8eb98701ba30df21ff14414e2dabf1289b7f gencode/java/udmi/schema/FamilyDiscovery.java a5e06026eaff51d62d42b447d458d83a310772865f8f3ebd66ac2855e7f381a4 gencode/java/udmi/schema/FamilyDiscoveryConfig.java @@ -87,7 +87,7 @@ b39e12241d1bdabe0db583dc01a7a6b87efb5b57957dae5a3571cfec077b397c gencode/java/u 7206888cd092db347e7e92168987798eb0a3f290f2ed307427d971f15b18c49a gencode/java/udmi/schema/FeatureValidationState.java e256275d840d94c6e61316e756b0dad6d823db8900e35e785f6ef5001fdb5fc9 gencode/java/udmi/schema/Gas.java b63fed8a190948ee3924946c1ad3bc9cf06fdeafc7cea0886bfe52e390448ddf gencode/java/udmi/schema/GatewayConfig.java -0d2e02095e119ecdf4b35fb827f560c89f4f9e9ae8bdcf8648cb07432ff234c8 gencode/java/udmi/schema/GatewayModel.java +0e842669c4ca03cc2b938b6d2b4eea50bf54e13937130d1ab1fa7bc70883e728 gencode/java/udmi/schema/GatewayModel.java 1f7f6809e143e9e3e13e6fa73776a893b62b0c05f8802087b1e276dc0ab83e19 gencode/java/udmi/schema/GatewayState.java 175bdf9cc0b376b7f6c6b21174cb0ec568c49a1026e99bbdbc264b3cea7e7702 gencode/java/udmi/schema/IotAccess.java d0858bd7ba306176f4e3c19eeb69ef2467afec0832b6917b72d3ab87469e4974 gencode/java/udmi/schema/Jwt.java @@ -96,7 +96,7 @@ fd66ce1118548ec8ff3cb4e057ecc0a3614a1e67f0207b592024cd1214259d3f gencode/java/u cbb7cadcff210f188d97bad8a1bb4e369518d974fb7f1eac73bad44199293cd9 gencode/java/udmi/schema/LinkExternalsSite.java decba67ea48b05e1e360670369a20fc9dc4e8cf7507399a2bd23445201048310 gencode/java/udmi/schema/Links.java 9693964888943e245b333aba51a496dc422a21aff5508c77fc2250c1289dfa37 gencode/java/udmi/schema/LocalnetConfig.java -37730a1fb3da826cd29ffd498b55fe50a2ea7b0de2b051357f3b39992196e7f9 gencode/java/udmi/schema/LocalnetModel.java +e8f266eb69de40457838fe80e1a3befe9e52ce5443e8962653dba09fda61fe97 gencode/java/udmi/schema/LocalnetModel.java 990aefd408a48ea59562a43c79495a0ad55dbff907fd47e6fd154400dead50ea gencode/java/udmi/schema/LocalnetState.java 9fd5185768bae32e69020e85e6af424f0e42af7dd4a2d69302395880f699d046 gencode/java/udmi/schema/Location.java ca575e906937fbd2137e552a5943a976a81eccfbcd5db607ebb4e70254c604db gencode/java/udmi/schema/MappingCommand.java @@ -128,14 +128,14 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java 86b4de51f2ba6e9afe34a5a9069e34cf5aa14b7e08d7ac2ed688bad42a769205 gencode/java/udmi/schema/PubberOptions.java -9b208315dae017c35f2c31234348413dd8f569fd3d9922ea46259959662cc7fc gencode/java/udmi/schema/RefDiscovery.java +cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java ad70168de2e1801e26f2c1a8c33a6169e236682de59fd3f6038a77ac264aca14 gencode/java/udmi/schema/SequenceValidationState.java 72e3a07ce890c73fccd3d0cf757d073746b60b722c94edd5425dc066951a048f gencode/java/udmi/schema/SetupUdmiConfig.java e5ce202bcf889287faa7d2d262d2f53f2241a10c659a83687de478803bdab127 gencode/java/udmi/schema/SetupUdmiState.java -2f802c738dd4c19211af8b6dec71b7659c51177c2774cfd34fc07e617bbe5b3e gencode/java/udmi/schema/SiteLinks.java -a3dc7f14d4270ea370db2015785ad12d4bd61825213ab7ac4ee03dda21dde4f2 gencode/java/udmi/schema/SiteLocation.java +7774221174299a7f137576a591d4ae76aaaec5a1950804e73403acf0157b31b5 gencode/java/udmi/schema/SiteLinks.java +956c8af0bb83a33d05bcbcd211d161f9a76723c270372cd443838e31f97c09e3 gencode/java/udmi/schema/SiteLocation.java 5e2f813e0d0a0986b4f1a0613732344bd8c0fd53acfe6afe3d7bdfedda13fa34 gencode/java/udmi/schema/SiteMetadata.java 4f1403e6854fa34919610077ca010195cd62d25063f9de64e746a53b21e18940 gencode/java/udmi/schema/State.java a371232810e8a2ffb380384ca717da1ee5cc0b2e1129df9b5d8faa07ab4b1f46 gencode/java/udmi/schema/StateSystemHardware.java diff --git a/gencode/docs/events.html b/gencode/docs/events.html index 337a590403..c70fd2beb3 100644 --- a/gencode/docs/events.html +++ b/gencode/docs/events.html @@ -7835,6 +7835,60 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -9786,6 +9840,60 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -21957,6 +22065,53 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
diff --git a/gencode/docs/events_discovery.html b/gencode/docs/events_discovery.html index 212c2cc3fe..ae6d12e5e7 100644 --- a/gencode/docs/events_discovery.html +++ b/gencode/docs/events_discovery.html @@ -3646,6 +3646,53 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -5373,6 +5420,53 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -16263,6 +16357,46 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
diff --git a/gencode/docs/metadata.html b/gencode/docs/metadata.html index 40c3713763..6acb6da076 100644 --- a/gencode/docs/metadata.html +++ b/gencode/docs/metadata.html @@ -1292,6 +1292,46 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -24250,6 +24290,67 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -26425,6 +26526,67 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
@@ -39877,6 +40039,60 @@

+

+ + + +
+
+
+

+ +

+
+ +
+
+ + Type: string
+ + + + + + +
diff --git a/gencode/java/udmi/schema/CloudModel.java b/gencode/java/udmi/schema/CloudModel.java index 819f4ad03d..f838e21176 100644 --- a/gencode/java/udmi/schema/CloudModel.java +++ b/gencode/java/udmi/schema/CloudModel.java @@ -31,6 +31,7 @@ "config", "blocked", "detail", + "password", "credentials", "updated_time", "last_event_time", @@ -110,6 +111,8 @@ public class CloudModel { public Boolean blocked; @JsonProperty("detail") public java.lang.String detail; + @JsonProperty("password") + public java.lang.String password; @JsonProperty("credentials") public List credentials; @JsonProperty("updated_time") @@ -166,6 +169,7 @@ public int hashCode() { result = ((result* 31)+((this.resource_type == null)? 0 :this.resource_type.hashCode())); result = ((result* 31)+((this.num_id == null)? 0 :this.num_id.hashCode())); result = ((result* 31)+((this.version == null)? 0 :this.version.hashCode())); + result = ((result* 31)+((this.password == null)? 0 :this.password.hashCode())); result = ((result* 31)+((this.blocked == null)? 0 :this.blocked.hashCode())); result = ((result* 31)+((this.last_error_time == null)? 0 :this.last_error_time.hashCode())); result = ((result* 31)+((this.metadata_str == null)? 0 :this.metadata_str.hashCode())); @@ -188,7 +192,7 @@ public boolean equals(Object other) { return false; } CloudModel rhs = ((CloudModel) other); - return (((((((((((((((((((((((this.updated_time == rhs.updated_time)||((this.updated_time!= null)&&this.updated_time.equals(rhs.updated_time)))&&((this.auth_type == rhs.auth_type)||((this.auth_type!= null)&&this.auth_type.equals(rhs.auth_type))))&&((this.device_key == rhs.device_key)||((this.device_key!= null)&&this.device_key.equals(rhs.device_key))))&&((this.metadata == rhs.metadata)||((this.metadata!= null)&&this.metadata.equals(rhs.metadata))))&&((this.last_event_time == rhs.last_event_time)||((this.last_event_time!= null)&&this.last_event_time.equals(rhs.last_event_time))))&&((this.last_config_time == rhs.last_config_time)||((this.last_config_time!= null)&&this.last_config_time.equals(rhs.last_config_time))))&&((this.credentials == rhs.credentials)||((this.credentials!= null)&&this.credentials.equals(rhs.credentials))))&&((this.last_state_time == rhs.last_state_time)||((this.last_state_time!= null)&&this.last_state_time.equals(rhs.last_state_time))))&&((this.functions_ver == rhs.functions_ver)||((this.functions_ver!= null)&&this.functions_ver.equals(rhs.functions_ver))))&&((this.resource_type == rhs.resource_type)||((this.resource_type!= null)&&this.resource_type.equals(rhs.resource_type))))&&((this.num_id == rhs.num_id)||((this.num_id!= null)&&this.num_id.equals(rhs.num_id))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.blocked == rhs.blocked)||((this.blocked!= null)&&this.blocked.equals(rhs.blocked))))&&((this.last_error_time == rhs.last_error_time)||((this.last_error_time!= null)&&this.last_error_time.equals(rhs.last_error_time))))&&((this.metadata_str == rhs.metadata_str)||((this.metadata_str!= null)&&this.metadata_str.equals(rhs.metadata_str))))&&((this.detail == rhs.detail)||((this.detail!= null)&&this.detail.equals(rhs.detail))))&&((this.device_ids == rhs.device_ids)||((this.device_ids!= null)&&this.device_ids.equals(rhs.device_ids))))&&((this.config == rhs.config)||((this.config!= null)&&this.config.equals(rhs.config))))&&((this.last_config_ack == rhs.last_config_ack)||((this.last_config_ack!= null)&&this.last_config_ack.equals(rhs.last_config_ack))))&&((this.operation == rhs.operation)||((this.operation!= null)&&this.operation.equals(rhs.operation))))&&((this.gateway == rhs.gateway)||((this.gateway!= null)&&this.gateway.equals(rhs.gateway))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp)))); + return ((((((((((((((((((((((((this.updated_time == rhs.updated_time)||((this.updated_time!= null)&&this.updated_time.equals(rhs.updated_time)))&&((this.auth_type == rhs.auth_type)||((this.auth_type!= null)&&this.auth_type.equals(rhs.auth_type))))&&((this.device_key == rhs.device_key)||((this.device_key!= null)&&this.device_key.equals(rhs.device_key))))&&((this.metadata == rhs.metadata)||((this.metadata!= null)&&this.metadata.equals(rhs.metadata))))&&((this.last_event_time == rhs.last_event_time)||((this.last_event_time!= null)&&this.last_event_time.equals(rhs.last_event_time))))&&((this.last_config_time == rhs.last_config_time)||((this.last_config_time!= null)&&this.last_config_time.equals(rhs.last_config_time))))&&((this.credentials == rhs.credentials)||((this.credentials!= null)&&this.credentials.equals(rhs.credentials))))&&((this.last_state_time == rhs.last_state_time)||((this.last_state_time!= null)&&this.last_state_time.equals(rhs.last_state_time))))&&((this.functions_ver == rhs.functions_ver)||((this.functions_ver!= null)&&this.functions_ver.equals(rhs.functions_ver))))&&((this.resource_type == rhs.resource_type)||((this.resource_type!= null)&&this.resource_type.equals(rhs.resource_type))))&&((this.num_id == rhs.num_id)||((this.num_id!= null)&&this.num_id.equals(rhs.num_id))))&&((this.version == rhs.version)||((this.version!= null)&&this.version.equals(rhs.version))))&&((this.password == rhs.password)||((this.password!= null)&&this.password.equals(rhs.password))))&&((this.blocked == rhs.blocked)||((this.blocked!= null)&&this.blocked.equals(rhs.blocked))))&&((this.last_error_time == rhs.last_error_time)||((this.last_error_time!= null)&&this.last_error_time.equals(rhs.last_error_time))))&&((this.metadata_str == rhs.metadata_str)||((this.metadata_str!= null)&&this.metadata_str.equals(rhs.metadata_str))))&&((this.detail == rhs.detail)||((this.detail!= null)&&this.detail.equals(rhs.detail))))&&((this.device_ids == rhs.device_ids)||((this.device_ids!= null)&&this.device_ids.equals(rhs.device_ids))))&&((this.config == rhs.config)||((this.config!= null)&&this.config.equals(rhs.config))))&&((this.last_config_ack == rhs.last_config_ack)||((this.last_config_ack!= null)&&this.last_config_ack.equals(rhs.last_config_ack))))&&((this.operation == rhs.operation)||((this.operation!= null)&&this.operation.equals(rhs.operation))))&&((this.gateway == rhs.gateway)||((this.gateway!= null)&&this.gateway.equals(rhs.gateway))))&&((this.timestamp == rhs.timestamp)||((this.timestamp!= null)&&this.timestamp.equals(rhs.timestamp)))); } diff --git a/gencode/presentation/presentation.json b/gencode/presentation/presentation.json index eaf51d5a2d..3fbe159045 100644 --- a/gencode/presentation/presentation.json +++ b/gencode/presentation/presentation.json @@ -768,6 +768,12 @@ "section": "cloud", "type": "string" }, + "cloud.password": { + "display": "show", + "style": "bold", + "section": "cloud", + "type": "string" + }, "cloud.updated_time": { "display": "show", "style": "bold", diff --git a/gencode/python/udmi/schema/model_cloud.py b/gencode/python/udmi/schema/model_cloud.py index abf4c6ef48..b215254de3 100644 --- a/gencode/python/udmi/schema/model_cloud.py +++ b/gencode/python/udmi/schema/model_cloud.py @@ -70,6 +70,7 @@ class CloudModel(DataModel): config: Optional[ConfigCloudModel] = None blocked: Optional[bool] = None detail: Optional[str] = None + password: Optional[str] = None credentials: Optional[List[Credential]] = None updated_time: Optional[str] = None last_event_time: Optional[str] = None