Package org.openmeetings.app.installation

Source Code of org.openmeetings.app.installation.ImportInitvalues

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License") +  you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.openmeetings.app.installation;

import java.io.File;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.openmeetings.app.OpenmeetingsVariables;
import org.openmeetings.app.data.basic.Configurationmanagement;
import org.openmeetings.app.data.basic.ErrorManagement;
import org.openmeetings.app.data.basic.FieldLanguageDaoImpl;
import org.openmeetings.app.data.basic.Fieldmanagment;
import org.openmeetings.app.data.basic.Navimanagement;
import org.openmeetings.app.data.basic.dao.OmTimeZoneDaoImpl;
import org.openmeetings.app.data.calendar.daos.AppointmentCategoryDaoImpl;
import org.openmeetings.app.data.calendar.daos.AppointmentReminderTypDaoImpl;
import org.openmeetings.app.data.conference.PollManagement;
import org.openmeetings.app.data.conference.Roommanagement;
import org.openmeetings.app.data.user.Organisationmanagement;
import org.openmeetings.app.data.user.Salutationmanagement;
import org.openmeetings.app.data.user.Statemanagement;
import org.openmeetings.app.data.user.Usermanagement;
import org.openmeetings.app.data.user.dao.UsersDaoImpl;
import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
import org.openmeetings.app.persistence.beans.lang.Fieldvalues;
import org.openmeetings.utils.ImportHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

public class ImportInitvalues {

  private static final Logger log = Red5LoggerFactory.getLogger(
      ImportInitvalues.class, OpenmeetingsVariables.webAppRootKey);

  public static final String languageFolderName = "languages/";
  private static final String nameOfLanguageFile = "languages.xml";
  private static final String nameOfCountriesFile = "countries.xml";
  private static final String nameOfTimeZoneFile = "timezones.xml";
  private static final String nameOfErrorFile = "errorvalues.xml";

  @Autowired
  private Configurationmanagement cfgManagement;
  @Autowired
  private Usermanagement userManagement;
  @Autowired
  private UsersDaoImpl usersDao;
  @Autowired
  private Fieldmanagment fieldmanagment;
  @Autowired
  private FieldLanguageDaoImpl fieldLanguageDaoImpl;
  @Autowired
  private Statemanagement statemanagement;
  @Autowired
  private OmTimeZoneDaoImpl omTimeZoneDaoImpl;
  @Autowired
  private Navimanagement navimanagement;
  @Autowired
  private ErrorManagement errorManagement;
  @Autowired
  private Salutationmanagement salutationmanagement;
  @Autowired
  private Organisationmanagement organisationmanagement;
  @Autowired
  private Roommanagement roommanagement;
  @Autowired
  private AppointmentCategoryDaoImpl appointmentCategoryDaoImpl;
  @Autowired
  private AppointmentReminderTypDaoImpl appointmentReminderTypDaoImpl;
  @Autowired
  private PollManagement pollManagement;

