// Path: SVNToolBox/src/main/java/zielu/svntoolbox/config/SvnToolBoxAppState.java
// @State(
//     name = "SvnToolBoxAppConfig",
//     storages = @Storage("SvnToolBox.xml")
// )
// public class SvnToolBoxAppState implements PersistentStateComponent<SvnToolBoxAppState> {
//     public boolean customRegularColor;
//     public int regularR = 159;
//     public int regularG = 107;
//     public int regularB = 0;
// 
//     public boolean customDarkColor;
//     public int darkR = 159;
//     public int darkG = 107;
//     public int darkB = 0;
// 
//     private String fileCsv;
// 
//     @Transient
//     private static final Color defaultRegularColor = new Color(159, 107, 0);
// 
//     @Transient
//     private static final Color defaultDarkColor = new Color(159, 107, 0);
// 
//     private static final SvnToolBoxAppState EMPTY = new SvnToolBoxAppState();
// 
//     public static SvnToolBoxAppState getInstance() {
//         return ServiceManager.getService(SvnToolBoxAppState.class);
//     }
// 
//     public String getCsvFile() {
//         return Strings.nullToEmpty(fileCsv);
//     }
// 
//     public void setCsvFile(String fileCsv) {
//         this.fileCsv = fileCsv;
//     }
// 
//     public boolean checkCsvFileChanged(String csvFile) {
//         String currentValue = getCsvFile();
//         return !currentValue.equalsIgnoreCase(csvFile);
//     }
// 
//     @Transient
//     public Color getCurrentRegularDecorationColor() {
//         if (customRegularColor) {
//             return getRegularDecorationColor();
//         } else {
//             return defaultRegularColor;
//         }
//     }
// 
//     @Transient
//     public Color getRegularDecorationColor() {
//         return new Color(regularR, regularG, regularB);
//     }
// 
//     @Transient
//     public Color getCurrentDarkDecorationColor() {
//         if (customDarkColor) {
//             return getDarkDecorationColor();
//         } else {
//             return defaultDarkColor;
//         }
//     }
// 
//     @Transient
//     public Color getDarkDecorationColor() {
//         return new Color(darkR, darkG, darkB);
//     }
// 
//     private boolean isChanged(Color newColor, int r, int g, int b) {
//         return newColor.getRed() != r
//                 || newColor.getGreen() != g
//                 || newColor.getBlue() != b;
//     }
// 
//     public void setRegularDecorationColor(boolean enabled, Color color) {
//         customRegularColor = enabled;
//         if (enabled) {
//             regularR = color.getRed();
//             regularG = color.getGreen();
//             regularB = color.getBlue();
//         }
//     }
// 
//     public boolean checkRegularDecorationChanged(boolean enabled, Color color) {
//         boolean changed = false;
//         if (customRegularColor != enabled) {
//             changed = true;
//         }
//         if (isChanged(color, regularR, regularG, regularB)) {
//             changed = true;
//         }
//         return changed;
//     }
// 
//     public void setDarkDecorationColor(boolean enabled, Color color) {
//         customDarkColor = enabled;
//         if (enabled) {
//             darkR = color.getRed();
//             darkG = color.getGreen();
//             darkB = color.getBlue();
//         }
//     }
// 
//     public boolean checkDarkDecorationChanged(boolean enabled, Color color) {
//         boolean changed = false;
//         if (customDarkColor != enabled) {
//             changed = true;
//         }
//         if (isChanged(color, darkR, darkG, darkB)) {
//             changed = true;
//         }
//         return changed;
//     }
// 
//     public void fireSettingsChanged() {
//         ApplicationManager.getApplication().getMessageBus().
//                 syncPublisher(DecorationSettingsNotifier.TOGGLE_TOPIC).settingsChanged();
//     }
// 
//     @Transient
//     public JBColor getProjectViewDecorationColor() {
//         return new JBColor(getCurrentRegularDecorationColor(), getCurrentDarkDecorationColor());
//     }
// 
//     @Nullable
//     @Override
//     public SvnToolBoxAppState getState() {
//         return this;
//     }
// 
//     @Override
//     public void loadState(SvnToolBoxAppState state) {
//         XmlSerializerUtil.copyBean(state, this);
//     }
// }


