/*******************************************************************************
* Copyright (c) 2012 Pivotal Software, Inc.
* 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.frameworks.core.legacyconversion;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.internal.runtime.InternalPlatform;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
import org.springsource.ide.eclipse.commons.frameworks.core.FrameworkCoreActivator;
/**
* Converts legacy 2.x workspace preferences into 3.x preferences
* @author Andrew Eisenberg
* @since 3.0.0
*/
public class LegacyWorkspaceConverter extends AbstractLegacyConverter implements IConversionConstants {
private static final IPreferenceStore PREFERENCE_STORE = FrameworkCoreActivator.getDefault().getPreferenceStore();
public boolean shouldAutoConvert() {
return ! PREFERENCE_STORE.getBoolean(LEGACY_MIGRATION_ALREADY_DONE);
}
public IStatus convert(IProgressMonitor monitor) {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
SubMonitor sub = SubMonitor.convert(monitor, 4);
IStatus[] statuses = new IStatus[4];
statuses[0] = copyPluginPreferences(sub);
// nothing to do for grails any more
// statuses[1] = convertGrailsWorkspacePreferences(sub);
statuses[1] = Status.OK_STATUS;
statuses[2] = convertRooWorkspacePreferences(sub);
statuses[3] = convertSTSPreferences(sub);
IStatus result = new MultiStatus(FrameworkCoreActivator.PLUGIN_ID, 0, statuses,
"Result of converting legacy STS 2.x workspace preferences to 3.x", null); //$NON-NLS-1$
// FrameworkCoreActivator.getDefault().getLog().log(result);
if (result.isOK()) {
PREFERENCE_STORE.setValue(LEGACY_MIGRATION_ALREADY_DONE, true);
}
return result;
}
/**
* Copies preferences inside of the
* @param sub
* @return
*/
private IStatus copyPluginPreferences(SubMonitor sub) {
sub.subTask("Copying plugin preferences for legacy STS workspace"); //$NON-NLS-1$
try {
File prefsFolder = InternalPlatform.getDefault().getRuntimeInstance().getStateLocation().toFile();
prefsFolder = new File(prefsFolder, ".settings");
for (int i = 0; i < STS_OLD_WORKSPACE_PREFS.length; i++) {
if (STS_NEW_WORKSPACE_PREFS[i].equals("???")) { //$NON-NLS-1$
continue;
}
copyPreferencesFile(new File(prefsFolder, STS_OLD_WORKSPACE_PREFS[i] + ".prefs"), new File(prefsFolder, STS_NEW_WORKSPACE_PREFS[i] + ".prefs"), STS_OLD_WORKSPACE_PREFS[i], STS_NEW_WORKSPACE_PREFS[i]); //$NON-NLS-1$ //$NON-NLS-2$
InstanceScope.INSTANCE.getNode(STS_NEW_WORKSPACE_PREFS[i]).sync();
}
} catch (Exception e) {
return new Status(IStatus.ERROR, FrameworkCoreActivator.PLUGIN_ID, "Failed to convert legacy STS workspace preferences", e); //$NON-NLS-1$
}
return new Status(IStatus.OK, FrameworkCoreActivator.PLUGIN_ID, "Converted legacy STS plugin preferences"); //$NON-NLS-1$
}
private IStatus convertSTSPreferences(SubMonitor sub) {
sub.subTask("Converting STS plugin state locations"); //$NON-NLS-1$
try {
copyPluginStateLocation(STS_OLD_CONTENT_CORE, STS_NEW_CONTENT_CORE);
copyPluginStateLocation(STS_OLD_CORE, STS_NEW_CORE);
copyPluginStateLocation(STS_OLD_IDE_UI, STS_NEW_IDE_UI);
return new Status(IStatus.OK, FrameworkCoreActivator.PLUGIN_ID, "Converted legacy STS plugin state locations"); //$NON-NLS-1$
} catch (IOException e) {
return new Status(IStatus.ERROR, FrameworkCoreActivator.PLUGIN_ID, "Failed to convert legacy STS plugin state locations", e); //$NON-NLS-1$
} finally {
sub.worked(1);
}
}
// TODO FIXADE Probably safe to delete
// private IStatus convertGrailsWorkspacePreferences(SubMonitor sub) {
// sub.subTask("Converting Grails plugin state locations"); //$NON-NLS-1$
// try {
// copyPluginStateLocation(GRAILS_OLD_PREFERENCE_PREFIX, GRAILS_NEW_PREFERENCE_PREFIX);
// return new Status(IStatus.OK, FrameworkCoreActivator.PLUGIN_ID, "Converted legacy Grails plugin state locations"); //$NON-NLS-1$
// } catch (IOException e) {
// return new Status(IStatus.ERROR, FrameworkCoreActivator.PLUGIN_ID, "Failed to convert legacy Grails plugin state locations", e); //$NON-NLS-1$
// } finally {
// sub.worked(1);
// }
// }
private IStatus convertRooWorkspacePreferences(SubMonitor sub) {
sub.subTask("Converting Roo plugin state locations"); //$NON-NLS-1$
try {
// Let RooInstallManager migrate the roo.installs content
// copyPluginStateLocation(ROO_OLD_PLUGIN_NAME, ROO_NEW_PLUGIN_NAME);
copyPluginStateLocation(ROO_OLD_UI_NAME, ROO_NEW_UI_NAME);
return new Status(IStatus.OK, FrameworkCoreActivator.PLUGIN_ID, "Converted legacy Roo plugin state locations"); //$NON-NLS-1$
} catch (IOException e) {
return new Status(IStatus.ERROR, FrameworkCoreActivator.PLUGIN_ID, "Failed to convert legacy Roo plugin state locations", e); //$NON-NLS-1$
} finally {
sub.worked(1);
}
}
}