org.omegat.core.team2.TeamSettings.java Source code

Java tutorial

Introduction

Here is the source code for org.omegat.core.team2.TeamSettings.java

Source

/**************************************************************************
 OmegaT - Computer Assisted Translation (CAT) tool 
      with fuzzy matching, translation memory, keyword search, 
      glossaries, and translation leveraging into updated projects.
    
 Copyright (C) 2016 Alex Buloichik
           Home page: http://www.omegat.org/
           Support center: http://groups.yahoo.com/group/OmegaT/
    
 This file is part of OmegaT.
    
 OmegaT 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, either version 3 of the License, or
 (at your option) any later version.
    
 OmegaT 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 for more details.
    
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 **************************************************************************/

package org.omegat.core.team2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.omegat.util.StaticUtils;

/**
 * Class for read/save repository-specific settings in the ~/.omegat/ directory.
 * 
 * @author Alex Buloichik (alex73mail@gmail.com)
 */
public class TeamSettings {
    private static File configFile;

    private synchronized static File getConfigFile() {
        if (configFile == null) {
            configFile = new File(StaticUtils.getConfigDir(), "repositories.properties");
        }
        return configFile;
    }

    public static synchronized Set<Object> listKeys() {
        try {
            Properties p = new Properties();
            if (getConfigFile().exists()) {
                FileInputStream in = new FileInputStream(getConfigFile());
                try {
                    p.load(in);
                } finally {
                    in.close();
                }
            }
            return p.keySet();
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * Get setting.
     */
    public static synchronized String get(String key) {
        try {
            Properties p = new Properties();
            if (getConfigFile().exists()) {
                FileInputStream in = new FileInputStream(getConfigFile());
                try {
                    p.load(in);
                } finally {
                    in.close();
                }
            }
            return p.getProperty(key);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * Update setting.
     */
    public static synchronized void set(String key, String newValue) {
        try {
            Properties p = new Properties();
            File f = getConfigFile();
            File fNew = new File(getConfigFile().getAbsolutePath() + ".new");
            if (f.exists()) {
                FileInputStream in = new FileInputStream(f);
                try {
                    p.load(in);
                } finally {
                    in.close();
                }
            } else {
                f.getParentFile().mkdirs();
            }
            if (newValue != null) {
                p.setProperty(key, newValue);
            } else {
                p.remove(key);
            }
            FileOutputStream out = new FileOutputStream(fNew);
            try {
                p.store(out, null);
            } finally {
                out.close();
            }
            f.delete();
            FileUtils.moveFile(fNew, f);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }
}