2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.ecovacs.internal.api.commands;
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.stream.Collectors;
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.eclipse.jdt.annotation.Nullable;
21 import org.openhab.binding.ecovacs.internal.api.impl.ProtocolVersion;
22 import org.openhab.binding.ecovacs.internal.api.impl.dto.response.deviceapi.json.MapSetReport;
23 import org.openhab.binding.ecovacs.internal.api.impl.dto.response.portal.AbstractPortalIotCommandResponse;
24 import org.openhab.binding.ecovacs.internal.api.impl.dto.response.portal.PortalIotCommandJsonResponse;
25 import org.openhab.binding.ecovacs.internal.api.impl.dto.response.portal.PortalIotCommandXmlResponse;
26 import org.openhab.binding.ecovacs.internal.api.util.DataParsingException;
27 import org.openhab.binding.ecovacs.internal.api.util.XPathUtils;
28 import org.w3c.dom.Document;
29 import org.w3c.dom.Element;
30 import org.w3c.dom.NodeList;
32 import com.google.gson.Gson;
33 import com.google.gson.JsonElement;
34 import com.google.gson.JsonObject;
37 * @author Danny Baumann - Initial contribution
40 public class GetMapSpotAreasWithMapIdCommand extends IotDeviceCommand<List<String>> {
41 private final String mapId;
43 public GetMapSpotAreasWithMapIdCommand(String mapId) {
48 public String getName(ProtocolVersion version) {
49 return version == ProtocolVersion.XML ? "GetMapSet" : "getMapSet";
53 protected void applyXmlPayload(Document doc, Element ctl) {
54 ctl.setAttribute("tp", "sa");
58 protected @Nullable JsonElement getJsonPayloadArgs(ProtocolVersion version) {
59 JsonObject args = new JsonObject();
60 args.addProperty("mid", mapId);
61 args.addProperty("type", "ar");
66 public List<String> convertResponse(AbstractPortalIotCommandResponse response, ProtocolVersion version, Gson gson)
67 throws DataParsingException {
68 if (response instanceof PortalIotCommandJsonResponse) {
69 MapSetReport resp = ((PortalIotCommandJsonResponse) response).getResponsePayloadAs(gson,
71 return resp.subsets.stream().map(i -> i.id).collect(Collectors.toList());
73 String payload = ((PortalIotCommandXmlResponse) response).getResponsePayloadXml();
74 NodeList mapIds = XPathUtils.getXPathMatches(payload, "//m/@mid");
75 List<String> result = new ArrayList<>();
76 for (int i = 0; i < mapIds.getLength(); i++) {
77 result.add(mapIds.item(i).getNodeValue());