/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * All rights reserved. This program and the accompanying materials           
 * are made available under the terms of the Eclipse  License v1.0       
 * which accompanies this distribution, and is available at                  
 * https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 * SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.ui.api.datamart;

import java.util.ArrayList;
import java.util.HashMap;

import org.eclipse.osbp.ui.api.user.IUser;

 public interface IDataMart {
     enum EType {
        BOOLEAN, BOOLEAN_CHECKBOX, DATE, TIME, TIMESTAMP, FLOAT, DOUBLE, BYTE, SHORT, INTEGER, LONG, STRING, RICHTEXTAREA, BLOPMAPPING, LENUM, NONE
     }
    
	 static final String DATAMART_CLASS_POSTFIX = "Datamart";
	 static final String DATAMART_SERVICE_POSTFIX = "DatamartService";
	 static final String DATAMART_CONTAINER_POSTFIX = "DatamartContainer";
	 static final String DATAMART_ID_COLUMN_PREFIX = "__";
	 static final String DATAMART_ID_COLUMN_POSTFIX = "__ID__";
	 static final String  SQLFILTERNOTHING = "'*'";
	 void setUser(IUser user);
	 IUser getUser();
	 ArrayList<DatamartFilter> getFilters();
	 void renderFilters();
	 HashMap<String, EType> getIdMap();
	 HashMap<String, EType> getTypesMap();
	 HashMap<String, String> getTypesProp();
	 ArrayList<DatamartPrimary<?>> getPrimaryList();
	 void computeConditions();
	 void clearCache();
	 String getResultAttribute(String attributeName);
	 String getPrimaryFilterId();
}