  public void loadMainMenu() {

    userManagement.addUserLevel("User", 1);
    userManagement.addUserLevel("Moderator", 2);
    userManagement.addUserLevel("Admin", 3);
    userManagement.addUserLevel("Web-Service (only access via SOAP)", 4);
    log.debug("UserLevels ADDED");

    /*
     * ######################## Dashboard Menu Points
     */
    navimanagement.addGlobalStructure("home", 1, 124, false, true, 1,
        "home", "false", 582L);
    navimanagement.addMainStructure("dashboardModuleStartScreen", 1, 290,
        true, false, 1, "Dashboard Module", 1, "false", 1450L);
    navimanagement.addMainStructure("dashboardModuleCalendar", 2, 291,
        true, false, 1, "Module Calendar", 1, "false", 1451L);

    /*
     * ######################## Recording Menu Points - disabled by default
     */

    navimanagement.addGlobalStructure("record", 2, 395, false, true, 1,
        "record", "false", 583L);
    navimanagement.addMainStructure("recordModule", 1, 395, true, false, 1,
        "Module Recording Player", 2, "false", 1452L);

    /*
     * String action, int naviorder, long fieldvalues_id, boolean isleaf,
     * boolean isopen, long level_id, String name, long global_id
     */

    /*
     * ######################## Conference Menu Points
     */

    navimanagement.addGlobalStructure("meetings", 3, 792, false, true, 1,
        "List of Conference Rooms Global Navi", "false", 793L);

    navimanagement.addMainStructure("conferenceModuleRoomList", 1, 792,
        true, false, 1, "List of Conference Rooms Main Navi", 3,
        "false", 1453L);

    /*
     * ######################## Event Menu Points
     */

    navimanagement.addGlobalStructure("events", 4, 3, false, true, 1,
        "List of Event Rooms Global Navi", "true", 585L);

    navimanagement.addMainStructure("eventModuleRoomList", 1, 3, true,
        false, 1, "List of Event Rooms Main Navi", 4, "false", null);

    /*
     * ######################## Moderation Menu Points - disabled by default
     */
    navimanagement.addGlobalStructure("moderate", 5, 649L, false, true, 2,
        "Moderation Menu", "true", 660L);

    navimanagement.addMainStructure("moderatorModuleUser", 1, 650, true,
        false, 1, "Moderate Users", 5, "false", null);

    navimanagement.addMainStructure("moderatorModuleRoom", 1, 651, true,
        false, 1, "Moderate Rooms", 5, "false", null);

    /*
     * ######################## Administration Menu Points
     */

    navimanagement.addGlobalStructure("admin", 6, 6, false, true, 3,
        "Administration Menu", "false", 586L);

    navimanagement.addMainStructure("adminModuleUser", 14, 125, true,
        false, 2, "Administration of Users", 6, "false", 1454L);

    navimanagement.addMainStructure("adminModuleConnections", 15, 597,
        true, false, 3, "Aministration of Connections", 6, "false",
        1455L);

    navimanagement.addMainStructure("adminModuleOrg", 16, 127, true, false,
        3, "Administration of Organizations", 6, "false", 1456L);

    navimanagement.addMainStructure("adminModuleRoom", 17, 186, true,
        false, 3, "Administration of Rooms", 6, "false", 1457L);

    navimanagement.addMainStructure("adminModuleConfiguration", 18, 263,
        true, false, 3, "Administration of Configuration", 6, "false",
        1458L);

    navimanagement.addMainStructure("adminModuleLanguages", 19, 348, true,
        false, 3, "Administration of Languages", 6, "false", 1459L);

    navimanagement.addMainStructure("adminModuleLDAP", 20, 1103, true,
        false, 3, "Administration of LDAP Configs", 6, "false", 1460L);

    navimanagement.addMainStructure("adminModuleBackup", 21, 367, true,
        false, 3, "Administration of Backups", 6, "false", 1461L);
    log.debug("MainMenu ADDED");

    errorManagement.addErrorType(new Long(1), new Long(322));
    errorManagement.addErrorType(new Long(2), new Long(323));
    log.debug("Error types ADDED");
  }

  public void loadErrorMappingsFromXML(String filePath) throws Exception {

    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(filePath, ImportInitvalues.nameOfErrorFile));

    Element root = document.getRootElement();

