blob: ec18089158b70ef953415a42640c6e19be85e44a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Oracle. 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:
* Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.jaxb.ui.internal.commands;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jpt.common.utility.internal.CollectionTools;
import org.eclipse.jpt.jaxb.core.context.JaxbPackage;
import org.eclipse.jpt.jaxb.ui.JptJaxbUiPlugin;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
public class CreatePackageInfoCommandHandler
extends AbstractHandler {
private List<IFile> createdFiles = new Vector<IFile>();
public Object execute(ExecutionEvent event) throws ExecutionException {
IStructuredSelection selection =
(IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
for (Iterator stream = selection.iterator(); stream.hasNext(); ) {
createPackageInfo(stream.next());
}
for (IFile file : this.createdFiles) {
IWorkbenchWindow activeWindow = HandlerUtil.getActiveWorkbenchWindow(event);
BasicNewResourceWizard.selectAndReveal(file, activeWindow);
try {
IDE.openEditor(activeWindow.getActivePage(), file, true);
}
catch (PartInitException pie) {
JptJaxbUiPlugin.log(pie);
}
}
return null;
}
private void createPackageInfo(Object selectedObject) {
JaxbPackage jaxbPackage =
(JaxbPackage) Platform.getAdapterManager().getAdapter(selectedObject, JaxbPackage.class);
IPackageFragment jdtPackage = getJdtPackage(jaxbPackage);
try {
ICompilationUnit cu = jdtPackage.createCompilationUnit("package-info.java", "package " + jdtPackage.getElementName() + ";", true, null);
this.createdFiles.add((IFile) cu.getCorrespondingResource());
}
catch (JavaModelException jme) {
JptJaxbUiPlugin.log(jme);
}
}
private IPackageFragment getJdtPackage(JaxbPackage jaxbPackage) {
return (IPackageFragment) CollectionTools.get(
jaxbPackage.getContextRoot().getTypes(jaxbPackage), 0).
getJavaResourceType().getJavaResourceCompilationUnit().getCompilationUnit().getParent();
}
}