/**
* OLAT - Online Learning and Training<br>
* http://www.olat.org
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <hr>
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* This file has been modified by the OpenOLAT community. Changes are licensed
* under the Apache 2.0 license as the original file.
*/
package org.olat.user;
import java.util.Hashtable;
import java.util.Map;
import org.olat.core.id.OLATResourceable;
import org.olat.core.id.UserConstants;
import org.olat.core.logging.AssertException;
/**
* Description: <br>
* The HomePageConfig class represents a configuration for a Homepage. It is
* persisted as an xml file in the ???. Loading and saving of
* configuration files is managed through the HomePageConfigManagerImpl.
* <p>
* A HomePageConfig has a class wide <code>CURRENTVERSION</code>, an integer
* denoting the most actual code version of the HomePageConfig. The attribute
* <code>version</code> is the version number of an instance.
* <p>
* <b><code>CURRENTVERSION vs. version</code> </b>
* <ul>
* <li><code>version == CURRENTVERSION</code><br>
* an up to date HomePageConfig</li>
* <li><code>version < CURRENTVERSION</code><br>
* demands for resolving version differences, as the loaded HomePageConfig may
* contain outdated configuration information</li>
* </ul>
* <P>
*
* Initial Date: July 15, 2005 <br>
* @author Alexander Schneider
*/
public class HomePageConfig implements OLATResourceable{
transient private final static int CURRENTVERSION = 4;
transient private final static String RESOURCEABLETYPENAME = "HOMEPAGECONFIG";
transient public final static String KEY_RESOURCEABLEID = "RESOURCEABLEID";
transient public final static String KEY_USERNAME = "USERNAME";
transient public static final String KEY_TEXTABOUTME = "TEXTABOUTME";
// use the user property names defined in UserConstants instead!
@Deprecated
transient public final static String KEY_EMAIL = "EMAIL";
@Deprecated
transient public final static String KEY_GENDER = "GENDER";
@Deprecated
transient public final static String KEY_BIRTHDAY = "BIRTHDAY";
@Deprecated
transient public final static String KEY_TELMOBILE = "TELMOBILE";
@Deprecated
transient public static final String KEY_TELPRIVATE = "TELPRIVATE";
@Deprecated
transient public static final String KEY_TELOFFICE = "TELOFFICE";
@Deprecated
transient public static final String KEY_ADDRESS = "ADDRESS";
@Deprecated
transient public static final String KEY_INSTITIUTIONALNAME = "INSTITUTIONALNAME";
@Deprecated
transient public static final String KEY_INSTITUTIONEMAIL = "INSTITUTIONEMAIL";
/**
* config file version from file
*/
private int version = -1;
/**
* holds the configuration
*/
private Map<String,Object> configuration = new Hashtable<>();
public HomePageConfig() {
// empty, for XSTream
}
/**
* @return version of this loaded/created instance
*/
public int getVersion() {
return version;
}
/**
* initialize with default values
*/
public void initDefaults() {
// version 1
// removed, see version 4 comment
// version 2
configuration.put(KEY_USERNAME, "");
// version 3
configuration.put(KEY_RESOURCEABLEID, "");
// version 4
// no default values for flags, they are set in the user preferences
// configuration. See olat_userconfig.xml in the spring config dir
this.version = CURRENTVERSION;
}
/**
* resolve issues of changed configuration version. Such as:
* <ul>
* <li>add new default values <br>
* <b>>>add the them </b></li>
* <li>no longer exisiting key value pairs <br>
* <b>>>remove from configuration </b></li>
* <li>changing of value meanings/types <br>
* <b>>>convert the existing entries </b></li>
* </ul>
*/
public void resolveVersionIssues() {
if (version < CURRENTVERSION) {
// from version 1 -> 2
if (version == 1) {
configuration.put(KEY_USERNAME, "");
this.version = 2;
}
if (version == 2){
configuration.put(KEY_RESOURCEABLEID, "");
this.version = 3;
}
if (version == 3){
configuration.put(KEY_RESOURCEABLEID, "");
this.version = 4;
// migrate values to new style
setEnabled(UserConstants.EMAIL, isEnabled("EMAIL"));
configuration.remove("EMAIL");
setEnabled(UserConstants.GENDER, isEnabled("GENDER"));
configuration.remove("GENDER");
setEnabled(UserConstants.BIRTHDAY, isEnabled("BIRTHDAY"));
configuration.remove("BIRTHDAY");
setEnabled(UserConstants.TELMOBILE, isEnabled("TELMOBILE"));
configuration.remove("TELMOBILE");
setEnabled(UserConstants.TELOFFICE, isEnabled("TELOFFICE"));
configuration.remove("TELOFFICE");
setEnabled(UserConstants.TELPRIVATE, isEnabled("TELPRIVATE"));
configuration.remove("TELPRIVATE");
setEnabled(UserConstants.INSTITUTIONALNAME, isEnabled("INSTITUTIONALNAME"));
configuration.remove("INSTITUTIONALNAME");
setEnabled(UserConstants.INSTITUTIONALEMAIL, isEnabled("INSTITUTIONALEMAIL"));
configuration.remove("INSTITUTIONALEMAIL");
boolean addressEnabled = isEnabled("ADDRESS");
setEnabled(UserConstants.STREET, addressEnabled);
setEnabled(UserConstants.EXTENDEDADDRESS, addressEnabled);
setEnabled(UserConstants.POBOX, addressEnabled);
setEnabled(UserConstants.ZIPCODE, addressEnabled);
setEnabled(UserConstants.CITY, addressEnabled);
setEnabled(UserConstants.REGION, addressEnabled);
setEnabled(UserConstants.COUNTRY, addressEnabled);
configuration.remove("ADDRESS");
}
/*
* after resolving the issues, the version number is merged to the
* CURRENTVERSION !! leave this!
*/
this.version = CURRENTVERSION;
} else if (version > CURRENTVERSION) {
// this is an error
}
}
/**
* Enable or disable the visibility of a user property
* @param propertyName The name of the user property
* @param enabled true: enable visibility; false, disable
*/
public void setEnabled(String propertyName, boolean enabled) {
configuration.put(propertyName, new Boolean(enabled));
}
/**
* Check if the visibility of user property is enabled
* @param propertyName The name of the user property
* @return true: enable visibility; false, disable
*/
public boolean isEnabled(String propertyName) {
Boolean bool = (Boolean) configuration.get(propertyName);
if (bool == null) return false;
else return bool.booleanValue();
}
/**
*
* @param id
*/
public void setResourceableId(Long id){
configuration.put(KEY_RESOURCEABLEID, id);
}
/**
* @return id
*
*/
public Long getResourceableId() {
Long id = (Long) configuration.get(KEY_RESOURCEABLEID);
return id;
}
/**
* @return typeName
*/
public String getResourceableTypeName() {
return RESOURCEABLETYPENAME;
}
/**
*
* @param userName
*/
public void setUserName(String userName){
configuration.put(KEY_USERNAME, userName);
}
/**
* @return text about me
*/
public String getUserName() {
String userName = (String) configuration.get(KEY_USERNAME);
if (userName.equals("")) throw new AssertException("No username defined in " + HomePageConfigManager.HOMEPAGECONFIG_XML);
return userName;
}
/**
*
* @param textAboutMe
*/
public void setTextAboutMe(String textAboutMe) {
configuration.put(KEY_TEXTABOUTME, textAboutMe);
}
/**
* @return text about me
*/
public String getTextAboutMe() {
return (String) configuration.get(KEY_TEXTABOUTME);
}
/**
* @return boolean
*/
public boolean hasResourceableId() {
return !"".equals(configuration.get(KEY_RESOURCEABLEID));
}
}