Class PentahoMetadataDomainRepository

java.lang.Object
org.pentaho.platform.plugin.services.metadata.PentahoMetadataDomainRepository
All Implemented Interfaces:
org.pentaho.metadata.repository.IMetadataDomainRepository, IAclAwarePentahoMetadataDomainRepositoryImporter, IDataSourceAwareMetadataDomainRepository, IModelAnnotationsAwareMetadataDomainRepositoryImporter, IPentahoMetadataDomainRepositoryExporter, IPentahoMetadataDomainRepositoryImporter
Direct Known Subclasses:
CachingPentahoMetadataDomainRepository, PentahoMondrianDomainRepository, SecurityAwarePentahoMetadataDomainRepository

public class PentahoMetadataDomainRepository extends Object implements org.pentaho.metadata.repository.IMetadataDomainRepository, IModelAnnotationsAwareMetadataDomainRepositoryImporter, IAclAwarePentahoMetadataDomainRepositoryImporter, IPentahoMetadataDomainRepositoryExporter, IDataSourceAwareMetadataDomainRepository
Handles the storage and retrieval of Pentaho Metada Domain objects in a repository. It does this by using a pre-defined system location (defined by PentahoMetadataDomainRepositoryInfo) as the storage location for the Domain files and associated locale files.

Since Domain IDs are the unique identifier for Pentaho Metadata domains and may contain any character (including repository folder separator character(s) like '/', a UUID will be created to store each file. The metadata for the file will be used to store the information (such as the Domain ID).

Author:
David M. Kincade
  • Constructor Details

    • PentahoMetadataDomainRepository

      public PentahoMetadataDomainRepository(org.pentaho.platform.api.repository2.unified.IUnifiedRepository repository)
      Creates an instance of this class providing the IUnifiedRepository repository backend.
      Parameters:
      repository - the IUnifiedRepository in which data will be stored / retrieved
    • PentahoMetadataDomainRepository

      protected PentahoMetadataDomainRepository(org.pentaho.platform.api.repository2.unified.IUnifiedRepository repository, org.pentaho.platform.repository2.unified.RepositoryUtils repositoryUtils, org.pentaho.metadata.util.XmiParser xmiParser, org.pentaho.metadata.util.LocalizationUtil localizationUtil)
      Helper constructor used for setting other objects in this class
      Parameters:
      repository - the IUnifiedRepository in which data will be stored / retrieved
      repositoryUtils - utility class for working inside the repository
      (NOTE: null is acceptable and will create a default instance)
      xmiParser - the parser class for serializing / de-serializing Domain objects
      (NOTE: null is acceptable and will create a default instance)
      localizationUtil - the object used to add locale bundles into a Pentaho Metadata Domain object
      (NOTE: null is acceptable and will create a default instance)
  • Method Details

    • storeDomain

      public void storeDomain(org.pentaho.metadata.model.Domain domain, boolean overwrite) throws org.pentaho.metadata.repository.DomainIdNullException, org.pentaho.metadata.repository.DomainAlreadyExistsException, org.pentaho.metadata.repository.DomainStorageException
      Store a domain to the repository. The domain should persist between JVM restarts.
      Specified by:
      storeDomain in interface org.pentaho.metadata.repository.IMetadataDomainRepository
      Parameters:
      domain - domain object to store
      overwrite - if true, overwrite existing domain
      Throws:
      org.pentaho.metadata.repository.DomainIdNullException - if domain id is null or empty
      org.pentaho.metadata.repository.DomainAlreadyExistsException - if a domain with the same Domain ID already exists in the repository and overwrite == false
      org.pentaho.metadata.repository.DomainStorageException - if there is a problem storing the domain
    • endsWithXmi

      protected String endsWithXmi(String value)
    • noXmi

      protected String noXmi(String value)
    • replaceDomainId

      protected String replaceDomainId(StringBuilder sb, String domainId)
    • getDomainIdFromXmi

      protected String getDomainIdFromXmi(StringBuilder sb)
    • isDomainIdXmiEqualsOrNotPresent

      protected boolean isDomainIdXmiEqualsOrNotPresent(String domainId, String domainIdXmi)
    • storeDomain

      public void storeDomain(InputStream inputStream, String domainId, boolean overwrite) throws org.pentaho.metadata.repository.DomainIdNullException, org.pentaho.metadata.repository.DomainAlreadyExistsException, org.pentaho.metadata.repository.DomainStorageException
      Stores a domain to the repository directly as an Input Stream
      Specified by:
      storeDomain in interface IPentahoMetadataDomainRepositoryImporter
      Parameters:
      inputStream -
      domainId -
      overwrite -
      Throws:
      org.pentaho.metadata.repository.DomainIdNullException
      org.pentaho.metadata.repository.DomainAlreadyExistsException
      org.pentaho.metadata.repository.DomainStorageException
    • storeDomain

      public void storeDomain(InputStream inputStream, String domainId, boolean overwrite, org.pentaho.platform.api.repository2.unified.RepositoryFileAcl acl) throws org.pentaho.metadata.repository.DomainIdNullException, org.pentaho.metadata.repository.DomainAlreadyExistsException, org.pentaho.metadata.repository.DomainStorageException
      Specified by:
      storeDomain in interface IAclAwarePentahoMetadataDomainRepositoryImporter
      Throws:
      org.pentaho.metadata.repository.DomainIdNullException
      org.pentaho.metadata.repository.DomainAlreadyExistsException
      org.pentaho.metadata.repository.DomainStorageException
    • getAclHelper

      protected org.pentaho.platform.api.repository2.unified.IAclNodeHelper getAclHelper()
    • setAclFor

      public void setAclFor(String domainId, org.pentaho.platform.api.repository2.unified.RepositoryFileAcl acl)
      Specified by:
      setAclFor in interface IAclAwarePentahoMetadataDomainRepositoryImporter
    • getAclFor

      public org.pentaho.platform.api.repository2.unified.RepositoryFileAcl getAclFor(String domainId)
      Specified by:
      getAclFor in interface IAclAwarePentahoMetadataDomainRepositoryImporter
    • hasAccessFor

      public boolean hasAccessFor(String domainId)
      Specified by:
      hasAccessFor in interface IAclAwarePentahoMetadataDomainRepositoryImporter
    • getDomainFilesData

      public Map<String,InputStream> getDomainFilesData(String domainId)
      Specified by:
      getDomainFilesData in interface IPentahoMetadataDomainRepositoryExporter
    • getDomain

      public org.pentaho.metadata.model.Domain getDomain(String domainId)
      retrieve a domain from the repo. This does lazy loading of the repo, so it calls reloadDomains() if not already loaded.
      Specified by:
      getDomain in interface org.pentaho.metadata.repository.IMetadataDomainRepository
      Parameters:
      domainId - domain to get from the repository
      Returns:
      domain object
    • getDomainIds

      public Set<String> getDomainIds()
      return a list of all the domain ids in the repository. triggers a call to reloadDomains if necessary.
      Specified by:
      getDomainIds in interface org.pentaho.metadata.repository.IMetadataDomainRepository
      Returns:
      the domain Ids.
    • getMetadataDomainIds

      public Set<String> getMetadataDomainIds()
      Return a list of all the domain ids in the repository of the data source type Metadata. See getDomainIds() for similar functionality.
      Specified by:
      getMetadataDomainIds in interface IDataSourceAwareMetadataDomainRepository
      Returns:
      the metadata domain Ids.
    • getDataSourceWizardDomainIds

      public Set<String> getDataSourceWizardDomainIds()
      Return a list of all the domain ids in the repository of the data source type Metadata. See getDomainIds() for similar functionality.
      Specified by:
      getDataSourceWizardDomainIds in interface IDataSourceAwareMetadataDomainRepository
      Returns:
      the data source wizard domain Ids.
    • removeDomain

      public void removeDomain(String domainId)
      remove a domain from disk and memory.
      Specified by:
      removeDomain in interface org.pentaho.metadata.repository.IMetadataDomainRepository
      Specified by:
      removeDomain in interface IPentahoMetadataDomainRepositoryImporter
      Parameters:
      domainId -
    • removeModel

      public void removeModel(String domainId, String modelId) throws org.pentaho.metadata.repository.DomainIdNullException, org.pentaho.metadata.repository.DomainStorageException
      remove a model from a domain which is stored either on a disk or memory.
      Specified by:
      removeModel in interface org.pentaho.metadata.repository.IMetadataDomainRepository
      Parameters:
      domainId -
      modelId -
      Throws:
      org.pentaho.metadata.repository.DomainIdNullException
      org.pentaho.metadata.repository.DomainStorageException
    • reloadDomains

      public void reloadDomains()
      reload domains from disk
      Specified by:
      reloadDomains in interface org.pentaho.metadata.repository.IMetadataDomainRepository
    • getFileMetadataHelper

      public Map<String,Serializable> getFileMetadataHelper(Serializable serializableId)
      Only migrate if certain properties don't exist and other conditions. Else return file metadata.
      Parameters:
      serializableId -
      Returns:
    • flushDomains

      public void flushDomains()
      flush the domains from memory
      Specified by:
      flushDomains in interface org.pentaho.metadata.repository.IMetadataDomainRepository
    • generateRowLevelSecurityConstraint

      public String generateRowLevelSecurityConstraint(org.pentaho.metadata.model.LogicalModel model)
      Specified by:
      generateRowLevelSecurityConstraint in interface org.pentaho.metadata.repository.IMetadataDomainRepository
    • hasAccess

      public boolean hasAccess(int accessType, org.pentaho.metadata.model.concept.IConcept aclHolder)
      The aclHolder cannot be null unless the access type requested is ACCESS_TYPE_SCHEMA_ADMIN.
      Specified by:
      hasAccess in interface org.pentaho.metadata.repository.IMetadataDomainRepository
    • addLocalizationFile

      public void addLocalizationFile(String domainId, String locale, Properties properties) throws org.pentaho.metadata.repository.DomainStorageException
      Adds a set of properties as a locale properties file for the specified Domain ID
      Parameters:
      domainId - the domain ID for which this properties file will be added
      locale - the locale for which this properties file will be added
      properties - the properties to be added
      Throws:
      org.pentaho.metadata.repository.DomainStorageException
    • addLocalizationFile

      public void addLocalizationFile(String domainId, String locale, InputStream inputStream, boolean overwrite) throws org.pentaho.metadata.repository.DomainStorageException
      Specified by:
      addLocalizationFile in interface IPentahoMetadataDomainRepositoryImporter
      Throws:
      org.pentaho.metadata.repository.DomainStorageException
    • getMetadataDir

      protected org.pentaho.platform.api.repository2.unified.RepositoryFile getMetadataDir()
    • loadLocaleStrings

      protected void loadLocaleStrings(String domainId, org.pentaho.metadata.model.Domain domain)
    • loadProperties

      protected Properties loadProperties(org.pentaho.platform.api.repository2.unified.RepositoryFile bundle)
    • addDataSourceType

      protected void addDataSourceType(Map<String,Serializable> fileMetadata, org.pentaho.platform.api.repository2.unified.data.simple.SimpleRepositoryFileData data)
      Adds datasource property to map based on serialized data converted to Domain object.
      Parameters:
      fileMetadata -
      data -
    • createUniqueFile

      protected org.pentaho.platform.api.repository2.unified.RepositoryFile createUniqueFile(String domainId, String locale, org.pentaho.platform.api.repository2.unified.data.simple.SimpleRepositoryFileData data)
      Creates a new repository file (with the supplied data) and applies the proper metadata to this file.
      Parameters:
      domainId - the Domain id associated with this file
      locale - the locale associated with this file (or null for a domain file)
      data - the data to put in the file
      Returns:
      the repository file created
    • createUniqueFile

      protected org.pentaho.platform.api.repository2.unified.RepositoryFile createUniqueFile(String filename, String domainId, String locale, org.pentaho.platform.api.repository2.unified.data.simple.SimpleRepositoryFileData data)
      Creates a new repository file (with the supplied data) and applies the proper metadata to this file.
      Parameters:
      filename - filename for new file
      domainId - the Domain id associated with this file
      locale - the locale associated with this file (or null for a domain file)
      data - the data to put in the file
      Returns:
      the repository file created
    • updateFile

      public org.pentaho.platform.api.repository2.unified.RepositoryFile updateFile(org.pentaho.platform.api.repository2.unified.RepositoryFile domainFile, org.pentaho.platform.api.repository2.unified.data.simple.SimpleRepositoryFileData data)
    • getRepository

      protected org.pentaho.platform.api.repository2.unified.IUnifiedRepository getRepository()
    • getXmiParser

      protected org.pentaho.metadata.util.XmiParser getXmiParser()
    • getRepositoryUtils

      protected org.pentaho.platform.repository2.unified.RepositoryUtils getRepositoryUtils()
    • getLocalizationUtil

      protected org.pentaho.metadata.util.LocalizationUtil getLocalizationUtil()
    • setRepository

      protected void setRepository(org.pentaho.platform.api.repository2.unified.IUnifiedRepository repository)
    • setXmiParser

      protected void setXmiParser(org.pentaho.metadata.util.XmiParser xmiParser)
    • setRepositoryUtils

      protected void setRepositoryUtils(org.pentaho.platform.repository2.unified.RepositoryUtils repositoryUtils)
    • setLocalizationUtil

      protected void setLocalizationUtil(org.pentaho.metadata.util.LocalizationUtil localizationUtil)
    • toString

      protected String toString(org.pentaho.platform.api.repository2.unified.RepositoryFile file)
    • getMetadataRepositoryFile

      protected org.pentaho.platform.api.repository2.unified.RepositoryFile getMetadataRepositoryFile(String domainId)
      Accesses the metadata mapping (with 1 retry) to find the metadata file for the specified domainId
    • loadAnnotationsXml

      public String loadAnnotationsXml(String domainId)
      Specified by:
      loadAnnotationsXml in interface IModelAnnotationsAwareMetadataDomainRepositoryImporter
    • storeAnnotationsXml

      public void storeAnnotationsXml(String domainId, String annotationsXml)
      Specified by:
      storeAnnotationsXml in interface IModelAnnotationsAwareMetadataDomainRepositoryImporter
    • getAnnotationsXmlFile

      public org.pentaho.platform.api.repository2.unified.RepositoryFile getAnnotationsXmlFile(org.pentaho.platform.api.repository2.unified.RepositoryFile domainFile)
    • createOrUpdateAnnotationsXml

      public void createOrUpdateAnnotationsXml(org.pentaho.platform.api.repository2.unified.RepositoryFile domainFile, org.pentaho.platform.api.repository2.unified.RepositoryFile annotationsFile, String annotationsXml)
    • resolveAnnotationsFilePath

      protected String resolveAnnotationsFilePath(org.pentaho.platform.api.repository2.unified.RepositoryFile domainFile)
    • getLogger

      protected org.apache.commons.logging.Log getLogger()