import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.collect.Maps;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.diagnostic.Logger;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import zielu.svntoolbox.config.SvnToolBoxAppState;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
            log.error("Failed to load csv file: " + csvFile, e);
        }
        return Collections.emptyMap();
    }

    private Optional<String> loadFromMappings(String owner, String csvFile) {
        lock.writeLock().lock();
        File file = new File(csvFile);
        if (file.exists()) {
            Map<String, String> mappings = loadFile(file);
            ownerMapping.clear();
            ownerMapping.putAll(mappings);
            lock.readLock().lock();
            lock.writeLock().unlock();
            try {
              return Optional.ofNullable(ownerMapping.get(owner.toLowerCase()));
            } finally {
                lock.readLock().unlock();
            }
        } else if (ownerMapping.size() > 0) {
            ownerMapping.clear();
        }
        lock.writeLock().unlock();
      return Optional.empty();
    }

    public String getOwner(String owner) {
        if (StringUtils.isBlank(owner)) {
            return StringUtils.EMPTY;
        } else {
// Path: SVNToolBox/src/main/java/zielu/svntoolbox/config/SvnToolBoxAppState.java
// @State(
//     name = "SvnToolBoxAppConfig",
//     storages = @Storage("SvnToolBox.xml")
// )
// public class SvnToolBoxAppState implements PersistentStateComponent<SvnToolBoxAppState> {
//     public boolean customRegularColor;
//     public int regularR = 159;
//     public int regularG = 107;
//     public int regularB = 0;
// 
//     public boolean customDarkColor;
//     public int darkR = 159;
//     public int darkG = 107;
//     public int darkB = 0;
// 
//     private String fileCsv;
// 
//     @Transient
//     private static final Color defaultRegularColor = new Color(159, 107, 0);
// 
//     @Transient
//     private static final Color defaultDarkColor = new Color(159, 107, 0);
// 
//     private static final SvnToolBoxAppState EMPTY = new SvnToolBoxAppState();
// 
//     public static SvnToolBoxAppState getInstance() {
//         return ServiceManager.getService(SvnToolBoxAppState.class);
//     }
// 
//     public String getCsvFile() {
//         return Strings.nullToEmpty(fileCsv);
//     }
// 
//     public void setCsvFile(String fileCsv) {
//         this.fileCsv = fileCsv;
//     }
// 
//     public boolean checkCsvFileChanged(String csvFile) {
//         String currentValue = getCsvFile();
//         return !currentValue.equalsIgnoreCase(csvFile);
//     }
// 
//     @Transient
//     public Color getCurrentRegularDecorationColor() {
//         if (customRegularColor) {
//             return getRegularDecorationColor();
//         } else {
//             return defaultRegularColor;
//         }
//     }
// 
//     @Transient
//     public Color getRegularDecorationColor() {
//         return new Color(regularR, regularG, regularB);
//     }
// 
//     @Transient
//     public Color getCurrentDarkDecorationColor() {
//         if (customDarkColor) {
//             return getDarkDecorationColor();
//         } else {
//             return defaultDarkColor;
//         }
//     }
// 
//     @Transient
//     public Color getDarkDecorationColor() {
//         return new Color(darkR, darkG, darkB);
//     }
// 
//     private boolean isChanged(Color newColor, int r, int g, int b) {
//         return newColor.getRed() != r
//                 || newColor.getGreen() != g
//                 || newColor.getBlue() != b;
//     }
// 
//     public void setRegularDecorationColor(boolean enabled, Color color) {
//         customRegularColor = enabled;
//         if (enabled) {
//             regularR = color.getRed();
//             regularG = color.getGreen();
//             regularB = color.getBlue();
//         }
//     }
// 
//     public boolean checkRegularDecorationChanged(boolean enabled, Color color) {
//         boolean changed = false;
//         if (customRegularColor != enabled) {
//             changed = true;
//         }
//         if (isChanged(color, regularR, regularG, regularB)) {
//             changed = true;
//         }
//         return changed;
//     }
// 
//     public void setDarkDecorationColor(boolean enabled, Color color) {
//         customDarkColor = enabled;
//         if (enabled) {
//             darkR = color.getRed();
//             darkG = color.getGreen();
//             darkB = color.getBlue();
//         }
//     }
// 
//     public boolean checkDarkDecorationChanged(boolean enabled, Color color) {
//         boolean changed = false;
//         if (customDarkColor != enabled) {
//             changed = true;
//         }
//         if (isChanged(color, darkR, darkG, darkB)) {
//             changed = true;
//         }
//         return changed;
//     }
// 
//     public void fireSettingsChanged() {
//         ApplicationManager.getApplication().getMessageBus().
//                 syncPublisher(DecorationSettingsNotifier.TOGGLE_TOPIC).settingsChanged();
//     }
// 
//     @Transient
//     public JBColor getProjectViewDecorationColor() {
//         return new JBColor(getCurrentRegularDecorationColor(), getCurrentDarkDecorationColor());
//     }
// 
//     @Nullable
//     @Override
//     public SvnToolBoxAppState getState() {
//         return this;
//     }
// 
//     @Override
//     public void loadState(SvnToolBoxAppState state) {
//         XmlSerializerUtil.copyBean(state, this);
//     }
// }


// Path: SVNToolBox/src/main/java/zielu/svntoolbox/lockinfo/SvnLockOwnerComponent.java
import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.collect.Maps;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.diagnostic.Logger;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import zielu.svntoolbox.config.SvnToolBoxAppState;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

            log.error("Failed to load csv file: " + csvFile, e);
        }
        return Collections.emptyMap();
    }

    private Optional<String> loadFromMappings(String owner, String csvFile) {
        lock.writeLock().lock();
        File file = new File(csvFile);
        if (file.exists()) {
            Map<String, String> mappings = loadFile(file);
            ownerMapping.clear();
            ownerMapping.putAll(mappings);
            lock.readLock().lock();
            lock.writeLock().unlock();
            try {
              return Optional.ofNullable(ownerMapping.get(owner.toLowerCase()));
            } finally {
                lock.readLock().unlock();
            }
        } else if (ownerMapping.size() > 0) {
            ownerMapping.clear();
        }
        lock.writeLock().unlock();
      return Optional.empty();
    }

    public String getOwner(String owner) {
        if (StringUtils.isBlank(owner)) {
            return StringUtils.EMPTY;
        } else {
            String csvFile = SvnToolBoxAppState.getInstance().getCsvFile();