Merge branch 'dev_0.7'
diff --git a/src/main/java/org/eclipse/mdm/api/odsadapter/notification/peak/PeakNotificationManager.java b/src/main/java/org/eclipse/mdm/api/odsadapter/notification/peak/PeakNotificationManager.java
index 1bb2bd7..ed8431a 100644
--- a/src/main/java/org/eclipse/mdm/api/odsadapter/notification/peak/PeakNotificationManager.java
+++ b/src/main/java/org/eclipse/mdm/api/odsadapter/notification/peak/PeakNotificationManager.java
@@ -22,6 +22,7 @@
 import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig.Key;
 import org.eclipse.mdm.api.odsadapter.notification.NotificationEntityLoader;
 import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
 import org.glassfish.jersey.media.sse.EventInput;
 import org.glassfish.jersey.media.sse.SseFeature;
 import org.slf4j.Logger;
@@ -100,6 +101,8 @@
 	@Override
 	public void register(String registration, NotificationFilter filter, NotificationListener listener)
 			throws NotificationException {
+		LOGGER.info("Starting registration for with name: " + registration);
+		
 		Response response = endpoint.path(registration).request().post(javax.ws.rs.client.Entity
 				.entity(ProtobufConverter.from(filter), ProtobufMessageBodyProvider.APPLICATION_PROTOBUF_TYPE));
 
@@ -107,6 +110,7 @@
 			LOGGER.info("A registration with the name already exists: " + response.readEntity(String.class));
 			LOGGER.info("Trying to reregister...");
 			deregister(registration);
+			LOGGER.info("Deregisteration successful.");
 			register(registration, filter, listener);
 			return;
 		}
@@ -117,13 +121,16 @@
 		}
 
 		try {
+			LOGGER.info("Requesting event input for " + registration);
 			EventInput eventInput = endpoint.path(registration).request().get(EventInput.class);
 
+			LOGGER.info("Received event input, starting event processor.");
 			EventProcessor processor = new EventProcessor(eventInput, listener, this, eventMediaType);
 
 			executor.submit(processor);
 
 			processors.put(registration, processor);
+			LOGGER.info("Event processor started.");
 		} catch (Exception e) {
 			try {
 				deregister(registration);
@@ -200,29 +207,28 @@
 		try {
 			User user = loader.load(new Key<>(User.class), Long.toString(n.getUserId()));
 
-			EntityType entityType = modelManager.getEntityType(Long.toString(n.getAid()));
+			EntityType entityType = modelManager.getEntityTypeById(Long.toString(n.getAid()));
 
 			if (LOGGER.isTraceEnabled()) {
 				LOGGER.trace("Notification event with: entityType=" + entityType + ", user=" + user);
 			}
-
 			switch (n.getType()) {
 			case NEW:
-				notificationListener.instanceCreated(loader.loadEntities(entityType, n.getIidList().stream().map(id -> id.toString()).collect(Collectors.toList())), user);
+				notificationListener.instanceCreated(loader.loadEntities(entityType, n.getIidList().stream().map(id -> id.toString()).filter(ODSUtils::isValidID).collect(Collectors.toList())), user);
 				break;
 			case MODIFY:
-				notificationListener.instanceModified(loader.loadEntities(entityType, n.getIidList().stream().map(id -> id.toString()).collect(Collectors.toList())), user);
+				notificationListener.instanceModified(loader.loadEntities(entityType, n.getIidList().stream().map(id -> id.toString()).filter(ODSUtils::isValidID).collect(Collectors.toList())), user);
 				break;
 			case DELETE:
 				notificationListener.instanceDeleted(entityType,
-						n.getIidList().stream().map(id -> id.toString()).collect(Collectors.toList()), user);
+						n.getIidList().stream().map(id -> id.toString()).filter(ODSUtils::isValidID).collect(Collectors.toList()), user);
 				break;
 			case MODEL:
 				notificationListener.modelModified(entityType, user);
 				break;
 			case SECURITY:
 				notificationListener.securityModified(entityType,
-						n.getIidList().stream().map(id -> id.toString()).collect(Collectors.toList()), user);
+						n.getIidList().stream().map(id -> id.toString()).filter(ODSUtils::isValidID).collect(Collectors.toList()), user);
 				break;
 			default:
 				processException(new NotificationException("Invalid notification type!"));
diff --git a/src/main/java/org/eclipse/mdm/api/odsadapter/query/ODSModelManager.java b/src/main/java/org/eclipse/mdm/api/odsadapter/query/ODSModelManager.java
index af599b0..9588363 100644
--- a/src/main/java/org/eclipse/mdm/api/odsadapter/query/ODSModelManager.java
+++ b/src/main/java/org/eclipse/mdm/api/odsadapter/query/ODSModelManager.java
@@ -16,6 +16,7 @@
 import java.util.List;

 import java.util.Locale;

 import java.util.Map;

+import java.util.Optional;

 import java.util.concurrent.locks.Lock;

 import java.util.concurrent.locks.ReentrantReadWriteLock;

 import java.util.stream.Stream;

@@ -313,12 +314,12 @@
 

 	@Override

 	public EntityType getEntityTypeById(String id) {

-		EntityType entityType = listEntityTypes().stream().filter(et -> et.getId() == id).findFirst().get();

-		if (entityType == null) {

+		Optional<EntityType> entityType = listEntityTypes().stream().filter(et -> et.getId().equals(id)).findFirst();

+		if (!entityType.isPresent()) {

 			throw new IllegalArgumentException("Entity with id '" + id + "' not found.");

 		}

 

-		return entityType;

+		return entityType.get();

 	}

 

 	/**