/**
 *                                                                            
 * 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 Public License v1.0       
 * which accompanies this distribution, and is available at                  
 * http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
 package org.eclipse.osbp.ide.core.ui.softwarefactory.extender;

import java.util.Map;

import org.eclipse.osbp.ide.core.ui.softwarefactory.extender.ModelExtenderUtils.DataType;
import org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService;

public interface IModelExtenderAdapter {
	String getIdentifier();
	String getFileName();
	String getModelPath(String modelExtension);
	String getPersistenceUnit();
	Map<String, DataType> getColInfo();
	char getCustomDelimiter();
	char getTextQualifier();
	Map<String, String> getAttributeMap();
	void setAttributeMap(Map<String, String> attributeMap);
	void setXtextUtilService(IXtextUtilService xtextUtilService);
	IXtextUtilService getXtextUtilService();
}
