Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,6 @@ Workflow {
serializer = {
generateStub = false
}
validator = {
generateStub = false
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,9 @@ private Map<String, String> mapAliases(List<AliasConfiguration> aliases) {
private List<PersistenceStrategy> mapStrategies(List<Strategy> strategies) {
final List<PersistenceStrategy> lst = new LinkedList<>();
for (final Strategy strategy : strategies) {
lst.add(mapStrategy(strategy));
if (!(strategy.getName() == null || strategy.getName().isEmpty())) {
lst.add(mapStrategy(strategy));
}
}
return lst;
}
Expand All @@ -201,7 +203,9 @@ private PersistenceStrategy mapStrategy(Strategy strategy) {
private List<PersistenceFilter> mapFilters(List<Filter> filters) {
final List<PersistenceFilter> lst = new LinkedList<>();
for (final Filter filter : filters) {
lst.add(mapFilter(filter));
if (!(filter.getName() == null || filter.getName().isEmpty())) {
lst.add(mapFilter(filter));
}
}
return lst;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* Copyright (c) 2010-2026 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
*/
/*
* generated by Xtext
*/
package org.openhab.core.model.persistence.validation

import org.openhab.core.model.persistence.persistence.Strategy
import org.eclipse.xtext.validation.Check
import org.openhab.core.model.persistence.persistence.Filter
import org.openhab.core.model.persistence.persistence.PersistenceModel
import org.openhab.core.model.persistence.persistence.PersistencePackage
import org.openhab.core.model.persistence.validation.AbstractPersistenceValidator
import org.eclipse.xtext.nodemodel.util.NodeModelUtils
import org.eclipse.emf.ecore.EObject
import java.util.HashSet
import org.openhab.core.model.persistence.persistence.PersistenceConfiguration

/**
* Custom validation rules.
*
* see http://www.eclipse.org/Xtext/documentation.html#validation
*/
class PersistenceValidator extends AbstractPersistenceValidator {

@Check
def void checkStrategiesDefined(PersistenceConfiguration config) {
val nodes = NodeModelUtils.findNodesForFeature(config, PersistencePackage.Literals.PERSISTENCE_CONFIGURATION__STRATEGIES)

for (var i = 0; i < config.strategies.size; i++) {
val s = config.strategies.get(i)
if (s.eIsProxy) {
val name = NodeModelUtils.getTokenText(nodes.get(i))
error(buildMsgWithLineNb("Strategy not defined '" + name + "'", config),
config, PersistencePackage.Literals.PERSISTENCE_CONFIGURATION__FILTERS)
}
}
}

@Check
def void checkFiltersDefined(PersistenceConfiguration config) {
val nodes = NodeModelUtils.findNodesForFeature(config, PersistencePackage.Literals.PERSISTENCE_CONFIGURATION__FILTERS)

for (var i = 0; i < config.filters.size; i++) {
val f = config.filters.get(i)
if (f.eIsProxy) {
val name = NodeModelUtils.getTokenText(nodes.get(i))
error(buildMsgWithLineNb("Filter not defined '" + name + "'", config),
config, PersistencePackage.Literals.PERSISTENCE_CONFIGURATION__FILTERS)
}
}
}

@Check
def void checkUniqueStrategyNames(PersistenceModel model) {
val seen = new HashSet()
for (Strategy s : model.strategies) {
if (!seen.add(s.name)) {
error(buildMsgWithLineNb("Duplicate strategy '" + s.name + "'", s), s, PersistencePackage.Literals.STRATEGY__NAME)
}
}
}

@Check
def void checkUniqueFilterNames(PersistenceModel model) {
val seen = new HashSet()
for (Filter f : model.filters) {
if (!seen.add(f.name)) {
error(buildMsgWithLineNb("Duplicate filter '" + f.name + "'", f), f, PersistencePackage.Literals.FILTER__NAME)
}
}
}

def private buildMsgWithLineNb(String msg, EObject object) {
val node = NodeModelUtils.getNode(object)
return node !== null ? "Line " + node.startLine + (node.endLine != node.startLine ? "-" + node.endLine : "") + ": " + msg : msg
}
}