cc.kune.core.server.init.DatabaseInitializer.java Source code

Java tutorial

Introduction

Here is the source code for cc.kune.core.server.init.DatabaseInitializer.java

Source

/*
 *
 * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under
 * one or more contributor license agreements (see COPYRIGHT for details).
 * The CA licenses this file to you under the GNU Affero General Public
 * License version 3, (the "License"); you may not use this file except in
 * compliance with the License. This file is part of kune.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package cc.kune.core.server.init;

import java.util.TimeZone;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.waveprotocol.box.server.authentication.PasswordDigest;

import cc.kune.core.client.errors.UserMustBeLoggedException;
import cc.kune.core.server.content.ContentManager;
import cc.kune.core.server.i18n.impl.I18nTranslationServiceDefault;
import cc.kune.core.server.manager.GroupManager;
import cc.kune.core.server.manager.I18nCountryManager;
import cc.kune.core.server.manager.I18nLanguageManager;
import cc.kune.core.server.manager.I18nTranslationManager;
import cc.kune.core.server.manager.LicenseManager;
import cc.kune.core.server.manager.UserManager;
import cc.kune.core.server.manager.impl.ContentConstants;
import cc.kune.core.server.persist.KuneTransactional;
import cc.kune.core.server.properties.KuneBasicProperties;
import cc.kune.core.shared.domain.ContentStatus;
import cc.kune.core.shared.dto.GroupType;
import cc.kune.domain.Content;
import cc.kune.domain.Group;
import cc.kune.domain.I18nCountry;
import cc.kune.domain.I18nLanguage;
import cc.kune.domain.I18nTranslation;
import cc.kune.domain.License;
import cc.kune.domain.User;

import com.google.inject.Inject;
import com.google.inject.Singleton;

// TODO: Auto-generated Javadoc
/**
 * The Class DatabaseInitializer.
 * 
 * @author danigb@gmail.com
 * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
 */
@Singleton
public class DatabaseInitializer {

    /** The Constant LOG. */
    private static final Log LOG = LogFactory.getLog(DatabaseInitializer.class);

    /** The content manager. */
    private final ContentManager contentManager;

    /** The country manager. */
    private final I18nCountryManager countryManager;

    /** The group manager. */
    private final GroupManager groupManager;

    /** The language manager. */
    private final I18nLanguageManager languageManager;

    /** The license manager. */
    private final LicenseManager licenseManager;

    /** The properties. */
    private final KuneBasicProperties properties;

    /** The translation manager. */
    private final I18nTranslationManager translationManager;

    /** The translation service. */
    private final I18nTranslationServiceDefault translationService;

    /** The user manager. */
    private final UserManager userManager;

    /**
     * Instantiates a new database initializer.
     * 
     * @param properties
     *          the properties
     * @param userManager
     *          the user manager
     * @param groupManager
     *          the group manager
     * @param licenseManager
     *          the license manager
     * @param languageManager
     *          the language manager
     * @param countryManager
     *          the country manager
     * @param translationManager
     *          the translation manager
     * @param contentManager
     *          the content manager
     * @param translationService
     *          the translation service
     */
    @Inject
    public DatabaseInitializer(final KuneBasicProperties properties, final UserManager userManager,
            final GroupManager groupManager, final LicenseManager licenseManager,
            final I18nLanguageManager languageManager, final I18nCountryManager countryManager,
            final I18nTranslationManager translationManager, final ContentManager contentManager,
            final I18nTranslationServiceDefault translationService) {
        this.properties = properties;
        this.userManager = userManager;
        this.groupManager = groupManager;
        this.licenseManager = licenseManager;
        this.languageManager = languageManager;
        this.countryManager = countryManager;
        this.translationManager = translationManager;
        this.translationService = translationService;
        this.contentManager = contentManager;
    }

    /**
     * Creates the def users group.
     * 
     * @throws Exception
     *           the exception
     * @throws UserMustBeLoggedException
     *           the user must be logged exception
     */
    private void createDefUsersGroup() throws Exception, UserMustBeLoggedException {
        final String adminName = properties.getAdminUserName();
        final String adminShortName = properties.getAdminShortName();
        final String adminEmail = properties.getAdminEmail();
        final String adminPassword = properties.getAdminPassword();

        final PasswordDigest passwdDigest = new PasswordDigest(adminPassword.toCharArray());
        userManager.createWaveAccount(adminShortName, passwdDigest);
        final User user = new User(adminShortName, adminName, adminEmail, passwdDigest.getDigest(),
                passwdDigest.getSalt(), languageManager.findByCode("en"), countryManager.findByCode("GB"),
                TimeZone.getDefault());
        groupManager.createUserGroup(user, false);
        final User dummyUser = new User("dummy", "dummy user", "example@example.com", passwdDigest.getDigest(),
                passwdDigest.getSalt(), languageManager.findByCode("en"), countryManager.findByCode("GB"),
                TimeZone.getDefault());
        groupManager.createUserGroup(dummyUser, false);

        final String siteName = properties.getDefaultSiteName();
        final String siteShortName = properties.getDefaultSiteShortName();
        final String defaultLicenseId = properties.getDefaultLicense();
        final License defaultLicense = licenseManager.findByShortName(defaultLicenseId);

        final Group siteGroup = new Group(siteShortName, siteName, defaultLicense, GroupType.PROJECT);
        groupManager.createGroup(siteGroup, user,
                ContentConstants.INITIAL_CONTENT.replaceAll("\\[%s\\]", siteName));

        final Content defaultContent = siteGroup.getDefaultContent();
        contentManager.setStatus(defaultContent.getId(), ContentStatus.publishedOnline);
        contentManager.save(defaultContent);

        // This is not necessary with ehcache (I think). Even worst, the
        // initialization hangs
        // userManager.reIndex();
        // groupManager.reIndex();
    }

