Page History
...
Code Block | ||
---|---|---|
| ||
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; } |
Overview
Content Tools