Package com.github.dynamicextensionsalfresco.osgi

Source Code of com.github.dynamicextensionsalfresco.osgi.RepositoryStoreService

package com.github.dynamicextensionsalfresco.osgi;

import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
import org.alfresco.service.namespace.QName;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
* Provides operations for storing OSGi bundles and framework configuration in the repository.
*
* @author Laurens Fridael
*
*/
public class RepositoryStoreService {

  private static final String DEFAULT_BUNDLE_REPOSITORY_LOCATION = "/Company Home/Data Dictionary/Dynamic Extensions/Bundles";

  /* Dependencies */

  private NodeService nodeService;

  private NamespacePrefixResolver namespacePrefixResolver;

  private FileFolderService fileFolderService;

    private PermissionService permissionService;

  /* Configuration */

  private String baseFolderDescription;

  private String bundleFolderDescription;

  private String configurationFolderDescription;

  private String bundleRepositoryLocation = DEFAULT_BUNDLE_REPOSITORY_LOCATION;

  /* Main operations */

  public NodeRef getBaseFolder(final boolean createIfNotExists) {
    final QName name = qName("cm", "dynamic_extensions");
    final NodeRef dataDictionary = getDataDictionary();
    NodeRef nodeRef = getChildOf(dataDictionary, name);
    if (nodeRef == null && createIfNotExists) {
      nodeRef = createFolder(dataDictionary, name, "Dynamic Extensions", getBaseFolderDescription());
            permissionService.setInheritParentPermissions(nodeRef, false);
    }
    return nodeRef;
  }

  public NodeRef getBundleFolder(final boolean createIfNotExists) {
    final QName name = qName("cm", "bundles");
    final NodeRef baseFolder = getBaseFolder(createIfNotExists);
    NodeRef nodeRef = getChildOf(baseFolder, name);
    if (nodeRef == null && createIfNotExists) {
      nodeRef = createFolder(baseFolder, name, "Bundles", getBundleFolderDescription());
    }
    return nodeRef;
  }

  public NodeRef getConfigurationFolder(final boolean createIfNotExists) {
    final QName name = qName("cm", "configuration");
    final NodeRef baseFolder = getBaseFolder(createIfNotExists);
    NodeRef nodeRef = getChildOf(baseFolder, name);
    if (nodeRef == null && createIfNotExists) {
      nodeRef = createFolder(baseFolder, name, "Configuration", getConfigurationFolderDescription());
    }
    return nodeRef;
  }

  /**
   * Obtains information on the JAR files in the bundle folder.
   *
   * @return
   */
  public List<FileInfo> getBundleJarFiles() {
    final List<FileInfo> jarFiles = new ArrayList<FileInfo>();
    final NodeRef bundleFolder = getBundleFolder(false);
    if (bundleFolder != null) {
      for (final FileInfo file : getFileFolderService().listFiles(bundleFolder)) {
        if (file.getName().endsWith(".jar")) {
          jarFiles.add(file);
        }
      }
    }
    return jarFiles;
  }

  /* Utility operations */

  protected NodeRef getDataDictionary() {
    return getChildOf(getCompanyHome(), qName("app", "dictionary"));
  }

  protected NodeRef getCompanyHome() {
    return getChildOfRootNode(qName("app", "company_home"));
  }

  protected NodeRef createFolder(final NodeRef parentFolder, final QName qName, final String name,
      final String description) {
    return AuthenticationUtil.runAs(new RunAsWork<NodeRef>() {

      @Override
      public NodeRef doWork() throws Exception {
        final ChildAssociationRef childAssoc = nodeService.createNode(parentFolder,
            ContentModel.ASSOC_CONTAINS, qName, ContentModel.TYPE_FOLDER);
        if (childAssoc != null) {
          final NodeRef nodeRef = childAssoc.getChildRef();
          getNodeService().setProperty(nodeRef, ContentModel.PROP_NAME, name);
          if (StringUtils.hasText(description)) {
            getNodeService().setProperty(nodeRef, ContentModel.PROP_DESCRIPTION, description.trim());
          }
          return nodeRef;
        } else {
          return null;
        }
      }
    }, AuthenticationUtil.getSystemUserName());
  }

  /**
   * Obtains the child with the given association type, {@link QName} of the given node.
   *
   * @param nodeRef
   * @param assocName
   * @return the child with the given name or null if nodeRef is null
   */
  protected NodeRef getChildOf(final NodeRef nodeRef, final QName assocType, final QName assocName) {
    if (nodeRef == null) {
      return null;
    }
    final List<ChildAssociationRef> childAssocs = getNodeService().getChildAssocs(nodeRef, assocType, assocName);
    if (childAssocs.isEmpty() == false) {
      return childAssocs.get(0).getChildRef();
    } else {
      return null;
    }
  }

  /**
   * Obtains the child with the given {@link QName} for the association type {@link ContentModel#ASSOC_CONTAINS}.
   *
   * @param nodeRef
   * @param qName
   * @return the child with the given name or null if nodeRef is null
   */
  protected NodeRef getChildOf(final NodeRef nodeRef, final QName qName) {
    return getChildOf(nodeRef, ContentModel.ASSOC_CONTAINS, qName);
  }

  /**
   * Obtains the child with the given name from the {@link StoreRef#STORE_REF_WORKSPACE_SPACESSTORE} root node.
   *
   * @param qName
   * @return
   */
  protected NodeRef getChildOfRootNode(final QName qName) {
    return getChildOf(getNodeService().getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE),
        ContentModel.ASSOC_CHILDREN, qName);
  }

  protected QName qName(final String prefix, final String localName) {
    return QName.createQName(prefix, localName, getNamespacePrefixResolver());
  }

  /* Dependencies */

  public void setNodeService(final NodeService nodeService) {
    Assert.notNull(nodeService);
    this.nodeService = nodeService;
  }

  protected NodeService getNodeService() {
    return nodeService;
  }

  public void setNamespacePrefixResolver(final NamespacePrefixResolver namespacePrefixResolver) {
    Assert.notNull(namespacePrefixResolver);
    this.namespacePrefixResolver = namespacePrefixResolver;
  }

  protected NamespacePrefixResolver getNamespacePrefixResolver() {
    return namespacePrefixResolver;
  }

  public void setFileFolderService(final FileFolderService fileFolderService) {
    Assert.notNull(fileFolderService);
    this.fileFolderService = fileFolderService;
  }

  protected FileFolderService getFileFolderService() {
    return fileFolderService;
  }

  /* Configuration */

  protected String getBaseFolderDescription() {
    return baseFolderDescription;
  }

  public void setBaseFolderDescription(final String baseFolderDescription) {
    this.baseFolderDescription = baseFolderDescription;
  }

  protected String getBundleFolderDescription() {
    return bundleFolderDescription;
  }

  public void setBundleFolderDescription(final String bundleFolderDescription) {
    this.bundleFolderDescription = bundleFolderDescription;
  }

  protected String getConfigurationFolderDescription() {
    return configurationFolderDescription;
  }

  public void setConfigurationFolderDescription(final String configurationFolderDescription) {
    this.configurationFolderDescription = configurationFolderDescription;
  }

    public void setPermissionService(PermissionService permissionService) {
        this.permissionService = permissionService;
    }

    public void setBundleRepositoryLocation(final String bundleRepositoryLocation) {
    Assert.hasText(bundleRepositoryLocation);
    this.bundleRepositoryLocation = bundleRepositoryLocation;
  }

  public String getBundleRepositoryLocation() {
    return bundleRepositoryLocation;
  }

}
TOP

Related Classes of com.github.dynamicextensionsalfresco.osgi.RepositoryStoreService

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.