2016-08-05 63 views
0

創建文件我有一個模板org.eclipse.jface.text.templates.Template:Eclipse插件 - 編程方式從模板

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

或更好的org.eclipse.cdt.core.model.Template:

Template template = new Template(templateString); 

還是讓我們說,模板已經在首選項 - > C/C++ - >代碼樣式 - >代碼模板,我可以直接從那裏得到它。

現在我想從它創建像你的嚮導,但編程怎麼辦文件:

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

不幸的是它僅適用於InputStream的不是模板。

那麼如何以編程方式在我有的模板的eclipse項目中創建一個文件?

+1

哪個'Template'類是這個? –

+0

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

+0

你在說什麼巫師?使用模板通常需要一個'TemplateContext'和一個'TemplateContextType'。 –

回答

0

好了,所以我做到了,似乎有點直覺相反,但它的工作方式:

首先,你需要一個擴展CDT NewSourceFileCreationWizardPage類。然後重載createFile方法以使用您自己定義的org.eclipse.jface.text.templates.Template。模板代碼將以可從資源文件獲取的字符串形式顯示。

 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); 

而定製的新文件嚮導頁:

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; 
    } 
} 

然後與創建的IFile您可以進一步修改它,如果你想要的東西在它改變。

相關問題