001/*
002 * Copyright (C) Photon Vision.
003 *
004 * This program is free software: you can redistribute it and/or modify
005 * it under the terms of the GNU General Public License as published by
006 * the Free Software Foundation, either version 3 of the License, or
007 * (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
016 */
017
018package org.photonvision.common.util.file;
019
020import java.io.File;
021import java.net.URISyntaxException;
022
023public class ProgramDirectoryUtilities {
024    private static String getJarName() {
025        return new File(
026                        ProgramDirectoryUtilities.class
027                                .getProtectionDomain()
028                                .getCodeSource()
029                                .getLocation()
030                                .getPath())
031                .getName();
032    }
033
034    private static boolean runningFromJAR() {
035        String jarName = getJarName();
036        return jarName.contains(".jar");
037    }
038
039    public static String getProgramDirectory() {
040        if (runningFromJAR()) {
041            return getCurrentJARDirectory();
042        } else {
043            return System.getProperty("user.dir");
044        }
045    }
046
047    private static String getCurrentJARDirectory() {
048        try {
049            return new File(
050                            ProgramDirectoryUtilities.class
051                                    .getProtectionDomain()
052                                    .getCodeSource()
053                                    .getLocation()
054                                    .toURI()
055                                    .getPath())
056                    .getParent();
057        } catch (URISyntaxException exception) {
058            exception.printStackTrace();
059        }
060
061        return null;
062    }
063}