From c246c762366cec21e6fa1f7c58ddf7066dccec38 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Tue, 15 Jul 2014 18:50:45 +0200 Subject: [PATCH] [New] Added a StrolchQuery.hasSelection() and Selection.hasSelection() This allows for checking if a query really has a selection. --- .../li/strolch/model/query/BooleanSelection.java | 14 ++++++++++++++ .../li/strolch/model/query/OrderSelection.java | 7 ++++++- .../strolch/model/query/ParameterSelection.java | 16 ++++++++++++++++ .../java/li/strolch/model/query/Selection.java | 3 ++- .../model/query/StrolchElementSelection.java | 5 +++++ .../li/strolch/model/query/StrolchQuery.java | 8 ++++++++ 6 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main/java/li/strolch/model/query/BooleanSelection.java b/src/main/java/li/strolch/model/query/BooleanSelection.java index 76e2cee17..afc7284b7 100644 --- a/src/main/java/li/strolch/model/query/BooleanSelection.java +++ b/src/main/java/li/strolch/model/query/BooleanSelection.java @@ -45,6 +45,20 @@ public abstract class BooleanSelection implements Selection { this.selections = Arrays.asList(selections); } + @Override + public boolean hasSelection() { + if (this.selections == null || this.selections.isEmpty()) + return false; + + for (Selection selection : this.selections) { + if (selection.hasSelection()) { + return true; + } + } + + return false; + } + public List getSelections() { return Collections.unmodifiableList(this.selections); } diff --git a/src/main/java/li/strolch/model/query/OrderSelection.java b/src/main/java/li/strolch/model/query/OrderSelection.java index ab6479c42..4a904d612 100644 --- a/src/main/java/li/strolch/model/query/OrderSelection.java +++ b/src/main/java/li/strolch/model/query/OrderSelection.java @@ -17,7 +17,7 @@ package li.strolch.model.query; /** * @author Robert von Burg - * + * */ public abstract class OrderSelection implements Selection { @@ -26,5 +26,10 @@ public abstract class OrderSelection implements Selection { accept((OrderSelectionVisitor) visitor); } + @Override + public boolean hasSelection() { + return true; + } + public abstract void accept(OrderSelectionVisitor visitor); } diff --git a/src/main/java/li/strolch/model/query/ParameterSelection.java b/src/main/java/li/strolch/model/query/ParameterSelection.java index a3cc17bdf..3ca5b1316 100644 --- a/src/main/java/li/strolch/model/query/ParameterSelection.java +++ b/src/main/java/li/strolch/model/query/ParameterSelection.java @@ -45,11 +45,27 @@ public abstract class ParameterSelection implements Selection { return this.paramKey; } + @Override + public boolean hasSelection() { + return true; + } + @Override public void accept(QueryVisitor visitor) { accept((ParameterSelectionVisitor) visitor); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(getClass().getSimpleName() + " [bagKey="); + builder.append(this.bagKey); + builder.append(", paramKey="); + builder.append(this.paramKey); + builder.append("]"); + return builder.toString(); + } + public abstract void accept(ParameterSelectionVisitor visitor); public static StringParameterSelection stringSelection(String bagKey, String paramKey, String value) { diff --git a/src/main/java/li/strolch/model/query/Selection.java b/src/main/java/li/strolch/model/query/Selection.java index aeaded229..dd930ec6a 100644 --- a/src/main/java/li/strolch/model/query/Selection.java +++ b/src/main/java/li/strolch/model/query/Selection.java @@ -20,6 +20,7 @@ package li.strolch.model.query; */ public interface Selection { - // marker interface public void accept(QueryVisitor visitor); + + public boolean hasSelection(); } diff --git a/src/main/java/li/strolch/model/query/StrolchElementSelection.java b/src/main/java/li/strolch/model/query/StrolchElementSelection.java index bd4a5907b..0d33dc4bc 100644 --- a/src/main/java/li/strolch/model/query/StrolchElementSelection.java +++ b/src/main/java/li/strolch/model/query/StrolchElementSelection.java @@ -25,5 +25,10 @@ public abstract class StrolchElementSelection implements Selection { accept((StrolchElementSelectionVisitor) visitor); } + @Override + public boolean hasSelection() { + return true; + } + public abstract void accept(StrolchElementSelectionVisitor visitor); } diff --git a/src/main/java/li/strolch/model/query/StrolchQuery.java b/src/main/java/li/strolch/model/query/StrolchQuery.java index fa90f0385..daba941ed 100644 --- a/src/main/java/li/strolch/model/query/StrolchQuery.java +++ b/src/main/java/li/strolch/model/query/StrolchQuery.java @@ -28,6 +28,14 @@ public abstract class StrolchQuery { public StrolchQuery(Navigation navigation) { this.navigation = navigation; } + + public boolean hasNavigation() { + return navigation != null; + } + + public boolean hasSelection() { + return selection != null && selection.hasSelection(); + } public void select(Selection selection) { DBC.PRE.assertNull("A selection is already set! Use a boolean operator to perform multiple selections",