    for (@SuppressWarnings("unchecked")
    Iterator<Element> it = root.elementIterator("row"); it.hasNext();) {

      Element row = it.next();

      Long errorvalues_id = null;
      Long fieldvalues_id = null;
      Long errortype_id = null;

      for (@SuppressWarnings("unchecked")
      Iterator<Element> itSub = row.elementIterator("field"); itSub
          .hasNext();) {

        Element field = itSub.next();

        String name = field.attributeValue("name");
        String text = field.getText();
        // System.out.println("NAME | TEXT "+name+" | "+text);
        if (name.equals("errorvalues_id"))
          errorvalues_id = Long.valueOf(text).longValue();
        if (name.equals("fieldvalues_id"))
          fieldvalues_id = Long.valueOf(text).longValue();
        if (name.equals("errortype_id"))
          errortype_id = Long.valueOf(text).longValue();
      }

      errorManagement.addErrorValues(errorvalues_id, errortype_id,
          fieldvalues_id);
    }
    log.debug("ErrorMappings ADDED");
  }

  public void loadSalutations() {
    salutationmanagement.addUserSalutation("Mr", 261);
    salutationmanagement.addUserSalutation("Ms", 262);
    salutationmanagement.addUserSalutation("Mrs", 841);
    salutationmanagement.addUserSalutation("Dr", 842);
    salutationmanagement.addUserSalutation("Prof", 1464);
    log.debug("Salutations ADDED");
  }

  public void loadConfiguration(InstallationConfig cfg) {
    cfgManagement
        .addConfByKey(
            3,
            "crypt_ClassName",
            cfg.cryptClassName,
            null,
            "This Class is used for Authentification-Crypting. "
                + "Be carefull what you do here! If you change it while "
                + "running previous Pass of users will not be workign anymore! "
                + "for more Information see http://code.google.com/p/openmeetings/wiki/CustomCryptMechanism");

    cfgManagement.addConfByKey(3, "screen_viewer", cfg.screenViewer, null,
        "ScreenViewer Type(0==standard, 1== jrdesktop)");

    cfgManagement.addConfByKey(3, "allow_frontend_register",
        cfg.allowFrontendRegister, null, "");

    cfgManagement.addConfByKey(3, "default_group_id", "1", null, "");

    // this domain_id is the Organisation of users who register through the
    // frontend
    cfgManagement.addConfByKey(3, "default_domain_id", "1", null, "");

    // "smtp.xmlcrm.org"
    cfgManagement.addConfByKey(3, "smtp_server", cfg.smtpServer, null,
        "this is the smtp server to send messages");
    // 25
    cfgManagement.addConfByKey(3, "smtp_port", cfg.smtpPort, null,
        "this is the smtp server port normally 25");
    // "openmeetings@xmlcrm.org"
    cfgManagement.addConfByKey(3, "system_email_addr", cfg.mailReferer, null,
        "all send EMails by the system will have this address");
    // "openmeetings@xmlcrm.org"
    cfgManagement.addConfByKey(3, "email_username", cfg.mailAuthName, null,
        "System auth email username");
    //
    cfgManagement.addConfByKey(3, "email_userpass", cfg.mailAuthPass, null,
        "System auth email password");

    cfgManagement.addConfByKey(3, "mail.smtp.starttls.enable", cfg.mailUseTls,
        null, "Enable TLS 1=true, 0=false");

    cfgManagement.addConfByKey(3, "application.name",
        Configurationmanagement.DEFAULT_APP_NAME, null,
        "Name of the Browser Title window");

    // "1" == "EN"
    cfgManagement.addConfByKey(3, "default_lang_id", cfg.defaultLangId, null,
        "Default System Language ID see language.xml");

    cfgManagement.addConfByKey(3, "swftools_zoom", cfg.swfZoom, null,
        "dpi for conversion of PDF to SWF");

    cfgManagement.addConfByKey(3, "swftools_jpegquality", cfg.swfJpegQuality, null,
        "compression quality for conversion of PDF to SWF");

    cfgManagement.addConfByKey(3, "swftools_path", cfg.swfPath, null,
        "Path To SWF-Tools");

    cfgManagement.addConfByKey(3, "imagemagick_path", cfg.imageMagicPath, null,
        "Path to ImageMagick tools");

    cfgManagement.addConfByKey(3, "sox_path", cfg.soxPath, null,
        "Path To SoX-Tools");

    cfgManagement.addConfByKey(3, "ffmpeg_path", cfg.ffmpegPath, null,
        "Path To FFMPEG");
    cfgManagement.addConfByKey(3, "office.path", cfg.officePath, null,
        "The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically");
    cfgManagement
      .addConfByKey(
          3,
          "jod.path",
          cfg.jodPath,
          null,
          "The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar");

   
    cfgManagement.addConfByKey(3, "rss_feed1", cfg.urlFeed, null, "Feed URL");

    cfgManagement.addConfByKey(3, "rss_feed2", cfg.urlFeed2, null,
        "Feed URL 2");

    cfgManagement
        .addConfByKey(3, "sendEmailAtRegister", cfg.sendEmailAtRegister,
            null,
            "User get a EMail with their Account data. Values: 0(No) or 1(Yes)");

    cfgManagement
        .addConfByKey(
            3,
            "sendEmailWithVerficationCode",
            cfg.sendEmailWithVerficationCode,
            null,
            "User must activate their account by clicking on the "
                + "activation-link in the registering Email. Values: 0(No) or 1(Yes) "
                + "It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while "
                + "sendEmailAtRegister is 0(No) cause you need"
                + "to send a EMail.");
    cfgManagement
        .addConfByKey(
            3,
            "default_export_font",
            cfg.defaultExportFont,
            null,
            "The Name of the Font used for exporting/render Images from Whiteboard"
                + "The Font has to exist on the Server which runs Red5");

    cfgManagement.addConfByKey(3, "default.rpc.userid", "" + 1, null,
        "The User-Id of the Control User in OpenMeetings");

        // ***************************************
        // ***************************************
        // red5SIP Integration Coniguration Values
        // ***************************************

        cfgManagement.addConfByKey(3, "red5sip.enable", cfg.red5SipEnable, null,
        "Enable to enable the red5SIP integration ");
        cfgManagement.addConfByKey(3, "red5sip.room_prefix", cfg.red5SipRoomPrefix, null,
        "Enable to enable the red5SIP integration ");
        cfgManagement.addConfByKey(3, "red5sip.exten_context", cfg.red5SipExtenContext, null,
        "Enable to enable the red5SIP integration ");

    // ***************************************
    // ***************************************
    // SIP Applet Configuration Values
    // ***************************************

    cfgManagement.addConfByKey(3, "sip.enable", cfg.sipEnable, null,
        "Enable to load the SIP Applet in the Client and "
            + "call the SIP Applet whenever you enter a Room");

    cfgManagement.addConfByKey(3, "sip.realm", cfg.sipRealm, null,
        "So called *Domain of the SIP Provider*");

    cfgManagement.addConfByKey(3, "sip.port", cfg.sipPort, null, "SIP Port");

    cfgManagement.addConfByKey(3, "sip.proxyname", cfg.sipProxyName, null,
        "SIP Proxy name (this is the outbound proxy)");

    cfgManagement
        .addConfByKey(3, "sip.tunnel", cfg.sipTunnel, null,
            "SIP Tunnel IP + Port, format domain:port, for example 10.0.0.0:443");

    cfgManagement.addConfByKey(3, "sip.codebase", cfg.sipCodebase, null,
        "The Base-URL to load the Ringtone from");

    cfgManagement.addConfByKey(3, "sip.forcetunnel", cfg.sipForceTunnel, null,
        "Force usage of the tunnel");

    // ***************************************
    // ***************************************
    // OpenXG Configuration Values
    // ***************************************

    cfgManagement.addConfByKey(3, "sip.openxg.enable", cfg.sipOpenxgEnable,
        null,
        "Enable the OpenXG XML-RPC Gateway through the Wrapper URL");

    cfgManagement
        .addConfByKey(
            3,
            "openxg.wrapper.url",
            cfg.openxgWrapperUrl,
            null,
            "openxg_wrapper_url, null, OpenXG XML-RPC Wrapper URL, the Wrapper can only "
                + "be located on 127.0.01 by default, "
                + "for example http://127.0.0.1:5080/rpc_client/rpc_gateway_wrapper.php");

    cfgManagement.addConfByKey(3, "openxg.client.id", cfg.openxgClientId,
        null, "OpenXG XML-RPC Client ID");

    cfgManagement.addConfByKey(3, "openxg.client.secret",
        cfg.openxgClientSecret, null, "OpenXG XML-RPC Client Secret");

    cfgManagement.addConfByKey(3, "openxg.client.domain",
        cfg.openxgClientDomain, null, "OpenXG Domain");

    cfgManagement.addConfByKey(3, "openxg.community.code",
        cfg.openxgCommunityCode, null, "OpenXG Community Code");

    cfgManagement.addConfByKey(3, "openxg.language.code",
        cfg.openxgLanguageCode, null, "OpenXG Language Code");

    cfgManagement.addConfByKey(3, "openxg.adminid", cfg.openxgAdminId, null,
        "OpenXG Admin ID");

    // ***************************************
    // ***************************************
    // Phone Range Configuration Values
    // ***************************************

    cfgManagement.addConfByKey(3, "sip.language.phonecode",
        cfg.sipLanguagePhoneCode, null, "For example +358 for Finland");

    cfgManagement
        .addConfByKey(3, "sip.phonerange.start", cfg.sipPhoneRangeStart,
            null,
            "The first number in the Range of Phone Numbers in national format");

    cfgManagement.addConfByKey(3, "sip.phonerange", cfg.sipPhoneRange, null,
        "Amount of numbers in the Phone Range available");

    cfgManagement.addConfByKey(3, "sip.phonerange.currentindex", "" + 0,
        null, "Number of used Phone Numbers in the sip.phonerange");

    cfgManagement
        .addConfByKey(3, "sip.phonerange.conference.currentindex",
            "" + 0, null,
            "Number of used Phone Numbers in the sip.phonerange for the conferences");

    // ***************************************
    // ***************************************
    // Timezone settings
    // ***************************************

    cfgManagement.addConfByKey(3, "default.timezone", cfg.ical_timeZone,
        null, "This is the default timezone if nothing is specified");

    // ***************************************
    // ***************************************
    // additional settings
    // ***************************************

    cfgManagement.addConfByKey(3, "show.facebook.login", "" + 0, null,
        "Show Facebook Login");

    cfgManagement.addConfByKey(3, "default.quality.screensharing", "1",
            null,
            "Default selection in ScreenSharing Quality:\n 0 - bigger frame rate, no resize\n 1 - no resize\n 2 - size == 1/2 of selected area\n 3 - size == 3/8 of selected area");

    cfgManagement.addConfByKey(3, "default.dashboard.tab", "0", null,
        "Default selection in Dashboard tabs as tab-index-id");

    cfgManagement.addConfByKey(3, "dashboard.show.myrooms", "1", null,
        "Show My Rooms Tab");

    cfgManagement.addConfByKey(3, "dashboard.show.chat", "1", null,
        "Show Chat Tab");

    cfgManagement.addConfByKey(3, "dashboard.show.rssfeed", "0", null,
        "Show RSS Tab");

    cfgManagement
        .addConfByKey(
            3,
            "show.whiteboard.draw.status",
            "0",
            null,
            "Display name of the user who draw the current object (User Name auto-disapper after 3 seconds.");

    cfgManagement.addConfByKey(3, "max_upload_size", new Integer(
        ImportHelper.DEFAULT_MAX_UPLOAD_SIZE).toString(), null,
        "Maximum size of upload file (bytes)"); // defaults to 1GB

    cfgManagement
        .addConfByKey(
            3,
            "number.minutes.reminder.send",
            "15",
            null,
            "The number of minutes before reminder emails are send. Set to 0 to disable reminder emails");

    cfgManagement.addConfByKey(3, "user.login.minimum.length", "" + InstallationConfig.USER_LOGIN_MINIMUM_LENGTH, null,
        "Number of chars needed in a user login");

    cfgManagement.addConfByKey(3, "user.pass.minimum.length", "" + InstallationConfig.USER_PASSWORD_MINIMUM_LENGTH, null,
        "Number of chars needed in a user login");

    cfgManagement
        .addConfByKey(3, "calendar.conference.rooms.default.size",
            "50", null,
            "Default number of participants conference room created via calendar");

    cfgManagement
        .addConfByKey(
            3,
            "use.old.style.ffmpeg.map.option",
            "0",
            null,
            "specify a 1 if you would like to use old FFMPEG -map option with 0.0 instead of 0:0");

    // give exclusive audio key code
    cfgManagement
        .addConfByKey(
            3,
            "exclusive.audio.keycode",
            "123",
            null,
            "A hot key code for the 'give exclusive audio' functionality. Keycode 123 is F12");

    // system-wide ldap params
    cfgManagement.addConfByKey(
            3,
            "ldap_default_id",
            "0",
            null,
            "Ldap domain selected by default in the login screen");
   
    // set inviter's email address as ReplyTo in email invitations
    cfgManagement.addConfByKey(
            3,
            "inviter.email.as.replyto",
            cfg.replyToOrganizer,
            null,
            "Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)");
   
    log.debug("Configuration ADDED");
  }

  public void loadRoomTypes() {
    long conference_Id = roommanagement
        .addRoomType("conference (1-25 users)", false);
    log.debug("conference_Id: " + conference_Id);
   
    //Audience room type is not in use anymore
    roommanagement.addRoomType("audience (1-50 users)", true);

    long restricted_Id = roommanagement
        .addRoomType("restricted  (1-150 users)", false);
    log.debug("restricted_Id: " + restricted_Id);

    long interview_Id = roommanagement
        .addRoomType("interview  (1:1 meeting with recording)", false);
    log.debug("interview_Id: " + interview_Id);
   
    //Custom room type is not in use anymore
    roommanagement.addRoomType("custom (extension point for your plugin)", true);
    log.debug("RoomTypes ADDED");
  }
 
  public void loadDefaultRooms(boolean createRooms) {
    if (createRooms) {
      //hardcoded IDs (they are not intended to be changed)
      long conference_Id = 1;
      long restricted_Id = 3;
      long interview_Id = 4;
     
      roommanagement.addRoom(3, "public Interview Room", interview_Id,
          "", new Long(16), true, null, false, false, null, false,
          null, true, false, false, "", "", "", null, null, null,
          false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          false // showMicrophoneStatus
          );

      roommanagement.addRoom(3, "public Conference Room", conference_Id,
          "", new Long(32), true, null, false, false, null, false,
          null, true, false, false, "", "", "", null, null, null,
          false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          false // showMicrophoneStatus
          );

      roommanagement.addRoom(3, "public Video Only Room", conference_Id,
          "", new Long(32), true, null, false, false, null, false,
          null, true, false, false, "", "", "", null, null, null,
          false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          false // showMicrophoneStatus
          );

      roommanagement.addRoom(3, "public Video And Whiteboard Room",
          conference_Id, "", new Long(32), true, null, false, false,
          null, false, null, true, false, false, "", "", "", null,
          null, null, false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          false // showMicrophoneStatus
          );

      roommanagement.addRoom(3, "public Restricted Room", restricted_Id,
          "", new Long(100), true, null, false, false, null, false,
          null, true, false, false, "", "", "", null, null, null,
          false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          false // showMicrophoneStatus
          );

      roommanagement.addRoom(3, "restricted room with micro option set",
          restricted_Id, "", new Long(100), true, null, false, false,
          null, false, null, true, false, false, "", "", "", null,
          null, null, false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          true // showMicrophoneStatus
          );

      roommanagement.addRoom(3, "conference room with micro option set",
          conference_Id, "", new Long(32), true, null, false, false,
          null, false, null, true, false, false, "", "", "", null,
          null, null, false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          true // showMicrophoneStatus
          );

      long room2 = roommanagement.addRoom(3, "private Conference Room",
          conference_Id, "", new Long(32), false, null, false, false,
          null, false, null, true, false, false, "", "", "", null,
          null, null, false, // hideTopBar
          false, // hideChat
          false, // hideActivitiesAndActions
          false, // hideFilesExplorer
          false, // hideActionsMenu
          false, // hideScreenSharing
          false, // hideWhiteboard
          false // showMicrophoneStatus
          );

      roommanagement.addRoomToOrganisation(3, room2, 1);
     
    }
  }

  public void loadInitUserAndOrganisation(String username, String userpass,
      String email, String defaultOrganisationName, String ical_timeZone,
      String configdefaultLang) {
    // Add user
    try {

      Long default_lang_id = Long.parseLong(configdefaultLang);
      if (default_lang_id == null)
        default_lang_id = 1L;

      // Add default group
      Long organisation_id = organisationmanagement.addOrganisation(
          defaultOrganisationName, 1);

      // BaseUrl as param is empty as we do not send an EMAIL here
      Long user_id = userManagement.registerUserInit(new Long(3), 3, 1,
          1, username, userpass, "lastname", "firstname", email,
          new java.util.Date(), "street", "no", "fax", "zip", 1,
          "town", default_lang_id, false,
          Arrays.asList(organisation_id), "phone", "", false, "", "",
          "", false, omTimeZoneDaoImpl.getOmTimeZoneByIcal(ical_timeZone), false, "", "", false, true);

      log.debug("Installation - User Added user-Id " + user_id);

      if (user_id < 0) {
        throw new Exception(
            "Could not add user user returns a negative error message: "
                + user_id);
      }
    } catch (Exception e) {
      log.error("[loadInitUserAndOrganisation] ", e);
    }
  }

  /**
   * import all language Names from the xml file
   *
   * @param filePath
   * @throws Exception
   */
  private void loadCountriesFiles(String filePath) throws Exception {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(filePath, ImportInitvalues.nameOfCountriesFile));

    Element root = document.getRootElement();

    for (@SuppressWarnings("rawtypes")
    Iterator it = root.elementIterator("country"); it.hasNext();) {
      Element item = (Element) it.next();

      statemanagement.addState(
        item.attributeValue("name")
        , item.attributeValue("short")
        , Integer.parseInt(item.attributeValue("code")));
    }
    log.debug("Countries ADDED");
  }

  private void loadTimeZoneFiles(String filePath) throws Exception {
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(filePath, ImportInitvalues.nameOfTimeZoneFile));

    Element root = document.getRootElement();

    for (@SuppressWarnings("rawtypes")
    Iterator it = root.elementIterator("timezone"); it.hasNext();) {
      Element item = (Element) it.next();
      String timeZoneName = item.attributeValue("name");
      String timeZoneLabel = item.attributeValue("label");
      String iCal = item.attributeValue("iCal");
      Integer orderId = Integer.valueOf(item.attributeValue("orderId"));

      omTimeZoneDaoImpl.addOmTimeZone(timeZoneName, timeZoneLabel, iCal,
          orderId);
    }
    log.debug("TimeZones ADDED");
  }

  public List<OmTimeZone> getTimeZones(String filePath) throws Exception {
    log.debug(":: getTimeZones ::");

    List<OmTimeZone> omTimeZones = new LinkedList<OmTimeZone>();

    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(filePath, ImportInitvalues.nameOfTimeZoneFile));

    Element root = document.getRootElement();

    for (@SuppressWarnings("rawtypes")
    Iterator it = root.elementIterator("timezone"); it.hasNext();) {
      Element item = (Element) it.next();
      String timeZoneName = item.attributeValue("name");
      String timeZoneLabel = item.attributeValue("label");
      Integer orderId = Integer.valueOf(item.attributeValue("orderId"));
      String iCal = item.attributeValue("iCal");

      OmTimeZone omTimeZone = new OmTimeZone();
      omTimeZone.setIcal(iCal);
      omTimeZone.setJname(timeZoneName);
      omTimeZone.setLabel(timeZoneLabel);
      omTimeZone.setOrderId(orderId);

      omTimeZones.add(omTimeZone);
    }
   
    return omTimeZones;
  }

  /**
   * load all availible languages File names and language name's from the
   * config file
   *
   * @param filePath
   * @return
   * @throws Exception
   */
  public LinkedHashMap<Integer, LinkedHashMap<String, Object>> getLanguageFiles(
      String filePath) throws Exception {

    LinkedHashMap<Integer, LinkedHashMap<String, Object>> languages = new LinkedHashMap<Integer, LinkedHashMap<String, Object>>();

    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(filePath, ImportInitvalues.nameOfLanguageFile));

    Element root = document.getRootElement();

    for (@SuppressWarnings("unchecked")
    Iterator<Element> it = root.elementIterator("lang"); it.hasNext();) {
      Element item = it.next();
      String country = item.getText();
      Integer id = Integer.valueOf(item.attribute("id").getValue())
          .intValue();

      String rtl = item.attribute("rightToLeft").getValue();
      String code = item.attribute("code").getValue();

      LinkedHashMap<String, Object> lang = new LinkedHashMap<String, Object>();
      lang.put("id", id);
      lang.put("name", country);
      lang.put("rtl", rtl);
      lang.put("code", code);
      // log.error("getLanguageFiles "+country);
      languages.put(id, lang);
    }
    log.debug("Languages ADDED ");
    return languages;
  }

  /**
   * @author o.becherer initial fillment of Appointmentcategories
   */
  // ------------------------------------------------------------------------------
  public void loadInitAppointmentCategories() {
    log.debug("ImportInitValues.loadInitAppointmentCategories");

    try {
      appointmentCategoryDaoImpl.addAppointmentCategory(new Long(-1),
          "default", "default");
    } catch (Exception e) {
      log.error("Could not create AppointMentcategories");
      return;
    }

  }

  // ------------------------------------------------------------------------------

  /**
   * @author o.becherer initial fillment of AppointMentReminderTypes
   */
  // ------------------------------------------------------------------------------
  public void loadInitAppointmentReminderTypes() {

    log.debug("ImportInitValues.loadInitAppointmentReminderTypes");

    try {
      appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
          "do not send notification");
      appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
          "simple email");
      appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L,
          "iCal email");

    } catch (Exception e) {
      log.error("Could not create ReminderType");
      return;
    }
  }

  // ------------------------------------------------------------------------------

  /**
   * Loading initial Language from xml Files into database
   */
  // ------------------------------------------------------------------------------
  public void loadInitLanguages(String filePath) throws Exception {

    loadCountriesFiles(filePath);

    loadTimeZoneFiles(filePath);

    LinkedHashMap<Integer, LinkedHashMap<String, Object>> listlanguages = this
        .getLanguageFiles(filePath);

    boolean langFieldIdIsInited = false;

    /** Read all languages files */
    for (Iterator<Integer> itLang = listlanguages.keySet().iterator(); itLang
        .hasNext();) {
      Integer langId = itLang.next();
      LinkedHashMap<String, Object> lang = listlanguages.get(langId);
      log.debug("loadInitLanguages lang: " + lang);

      String langName = (String) lang.get("name");
      String rtl = (String) lang.get("rtl");
      String code = (String) lang.get("code");

      log.debug("loadInitLanguages rtl from xml: " + rtl);

      Boolean langRtl = false;

      if (rtl != null && rtl.equals("true"))
        langRtl = true;

      Long languages_id = fieldLanguageDaoImpl.addLanguage(langName,
          langRtl, code);

      SAXReader reader = new SAXReader();
      Document document = reader.read(new File(filePath, langName + ".xml"));

      Element root = document.getRootElement();

      for (@SuppressWarnings("rawtypes")
      Iterator it = root.elementIterator("string"); it.hasNext();) {
        Element item = (Element) it.next();
        // log.error(item.getName());

        Long id = Long.valueOf(item.attributeValue("id")).longValue();
        String name = item.attributeValue("name");
        String value = "";

        for (@SuppressWarnings("rawtypes")
        Iterator t2 = item.elementIterator("value"); t2.hasNext();) {
          Element val = (Element) t2.next();
          value = val.getText();
        }

        // log.error("result: "+langFieldIdIsInited+" "+id+" "+name+" "+value);

        Fieldvalues fv = null;
        // Only do that for the first field-set
        if (!langFieldIdIsInited) {
          fv = fieldmanagment.addFieldById(name, id);
        } else {
          fv = fieldmanagment.getFieldvaluesById(id);
        }

        fieldmanagment.addFieldValueByFieldAndLanguage(fv,
            languages_id, value);

      }
      log.debug("Lang ADDED: " + lang);
      if (!langFieldIdIsInited)
        langFieldIdIsInited = true;
    }

  }

  // ------------------------------------------------------------------------------

  /**
   * Loading initial Language from xml Files into database
   */
  // ------------------------------------------------------------------------------
  public void loadPollTypes() {
    pollManagement.addPollType(26L, false);
    pollManagement.addPollType(27L, true);
  }
  // ------------------------------------------------------------------------------

  public void loadSystem(String filePath, InstallationConfig cfg, boolean force) throws Exception {
    //FIXME dummy check if installation was performed before
    if(!force && usersDao.getAllUsers().size() > 0) {
      log.debug("System contains users, no need to install data one more time.");
      return;
    }
    loadMainMenu();
    loadErrorMappingsFromXML(filePath);
    loadInitLanguages(filePath);
    loadSalutations();
    // AppointMent Categories
    loadInitAppointmentCategories();
    // Appointment Reminder types
    loadInitAppointmentReminderTypes();
    // Appointment poll types
    loadPollTypes();
    loadRoomTypes();
   
    loadConfiguration(cfg);
  }
 
  public void loadAll(String filePath, InstallationConfig cfg, String username,
      String userpass, String useremail, String groupame, String timeZone, boolean force) throws Exception {
    //FIXME dummy check if installation was performed before
    if(!force && usersDao.getAllUsers().size() > 0) {
      log.debug("System contains users, no need to install data one more time.");
      return;
    }
    loadSystem(filePath, cfg, force);
    loadInitUserAndOrganisation(username,
        userpass, useremail, groupame, timeZone, cfg.defaultLangId);
   
    loadDefaultRooms("1".equals(cfg.createDefaultRooms));
  }
}
TOP

Related Classes of org.openmeetings.app.installation.ImportInitvalues

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.