This is a bit of an odd situation because with the Play framework one stick to either Java or Scala. In my case, I want Scala but also want to build of top of the play-authenticate project that is implemented as a Play Java plugin (and not Scala).
Attempting to migrate their usage sample to Scala and after doing most of the migration to Scala I bumped into the issue of having Scala play.api.data.Form
types and need to pass to the play-authenticate framework Java's play.data.Form
type. Therefore I need conversion between these two separate (no common abstraction or anything) classes.
I already checked the play.core.j.JavaHelpers
implementation but there is nothing to convert between the two separate Form
types. I could do it manually but it is a maintenance toll and was wondering if anyone has already bumped into this and how it was solved?
UPDATE I tried PlayMagicForJava
as follows but there was no magic :X
import javax.inject.{Inject, Singleton}
import play.api.data.Forms._
import play.api.i18n.Messages
import play.api.mvc.RequestHeader
case class Signup(email: String, password: String, repeatPassword: String, username: String)
@Singleton
class SignupForm @Inject() (implicit val request: RequestHeader, messages: Messages) {
import play.core.j.PlayMagicForJava._
val Instance : play.data.Form[Signup] = play.api.data.Form {
mapping(
"email" -> email,
"password" -> nonEmptyText(minLength = 5),
"repeatPassword" -> nonEmptyText(minLength = 5),
"username" -> nonEmptyText()
)(Signup.apply)(Signup.unapply).
verifying(messages("playauthenticate.password.signup.error.passwords_not_same"),
data => data.password != null && !data.password.isEmpty && data.password.equals(data.repeatPassword))
}
}
and the error:
[error] SignupForm.scala:16: type mismatch;
[error] found : play.api.data.Form[views.form.Signup]
[error] required: play.data.Form[views.form.Signup]
[error] val Instance : play.data.Form[Signup] = Form {