@@ -28,6 +28,8 @@ object HmdaFileParser {
28
28
29
29
case class ReadHmdaRawFile (persistenceId : String , replyTo : ActorRef ) extends Command
30
30
case class FinishParsing (replyTo : ActorRef ) extends Command
31
+ case class FinishParsingTS (replyTo : ActorRef ) extends Command
32
+ case class FinishParsingLARs (replyTo : ActorRef ) extends Command
31
33
case class GetStatePaginated (page : Int )
32
34
33
35
def props (id : SubmissionId ): Props = Props (new HmdaFileParser (id))
@@ -62,11 +64,10 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
62
64
var state = HmdaFileParseState ()
63
65
var encounteredParsingErrors : Boolean = false
64
66
val manager = context.parent
65
- val statRef = for {
66
- stat <- (manager ? GetActorRef (SubmissionLarStats .name)).mapTo[ActorRef ]
67
- } yield {
68
- stat
69
- }
67
+ val statRef = (manager ? GetActorRef (SubmissionLarStats .name)).mapTo[ActorRef ]
68
+
69
+ var tsParsingDone : Boolean = false
70
+ var larParsingDone : Boolean = false
70
71
71
72
override def updateState (event : Event ): Unit = {
72
73
state = state.updated(event)
@@ -77,7 +78,6 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
77
78
override def receiveCommand : Receive = {
78
79
79
80
case ReadHmdaRawFile (persistenceId, replyTo : ActorRef ) =>
80
-
81
81
val parsedTs = events(persistenceId)
82
82
.filter { x => x.isInstanceOf [LineAdded ] }
83
83
.map { case LineAdded (_, data) => data }
@@ -91,7 +91,7 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
91
91
}
92
92
93
93
parsedTs
94
- .runForeach(pTs => self ! pTs )
94
+ .runWith( Sink .actorRef( self, FinishParsingTS (replyTo)) )
95
95
96
96
val parsedLar = events(persistenceId)
97
97
.filter { x => x.isInstanceOf [LineAdded ] }
@@ -100,7 +100,7 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
100
100
.zip(Source .fromIterator(() => Iterator .from(2 )))
101
101
.map {
102
102
case (lar, index) =>
103
- sendLar( lar)
103
+ statRef.map(_ ! lar)
104
104
LarCsvParser (lar, index)
105
105
}
106
106
.map {
@@ -112,7 +112,7 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
112
112
113
113
parsedLar
114
114
.mapAsync(parallelism = flowParallelism)(x => (self ? x).mapTo[Persisted .type ])
115
- .runWith(Sink .actorRef(self, FinishParsing (replyTo)))
115
+ .runWith(Sink .actorRef(self, FinishParsingLARs (replyTo)))
116
116
117
117
case tp @ TsParsed (ts) =>
118
118
persist(tp) { e =>
@@ -140,11 +140,16 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
140
140
sender() ! Persisted
141
141
}
142
142
143
- case FinishParsing (replyTo) =>
144
- for {
145
- stat <- statRef
146
- } yield stat ! CountSubmittedLarsInSubmission
143
+ case FinishParsingTS (replyTo) =>
144
+ tsParsingDone = true
145
+ if (larParsingDone) self ! FinishParsing (replyTo)
147
146
147
+ case FinishParsingLARs (replyTo) =>
148
+ larParsingDone = true
149
+ if (tsParsingDone) self ! FinishParsing (replyTo)
150
+
151
+ case FinishParsing (replyTo) =>
152
+ statRef.map(_ ! CountSubmittedLarsInSubmission )
148
153
if (encounteredParsingErrors)
149
154
replyTo ! ParsingCompletedWithErrors (submissionId)
150
155
else
@@ -164,11 +169,5 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
164
169
context stop self
165
170
166
171
}
167
-
168
- private def sendLar (s : String ) {
169
- for {
170
- stat <- statRef
171
- } yield stat ! s
172
- }
173
172
}
174
173
0 commit comments