/*******************************************************************************
- * Copyright (c) 2007, 2011 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
*
* Contributors:
* VTT Technical Research Centre of Finland - initial API and implementation
+ * Semantum Oy - gitlab #82, gitlab #313
*******************************************************************************/
package org.simantics.databoard.binding.factory;
import org.simantics.databoard.binding.Binding;
import org.simantics.databoard.binding.reflection.BindingRequest;
+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
*/
this.requestMap = requests;
for (Entry<BindingRequest, Binding> e : requests.entrySet()) {
if ( isClassRequest( e.getKey() ) ) {
- classMap.put(e.getKey().getClazz(), e.getValue());
+ registerClassMapping(e.getKey().getClazz(), e.getValue());
}
}
}
*/
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<BindingRequest, Binding> e : requestMap.entrySet()) {
if (e.getValue() == binding) {
classMap.clear();
}
- 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));
+ }
+
+ 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);
+ }
}
}