Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
 private final static String XpathData = "//*[((@jcr:primaryType='slideshow-resource') or (@jcr:primaryType='video-resource'))]";


    /* (non-Javadoc)
     * @see info.magnolia.commands.MgnlCommand#execute(info.magnolia.context.Context)
     */
    @Override
    public boolean execute(Context context) throws Exception {

        Session session = context.getJCRSession("data");
        QueryManager qm = session.getWorkspace().getQueryManager();
        Query query = qm.createQuery(XpathData, "xpath");
        NodeIterator nodeIt = query.execute().getNodes();
        
        
        /**
         * This call is important since we ask access to the search provider instance
         * 
         */
        SearchService<?, ?, ?, String> svc = EsUtil.getProviderInstance();

        while(nodeIt.hasNext()){
            Node current = nodeIt.nextNode();
            Map<String,String>things = this.prepareThings(current, session);
            if(things!=null){
                svc.addUpdate(RepositoryEntries.DAM.name(), things);
            }
        }


        return true;
    }

    private Map<String,String> prepareThings(Node current,Session session){

        Map<String,String>things = new HashMap<String,String>();
        ContentMap mp = new ContentMap(current);
        Map<String,List<String>> categorySet = extractCategories(((String[])mp.get("categories")),session);
        //put categories
        /**
         * Here we already give the correct syntax for usage with solr, 
         * This is not ok since this class should be agnostic, we can overcome this by creating a generic format and converters for each format in the provider package's logic  
         * 
         */
        for(String facet:categorySet.keySet()){
            things.put("literal.category_"+facet,StringUtils.join(categorySet.get(facet),","));
        }
        String abstrakt = (String)mp.get("abstract");
        things.put("literal.abstract", abstrakt);
        String itemType = (String) mp.get("itemtype");
        things.put("literal.type", itemType);
        String link = (String) mp.get("link");
        things.put("literal.htmllink", link);
        String url = extractURL(link);
        things.put("literal.url", url);
        String id=null;
        try {
            id = URLEncoder.encode(url,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            log.warn("could not encode id"+e.getMessage());
            return null;
        }
        things.put("literal.id", id);
        String name = (String) mp.get("name");
        things.put("literal.title", name);
        log.debug(name+"<======>"+url+"<=====>"+StringUtils.join(categorySet.values(),"-"));
        //cr:lastModified,width,nodeDataTemplate,jcr:data,depth,jcr:uuid,size,extension,id,height,name,path,jcr:mimeType,fileName,nodeType,jcr:primaryType
        String thumbnail = (String) ((ContentMap)mp.get("thumbnail")).get("name");
        log.debug("node's thumbnail name:"+thumbnail);

        return things;
    }

    private String extractURL(String link) {
        Pattern p = Pattern.compile("href=\"([^\"]*)\"|src=\"([^\"]*)\"", Pattern.DOTALL);
        Matcher m = p.matcher(link);
        String url = null;
        if (m.find()) {
            for(int i=0;i<m.groupCount();i++){
               if(m.group(i)!=null){
                   int a = m.group(i).indexOf("http");
                   url = m.group(i).substring(a);
                   url = url.replaceAll("\"", "");
               }
          }
        }
        if(url==null){
            if(link.startsWith("http")){
                url=link;
            }
        }
        return url;
    }

    private Map<String,List<String>> extractCategories(String [] nodes,Session session){
        Map<String,List<String>> categorySet = new HashMap<String,List<String>>();

        for(String nodeId:nodes){
            Node category;
            try {
                category = session.getNodeByIdentifier(nodeId);
                String facet = category.getParent().getName();
                String tag = category.getName();
                if(categorySet.containsKey(facet)){
                    categorySet.get(facet).add(tag);
                }else{
                    List<String>values=new ArrayList<String>();
                    values.add(tag);
                    categorySet.put(facet, values);
                }
            } catch (ItemNotFoundException e) {
                log.warn(e.getMessage() + " not found as category");
            } catch (RepositoryException e) {
                log.error(e.getMessage());
            }

        }
        return categorySet;
    }