All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.fbk.twm.utils.BaseFolder Maven / Gradle / Ivy

The newest version!
package eu.fbk.twm.utils;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.OptionBuilder;
import org.apache.log4j.Logger;

import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created with IntelliJ IDEA.
 * User: alessio
 * Date: 06/02/14
 * Time: 17:06
 * To change this template use File | Settings | File Templates.
 */

public abstract class BaseFolder {

	static Logger logger = Logger.getLogger(BaseFolder.class.getName());
	protected HashMap folders = new HashMap();
	protected HashMap files = new HashMap();

	protected static final Pattern langPattern = Pattern.compile("^\\w{2}$");
	protected static final Pattern wikiVersionPattern = Pattern.compile("^([0-9]{8})/?$");

	private HashSet filesToCheck = new HashSet<>();
	private HashSet foldersToCheck = new HashSet<>();


	protected void addMandatoryFile(String fileName) {
		filesToCheck.add(fileName);
	}

	protected void addMandatoryFolder(String folderName) {
		foldersToCheck.add(folderName);
	}

	protected static void exitOnMissingFile(String fileName) {
		File file = new File(fileName);
		if (!file.exists()) {
			logger.error("File " + fileName + " does not exist");
			System.exit(1);
		}
	}

	protected static void exitOnMissingFolder(String folder) {
		exitOnMissingFolder(folder, false);
	}
	
	protected static void exitOnMissingFolder(String folder, boolean create) {
//		exitOnMissingFile(folder);
		File folderFile = new File(folder);
		if (!folderFile.exists()) {
			if (create) {
				logger.info("File " + folder + " does not exist, creating it");
				if (!folderFile.mkdirs()) {
					logger.error("Unable to create folder " + folder);
					System.exit(1);
				}
			}
			else {
				logger.error("File " + folder + " does not exist");
				System.exit(1);
			}
		}
		if (!folderFile.isDirectory()) {
			logger.error(folder + " is not a directory");
			System.exit(1);
		}
	}

	protected void exitOnMissingStuff(boolean createFolder) {
		boolean checkAllFolders = foldersToCheck.size() == 0;
		boolean checkAllFiles = filesToCheck.size() == 0;

		for (String key : folders.keySet()) {
			String folder = folders.get(key);
			if (checkAllFolders || foldersToCheck.contains(key)) {
				exitOnMissingFolder(folder, createFolder);
			}
		}
		for (String key : files.keySet()) {
			String file = files.get(key);
			if (checkAllFiles || filesToCheck.contains(key)) {
				exitOnMissingFile(file);
			}
		}
	}

	protected void extendCommandLine(CommandLineWithLogger commandLineWithLogger) {
		for (String folderIndex : folders.keySet()) {
			
			// Data folder -- mandatory!
			if (folderIndex.equals("data")) {
				commandLineWithLogger.addOption(OptionBuilder.isRequired().withDescription(String.format("%s folder", folderIndex)).hasArg().withArgName("folder").withLongOpt(String.format("%s-dir", folderIndex)).create());
			}
			else {
				commandLineWithLogger.addOption(OptionBuilder.withDescription(String.format("%s folder", folderIndex)).hasArg().withArgName("folder").withLongOpt(String.format("%s-dir", folderIndex)).create());
			}
		}
		for (String fileIndex : files.keySet()) {
			commandLineWithLogger.addOption(OptionBuilder.withDescription(String.format("%s file", fileIndex)).hasArg().withArgName("file").withLongOpt(String.format("%s-file", fileIndex)).create());
		}
	}

	protected Map> getPresentVersions() {
		return getPresentVersions(null);
	}

	protected Map> getPresentVersions(String[] givenLanguages) {
		Map> alreadyPresentVersions = new HashMap>();

		File[] listOfVersions;
		File[] listOfLangs;

		for (String langName : givenLanguages) {
			alreadyPresentVersions.put(langName, new TreeSet(Collections.reverseOrder()));
		}

		File outputFolderFile = new File(folders.get("base"));
		listOfLangs = outputFolderFile.listFiles();
		if (listOfLangs != null) {
			for (File f : listOfLangs) {
				if (!f.isDirectory()) {
					continue;
				}
				Matcher langMatcher = langPattern.matcher(f.getName());
				if (langMatcher.matches()) {
					String langName = f.getName();
					if (givenLanguages != null &&
							!Arrays.asList(givenLanguages).contains(langName)) {
						continue;
					}
					alreadyPresentVersions.put(langName, new TreeSet(Collections.reverseOrder()));
					listOfVersions = f.listFiles();
					if (listOfVersions != null) {
						for (File version : listOfVersions) {
							if (!version.isDirectory()) {
								continue;
							}
							String versionName = version.getName();
							Matcher versMatcher = wikiVersionPattern.matcher(versionName);
							if (versMatcher.matches()) {
								alreadyPresentVersions.get(langName).add(Integer.parseInt(versionName));
							}
						}
					}
				}
			}
		}

		return alreadyPresentVersions;
	}

	protected void init() {
		init(null, null);
	}

	protected void init(String dataFolder) {
		init(null, dataFolder);
	}

	protected void init(CommandLine commandLine) {
		init(commandLine, null);
	}

	protected void init(CommandLine commandLine, String dataFolder) {

		String option = "data-folder";
		String folderIndex = "data";
		if (commandLine != null && commandLine.hasOption(option)) {
			folders.put(folderIndex, commandLine.getOptionValue(option));
			if (!folders.get(folderIndex).endsWith(File.separator)) {
				folders.put(folderIndex, folders.get(folderIndex) + File.separator);
			}
		}

		// Set default
		if (folders.get(folderIndex) == null) {
			folders.put(folderIndex, dataFolder);
			if (!folders.get(folderIndex).endsWith(File.separator)) {
				folders.put(folderIndex, folders.get(folderIndex) + File.separator);
			}
		}
		else {
			dataFolder = folders.get(folderIndex);
		}

		folders.put("lsa", dataFolder + "/models/lsa/");
		folders.put("base", dataFolder + "/models/wikipedia/");
		folders.put("dump", dataFolder + "/corpora/wikipedia/");
		folders.put("bncf", dataFolder + "/corpora/bncf/");
		folders.put("cl", dataFolder + "/models/wikidata/");
		folders.put("res", dataFolder + "/resources/");
		folders.put("topic", dataFolder + "/models/topics/");
		folders.put("namnom", dataFolder + "/models/namnom/");
		folders.put("airpedia", dataFolder + "/models/airpedia/");

		files.put("ontology", dataFolder + "/corpora/dbpedia/dbpedia_3.9.owl");

		for (String thisIndex : folders.keySet()) {
			option = String.format("%s-dir", thisIndex);
			if (commandLine != null && commandLine.hasOption(option)) {
				folders.put(thisIndex, commandLine.getOptionValue(option));
			}

			if (!folders.get(thisIndex).endsWith(File.separator)) {
				folders.put(thisIndex, folders.get(thisIndex) + File.separator);
			}
		}
		for (String fileIndex : files.keySet()) {
			option = String.format("%s-file", fileIndex);
			if (commandLine != null && commandLine.hasOption(option)) {
				folders.put(fileIndex, commandLine.getOptionValue(option));
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy