1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.crmTemplates
21 
22 import cats.instances.future._
23 import cats.instances.option._
24 import cats.syntax.traverse._
25 import grizzled.slf4j.Logging
26 import org.make.api.technical._
27 import org.make.api.technical.Futures._
28 import org.make.core.crmTemplate.{
29   CrmLanguageTemplate,
30   CrmLanguageTemplateId,
31   CrmQuestionTemplate,
32   CrmQuestionTemplateId,
33   CrmTemplate,
34   CrmTemplateKind,
35   TemplateId
36 }
37 import org.make.core.question.QuestionId
38 
39 import scala.concurrent.ExecutionContext.Implicits.global
40 import scala.concurrent.Future
41 import org.make.core.reference.Language
42 
43 import scala.collection.SortedMap
44 import scala.util.{Failure, Success, Try}
45 
46 trait DefaultCrmTemplatesServiceComponent extends CrmTemplatesServiceComponent {
47   this: PersistentCrmLanguageTemplateServiceComponent
48     with PersistentCrmQuestionTemplateServiceComponent
49     with IdGeneratorComponent =>
50 
51   override lazy val crmTemplatesService: CrmTemplatesService = new DefaultCrmTemplatesService
52 
53   class DefaultCrmTemplatesService extends CrmTemplatesService with Logging {
54 
55     override def find(
56       kind: CrmTemplateKind,
57       questionId: Option[QuestionId],
58       language: Option[Language]
59     ): Future[Option[TemplateId]] = {
60 
61       val byQuestion: () => Future[Option[Option[CrmTemplate]]] = () =>
62         questionId.traverse(id => listByLanguage(id, language).map(_.find(_.kind == kind)))
63       val byLanguage = () => language.traverse(get(_).map(_.map(_(kind))))
64       val default = ()    => get(Language("en")).map(_.map(_(kind)))
65 
66       val result = byQuestion.or(byLanguage.or(default)).apply().map(_.map(_.template))
67 
68       result.foreach(
69         r =>
70           if (r.isEmpty)
71             logger.error(s"No $kind template found for question: $questionId and language $language.")
72       )
73 
74       result
75     }
76 
77     // Language templates
78 
79     override def listByLanguage(): Future[SortedMap[Language, CrmTemplateKind => CrmLanguageTemplate]] = {
80       persistentCrmLanguageTemplateService
81         .all()
82         .map(
83           all =>
84             SortedMap.from(
85               all
86                 .groupBy(_.language)
87                 .map {
88                   case (language, templates) =>
89                     val validated = validate(language, templates)
90                     validated.failed.foreach(logger.error("Listing an invalid language in CRM language templates", _))
91                     language -> validated
92                 }
93                 .collect { case (language, Success(templates)) => language -> templates }
94             )
95         )
96     }
97 
98     override def get(language: Language): Future[Option[CrmTemplateKind => CrmLanguageTemplate]] = {
99       persistentCrmLanguageTemplateService.list(language).flatMap { raw =>
100         if (raw.isEmpty) {
101           Future.successful(None)
102         } else {
103           Future.fromTry(validate(language, raw)).map(Some.apply)
104         }
105       }
106     }
107 
108     override def create(
109       language: Language,
110       values: CrmTemplateKind => TemplateId
111     ): Future[CrmTemplateKind => CrmLanguageTemplate] = {
112       val templates = CrmTemplateKind.values.map(
113         kind => CrmLanguageTemplate(CrmLanguageTemplateId(idGenerator.nextId()), kind, language, values(kind))
114       )
115       persistentCrmLanguageTemplateService
116         .persist(templates)
117         .flatMap(result => Future.fromTry(validate(language, result)))
118     }
119 
120     override def update(
121       language: Language,
122       values: CrmTemplateKind => TemplateId
123     ): Future[CrmTemplateKind => CrmLanguageTemplate] = {
124       persistentCrmLanguageTemplateService
125         .list(language)
126         .flatMap(
127           current =>
128             validate(language, current) match {
129               case Success(_) =>
130                 persistentCrmLanguageTemplateService
131                   .modify(current.map(template => template.copy(template = values(template.kind))))
132                   .flatMap(result => Future.fromTry(validate(language, result)))
133               case Failure(e) => Future.failed(e)
134             }
135         )
136     }
137 
138     private def validate(
139       language: Language,
140       templates: Seq[CrmLanguageTemplate]
141     ): Try[CrmTemplateKind => CrmLanguageTemplate] = {
142       val indexed = templates.groupMapReduce(_.kind)(identity)((template, _) => template)
143       val missing = CrmTemplateKind.values.toSet -- indexed.keys
144       if (missing.isEmpty) {
145         Success(indexed.apply)
146       } else {
147         Failure(
148           new IllegalStateException(s"Missing CRM language templates for ${language.value}: ${missing.mkString(", ")}")
149         )
150       }
151     }
152 
153     // Question templates
154 
155     override def list(questionId: QuestionId): Future[Seq[CrmQuestionTemplate]] = {
156       persistentCrmQuestionTemplateService.list(questionId)
157     }
158 
159     override def listByLanguage(
160       questionId: QuestionId,
161       language: Option[Language]
162     ): Future[Seq[CrmQuestionTemplate]] = {
163       language match {
164         case None           => Future.successful(Seq.empty)
165         case Some(language) => persistentCrmQuestionTemplateService.listByLanguage(questionId, language)
166       }
167     }
168 
169     override def get(id: CrmQuestionTemplateId): Future[Option[CrmQuestionTemplate]] = {
170       persistentCrmQuestionTemplateService.get(id)
171     }
172 
173     override def create(template: CrmQuestionTemplate): Future[CrmQuestionTemplate] = {
174       persistentCrmQuestionTemplateService.persist(template)
175     }
176 
177     override def update(template: CrmQuestionTemplate): Future[CrmQuestionTemplate] = {
178       persistentCrmQuestionTemplateService.modify(template)
179     }
180 
181     override def delete(id: CrmQuestionTemplateId): Future[Unit] = {
182       persistentCrmQuestionTemplateService.remove(id)
183     }
184   }
185 }
Line Stmt Id Pos Tree Symbol Tests Code
62 25835 2043 - 2043 Select cats.instances.OptionInstances.catsStdInstancesForOption org.make.api.crmtemplates.crmtemplatesservicetest cats.instances.`package`.option.catsStdInstancesForOption
62 27686 2062 - 2062 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
62 27210 2102 - 2124 Apply scala.collection.IterableOnceOps.find x$1.find(((x$2: org.make.core.crmTemplate.CrmQuestionTemplate) => x$2.kind.==(kind)))
62 25039 2101 - 2101 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
62 25355 2062 - 2062 ApplyToImplicitArgs cats.instances.FutureInstances.catsStdInstancesForFuture org.make.api.crmtemplates.crmtemplatesservicetest cats.instances.`package`.future.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)
62 23079 2043 - 2126 ApplyToImplicitArgs cats.Traverse.Ops.traverse org.make.api.crmtemplates.crmtemplatesservicetest cats.syntax.`package`.traverse.toTraverseOps[Option, org.make.core.question.QuestionId](questionId)(cats.instances.`package`.option.catsStdInstancesForOption).traverse[scala.concurrent.Future, Option[org.make.core.crmTemplate.CrmTemplate]](((id: org.make.core.question.QuestionId) => DefaultCrmTemplatesService.this.listByLanguage(id, language).map[Option[org.make.core.crmTemplate.CrmQuestionTemplate]](((x$1: Seq[org.make.core.crmTemplate.CrmQuestionTemplate]) => x$1.find(((x$2: org.make.core.crmTemplate.CrmQuestionTemplate) => x$2.kind.==(kind)))))(scala.concurrent.ExecutionContext.Implicits.global)))(cats.instances.`package`.future.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global))
62 23608 2109 - 2123 Apply java.lang.Object.== x$2.kind.==(kind)
62 23766 2069 - 2125 ApplyToImplicitArgs scala.concurrent.Future.map org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesService.this.listByLanguage(id, language).map[Option[org.make.core.crmTemplate.CrmQuestionTemplate]](((x$1: Seq[org.make.core.crmTemplate.CrmQuestionTemplate]) => x$1.find(((x$2: org.make.core.crmTemplate.CrmQuestionTemplate) => x$2.kind.==(kind)))))(scala.concurrent.ExecutionContext.Implicits.global)
63 24077 2173 - 2173 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
63 27219 2184 - 2184 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
63 27515 2173 - 2173 ApplyToImplicitArgs cats.instances.FutureInstances.catsStdInstancesForFuture cats.instances.`package`.future.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global)
63 25290 2156 - 2201 ApplyToImplicitArgs cats.Traverse.Ops.traverse cats.syntax.`package`.traverse.toTraverseOps[Option, org.make.core.reference.Language](language)(cats.instances.`package`.option.catsStdInstancesForOption).traverse[scala.concurrent.Future, Option[org.make.core.crmTemplate.CrmLanguageTemplate]](((x$3: org.make.core.reference.Language) => DefaultCrmTemplatesService.this.get(x$3).map[Option[org.make.core.crmTemplate.CrmLanguageTemplate]](((x$4: Option[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) => x$4.map[org.make.core.crmTemplate.CrmLanguageTemplate](((x$5: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => x$5.apply(kind)))))(scala.concurrent.ExecutionContext.Implicits.global)))(cats.instances.`package`.future.catsStdInstancesForFuture(scala.concurrent.ExecutionContext.Implicits.global))
63 25652 2191 - 2198 Apply scala.Function1.apply x$5.apply(kind)
63 23402 2185 - 2199 Apply scala.Option.map x$4.map[org.make.core.crmTemplate.CrmLanguageTemplate](((x$5: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => x$5.apply(kind)))
63 27131 2156 - 2156 Select cats.instances.OptionInstances.catsStdInstancesForOption cats.instances.`package`.option.catsStdInstancesForOption
63 25049 2174 - 2200 ApplyToImplicitArgs scala.concurrent.Future.map DefaultCrmTemplatesService.this.get(x$3).map[Option[org.make.core.crmTemplate.CrmLanguageTemplate]](((x$4: Option[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) => x$4.map[org.make.core.crmTemplate.CrmLanguageTemplate](((x$5: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => x$5.apply(kind)))))(scala.concurrent.ExecutionContext.Implicits.global)
64 23598 2254 - 2254 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
64 23092 2235 - 2249 Apply org.make.core.reference.Language.apply org.make.core.reference.Language.apply("en")
64 27159 2231 - 2270 ApplyToImplicitArgs scala.concurrent.Future.map DefaultCrmTemplatesService.this.get(org.make.core.reference.Language.apply("en")).map[Option[org.make.core.crmTemplate.CrmLanguageTemplate]](((x$6: Option[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) => x$6.map[org.make.core.crmTemplate.CrmLanguageTemplate](((x$7: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => x$7.apply(kind)))))(scala.concurrent.ExecutionContext.Implicits.global)
64 27143 2261 - 2268 Apply scala.Function1.apply x$7.apply(kind)
64 25955 2255 - 2269 Apply scala.Option.map x$6.map[org.make.core.crmTemplate.CrmLanguageTemplate](((x$7: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => x$7.apply(kind)))
66 23099 2341 - 2358 Apply scala.Option.map x$8.map[org.make.core.crmTemplate.TemplateId](((x$9: org.make.core.crmTemplate.CrmTemplate) => x$9.template))
66 25482 2347 - 2357 Select org.make.core.crmTemplate.CrmTemplate.template x$9.template
66 27671 2304 - 2304 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
66 22638 2305 - 2327 ApplyToImplicitArgs org.make.api.technical.Futures.Fallback.or org.make.api.crmtemplates.crmtemplatesservicetest org.make.api.technical.Futures.Fallback[org.make.core.crmTemplate.CrmLanguageTemplate](byLanguage).or(default)(scala.concurrent.ExecutionContext.Implicits.global)
66 25966 2291 - 2359 ApplyToImplicitArgs scala.concurrent.Future.map org.make.api.crmtemplates.crmtemplatesservicetest org.make.api.technical.Futures.Fallback[org.make.core.crmTemplate.CrmTemplate](byQuestion).or(org.make.api.technical.Futures.Fallback[org.make.core.crmTemplate.CrmLanguageTemplate](byLanguage).or(default)(scala.concurrent.ExecutionContext.Implicits.global))(scala.concurrent.ExecutionContext.Implicits.global).apply().map[Option[org.make.core.crmTemplate.TemplateId]](((x$8: Option[org.make.core.crmTemplate.CrmTemplate]) => x$8.map[org.make.core.crmTemplate.TemplateId](((x$9: org.make.core.crmTemplate.CrmTemplate) => x$9.template))))(scala.concurrent.ExecutionContext.Implicits.global)
66 25211 2318 - 2318 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
66 27077 2340 - 2340 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
68 23074 2367 - 2531 ApplyToImplicitArgs scala.concurrent.Future.foreach org.make.api.crmtemplates.crmtemplatesservicetest result.foreach[Unit](((r: Option[org.make.core.crmTemplate.TemplateId]) => if (r.isEmpty) DefaultCrmTemplatesService.this.logger.error(("No ".+(kind).+(" template found for question: ").+(questionId).+(" and language ").+(language).+("."): String)) else ()))(scala.concurrent.ExecutionContext.Implicits.global)
68 25490 2381 - 2381 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
70 27679 2406 - 2406 Block <nosymbol> ()
70 22950 2406 - 2406 Literal <nosymbol> ()
70 23533 2410 - 2419 Select scala.Option.isEmpty r.isEmpty
71 25222 2433 - 2523 Block grizzled.slf4j.Logger.error DefaultCrmTemplatesService.this.logger.error(("No ".+(kind).+(" template found for question: ").+(questionId).+(" and language ").+(language).+("."): String))
71 27356 2433 - 2523 Apply grizzled.slf4j.Logger.error DefaultCrmTemplatesService.this.logger.error(("No ".+(kind).+(" template found for question: ").+(questionId).+(" and language ").+(language).+("."): String))
82 24684 2757 - 2757 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
82 23553 2693 - 3288 ApplyToImplicitArgs scala.concurrent.Future.map org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmLanguageTemplateService.all().map[scala.collection.SortedMap[org.make.core.reference.Language,org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((all: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]) => scala.collection.SortedMap.from[org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](all.groupBy[org.make.core.reference.Language](((x$10: org.make.core.crmTemplate.CrmLanguageTemplate) => x$10.language)).map[org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((x0$1: (org.make.core.reference.Language, Seq[org.make.core.crmTemplate.CrmLanguageTemplate])) => x0$1 match { case (_1: org.make.core.reference.Language, _2: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, Seq[org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (templates @ _)) => { val validated: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate] = DefaultCrmTemplatesService.this.validate(language, templates); validated.failed.foreach[Unit](((x$11: Throwable) => DefaultCrmTemplatesService.this.logger.error("Listing an invalid language in CRM language templates", x$11))); scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](validated) } })).collect[org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](({ @SerialVersionUID(value = 0) final <synthetic> class $anonfun extends scala.runtime.AbstractPartialFunction[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]),(org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)] with java.io.Serializable { def <init>(): <$anon: ((org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])) => (org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)> = { $anonfun.super.<init>(); () }; final override def applyOrElse[A1 <: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]), B1 >: (org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)](x1: A1, default: A1 => B1): B1 = ((x1.asInstanceOf[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])]: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) @unchecked) match { case (_1: org.make.core.reference.Language, _2: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((templates @ _))) => scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](templates) case (defaultCase$ @ _) => default.apply(x1) }; final def isDefinedAt(x1: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): Boolean = ((x1.asInstanceOf[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])]: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) @unchecked) match { case (_1: org.make.core.reference.Language, _2: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((templates @ _))) => true case (defaultCase$ @ _) => false } }; new $anonfun() }: PartialFunction[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]),(org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)])))(core.this.StringValue.ordering[org.make.core.reference.Language])))(scala.concurrent.ExecutionContext.Implicits.global)
84 26846 2788 - 3278 ApplyToImplicitArgs scala.collection.SortedMapFactory.Delegate.from scala.collection.SortedMap.from[org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](all.groupBy[org.make.core.reference.Language](((x$10: org.make.core.crmTemplate.CrmLanguageTemplate) => x$10.language)).map[org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((x0$1: (org.make.core.reference.Language, Seq[org.make.core.crmTemplate.CrmLanguageTemplate])) => x0$1 match { case (_1: org.make.core.reference.Language, _2: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, Seq[org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (templates @ _)) => { val validated: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate] = DefaultCrmTemplatesService.this.validate(language, templates); validated.failed.foreach[Unit](((x$11: Throwable) => DefaultCrmTemplatesService.this.logger.error("Listing an invalid language in CRM language templates", x$11))); scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](validated) } })).collect[org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](({ @SerialVersionUID(value = 0) final <synthetic> class $anonfun extends scala.runtime.AbstractPartialFunction[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]),(org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)] with java.io.Serializable { def <init>(): <$anon: ((org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])) => (org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)> = { $anonfun.super.<init>(); () }; final override def applyOrElse[A1 <: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]), B1 >: (org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)](x1: A1, default: A1 => B1): B1 = ((x1.asInstanceOf[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])]: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) @unchecked) match { case (_1: org.make.core.reference.Language, _2: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((templates @ _))) => scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](templates) case (defaultCase$ @ _) => default.apply(x1) }; final def isDefinedAt(x1: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): Boolean = ((x1.asInstanceOf[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])]: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) @unchecked) match { case (_1: org.make.core.reference.Language, _2: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((templates @ _))) => true case (defaultCase$ @ _) => false } }; new $anonfun() }: PartialFunction[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]),(org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)])))(core.this.StringValue.ordering[org.make.core.reference.Language])
84 23087 2802 - 2802 TypeApply org.make.core.StringValue.ordering core.this.StringValue.ordering[org.make.core.reference.Language]
86 27087 2847 - 2857 Select org.make.core.crmTemplate.CrmLanguageTemplate.language x$10.language
89 25762 2966 - 2995 Apply org.make.api.crmTemplates.DefaultCrmTemplatesServiceComponent.DefaultCrmTemplatesService.validate DefaultCrmTemplatesService.this.validate(language, templates)
90 27365 3016 - 3114 Apply scala.util.Try.foreach validated.failed.foreach[Unit](((x$11: Throwable) => DefaultCrmTemplatesService.this.logger.error("Listing an invalid language in CRM language templates", x$11)))
90 23543 3041 - 3113 Apply grizzled.slf4j.Logger.error DefaultCrmTemplatesService.this.logger.error("Listing an invalid language in CRM language templates", x$11)
91 24961 3135 - 3156 Apply scala.Predef.ArrowAssoc.-> scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](validated)
93 25422 2818 - 3264 Apply scala.collection.MapOps.collect all.groupBy[org.make.core.reference.Language](((x$10: org.make.core.crmTemplate.CrmLanguageTemplate) => x$10.language)).map[org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((x0$1: (org.make.core.reference.Language, Seq[org.make.core.crmTemplate.CrmLanguageTemplate])) => x0$1 match { case (_1: org.make.core.reference.Language, _2: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, Seq[org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (templates @ _)) => { val validated: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate] = DefaultCrmTemplatesService.this.validate(language, templates); validated.failed.foreach[Unit](((x$11: Throwable) => DefaultCrmTemplatesService.this.logger.error("Listing an invalid language in CRM language templates", x$11))); scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](validated) } })).collect[org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](({ @SerialVersionUID(value = 0) final <synthetic> class $anonfun extends scala.runtime.AbstractPartialFunction[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]),(org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)] with java.io.Serializable { def <init>(): <$anon: ((org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])) => (org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)> = { $anonfun.super.<init>(); () }; final override def applyOrElse[A1 <: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]), B1 >: (org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)](x1: A1, default: A1 => B1): B1 = ((x1.asInstanceOf[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])]: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) @unchecked) match { case (_1: org.make.core.reference.Language, _2: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((templates @ _))) => scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](templates) case (defaultCase$ @ _) => default.apply(x1) }; final def isDefinedAt(x1: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): Boolean = ((x1.asInstanceOf[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])]: (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]) @unchecked) match { case (_1: org.make.core.reference.Language, _2: scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]): (org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate])((language @ _), (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((templates @ _))) => true case (defaultCase$ @ _) => false } }; new $anonfun() }: PartialFunction[(org.make.core.reference.Language, scala.util.Try[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]),(org.make.core.reference.Language, org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate)]))
93 22963 3241 - 3262 Apply scala.Predef.ArrowAssoc.-> scala.Predef.ArrowAssoc[org.make.core.reference.Language](language).->[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](templates)
93 27616 3200 - 3200 Apply org.make.api.crmTemplates.DefaultCrmTemplatesServiceComponent.DefaultCrmTemplatesService.$anonfun.<init> new $anonfun()
99 27166 3463 - 3463 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
99 24908 3403 - 3633 ApplyToImplicitArgs scala.concurrent.Future.flatMap org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmLanguageTemplateService.list(language).flatMap[Option[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((raw: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]) => if (raw.isEmpty) scala.concurrent.Future.successful[None.type](scala.None) else scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, raw)).map[Some[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => scala.Some.apply[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](value)))(scala.concurrent.ExecutionContext.Implicits.global)))(scala.concurrent.ExecutionContext.Implicits.global)
100 27156 3484 - 3495 Select scala.collection.SeqOps.isEmpty raw.isEmpty
101 24973 3527 - 3531 Select scala.None scala.None
101 22933 3509 - 3532 Apply scala.concurrent.Future.successful scala.concurrent.Future.successful[None.type](scala.None)
101 27625 3509 - 3532 Block scala.concurrent.Future.successful scala.concurrent.Future.successful[None.type](scala.None)
103 23491 3560 - 3615 Block scala.concurrent.Future.map scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, raw)).map[Some[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => scala.Some.apply[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](value)))(scala.concurrent.ExecutionContext.Implicits.global)
103 25428 3575 - 3598 Apply org.make.api.crmTemplates.DefaultCrmTemplatesServiceComponent.DefaultCrmTemplatesService.validate DefaultCrmTemplatesService.this.validate(language, raw)
103 26857 3603 - 3603 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
103 24810 3560 - 3615 ApplyToImplicitArgs scala.concurrent.Future.map scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, raw)).map[Some[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]](((value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate) => scala.Some.apply[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](value)))(scala.concurrent.ExecutionContext.Implicits.global)
103 23025 3604 - 3614 Apply scala.Some.apply scala.Some.apply[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](value)
112 26785 3816 - 3962 Apply scala.collection.IndexedSeqOps.map org.make.api.crmtemplates.crmtemplatesservicetest org.make.core.crmTemplate.CrmTemplateKind.values.map[org.make.core.crmTemplate.CrmLanguageTemplate](((kind: org.make.core.crmTemplate.CrmTemplateKind) => org.make.core.crmTemplate.CrmLanguageTemplate.apply(org.make.core.crmTemplate.CrmLanguageTemplateId.apply(DefaultCrmTemplatesServiceComponent.this.idGenerator.nextId()), kind, language, values.apply(kind))))
113 25599 3941 - 3953 Apply scala.Function1.apply org.make.api.crmtemplates.crmtemplatesservicetest values.apply(kind)
113 26403 3880 - 3923 Apply org.make.core.crmTemplate.CrmLanguageTemplateId.apply org.make.api.crmtemplates.crmtemplatesservicetest org.make.core.crmTemplate.CrmLanguageTemplateId.apply(DefaultCrmTemplatesServiceComponent.this.idGenerator.nextId())
113 23034 3860 - 3954 Apply org.make.core.crmTemplate.CrmLanguageTemplate.apply org.make.api.crmtemplates.crmtemplatesservicetest org.make.core.crmTemplate.CrmLanguageTemplate.apply(org.make.core.crmTemplate.CrmLanguageTemplateId.apply(DefaultCrmTemplatesServiceComponent.this.idGenerator.nextId()), kind, language, values.apply(kind))
113 22947 3902 - 3922 Apply org.make.core.technical.IdGenerator.nextId org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.idGenerator.nextId()
117 23698 4061 - 4103 Apply scala.concurrent.Future.fromTry scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, result))
117 27469 4050 - 4050 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
117 24915 3969 - 4104 ApplyToImplicitArgs scala.concurrent.Future.flatMap org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmLanguageTemplateService.persist(templates).flatMap[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](((result: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]) => scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, result))))(scala.concurrent.ExecutionContext.Implicits.global)
117 24822 4076 - 4102 Apply org.make.api.crmTemplates.DefaultCrmTemplatesServiceComponent.DefaultCrmTemplatesService.validate DefaultCrmTemplatesService.this.validate(language, result)
126 24765 4271 - 4759 ApplyToImplicitArgs scala.concurrent.Future.flatMap org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmLanguageTemplateService.list(language).flatMap[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](((current: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]) => DefaultCrmTemplatesService.this.validate(language, current) match { case (value: org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate): scala.util.Success[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](_) => DefaultCrmTemplatesServiceComponent.this.persistentCrmLanguageTemplateService.modify(current.map[org.make.core.crmTemplate.CrmLanguageTemplate](((template: org.make.core.crmTemplate.CrmLanguageTemplate) => { <artifact> val x$1: org.make.core.crmTemplate.TemplateId = values.apply(template.kind); <artifact> val x$2: org.make.core.crmTemplate.CrmLanguageTemplateId = template.copy$default$1; <artifact> val x$3: org.make.core.crmTemplate.CrmTemplateKind = template.copy$default$2; <artifact> val x$4: org.make.core.reference.Language = template.copy$default$3; template.copy(x$2, x$3, x$4, x$1) }))).flatMap[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](((result: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]) => scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, result))))(scala.concurrent.ExecutionContext.Implicits.global) case (exception: Throwable): scala.util.Failure[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate]((e @ _)) => scala.concurrent.Future.failed[Nothing](e) }))(scala.concurrent.ExecutionContext.Implicits.global)
126 27034 4348 - 4348 Select scala.concurrent.ExecutionContext.Implicits.global org.make.api.crmtemplates.crmtemplatesservicetest scala.concurrent.ExecutionContext.Implicits.global
128 22960 4383 - 4410 Apply org.make.api.crmTemplates.DefaultCrmTemplatesServiceComponent.DefaultCrmTemplatesService.validate DefaultCrmTemplatesService.this.validate(language, current)
131 23350 4564 - 4564 Select org.make.core.crmTemplate.CrmLanguageTemplate.copy$default$1 template.copy$default$1
131 26702 4587 - 4600 Select org.make.core.crmTemplate.CrmLanguageTemplate.kind template.kind
131 27024 4564 - 4564 Select org.make.core.crmTemplate.CrmLanguageTemplate.copy$default$2 template.copy$default$2
131 23483 4555 - 4602 Apply org.make.core.crmTemplate.CrmLanguageTemplate.copy template.copy(x$2, x$3, x$4, x$1)
131 27290 4531 - 4603 Apply scala.collection.IterableOps.map current.map[org.make.core.crmTemplate.CrmLanguageTemplate](((template: org.make.core.crmTemplate.CrmLanguageTemplate) => { <artifact> val x$1: org.make.core.crmTemplate.TemplateId = values.apply(template.kind); <artifact> val x$2: org.make.core.crmTemplate.CrmLanguageTemplateId = template.copy$default$1; <artifact> val x$3: org.make.core.crmTemplate.CrmTemplateKind = template.copy$default$2; <artifact> val x$4: org.make.core.reference.Language = template.copy$default$3; template.copy(x$2, x$3, x$4, x$1) }))
131 24834 4564 - 4564 Select org.make.core.crmTemplate.CrmLanguageTemplate.copy$default$3 template.copy$default$3
131 25417 4580 - 4601 Apply scala.Function1.apply values.apply(template.kind)
132 25234 4657 - 4683 Apply org.make.api.crmTemplates.DefaultCrmTemplatesServiceComponent.DefaultCrmTemplatesService.validate DefaultCrmTemplatesService.this.validate(language, result)
132 22889 4642 - 4684 Apply scala.concurrent.Future.fromTry scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, result))
132 25359 4468 - 4685 ApplyToImplicitArgs scala.concurrent.Future.flatMap DefaultCrmTemplatesServiceComponent.this.persistentCrmLanguageTemplateService.modify(current.map[org.make.core.crmTemplate.CrmLanguageTemplate](((template: org.make.core.crmTemplate.CrmLanguageTemplate) => { <artifact> val x$1: org.make.core.crmTemplate.TemplateId = values.apply(template.kind); <artifact> val x$2: org.make.core.crmTemplate.CrmLanguageTemplateId = template.copy$default$1; <artifact> val x$3: org.make.core.crmTemplate.CrmTemplateKind = template.copy$default$2; <artifact> val x$4: org.make.core.reference.Language = template.copy$default$3; template.copy(x$2, x$3, x$4, x$1) }))).flatMap[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](((result: Seq[org.make.core.crmTemplate.CrmLanguageTemplate]) => scala.concurrent.Future.fromTry[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](DefaultCrmTemplatesService.this.validate(language, result))))(scala.concurrent.ExecutionContext.Implicits.global)
132 26713 4631 - 4631 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
133 23170 4719 - 4735 Apply scala.concurrent.Future.failed scala.concurrent.Future.failed[Nothing](e)
142 22414 4961 - 4967 Select org.make.core.crmTemplate.CrmLanguageTemplate.kind x$12.kind
142 24905 4936 - 5005 Apply scala.collection.IterableOps.groupMapReduce templates.groupMapReduce[org.make.core.crmTemplate.CrmTemplateKind, org.make.core.crmTemplate.CrmLanguageTemplate](((x$12: org.make.core.crmTemplate.CrmLanguageTemplate) => x$12.kind))(((x: org.make.core.crmTemplate.CrmLanguageTemplate) => scala.Predef.identity[org.make.core.crmTemplate.CrmLanguageTemplate](x)))(((template: org.make.core.crmTemplate.CrmLanguageTemplate, x$13: org.make.core.crmTemplate.CrmLanguageTemplate) => template))
142 27227 4969 - 4977 Apply scala.Predef.identity scala.Predef.identity[org.make.core.crmTemplate.CrmLanguageTemplate](x)
143 22900 5058 - 5070 Select scala.collection.MapOps.keys indexed.keys
143 26491 5026 - 5070 Apply scala.collection.immutable.SetOps.-- org.make.core.crmTemplate.CrmTemplateKind.values.toSet[org.make.core.crmTemplate.CrmTemplateKind].--(indexed.keys)
144 25366 5081 - 5096 Select scala.collection.IterableOnceOps.isEmpty missing.isEmpty
145 24773 5108 - 5130 Block scala.util.Success.apply scala.util.Success.apply[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](((key: org.make.core.crmTemplate.CrmTemplateKind) => indexed.apply(key)))
145 23181 5116 - 5129 Apply scala.collection.MapOps.apply org.make.api.crmtemplates.crmtemplatesservicetest indexed.apply(key)
145 26781 5108 - 5130 Apply scala.util.Success.apply scala.util.Success.apply[org.make.core.crmTemplate.CrmTemplateKind => org.make.core.crmTemplate.CrmLanguageTemplate](((key: org.make.core.crmTemplate.CrmTemplateKind) => indexed.apply(key)))
147 27232 5154 - 5292 Apply scala.util.Failure.apply scala.util.Failure.apply[Nothing](new java.lang.IllegalStateException(("Missing CRM language templates for ".+(language.value).+(": ").+(missing.mkString(", ")): String)))
147 24912 5154 - 5292 Block scala.util.Failure.apply scala.util.Failure.apply[Nothing](new java.lang.IllegalStateException(("Missing CRM language templates for ".+(language.value).+(": ").+(missing.mkString(", ")): String)))
148 22342 5173 - 5282 Apply java.lang.IllegalStateException.<init> new java.lang.IllegalStateException(("Missing CRM language templates for ".+(language.value).+(": ").+(missing.mkString(", ")): String))
156 22649 5425 - 5478 Apply org.make.api.crmTemplates.PersistentCrmQuestionTemplateService.list org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmQuestionTemplateService.list(questionId)
164 26505 5698 - 5707 TypeApply scala.collection.SeqFactory.Delegate.empty scala.`package`.Seq.empty[Nothing]
164 25311 5680 - 5708 Apply scala.concurrent.Future.successful scala.concurrent.Future.successful[Seq[Nothing]](scala.`package`.Seq.empty[Nothing])
165 23346 5740 - 5813 Apply org.make.api.crmTemplates.PersistentCrmQuestionTemplateService.listByLanguage org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmQuestionTemplateService.listByLanguage(questionId, language)
170 26789 5924 - 5968 Apply org.make.api.crmTemplates.PersistentCrmQuestionTemplateService.get org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmQuestionTemplateService.get(id)
174 24748 6070 - 6124 Apply org.make.api.crmTemplates.PersistentCrmQuestionTemplateService.persist org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmQuestionTemplateService.persist(template)
178 22355 6226 - 6279 Apply org.make.api.crmTemplates.PersistentCrmQuestionTemplateService.modify org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmQuestionTemplateService.modify(template)
182 27243 6362 - 6409 Apply org.make.api.crmTemplates.PersistentCrmQuestionTemplateService.remove org.make.api.crmtemplates.crmtemplatesservicetest DefaultCrmTemplatesServiceComponent.this.persistentCrmQuestionTemplateService.remove(id)