diff --git a/app/controllers/DependencyCheckReportsParser.scala b/app/controllers/DependencyCheckReportsParser.scala index 74b24ae..881993a 100644 --- a/app/controllers/DependencyCheckReportsParser.scala +++ b/app/controllers/DependencyCheckReportsParser.scala @@ -19,6 +19,7 @@ sealed trait Filter{ def filters: Boolean def descriptionHtml: Html def descriptionText: String + def filterProjectsWithReports(projectsWithReports: ProjectsWithReports): Option[ProjectsWithReports] = ??? } final case class ProjectFilter(project: ReportInfo) extends Filter{ override def filters: Boolean = true @@ -100,6 +101,7 @@ object NoFilter extends Filter{ override def descriptionText: String = "all projects" override def subReports(r: Result): Option[Result] = Some(r) override def selector: Option[String] = None + override def filterProjectsWithReports(projectsWithReports: ProjectsWithReports): Option[ProjectsWithReports] = Some(projectsWithReports) } private final case class BadFilter(pattern: String) extends Filter{ override def filters: Boolean = true @@ -107,6 +109,7 @@ private final case class BadFilter(pattern: String) extends Filter{ override def descriptionHtml: Html = Html("bad filter") override def descriptionText: String = "bad filter" override def selector: Option[String] = Some(pattern) + override def filterProjectsWithReports(projectsWithReports: ProjectsWithReports): Option[ProjectsWithReports] = None } object DependencyCheckReportsParser{ diff --git a/app/controllers/Notifications.scala b/app/controllers/Notifications.scala index 950e5c8..cfd6415 100644 --- a/app/controllers/Notifications.scala +++ b/app/controllers/Notifications.scala @@ -36,7 +36,7 @@ class Notifications @Inject()( import secureRequestConversion._ - def listProjects() = SecuredAction.async { implicit req => + def listProjects(filter: Option[String]) = SecuredAction.async { implicit req => val (lastRefreshTime, resultsFuture) = projectReportsProvider.resultsForVersions(versions) val myWatchesFuture = notificationService.watchedProjectsByUser(req.identity.loginInfo).map(_.map(_.project).toSet) for{ @@ -44,7 +44,8 @@ class Notifications @Inject()( myWatches <- myWatchesFuture } yield { val projects = dependencyCheckReportsParser.parseReports(successfulReports, failedReports).projectsReportInfo.sortedReportsInfo - Ok(views.html.notifications.index(projects, myWatches, failedReports.keySet)) + //val projects = dependencyCheckReportsParser.parseReports(successfulReports, failedReports).selection(filter).get.projectsWithSelection.projectsWithReportsSubset.sortedReportsInfo + Ok(views.html.notifications.index(projects, myWatches, failedReports.keySet, filter)) } } @@ -196,15 +197,15 @@ class Notifications @Inject()( } } - // Redirection to a specific position does not look intuituve now, so it has been disabled for now. - private def redirectToProject(project: String)(implicit th: DefaultRequest) = Redirect(routes.Notifications.listProjects()/*.withFragment("project-" + URLEncoder.encode(project, "utf-8")).absoluteURL()*/) + // Redirection to a specific position does not look intuitive now, so it has been disabled for now. + private def redirectToProject(project: String, filter: Option[String])(implicit th: DefaultRequest) = Redirect(routes.Notifications.listProjects(filter)/*.withFragment("project-" + URLEncoder.encode(project, "utf-8")).absoluteURL()*/) - def watch(project: String) = SecuredAction.async{ implicit req => - for( _ <-notificationService.subscribe(req.identity.loginInfo, project) ) yield redirectToProject(project) + def watch(project: String, filter: Option[String]) = SecuredAction.async{ implicit req => + for( _ <-notificationService.subscribe(req.identity.loginInfo, project) ) yield redirectToProject(project, filter) } - def unwatch(project: String) = SecuredAction.async{ implicit req => - for( _ <-notificationService.unsubscribe(req.identity.loginInfo, project) ) yield redirectToProject(project) + def unwatch(project: String, filter: Option[String]) = SecuredAction.async{ implicit req => + for( _ <-notificationService.unsubscribe(req.identity.loginInfo, project) ) yield redirectToProject(project, filter) } } diff --git a/app/controllers/ProjectsWithSelection.scala b/app/controllers/ProjectsWithSelection.scala index ee2a62e..285365f 100644 --- a/app/controllers/ProjectsWithSelection.scala +++ b/app/controllers/ProjectsWithSelection.scala @@ -11,4 +11,5 @@ final case class ProjectsWithSelection(filter: Filter, projectsWithReports: Proj def isProjectSpecified: Boolean = filter.filters def selectorString = filter.selector def projectNameText: String = filter.descriptionText + def projectsWithReportsSubset: Option[ProjectsWithReports] = filter.filterProjectsWithReports(projectsWithReports) } diff --git a/app/views/main.scala.html b/app/views/main.scala.html index e686f61..aa4ce6e 100644 --- a/app/views/main.scala.html +++ b/app/views/main.scala.html @@ -44,13 +44,14 @@