X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2Ffactory%2FBindingRepository.java;fp=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2Ffactory%2FBindingRepository.java;h=5a0239f26199a6a54174857298ffc4b0581b4422;hp=ba24353712c7f90f415b4b2652f7699dba5b27d0;hb=95bce3521a3c97f463c3d533a36a606c7ae6f0aa;hpb=f015145947a0aaf44bd11f8dab45aef96feed149 diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/factory/BindingRepository.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/factory/BindingRepository.java index ba2435371..5a0239f26 100644 --- a/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/factory/BindingRepository.java +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/factory/BindingRepository.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2018 Association for Decentralized Information Management in + * Copyright (c) 2007, 2019 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -8,7 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation - * Semantum Oy - gitlab #82 + * Semantum Oy - gitlab #82, gitlab #313 *******************************************************************************/ package org.simantics.databoard.binding.factory; @@ -18,10 +18,12 @@ import java.util.Map.Entry; import org.simantics.databoard.binding.Binding; import org.simantics.databoard.binding.reflection.BindingRequest; -import org.simantics.databoard.type.Datatype; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class BindingRepository { - + + private static final Logger LOGGER = LoggerFactory.getLogger(BindingRepository.class); /** * This map contains all the bindings */ @@ -41,7 +43,7 @@ public class BindingRepository { this.requestMap = requests; for (Entry e : requests.entrySet()) { if ( isClassRequest( e.getKey() ) ) { - classMap.put(e.getKey().getClazz(), e.getValue()); + registerClassMapping(e.getKey().getClazz(), e.getValue()); } } } @@ -76,11 +78,15 @@ public class BindingRepository { */ public synchronized void put( BindingRequest request, Binding binding ) { if ( isClassRequest(request) ) { - classMap.put( request.getClazz(), binding ); + registerClassMapping(request.getClazz(), binding); + } + Binding existing = requestMap.put( request, binding ); + if (existing != null && !existing.equals(binding)) { + LOGGER.error("Replacing existing binding with a different one! {} {} {}", request, binding, existing); } - requestMap.put( request, binding ); } - + + @SuppressWarnings("unlikely-arg-type") public synchronized void remove(Binding binding) { for (Entry e : requestMap.entrySet()) { if (e.getValue() == binding) { @@ -116,20 +122,15 @@ public class BindingRepository { classMap.clear(); } - /** - * {@link Datatype} class has annotations but it can be considered a "class - * request" as it is a fundamental building block of Databoard and it has a - * fixed structure. Therefore {@link #classMap} is allowed to contain a cached - * Datatype.class -> Binding mapping. - */ - private static final String DATATYPE_CLASS_NAME = Datatype.class.getName(); + boolean isClassRequest(BindingRequest request) { + return (request.className != null && (request.annotations == null || request.annotations.length == 0)); + } - boolean isClassRequest( BindingRequest request ) - { - return (request.className != null - && ((request.annotations==null || request.annotations.length==0) - || DATATYPE_CLASS_NAME.equals(request.className)) - ); + public void registerClassMapping(Class clazz, Binding binding) { + Binding previous = classMap.putIfAbsent(clazz, binding); + if (previous != null) { + LOGGER.warn("WARN: Can not put same key again to classMap! {} mapping {} not replaced by {}", clazz, previous, binding); + } } }