public static void main(final String[] args) {

    final File fileInputDir = new File("input");
    if (!fileInputDir.exists() || !fileInputDir.isDirectory()) {
      return;
    }

    String columnMetadataText;
    final StringBuilder sb = new StringBuilder();
    BufferedReader br;
    try {
      br = new BufferedReader(new FileReader(new File("res/column_metadata.txt")));
      String line;
      while ((line = br.readLine()) != null) {
        sb.append(line).append("\n");
      }
      columnMetadataText = sb.toString();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      return;
    } catch (IOException e) {
      e.printStackTrace();
      return;
    }

    // For each file in the input folder
    for (File file : fileInputDir.listFiles()) {
      final String fileName = file.getName();
      System.out.println("Generating code for " + fileName);

      final char[] buffer = new char[2048];
      sb.setLength(0);
      final Reader in;
      try {
        in = new InputStreamReader(new FileInputStream(file), "UTF-8");
        int read;
        do {
          read = in.read(buffer, 0, buffer.length);
          if (read != -1) {
            sb.append(buffer, 0, read);
          }
        } while (read >= 0);
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return;
      } catch (FileNotFoundException e) {
        e.printStackTrace();
        return;
      } catch (IOException e) {
        e.printStackTrace();
        return;
      }

      final String content = sb.toString();
      if (content.length() == 0) {
        System.out.println("file is empty.");
        return;
      }

      try {
        final JSONObject root = new JSONObject(content);
        final JSONObject jsonDatabase = root.getJSONObject("database");

        // Classes generation
        String classPackage,
            classesPrefix,
            contentClassesPrefix,
            dbAuthorityPackage,
            providerFolder;
        int dbVersion;
        boolean hasProviderSubclasses;
        classPackage = jsonDatabase.getString("package");
        classesPrefix = jsonDatabase.getString("classes_prefix");
        contentClassesPrefix = jsonDatabase.optString("content_classes_prefix", "");
        dbAuthorityPackage = jsonDatabase.optString("authority_package", classPackage);
        providerFolder = jsonDatabase.optString("provider_folder", PathUtils.PROVIDER_DEFAULT);
        dbVersion = jsonDatabase.getInt("version");
        hasProviderSubclasses = jsonDatabase.optBoolean("has_subclasses");

        ArrayList<TableData> classDataList =
            TableData.getClassesData(root.getJSONArray("tables"), contentClassesPrefix, dbVersion);

        // Database generation
        DatabaseGenerator.generate(
            fileName,
            classPackage,
            dbVersion,
            dbAuthorityPackage,
            classesPrefix,
            classDataList,
            providerFolder,
            hasProviderSubclasses);

        FileCache.saveFile(
            PathUtils.getAndroidFullPath(
                    fileName, classPackage, providerFolder + "." + PathUtils.UTIL)
                + "ColumnMetadata.java",
            String.format(columnMetadataText, classPackage, providerFolder + "." + PathUtils.UTIL));

      } catch (JSONException e) {
        e.printStackTrace();
        return;
      }
    }
  }
  public String getInternet(Context context, String site) {
    // The data that is retrieved
    String result = null;
    FileCache cache = new FileCache(context);
    File cacheFile = cache.getFile(site);
    String fileName = cacheFile.getAbsolutePath();

    if (this.checkInternetConnection(context)) {
      if (!cache.verifyCache(fileName)) {
        try {
          // This assumes that you have a URL from which the response will come
          URL url = new URL(site);

          // Open a connection to the URL and obtain a buffered input stream
          URLConnection connection = url.openConnection();
          InputStream inputStream = connection.getInputStream();
          BufferedInputStream bufferedInput = new BufferedInputStream(inputStream, 8);

          // Read the response into a byte array
          ByteArrayBuffer byteArray = new ByteArrayBuffer(50);
          int current = 0;
          while ((current = bufferedInput.read()) != -1) {
            byteArray.append((byte) current);
          }

          // Construct a String object from the byte array containing the response
          result = new String(byteArray.toByteArray());
          try {
            if (cache.saveFile(result)) {
              Log.i("INTERNET", "Cache salvo!");
            } else {
              Log.i("INTERNET", "Erro no salvar o cache!");
            }
          } catch (Exception e) {
            result = "seminternet";
            Log.e("INTERNET", e.toString());
          }
        } catch (Exception e) {
          result = "seminternet";
          Log.e("INTERNET", e.toString());
        }
      } else {
        try {
          result = cache.readFile(fileName);
        } catch (Exception e) {
          result = "seminternet";
          Log.e("INTERNET", e.toString());
        }
      }
    } else {
      try {
        result = cache.readFile(fileName);
        if (result.length() == 0) {
          result = "seminternet";
        }
      } catch (Exception e) {
        result = "seminternet";
        Log.e("INTERNET", e.toString());
      }
    }
    Log.i("INTERNET", result);
    return (result);
  }