blob: 0bc23d357e8a5ed3fd3681bbc21a1a37127f0def [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Boeing.
* 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
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ote.client.msg.core.internal;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
import org.eclipse.osee.ote.client.msg.core.db.MessageInstance;
import org.eclipse.osee.ote.message.Message;
import org.eclipse.osee.ote.message.data.MessageData;
import org.eclipse.osee.ote.message.enums.DataType;
import org.eclipse.osee.ote.message.interfaces.IMsgToolServiceClient;
import org.eclipse.osee.ote.message.tool.MessageMode;
/**
* @author Ken J. Aguilar
*/
public class MessageDatabase extends AbstractMessageDataBase {
public MessageDatabase(IMsgToolServiceClient service) {
super(service);
}
@Override
protected Message createMessage(Class<? extends Message> msgClass) throws Exception {
Message msg = msgClass.newInstance();
LinkedList<MessageData> source = new LinkedList<>();
Map<DataType, Class<? extends Message>[]> messages = msg.getAssociatedMessages();
Set<Entry<DataType, Class<? extends Message>[]>> entrySet = messages.entrySet();
for (Entry<DataType, Class<? extends Message>[]> entry : entrySet) {
for (Class<? extends Message> clazz : entry.getValue()) {
MessageInstance instance = acquireInstance(clazz.getName());
Message newMsg = instance.getMessage();
source.add(newMsg.getActiveDataSource());
msg.addMessageTypeAssociation(entry.getKey(), newMsg);
}
}
if (!source.isEmpty()) {
msg.addMessageDataSource(source);
}
return msg;
}
@Override
protected void destroyMessage(Message message) throws Exception {
try {
Map<DataType, Class<? extends Message>[]> messages = message.getAssociatedMessages();
Set<Entry<DataType, Class<? extends Message>[]>> entrySet = messages.entrySet();
for (Entry<DataType, Class<? extends Message>[]> entry : entrySet) {
for (Class<? extends Message> clazz : entry.getValue()) {
MessageInstance instance = findInstance(clazz.getName(), MessageMode.READER, entry.getKey());
if (instance != null) {
releaseInstance(instance);
}
}
}
} finally {
message.destroy();
}
}
}