Package org.jibeframework.contentmanager.service.impl

Source Code of org.jibeframework.contentmanager.service.impl.AlfrescoServiceImpl

package org.jibeframework.contentmanager.service.impl;

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

import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentWriter;
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.cmr.version.Version;
import org.alfresco.service.cmr.version.VersionHistory;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
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.contentmanager.service.AlfrescoService;
import org.jibeframework.core.util.Content;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AlfrescoServiceImpl implements AlfrescoService {
  @Autowired
  private ServiceRegistry serviceRegistry;
  @Autowired
  private RepositoryService repositoryService;

  public void createFolder(String name, QName type, NodeRef parent, Map<String, Object> data) {
    FileInfo fileInfo = serviceRegistry.getFileFolderService().create(parent, name, type);
    NodeRef nodeRef = fileInfo.getNodeRef();
    serviceRegistry.getNodeService().addAspect(nodeRef, ApplicationModel.ASPECT_UIFACETS, null);
    Map<QName, Serializable> properties = serviceRegistry.getNodeService().getProperties(nodeRef);
    for (String key : data.keySet()) {
      properties.put(QName.createQName(key, serviceRegistry.getNamespaceService()), (Serializable) data.get(key));
    }
    serviceRegistry.getNodeService().setProperties(nodeRef, properties);

  }

  public void createDocument(NodeRef folderRef, Content content) {
    String fileName = content.getName();
    FileInfo fileInfo = serviceRegistry.getFileFolderService().create(folderRef, fileName,
        ContentModel.TYPE_CONTENT);
    NodeRef fileNodeRef = fileInfo.getNodeRef();
    serviceRegistry.getNodeService().addAspect(fileNodeRef, ContentModel.ASPECT_AUTHOR, null);
    serviceRegistry.getNodeService().addAspect(fileNodeRef, ContentModel.ASPECT_TITLED, null);
    Map<QName, Serializable> props = serviceRegistry.getNodeService().getProperties(fileNodeRef);
    props.put(ContentModel.PROP_CREATED, new Date());
    String currentUserName = serviceRegistry.getAuthenticationService().getCurrentUserName();
    props.put(ContentModel.PROP_CREATOR, currentUserName);
    props.put(ContentModel.PROP_AUTHOR, currentUserName);
    props.put(ContentModel.PROP_OWNER, currentUserName);
    serviceRegistry.getNodeService().setProperties(fileNodeRef, props);
    ContentWriter writer = serviceRegistry.getContentService().getWriter(fileNodeRef, ContentModel.PROP_CONTENT,
        true);
    String mimeType = serviceRegistry.getMimetypeService().guessMimetype(fileName);
    writer.setMimetype(mimeType);
    writer.setEncoding(content.getEncoding());
    writer.putContent(content.getInputStream());
  }

  public List<String> getPath(NodeRef nodeRef) {
    List<String> model = new ArrayList<String>();
    model.add("rootNodeId");
    NodeRef companyHome = AlfrescoUtil.getInstance().getCompanyHome();
    model.add(companyHome.toString());
    List<FileInfo> fis = null;
    try {
      fis = serviceRegistry.getFileFolderService().getNamePath(companyHome, nodeRef);
    } catch (Exception e) {
      return model;
    }
    for (FileInfo fi : fis) {
      model.add(fi.getNodeRef().toString());
    }
    return model;

  }

  public String getPathByName(NodeRef nodeRef) {
    StringBuilder b=new StringBuilder("/Root/Company Home");
    NodeRef companyHome = AlfrescoUtil.getInstance().getCompanyHome();
    List<FileInfo> fis = null;
    try {
      fis = serviceRegistry.getFileFolderService().getNamePath(companyHome, nodeRef);
    } catch (Exception e) {
      return b.toString();
    }
    for (FileInfo fi : fis) {
      b.append("/");
      b.append(fi.getName());
    }
    return b.toString();

  }

  public List<CMObject> getFolderChildren(CMFolder folder) {
    List<CMObject> children = folder.getChildren(null);
    CollectionUtils.filter(children, new Predicate() {
      public boolean evaluate(Object object) {
        return !((CMObject) object).hasAspect(ContentModel.ASPECT_WORKING_COPY);
      }
    });
    return children;
  }

  public List<CMObject> getVersionHistory(NodeRef nodeRef) {
    List<CMObject> versions = new ArrayList<CMObject>();
    VersionHistory versionHistory = serviceRegistry.getVersionService().getVersionHistory(nodeRef);
    if (versionHistory != null) {
      for (Version version : versionHistory.getAllVersions()) {
        CMObject doc = repositoryService.fetch(CMObject.class, version.getFrozenStateNodeRef());
        versions.add(doc);
      }
    }
    return versions;
  }

  public List<CMObject> 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);
    String buildQuery = sc.buildQuery(3);
    sp.setQuery(buildQuery);
    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);
      }
    });
    return 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();
  }

}
TOP

Related Classes of org.jibeframework.contentmanager.service.impl.AlfrescoServiceImpl

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.