Expand my Community achievements bar.

Guidelines for the Responsible Use of Generative AI in the Experience Cloud Community.
SOLVED

Get video path

Avatar

Level 4

Hi,

I am trying to create a Video Component, that will look like Image component(just drag and drop the asset).

This is how I build the dialog:

<video
                                                jcr:primaryType="nt:unstructured"
                                                sling:resourceType="cq/gui/components/authoring/dialog/fileupload"
                                                autoStart="{Boolean}false"
                                                class="cq-droptarget"
                                                fieldLabel="Image asset"
                                                fileNameParameter="./fileName"
                                                fileReferenceParameter="./fileReference"
                                                mimeTypes="[video/quicktime]"
                                                multiple="{Boolean}false"
                                                name="./video"
                                                title="Upload Image Asset"
                                                uploadUrl="${suffix.path}"
                                                useHTML5="{Boolean}true"/>

But, I can not return the path from the java model.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

@AD-EngineerCan you try this:

Remove ValueMapValue annotation and add below method

@PostConstruct
protected void initModel() {
   video = componentResource.getValueMap().get("fileReference", String.class);
}

View solution in original post

11 Replies

Avatar

Community Advisor

Hi @AD-Engineer 

 

Can you try the dailog field as a path field rather than the fileupload?

 

Thanks,
Kiran Vedantam

Avatar

Community Advisor

Hi @AD-Engineer ,

           You need to used filereference in sling model to access the path of video.

 

Regards,

Sanjay

Avatar

Level 4

@Sanjay_Bangar yes but how?

this is my method:

 public String getVideo() {
        return video;
    }

It is not returning anything

Avatar

Community Advisor

Hi @AD-Engineer, could you please share part of code responsible for video variable initialization,. How video value is set in you sling model?

Avatar

Community Advisor

@AD-Engineer 

Ok, so assuming that video variable represents path to asset, I would suggest to do following change in your code

    @ValueMapValue(name = "fileReference")
    private String video;

Current behavior is correct because video is not representing any specific property in the repository it's defining node name.

Avatar

Level 4

@lukasz-m thanks!

Tried it, but still not working. It does not return anything.

Avatar

Community Advisor

@AD-Engineer Could you please share the entire sling model source code?

Avatar

Level 4

@lukasz-m 

@Model(
        adaptables = {SlingHttpServletRequest.class},
        adapters = {VideoComp.class},
        resourceType = {ResourceType.Constants.VIDEO_COMP},
        defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
)

@Slf4j
public class VideoCompImpl implements VideoComp {

    @Inject
    Resource componentResource;
    
    @OSGiService
    private ModelFactory modelFactory;

    @Self
    private SlingHttpServletRequest request;

    @ValueMapValue(name = "fileReference") 
    private String video;


    @Override
    public boolean isEmpty() {
        return false;
    }


    @Override
    public String getVideo() {
        return video;
    }


    
}

Avatar

Correct answer by
Community Advisor

@AD-EngineerCan you try this:

Remove ValueMapValue annotation and add below method

@PostConstruct
protected void initModel() {
   video = componentResource.getValueMap().get("fileReference", String.class);
}