org.eclipse.help.ui.internal.views.ScopeSet.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.help.ui.internal.views.ScopeSet.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2010 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.help.ui.internal.views;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.eclipse.core.runtime.IPath;
import org.eclipse.help.ui.internal.HelpUIPlugin;
import org.eclipse.help.ui.internal.Messages;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceStore;

/**
 * Federated search scope.
 */
public class ScopeSet {
    public static final String SCOPE_DIR_NAME = "scope_sets"; //$NON-NLS-1$
    private static final String KEY_DEFAULT = "__DEFAULT__"; //$NON-NLS-1$
    public static final String EXT = ".pref"; //$NON-NLS-1$
    private String name;
    private PreferenceStore preferenceStore;
    private boolean needsSaving;
    private int defaultSet = -1;

    public ScopeSet() {
        this(Messages.ScopeSet_default);
        defaultSet = 1;
    }

    public ScopeSet(String name) {
        this.needsSaving = true;
        this.name = name;
    }

    public boolean isEditable() {
        return !isDefault();
    }

    public boolean isDefault() {
        if (defaultSet == 1)
            return true;
        return getPreferenceStore().getBoolean(KEY_DEFAULT);
    }

    public boolean isImplicit() {
        return false;
    }

    public ScopeSet(ScopeSet set, String name) {
        this(name);
        copyFrom(set);
    }

    public void copyFrom(ScopeSet set) {
        copy((PreferenceStore) set.getPreferenceStore());
    }

    public void dispose() {
        File file = new File(getFileName(name));
        if (file.exists())
            file.delete();
    }

    public IPreferenceStore getPreferenceStore() {
        if (preferenceStore == null) {
            preferenceStore = new PreferenceStore(getFileName(this.name));
            try {
                File file = new File(getFileName(this.name));
                if (file.exists()) {
                    preferenceStore.load();
                }
            } catch (IOException e) {
                String message = Messages.bind(Messages.ScopeSet_errorLoading, name);
                HelpUIPlugin.logError(message, e);
            }
        }
        return preferenceStore;
    }

    protected String encodeFileName(String name) {
        return name;
    }

    private String getFileName(String name) {
        IPath location = HelpUIPlugin.getDefault().getStateLocation();
        location = location.append(SCOPE_DIR_NAME);
        location = location.append(encodeFileName(name) + getExtension());
        return location.toOSString();
    }

    protected String getExtension() {
        return EXT;
    }

    private void copy(PreferenceStore store) {
        try {
            File file = File.createTempFile("sset", null); //$NON-NLS-1$
            FileOutputStream fos = new FileOutputStream(file);
            store.save(fos, ""); //$NON-NLS-1$
            fos.close();
            FileInputStream fis = new FileInputStream(file);
            getPreferenceStore();
            preferenceStore.load(fis);
            //when we clone the default set, we should
            //clear the default marker
            preferenceStore.setValue(KEY_DEFAULT, false);
            fis.close();
        } catch (IOException e) {
        }
    }

    /**
     * @return Returns the name.
     */
    public String getName() {
        return name;
    }

    /**
     * @param name The name to set.
     */
    public void setName(String name) {
        String oldFileName = getFileName(this.name);
        File oldFile = new File(oldFileName);
        if (oldFile.exists()) {
            // store under the old name already exists
            if (preferenceStore == null) {
                // just rename the file
                oldFile.renameTo(new File(getFileName(name)));
            } else {
                // remove the old file, set the new file name,
                // then save to create the new file
                oldFile.delete();
            }
        }
        if (preferenceStore != null) {
            preferenceStore.setFilename(getFileName(name));
            try {
                preferenceStore.save();
            } catch (IOException e) {
                String message = Messages.bind(Messages.ScopeSet_errorSaving, name);
                HelpUIPlugin.logError(message, e);
            }
        }
        this.name = name;
    }

    public void save() {
        getPreferenceStore();
        if (preferenceStore.needsSaving() || needsSaving) {
            try {
                if (defaultSet != -1)
                    preferenceStore.setValue(KEY_DEFAULT, defaultSet > 0);
                preferenceStore.save();
                needsSaving = false;
            } catch (IOException e) {
                String message = Messages.bind(Messages.ScopeSet_errorSaving, name);
                HelpUIPlugin.logError(message, e);
            }
        }
    }

    public boolean getEngineEnabled(EngineDescriptor desc) {
        IPreferenceStore store = getPreferenceStore();
        String key = getMasterKey(desc.getId());
        if (store.contains(key))
            return store.getBoolean(key);
        store.setValue(key, desc.isEnabled());
        return desc.isEnabled();
    }

    public void setEngineEnabled(EngineDescriptor desc, boolean value) {
        IPreferenceStore store = getPreferenceStore();
        String key = getMasterKey(desc.getId());
        store.setValue(key, value);
    }

    public static String getMasterKey(String id) {
        return id + ".master"; //$NON-NLS-1$
    }

    public static String getLabelKey(String id) {
        return id + ".label"; //$NON-NLS-1$
    }

    public static String getDescKey(String id) {
        return id + ".desc"; //$NON-NLS-1$
    }
}