/**
 ********************************************************************************
 * Copyright (c) 2020-2021 Robert Bosch GmbH.
 * 
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 * 
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 ********************************************************************************
 */

package org.eclipse.app4mc.slg.linux.transformers;

import org.eclipse.app4mc.transformation.transformers.ISubTransformer;
import org.eclipse.app4mc.transformation.util.OutputBuffer;

import com.google.inject.Inject;

public abstract class LinuxBaseTransformer implements ISubTransformer {

	static final String SRC_TYPE = "C";
	static final String INC_TYPE = "H";

	@Inject private OutputBuffer outputBuffer;

	public boolean isIncFileEmpty(LinuxTranslationUnit tu) {
		return !outputBuffer.bufferExists(INC_TYPE, tu.getIncModulePath());
	}

	public boolean isSrcFileEmpty(LinuxTranslationUnit tu) {
		return !outputBuffer.bufferExists(SRC_TYPE, tu.getSrcModulePath());
	}

	public boolean incAppend(LinuxTranslationUnit tu, String str) {
		return outputBuffer.appendTo(INC_TYPE, tu.getIncModulePath(), str);
	}

	public boolean srcAppend(LinuxTranslationUnit tu, String str) {
		return outputBuffer.appendTo(SRC_TYPE, tu.getSrcModulePath(), str);
	}

}
