Created
July 1, 2011 15:03
-
-
Save sullivan-/1058724 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait Analysis { | |
val scoreColumns: Seq[ScoreColumn] = Seq() | |
} | |
trait AnalysisColumn | |
trait ScoreColumn extends AnalysisColumn | |
trait RawDataScoreColumn extends ScoreColumn | |
trait ComputedScoreColumn extends ScoreColumn { | |
val parentColumns: Seq[ScoreColumn] = Seq() | |
} | |
trait NonScoreColumn extends AnalysisColumn { | |
val visibleByDefault: Boolean = true | |
} | |
trait InfectionColumn extends NonScoreColumn | |
trait WellColumn extends NonScoreColumn | |
trait VirusColumn extends NonScoreColumn | |
sealed abstract class ColumnViewPolicy[A <: AnalysisColumn] { | |
val policyTitle: String | |
def isColumnVisible(analysis: Analysis, column: A): Boolean | |
} | |
abstract class LeafColumnViewPolicy[A <: AnalysisColumn] extends ColumnViewPolicy[A] | |
trait ShowAllColumnViewPolicy[A <: AnalysisColumn] | |
extends LeafColumnViewPolicy[A] { | |
override def isColumnVisible(analysis: Analysis, column: A) = true | |
} | |
trait HideAllColumnViewPolicy[A <: AnalysisColumn] | |
extends LeafColumnViewPolicy[A] { | |
override def isColumnVisible(analysis: Analysis, column: A) = false | |
} | |
abstract class ScoreColumnViewPolicy extends | |
LeafColumnViewPolicy[ScoreColumn] | |
case object ShowAllScoreColumnViewPolicy | |
extends ScoreColumnViewPolicy | |
with ShowAllColumnViewPolicy[ScoreColumn] { | |
override val policyTitle = "Show All Score Columns" | |
} | |
case object ShowRawColumnsOnlyViewPolicy extends ScoreColumnViewPolicy { | |
override val policyTitle = "Show Raw Columns Only" | |
override def isColumnVisible(analysis: Analysis, column: ScoreColumn) = column match { | |
case c: RawDataScoreColumn => true | |
case _ => false | |
} | |
} | |
case object ShowComputedColumnsOnlyViewPolicy extends ScoreColumnViewPolicy { | |
override val policyTitle = "Show Computed Columns Only" | |
override def isColumnVisible(analysis: Analysis, column: ScoreColumn) = column match { | |
case c: RawDataScoreColumn => false | |
case _ => true | |
} | |
} | |
case object HideComputedColumnsParentsViewPolicy extends ScoreColumnViewPolicy { | |
override val policyTitle = "Hide Parents of Computed Columns" | |
override def isColumnVisible(analysis: Analysis, column: ScoreColumn) = | |
analysis.scoreColumns.filter { | |
_ match { | |
case c: ComputedScoreColumn => c.parentColumns.contains(column) | |
case _ => false | |
} | |
}.isEmpty | |
} | |
abstract class NonScoreColumnViewPolicy[A <: NonScoreColumn] | |
extends LeafColumnViewPolicy[A] | |
trait ShowVisibleByDefaultNonScoreColumnViewPolicy[A <: NonScoreColumn] | |
extends NonScoreColumnViewPolicy[A] { | |
override def isColumnVisible(analysis: Analysis, column: A) = column.visibleByDefault | |
} | |
abstract class InfectionColumnViewPolicy | |
extends NonScoreColumnViewPolicy[InfectionColumn] | |
case object ShowAllInfectionColumnViewPolicy | |
extends InfectionColumnViewPolicy | |
with ShowAllColumnViewPolicy[InfectionColumn] { | |
override val policyTitle = "Show All Infection Columns" | |
} | |
case object ShowVisibleByDefaultInfectionColumnViewPolicy | |
extends InfectionColumnViewPolicy | |
with ShowVisibleByDefaultNonScoreColumnViewPolicy[InfectionColumn] { | |
override val policyTitle = "Show Batch Only" | |
} | |
case object HideAllInfectionColumnViewPolicy | |
extends InfectionColumnViewPolicy | |
with HideAllColumnViewPolicy[InfectionColumn] { | |
override val policyTitle = "Hide All Infection Columns" | |
} | |
abstract class WellColumnViewPolicy | |
extends NonScoreColumnViewPolicy[WellColumn] | |
case object ShowAllWellColumnViewPolicy | |
extends WellColumnViewPolicy with ShowAllColumnViewPolicy[WellColumn] { | |
override val policyTitle = "Show All Well Columns" | |
} | |
case object ShowVisibleByDefaultWellColumnViewPolicy | |
extends WellColumnViewPolicy | |
with ShowVisibleByDefaultNonScoreColumnViewPolicy[WellColumn] { | |
override val policyTitle = "Show Plate and Well Only" | |
} | |
case object HideAllWellColumnViewPolicy | |
extends WellColumnViewPolicy with HideAllColumnViewPolicy[WellColumn] { | |
override val policyTitle = "Hide All Well Columns" | |
} | |
abstract class VirusColumnViewPolicy | |
extends NonScoreColumnViewPolicy[VirusColumn] | |
case object ShowAllVirusColumnViewPolicy | |
extends VirusColumnViewPolicy with ShowAllColumnViewPolicy[VirusColumn] { | |
override val policyTitle = "Show All Virus Columns" | |
} | |
case object HideAllVirusColumnViewPolicy | |
extends VirusColumnViewPolicy with HideAllColumnViewPolicy[VirusColumn] { | |
override val policyTitle = "Hide All Virus Columns" | |
} | |
abstract class AnalysisColumnViewPolicy | |
extends ColumnViewPolicy[AnalysisColumn] | |
case class CompositeColumnViewPolicy( | |
scoreColumnViewPolicy: ScoreColumnViewPolicy, | |
infectionColumnViewPolicy: InfectionColumnViewPolicy, | |
wellColumnViewPolicy: WellColumnViewPolicy, | |
virusColumnViewPolicy: VirusColumnViewPolicy) | |
extends AnalysisColumnViewPolicy { | |
override val policyTitle = "Composite Column View Policy" | |
override def isColumnVisible(analysis: Analysis, column: AnalysisColumn): Boolean = { | |
column match { | |
case c: ScoreColumn => scoreColumnViewPolicy.isColumnVisible(analysis, c) | |
case c: InfectionColumn => infectionColumnViewPolicy.isColumnVisible(analysis, c) | |
case c: WellColumn => wellColumnViewPolicy.isColumnVisible(analysis, c) | |
case c: VirusColumn => virusColumnViewPolicy.isColumnVisible(analysis, c) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment