001 /******************************************************************************
002 * Copyright (C) MActor Developers. All rights reserved. *
003 * ---------------------------------------------------------------------------*
004 * This file is part of MActor. *
005 * *
006 * MActor is free software; you can redistribute it and/or modify *
007 * it under the terms of the GNU General Public License as published by *
008 * the Free Software Foundation; either version 2 of the License, or *
009 * (at your option) any later version. *
010 * *
011 * MActor is distributed in the hope that it will be useful, *
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
014 * GNU General Public License for more details. *
015 * *
016 * You should have received a copy of the GNU General Public License *
017 * along with MActor; if not, write to the Free Software *
018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
019 ******************************************************************************/
020 package org.mactor.framework.spec;
021
022 import org.dom4j.Element;
023 import org.mactor.framework.MactorException;
024 import org.mactor.framework.ParseUtil;
025
026 public class MessageReceiveSpec extends ContainerSpec {
027 @Override
028 public String getType() {
029 return "message_receive";
030 }
031 private int maxMessageCount;
032 private int minMessageCount;
033 private int maxTimeoutSeconds;
034 private boolean blockUntilTimeout;
035 private String messageSubscribeNodeName;
036 private boolean hasResponseNode = false;
037 public boolean hasResponseNode() {
038 return hasResponseNode;
039 }
040 public String getMessageSubscribeNodeName() {
041 return messageSubscribeNodeName;
042 }
043 public int getMaxTimeoutSeconds() {
044 return maxTimeoutSeconds;
045 }
046 public int getMaxMessageCount() {
047 return maxMessageCount;
048 }
049 public int getMinMessageCount() {
050 return minMessageCount;
051 }
052 public boolean isBlockUntilTimeout() {
053 return blockUntilTimeout;
054 }
055 public static MessageReceiveSpec loadSpec(Element element) throws MactorException {
056 if (element == null)
057 return null;
058 MessageReceiveSpec s = new MessageReceiveSpec();
059 s.name = element.attributeValue("name");
060 s.messageSubscribeNodeName = element.attributeValue("message_subscribe_node_name");
061 s.minMessageCount = ParseUtil.tryParseIntVal(element.attributeValue("min_message_count"));
062 s.maxMessageCount = ParseUtil.tryParseIntVal(element.attributeValue("max_message_count"));
063 s.maxTimeoutSeconds = ParseUtil.tryParseIntVal(element.attributeValue("max_timeout_seconds"));
064 s.blockUntilTimeout = Boolean.parseBoolean(element.attributeValue("block_until_timeout"));
065 s.loadContainedNodes(element);
066 for (SpecNode n : s.getSpecNodes()) {
067 if (n instanceof MessageRespondSpec) {
068 s.hasResponseNode = true;
069 break;
070 }
071 }
072 return s;
073 }
074 public Element addToElement(Element parent) {
075 Element e = parent.addElement(getType());
076 e.addAttribute("name", name);
077 e.addAttribute("message_subscribe_node_name", messageSubscribeNodeName);
078 e.addAttribute("min_message_count", minMessageCount + "");
079 e.addAttribute("max_message_count", maxMessageCount + "");
080 e.addAttribute("max_timeout_seconds", maxTimeoutSeconds + "");
081 e.addAttribute("block_until_timeout", blockUntilTimeout + "");
082 super.writeContainedNodesToElement(e);
083 return e;
084 }
085 public String getShortDescription() {
086 return "Receiver node - '" + name + "'";
087 }
088 public String getDescription() {
089 return "Refered subscriber node:" + messageSubscribeNodeName + ". Max message count:" + maxMessageCount + ". Min message count" + minMessageCount + ". Max timeout (seconds):"
090 + maxTimeoutSeconds + ". Block until timeout:" + blockUntilTimeout;
091 }
092 public void setBlockUntilTimeout(boolean blockUntilTimeout) {
093 this.blockUntilTimeout = blockUntilTimeout;
094 }
095 public void setMaxMessageCount(int maxMessageCount) {
096 this.maxMessageCount = maxMessageCount;
097 }
098 public void setMaxTimeoutSeconds(int maxTimeoutSeconds) {
099 this.maxTimeoutSeconds = maxTimeoutSeconds;
100 }
101 public void setMessageSubscribeNodeName(String messageSubscribeNodeName) {
102 this.messageSubscribeNodeName = messageSubscribeNodeName;
103 }
104 public void setMinMessageCount(int minMessageCount) {
105 this.minMessageCount = minMessageCount;
106 }
107 }