From fb5f36a8ade763210ca9582791212bf8ba4a69d2 Mon Sep 17 00:00:00 2001 From: Kai Kreuzer Date: Mon, 16 Mar 2020 22:33:27 +0100 Subject: [PATCH] removed mapdb persistence service (#7183) Signed-off-by: Kai Kreuzer --- bom/openhab-addons/pom.xml | 5 - .../org.openhab.persistence.mapdb/.classpath | 27 --- .../org.openhab.persistence.mapdb/.project | 23 --- bundles/org.openhab.persistence.mapdb/NOTICE | 13 -- bundles/org.openhab.persistence.mapdb/pom.xml | 15 -- .../src/main/feature/feature.xml | 6 - .../persistence/mapdb/internal/MapDbItem.java | 90 --------- .../internal/MapDbPersistenceService.java | 190 ------------------ .../mapdb/internal/StateTypeAdapter.java | 70 ------- .../mapdb/StateTypeAdapterTest.java | 49 ----- bundles/pom.xml | 2 - 11 files changed, 490 deletions(-) delete mode 100644 bundles/org.openhab.persistence.mapdb/.classpath delete mode 100644 bundles/org.openhab.persistence.mapdb/.project delete mode 100644 bundles/org.openhab.persistence.mapdb/NOTICE delete mode 100644 bundles/org.openhab.persistence.mapdb/pom.xml delete mode 100644 bundles/org.openhab.persistence.mapdb/src/main/feature/feature.xml delete mode 100644 bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbItem.java delete mode 100644 bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java delete mode 100644 bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/StateTypeAdapter.java delete mode 100644 bundles/org.openhab.persistence.mapdb/src/test/java/org/openhab/persistence/mapdb/StateTypeAdapterTest.java diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml index af27132cb5066..aa79d5c99b3a2 100644 --- a/bom/openhab-addons/pom.xml +++ b/bom/openhab-addons/pom.xml @@ -1054,11 +1054,6 @@ org.openhab.io.webaudio ${project.version} - - org.openhab.addons.bundles - org.openhab.persistence.mapdb - ${project.version} - org.openhab.addons.bundles org.openhab.transform.bin2json diff --git a/bundles/org.openhab.persistence.mapdb/.classpath b/bundles/org.openhab.persistence.mapdb/.classpath deleted file mode 100644 index 5e8a55fefbd91..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/.classpath +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/org.openhab.persistence.mapdb/.project b/bundles/org.openhab.persistence.mapdb/.project deleted file mode 100644 index a9881555da8ea..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - org.openhab.persistence.mapdb - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/bundles/org.openhab.persistence.mapdb/NOTICE b/bundles/org.openhab.persistence.mapdb/NOTICE deleted file mode 100644 index 38d625e349232..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/NOTICE +++ /dev/null @@ -1,13 +0,0 @@ -This content is produced and maintained by the openHAB project. - -* Project home: https://www.openhab.org - -== Declared Project Licenses - -This program and the accompanying materials are made available under the terms -of the Eclipse Public License 2.0 which is available at -https://www.eclipse.org/legal/epl-2.0/. - -== Source Code - -https://github.com/openhab/openhab-addons diff --git a/bundles/org.openhab.persistence.mapdb/pom.xml b/bundles/org.openhab.persistence.mapdb/pom.xml deleted file mode 100644 index 9db1e96e8dcf8..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/pom.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - 4.0.0 - - - org.openhab.addons.bundles - org.openhab.addons.reactor.bundles - 2.5.3-SNAPSHOT - - - org.openhab.persistence.mapdb - - openHAB Add-ons :: Bundles :: Persistence Service :: MapDB - - diff --git a/bundles/org.openhab.persistence.mapdb/src/main/feature/feature.xml b/bundles/org.openhab.persistence.mapdb/src/main/feature/feature.xml deleted file mode 100644 index bdadd65e24d64..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/src/main/feature/feature.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features - - - diff --git a/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbItem.java b/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbItem.java deleted file mode 100644 index b9bc488da9127..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbItem.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright (c) 2010-2020 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.persistence.mapdb.internal; - -import java.text.DateFormat; -import java.util.Date; - -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.smarthome.core.persistence.HistoricItem; -import org.eclipse.smarthome.core.persistence.PersistenceItemInfo; -import org.eclipse.smarthome.core.types.State; -import org.eclipse.smarthome.core.types.UnDefType; - -/** - * This is a Java bean used to persist item states with timestamps in the database. - * - * @author Jens Viebig - Initial contribution - * - */ -@NonNullByDefault -public class MapDbItem implements HistoricItem, PersistenceItemInfo { - - private String name = ""; - - private State state = UnDefType.NULL; - - private Date timestamp = new Date(0); - - @Override - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public State getState() { - return state; - } - - public void setState(State state) { - this.state = state; - } - - @Override - public Date getTimestamp() { - return timestamp; - } - - public void setTimestamp(Date timestamp) { - this.timestamp = timestamp; - } - - @Override - public String toString() { - return DateFormat.getDateTimeInstance().format(timestamp) + ": " + name + " -> " + state.toString(); - } - - @Override - public @Nullable Integer getCount() { - return null; - } - - @Override - public @Nullable Date getEarliest() { - return null; - } - - @Override - public @Nullable Date getLatest() { - return null; - } - - public boolean isValid() { - return name != null && state != null && timestamp != null; - } -} diff --git a/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java b/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java deleted file mode 100644 index e76e922bba2d4..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java +++ /dev/null @@ -1,190 +0,0 @@ -/** - * Copyright (c) 2010-2020 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.persistence.mapdb.internal; - -import java.io.File; -import java.util.Collections; -import java.util.Date; -import java.util.Locale; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.smarthome.config.core.ConfigConstants; -import org.eclipse.smarthome.core.common.ThreadPoolManager; -import org.eclipse.smarthome.core.items.Item; -import org.eclipse.smarthome.core.persistence.FilterCriteria; -import org.eclipse.smarthome.core.persistence.HistoricItem; -import org.eclipse.smarthome.core.persistence.PersistenceItemInfo; -import org.eclipse.smarthome.core.persistence.PersistenceService; -import org.eclipse.smarthome.core.persistence.QueryablePersistenceService; -import org.eclipse.smarthome.core.types.State; -import org.eclipse.smarthome.core.types.UnDefType; -import org.mapdb.DB; -import org.mapdb.DBMaker; -import org.osgi.service.component.annotations.Component; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -/** - * This is the implementation of the MapDB {@link PersistenceService}. To learn - * more about MapDB please visit their website. - * - * @author Jens Viebig - Initial contribution - * @author Martin Kühl - Port to Eclipse SmartHome - */ -@NonNullByDefault -@Component(service = { PersistenceService.class, QueryablePersistenceService.class }) -public class MapDbPersistenceService implements QueryablePersistenceService { - - private static final String SERVICE_NAME = "mapdb"; - - private static final String DB_FOLDER_NAME = ConfigConstants.getUserDataFolder() + File.separator + "persistence" + File.separator + "mapdb"; - - private static final String DB_FILE_NAME = "storage.mapdb"; - - private final Logger logger = LoggerFactory.getLogger(MapDbPersistenceService.class); - - @NonNullByDefault({}) - private ExecutorService threadPool; - - /** holds the local instance of the MapDB database */ - @NonNullByDefault({}) - private DB db; - @NonNullByDefault({}) - private Map map; - - private transient Gson mapper = new GsonBuilder() - .registerTypeHierarchyAdapter(State.class, new StateTypeAdapter()) - .create(); - - public void activate() { - logger.debug("MapDB persistence service is being activated"); - - threadPool = ThreadPoolManager.getPool(getClass().getSimpleName()); - - File folder = new File(DB_FOLDER_NAME); - if (!folder.exists()) { - if (!folder.mkdirs()) { - logger.warn("Failed to create one or more directories in the path '{}'", DB_FOLDER_NAME); - logger.warn("MapDB persistence service activation has failed."); - return; - } - } - - File dbFile = new File(DB_FOLDER_NAME, DB_FILE_NAME); - db = DBMaker.newFileDB(dbFile).closeOnJvmShutdown().make(); - map = db.createTreeMap("itemStore").makeOrGet(); - logger.debug("MapDB persistence service is now activated"); - } - - public void deactivate() { - logger.debug("MapDB persistence service deactivated"); - if (db != null) { - db.close(); - } - threadPool.shutdown(); - } - - @Override - public String getId() { - return SERVICE_NAME; - } - - @Override - public String getLabel(@Nullable Locale locale) { - return SERVICE_NAME; - } - - @Override - public Set getItemInfo() { - return map.values().stream() - .map(this::deserialize) - .flatMap(MapDbPersistenceService::streamOptional) - .collect(Collectors.toSet()); - } - - @Override - public void store(Item item) { - store(item, item.getName()); - } - - @Override - public void store(Item item, String alias) { - if (item.getState() instanceof UnDefType) { - return; - } - - // PersistenceManager passes SimpleItemConfiguration.alias which can be null - if (alias == null) { - alias = item.getName(); - } - logger.debug("store called for {}", alias); - - State state = item.getState(); - MapDbItem mItem = new MapDbItem(); - mItem.setName(alias); - mItem.setState(state); - mItem.setTimestamp(new Date()); - String json = serialize(mItem); - map.put(alias, json); - commit(); - logger.debug("Stored '{}' with state '{}' in MapDB database", alias, state.toString()); - } - - @Override - public Iterable query(FilterCriteria filter) { - String json = map.get(filter.getItemName()); - if (json == null) { - return Collections.emptyList(); - } - Optional item = deserialize(json); - if (!item.isPresent()) { - return Collections.emptyList(); - } - return Collections.singletonList(item.get()); - } - - private String serialize(MapDbItem item) { - return mapper.toJson(item); - } - - private Optional deserialize(String json) { - MapDbItem item = mapper.fromJson(json, MapDbItem.class); - if (item == null || !item.isValid()) { - logger.warn("Deserialized invalid item: {}", item); - return Optional.empty(); - } - return Optional.of(item); - } - - private void commit() { - threadPool.submit(() -> db.commit()); - } - - private static Stream streamOptional(Optional opt) { - if (!opt.isPresent()) { - return Stream.empty(); - } - return Stream.of(opt.get()); - } -} diff --git a/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/StateTypeAdapter.java b/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/StateTypeAdapter.java deleted file mode 100644 index a06ac63200345..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/StateTypeAdapter.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright (c) 2010-2020 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.persistence.mapdb.internal; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; - -import org.eclipse.smarthome.core.types.State; -import org.eclipse.smarthome.core.types.TypeParser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.TypeAdapter; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonToken; -import com.google.gson.stream.JsonWriter; - -/** - * A GSON TypeAdapter for Eclipse SmartHome State values. - * - * @author Martin Kühl - Initial contribution - */ -public class StateTypeAdapter extends TypeAdapter { - private static final String TYPE_SEPARATOR = "@@@"; - - private final Logger logger = LoggerFactory.getLogger(StateTypeAdapter.class); - - @Override - public State read(JsonReader reader) throws IOException { - if (reader.peek() == JsonToken.NULL) { - reader.nextNull(); - return null; - } - String value = reader.nextString(); - String[] parts = value.split(TYPE_SEPARATOR); - String valueTypeName = parts[0]; - String valueAsString = parts[1]; - - try { - @SuppressWarnings("unchecked") - Class valueType = (Class) Class.forName(valueTypeName); - List> types = Collections.singletonList(valueType); - return TypeParser.parseState(types, valueAsString); - } catch (Exception e) { - logger.warn("Couldn't deserialize state '{}': {}", value, e.getMessage()); - } - return null; - } - - @Override - public void write(JsonWriter writer, State state) throws IOException { - if (state == null) { - writer.nullValue(); - return; - } - String value = state.getClass().getName() + TYPE_SEPARATOR + state.toFullString(); - writer.value(value); - } -} diff --git a/bundles/org.openhab.persistence.mapdb/src/test/java/org/openhab/persistence/mapdb/StateTypeAdapterTest.java b/bundles/org.openhab.persistence.mapdb/src/test/java/org/openhab/persistence/mapdb/StateTypeAdapterTest.java deleted file mode 100644 index db05534e96ba1..0000000000000 --- a/bundles/org.openhab.persistence.mapdb/src/test/java/org/openhab/persistence/mapdb/StateTypeAdapterTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2010-2020 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.persistence.mapdb; - -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; - -import org.eclipse.smarthome.core.library.types.HSBType; -import org.eclipse.smarthome.core.library.types.OnOffType; -import org.eclipse.smarthome.core.library.types.PercentType; -import org.eclipse.smarthome.core.library.types.StringType; -import org.eclipse.smarthome.core.types.State; -import org.junit.Test; -import org.openhab.persistence.mapdb.internal.StateTypeAdapter; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -/** - * - * @author Martin Kühl - Initial contribution - */ -public class StateTypeAdapterTest { - Gson mapper = new GsonBuilder() - .registerTypeHierarchyAdapter(State.class, new StateTypeAdapter()) - .create(); - - @Test - public void readWriteRoundtripShouldRecreateTheWrittenState() { - assertThat(roundtrip(OnOffType.ON), is(equalTo(OnOffType.ON))); - assertThat(roundtrip(PercentType.HUNDRED), is(equalTo(PercentType.HUNDRED))); - assertThat(roundtrip(HSBType.GREEN), is(equalTo(HSBType.GREEN))); - assertThat(roundtrip(StringType.valueOf("test")), is(equalTo(StringType.valueOf("test")))); - } - - private State roundtrip(State state) { - return mapper.fromJson(mapper.toJson(state), State.class); - } -} diff --git a/bundles/pom.xml b/bundles/pom.xml index 43ea28f94207c..7cdae25280344 100644 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -238,8 +238,6 @@ org.openhab.extensionservice.marketplace org.openhab.extensionservice.marketplace.automation - - org.openhab.persistence.mapdb org.openhab.voice.googletts org.openhab.voice.mactts