[New] modified the Selection to have a builder pattern

Further modified the StringParameterSelection to allow for contains and
case insensitive querying
This commit is contained in:
Robert von Burg 2014-01-31 15:55:16 +01:00
parent 743e1c039b
commit 368f8f14a4
10 changed files with 97 additions and 35 deletions

View File

@ -20,15 +20,30 @@ import java.util.List;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public class AndSelection<T extends Selection> extends BooleanSelection<T> {
public class AndSelection extends BooleanSelection {
public AndSelection() {
super();
}
@SafeVarargs
public AndSelection(Selection... selections) {
super(selections);
}
/**
* @param selections
*/
public AndSelection(List<T> selections) {
public AndSelection(List<Selection> selections) {
super(selections);
}
@Override
public AndSelection with(Selection selection) {
super.with(selection);
return this;
}
public void accept(QueryVisitor visitor) {
visitor.visitAnd(this);
}

View File

@ -15,23 +15,37 @@
*/
package li.strolch.model.query;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public abstract class BooleanSelection<T extends Selection> implements Selection {
public abstract class BooleanSelection implements Selection {
protected List<T> selections;
protected List<Selection> selections;
public BooleanSelection(List<T> selections) {
public BooleanSelection() {
this.selections = new ArrayList<>();
}
public BooleanSelection(List<Selection> selections) {
this.selections = selections;
}
public List<T> getSelections() {
public BooleanSelection(Selection... selections) {
this.selections = Arrays.asList(selections);
}
public List<Selection> getSelections() {
return this.selections;
}
public BooleanSelection with(Selection selection) {
this.selections.add(selection);
return this;
}
public abstract void accept(QueryVisitor visitor);
}

View File

@ -19,14 +19,28 @@ import java.util.List;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public class OrSelection<T extends Selection> extends BooleanSelection<T> {
public class OrSelection extends BooleanSelection {
public OrSelection(List<T> selections) {
public OrSelection() {
super();
}
public OrSelection(List<Selection> selections) {
super(selections);
}
@SafeVarargs
public OrSelection(Selection... selections) {
super(selections);
}
@Override
public OrSelection with(Selection selection) {
super.with(selection);
return this;
}
@Override
public void accept(QueryVisitor visitor) {
visitor.visitOr(this);

View File

@ -52,37 +52,39 @@ public abstract class ParameterSelection implements Selection {
public abstract void accept(ParameterSelectionVisitor visitor);
public static ParameterSelection stringSelection(String bagKey, String paramKey, String value) {
public static StringParameterSelection stringSelection(String bagKey, String paramKey, String value) {
return new StringParameterSelection(bagKey, paramKey, value);
}
public static ParameterSelection integerSelection(String bagKey, String paramKey, int value) {
public static IntegerParameterSelection integerSelection(String bagKey, String paramKey, int value) {
return new IntegerParameterSelection(bagKey, paramKey, value);
}
public static ParameterSelection booleanSelection(String bagKey, String paramKey, boolean value) {
public static BooleanParameterSelection booleanSelection(String bagKey, String paramKey, boolean value) {
return new BooleanParameterSelection(bagKey, paramKey, value);
}
public static ParameterSelection floatSelection(String bagKey, String paramKey, double value) {
public static FloatParameterSelection floatSelection(String bagKey, String paramKey, double value) {
return new FloatParameterSelection(bagKey, paramKey, value);
}
public static ParameterSelection longSelection(String bagKey, String paramKey, long value) {
public static LongParameterSelection longSelection(String bagKey, String paramKey, long value) {
return new LongParameterSelection(bagKey, paramKey, value);
}
public static ParameterSelection dateSelection(String bagKey, String paramKey, Date value) {
public static DateParameterSelection dateSelection(String bagKey, String paramKey, Date value) {
return new DateParameterSelection(bagKey, paramKey, value);
}
public static ParameterSelection stringListSelection(String bagKey, String paramKey, List<String> value) {
public static StringListParameterSelection stringListSelection(String bagKey, String paramKey, List<String> value) {
return new StringListParameterSelection(bagKey, paramKey, value);
}
public static class StringParameterSelection extends ParameterSelection {
private String value;
private boolean contains;
private boolean caseInsensitive;
public StringParameterSelection(String bagKey, String paramKey, String value) {
super(bagKey, paramKey);
@ -93,6 +95,24 @@ public abstract class ParameterSelection implements Selection {
return this.value;
}
public boolean isContains() {
return this.contains;
}
public boolean isCaseInsensitive() {
return this.caseInsensitive;
}
public StringParameterSelection contains(boolean contains) {
this.contains = contains;
return this;
}
public StringParameterSelection caseInsensitive(boolean caseInsensitive) {
this.caseInsensitive = true;
return this;
}
@Override
public void accept(ParameterSelectionVisitor visitor) {
visitor.visit(this);

View File

@ -17,11 +17,10 @@ package li.strolch.model.query;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public interface QueryVisitor {
public <T extends Selection> void visitAnd(AndSelection<T> andSelection);
public void visitAnd(AndSelection andSelection);
public <T extends Selection> void visitOr(OrSelection<T> orSelection);
public void visitOr(OrSelection orSelection);
}

View File

@ -18,7 +18,7 @@ package li.strolch.model.query;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public interface StrolchElementSelectionVisitor extends QueryVisitor{
public interface StrolchElementSelectionVisitor extends QueryVisitor {
public void visit(StrolchTypeNavigation navigation);

View File

@ -31,7 +31,7 @@ public abstract class StrolchQuery<T extends QueryVisitor> {
this.selections = new ArrayList<>();
}
public void addSelection(BooleanSelection<Selection> selection) {
public void addSelection(BooleanSelection selection) {
this.selections.add(selection);
}

View File

@ -44,21 +44,21 @@ public abstract class AbstractToSaxWriterVisitor {
writeStartStrolchElement(tag, isEmpty, element);
if (!isEmpty) {
writeParameterBags(element);
writer.writeEndElement();
this.writer.writeEndElement();
}
}
protected void writeStartStrolchElement(String tag, boolean empty, StrolchElement element)
throws XMLStreamException {
if (empty)
writer.writeEmptyElement(tag);
this.writer.writeEmptyElement(tag);
else
writer.writeStartElement(tag);
this.writer.writeStartElement(tag);
writer.writeAttribute(Tags.ID, element.getId());
this.writer.writeAttribute(Tags.ID, element.getId());
if (!StringHelper.isEmpty(element.getName()))
writer.writeAttribute(Tags.NAME, element.getName());
writer.writeAttribute(Tags.TYPE, element.getType());
this.writer.writeAttribute(Tags.NAME, element.getName());
this.writer.writeAttribute(Tags.TYPE, element.getType());
}
protected void writeParameters(ParameterizedElement element) throws XMLStreamException {
@ -70,13 +70,13 @@ public abstract class AbstractToSaxWriterVisitor {
writeStartStrolchElement(Tags.PARAMETER, true, parameter);
if (!Parameter.INTERPRETATION_NONE.equals(parameter.getInterpretation()))
writer.writeAttribute(Tags.INTERPRETATION, parameter.getInterpretation());
this.writer.writeAttribute(Tags.INTERPRETATION, parameter.getInterpretation());
if (!Parameter.UOM_NONE.equals(parameter.getUom()))
writer.writeAttribute(Tags.UOM, parameter.getUom());
this.writer.writeAttribute(Tags.UOM, parameter.getUom());
if (parameter.isHidden())
writer.writeAttribute(Tags.HIDDEN, Boolean.toString(parameter.isHidden()));
this.writer.writeAttribute(Tags.HIDDEN, Boolean.toString(parameter.isHidden()));
writer.writeAttribute(Tags.VALUE, parameter.getValueAsString());
this.writer.writeAttribute(Tags.VALUE, parameter.getValueAsString());
}
}
@ -89,7 +89,7 @@ public abstract class AbstractToSaxWriterVisitor {
writeStartStrolchElement(Tags.PARAMETER_BAG, isEmpty, parameterBag);
if (!isEmpty) {
writeParameters(parameterBag);
writer.writeEndElement();
this.writer.writeEndElement();
}
}
}

View File

@ -39,7 +39,7 @@ public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implemen
try {
writeElement(Tags.ORDER, order);
} catch (XMLStreamException e) {
String msg = "Failed to write Order {0} due to {1}";
String msg = "Failed to write Order {0} due to {1}"; //$NON-NLS-1$
msg = MessageFormat.format(msg, order.getLocator(), e.getMessage());
throw new StrolchException(msg, e);
}

View File

@ -39,7 +39,7 @@ public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor imple
try {
writeElement(Tags.RESOURCE, resource);
} catch (XMLStreamException e) {
String msg = "Failed to write Resource {0} due to {1}";
String msg = "Failed to write Resource {0} due to {1}"; //$NON-NLS-1$
msg = MessageFormat.format(msg, resource.getLocator(), e.getMessage());
throw new StrolchException(msg, e);
}