package org.eclipse.osbp.ui.api.datamart;

import java.util.Locale;
import java.util.Map;

import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import org.eclipse.osbp.ui.api.user.IUser;

import com.vaadin.data.Property.ValueChangeListener;

public interface IDatamartFilterGenerator {
	void setDslMetadataService(IDSLMetadataService dslMetadataService);

	boolean createFilter(IDataMart datamart, IUser user,
			ValueChangeListener filterChangeListener,
			IViewLayoutManager layoutManager);

	boolean createFilter(IDataMart datamart, IUser user,
			ValueChangeListener filterChangeListener,
			IViewLayoutManager layoutManager, boolean showCaption);

	void setId(String idProperty, String id);

	void resetId();

	Map<String, IDatamartSelectable> getSelectors();

	boolean isCube();

	void setCube(boolean cube);

	void resetItem(String filter);

	Map<String, String> getFilter(boolean isCube);

	void setLocale(Locale locale);

	void selectItem(String filter, String selection);

	void updateFilter(IDataMart datamart, IUser user,
			ValueChangeListener filterChangeListener);

}
