/* * Copyright 2013 Robert von Burg <eitch@eitchnet.ch> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package li.strolch.model.query; import java.util.Date; import java.util.List; import li.strolch.utils.StringMatchMode; import li.strolch.utils.collections.DateRange; import li.strolch.utils.dbc.DBC; import li.strolch.utils.iso8601.ISO8601FormatFactory; /** * @author Robert von Burg <eitch@eitchnet.ch> */ public abstract class ParameterSelection implements Selection { private String bagKey; private String paramKey; public ParameterSelection(String bagKey, String paramKey) { this.bagKey = bagKey; this.paramKey = paramKey; } /** * @return the bagKey */ public String getBagKey() { return this.bagKey; } /** * @return the paramKey */ public String getParamKey() { return this.paramKey; } @Override public boolean hasSelection() { return true; } @Override public void accept(QueryVisitor visitor) { accept((ParameterSelectionVisitor) visitor); } @SuppressWarnings("nls") @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, StringMatchMode matchMode) { return new StringParameterSelection(bagKey, paramKey, value, matchMode); } public static IntegerParameterSelection integerSelection(String bagKey, String paramKey, int value) { return new IntegerParameterSelection(bagKey, paramKey, value); } public static BooleanParameterSelection booleanSelection(String bagKey, String paramKey, boolean value) { return new BooleanParameterSelection(bagKey, paramKey, value); } public static FloatParameterSelection floatSelection(String bagKey, String paramKey, double value) { return new FloatParameterSelection(bagKey, paramKey, value); } public static LongParameterSelection longSelection(String bagKey, String paramKey, long value) { return new LongParameterSelection(bagKey, paramKey, value); } public static DateParameterSelection dateSelection(String bagKey, String paramKey, Date value) { return new DateParameterSelection(bagKey, paramKey, value); } public static DurationParameterSelection durationSelection(String bagKey, String paramKey, String valueAsString) { return durationSelection(bagKey, paramKey, ISO8601FormatFactory.getInstance().getDurationFormat().parse(valueAsString)); } public static DurationParameterSelection durationSelection(String bagKey, String paramKey, long value) { return new DurationParameterSelection(bagKey, paramKey, value); } public static DateRangeParameterSelection dateRangeSelection(String bagKey, String paramKey, DateRange dateRange) { return new DateRangeParameterSelection(bagKey, paramKey, dateRange); } public static StringListParameterSelection stringListSelection(String bagKey, String paramKey, List<String> value) { return new StringListParameterSelection(bagKey, paramKey, value); } public static IntegerListParameterSelection integerListSelection(String bagKey, String paramKey, List<Integer> value) { return new IntegerListParameterSelection(bagKey, paramKey, value); } public static FloatListParameterSelection floatListSelection(String bagKey, String paramKey, List<Double> value) { return new FloatListParameterSelection(bagKey, paramKey, value); } public static LongListParameterSelection longListSelection(String bagKey, String paramKey, List<Long> value) { return new LongListParameterSelection(bagKey, paramKey, value); } public static NullParameterSelection nullSelection(String bagKey, String paramKey) { return new NullParameterSelection(bagKey, paramKey); } public static AnyTypeParameterSelection anyTypeSelection(String bagKey, String paramKey, String value, StringMatchMode matchMode) { return new AnyTypeParameterSelection(bagKey, paramKey, value, matchMode); } public static class AnyTypeParameterSelection extends ParameterSelection { private StringMatchMode matchMode; private String value; public AnyTypeParameterSelection(String bagKey, String paramKey, String value, StringMatchMode matchMode) { super(bagKey, paramKey); this.value = value; this.matchMode = matchMode; } public String getValue() { return this.value; } public StringMatchMode getMatchMode() { return this.matchMode; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class NullParameterSelection extends ParameterSelection { public NullParameterSelection(String bagKey, String paramKey) { super(bagKey, paramKey); } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class StringParameterSelection extends ParameterSelection { private StringMatchMode matchMode; private String value; public StringParameterSelection(String bagKey, String paramKey, String value, StringMatchMode matchMode) { super(bagKey, paramKey); this.value = value; this.matchMode = matchMode; } public String getValue() { return this.value; } public StringMatchMode getMatchMode() { return this.matchMode; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class IntegerParameterSelection extends ParameterSelection { private Integer value; public IntegerParameterSelection(String bagKey, String paramKey, Integer value) { super(bagKey, paramKey); this.value = value; } public Integer getValue() { return this.value; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class BooleanParameterSelection extends ParameterSelection { private Boolean value; public BooleanParameterSelection(String bagKey, String paramKey, Boolean value) { super(bagKey, paramKey); this.value = value; } public Boolean getValue() { return this.value; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class LongParameterSelection extends ParameterSelection { private Long value; public LongParameterSelection(String bagKey, String paramKey, Long value) { super(bagKey, paramKey); this.value = value; } public Long getValue() { return this.value; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class FloatParameterSelection extends ParameterSelection { private Double value; public FloatParameterSelection(String bagKey, String paramKey, Double value) { super(bagKey, paramKey); this.value = value; } public Double getValue() { return this.value; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class DateParameterSelection extends ParameterSelection { private Date value; public DateParameterSelection(String bagKey, String paramKey, Date value) { super(bagKey, paramKey); this.value = value; } public Date getValue() { return this.value; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class DateRangeParameterSelection extends ParameterSelection { private DateRange dateRange; public DateRangeParameterSelection(String bagKey, String paramKey, DateRange dateRange) { super(bagKey, paramKey); DBC.PRE.assertFalse("dateRange must be set!", dateRange == null); //$NON-NLS-1$ this.dateRange = dateRange; } public DateRange getDateRange() { return this.dateRange; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class DurationParameterSelection extends ParameterSelection { private Long value; public DurationParameterSelection(String bagKey, String paramKey, Long value) { super(bagKey, paramKey); this.value = value; } public Long getValue() { return this.value; } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static abstract class AbstractListParameterSelection<T> extends ParameterSelection { private List<T> value; public AbstractListParameterSelection(String bagKey, String paramKey, List<T> value) { super(bagKey, paramKey); this.value = value; } public List<T> getValue() { return this.value; } @Override public abstract void accept(ParameterSelectionVisitor visitor); } public static class StringListParameterSelection extends AbstractListParameterSelection<String> { public StringListParameterSelection(String bagKey, String paramKey, List<String> value) { super(bagKey, paramKey, value); } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class IntegerListParameterSelection extends AbstractListParameterSelection<Integer> { public IntegerListParameterSelection(String bagKey, String paramKey, List<Integer> value) { super(bagKey, paramKey, value); } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class FloatListParameterSelection extends AbstractListParameterSelection<Double> { public FloatListParameterSelection(String bagKey, String paramKey, List<Double> value) { super(bagKey, paramKey, value); } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } public static class LongListParameterSelection extends AbstractListParameterSelection<Long> { public LongListParameterSelection(String bagKey, String paramKey, List<Long> value) { super(bagKey, paramKey, value); } @Override public void accept(ParameterSelectionVisitor visitor) { visitor.visit(this); } } }