2016-08-05 47 views
0

ich eine Vorlage als org.eclipse.jface.text.templates.Template haben:Eclipse-Plugin - Programatically erstellen Datei aus Vorlage

Template template = new Template(name, description, contextTypeId, pattern, true); 

oder besser die org.eclipse.cdt.core.model.Template:

Template template = new Template(templateString); 

Oder lassen sie uns sagen, dass die Vorlage bereits in den Voreinstellungen ist -> C/C++ -> Code-Style -> Code-Vorlagen und ich kann es direkt erhalten von dort.

Jetzt möchte ich daraus eine Datei erstellen, wie, wie Sie im Assistenten tun, aber programmatisch:

IFile mainTestFile = testFolder.getFile(resource.getName() + ".myfile"); 
    if (!mainTestFile.exists()) { 
     mainTestFile.create(template, true, null); 
    } 

Leider funktioniert es nur für Input nicht für Vorlage.

Wie kann ich programmatisch eine Datei in einem Eclipse-Projekt aus einer Vorlage erstellen, die ich habe?

+1

Welche 'Template'-Klasse ist das? –

+0

org.eclipse.jface.text.templates.Template; –

+0

Von welchem ​​Zauberer sprichst du? Die Verwendung einer Vorlage erfordert normalerweise einen 'TemplateContext' und einen' TemplateContextType'. –

Antwort

0

Ok, so wie ich es tat, vielleicht ein bisschen unlogisch erscheinen, aber es funktionierte:

Zuerst Sie eine Klasse benötigen, die das CDT NewSourceFileCreationWizardPage erstreckt. Überladen Sie dann die createFile-Methode, um eine org.eclipse.jface.text.templates.Template zu verwenden, die Sie selbst definieren. Der Vorlagencode wird in eine Zeichenfolge eingegeben, die aus einer Ressourcendatei erhalten werden kann.

 Template myTemplate = new Template("My Template", "My Template for file", "com.my.template.contenttype.contenttype_context", templateString, true); 

     MyNewFileWizardPage myTemplateWizard = new MyNewFileWizardPage(); 

     mainTestFile = myTemplateWizard.createMyFile(myTemplate, mainTestFile.getLocation(), null); 

und die benutzerdefinierten neue Datei Assistentenseite:

class MyNewFileWizardPage extends NewSourceFileCreationWizardPage{ 

    private ITranslationUnit fNewFileTU = null; 

    @SuppressWarnings("restriction") 
    public IFile createMyFile(Template template, IPath filePath, IProgressMonitor monitor) throws CoreException { 
    if (filePath != null) { 
     if (monitor == null) 
      monitor = new NullProgressMonitor(); 
     try { 
      fNewFileTU = null; 
      IFile newFile = NewSourceFileGenerator.createSourceFile(filePath, true, monitor); 
      if (newFile != null) { 
       fNewFileTU = (ITranslationUnit) CoreModel.getDefault().create(newFile); 
       if (fNewFileTU != null) { 
        String lineDelimiter = StubUtility.getLineDelimiterUsed(fNewFileTU); 
        String content = CodeGeneration.getBodyFileContent(template, fNewFileTU, null, null, lineDelimiter); 
        if (content != null) { 
         fNewFileTU.getBuffer().setContents(content.toCharArray()); 
         fNewFileTU.save(monitor, true); 
         return newFile; 
        } 
       } 
      } 
     } finally { 
      monitor.done(); 
     } 
    } 
    return null; 
    } 
} 

Dann mit dem erstellten IFile können Sie es weiter modifizieren, wenn Sie etwas in ihm verändert werden sollen.