public void processXml(String basePath, String outPath, boolean isAdmin) {
    Element parentSection = isAdmin ? xml.getFirstElementByTag("administration", null) : null;

    Element fileSection = xml.getFirstElementByTag("files", parentSection);
    Element langSection = xml.getFirstElementByTag("languages", parentSection);
    Element mediaSection = xml.getFirstElementByTag("media", parentSection);
    String type = extType.getFolder();

    if (isAdmin) {

      if (extVer == SharedDefines.emJava_ver.J_15) {
        Element instFile = xml.getFirstElementByTag("installfile", null);
        Element uninstFile = xml.getFirstElementByTag("uninstallfile", null);

        String file = null;
        if (instFile != null) {
          file = instFile.getValue();
          MyCommonMethods.copyFileOrFolder(
              basePath + type + sep + extFolder + sep + file, outPath + file, "");
        }
        if (uninstFile != null) {
          file = uninstFile.getValue();
          MyCommonMethods.copyFileOrFolder(
              basePath + type + sep + extFolder + sep + file, outPath + file, "");
        }
      } else {
        Element scriptFile = xml.getFirstElementByTag("uninstall", null);
        if (scriptFile != null) {
          String file = scriptFile.getValue();
          MyCommonMethods.copyFileOrFolder(
              basePath + type + sep + extFolder + sep + file, outPath + file, "");
        }
      }

      Element instSection =
          xml.getFirstElementByTag("sql", xml.getFirstElementByTag("install", null));
      Element uninstSection =
          xml.getFirstElementByTag("sql", xml.getFirstElementByTag("uninstall", null));

      if (instSection != null) {
        ArrayList<String> instFiles =
            xml.getElementsValues(xml.getElementsByTag("file", instSection), null);
        for (String F : instFiles) {
          MyCommonMethods.copyFileOrFolder(
              basePath + type + sep + extFolder + sep + F, outPath + F, "");
        }
      }

      if (uninstSection != null) {
        ArrayList<String> uninstFiles =
            xml.getElementsValues(xml.getElementsByTag("file", uninstSection), null);
        for (String F : uninstFiles) {
          MyCommonMethods.copyFileOrFolder(
              basePath + type + sep + extFolder + sep + F, outPath + F, "");
        }
      }
    }

    if (fileSection != null) {
      String filesPath =
          fileSection.getAttributeValue("folder") == null
              ? ""
              : fileSection.getAttributeValue("folder") + sep;
      ArrayList<String> folders =
          xml.getElementsValues(xml.getElementsByTag("folder", fileSection), null);
      ArrayList<Element> fElements = xml.getElementsByTag("filename", fileSection);
      if (fElements.isEmpty()) // XXX workaround
      {
        fElements = xml.getElementsByTag("file", fileSection);
      }
      ArrayList<String> files = xml.getElementsValues(fElements, null);

      // XXX message box if you want overwrite and remove try catch
      for (String F : folders) {
        MyCommonMethods.copyFileOrFolder(
            basePath + type + sep + extFolder + sep + F, outPath + filesPath + F, "");
      }

      for (String F : files) {
        MyCommonMethods.copyFileOrFolder(
            basePath + type + sep + extFolder + sep + F, outPath + filesPath + F, "");
      }
    }

    if (mediaSection != null) {
      String mediaPath =
          mediaSection.getAttributeValue("folder") == null
              ? ""
              : mediaSection.getAttributeValue("folder") + sep;
      String mediaDest = mediaSection.getAttributeValue("destination");

      ArrayList<String> mediaFolders =
          xml.getElementsValues(xml.getElementsByTag("folder", mediaSection), null);
      ArrayList<Element> fElements = xml.getElementsByTag("filename", mediaSection);
      if (fElements.isEmpty()) // XXX workaround
      {
        fElements = xml.getElementsByTag("file", mediaSection);
      }
      ArrayList<String> mediaFiles = xml.getElementsValues(fElements, null);

      for (String F : mediaFolders) {
        MyCommonMethods.copyFileOrFolder(
            basePath + "media" + sep + mediaDest + sep + F, outPath + mediaPath + sep + F, "");
      }
      for (String F : mediaFiles) {
        MyCommonMethods.copyFileOrFolder(
            basePath + "media" + sep + mediaDest + sep + F, outPath + mediaPath + sep + F, "");
      }
    }

    if (langSection != null) {
      String langPath =
          langSection.getAttributeValue("folder") == null
              ? ""
              : langSection.getAttributeValue("folder") + sep;
      ArrayList<Element> langFiles = xml.getElementsByTag("language", langSection);
      for (Element E : langFiles) {
        String folder = E.getAttributeValue("tag");
        String file = E.getValue();
        MyCommonMethods.copyFileOrFolder(
            basePath + "language" + sep + folder + sep + file,
            outPath + langPath + sep + E.getValue(),
            "");
      }
    }
  }