/*******************************************************************************
* Copyright (C) 2011, Jens Baumgart <jens.baumgart@sap.com>
*
* 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
*******************************************************************************/
package org.eclipse.egit.ui.internal.dialogs;
import org.eclipse.egit.ui.Activator;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
/**
* This class is used to load / save the state of a
* {@link CommitMessageComponentState} in the dialog settings.
*
*/
public class CommitMessageComponentStateManager {
private static final String COMMIT_MESSAGE_COMPONENT_SECTION = "GitCommitMessageComponent"; //$NON-NLS-1$
private static final String EMPTY = "empty"; //$NON-NLS-1$
private static final int MEMBER_COUNT = 5; // number of members in
// CommitMessageComponentState
/**
* @param repository
* @param state
*/
public static void persistState(Repository repository,
CommitMessageComponentState state) {
IDialogSettings dialogSettings = getDialogSettings();
String[] values = new String[] { Boolean.toString(state.getAmend()),
state.getAuthor(), state.getCommitMessage(),
state.getCommitter(), state.getHeadCommit().getName().toString() };
dialogSettings.put(repository.getDirectory().getAbsolutePath(), values);
}
/**
* @param repository
* @return state
*/
public static CommitMessageComponentState loadState(Repository repository) {
IDialogSettings dialogSettings = getDialogSettings();
String[] values = dialogSettings.getArray(repository.getDirectory()
.getAbsolutePath());
if (values == null || values.length < MEMBER_COUNT)
return null;
CommitMessageComponentState state = new CommitMessageComponentState();
state.setAmend(Boolean.parseBoolean(values[0]));
state.setAuthor(values[1]);
state.setCommitMessage(values[2]);
state.setCommitter(values[3]);
state.setHeadCommit(ObjectId.fromString(values[4]));
return state;
}
private static IDialogSettings getDialogSettings() {
IDialogSettings settings = Activator.getDefault().getDialogSettings();
IDialogSettings section = settings
.getSection(COMMIT_MESSAGE_COMPONENT_SECTION);
if (section == null)
section = settings.addNewSection(COMMIT_MESSAGE_COMPONENT_SECTION);
return section;
}
/**
* @param repository
*/
public static void deleteState(Repository repository) {
IDialogSettings dialogSettings = getDialogSettings();
String key = repository.getDirectory().getAbsolutePath();
if (dialogSettings != null && dialogSettings.getArray(key) != null)
dialogSettings.put(key, new String[] { EMPTY });
}
}