Re: Use file templates inside a project template

geertjan wielenga <[email protected]> Wed, 5 Jul 2017 12:38:23 +0200
Newsgroups gmane.comp.java.netbeans.modules.openide.devel
Organization Oracle Corporation
Message-ID <[email protected]>
OK, so now that it works, it's not a high priority for me, right now. 
Will take a look at some point.

Gj


On 5-7-2017 11:43, Iñigo Huguet wrote:
>
> I had registered it in the TemplateRegistration annotation, but not in 
> the layer.xml file.
>
> I just added '<attr name="javax.script.ScriptEngine" 
> stringvalue="freemarker"/>' in the layer.xml file and now it's working.
>
> I can continue now. However, I would like to understand why it wasn't 
> working, what I was doing wrong? What are the TemplateRegistration 
> annotations for?
>
> Note: look to the explanation in my first message, not the github 
> code, which is not complete
>
> Thanks
>
>
> El 05/07/17 a las 11:13, geertjan wielenga escribió:
>>
>>
>> Do you have your file template registered as FreeMarker"
>>
>>                         <attr name="javax.script.ScriptEngine" 
>> stringvalue="freemarker"/>
>>
>> See:
>>
>> https://blogs.oracle.com/geertjan/registering-freemarker-templates-in-netbeans-ide-71
>>
>> Thanks,
>>
>> Gj
>>
>> On 5-7-2017 10:56, geertjan wielenga wrote:
>>>
>>> Maybe take a look at this:
>>>
>>> https://blogs.oracle.com/geertjan/extension-to-extended-java-project-part-2
>>>
>>> Gj
>>>
>>>
>>> On 5-7-2017 10:33, Iñigo Huguet wrote:
>>>>
>>>> Hi.
>>>>
>>>> I just created a new module project following this tutorial: 
>>>> https://platform.netbeans.org/tutorials/nbm-projectsamples.html
>>>>
>>>> I uploaded it to github, here: 
>>>> https://github.com/naggety/Netbeans-MyCustomProjType
>>>>
>>>> This is just a custom template C/C++ project. Inside the zip file 
>>>> of the project template, there is a 'main.c' file that I need to be 
>>>> processed by freemarker when the new project is created (this way, 
>>>> the text '${user}' in the file will be replaced with the user 
>>>> name). I tried to achieve this in the way I described in my first 
>>>> message, but it didn't work.
>>>>
>>>> As I said, there is a tutorial about file templates, but not for 
>>>> file templates inside project templates nor for processing file 
>>>> templates programmatically.
>>>>
>>>> In addition, but less important for the moment, when I install the 
>>>> module from tools->plugins it says that the installation was 
>>>> unsuccessful. However, if I restart the IDE, the module is 
>>>> installed and working.
>>>>
>>>>
>>>> El 04/07/17 a las 11:29, geertjan wielenga escribió:
>>>>>
>>>>> Best is to create a small application on GitHub containing a 
>>>>> simple scenario and then to say what kind of help you'd need in 
>>>>> the context of that scenario.
>>>>>
>>>>> Gj
>>>>>
>>>>>
>>>>> On 4-7-2017 8:55, Iñigo Huguet wrote:
>>>>>> There isn't a way to get a file, process it with freemarker and 
>>>>>> save it in another location?
>>>>>>
>>>>>>
>>>>>> El 28/06/17 a las 10:31, Iñigo Huguet escribió:
>>>>>>> Hi!
>>>>>>>
>>>>>>> I wan't to create a project template with some files that are 
>>>>>>> also template files. This template files contains some variables 
>>>>>>> like ${user} which must be replaced with the "user" variable value.
>>>>>>>
>>>>>>> I have followed this tutorial to create the project template: 
>>>>>>> https://platform.netbeans.org/tutorials/nbm-projectsamples.html
>>>>>>>
>>>>>>> However, I don't know how to get the template files to be 
>>>>>>> processed with freemarker template engine, despite being trying 
>>>>>>> for 3 days. I haven't found any information about how to do what 
>>>>>>> I want (only info about project templates and file templates, 
>>>>>>> but no one of both together).
>>>>>>>
>>>>>>> This is what I have tried:
>>>>>>>
>>>>>>> First, I modified the 'instantiate' method of the wizard 
>>>>>>> iterator to process the template files:
>>>>>>> [code]
>>>>>>>     public Set/*<FileObject>*/ instantiate(/*ProgressHandle 
>>>>>>> handle*/) throws IOException {
>>>>>>>         Set<FileObject> resultSet = new 
>>>>>>> LinkedHashSet<FileObject>();
>>>>>>>         File dirF = FileUtil.normalizeFile((File) 
>>>>>>> wiz.getProperty("projdir"));
>>>>>>>         dirF.mkdirs();
>>>>>>>
>>>>>>>         FileObject template = Templates.getTemplate(wiz);
>>>>>>>         FileObject dir = FileUtil.toFileObject(dirF);
>>>>>>>         unZipFile(template.getInputStream(), dir);
>>>>>>>
>>>>>>>         ///// ADDED CODE
>>>>>>>         FileObject templ = 
>>>>>>> FileUtil.getSystemConfigFile("ADDITIONALSAMPLE_INIGO/templates/main.c"); 
>>>>>>>
>>>>>>>         Map<String, String> attrs = new HashMap<>();
>>>>>>>         attrs.put("javax.script.ScriptEngine", "freemarker");
>>>>>>>         attrs.put("user", "myName");
>>>>>>>         FileBuilder.createFromTemplate(templ, dir, "main", 
>>>>>>> attrs, FileBuilder.Mode.FORMAT);
>>>>>>>         ///// END OF ADDED CODE
>>>>>>>
>>>>>>>
>>>>>>>         // Always open top dir as a project:
>>>>>>>         resultSet.add(dir);
>>>>>>>         // Look for nested projects to open as well:
>>>>>>>         Enumeration<? extends FileObject> e = dir.getFolders(true);
>>>>>>>         while (e.hasMoreElements()) {
>>>>>>>             FileObject subfolder = e.nextElement();
>>>>>>>             if (ProjectManager.getDefault().isProject(subfolder)) {
>>>>>>>                 resultSet.add(subfolder);
>>>>>>>             }
>>>>>>>         }
>>>>>>>
>>>>>>>         File parent = dirF.getParentFile();
>>>>>>>         if (parent != null && parent.exists()) {
>>>>>>>             ProjectChooser.setProjectsFolder(parent);
>>>>>>>         }
>>>>>>>
>>>>>>>         return resultSet;
>>>>>>>     }
>>>>>>> [/code]
>>>>>>>
>>>>>>>
>>>>>>> I modified the templateregistration annotation of the top of the 
>>>>>>> same file and let it like this:
>>>>>>> [code]
>>>>>>> @TemplateRegistrations(value = {
>>>>>>>     @TemplateRegistration(folder = "Project/My custom project", 
>>>>>>> displayName = "#customproj_displayName", description = 
>>>>>>> "customproj.html", iconBase = 
>>>>>>> "org/myplugins/additionalsample/MyCustomProject.png", content = 
>>>>>>> "MyCustomProject.zip", scriptEngine = "freemarker"),
>>>>>>>     @TemplateRegistration(folder = "Others", content = 
>>>>>>> "templates/main.c", scriptEngine = "freemarker")
>>>>>>> })
>>>>>>> [/code]
>>>>>>>
>>>>>>>
>>>>>>> And finally I created this layer.xml file:
>>>>>>> [code]
>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>> <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 
>>>>>>> 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
>>>>>>> <filesystem>
>>>>>>>     <folder name="ADDITIONALSAMPLE_INIGO">
>>>>>>>         <folder name="templates">
>>>>>>>             <file name="main.c" url="templates/main.c" />
>>>>>>>         </folder>
>>>>>>>     </folder>
>>>>>>> </filesystem>
>>>>>>> [/code]
>>>>>>>
>>>>>>> However, main.c file is copied as is, the text '${user}' in the 
>>>>>>> file is copied literally, not processed by freemarker.
>>>>>>>
>>>>>>> And also, the project is created in disk but it's not added to 
>>>>>>> the open projects.
>>>>>>>
>>>>>>> Hope anyone can help me.
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> Pagina nueva 1
>>>>
>>>> ------------------------------------------------------------------------
>>>> Fanamoel S.A. 	
>>>>
>>>> *P. I.  La Fuente, Nº 6*
>>>>
>>>> *31250 – Oteiza (Navarra)*
>>>>
>>>> *Tfno: +34 948 546 718*
>>>>
>>>> *Fax: +34 948 546 735*
>>>>
>>>> *Iñigo Huguet Embún *
>>>>
>>>> *D**epartamento Técnico*
>>>>
>>>> La información incluida en el presente correo electrónico y 
>>>> cualquier archivo adjunto al mismo están dirigidos exclusivamente a 
>>>> su destinatario. Pueden contener información confidencial o 
>>>> privilegiada. Si recibe esta comunicación sin ser el destinatario 
>>>> le informamos de que está prohibida cualquier utilización de la 
>>>> misma y le rogamos que nos lo notifique inmediatamente y la 
>>>> devuelva a su origen, asegurándose de que el mensaje original, 
>>>> cualquier copia relacionada con el mismo y sus archivos adjuntos 
>>>> sean eliminados de su sistema.
>>>>
>>>>
>>>> Asimismo, le informamos de que trataremos de forma confidencial su 
>>>> dirección de correo electrónico, así como el resto de los datos de 
>>>> carácter personal que nos facilite, y serán incluidos en un fichero 
>>>> del que FANAMOEL S.A., es titular y responsable. La finalidad del 
>>>> tratamiento será informarle y ofrecerle nuestros servicios. Vd. 
>>>> podrá ejercitar los derechos de acceso, rectificación, cancelación 
>>>> y oposición enviando un e-mail a la dirección arriba indicada.
>>>>
>>>
>>
>
> -- 
> Pagina nueva 1
>
> ------------------------------------------------------------------------
> Fanamoel S.A. 	
>
> *P. I.  La Fuente, Nº 6*
>
> *31250 – Oteiza (Navarra)*
>
> *Tfno: +34 948 546 718*
>
> *Fax: +34 948 546 735*
>
> *Iñigo Huguet Embún *
>
> *D**epartamento Técnico*
>
> La información incluida en el presente correo electrónico y cualquier 
> archivo adjunto al mismo están dirigidos exclusivamente a su 
> destinatario. Pueden contener información confidencial o privilegiada. 
> Si recibe esta comunicación sin ser el destinatario le informamos de 
> que está prohibida cualquier utilización de la misma y le rogamos que 
> nos lo notifique inmediatamente y la devuelva a su origen, 
> asegurándose de que el mensaje original, cualquier copia relacionada 
> con el mismo y sus archivos adjuntos sean eliminados de su sistema.
>
>
> Asimismo, le informamos de que trataremos de forma confidencial su 
> dirección de correo electrónico, así como el resto de los datos de 
> carácter personal que nos facilite, y serán incluidos en un fichero 
> del que FANAMOEL S.A., es titular y responsable. La finalidad del 
> tratamiento será informarle y ofrecerle nuestros servicios. Vd. podrá 
> ejercitar los derechos de acceso, rectificación, cancelación y 
> oposición enviando un e-mail a la dirección arriba indicada.
>