org.openmeetings.app.installation.ImportInitvalues.java Source code

Java tutorial

Introduction

Here is the source code for org.openmeetings.app.installation.ImportInitvalues.java

Source

/*
 * 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));
    }
}