Author: vdichev
Date: Sat Jul 18 13:29:14 2009
New Revision: 795363

URL: http://svn.apache.org/viewvc?rev=795363&view=rev
Log:
ESME-79 Action filters for resent messages

Modified:
    
incubator/esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala
    
incubator/esme/trunk/server/src/main/scala/org/apache/esme/model/Action.scala

Modified: 
incubator/esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala
URL: 
http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala?rev=795363&r1=795362&r2=795363&view=diff
==============================================================================
--- 
incubator/esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala 
(original)
+++ 
incubator/esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala 
Sat Jul 18 13:29:14 2009
@@ -47,13 +47,13 @@
 
   lazy val url: Parser[URL] = httpUrl ^^ {url => URL(UrlStore.make(url))}
 
-  lazy val atNameStr: Parser[String] = alpha ~ rep(alpha | digit | '_') ^^ {
+  lazy val userNameStr: Parser[String] = alpha ~ rep(alpha | digit | '_') ^^ {
     case first ~ more => first + more.mkString
   }
   
-  lazy val poolNameStr = atNameStr
+  lazy val poolNameStr = userNameStr
   
-  lazy val atName: Parser[MsgInfo] = '@' ~> atNameStr ~ rep('.' ~> atNameStr) 
^^ {
+  lazy val atName: Parser[MsgInfo] = '@' ~> userNameStr ~ rep('.' ~> 
userNameStr) ^^ {
     case name ~ domainlist => 
       val nickName: String = name
       val wholeName: String = (name :: domainlist).mkString(".")
@@ -71,6 +71,14 @@
       }
   }
   
+  lazy val resenderName: Parser[MsgInfo] = acceptCI("resent:") ~> userNameStr 
^^ {
+    case name => 
+      User.find(By(User.nickname, name)) match {
+        case Full(u) => ResenderName(u)
+        case _ => MsgText("resent:"+name)
+      }
+  }
+  
   // def ip_schemepart = (accept("//") ~> login) ~> opt( '/' ~> urlpath)
 
   lazy val login: Parser[String] = userPass ^^ {
@@ -245,6 +253,7 @@
   lazy val testFactor: Parser[TestAction] = (notTest |
   testAt | testRegex | testString |
   testTag | testPool |
+  testResent |
   testParen | testPercent |
   testDates | testLogin |
   testFollowed | testUnfollowed |
@@ -328,6 +337,14 @@
   (poolName ^^ {
       case PoolName(pool) => PoolAction(pool.id)
     })
+    
+  lazy val testResent: Parser[TestAction] = 
+  (whiteSpace ~ acceptCI("resent:") ~> rep1(digit) <~ whiteSpace ^^ {case id 
=> ResentAction(id.mkString.toLong)}) |
+  (resenderName ^^ {
+      case ResenderName(user) => ResentAction(user.id)
+    }) |
+  (whiteSpace ~ acceptCI("resent") ~ whiteSpace ^^^ ResentAction)
+    
   
   lazy val testAt: Parser[AtUserAction] =
   (whiteSpace ~ '@' ~> rep1(digit) <~ whiteSpace ^^ {case dig => 
AtUserAction(dig.mkString.toLong)}) |
@@ -381,6 +398,7 @@
 sealed trait MsgInfo
 case class MsgText(text: String) extends MsgInfo
 case class AtName(user: User) extends MsgInfo
+case class ResenderName(user: User) extends MsgInfo
 case class HashTag(tag: Tag) extends MsgInfo
 case class URL(url: UrlStore) extends MsgInfo
 case class PoolName(pool: AccessPool) extends MsgInfo

Modified: 
incubator/esme/trunk/server/src/main/scala/org/apache/esme/model/Action.scala
URL: 
http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/scala/org/apache/esme/model/Action.scala?rev=795363&r1=795362&r2=795363&view=diff
==============================================================================
--- 
incubator/esme/trunk/server/src/main/scala/org/apache/esme/model/Action.scala 
(original)
+++ 
incubator/esme/trunk/server/src/main/scala/org/apache/esme/model/Action.scala 
Sat Jul 18 13:29:14 2009
@@ -95,6 +95,15 @@
         
     case PoolAction(poolId) =>
       (m, u, c, r) => m.pool.is == poolId
+      
+    case ResentAction(userId) =>
+      (m, u, c, r) => r match {
+        case ResendReason(`userId`) => true
+        case _ => false
+      }
+        
+    case ResentAction =>
+      (m, u, c, r) => r.isInstanceOf[ResendReason]
         
     case SentToMeAction =>
       SentToMe
@@ -301,6 +310,14 @@
   def toStr = "pool:" + poolId
 }
 
+case object ResentAction extends TestAction {
+  def toStr = "resent"
+}
+
+case class ResentAction(userId: Long) extends TestAction {
+  def toStr = "resent:" + userId
+}
+
 case class RegexAction(re: String) extends TestAction {
   def toStr = "/"+fix+"/"
   


Reply via email to