    /**
     * Creates the licenses.
     */
    private void createLicenses() {
        // FIXME: Add CC RDF info (seems CC is working on new forms to add
        // license metadata)
        License license = new License("by-v3.0", "Creative Commons Attribution", "None",
                "http://creativecommons.org/licenses/by/3.0/", true, false, false, "", "images/lic/by80x15.png");
        licenseManager.persist(license);
        license = new License("by-sa-v3.0", "Creative Commons Attribution-ShareAlike", "None",
                "http://creativecommons.org/licenses/by-sa/3.0/", true, true, false, "",
                "images/lic/bysa80x15.png");
        licenseManager.persist(license);
        license = new License("by-nd-v3.0", "Creative Commons Attribution-NoDerivs", "None",
                "http://creativecommons.org/licenses/by-nd/3.0/", true, false, false, "",
                "images/lic/bynd80x15.png");
        licenseManager.persist(license);
        license = new License("by-nc-v3.0", "Creative Commons Attribution-NonCommercial", "None",
                "http://creativecommons.org/licenses/by-nc/3.0/", true, false, false, "",
                "images/lic/bync80x15.png");
        licenseManager.persist(license);
        license = new License("by-nc-sa-v3.0", "Creative Commons Attribution-NonCommercial-ShareAlike", "None",
                "http://creativecommons.org/licenses/by-nc-sa/3.0/", true, false, false, "",
                "images/lic/byncsa80x15.png");
        licenseManager.persist(license);
        license = new License("by-nc-nd-v3.0", "Creative Commons Attribution-NonCommercial-NoDerivs", "None",
                "http://creativecommons.org/licenses/by-nc-nd/3.0/", true, false, false, "",
                "images/lic/byncnd80x15.png");
        licenseManager.persist(license);
        license = new License("gfdl-v1-3", "GNU Free Documentation License",
                "The GNU Free Documentation License (GNU FDL or simply GFDL) is a copyleft license for free documentation, giving readers the rights to copy, redistribute and modify a work and requires all copies and derivatives to be available under the same license.",
                "http://www.gnu.org/copyleft/fdl.html", false, true, false, "", "images/lic/gnu-fdl.gif");
        licenseManager.persist(license);
        license = new License("fal", "Free Art License",
                "The Free Art license is a French copyleft license for works of art. It authorises the user to freely copy, spread, and transform creative works while respecting the author's rights.",
                "http://artlibre.org/licence/lal/en/", false, true, false, "", "images/lic/fal-license.gif");
        licenseManager.persist(license);
        license = new License("gpl-v3", "GNU General Public License",
                "This license grant the recipients of a computer program the rights of the free software definition and uses copyleft to ensure the freedoms are preserved, even when the work is changed or added to.",
                "http://www.gnu.org/licenses/gpl.html", false, true, false, "", "images/lic/gnu-gpl.gif");
        licenseManager.persist(license);
    }

    /**
     * Creates the others.
     */
    public void createOthers() {
        final I18nLanguage english = new I18nLanguage(Long.valueOf(1819), "en", "ltr", "English", "", "", "en",
                "eng", "eng", false, "", "", "", "c == 1 ? 1 : 2", null, "L", "MMM d\\, yyyy");
        final I18nLanguage spanish = new I18nLanguage(Long.valueOf(5889), "es", "ltr", "Spanish", "", "", "es",
                "spa", "spa", true, "Espaol", "", "", "c == 1 ? 1 : 2", null, "L", "dd/MM/yyyy");
        languageManager.persist(english);
        languageManager.persist(spanish);
        final I18nCountry gb = new I18nCountry(Long.valueOf(75), "GB", "GBP", ".", "%n", "", ".",
                "United Kingdom", "western", ",");
        countryManager.persist(gb);
        final I18nTranslation test = new I18nTranslation("test", english, "test", "");
        translationManager.persist(test);
    }

    /**
     * Inits the conditional.
     * 
     * @throws Exception
     *           the exception
     */
    public void initConditional() throws Exception {
        if (groupManager.count() == 0) {
            initialize();
        }
        translationService.init();
    }

    /**
     * Inits the database.
     * 
     * @throws Exception
     *           the exception
     */
    @KuneTransactional
    public void initDatabase() throws Exception {
        createLicenses();
        createOthers();
        createDefUsersGroup();
    }

    /**
     * Initialize.
     * 
     * @throws Exception
     *           the exception
     */
    private void initialize() throws Exception {
        LOG.warn("The default group '" + properties.getDefaultSiteName() + "' does not exist in Database, "
                + "creating it (see kune.default.site.shortName in kune.properties for more details)");
        initDatabase();
    }
}