Re: Use file templates inside a project template

geertjan wielenga <[email protected]> Wed, 5 Jul 2017 11:13:19 +0200
Newsgroups gmane.comp.java.netbeans.modules.openide.devel
Organization Oracle Corporation
Message-ID <[email protected]>
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.
>>
>