/** * */ package org.objectstyle.wolips.wodclipse.core.refactoring; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jdt.core.formatter.CodeFormatter; import org.eclipse.jdt.internal.core.CreateImportOperation; import org.eclipse.jdt.internal.core.CreateMethodOperation; import org.eclipse.jdt.internal.core.JavaModelOperation; import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil; import org.eclipse.jdt.internal.corext.util.JavaModelUtil; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.text.IRewriteTarget; import org.eclipse.ui.IEditorPart; import org.objectstyle.wolips.bindings.utils.BindingReflectionUtils; public class AddActionOperation extends JavaModelOperation { private AddActionInfo _info; public AddActionOperation(AddActionInfo info) { super(new IJavaElement[] { info.getComponentType() }); _info = info; } @Override protected void executeOperation() throws JavaModelException { IType componentType = _info.getComponentType(); String keyType = _info.getJavaTypeName(); if (BindingReflectionUtils.isImportRequired(keyType)) { new CreateImportOperation(keyType, componentType.getCompilationUnit(), Flags.AccDefault).runOperation(progressMonitor); } String actionMethodName = _info.getName(); boolean useGenerics = JavaModelUtil.is50OrHigher(componentType.getJavaProject()); String simpleTypeName = Signature.getSimpleName(keyType); boolean loadPage = !"WOComponent".equals(simpleTypeName) && !"WOActionResults".equals(simpleTypeName); StringBuffer sourceBuffer = new StringBuffer(); sourceBuffer.append("public " + simpleTypeName + " " + actionMethodName + "() {\n"); if (loadPage) { if (useGenerics) { sourceBuffer.append(simpleTypeName + " nextPage = pageWithName(" + simpleTypeName + ".class);\n"); } else { sourceBuffer.append(simpleTypeName + " nextPage = (" + simpleTypeName + ")pageWithName(" + simpleTypeName + ".class.gettName());\n"); } sourceBuffer.append("return nextPage;\n"); } else { sourceBuffer.append("return null;\n"); } sourceBuffer.append("}"); String source = sourceBuffer.toString(); String lineDelim = "\n";// TextUtilities.getDefaultLineDelimiter(document); source = CodeFormatterUtil.format(CodeFormatter.K_CLASS_BODY_DECLARATIONS, source, 1, null, componentType.getJavaProject()); new CreateMethodOperation(componentType, source, false).runOperation(progressMonitor); } public static void addAction(AddActionInfo info) throws CoreException { IEditorPart editorPart = JavaUI.openInEditor(info.getComponentType().getCompilationUnit()); if (editorPart != null) { // CompilationUnitEditor cuEditor = // (CompilationUnitEditor) editorPart; // cuEditor.getDocumentProvider().getDocument(componentType.getCompilationUnit()).get IRewriteTarget target = (IRewriteTarget) editorPart.getAdapter(IRewriteTarget.class); if (target != null) { target.beginCompoundChange(); } try { new AddActionOperation(info).run(null); } finally { if (target != null) { target.endCompoundChange(); } } } } }