blob: 63be72e803fec6a89bf56458a1d4578fb980e3a1 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2009, 2012 SpringSource, a division of VMware, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.virgo.ide.ui.internal.actions;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.core.IBaseModel;
import org.eclipse.pde.core.plugin.IPluginBase;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.internal.core.ibundle.IBundleModel;
import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
import org.eclipse.pde.internal.core.ibundle.IManifestHeader;
import org.eclipse.pde.internal.core.text.bundle.Bundle;
import org.eclipse.pde.internal.core.text.bundle.BundleModel;
import org.eclipse.pde.internal.core.text.plugin.PluginBaseNode;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.virgo.ide.ui.editors.model.BundleModelModification;
import org.eclipse.virgo.ide.ui.editors.model.BundleModelUtility;
/**
* @author Christian Dupuis
* @author Leo Dos Santos
*/
public class ManifestFormatOperation implements IRunnableWithProgress {
private final Object[] fObjects;
public ManifestFormatOperation(Object[] objects) {
this.fObjects = objects;
}
public void run(IProgressMonitor mon) throws InvocationTargetException, InterruptedException {
mon.beginTask(PDEUIMessages.FormatManifestOperation_task, this.fObjects.length);
for (int i = 0; !mon.isCanceled() && i < this.fObjects.length; i++) {
Object obj = this.fObjects[i];
if (obj instanceof IFileEditorInput) {
obj = ((IFileEditorInput) obj).getFile();
}
if (obj instanceof IFile) {
mon.subTask(NLS.bind(PDEUIMessages.FormatManifestOperation_subtask, ((IFile) obj).getFullPath().toString()));
format((IFile) obj, mon);
}
mon.worked(1);
}
}
public static void format(IFile file, IProgressMonitor mon) {
BundleModelUtility.modifyModel(new BundleModelModification(file) {
@Override
protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
if (model instanceof IBundlePluginModelBase) {
IBundleModel bundleModel = ((IBundlePluginModelBase) model).getBundleModel();
if (bundleModel.getBundle() instanceof Bundle) {
formatBundle((Bundle) bundleModel.getBundle());
}
} else if (model instanceof IPluginModelBase) {
IPluginBase pluginModel = ((IPluginModelBase) model).getPluginBase();
if (pluginModel instanceof PluginBaseNode) {
formatXML((PluginBaseNode) pluginModel);
}
}
}
@Override
public boolean saveOpenEditor() {
return false;
}
}, mon);
}
private static void formatBundle(Bundle bundle) {
Iterator headers = bundle.getHeaders().values().iterator();
while (headers.hasNext()) {
((IManifestHeader) headers.next()).update(true);
}
BundleModel model = (BundleModel) bundle.getModel();
model.adjustOffsets(model.getDocument());
}
private static void formatXML(PluginBaseNode node) {
// TODO Auto-generated method stub
}
}