diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index a013e64..bc0700b 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -12,7 +12,7 @@ with SystemSettingsService with AccountService with RepositoryService with ActivityService with OneselfAuthenticator -trait AccountControllerBase extends ControllerBase with FlashMapSupport { +trait AccountControllerBase extends AccountManagementControllerBase with FlashMapSupport { self: SystemSettingsService with AccountService with RepositoryService with ActivityService with OneselfAuthenticator => @@ -105,30 +105,4 @@ } else NotFound } - // TODO Merge with UserManagementController - private def updateImage(userName: String, fileId: Option[String]): Unit = { - fileId.map { fileId => - val filename = "avatar." + FileUtil.getExtension(FileUploadUtil.getUploadedFilename(fileId).get) - FileUtils.moveFile( - FileUploadUtil.getTemporaryFile(fileId), - new java.io.File(getUserUploadDir(userName), filename) - ) - updateAvatarImage(userName, Some(filename)) - } - } - - // TODO Merge with UserManagementController - private def uniqueUserName: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = - getAccountByUserName(value).map { _ => "User already exists." } - } - - // TODO Merge with UserManagementController - private def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = - getAccountByMailAddress(value) - .filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) } - .map { _ => "Mail address is already registered." } - } - } diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index 340a808..922105e 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -1,14 +1,18 @@ package app -import model.Account -import util.Validations +import _root_.util.Directory._ +import _root_.util.{FileUploadUtil, FileUtil, Validations} import org.scalatra._ import org.scalatra.json._ import org.json4s._ import jp.sf.amateras.scalatra.forms._ +import org.apache.commons.io.FileUtils +import model.Account +import scala.Some +import service.AccountService /** - * Provides generic features for ScalatraServlet implementations. + * Provides generic features for controller implementations. */ abstract class ControllerBase extends ScalatraFilter with ClientSideValidationFormSupport with JacksonJsonSupport with Validations { @@ -87,4 +91,37 @@ } -case class Context(path: String, loginAccount: Option[Account], currentUrl: String) \ No newline at end of file +/** + * Context object for the current request. + */ +case class Context(path: String, loginAccount: Option[Account], currentUrl: String) + +/** + * Base trait for controllers which manages account information. + */ +trait AccountManagementControllerBase extends ControllerBase { self: AccountService => + + protected def updateImage(userName: String, fileId: Option[String]): Unit = { + fileId.map { fileId => + val filename = "avatar." + FileUtil.getExtension(FileUploadUtil.getUploadedFilename(fileId).get) + FileUtils.moveFile( + FileUploadUtil.getTemporaryFile(fileId), + new java.io.File(getUserUploadDir(userName), filename) + ) + updateAvatarImage(userName, Some(filename)) + } + } + + protected def uniqueUserName: Constraint = new Constraint(){ + def validate(name: String, value: String): Option[String] = + getAccountByUserName(value).map { _ => "User already exists." } + } + + protected def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){ + def validate(name: String, value: String): Option[String] = + getAccountByMailAddress(value) + .filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) } + .map { _ => "Mail address is already registered." } + } + +} \ No newline at end of file diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/app/UserManagementController.scala index e8502f8..7ec77a7 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/app/UserManagementController.scala @@ -10,7 +10,8 @@ class UserManagementController extends UserManagementControllerBase with AccountService with AdminAuthenticator -trait UserManagementControllerBase extends ControllerBase { self: AccountService with AdminAuthenticator => +trait UserManagementControllerBase extends AccountManagementControllerBase { + self: AccountService with AdminAuthenticator => case class UserNewForm(userName: String, password: String, mailAddress: String, isAdmin: Boolean, url: Option[String], fileId: Option[String]) @@ -77,31 +78,5 @@ redirect("/admin/users") } getOrElse NotFound }) - - // TODO Merge with AccountController? - private def updateImage(userName: String, fileId: Option[String]): Unit = { - fileId.map { fileId => - val filename = "avatar." + FileUtil.getExtension(FileUploadUtil.getUploadedFilename(fileId).get) - FileUtils.moveFile( - FileUploadUtil.getTemporaryFile(fileId), - new java.io.File(getUserUploadDir(userName), filename) - ) - updateAvatarImage(userName, Some(filename)) - } - } - - // TODO Merge with AccountController? - private def uniqueUserName: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = - getAccountByUserName(value).map { _ => "User already exists." } - } - - // TODO Merge with AccountController? - private def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = - getAccountByMailAddress(value) - .filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) } - .map { _ => "Mail address is already registered." } - } } \ No newline at end of file