/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.core.persistence.internal; import java.util.List; import java.util.concurrent.TimeUnit; import org.eclipse.smarthome.core.items.Item; import org.eclipse.smarthome.core.persistence.PersistenceService; import org.eclipse.smarthome.core.persistence.PersistenceServiceConfiguration; import org.eclipse.smarthome.core.persistence.SimpleItemConfiguration; import org.eclipse.smarthome.core.persistence.strategy.SimpleStrategy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Implementation of a persistence job that could be executed e.g. for specific cron expressions. * * @author Kai Kreuzer - Initial contribution and API * @author Markus Rathgeb - Separation of persistence core and model, drop Quartz usage. */ public class PersistItemsJob implements Runnable { private final Logger logger = LoggerFactory.getLogger(PersistItemsJob.class); private final PersistenceManagerImpl manager; private final String dbId; private final String strategyName; public PersistItemsJob(final PersistenceManagerImpl manager, final String dbId, final String strategyName) { this.manager = manager; this.dbId = dbId; this.strategyName = strategyName; } @Override public void run() { synchronized (manager.persistenceServiceConfigs) { final PersistenceService persistenceService = manager.persistenceServices.get(dbId); final PersistenceServiceConfiguration config = manager.persistenceServiceConfigs.get(dbId); if (persistenceService != null) { for (SimpleItemConfiguration itemConfig : config.getConfigs()) { if (hasStrategy(config.getDefaults(), itemConfig, strategyName)) { for (Item item : manager.getAllItems(itemConfig)) { long startTime = System.nanoTime(); persistenceService.store(item, itemConfig.getAlias()); logger.trace("Storing item '{}' with persistence service '{}' took {}ms", item.getName(), dbId, TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime)); } } } } } } private boolean hasStrategy(List<SimpleStrategy> defaults, SimpleItemConfiguration config, String strategyName) { // check if the strategy is directly defined on the config for (SimpleStrategy strategy : config.getStrategies()) { if (strategyName.equals(strategy.getName())) { return true; } } // if no strategies are given, check the default strategies to use if (config.getStrategies().isEmpty() && isDefault(defaults, strategyName)) { return true; } return false; } private boolean isDefault(List<SimpleStrategy> defaults, String strategyName) { for (SimpleStrategy strategy : defaults) { if (strategy.getName().equals(strategyName)) { return true; } } return false; } }