/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.hibernate.eclipse.console;
import java.io.File;
import org.eclipse.core.resources.ISaveContext;
import org.eclipse.core.resources.ISaveParticipant;
import org.eclipse.core.resources.ISavedState;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
/**
* @author max
*
*/
public class HibernateConsoleSaveParticipant implements ISaveParticipant {
static final String SAVENAME = "hibernate-console.xml"; //$NON-NLS-1$
public void prepareToSave(ISaveContext context) throws CoreException {
}
public void saving(ISaveContext context) throws CoreException {
switch (context.getKind() ) {
case ISaveContext.FULL_SAVE:
case ISaveContext.PROJECT_SAVE:
case ISaveContext.SNAPSHOT:
// save the plug-in state
int saveNumber = context.getSaveNumber();
String saveFileName = SAVENAME + "-" + Integer.toString(saveNumber); //$NON-NLS-1$
File f = HibernateConsolePlugin
.getDefault().getStateLocation().append(saveFileName)
.toFile();
// if we fail to write, an exception is thrown and we do not update
// the path
HibernateConsolePlugin
.getDefault().writeStateTo(f);
context.map(new Path(SAVENAME), new Path(saveFileName) );
context.needSaveNumber();
break;
//case ISaveContext.PROJECT_SAVE:
// get the project related to this save operation
//IProject project = context.getProject();
// save its information, if necessary
//break;
//case ISaveContext.SNAPSHOT:
// This operation needs to be really fast because
// snapshots can be requested frequently by the
// workspace.
//break;
}
}
public void doneSaving(ISaveContext context) {
HibernateConsolePlugin myPluginInstance = HibernateConsolePlugin
.getDefault();
// delete the old saved state since it is not necessary anymore
int previousSaveNumber = context.getPreviousSaveNumber();
String oldFileName = SAVENAME + "-" + Integer.toString(previousSaveNumber); //$NON-NLS-1$
File f = myPluginInstance.getStateLocation().append(oldFileName)
.toFile();
//System.out.println("delete " + f);
f.delete();
}
public void rollback(ISaveContext context) {
HibernateConsolePlugin myPluginInstance = HibernateConsolePlugin
.getDefault();
// since the save operation has failed, delete the saved state we have
// just written
int saveNumber = context.getSaveNumber();
String saveFileName = SAVENAME + "-" + Integer.toString(saveNumber); //$NON-NLS-1$
File f = myPluginInstance.getStateLocation().append(saveFileName)
.toFile();
f.delete();
}
public void doStart(HibernateConsolePlugin plugin) throws CoreException {
ISavedState lastState = ResourcesPlugin.getWorkspace().addSaveParticipant(plugin.getBundle().getSymbolicName(), this);
if (lastState == null) {
return;
}
IPath location = lastState.lookup(new Path(HibernateConsoleSaveParticipant.SAVENAME) );
if (location == null) {
return;
}
File f = plugin.getStateLocation().append(location).toFile();
plugin.readStateFrom(f);
}
}