/* * ****************************************************************************** * MontiCore Language Workbench * Copyright (c) 2016, MontiCore, All rights reserved. * * This project is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this project. If not, see <http://www.gnu.org/licenses/>. * ****************************************************************************** */ package de.monticore.templateclassgenerator; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.commons.io.FileUtils; import de.monticore.templateclassgenerator.codegen.TemplateClassGeneratorConstants; import de.se_rwth.commons.logging.Log; /** * Class that finds all models with a given file extension in a modelpath. * * @author Jerome Pfeiffer */ public class Modelfinder { /** * Finds all models with a certain {@code fileExtension} in the given * {@code modelPath} * * @param modelPath * @param fileExtension * @return List of all found models */ public static List<String> getModelsInModelPath(File modelPath, String fileExtension) { List<String> models = new ArrayList<String>(); String[] extension = { fileExtension }; Collection<File> files = FileUtils.listFiles(modelPath, extension, true); for (File f : files) { String model = getDotSeperatedFQNModelName(modelPath.getPath(), f.getPath(), fileExtension); if (model.startsWith(TemplateClassGeneratorConstants.TEMPLATE_CLASSES_SETUP_PACKAGE)) { Log.error("0xA700 ATemplate '" + model + "' must not lay in topfolder '" + TemplateClassGeneratorConstants.TEMPLATE_CLASSES_SETUP_PACKAGE + "'"); } else { Log.info("Found model: " + model, "Modelfinder"); models.add(model); } } return models; } private static String getDotSeperatedFQNModelName(String FQNModelPath, String FQNFilePath, String fileExtension) { if (FQNFilePath.contains(FQNModelPath)) { String fqnModelName = FQNFilePath.substring(FQNModelPath.length() + 1); fqnModelName = fqnModelName.replace("." + fileExtension, ""); if (fqnModelName.contains("\\")) { fqnModelName = fqnModelName.replaceAll("\\\\", "."); } else if (fqnModelName.contains("/")) { fqnModelName = fqnModelName.replaceAll("/", "."); } return fqnModelName; } return FQNFilePath; } }