/** | |
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S. | |
* 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: | |
* Thales Corporate Services S.A.S - initial API and implementation | |
*/ | |
package org.eclipse.egf.core.pde.helper; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.core.resources.IProject; | |
import org.eclipse.core.runtime.CoreException; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.egf.common.helper.BundleHelper; | |
import org.eclipse.egf.common.helper.ProjectHelper; | |
import org.eclipse.egf.core.pde.EGFPDEPlugin; | |
import org.eclipse.egf.core.pde.internal.FcoreGeneratorHelper; | |
import org.eclipse.egf.core.pde.internal.ui.PDEModelUtility; | |
import org.eclipse.osgi.util.NLS; | |
import org.eclipse.pde.core.plugin.IPluginBase; | |
import org.eclipse.pde.core.plugin.IPluginModelBase; | |
import org.eclipse.pde.internal.core.TargetPlatformHelper; | |
import org.eclipse.pde.internal.core.build.WorkspaceBuildModel; | |
import org.eclipse.pde.internal.core.plugin.WorkspaceFragmentModel; | |
import org.eclipse.pde.internal.core.plugin.WorkspacePluginModel; | |
import org.eclipse.pde.internal.core.plugin.WorkspacePluginModelBase; | |
/** | |
* Implement a plug-in changes command runner. | |
* | |
* @author Guillaume Brocard | |
*/ | |
public class PluginHelper { | |
private PluginHelper() { | |
// Prevent Instantiation | |
} | |
/** | |
* 3.0 level compliance of plugin.xml | |
*/ | |
private static final String PLUGIN_VERSION_3_0 = "3.0"; //$NON-NLS-1$ | |
/** | |
* 3.2 level compliance of plugin.xml | |
*/ | |
private static final String PLUGIN_VERSION_3_2 = "3.2"; //$NON-NLS-1$ | |
/** | |
* Update the build.properties file to add the plugin.xml file in | |
* bin.includes. | |
* | |
* @param model | |
*/ | |
public static void updateBuildFile(WorkspacePluginModelBase model) throws CoreException { | |
// Add the newly created plug-in file in the build.properties. | |
IFile file = model.getFile(); | |
WorkspaceBuildModel buildModel = (WorkspaceBuildModel) model.getBuildModel(); | |
IProject project = file.getProject(); | |
if (buildModel == null) { | |
buildModel = FcoreGeneratorHelper.getBuildModel(project); | |
model.setBuildModel(buildModel); | |
} | |
FcoreGeneratorHelper.addEntryInBinaryBuild(buildModel, PDEModelUtility.F_PLUGIN); | |
// Save the build.properties. | |
buildModel.save(); | |
} | |
/** | |
* Create plug-in model object | |
* | |
* @param model | |
* @param bundleRelativeFileName | |
* the searched bundle file name.<br> | |
* @param bundleId | |
* The bundle id. | |
* @return a {@link WorkspacePluginModelBase} instance or null if | |
* instantiation fails. | |
*/ | |
public static WorkspacePluginModelBase createWorkspacePluginModelBase(IPluginModelBase model) throws CoreException { | |
IFile file = getFile(model, PDEModelUtility.F_PLUGIN); | |
if (file == null) { | |
return null; | |
} | |
WorkspacePluginModelBase pluginModel = null; | |
// Get the real model file. | |
pluginModel = (WorkspacePluginModelBase) getModel(file); | |
if (pluginModel == null) { | |
throw new CoreException(EGFPDEPlugin.getDefault().newStatus(IStatus.ERROR, NLS.bind("PluginChangesCommandRunner.createWorkspacePluginModelBase(..) _ bundleId ''{0}''.", BundleHelper.getBundleId(model)), null)); //$NON-NLS-1$ | |
} | |
// Set default attributes. | |
IPluginBase base = pluginModel.getPluginBase(); | |
base.setSchemaVersion(TargetPlatformHelper.getTargetVersion() < 3.2 ? PLUGIN_VERSION_3_0 : PLUGIN_VERSION_3_2); | |
return pluginModel; | |
} | |
/** | |
* Test whether or not given bundle model object exists. | |
* | |
* @param model | |
* @param bundleRelativeFileName | |
* the searched bundle file name.<br> | |
* @return | |
*/ | |
public static boolean bundleFileExists(IPluginModelBase model, String file) { | |
IFile result = getFile(model, file); | |
if (file != null) { | |
return result.exists(); | |
} | |
return false; | |
} | |
/** | |
* Get the Plug-in object for given {@link IFile} related to a plugin.xml | |
* file. | |
* | |
* @param file | |
* @return | |
*/ | |
public static IPluginModelBase getModel(IFile file) { | |
if (file == null) { | |
return null; | |
} | |
if (PDEModelUtility.F_PLUGIN.equals(file.getName())) { | |
return new WorkspacePluginModel(file, false); | |
} else if (PDEModelUtility.F_FRAGMENT.equals(file.getName())) { | |
return new WorkspaceFragmentModel(file, false); | |
} | |
return null; | |
} | |
/** | |
* Get the plug-in file for given plug-in model object (without checking | |
* existence) for specified bundle fileName. | |
* | |
* @param model | |
* @param file | |
* the searched bundle file name.<br> | |
* @return. | |
*/ | |
public static IFile getFile(IPluginModelBase model, String file) { | |
// Precondition. | |
if (model == null) { | |
return null; | |
} | |
IProject project = ProjectHelper.getProject(model); | |
if (project == null) { | |
project = ProjectHelper.getProject(BundleHelper.getBundleId(model)); | |
} | |
if (project == null) { | |
return null; | |
} | |
return project.getFile(file); | |
} | |
} |