Hitachi Vantara Pentaho Community Forums
Results 1 to 32 of 32

Thread: How to use D3 Component library in Require.js Dashboard

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Aug 2013
    Posts
    100

    Default How to use D3 Component library in Require.js Dashboard

    How to use D3 Component library plugin in Require.js Dashboard.?Right now d3 component library is missing in Require.js dashboard.

    Anyone have faced the same problem.Please suggest any workaround for this.

  2. #2
    Join Date
    Jul 2007
    Posts
    2,500

    Default

    The issue is with outdated cpk libs. We're working on fixing it but you can just take the cpk libs from sparkl or so and should work
    Pedro Alves
    Meet us on ##pentaho, a FreeNode irc channel

  3. #3
    Join Date
    Aug 2013
    Posts
    100

    Default

    As you suggest i have copied the cpk libs ie cpk-core-7.1.0.0-12,cpk-pentaho5-7.1.0.0-12 from the sparkl plugin.Getting below mentioned error:

    org.pentaho.caching.impl.PentahoCacheManagerFactory$RegistrationHandler$1.onSuccess New Caching Service registered
    14:32:55,994 ERROR [Logger] Error: Pentaho
    14:32:55,999 ERROR [Logger] misc-class org.pentaho.platform.plugin.services.pluginmgr.PentahoSystemPluginManager: PluginManager.ERROR_0011 - Failed to register plugin d3ComponentLibrary
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'd3ComponentLibrary.api' defined in file [G:\shared\p7.1\pentaho-server\pentaho-solutions\system\d3ComponentLibrary\plugin.spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pt.webdetails.cpk.CpkApi]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: pt/webdetails/cpf/utils/XmlParserFactoryProducer
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.pentaho.platform.plugin.services.pluginmgr.PentahoSystemPluginManager.reload(PentahoSystemPluginManager.java:286)
    at org.pentaho.platform.plugin.services.pluginmgr.PentahoSystemPluginManager.reload(PentahoSystemPluginManager.java:176)
    at org.pentaho.platform.plugin.services.pluginmgr.PluginAdapter.startup(PluginAdapter.java:40)
    at org.pentaho.platform.engine.core.system.PentahoSystem$2.call(PentahoSystem.java:443)
    at org.pentaho.platform.engine.core.system.PentahoSystem$2.call(PentahoSystem.java:434)
    at org.pentaho.platform.engine.core.system.PentahoSystem.runAsSystem(PentahoSystem.java:413)
    at org.pentaho.platform.engine.core.system.PentahoSystem.notifySystemListenersOfStartup(PentahoSystem.java:434)
    at org.pentaho.platform.engine.core.system.PentahoSystem.access$000(PentahoSystem.java:84)
    at org.pentaho.platform.engine.core.system.PentahoSystem$1.call(PentahoSystem.java:365)
    at org.pentaho.platform.engine.core.system.PentahoSystem$1.call(PentahoSystem.java:362)
    at org.pentaho.platform.engine.core.system.PentahoSystem.runAsSystem(PentahoSystem.java:413)
    at org.pentaho.platform.engine.core.system.PentahoSystem.notifySystemListenersOfStartup(PentahoSystem.java:362)
    at org.pentaho.platform.engine.core.system.PentahoSystem.init(PentahoSystem.java:332)
    at org.pentaho.platform.engine.core.system.PentahoSystem.init(PentahoSystem.java:228)
    at org.pentaho.platform.web.http.context.SolutionContextListener.contextInitialized(SolutionContextListener.java:162)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pt.webdetails.cpk.CpkApi]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: pt/webdetails/cpf/utils/XmlParserFactoryProducer
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098)
    ... 38 more
    Caused by: java.lang.NoClassDefFoundError: pt/webdetails/cpf/utils/XmlParserFactoryProducer
    at pt.webdetails.cpk.CpkEngine.loadElements(CpkEngine.java:232)
    at pt.webdetails.cpk.CpkEngine.reload(CpkEngine.java:158)
    at pt.webdetails.cpk.CpkEngine.initializeKettleResultCache(CpkEngine.java:147)
    at pt.webdetails.cpk.CpkEngine.init(CpkEngine.java:110)
    at pt.webdetails.cpk.CpkCoreService.<init>(CpkCoreService.java:51)
    at pt.webdetails.cpk.CpkApi.init(CpkApi.java:87)
    at pt.webdetails.cpk.CpkApi.<init>(CpkApi.java:81)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
    ... 40 more
    Caused by: java.lang.ClassNotFoundException: pt.webdetails.cpf.utils.XmlParserFactoryProducer
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.pentaho.platform.plugin.services.pluginmgr.PluginClassLoader.loadClass(PluginClassLoader.java:193)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 52 more
    Quote Originally Posted by pmalves View Post
    The issue is with outdated cpk libs. We're working on fixing it but you can just take the cpk libs from sparkl or so and should work

  4. #4
    Join Date
    Jan 2014
    Posts
    189

    Default

    What he meant was: "Replace the folder system/d3ComponentLibrary/lib with whatever is in system/sparkl/lib"


    Quote Originally Posted by Sumit_Bansal View Post
    As you suggest i have copied the cpk libs ie cpk-core-7.1.0.0-12,cpk-pentaho5-7.1.0.0-12 from the sparkl plugin.Getting below mentioned error:

    org.pentaho.caching.impl.PentahoCacheManagerFactory$RegistrationHandler$1.onSuccess New Caching Service registered
    14:32:55,994 ERROR [Logger] Error: Pentaho
    14:32:55,999 ERROR [Logger] misc-class org.pentaho.platform.plugin.services.pluginmgr.PentahoSystemPluginManager: PluginManager.ERROR_0011 - Failed to register plugin d3ComponentLibrary
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'd3ComponentLibrary.api' defined in file [G:\shared\p7.1\pentaho-server\pentaho-solutions\system\d3ComponentLibrary\plugin.spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pt.webdetails.cpk.CpkApi]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: pt/webdetails/cpf/utils/XmlParserFactoryProducer
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.pentaho.platform.plugin.services.pluginmgr.PentahoSystemPluginManager.reload(PentahoSystemPluginManager.java:286)
    at org.pentaho.platform.plugin.services.pluginmgr.PentahoSystemPluginManager.reload(PentahoSystemPluginManager.java:176)
    at org.pentaho.platform.plugin.services.pluginmgr.PluginAdapter.startup(PluginAdapter.java:40)
    at org.pentaho.platform.engine.core.system.PentahoSystem$2.call(PentahoSystem.java:443)
    at org.pentaho.platform.engine.core.system.PentahoSystem$2.call(PentahoSystem.java:434)
    at org.pentaho.platform.engine.core.system.PentahoSystem.runAsSystem(PentahoSystem.java:413)
    at org.pentaho.platform.engine.core.system.PentahoSystem.notifySystemListenersOfStartup(PentahoSystem.java:434)
    at org.pentaho.platform.engine.core.system.PentahoSystem.access$000(PentahoSystem.java:84)
    at org.pentaho.platform.engine.core.system.PentahoSystem$1.call(PentahoSystem.java:365)
    at org.pentaho.platform.engine.core.system.PentahoSystem$1.call(PentahoSystem.java:362)
    at org.pentaho.platform.engine.core.system.PentahoSystem.runAsSystem(PentahoSystem.java:413)
    at org.pentaho.platform.engine.core.system.PentahoSystem.notifySystemListenersOfStartup(PentahoSystem.java:362)
    at org.pentaho.platform.engine.core.system.PentahoSystem.init(PentahoSystem.java:332)
    at org.pentaho.platform.engine.core.system.PentahoSystem.init(PentahoSystem.java:228)
    at org.pentaho.platform.web.http.context.SolutionContextListener.contextInitialized(SolutionContextListener.java:162)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pt.webdetails.cpk.CpkApi]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: pt/webdetails/cpf/utils/XmlParserFactoryProducer
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098)
    ... 38 more
    Caused by: java.lang.NoClassDefFoundError: pt/webdetails/cpf/utils/XmlParserFactoryProducer
    at pt.webdetails.cpk.CpkEngine.loadElements(CpkEngine.java:232)
    at pt.webdetails.cpk.CpkEngine.reload(CpkEngine.java:158)
    at pt.webdetails.cpk.CpkEngine.initializeKettleResultCache(CpkEngine.java:147)
    at pt.webdetails.cpk.CpkEngine.init(CpkEngine.java:110)
    at pt.webdetails.cpk.CpkCoreService.<init>(CpkCoreService.java:51)
    at pt.webdetails.cpk.CpkApi.init(CpkApi.java:87)
    at pt.webdetails.cpk.CpkApi.<init>(CpkApi.java:81)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
    ... 40 more
    Caused by: java.lang.ClassNotFoundException: pt.webdetails.cpf.utils.XmlParserFactoryProducer
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.pentaho.platform.plugin.services.pluginmgr.PluginClassLoader.loadClass(PluginClassLoader.java:193)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 52 more

  5. #5
    Join Date
    Jan 2014
    Posts
    189

    Default

    This is no proper way for debugging code. You would need to post the code somewhere, e.g. your own fork of the component in github, so that people can inspect the code

  6. #6
    Join Date
    Jan 2014
    Posts
    189

    Default

    Actually, the problem is another typo:

    Code:
    /*
     * d3 component, using the d3ComponentBase
     */
     define(['d3ComponentLibrary/components/D3ComponentBase'], function(D3ComponentBase){
     var D3Component =  D3ComponentBase.extend({
        defaultWidth: 600,
        defaultHeight: 400
       });
    
      return D3Component;
    });
    Note that every js file under amd-components must be edited to be contained within define() blocks.

  7. #7
    Join Date
    Aug 2013
    Posts
    100

    Default

    As per my understanding, we need to make compatible of d3ComponentBase.js with require.js.The d3ComponentBase.js code i have mentioned below:
    Code:
    /*
     * d3 component, using the chartComponent
     */
    
    
     var D3ComponentBase =  ChartComponent.extend({
    
    
        defaultWidth: 600,
        defaultHeight: 400,
      
         update : function() {
           if (this.parameters == undefined) {
             this.parameters = [];
           };
    
    
           this.renderChart();
         },
    
    
         render: function(values) {
    
    
           this.customfunction.call(this,values);
         },
    
    
         cdaResultToD3Array: function(d){
    
    
           var result = [];
           _.each(d.resultset,function(row, o){
               var line = {};
               _.each(row,function(cell,idx){
                   line[_.findWhere(d.metadata,{colIndex:idx})["colName"]] = cell;
                 });
               result.push(line);
             });
    
    
           return result;
         },
    
    
         getHeight: function(){
           var $ph = this.placeholder();
           return this.height?this.height:($ph.height()>0?$ph.height():this.defaultHeight);
         },
    
    
         getWidth: function(){
           var $ph = this.placeholder();
           return this.width?this.width:($ph.width()>0?$ph.width():this.defaultWidth);
         }
    
    
       });
    Quote Originally Posted by crusso View Post
    This is no proper way for debugging code. You would need to post the code somewhere, e.g. your own fork of the component in github, so that people can inspect the code

  8. #8
    Join Date
    Jan 2014
    Posts
    189

    Default

    Other than the problem with CPK libraries, the plugin only provides components for the legacy dashboards.

    The conversion of the components to RequireJS should present no challenge though.
    The code is available at https://github.com/webdetails/d3ComponentLibrary

    If you do end up porting the components to RequireJS, please consider submitting a pull request to so that the community benefits from the update.

  9. #9
    Join Date
    Aug 2013
    Posts
    100

    Default

    @crusso: Could you please help me on this to make d3 component library to works with require.js.
    Quote Originally Posted by crusso View Post
    Other than the problem with CPK libraries, the plugin only provides components for the legacy dashboards.

    The conversion of the components to RequireJS should present no challenge though.
    The code is available at https://github.com/webdetails/d3ComponentLibrary

    If you do end up porting the components to RequireJS, please consider submitting a pull request to so that the community benefits from the update.

  10. #10
    Join Date
    Jan 2014
    Posts
    189

    Default

    What you are asking is for a full-blown tutorial. Currently I don't have that much time available.

    Start by reading http://redmine.webdetails.org/projec...wiki/RequireJS

    Take a look at https://github.com/webdetails/sparkl for some inspiration: that plugin contains the legacy and requirejs variants of the "SparklPluginCardComponent".

    You'll see that the file plugin.xml declares a requirejs configuration file
    Code:
    <external-resources>
      <file context="requirejs">content/sparkl/resources/sparkl-require-js-cfg.js</file>
    </external-resources>
    Near the end of sparkl-require-js-cfg.js, you'll see the definition of an AMD id for the module that returns the requirejs variant of the component:

    Code:
    requirePaths['sparkl/components/SparklPluginCardComponent'] = prefix + '/SparklCards/SparklPluginCardComponent';
    You'll need to know that the requireJS variant of the component is located under resources/amd-component, and that the file resources/components/SparklCards/component.xml was modified to add support for the requireJS variant:

    Code:
    <Implementation supportsLegacy="true" supportsAMD="true">
    Dive into the code, compare legacy and requireJS variants.

  11. #11
    Join Date
    Aug 2013
    Posts
    100

    Default

    @crusso As per your guideline i have done changes :
    I have defined the require.js configuration in plugin.xml:

    Code:
    <external-resources>
            <file context="requirejs">content/d3ComponentLibrary/resources/d3-require-js-cfg.js</file>
    </external-resources>
    in the d3-require-js-cfg.js I have defined the definition of an AMD id for the module that returns the requirejs variant of the component:

    Code:
    requirePaths['d3ComponentLibrary/components/d3ComponentBase'] = prefix + '/common/d3ComponentBase';
      requirePaths['d3ComponentLibrary/components/box'] = prefix + '/d3BoxPlots/d3BoxPlots';
      requirePaths['d3ComponentLibrary/components/d3CalendarView'] = prefix + '/d3CalendarView/d3CalendarView';
      requirePaths['d3ComponentLibrary/components/d3Component'] = prefix + '/d3Component/d3Component';
      requirePaths['d3ComponentLibrary/components/MotionScatterPlot'] = prefix + '/d3MotionScatterPlot/d3MotionScatterPlot';
      requirePaths['d3ComponentLibrary/components/d3ScatterplotMatrix'] = prefix + '/d3ScatterplotMatrix/d3ScatterplotMatrix';
    Also modified the component.xml file to add the support of Require.js
    Code:
     <Implementation supportsLegacy="true" supportsAMD="true">
    But i am getting the error which i have mentioned below :

    Code:
    org.pentaho.platform.plugin.services.pluginmgr.SystemPathXmlPluginProvider: SystemPathXmlPluginProvider.ERROR_0001 - Failed to process plugin in G:\shared\p7.1\pentaho-server\pentaho-solutions\system\d3ComponentLibrary
    org.pentaho.platform.api.engine.PlatformPluginRegistrationException: PluginManager.ERROR_0005 - Failed to process plugin.xml: system/d3ComponentLibrary/plugin.xml
    if possible can you please tell me where i m doing wrong .


    Quote Originally Posted by crusso View Post
    What you are asking is for a full-blown tutorial. Currently I don't have that much time available.

    Start by reading http://redmine.webdetails.org/projec...wiki/RequireJS

    Take a look at https://github.com/webdetails/sparkl for some inspiration: that plugin contains the legacy and requirejs variants of the "SparklPluginCardComponent".

    You'll see that the file plugin.xml declares a requirejs configuration file
    Code:
    <external-resources>
      <file context="requirejs">content/sparkl/resources/sparkl-require-js-cfg.js</file>
    </external-resources>
    Near the end of sparkl-require-js-cfg.js, you'll see the definition of an AMD id for the module that returns the requirejs variant of the component:

    Code:
    requirePaths['sparkl/components/SparklPluginCardComponent'] = prefix + '/SparklCards/SparklPluginCardComponent';
    You'll need to know that the requireJS variant of the component is located under resources/amd-component, and that the file resources/components/SparklCards/component.xml was modified to add support for the requireJS variant:

    Code:
    <Implementation supportsLegacy="true" supportsAMD="true">
    Dive into the code, compare legacy and requireJS variants.

  12. #12
    Join Date
    Jan 2014
    Posts
    189

    Default

    Most likely you simply pasted the block <external-resources> outside of the <plugin> tag, or violated some XML.
    I would need to see the entire plugin.xml to tell what's wrong

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Privacy Policy | Legal Notices | Safe Harbor Privacy Policy

Copyright © 2005 - 2019 Hitachi Vantara Corporation. All Rights Reserved.