2016-10-25 3 views
0

У меня есть требование, чтобы ограничить типы файлов при использовании поля touchUI,способ ограничить тип файла в AEM pathBrowser

гранит/щ/компоненты/фундамент/форма/pathbrowser.

Существует функция для pathfield,

регулярное выражение:./(PNG | JPG | JPEG) $ /, regexText: "Пожалуйста, выберите правильный файл"

, который не работает для pathBrowser, Поле TouchUI.

Любые предложения?

ответ

0

Я создал класс предикат на OSGI комплектацией, где он ограничивает типы файлов. Класс java,

package com.mec.core.utils; 

import com.day.cq.commons.predicate.AbstractResourcePredicate; 
import org.apache.commons.collections.Predicate; 
import org.apache.felix.scr.annotations.Component; 
import org.apache.felix.scr.annotations.Properties; 
import org.apache.felix.scr.annotations.Property; 
import org.apache.felix.scr.annotations.Service; 
import org.apache.sling.api.resource.Resource; 
import org.apache.sling.api.resource.ValueMap; 


@Component(label = "Dam Image Predicate", 
description = "This predicate is used to display only JPG and PNG files in the pathfield") 
@Service(value = Predicate.class) 
@Properties({@Property(label = "Predicate Name", name = "predicate.name", value = "damimagepredicate", 
propertyPrivate = true)}) 
public class DamImagePredicate extends AbstractResourcePredicate { 
    private static final String REP_ACL = "rep:ACL"; 
    private static final String JCR_CONTENT = "jcr:content"; 
    private static final String JCR_PRIMARYTYPE = "jcr:primaryType"; 
    private static final String DAM_ASSET = "dam:Asset"; 
    private static final String PNG = ".png"; 
    private static final String JPG = ".jpg"; 
    private static final String JPEG = ".jpeg"; 
    @Override 
    public boolean evaluate(Resource resource) { 
     if(null!= resource){ 
        ValueMap valueMap = resource.getValueMap(); 
        String primaryType = valueMap.get(JCR_PRIMARYTYPE,String.class); 
        if(null!=primaryType && !primaryType.isEmpty()){ 
         if(primaryType.equalsIgnoreCase(REP_ACL)){ 
          return false; 
         } 
         if(resource.getName().equalsIgnoreCase(JCR_CONTENT)){ 
          return false; 
         } 
         if(primaryType.equalsIgnoreCase(DAM_ASSET)){ 
          String resourceName = resource.getName(); 
          if(null!=resourceName && !resourceName.isEmpty()){ 
           if(resourceName.lastIndexOf(".")>-1){ 
            String extension = resourceName.substring(resourceName.lastIndexOf("."), resourceName.length()); 
            if(null!=extension && !extension.isEmpty()){ 
             if(extension.equalsIgnoreCase(PNG) || extension.equalsIgnoreCase(JPG) || extension.equalsIgnoreCase(JPEG)){ 
              return true; 
             }else{ 
              return false; 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
     return true; 
    } 

} 
+0

Вы можете сделать ограничение на стороне клиента в компоненте пользовательского интерфейса Touch, чтобы запретить пользователю публиковать другие типы файлов. Я бы не предложил создать что-то подобное для вашего случая использования. –

+0

Ограничение на стороне клиента связано с «регулярным выражением», что тоже для классического интерфейса. Я не нашел таких решений для TouchUI. Пожалуйста, предложите мне, если таковые имеются. @RajeshPantula –