Advertisement
Guest User

Untitled

a guest
May 7th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.04 KB | None | 0 0
  1. package main;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.ByteArrayInputStream;
  5. import java.io.ByteArrayOutputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.FileReader;
  8. import java.io.FileWriter;
  9. import java.io.IOException;
  10. import java.sql.Connection;
  11. import java.sql.ResultSet;
  12. import java.sql.ResultSetMetaData;
  13. import java.sql.Statement;
  14. import java.util.ArrayList;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.Properties;
  19. import java.util.Scanner;
  20.  
  21. import org.eclipse.rdf4j.model.BNode;
  22. import org.eclipse.rdf4j.model.ValueFactory;
  23. import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
  24. import org.eclipse.rdf4j.model.util.ModelBuilder;
  25. import org.eclipse.rdf4j.model.vocabulary.RDF;
  26. import org.eclipse.rdf4j.model.vocabulary.RDFS;
  27. import org.eclipse.rdf4j.rio.RDFFormat;
  28. import org.eclipse.rdf4j.rio.Rio;
  29.  
  30. import org.teiid.adminapi.Admin;
  31. import org.teiid.adminapi.Model;
  32. import org.teiid.adminapi.VDB;
  33. import org.teiid.adminapi.VDB.ConnectionType;
  34. import org.teiid.adminapi.impl.ModelMetaData;
  35. import org.teiid.adminapi.impl.VDBMetaData;
  36. import org.teiid.adminapi.impl.VDBMetadataParser;
  37. import org.teiid.adminapi.jboss.AdminFactory;
  38. import org.teiid.jdbc.TeiidDriver;
  39.  
  40. import main.AdminUtil;
  41.  
  42. public class Main {
  43.     // Declaration of static variable
  44.     private static Admin admin;
  45.    
  46.     @SuppressWarnings("resource")
  47.     public static void main(String[] args) throws Exception {
  48.         /*
  49.          * Creating the cube structure and input it to the data structure
  50.          */
  51.        
  52.         // Variable declaration
  53.         String fileName;
  54.         String[] columns;
  55.         Map<String,String> columnDataTypes = new HashMap<String,String>();
  56.         List<Measure> measures = new ArrayList<Measure>();
  57.         Measure measure = new Measure(null,null,null);
  58.         List<Dimension> dimensions = new ArrayList<Dimension>();
  59.         Dimension dimension = new Dimension(null);
  60.         String dimensionName;
  61.         Hierarchy hierarchy = new Hierarchy(null);
  62.         String hierarchyName;
  63.         Level level = new Level(null);
  64.         String levelName;
  65.         Scanner reader = new Scanner(System.in);
  66.        
  67.         // Defining columns' data types.
  68.         System.out.print("Input the path to the CSV file: ");
  69.         reader = new Scanner(System.in);
  70.         String filePath = reader.nextLine();
  71.         String temp[] = filePath.split("/");
  72.         fileName = temp[temp.length-1].substring(0, temp[temp.length-1].length()-4);
  73.         BufferedReader br = new BufferedReader(new FileReader(filePath));
  74.         columns = br.readLine().toLowerCase().split(",");
  75.         for(int i=0;i<columns.length;i++) {
  76.             System.out.println("Choose the data type of the column "+columns[i]);
  77.             System.out.println("1 for number (decimal), 2 for string");
  78.             System.out.print("DataType chosen: ");
  79.             String tempDataType = reader.next();
  80.             if(tempDataType.equals("1")) {
  81.                 columnDataTypes.put(columns[i].toLowerCase(), "decimal");
  82.             } else if(tempDataType.equals("2")) {
  83.                 columnDataTypes.put(columns[i].toLowerCase(), "string");
  84.             }
  85.         }
  86.         br.close();
  87.        
  88.         /*
  89.          * End of creating turtle file process
  90.          */
  91.        
  92.         /*
  93.          * Creating VDB
  94.          */
  95.        
  96.         // Creating the VDB using VDBMetaData Class
  97.         VDBMetaData vdbMD = new VDBMetaData();
  98.         vdbMD.setName(fileName);
  99.         vdbMD.setDescription(fileName+" vdb description");
  100.         vdbMD.setVersion(1);
  101.         vdbMD.setConnectionType(ConnectionType.BY_VERSION);
  102.        
  103.         // Model definition
  104.         // The first model is the physical, for the connection to the physical CSV file
  105.         ModelMetaData physicalModel = new ModelMetaData();
  106.         physicalModel.setName("physicalModel");
  107.         physicalModel.setModelType(Model.Type.PHYSICAL);
  108.         // Setting the properties of the physical model
  109.         physicalModel.addSourceMapping("text-connector", "file", "java:/textconnector-file");
  110.        
  111.         // Adding new HashMap, changing from decimal to bigdecimal for Teiid RDB compatibility
  112.         Map<String,String> teiidDataTypes = new HashMap<String,String>();
  113.         for(Map.Entry<String, String> columnDataType : columnDataTypes.entrySet()) {
  114.             if(columnDataType.getValue().equals("decimal")){
  115.                 teiidDataTypes.put(columnDataType.getKey(), "bigdecimal");
  116.             }else {
  117.                 teiidDataTypes.put(columnDataType.getKey(), "string");
  118.             }
  119.         }
  120.        
  121.         // The second model is the virtual one, for creating the virtual relational database from the CSV file
  122.         ModelMetaData virtualModel = new ModelMetaData();
  123.         virtualModel.setName("virtualModel");
  124.         virtualModel.setModelType(Model.Type.VIRTUAL);
  125.  
  126.         String teiidDDLView = "CREATE VIEW "+fileName+" (\n";
  127.         int tempIterator = 0;
  128.         for(Map.Entry<String, String> teiidDataType : teiidDataTypes.entrySet()) {
  129.             System.out.println("tempIterator="+tempIterator);
  130.             System.out.println("size="+Integer.toString(teiidDataTypes.size()-1));
  131.             teiidDDLView = teiidDDLView.concat("            "+teiidDataType.getKey()+" "+teiidDataType.getValue());
  132.             if(tempIterator!=teiidDataTypes.size()-1) {
  133.                 teiidDDLView = teiidDDLView.concat(",");
  134.             }
  135.             teiidDDLView = teiidDDLView.concat("\n");
  136.             tempIterator++;
  137.         }
  138.         teiidDDLView = teiidDDLView.concat("        ) AS  \n");
  139.         teiidDDLView = teiidDDLView.concat("          SELECT ");
  140.         tempIterator = 0;
  141.         for(Map.Entry<String, String> teiidDataType : teiidDataTypes.entrySet()) {
  142.             if(tempIterator!=teiidDataTypes.size()-1) {
  143.                 teiidDDLView = teiidDDLView.concat("file."+teiidDataType.getKey()+", ");
  144.             }else {
  145.                 teiidDDLView = teiidDDLView.concat("file."+teiidDataType.getKey()+"\n");
  146.             }
  147.             tempIterator++;
  148.         }
  149.         teiidDDLView = teiidDDLView.concat("            FROM (EXEC physicalModel.getTextFiles('"+fileName+".csv')) AS f, \n");
  150.         teiidDDLView = teiidDDLView.concat("            TEXTTABLE(f.file COLUMNS ");
  151.         tempIterator=0;
  152.         for(Map.Entry<String, String> teiidDataType : teiidDataTypes.entrySet()) {
  153.             if(tempIterator!=teiidDataTypes.size()-1) {
  154.                 teiidDDLView = teiidDDLView.concat(teiidDataType.getKey()+" "+teiidDataType.getValue()+", ");
  155.             }else if(tempIterator==teiidDataTypes.size()-1){
  156.                 teiidDDLView = teiidDDLView.concat(teiidDataType.getKey()+" "+teiidDataType.getValue()+" ");
  157.             }
  158.             tempIterator++;
  159.         }
  160.         teiidDDLView = teiidDDLView.concat("HEADER) AS file;");
  161.         virtualModel.addSourceMetadata("DDL",teiidDDLView);
  162.        
  163.         System.out.println(teiidDDLView);
  164.         vdbMD.addModel(physicalModel);
  165.         vdbMD.addModel(virtualModel);
  166.        
  167.         // Marshalling
  168.         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  169.         VDBMetadataParser.marshell(vdbMD, outStream);
  170.        
  171.         /*
  172.          * Creating connection and deployment
  173.          */
  174.         Properties connectionProps = new Properties();
  175.         // (!!!) pathnya diambil dari filepath
  176.         connectionProps.setProperty("ParentDirectory", filePath.substring(filePath.lastIndexOf("/")+1));
  177.         connectionProps.setProperty("AllowParentPaths", "true");
  178.         connectionProps.setProperty("class-name", "org.teiid.resource.adapter.file.FileManagedConnectionFactory");
  179.        
  180.         admin = AdminFactory.getInstance().createAdmin("localhost", AdminUtil.MANAGEMENT_PORT , "admin", "admin".toCharArray());
  181.         AdminUtil.createDataSource(admin, "textconnector-file", "file", connectionProps);
  182.         // nama xmlnya belum diambil dari filename
  183.         admin.deploy(fileName+"-vdb.xml", new ByteArrayInputStream(outStream.toByteArray()));
  184.        
  185.         /*
  186.          * End of creating connection and deployment
  187.          */
  188.        
  189.         // VDB Status Test
  190.         VDB vdbTest = admin.getVDB("sales", "1");
  191.         System.out.println(vdbTest.getStatus());
  192.        
  193.         // Connection Test
  194.         Connection conn = TeiidDriver.getInstance().connect("jdbc:teiid:sales.1@mm://localhost:31000;user=usernew;password=user1664!", null);
  195.         System.out.println("status="+conn.isValid(0));
  196.         Statement stmt = conn.createStatement();
  197.         ResultSet resultSet = stmt.executeQuery("select * from sales");
  198.         ResultSetMetaData rsmd = resultSet.getMetaData();
  199.         int columnsNumber = rsmd.getColumnCount();
  200.         for (int i=1; i<=columnsNumber; i++) {
  201.             System.out.print(rsmd.getColumnName(i) + " ");
  202.         }
  203.         System.out.println("");
  204.         while(resultSet.next()) {
  205.             for (int i=1; i<=columnsNumber; i++) {
  206.                 if (i>1) System.out.print(",");
  207. //                          System.out.print(resultSet.getString(i));
  208.                     System.out.print(resultSet.getObject(i));
  209.             }
  210.             System.out.println("");
  211.         }
  212.     }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement