Re: Use file templates inside a project template
geertjan wielenga <[email protected]> Wed, 5 Jul 2017 13:06:51 +0200
| Newsgroups | gmane.comp.java.netbeans.modules.openide.devel |
|---|---|
| Organization | Oracle Corporation |
| Message-ID | <[email protected]> |
Sounds like your TemplateRegistration was wrong, somehow. Those
annotations end up in the generated-layer.xml file.
Gj
On 5-7-2017 13:04, Iñigo Huguet wrote:
>
> OK, thanks!
>
> I will wait for you to take a look, and I will try to find it by
> myself, as well.
>
>
> El 05/07/17 a las 12:38, geertjan wielenga escribió:
>>
>>
>> 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.
>>>
>>
>
> --
> 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.
>