blob: 1bdd587fb6df360a1a09dd7bf583c4dd7b9f201b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.intro.impl.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import org.eclipse.core.runtime.IPath;
import org.eclipse.ui.XMLMemento;
import org.eclipse.ui.internal.intro.impl.IntroPlugin;
/**
* Utility class which manages the pseudo preference which determines whether
* Intro should always open on startup
*/
public class ReopenUtil {
private static final String STATE = "state"; //$NON-NLS-1$
private static final String REOPEN = "reopen"; //$NON-NLS-1$
public static boolean isReopenPreferenceInitialized() {
return readMemento() != null;
}
public static void setReopenPreference(boolean reopen) {
XMLMemento memento = XMLMemento.createWriteRoot(STATE);
memento.putBoolean(REOPEN, reopen);
saveMemento(memento);
}
public static boolean isReopenPreference() {
XMLMemento memento = readMemento();
if (memento == null) {
return false;
}
return memento.getBoolean(REOPEN).booleanValue();
}
private static XMLMemento readMemento() {
XMLMemento memento;
InputStreamReader reader = null;
try {
// Read the cheatsheet state file.
final File stateFile = getStateFile();
FileInputStream input = new FileInputStream(stateFile);
reader = new InputStreamReader(input, StandardCharsets.UTF_8);
memento = XMLMemento.createReadRoot(reader);
} catch (FileNotFoundException e) {
memento = null;
// Do nothing, the file will not exist the first time the workbench in used.
} catch (Exception e) {
memento = null;
} finally {
try {
if (reader != null)
reader.close();
} catch (IOException e) {
// Not much to do, just catch the exception and keep going.
}
}
return memento;
}
private static void saveMemento(XMLMemento memento) {
// Save the IMemento to a file.
File stateFile = getStateFile();
OutputStreamWriter writer = null;
try {
FileOutputStream stream = new FileOutputStream(stateFile);
writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
memento.save(writer);
} catch (IOException e) {
stateFile.delete();
} finally {
try {
if (writer != null)
writer.close();
} catch (IOException e) {
}
}
}
private static File getStateFile() {
IPath path = IntroPlugin.getDefault().getStateLocation();
path = path.append("introstate"); //$NON-NLS-1$
File stateFile = path.toFile();
return stateFile;
}
}