From 8b76bf3d4bb2759efa63265d8188b14945ed7728 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Mon, 3 Feb 2014 08:03:10 +0100 Subject: [PATCH] [Major] refactoring use of BooleanSelection in StrolchQuery --- .../li/strolch/model/query/AndSelection.java | 12 ++++ .../strolch/model/query/BooleanSelection.java | 12 ++++ .../li/strolch/model/query/OrSelection.java | 12 ++++ .../li/strolch/model/query/OrderQuery.java | 4 -- .../li/strolch/model/query/StrolchQuery.java | 56 ++++++++----------- 5 files changed, 58 insertions(+), 38 deletions(-) diff --git a/src/main/java/li/strolch/model/query/AndSelection.java b/src/main/java/li/strolch/model/query/AndSelection.java index 77c480921..877ba4f50 100644 --- a/src/main/java/li/strolch/model/query/AndSelection.java +++ b/src/main/java/li/strolch/model/query/AndSelection.java @@ -44,6 +44,18 @@ public class AndSelection extends BooleanSelection { return this; } + @Override + public AndSelection with(List selections) { + super.with(selections); + return this; + } + + @Override + public AndSelection with(Selection... selections) { + super.with(selections); + return this; + } + @Override public void accept(QueryVisitor visitor) { visitor.visitAnd(this); diff --git a/src/main/java/li/strolch/model/query/BooleanSelection.java b/src/main/java/li/strolch/model/query/BooleanSelection.java index 010d463d6..76e2cee17 100644 --- a/src/main/java/li/strolch/model/query/BooleanSelection.java +++ b/src/main/java/li/strolch/model/query/BooleanSelection.java @@ -54,6 +54,18 @@ public abstract class BooleanSelection implements Selection { return this; } + public BooleanSelection with(Selection... selections) { + for (Selection selection : selections) { + this.selections.add(selection); + } + return this; + } + + public BooleanSelection with(List selections) { + this.selections.addAll(selections); + return this; + } + @Override public abstract void accept(QueryVisitor visitor); } diff --git a/src/main/java/li/strolch/model/query/OrSelection.java b/src/main/java/li/strolch/model/query/OrSelection.java index 697a25182..e2b0d582c 100644 --- a/src/main/java/li/strolch/model/query/OrSelection.java +++ b/src/main/java/li/strolch/model/query/OrSelection.java @@ -41,6 +41,18 @@ public class OrSelection extends BooleanSelection { return this; } + @Override + public OrSelection with(List selections) { + super.with(selections); + return this; + } + + @Override + public OrSelection with(Selection... selections) { + super.with(selections); + return this; + } + @Override public void accept(QueryVisitor visitor) { visitor.visitOr(this); diff --git a/src/main/java/li/strolch/model/query/OrderQuery.java b/src/main/java/li/strolch/model/query/OrderQuery.java index 23a598a7d..a98ca4f08 100644 --- a/src/main/java/li/strolch/model/query/OrderQuery.java +++ b/src/main/java/li/strolch/model/query/OrderQuery.java @@ -23,8 +23,4 @@ public class OrderQuery extends StrolchQuery { public OrderQuery(Navigation navigation) { super(navigation); } - - public void add(OrderSelection selection) { - this.selections.add(selection); - } } diff --git a/src/main/java/li/strolch/model/query/StrolchQuery.java b/src/main/java/li/strolch/model/query/StrolchQuery.java index 256abdc85..fa90f0385 100644 --- a/src/main/java/li/strolch/model/query/StrolchQuery.java +++ b/src/main/java/li/strolch/model/query/StrolchQuery.java @@ -15,8 +15,7 @@ */ package li.strolch.model.query; -import java.util.ArrayList; -import java.util.List; +import ch.eitchnet.utils.dbc.DBC; /** * @author Robert von Burg @@ -24,52 +23,41 @@ import java.util.List; public abstract class StrolchQuery { private Navigation navigation; - protected List selections; + private Selection selection; public StrolchQuery(Navigation navigation) { this.navigation = navigation; - this.selections = new ArrayList<>(); } - public void addSelection(BooleanSelection selection) { - this.selections.add(selection); + public void select(Selection selection) { + DBC.PRE.assertNull("A selection is already set! Use a boolean operator to perform multiple selections", + this.selection); + this.selection = selection; } - public void addSelection(StrolchElementSelection selection) { - this.selections.add(selection); + public AndSelection and() { + DBC.PRE.assertNull("A selection is already set! Create hierarchical boolean selections", this.selection); + AndSelection and = new AndSelection(); + this.selection = and; + return and; } - public void addSelection(ParameterSelection selection) { - this.selections.add(selection); + public OrSelection or() { + DBC.PRE.assertNull("A selection is already set! Create hierarchical boolean selections", this.selection); + OrSelection or = new OrSelection(); + this.selection = or; + return or; } - public StrolchQuery select(Selection selection) { - this.selections.add(selection); - return this; - } - - public StrolchQuery and(Selection... selections) { - AndSelection and = new AndSelection(selections); - this.selections.add(and); - return this; - } - - public StrolchQuery or(Selection... selections) { - OrSelection or = new OrSelection(selections); - this.selections.add(or); - return this; - } - - public StrolchQuery not(Selection selection) { - NotSelection not = new NotSelection(selection); - this.selections.add(not); - return this; + public void not(Selection selection) { + DBC.PRE.assertNull("A selection is already set! Create hierarchical boolean selections", this.selection); + this.selection = new NotSelection(selection); } public void accept(T visitor) { + DBC.PRE.assertNotNull("No navigation set!", this.navigation); + DBC.PRE.assertNotNull("No selection defined!", this.selection); this.navigation.accept(visitor); - for (Selection selection : this.selections) { - selection.accept(visitor); - } + this.selection.accept(visitor); } }