X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPFileWizard.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPFileWizard.java index a0e659d..89674df 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPFileWizard.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/PHPFileWizard.java @@ -1,44 +1,63 @@ package net.sourceforge.phpeclipse.wizards; /********************************************************************** -Copyright (c) 2000, 2002 IBM Corp. and others. -All rights reserved. This program and the accompanying materials -are made available under the terms of the Common Public License v1.0 -which accompanies this distribution, and is available at -http://www.eclipse.org/legal/cpl-v10.html + Copyright (c) 2000, 2002 IBM Corp. and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Common Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/cpl-v10.html -Contributors: - IBM Corporation - Initial implementation - Klaus Hartlage - www.eclipseproject.de -**********************************************************************/ + Contributors: + IBM Corporation - Initial implementation + www.phpeclipse.de + **********************************************************************/ +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; + +import net.sourceforge.phpdt.internal.corext.codemanipulation.StubUtility; +import net.sourceforge.phpdt.internal.corext.template.php.CodeTemplateContext; +import net.sourceforge.phpdt.internal.corext.template.php.CodeTemplateContextType; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.text.templates.Template; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; -import org.eclipse.core.runtime.*; -import org.eclipse.jface.operation.*; -import java.lang.reflect.InvocationTargetException; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.CoreException; -import java.io.*; -import org.eclipse.ui.*; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWizard; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.ide.IDE; /** - * This wizard creates one file with the extension - * "php". + * This wizard creates one file with the extension "php". */ public class PHPFileWizard extends Wizard implements INewWizard { private PHPFileWizardPage page; + private ISelection selection; // the name of the file to create - private String fileName; + private String fFileName; - public PHPFileWizard() { super(); setNeedsProgressMonitor(true); @@ -53,10 +72,8 @@ public class PHPFileWizard extends Wizard implements INewWizard { } /** - * This method is called when 'Finish' button is pressed in - * the wizard. - * We will create an operation and run it - * using wizard as execution context. + * This method is called when 'Finish' button is pressed in the wizard. We will create an operation and run it using wizard as + * execution context. */ public boolean performFinish() { final String containerName = page.getContainerName(); @@ -85,9 +102,8 @@ public class PHPFileWizard extends Wizard implements INewWizard { } /** - * The worker method. It will find the container, create the - * file if missing or just replace its contents, and open - * the editor on the newly created file. + * The worker method. It will find the container, create the file if missing or just replace its contents, and open the editor on + * the newly created file. */ private void doFinish(String containerName, String fileName, IProgressMonitor monitor) throws CoreException { // create a sample file @@ -99,8 +115,15 @@ public class PHPFileWizard extends Wizard implements INewWizard { } IContainer container = (IContainer) resource; final IFile file = container.getFile(new Path(fileName)); + String className = getClassName(fileName); + try { - InputStream stream = openContentStream(); + InputStream stream; + if (className == null) { + stream = openContentStream(fileName); + } else { + stream = openContentStreamClass(className); + } if (file.exists()) { file.setContents(stream, true, true, monitor); } else { @@ -115,7 +138,7 @@ public class PHPFileWizard extends Wizard implements INewWizard { public void run() { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { - page.openEditor(file); + IDE.openEditor(page, file, true); } catch (PartInitException e) { } } @@ -124,34 +147,74 @@ public class PHPFileWizard extends Wizard implements INewWizard { } /** - * We will initialize file contents with a sample text. + * Check if the filename is like this anyname.class.php + * + * @param fFileName + * the filename + * @return the anyname or null */ - private InputStream openContentStream() { - String className = fileName.substring(0, fileName.length() - 3); + private static final String getClassName(final String fileName) { + final int lastDot = fileName.lastIndexOf('.'); + if (lastDot == -1) + return null; + final int precLastDot = fileName.lastIndexOf('.', lastDot - 1); + if (precLastDot == -1) + return null; + if (!fileName.substring(precLastDot + 1, lastDot).toUpperCase().equals("CLASS")) + return null; + return fileName.substring(0, precLastDot); + } + + /** + * We will initialize file contents for a class + * + * @param className + * the classname + */ + private InputStream openContentStreamClass(final String className) { StringBuffer contents = new StringBuffer(""); + contents.append("class "); + contents.append(className); + contents.append(" {\n\n"); + contents.append(" function "); + contents.append(className); + contents.append("() {\n"); + contents.append(" }\n}\n?>"); return new ByteArrayInputStream(contents.toString().getBytes()); } + /** + * We will initialize file contents with a sample text. + */ + private InputStream openContentStream(String fileName) { + try { + Template template = PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(CodeTemplateContextType.NEWTYPE); + if (template == null) { + return null; + } + String lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ + CodeTemplateContext context = new CodeTemplateContext(template.getContextTypeId(), null, lineDelimiter); + context.setFileNameVariable(fileName); + String content=StubUtility.evaluateTemplate(context, template); + if (content==null) { + content=""; + } + return new ByteArrayInputStream(content.getBytes()); + } catch (CoreException e) { + e.printStackTrace(); + return null; + } + + } + private void throwCoreException(String message) throws CoreException { IStatus status = new Status(IStatus.ERROR, "net.sourceforge.phpeclipse.wizards", IStatus.OK, message, null); throw new CoreException(status); } /** - * We will accept the selection in the workbench to see if - * we can initialize from it. + * We will accept the selection in the workbench to see if we can initialize from it. + * * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) */ public void init(IWorkbench workbench, IStructuredSelection selection) { @@ -159,10 +222,9 @@ public class PHPFileWizard extends Wizard implements INewWizard { } /** - * Sets the name of the file to create - * (used to set the class name in the new file) + * Sets the name of the file to create (used to set the class name in the new file) */ public void setFileName(String name) { - fileName = name; + fFileName = name; } } \ No newline at end of file