package org.signalml.uninstaller; import java.io.File; import java.util.List; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import com.izforge.izpack.event.UninstallerListener; import com.izforge.izpack.util.AbstractUIHandler; import com.izforge.izpack.util.AbstractUIProgressHandler; public class Uninstaller implements UninstallerListener { @Override public void afterDelete(File arg0, AbstractUIProgressHandler arg1) throws Exception { } @Override public void afterDeletion(List arg0, AbstractUIProgressHandler arg1) throws Exception { int answer = arg1.askQuestion("Remove configuration files?", "Do you want to remove the configuration files for Svarog?", AbstractUIHandler.CHOICES_YES_NO, AbstractUIHandler.ANSWER_NO); if (answer == AbstractUIHandler.ANSWER_YES) { answer = arg1.askQuestion("Curren user or all?", "Do you want to remove configuration files only for the current user (YES) or for all users (NO)?", AbstractUIHandler.CHOICES_YES_NO_CANCEL, AbstractUIHandler.ANSWER_CANCEL); if (answer == AbstractUIHandler.ANSWER_YES) { removeCurrentUser(); } else if (answer == AbstractUIHandler.ANSWER_NO) removeAllProfiles(); } } @Override public void beforeDelete(File arg0, AbstractUIProgressHandler arg1) throws Exception { } public void removeCurrentUser() { Preferences preferences = Preferences.userRoot().node("org/signalml"); String nazwa = preferences.get("profilePath".toString(), null); if (nazwa != null) deleteDirectoryRecursive(new File(nazwa)); else { nazwa = System.getProperty("user.home"); removeProfile(new File(nazwa)); } try { preferences.removeNode(); } catch (BackingStoreException e) { } } private void deleteDirectoryRecursive(File directory) { if (directory.exists()) { File[] files = directory.listFiles(); for (int i=0; i<files.length; i++) { if (files[i].isDirectory()) { deleteDirectoryRecursive(files[i]); } else { try { files[i].delete(); } catch (SecurityException e) { } } } } try { directory.delete(); } catch (SecurityException e) { } } private void removeProfile(File directory) { File svarogProfile = new File(directory.getAbsolutePath() + File.separator + "signalml"); if (svarogProfile.exists() && svarogProfile.isDirectory()) deleteDirectoryRecursive(svarogProfile); } private void removeAllProfiles() { removeCurrentUser(); File profileDirectory = new File(System.getProperty("user.home")); File profileParent = profileDirectory.getParentFile(); File[] profileDirs = profileParent.listFiles(); for (File profileDir : profileDirs) { removeProfile(profileDir); } } @Override public void beforeDeletion(List arg0, AbstractUIProgressHandler arg1) throws Exception { } @Override public boolean isFileListener() { return false; } }