Uploaded image for project: 'Forge'
  1. Forge
  2. FORGE-2245

ResourceFactory : creating a resource from a file

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Major
    • None
    • 2.13.1.Final
    • Resources
    • None
    • Hide
      import java.io.File;
      import java.net.URL;
      import java.util.HashMap;
      import java.util.Map;
      
      import javax.inject.Inject;
      
      import org.jboss.forge.addon.resource.FileResource;
      import org.jboss.forge.addon.resource.Resource;
      import org.jboss.forge.addon.resource.ResourceFactory;
      import org.jboss.forge.addon.templates.Template;
      import org.jboss.forge.addon.templates.TemplateFactory;
      import org.jboss.forge.addon.templates.freemarker.FreemarkerTemplate;
      import org.jboss.forge.addon.ui.command.AbstractUICommand;
      import org.jboss.forge.addon.ui.context.UIBuilder;
      import org.jboss.forge.addon.ui.context.UIContext;
      import org.jboss.forge.addon.ui.context.UIExecutionContext;
      import org.jboss.forge.addon.ui.metadata.UICommandMetadata;
      import org.jboss.forge.addon.ui.result.Result;
      import org.jboss.forge.addon.ui.result.Results;
      import org.jboss.forge.addon.ui.util.Categories;
      import org.jboss.forge.addon.ui.util.Metadata;
      
      public class FileAddon extends AbstractUICommand {
      
      	@Inject
      	private TemplateFactory tfactory;
      	@Inject
      	private ResourceFactory rfactory;
      
      	@Override
      	public UICommandMetadata getMetadata(UIContext context) {
      		return Metadata.forCommand(FileAddon.class).name("readVoila")
      				.category(Categories.create("test"));
      	}
      
      	@Override
      	public void initializeUI(UIBuilder builder) throws Exception {
      	}
      
      	@Override
      	public Result execute(UIExecutionContext context) throws Exception {
      		URL voilaURL = getClass().getClassLoader().getResource("voila.txt");
      		File f = new File(voilaURL.toExternalForm());
      		// Resource<?> fresource = rfactory.create(f);
      		FileResource fresource = rfactory.create(FileResource.class, f);
      		Template template = null;
      		
      		try {
      			template = tfactory.create(fresource, FreemarkerTemplate.class);
      		} catch (Exception e) {
      			e.printStackTrace();
      			return Results.fail( e.getMessage() );
      		}
      		assert(template!=null);
      		Map<String, Object> params = new HashMap<String, Object>();
      
      		params.put("slogan", "JBoss Forge c'est bon mangez en");
      		String output = template.process(params);		
      		return Results.success(output+ " Command 'lireFichier' successfully executed!");
      	}
      }
      
      Show
      import java.io.File; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.inject.Inject; import org.jboss.forge.addon.resource.FileResource; import org.jboss.forge.addon.resource.Resource; import org.jboss.forge.addon.resource.ResourceFactory; import org.jboss.forge.addon.templates.Template; import org.jboss.forge.addon.templates.TemplateFactory; import org.jboss.forge.addon.templates.freemarker.FreemarkerTemplate; import org.jboss.forge.addon.ui.command.AbstractUICommand; import org.jboss.forge.addon.ui.context.UIBuilder; import org.jboss.forge.addon.ui.context.UIContext; import org.jboss.forge.addon.ui.context.UIExecutionContext; import org.jboss.forge.addon.ui.metadata.UICommandMetadata; import org.jboss.forge.addon.ui.result.Result; import org.jboss.forge.addon.ui.result.Results; import org.jboss.forge.addon.ui.util.Categories; import org.jboss.forge.addon.ui.util.Metadata; public class FileAddon extends AbstractUICommand { @Inject private TemplateFactory tfactory; @Inject private ResourceFactory rfactory; @Override public UICommandMetadata getMetadata(UIContext context) { return Metadata.forCommand(FileAddon.class).name( "readVoila" ) .category(Categories.create( "test" )); } @Override public void initializeUI(UIBuilder builder) throws Exception { } @Override public Result execute(UIExecutionContext context) throws Exception { URL voilaURL = getClass().getClassLoader().getResource( "voila.txt" ); File f = new File(voilaURL.toExternalForm()); // Resource<?> fresource = rfactory.create(f); FileResource fresource = rfactory.create(FileResource.class, f); Template template = null ; try { template = tfactory.create(fresource, FreemarkerTemplate.class); } catch (Exception e) { e.printStackTrace(); return Results.fail( e.getMessage() ); } assert (template!= null ); Map< String , Object > params = new HashMap< String , Object >(); params.put( "slogan" , "JBoss Forge c'est bon mangez en" ); String output = template.process(params); return Results.success(output+ " Command 'lireFichier' successfully executed!" ); } }

    Description

      As I was trying to use a file contained in the JAR of my addon, I used this (intuitive) code

      URL voilaURL = getClass().getClassLoader().getResource("voila.txt");
      File f = new File(voilaURL.toExternalForm());

      Resource<?> resource = rfactory.create(f); // KO
      FileResource fresource = rfactory.create(FileResource.class, f); // KO

      both last two line lead to a FileResource which, in debug is displayed as this form
      [PROJECT_ROOT][Correct full path of file in jar]

      D:\workspace_addons\ADDONS\jar:file:\C:\Users\me\.forge\addons\fr-company-addons-ADDONS213b-1-0-1-SNAPSHOT\ADDONS213b-1.0.1-SNAPSHOT-forge-addon.jar!\voila.txt

      Then, those FileResources when used with the templateFactory
      Template template = tfactory.create(resource,FreemarkerTemplate.class);

      lead to an error like "template does not exist"

      Hint?: The toString value is wrong but the path of the file within FileResource is ok

      See https://developer.jboss.org/thread/252367 for more data

      Attachments

        Activity

          People

            Unassigned Unassigned
            alwad_jira Jerome B (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: