/*
* Copyright 2010 Pablo Arrighi, Alex Concha, Miguel Lezama for version 1.
* Copyright 2013 Pablo Arrighi, Miguel Lezama, Kevin Mazet for version 2.
*
* This file is part of GOOL.
*
* GOOL is free software: you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation, version 3.
*
* GOOL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License version 3 for more details.
*
* You should have received a copy of the GNU General Public License along with GOOL,
* in the file COPYING.txt. If not, see <http://www.gnu.org/licenses/>.
*/
package gool.generator.objc;
import gool.ast.core.ClassDef;
import gool.generator.common.CodePrinter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
/**
* Provides the basic functionality to generate Objective C code from a list of
* GOOL classes.
*/
public class ObjcCodePrinter extends CodePrinter {
private static final String TEMPLATE_DIR = "gool/generator/objc/templates/";
public ObjcCodePrinter(File outputDir) {
super(new ObjcGenerator(), outputDir);
}
@Override
public String getTemplateDir() {
return TEMPLATE_DIR;
}
@Override
public String getFileName(String className) {
return className + ".m";
}
@Override
public List<File> print(ClassDef pclass) throws FileNotFoundException {
if (pclass.getParentClass() != null) {
pclass.setParentClass(pclass.getParentClass());
}
String headerFile = processTemplate("header.vm", pclass);
PrintWriter writer;
File dir = new File(getOutputDir().getAbsolutePath(),
StringUtils.replace(pclass.getPackageName(), ".",
File.separator));
dir.mkdirs();
File classFile = new File(dir, pclass.getName() + ".h");
writer = new PrintWriter(classFile);
writer.println(headerFile);
writer.close();
if (pclass.isEnum() || pclass.isInterface()) {
List<File> r = new ArrayList<File>();
r.add(classFile);
return r;
} else {
return super.print(pclass);
}
}
}