1 package com.neuronrobotics.bowlerstudio.vitamins;
 
    4 import java.io.IOException;
 
    5 import java.util.HashMap;
 
    8 import java.util.concurrent.TimeUnit;
 
   10 import com.neuronrobotics.imageprovider.NativeResource;
 
   11 import com.neuronrobotics.sdk.common.Log;
 
   13 import eu.mihosoft.vrl.v3d.CSG;
 
   14 import eu.mihosoft.vrl.v3d.STL;
 
   15 import eu.mihosoft.vrl.v3d.parametrics.StringParameter;
 
   17 import com.neuronrobotics.bowlerstudio.scripting.ScriptingEngine;
 
   18 import com.neuronrobotics.bowlerstudio.vitamins.Purchasing;
 
   20 import javafx.scene.paint.Color;
 
   23 import java.io.IOException;
 
   24 import java.io.InputStream;
 
   25 import java.io.OutputStream;
 
   26 import java.lang.reflect.Type;
 
   27 import java.net.HttpURLConnection;
 
   28 import java.net.InetSocketAddress;
 
   29 import java.net.Socket;
 
   31 import java.util.ArrayList;
 
   32 import java.util.HashMap;
 
   34 import org.apache.commons.io.FileUtils;
 
   35 import org.apache.commons.io.IOUtils;
 
   36 import org.eclipse.jgit.api.errors.GitAPIException;
 
   37 import org.eclipse.jgit.api.errors.InvalidRemoteException;
 
   38 import org.eclipse.jgit.api.errors.TransportException;
 
   39 import org.kohsuke.github.GHMyself;
 
   40 import org.kohsuke.github.GHRepository;
 
   42 import com.google.gson.Gson;
 
   43 import com.google.gson.GsonBuilder;
 
   44 import com.google.gson.reflect.TypeToken;
 
   49   private static final Map<String, CSG> 
fileLastLoaded = 
new HashMap<String, CSG>();
 
   50   private static final Map<String, HashMap<String, HashMap<String, PurchasingData>>> 
databaseSet =
 
   51       new HashMap<String, HashMap<String, HashMap<String, PurchasingData>>>();
 
   52   private static final String 
defaultgitRpoDatabase = 
"https://github.com/CommonWealthRobotics/Hardware-Purchasing.git";
 
   55   private static Type 
TT_mapStringString = 
new TypeToken<HashMap<String, HashMap<String, PurchasingData>>>() {
 
   58   private static Gson 
gson = 
new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();
 
   62   public static HashMap<String, PurchasingData> 
getConfiguration(String type, String 
id) {
 
   63     HashMap<String, HashMap<String, PurchasingData>> database = 
getDatabase(type);
 
   64     if (database.get(
id) == 
null) {
 
   65       database.put(
id, 
new HashMap<String, PurchasingData>());
 
   68     return database.get(
id);
 
   81           "Pushing changed Database");
 
   83     } 
catch (org.eclipse.jgit.api.errors.TransportException ex) {
 
   84       System.out.println(
"You need to fork " + 
getGitRpoDatabase() + 
" to have permission to save");
 
   86           "You do not have permission to push to this repo, change the GIT repo to your fork with setGitRpoDatabase(String gitRpoDatabase) ");
 
   96   public static void newVitamin(String type, String 
id) 
throws Exception {
 
   97     HashMap<String, HashMap<String, PurchasingData>> database = 
getDatabase(type);
 
   98     if (database.keySet().size() > 0) {
 
   99       String exampleKey = 
null;
 
  100       for (String key : database.keySet()) {
 
  101         if (!key.contains(
"meta")) {
 
  105       if (exampleKey != 
null) {
 
  107         HashMap<String, PurchasingData> exampleConfiguration = 
getConfiguration(type, exampleKey);
 
  109         for (String key : exampleConfiguration.keySet()) {
 
  110           newConfig.put(key, exampleConfiguration.get(key));
 
  120   public static void setParameter(String type, String 
id, String parameterName,
 
  124     config.put(parameterName, parameter);
 
  128   public static HashMap<String, HashMap<String, PurchasingData>> 
getDatabase(String type) {
 
  135       InputStream inPut = 
null;
 
  145         inPut = FileUtils.openInputStream(f);
 
  147         jsonString = IOUtils.toString(inPut);
 
  149         HashMap<String, HashMap<String, PurchasingData>> database = 
gson 
  151         if (database == 
null) {
 
  152           throw new RuntimeException(
"create a new one");
 
  156       } 
catch (Exception e) {
 
  157         databaseSet.put(type, 
new HashMap<String, HashMap<String, PurchasingData>>());
 
  170     ArrayList<String> types = 
new ArrayList<String>();
 
  178       File[] listOfFiles = folder.getParentFile().listFiles();
 
  180       for (File f : listOfFiles) {
 
  181         if (!f.isDirectory() && f.getName().endsWith(
".json")) {
 
  182           types.add(f.getName().substring(0, f.getName().indexOf(
".json")));
 
  186     } 
catch (Exception e) {
 
  195     ArrayList<String> types = 
new ArrayList<String>();
 
  196     HashMap<String, HashMap<String, PurchasingData>> database = 
getDatabase(type);
 
  197     Set<String> keys = database.keySet();
 
  198     for (String s : keys) {
 
  199       if (!s.contains(
"meta")) {
 
  209     ArrayList<String> types = 
new ArrayList<String>();
 
  210     HashMap<String, PurchasingData> database = 
getDatabase(type).get(size);
 
  211     Set<String> keys = database.keySet();
 
  213     for (String variant : keys) {
 
  215       if (!variant.endsWith(
"variant-1"))
 
  219           HttpURLConnection huc = (HttpURLConnection) u.openConnection();
 
  220           huc.setRequestMethod(
"GET");  
 
  222           huc.getResponseCode();
 
  225           huc = (HttpURLConnection) u.openConnection();
 
  226           huc.setRequestMethod(
"GET");  
 
  228           huc.getResponseCode();
 
  231         } 
catch (java.net.ConnectException ce) {
 
  233         } 
catch (Exception ex) {
 
  234           ex.printStackTrace();
 
  246     } 
catch (NullPointerException ex) {
 
  247       throw new RuntimeException(
 
  248           "Vitamin " + type + 
" " + size + 
" " + variant + 
" does not exist");
 
static void pushCodeToGit(String id, String branch, String FileName, String content, String commitMessage)
 
static String getFullBranch(String remoteURI)
 
static File fileFromGit(String remoteURI, String fileInRepo)
 
static void newVitamin(String type, String id)
 
static String getRootFolder()
 
static String gitRpoDatabase
 
static String getJsonRootDir()
 
static final String defaultgitRpoDatabase
 
static final Map< String, HashMap< String, HashMap< String, PurchasingData > > > databaseSet
 
static String jsonRootDir
 
static HashMap< String, PurchasingData > getConfiguration(String type, String id)
 
static void setParameter(String type, String id, String parameterName, PurchasingData parameter)
 
static ArrayList< String > listVitaminTypes()
 
static Type TT_mapStringString
 
static ArrayList< String > listVitaminSizes(String type)
 
static String makeJson(String type)
 
static void setGitRpoDatabase(String gitRpoDatabase)
 
static String getGitRpoDatabase()
 
static HashMap< String, HashMap< String, PurchasingData > > getDatabase(String type)
 
static ArrayList< String > listVitaminVariants(String type, String size)
 
static void setJsonRootDir(String jsonRootDir)
 
static void saveDatabase(String type)
 
static final Map< String, CSG > fileLastLoaded