Package org.jibeframework.contentmanager.dataprovider

Source Code of org.jibeframework.contentmanager.dataprovider.SearchResultsModel

package org.jibeframework.contentmanager.dataprovider;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.alfresco.model.ContentModel;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.util.ISO9075;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.jibeframework.alfresco.node.CMFolder;
import org.jibeframework.alfresco.node.CMObject;
import org.jibeframework.alfresco.service.RepositoryService;
import org.jibeframework.alfresco.util.AlfrescoUtil;
import org.jibeframework.alfresco.util.SearchContext;
import org.jibeframework.core.data.model.DataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;

@Component("jibe.repo.SearchResultsModel")
@Scope(value = "conversation", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SearchResultsModel extends DataModel<CMObject> implements Serializable {

  private static final long serialVersionUID = 1L;
  public final static String BEAN_ID = "jibe.repo.SearchResultsModel";
  @Autowired
  private RepositoryService repositoryService;
  @Autowired
  private ServiceRegistry serviceRegistry;

  private String query;

  public void refreshEntry(CMObject node) {
    getModel().remove(node);
    node = repositoryService.fetch(CMObject.class, node.getNodeRef());
    getModel().add(node);
  }

  @Override
  public void reloadModel() {
    // TODO Auto-generated method stub

  }

  public void search(CMFolder folder, String expr, int searchMode) {
    SearchContext sc = new SearchContext();
    sc.setLocation(getPathFromSpaceRef(folder.getNodeRef(), true));
    sc.setText(expr);
    sc.setMode(searchMode);
    SearchParameters sp = new SearchParameters();
    sp.setLanguage(SearchService.LANGUAGE_LUCENE);
    query = sc.buildQuery(3);
    sp.setQuery(query);
    sp.addStore(AlfrescoUtil.getInstance().getStoreRef());
    List<CMObject> model = new ArrayList<CMObject>();
    ResultSet rs = null;
    try {
      rs = serviceRegistry.getSearchService().query(sp);
      for (ResultSetRow row : rs) {
        NodeRef nodeRef = row.getNodeRef();
        if (serviceRegistry.getNodeService().exists(nodeRef)) {
          model.add(repositoryService.fetch(CMObject.class, nodeRef));
        }
      }
    } finally {
      if (rs != null) {
        rs.close();
      }
    }
    CollectionUtils.filter(model, new Predicate() {
      public boolean evaluate(Object object) {
        return !((CMObject) object).hasAspect(ContentModel.ASPECT_WORKING_COPY);
      }
    });
    this.setModel(model);

  }

  @SuppressWarnings("unchecked")
  private String getPathFromSpaceRef(NodeRef ref, boolean children) {
    Path path = serviceRegistry.getNodeService().getPath(ref);
    NamespaceService ns = serviceRegistry.getNamespaceService();
    StringBuilder buf = new StringBuilder(64);
    for (int i = 0; i < path.size(); i++) {
      String elementString = "";
      Path.Element element = path.get(i);
      if (element instanceof Path.ChildAssocElement) {
        ChildAssociationRef elementRef = ((Path.ChildAssocElement) element).getRef();
        if (elementRef.getParentRef() != null) {
          Collection prefixes = ns.getPrefixes(elementRef.getQName().getNamespaceURI());
          if (prefixes.size() > 0) {
            elementString = '/' + (String) prefixes.iterator().next() + ':'
                + ISO9075.encode(elementRef.getQName().getLocalName());
          }
        }
      }

      buf.append(elementString);
    }
    if (children == true) {
      // append syntax to get all children of the path
      buf.append("//*");
    } else {
      // append syntax to just represent the path, not the children
      buf.append("/*");
    }
    return buf.toString();
  }

  @Override
  public void refreshEntry(String entryId) {
    StringBuffer b = new StringBuffer(this.query);
    b.append(String.format(" +ID:\"%1$s\"", entryId));
    List<NodeRef> l = AlfrescoUtil.getInstance().getResultSet(b.toString());
    removeEntry(entryId);
    if (!l.isEmpty()) {
      CMObject o = repositoryService.fetch(CMObject.class, new NodeRef(entryId));
      getModel().add(o);
    }
  }

  @Override
  protected void removeEntry(final String entryId) {
    CollectionUtils.filter(this.getModel(), new Predicate() {
      public boolean evaluate(Object object) {
        CMObject o = (CMObject) object;
        return !o.getNodeRef().toString().equals(entryId);
      }
    });

  }
 

}
TOP

Related Classes of org.jibeframework.contentmanager.dataprovider.SearchResultsModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.