/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.dashbuilder.dataprovider.sql.model; import java.util.Collection; import java.util.ArrayList; import org.dashbuilder.dataset.ColumnType; import org.dashbuilder.dataset.filter.CoreFunctionType; import org.dashbuilder.dataset.filter.LogicalExprType; import org.dashbuilder.dataset.group.AggregateFunctionType; import org.dashbuilder.dataset.sort.SortOrder; public class Column { protected String name; protected String alias; protected ColumnType type; protected int length; public Column(String name) { this.name = name; } public String getName() { return name; } public ColumnType getType() { return type; } public int getLength() { return length; } public String getAlias() { return alias; } public void setName(String name) { this.name = name; } public void setAlias(String alias) { this.alias = alias; } public void setType(ColumnType type) { this.type = type; } public void setLength(int length) { this.length = length; } // Column modifier methods public Column as(String alias) { setAlias(alias); return this; } public Column lower() { return new FunctionColumn(FunctionColumn.LOWER, this); } public SortColumn asc() { return new SortColumn(this, SortOrder.ASCENDING); } public SortColumn desc() { return new SortColumn(this, SortOrder.DESCENDING); } public Column function(AggregateFunctionType functionType) { SimpleColumn simpleColumn = new SimpleColumn(name, type, length); simpleColumn.setFunctionType(functionType); return simpleColumn; } // Condition factory methods public Condition isNull() { return new CoreCondition(this, CoreFunctionType.IS_NULL); } public Condition notNull() { return new CoreCondition(this, CoreFunctionType.NOT_NULL); } public Condition equalsTo(Object param) { return new CoreCondition(this, CoreFunctionType.EQUALS_TO, param); } public Condition in(Collection params) { Collection<Condition> conditions = new ArrayList<Condition>(); for (Object param : params) { conditions.add(equalsTo(param)); } return new LogicalCondition(LogicalExprType.OR, conditions); } public Condition inSql(Collection params) { return new CoreCondition(this, CoreFunctionType.IN, params); } public Condition notInSql(Collection params) { return new CoreCondition(this, CoreFunctionType.NOT_IN, params); } public Condition notEquals(Object param) { return new CoreCondition(this, CoreFunctionType.NOT_EQUALS_TO, param); } public Condition like(String param) { return new CoreCondition(this, CoreFunctionType.LIKE_TO, param); } public Condition greaterThan(Object param) { return new CoreCondition(this, CoreFunctionType.GREATER_THAN, param); } public Condition greaterOrEquals(Object param) { return new CoreCondition(this, CoreFunctionType.GREATER_OR_EQUALS_TO, param); } public Condition lowerThan(Object param) { return new CoreCondition(this, CoreFunctionType.LOWER_THAN, param); } public Condition lowerOrEquals(Object param) { return new CoreCondition(this, CoreFunctionType.LOWER_OR_EQUALS_TO, param); } public Condition between(Object from, Object to) { return new CoreCondition(this, CoreFunctionType.BETWEEN, from, to); } // Date functions public Column year() { return new FunctionColumn(FunctionColumn.YEAR, this); } public Column month() { return new FunctionColumn(FunctionColumn.MONTH, this); } public Column day() { return new FunctionColumn(FunctionColumn.DAY, this); } public Column hour() { return new FunctionColumn(FunctionColumn.HOUR, this); } public Column minute() { return new FunctionColumn(FunctionColumn.MINUTE, this); } public Column second() { return new FunctionColumn(FunctionColumn.SECOND, this); } }