/*
* Copyright 2014 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.dataset.def;
import org.dashbuilder.dataset.ColumnType;
/**
* Interface for the assembly of a DataSetDef instance in a friendly manner.
*
* <pre>
* DataSetDef providerSettings = DataSetDefFactory.newSQLDataSetDef()
* .uuid("all_employees")
* .datasource("jndi/mydatasource")
* .query("SELECT * FROM employee")
* .label("id")
* .build();
* </pre>
*
* @see DataSetDef
*/
public interface DataSetDefBuilder<T> {
/**
* Set the DataSetDef UUID.
*
* @param uuid The UUID of the DataSetDef that is being assembled.
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T uuid(String uuid);
/**
* Set the DataSetDef name.
*
* @param name The name of the DataSetDef that is being assembled.
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T name(String name);
/**
* @return The DataSetDef instance that has been configured.
* @see DataSetDef
*/
DataSetDef buildDef();
// Push settings
/**
* Enable the ability to push remote data sets from server.
*
* @param pushMaxSize The maximum size (in kbytes) a data set may have in order to be pushed to clients.
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T pushOn(int pushMaxSize);
/**
* Disable the ability to push remote data sets from server.
*
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T pushOff();
// Cache settings
/**
* Enables the cache for this data set
*
* @param maxRowsInCache Max. rows the cache is able to handle. For higher values the cache is automatically disabled.
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T cacheOn(int maxRowsInCache);
/**
* Disables the cache
*
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T cacheOff();
// Refresh settings
/**
* Turns on the data set refresh mechanism. Every time the refresh time is met the data set will be forced to refresh.
* Any cache on the data set will be considered stale from that time on.
*
* @param refreshTime The amount of time between refresh intervals {@link org.dashbuilder.dataset.date.TimeAmount}
* @param refreshAlways If false then the refresh will be only performed when the underlying data provider determines
* that the data set has become stale. Otherwise the data set is always refreshed.
* data set is outdated. This can be very useful to avoid refreshing unnecessarily.
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T refreshOn(String refreshTime, boolean refreshAlways);
/**
* Turns of the data set refresh mechanism.
*
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T refreshOff();
// Data set structure settings
/**
* Add an empty column of type label.
*/
T label(String columnId);
/**
* Add an empty column of type text.
*/
T text(String columnId);
/**
* Add an empty column of numeric type.
*
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T number(String columnId);
/**
* Add an empty column of type date.
*
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T date(String columnId);
/**
* Add an empty column of the specified type.
*
* @return The DataSetDefBuilder instance that is being used to configure a DataSetDef.
*/
T column(String columnId, ColumnType type);
}