package com.limegroup.gnutella.library; import java.io.File; import java.util.Iterator; import java.util.Set; import org.limewire.setting.AbstractSettingsGroup; import org.limewire.setting.SettingsGroupManager; import org.limewire.setting.evt.SettingsGroupEvent.EventType; /** * A container of LibraryData. */ @Deprecated @SuppressWarnings("deprecation") final class OldLibraryData extends AbstractSettingsGroup { /** * The Container data, storing all the information. */ private final Container DATA = new Container("library.dat"); /** * The directories not to share. */ public final Set<File> DIRECTORIES_NOT_TO_SHARE = DATA.getSet("DIRECTORIES_NOT_TO_SHARE"); /** * Sensitive directories that are explicitly allowed to be shared. */ public final Set<File> SENSITIVE_DIRECTORIES_VALIDATED = DATA.getSet("SENSITIVE_DIRECTORIES_VALIDATED"); /** * Sensitive directories that are explicitly not allowed to be shared. */ public final Set<File> SENSITIVE_DIRECTORIES_NOT_TO_SHARE = DATA.getSet("SENSITIVE_DIRECTORIES_NOT_TO_SHARE"); /** * Individual files that should be shared despite being located outside * of any shared directory, and despite any extension limitations. */ public final Set<File> SPECIAL_FILES_TO_SHARE = DATA.getSet("SPECIAL_FILES_TO_SHARE"); /** * Files that should be not shared despite being located inside * a shared directory. */ public final Set<File> FILES_NOT_TO_SHARE = DATA.getSet("FILES_NOT_TO_SHARE"); /** * Files in a shared folder that are not the location of the LWS downloads but * were purchased from the LWS. */ public final Set<File> SPECIAL_STORE_FILES = DATA.getSet("SPECIAL_STORE_FILES"); /** * Constructs a new LibraryData, adding it to the SettingsHandler for maintanence. */ public OldLibraryData() { SettingsGroupManager.instance().addSettingsGroup(this); } /** * Saves all the settings to disk. */ public boolean save() { if (getShouldSave()) { DATA.save(); fireSettingsEvent(EventType.SAVE); return true; } return false; } /** * Reverts all settings to their defaults -- this clears all the settings. */ public boolean revertToDefault() { DATA.clear(); fireSettingsEvent(EventType.REVERT_TO_DEFAULT); return true; } /** * Reloads all settings to match what's on disk. */ public void reload() { DATA.load(); fireSettingsEvent(EventType.RELOAD); } /** * Cleans special file sharing settings by removing references to files that * no longer exist. */ public final void clean() { OldLibrarySettings.DIRECTORIES_TO_SHARE.clean(); Set<File> parents = OldLibrarySettings.DIRECTORIES_TO_SHARE.get(); clean(DIRECTORIES_NOT_TO_SHARE, parents); clean(FILES_NOT_TO_SHARE, parents); clean(SENSITIVE_DIRECTORIES_VALIDATED, parents); clean(SENSITIVE_DIRECTORIES_NOT_TO_SHARE, parents); clean(SPECIAL_STORE_FILES, parents); } /** * Cleans out entries from a setting that no long exist on disk, or, * if the second parameter is non-null, don't exist anywhere in the list * of the second parameter's settings. */ private void clean(Set<File> one, Set<File> two) { synchronized(one) { for(Iterator<File> i = one.iterator(); i.hasNext(); ) { File f = i.next(); if(!f.exists()) i.remove(); else if(two != null && !containsParent(f, two)) i.remove(); } } } /** * Determines if the File or any of its parents is contained in the given Set. */ private boolean containsParent(File parent, Set<File> set) { while(parent != null) { if(set.contains(parent)) return true; parent = parent.getParentFile(); } return false; } }