/**
 *                                                                            
 * 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.Map;

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

 public interface IDataMart {
     public enum EType {
        BOOLEAN, BOOLEAN_CHECKBOX, DATE, TIME, TIMESTAMP, FLOAT, DOUBLE, BYTE, SHORT, INTEGER, LONG, STRING, RICHTEXTAREA, BLOPMAPPING, LENUM, HISTUUID, NONE
     }
     public enum AttributeVisibility {
    	 HIDDEN, READONLY
     }
    
	 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 DATAMART_VALID_COLUMN_PREFIX = "__";
	 static final String DATAMART_VALID_COLUMN_POSTFIX = "__VALIDFROM__";
	 static final String DATAMART_CURRENT_COLUMN_PREFIX = "__";
	 static final String DATAMART_CURRENT_COLUMN_POSTFIX = "__CURRENT__";
	 static final String  SQLFILTERNOTHING = "'*'";
	 void setUser(IUser user);
	 IUser getUser();
	 ArrayList<DatamartFilter> getFilters();
	 void renderFilters();
	 Map<String, EType> getIdMap();
	 Map<String, String> getAliasMap();
	 Map<String, EType> getTypesMap();
	 Map<String, String> getTypesProp();
	 Map<String, AttributeVisibility> getHiddenMap();
	 Map<String, DatamartPrimary> getPrimaryList();
	 void computeConditions();
	 void clearCache();
	 String getResultAttribute(String attributeName);
	 String getPrimaryFilterId();
	 boolean contains(final Object key);
}
