zoukankan      html  css  js  c++  java
  • 使用jinja 模板引擎生成cube.js schema 文件

    实际我们进行cube.js 的集成schema 是一个比较重要的东西,官方的playground 是提供了
    一个自己的脚手架,但是基于代码集成就需要我们自己搞定了(比如java),解决方法很简单
    我们可以基于模板引擎,以下是基于jinja模板引擎的demo(java 版本的工具)

    项目准备

    • pom.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.dalong</groupId>
        <artifactId>myjinja2-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <encoding>UTF-8</encoding>
            <java.version>1.8</java.version>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <dependencies>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.11</version>
            </dependency>
            <dependency>
                <groupId>com.hubspot.jinjava</groupId>
                <artifactId>jinjava</artifactId>
                <version>2.5.6</version>
            </dependency>
        </dependencies>
        <build>
            <!-- Maven Shade Plugin -->
            <finalName>mydemo-app</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.3</version>
                    <executions>
                        <!-- Run shade goal on package phase -->
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <!-- add Main-Class to manifest file -->
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>com.dalong.Application</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    • 模板准备
      完全使用了jinja 的模板语法。很简单
     
    cube("{{cubename}}",{
        measures: {
           drillMembers: [{{ users | join(',')}}]
        },
        dimensions: {
            {% for item in userconfs %}
            {{item.name}}: {
            type:`{{ item.age}}`,
            sql:`{{ item.name}}`
            },
            {% endfor %}
        }
    })
    • 依赖的一个实体
      UserConf
     
    package com.dalong;
    public class UserConf {
        private String name;
        private String age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
    }
    • 代码集成
    package com.dalong;
    import com.google.common.base.Charsets;
    import com.google.common.collect.Maps;
    import com.google.common.io.Resources;
    import com.hubspot.jinjava.Jinjava;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    /**
     * @author dalong
     */
    public class Application {
        public static void main(String[] args) throws IOException {
            demo();
        }
        private static void demo() throws IOException {
            Jinjava jinjava = new Jinjava();
            Map<String, Object> context = Maps.newHashMap();
            List<UserConf> confs= new ArrayList<>();
            UserConf userConf = new UserConf();
            userConf.setAge("ddd");
            userConf.setName("dddd");
            UserConf userConf2 = new UserConf();
            userConf2.setAge("ddd222");
            userConf2.setName("dddd222");
            confs.add(userConf);
            confs.add(userConf2);
            context.put("userconfs",confs);
            context.put("cubename","demoapp");
            context.put("users", Arrays.asList("dalong","demoapp"));
            String template = Resources.toString(Resources.getResource("index.html"), Charsets.UTF_8);
            String renderedTemplate = jinjava.render(template, context);
            System.out.println(renderedTemplate);
        }
    }

    运行效果

    参考资料

    https://cube.dev/docs/cube
    https://github.com/HubSpot/jinjava
    https://jinja.palletsprojects.com/en/3.0.x/

  • 相关阅读:
    周鸿祎:很多程序员聪明,但我一看就知道他不会成功
    Ubuntu/centos/redhat/SUSE sipp安装(带rtp支持,3.5.1版本)
    ffmpeg源码分析之媒体打开过程
    搜集的动植物分类、检索网站
    sipp命令 各参数含义
    最简单的一个win32程序
    vi学习笔记
    删除结点 (双向链表)
    插入结点(双向链表)
    La=LaULb (单链表)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14772335.html
Copyright © 2011-2022 走看看