|
From: <pka...@us...> - 2009-06-30 13:13:11
|
Revision: 280
http://cse-ip.svn.sourceforge.net/cse-ip/?rev=280&view=rev
Author: pkasprzak
Date: 2009-06-30 11:39:55 +0000 (Tue, 30 Jun 2009)
Log Message:
-----------
* WebConfig major rewrite
- Groups of settings are persisted / supported
- Only one single configuration
- Cleanups
- Interface changes (to better accomodate a ws-interface)
- Settings are not deleted from persistence on xml changes
- Setting-defaults are also persisted
Modified Paths:
--------------
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/configuration.xml
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Configuration.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManager.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManagerImpl.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Setting.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/SettingCategory.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/SettingNotFoundException.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-war/src/java/de/campussource/cse/webconfig/AuthServletStub.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-war/src/java/de/campussource/cse/webconfig/EditConfigurationServlet.java
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-war/web/WEB-INF/web.xml
Removed Paths:
-------------
trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-war/src/java/de/campussource/cse/webconfig/ConfigurationServlet.java
Modified: trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/configuration.xml
===================================================================
--- trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/configuration.xml 2009-06-27 16:12:05 UTC (rev 279)
+++ trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/configuration.xml 2009-06-30 11:39:55 UTC (rev 280)
@@ -1,6 +1,20 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
+ <category name="Core" description="Grundlegende CSE Systemeinstellungen">
+ <setting name="core_test_1" description="Test-Setting 1" default="test-value-1"/>
+ <setting name="core_test_2" description="Test-Setting 2" default="test-value-2"/>
+ <setting name="core_test_3" description="Test-Setting 3" default="test-value-3"/>
+ <setting name="core_test_4" description="Test-Setting 4" default="test-value-4"/>
+ </category>
+
+ <category name="Ilias" description="Ilias-Adapter Einstellungen">
+ <setting name="ilias_login_client" description="Ident des Clients" default="test"/>
+ <setting name="ilias_login_username" description="Username f\xFCr Login" default="root"/>
+ <setting name="ilias_login_password" description="Passwort f\xFCr Login" default="cs3-1p"/>
+ <setting name="ilias_ws_url" description="URL der WS-Schnittstelle" default="http://localhost/ilias3/webservice/soap/server.php?debug=1"/>
+ </category>
+<!--
<category public="false" name="csecore" description="Grundlegende CSE Systemeinstellungen">
<setting name="CSE_Health_Komponente_Aktiv" description="Nutzung der Health Komponente (automatische Behebung von Inkonsistenzen)" default="true" type="1"/>
<setting name="admin_email" description="E-Mail-Adresse f\xFCr Fehlerbenachrichtigungen" default="us...@do..." type="4"/>
@@ -16,7 +30,7 @@
<setting name="mapper_autoswapsystems" description="Immer das gr\xF6\xDFere System als Quellsystem benutzen" default="false" type="1"/>
</category>
- <!-- category public="true" name="ilias" description="Ilias-Client Einstellungen">
+ <category public="true" name="ilias" description="Ilias-Client Einstellungen">
<setting name="ilias_Name_der_Installation" description="Name der Installation" default="IliasClient"/>
<setting name="ilias_Name_der_globalen_Dozentenrolle" description="Name der globalen Dozentenrolle" default="Administrator"/>
<setting name="ilias_id_der_dozentenrolle" description="ID der globalen Dozentenrolle" default="149" type="0"/>
@@ -27,7 +41,7 @@
<setting name="ilias_SOAP_Admin_Passwort" description="SOAP Passwort" default="" type="3"/>
<setting name="ilias_SOAP_Service_Name" description="SOAP Servicename" default="ILIASSoapWebservice"/>
<setting name="ilias_SOAP_Service_Namespace" description="SOAP Namespace" default="urn:ilUserAdministration"/>
- </category -->
+ </category
<category public="true" name="ldap" description="LDAP Einstellungen">
<setting name="clix_ldap_providerurl" description="Provider URL" default="ldaps://phoebe.clix.uni-saarland.de"/>
@@ -49,7 +63,6 @@
<setting name="clix_internalcoursetypeidentifier" description="CLIX-ID der Veranstaltungsvorlage" default="104313" type="0"/>
<setting name="clix_defaulttextforcategory" description="Beschreibung f\xFCr angelegte Kategorien. $0 wird durch den Namen der Kategorie ersetzt." default="Sie befinden sich im Kurskatalog $0, in dem das komplette Vorlesungsverzeichnis des aktuellen Semesters abgebildet ist." type="7"/>
<setting name="clix_languageidentifier" description="Sprache f\xFCr Veranstaltungen (nach ISO 639)" default="de"/>
- <!-- setting name="clix_regtypedurationmonth" description="Anzeigezeitraum einer Veranstaltung im CLIX-Katalog (Monate)" default="6" type="0"/ -->
<setting name="clix_lecture_start_date" description="Startdatum f\xFCr Veranstaltungen" default="2008-04-01" type="8"/>
<setting name="clix_lecture_end_date" description="Enddatum f\xFCr Veranstaltungen" default="2008-09-30" type="8"/>
<setting name="clix_lecturedirdepth" description="Tiefe des Veranstaltungsverzeichnisses" default="4" type="0"/>
@@ -87,5 +100,6 @@
<setting name="lsf_SOAP_writeservice_url" description="SOAP Input Service URL" default="http://itmlsf01.univw.uni-saarland.de/qisserver/services/CSEService" type="6"/>
<setting name="lsf_SOAP_writeservice_username" description="SOAP Benutzername" default="admin"/>
<setting name="lsf_SOAP_writeservice_password" description="SOAP Passwort" default="password" type="3"/>
- </category>
+ </category>
+ -->
</configuration>
\ No newline at end of file
Modified: trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Configuration.java
===================================================================
--- trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Configuration.java 2009-06-27 16:12:05 UTC (rev 279)
+++ trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Configuration.java 2009-06-30 11:39:55 UTC (rev 280)
@@ -5,17 +5,6 @@
import java.util.Collection;
import java.util.List;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@@ -27,186 +16,20 @@
* categories, otherwise in a long list
*/
-@NamedQueries({
- @NamedQuery( name = "Configuration.getAll",
- query = "SELECT m FROM Configuration m"),
- @NamedQuery( name = "Configuration.getById",
- query = "SELECT m FROM Configuration m WHERE m.configurationId = :configurationId"),
- @NamedQuery( name = "Configuration.getByName",
- query = "SELECT m FROM Configuration m WHERE m.configurationName = :configurationName"),
- @NamedQuery( name = "Configuration.getActive",
- query = "SELECT m FROM Configuration m WHERE m.active = true")
-
-})
-
-@Entity
@XmlRootElement(name="configuration")
-public class Configuration implements Serializable{
+public class Configuration implements Serializable {
- /* CONSTANTS */
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -3173737964939496322L;
- /** name of the default config that will be created if no config is found. */
- @Transient
- public final static String DEFAULT_CONFIG_NAME="default";
-
- /* PERSISTANT FIELDS */
-
-
- /** The configuration id. */
- /* standard getters /setters */
- /**
- * Gets the configuration id.
- *
- * @return the id of this config
- */
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private int configurationId;
-
- /** if this configuration is the currently active config. */
- private boolean active;
-
- /** its name. */
- private String configurationName;
-
- /**
- * list of all settings, note this is NOT an xml attribute right here, you
- * can find it in the SettingCategory.
- */
- /**
- * Gets the settings.
- *
- * @return a list of all settings from this configuration
- */
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
- @JoinColumn(name = "configurationId")
- private Collection<Setting> settings=new ArrayList<Setting>();
-
-
- /* END OF PERSISTANT FIELDS, START OF XML FIELDS */
- /** The categories. */
- /**
- * Gets the categories.
- *
- * @return the categories for this configuration
- *
- * @throws IllegalStateException
- * if categories is null, ie we created this entity from
- * persistence rather then from xml
- */
- @Transient
@XmlElement(name="category")
- private List<SettingCategory> categories; //list of all categories
- /* END OF XML FIELDS */
+ private List<SettingCategory> categories;
-
- /**
- * Instantiates a new configuration.
- */
- public Configuration(){
-
+ public Configuration() {
}
-
- /**
- * The Constructor.
- *
- * @param name
- * name of the new configuration
- */
- public Configuration(String name){
- this.configurationName=name;
- }
-
- /* standard getters /setters */
-
- /**
- * Gets the configuration id.
- *
- * @return the id of this config
- */
- public int getConfigurationId() {
- return configurationId;
- }
/**
- * set a new configguration id. you usually dont want to do this
- *
- * @param settingSetId
- * the setting set id
- */
- public void setConfigurationId(int settingSetId) {
- this.configurationId = settingSetId;
- }
-
- /**
- * Checks if is active.
- *
- * @return true when this config is currently flagged active
- */
- public boolean isActive() {
- return active;
- }
-
- /**
- * WARNING this will NOT mark the old active settings as inactive or install
- * a new active setting when turning a setting off!.
- *
- * @param active
- * if this settings shall be active or not
- */
- public void setActive(boolean active) {
- this.active = active;
- }
-
- /**
- * Gets the configuration name.
- *
- * @return the name which the user has choosen for this config
- */
- public String getConfigurationName() {
- return configurationName;
- }
-
- /**
- * Sets the configuration name.
- *
- * @param settingName
- * set a new name for this config
- */
- public void setConfigurationName(String settingName) {
- this.configurationName = settingName;
- }
-
-
- /**
- * Gets the settings.
- *
- * @return a list of all settings from this configuration
- */
-
- public Collection<Setting> getSettings() {
- return settings;
-
- }
-
- /**
- * sets completly new settings for this configuration WARNING: this will NOT
- * delete old settings from the database, so make sure you realy want to do
- * this.
- *
- * @param settings
- * the new settings
- */
- public void setSettings(Collection<Setting> settings) {
- this.settings=settings;
- }
-
-
-
- /**
* Gets the categories.
*
* @return the categories for this configuration
@@ -216,8 +39,8 @@
* persistence rather then from xml
*/
public List<SettingCategory> getCategories() throws IllegalStateException {
- if(categories==null){
- throw new IllegalStateException("categories is null, we most likely created this entity from persistence rather then from XML");
+ if(categories == null) {
+ throw new IllegalStateException("No categories found!");
}
return categories;
}
@@ -226,29 +49,10 @@
* @see java.lang.Object#toString()
*/
public String toString(){
- String ret="Config id:"+configurationId+", name:"+configurationName+";Settings (only persistant, not withing categorys)\n";
- for(Setting s:settings){
- ret+=s+"\n";
+ String string = "Configuration:\n";
+ for (SettingCategory category : categories) {
+ string += category + "\n";
}
- return ret;
+ return string;
}
-
- /**
- * Gets the setting by name.
- *
- * @param settingname
- * the setting to look for
- *
- * @return the found setting object
- *
- * @throws SettingNotFoundException
- * if this setting isnt found in this configuration
- */
- public Setting getSettingByName(String settingname) throws SettingNotFoundException{
- for(Setting s:settings){
- if(s.getName().equalsIgnoreCase(settingname))
- return s;
- }
- throw new SettingNotFoundException(settingname,this);
- }
}
\ No newline at end of file
Modified: trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManager.java
===================================================================
--- trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManager.java 2009-06-27 16:12:05 UTC (rev 279)
+++ trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManager.java 2009-06-30 11:39:55 UTC (rev 280)
@@ -14,105 +14,21 @@
*/
@Local
public interface ConfigurationManager {
- /** the location of the main configuration declaration xml-file. */
- public static final String CONFIG_XML_LOCATION="/configuration.xml";
- /**
- * sets a new active configuration and sets the last active configuration to
- * not-active unless the new config cannot be found setting cache must be
- * invalidated after doing this!.
- *
- * @param newActiveConfig
- * the new active config
- */
- public void setActiveConfiguration(Configuration newActiveConfig);
+ public Setting getSetting(String settingName, String categoryName) throws SettingNotFoundException;
- /**
- * tries to locate the active configuration. if none is found, it creates a
- * new one, marks it as active and returns it
- *
- * @return the active configuration or null if the config cannot be found
- * AND cannot be created for some reason (most syntax likely error
- * in CONFIG_XML_LOCATION)
- */
- public Configuration getActiveConfiguration();
+ public String getSettingAsString(String settingName, String categoryName) throws SettingNotFoundException;
+ public int getSettingAsInteger(String settingName, String categoryName) throws SettingNotFoundException;
- /**
- * Gets the all configurations.
- *
- * @return a list of all configurations in this system
- */
- public List<Configuration> getAllConfigurations();
+ public boolean getSettingAsBoolean(String settingName, String categoryName) throws SettingNotFoundException;
- /**
- * Gets the config by id.
- *
- * @param id
- * the id to look for
- *
- * @return the requested Configuration or null if it cannot be found
- */
- public Configuration getConfigById(int id);
+ public List<Setting> getSettings();
- /**
- * gets a specific configuration from database don't confuse this with
- * getSetting()!.
- *
- * @param name
- * the name to look for, case sensitive
- *
- * @return the requested Configuration or null if it cannot be found
- */
- public Configuration getConfigByName(String name);
+ public List<SettingCategory> getCategories();
+ public void deleteSetting(Setting setting);
+ public void updateSetting(Setting setting);
- /**
- * updates the the config note that you cannot delete settings by simply
- * passing a new list of settings to the configuration via setSettings() and
- * then call updateConfiguration. this will NOT delete the old entrys
- *
- * @param tosave
- * the config object to be saved
- */
- public void updateConfiguration(Configuration tosave);
-
- /**
- * helper to quickly get a setting this should also save the requested
- * setting into some sort of cache to make further requests faster.
- *
- * @param settingname
- * name of the setting
- *
- * @return null the setting, or: if the active configuration doesn't contain
- * this setting or getActiveConfiguration returned null
- *
- * @throws SettingNotFoundException
- * if the setting with this name cannot be found or no active
- * config could not be loaded
- */
- public Setting getSetting(String settingname) throws SettingNotFoundException;
-
-
-
- /**
- * deletes a config from persistence.
- *
- * @param config
- * the config to be deleted
- */
- public void deleteConfig(Configuration config);
-
-
- /**
- * deletes a single setting from a Configuration.
- *
- * @param settingToBeDeleted
- * the setting to be deleted
- * @param config
- * the config to which this setting belongs
- */
- public void deleteSingleSetting(Setting settingToBeDeleted,Configuration config);
-
}
Modified: trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManagerImpl.java
===================================================================
--- trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManagerImpl.java 2009-06-27 16:12:05 UTC (rev 279)
+++ trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/ConfigurationManagerImpl.java 2009-06-30 11:39:55 UTC (rev 280)
@@ -7,16 +7,21 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
-
+import java.util.logging.*;
+import java.util.Map;
+import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
-import org.apache.log4j.Logger;
+//import org.apache.log4j.Logger;
/**
*
@@ -25,248 +30,191 @@
@Stateless(mappedName="cse/ConfigurationManager")
public class ConfigurationManagerImpl implements ConfigurationManager, ConfigurationManagerRemote {
- /** The em. */
+ /** The location of the main configuration declaration xml-file. */
+ public static final String CONFIG_XML_LOCATION = "/configuration.xml";
+
@PersistenceContext
- protected EntityManager em;
+ protected EntityManager entityManager;
/** The logger. */
protected Logger logger;
/**
- * holds all settings, that have been requested via getSetting() must be
- * cleared if: a new active config has been set or settings have been
- * changed.
+ * Use a synchronized map as settings-cache.
+ *
+ * Not really conforming to ejb3.0 spec, but as along as there are no singletons, we
+ * have to do some workarounds.
+ *
*/
- private HashMap<String,Setting> cache=new HashMap<String, Setting>();
+ private static Map<String, Setting> cache = Collections.synchronizedMap(new HashMap<String, Setting>());
+ /* Only used for synchronization (must be final, because we synchronize on it) */
+ private final static Boolean cacheMutex = true;
+ private static boolean isCacheInitialized = false;
- /* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#getActiveConfiguration()
- */
-// @SuppressWarnings("unchecked")
- public Configuration getActiveConfiguration() {
- List<Configuration> results=(List<Configuration>) em.createNamedQuery("Configuration.getActive").getResultList();
- checkConfiguration();
+ /* Initialize cache && load data from xml-config */
+ protected void init() {
+ synchronized (cacheMutex) {
+ if (!isCacheInitialized) {
+ /* Must be first, to prevent recursion init() -> checkConfiguration() -> getCategories() -> init() */
+ isCacheInitialized = true;
+ checkConfiguration();
+ loadCache();
+ }
+ }
+ }
- //see if we have a result to return, otherwise create a new one
- if(results.size()>0)
- return results.get(0);
+ protected void loadCache() {
+ cache.clear();
+ for (Setting setting : getSettings()) {
+ cache.put(setting.getName(), setting);
+ }
+ }
+ /* Generate key for cache */
+ protected String generateCacheKey(String categoryName, String settingName) {
+ return "/" + categoryName + "/" + settingName;
+ }
- //no active config found, create it
+ public List<Setting> getSettings() {
+ init();
+ List<Setting> settings = (List<Setting>) entityManager.createNamedQuery("Setting.getAll").getResultList();
+ return settings;
+ }
- //try to unmarshal configuration from XML
- Configuration configFromXml=null;
- try{
- Unmarshaller um= JAXBContext.newInstance("de.campussource.cse.webconfig").createUnmarshaller();
- configFromXml=(Configuration)um.unmarshal(getClass().getResourceAsStream(ConfigurationManager.CONFIG_XML_LOCATION));
- }
- catch(Exception e){
- e.printStackTrace();
- return null;
- }
+ public List<SettingCategory> getCategories() {
+ init();
+ List<SettingCategory> categories = (List<SettingCategory>) entityManager.createNamedQuery("SettingCategory.getAll").getResultList();
+ return categories;
+ }
- Collection<Setting> newsettings=new ArrayList<Setting>();
-
- //traverse xml to set all settings to default and move them out of their categories directly to the configuration
- for(SettingCategory cat:configFromXml.getCategories()){
- for(Setting setting:cat.getSettings()){
- setting.setToDefault();
- newsettings.add(setting);
- }
- }
- configFromXml.setSettings(newsettings);
- configFromXml.setActive(true);
- configFromXml.setConfigurationName(Configuration.DEFAULT_CONFIG_NAME);
- updateConfiguration(configFromXml);
- return configFromXml;
- }
-
/* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#getAllConfigurations()
+ * @see edu.cse.persistence.session.ConfigurationManager#getSetting(java.lang.String)
*/
- //@SuppressWarnings("unchecked")
- public List<Configuration> getAllConfigurations() {
+ public Setting getSetting(String settingName, String categoryName) throws SettingNotFoundException {
- return (List<Configuration>) em.createNamedQuery("Configuration.getAll").getResultList();
+ if (settingName == null || categoryName == null) {
+ throw new SettingNotFoundException("", "SettingName and / or categoryName are null!");
+ }
- }
+ init();
- /* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#getConfigById(int)
- */
-// @SuppressWarnings("unchecked")
- public Configuration getConfigById(int id) {
+ /* Check for cache hit */
+ String cacheKey = generateCacheKey(categoryName, settingName);
+ if (cache.containsKey(cacheKey)) {
+ return cache.get(cacheKey);
+ }
- List<Configuration> results=(List<Configuration>) em.createNamedQuery("Configuration.getById").setParameter("configurationId" , id).getResultList();
- checkConfiguration();
+ /* Do it the hard way */
+ Setting setting = (Setting) entityManager.createNamedQuery("Setting.getByNames") .setParameter("settingName", settingName)
+ .setParameter("categoryName", categoryName)
+ .getSingleResult();
- //see if we have a result to return, otherwise return null
- if(results.size()>0)
- return results.get(0);
- else
- return null;
- }
+ if (setting == null) {
+ throw new SettingNotFoundException(settingName);
+ }
- /* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#getConfigByName(java.lang.String)
- */
-// @SuppressWarnings("unchecked")
- public Configuration getConfigByName(String name) {
- List<Configuration> results=(List<Configuration>) em.createNamedQuery("Configuration.getByName").setParameter("configurationName" , name).getResultList();
-
- //see if we have a result to return, otherwise return null
- if(results.size()>0)
- return results.get(0);
- else
- return null;
+ cache.put(cacheKey, setting);
+ return setting;
}
- /* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#getSetting(java.lang.String)
- */
- public Setting getSetting(String settingname) throws SettingNotFoundException {
- if(settingname==null){
- throw new SettingNotFoundException(settingname,null);
- }
+ public String getSettingAsString(String settingName, String categoryName) throws SettingNotFoundException {
+ Setting setting = getSetting(settingName, categoryName);
+ return setting.getAsString();
+ }
- //check the cache if it contains the requested setting
- if(cache.containsKey(settingname)){
- return cache.get(settingname);
- }
+ public int getSettingAsInteger(String settingName, String categoryName) throws SettingNotFoundException {
+ Setting setting = getSetting(settingName, categoryName);
+ return setting.getAsInteger();
+ }
- //get active config. this will also create a new default config if no config was found
- Configuration active=getActiveConfiguration();
+ public boolean getSettingAsBoolean(String settingName, String categoryName) throws SettingNotFoundException {
+ Setting setting = getSetting(settingName, categoryName);
+ return setting.getAsBoolean();
+ }
- //see if we have no active config in our system. this should only happen when configuration.xml is malformed
- if(active==null){
- throw new SettingNotFoundException("Could not create default Config, check "+ConfigurationManager.CONFIG_XML_LOCATION,null);
- }
-
- //get the setting, will throw SettingNotFoundException if the setting doesnt exist
- Setting found=active.getSettingByName(settingname);
-
- //Save to cache and return
- cache.put(settingname, found);
- return found;
- }
-
-
-
/* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#updateConfiguration(edu.cse.persistence.entity.Configuration)
- */
- public void updateConfiguration(Configuration tosave) {
- logger = Logger.getLogger(ConfigurationManagerImpl.class);
- logger.debug("Updating " +tosave);
- em.merge(tosave);
- logger.debug("done " +tosave);
- cache.clear();
-// em.persist(tosave);
- }
- /* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#setActiveConfiguration(edu.cse.persistence.entity.Configuration)
- */
- public void setActiveConfiguration(Configuration newActiveConfig) {
- //traverse all configs to only allow one active config at the time
- for(Configuration current:getAllConfigurations()){
- //set the active state of this config to true if it is our new config, otherwise false
- current.setActive(current.getConfigurationId()==newActiveConfig.getConfigurationId());
- updateConfiguration(current);
- }
- cache.clear();
- }
-
- /* (non-Javadoc)
- * @see edu.cse.persistence.session.ConfigurationManager#deleteConfig(edu.cse.persistence.entity.Configuration)
- */
- public void deleteConfig(Configuration config) {
- config= em.merge(config);
- em.remove(config);
- cache.clear();
- }
-
- /* (non-Javadoc)
* @see edu.cse.persistence.session.ConfigurationManager#deleteSingleSetting(edu.cse.persistence.entity.Setting)
*/
- public void deleteSingleSetting(Setting setting,Configuration config) {
- config.getSettings().remove(setting);
- config=em.merge(config);
- setting=em.merge(setting);
- em.remove(setting);
- cache.remove(setting.getName());
+ public void deleteSetting(Setting setting) {
+ setting = entityManager.merge(setting);
+ entityManager.remove(setting);
+ String key = generateCacheKey(setting.getCategory().getName(), setting.getName());
+ if (cache.containsKey(key)) {
+ cache.remove(key);
+ }
}
+ public void updateSetting(Setting setting) {
+ entityManager.merge(setting);
+ cache.put(generateCacheKey(setting.getCategory().getName(), setting.getName()), setting);
+ }
- /*
- * checks if the structure of the stored configs is equivalent to the configuration.xml and updates it if necessary
- */
/**
- * Check configuration.
+ * Checks if the structure of the stored configs is equivalent to the configuration.xml and updates it if necessary
*/
- private void checkConfiguration()
- {
- logger = Logger.getLogger(ConfigurationManager.class);
- Configuration configFromXml=null;
- try{
- Unmarshaller um= JAXBContext.newInstance("de.campussource.cse.webconfig").createUnmarshaller();
- configFromXml=(Configuration)um.unmarshal(getClass().getResourceAsStream(ConfigurationManager.CONFIG_XML_LOCATION));
- }
- catch(Exception e){
- e.printStackTrace();
- logger.error("Fehler beim Parsen der "+ConfigurationManager.CONFIG_XML_LOCATION+": "+e);
- }
- Collection<Setting> settingsFromXml=new ArrayList<Setting>();
+ private void checkConfiguration() {
+ logger = Logger.getLogger("de.campussource.cse.webconfig.ConfigurationManager");
+ Configuration configFromXml = null;
+ HashMap<String, List<Setting>> settingsFromXml = new HashMap<String, List<Setting>>();
- //traverse xml and get all the http request parameters for the settings in xml
- for(SettingCategory cat:configFromXml.getCategories()){
- for(Setting setting:cat.getSettings()){
- setting.setToDefault();
- settingsFromXml.add(setting);
- }
- }
- boolean update = false;
- // settingsFromXml now holds all settings which are defined in configuration.xml, and they are initialied with their default value
- //now check the structure of all configurations in the system
- for(Configuration currentConfig:getAllConfigurations()){
- //check, if there are new settings defined in xml
- for(Setting check:settingsFromXml){
- try{
- currentConfig.getSettingByName(check.getName());
- }
- catch(SettingNotFoundException e){
- //so the setting wasnt found, create it
- currentConfig.getSettings().add(check);
- logger.info("Erweitere <b>"+currentConfig.getConfigurationName()+"</b> um <b>" +check.getName()+"</b><br/>");
- update =true;
- }
- }
- Collection<Setting> settingsToBeDeleted=new ArrayList<Setting>();
- //check, if there are settings stored definied that are missing in the xml
- for(Setting check:currentConfig.getSettings()){
- boolean found=false;
- for(Setting checkpartner:settingsFromXml){
- if(checkpartner.getName().equals(check.getName())){
- found=true;
- break;
- }
- }
- if(!found){
- //so the setting wasnt found, delete it from persistance
- //we cant delete right here because we are still cycling thru the list. it would give us a concurrentmodificationexception
- //to we add it to a list and remove it later
- settingsToBeDeleted.add(check);
+ try {
+ Unmarshaller um = JAXBContext.newInstance("de.campussource.cse.webconfig").createUnmarshaller();
+ configFromXml = (Configuration) um.unmarshal(getClass().getResourceAsStream(CONFIG_XML_LOCATION));
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.severe("Settings could not be parsed (file: " + CONFIG_XML_LOCATION + "): " + e);
+ }
- }
- }
- for(Setting check:settingsToBeDeleted){
- deleteSingleSetting(check,currentConfig);
- logger.info("Entferne <b>"+check.getName()+"</b> von <b>" +currentConfig.getConfigurationName()+"</b><br/>");
- update =true;
- }
- if (update)
- updateConfiguration(currentConfig);
+ /* Build name -> category resolver for xml categories */
+ HashMap<String, SettingCategory> xmlCategoryResolver = new HashMap<String, SettingCategory>();
- }
- }
-
-}
+ /* Keep all settings from Xml for later (to generate diff xml <-> persistence) */
+ for (SettingCategory category : configFromXml.getCategories()) {
+ xmlCategoryResolver.put(category.getName(), category);
+ for (Setting setting : category.getSettings()) {
+ setting.setToDefault();
+ if (!settingsFromXml.containsKey(category.getName())) {
+ settingsFromXml.put(category.getName(), new LinkedList<Setting>());
+ }
+ settingsFromXml.get(category.getName()).add(setting);
+ }
+ }
+
+ boolean update = false;
+
+ /* Update structure of configuration in persistence (vs xml-configuration) */
+
+ /* Build name -> category resolver for persistent categories */
+ HashMap<String, SettingCategory> persistentCategoryResolver = new HashMap<String, SettingCategory>();
+ HashSet<String> categoryNames = new HashSet<String>();
+ for (SettingCategory category : getCategories()) {
+ persistentCategoryResolver.put(category.getName(), category);
+ categoryNames.add(category.getName());
+ }
+
+ for (String categoryName : settingsFromXml.keySet()) {
+
+ if (!categoryNames.contains(categoryName)) {
+ /* New category -> create */
+ logger.info("Adding new category [" + categoryName + "]");
+ SettingCategory category = xmlCategoryResolver.get(categoryName);
+ /* Clear settings-relations, because we have to rebuild it from the owning side (e.g. the Setting-side) */
+ category.getSettings().clear();
+ category = entityManager.merge(category);
+ persistentCategoryResolver.put(categoryName, category);
+ categoryNames.add(categoryName);
+ }
+
+ for (Setting setting : settingsFromXml.get(categoryName)) {
+ SettingCategory category = persistentCategoryResolver.get(categoryName);
+ if (category.getSettingByName(setting.getName()) == null) {
+ /* New Setting */
+ logger.info("Adding new setting [" + setting.getName() + "] to category [" + categoryName + ", id: " + category.getId() + "]");
+ setting.setCategory(category);
+ entityManager.persist(setting);
+ update = true;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Setting.java
===================================================================
--- trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Setting.java 2009-06-27 16:12:05 UTC (rev 279)
+++ trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/Setting.java 2009-06-30 11:39:55 UTC (rev 280)
@@ -1,50 +1,25 @@
-/*
- *
- * Campus Source Engine (CSE) is a Middleware framwork designed for educational Institutions. Its aim is to provide an easy solution for setting up IT infrastructures.
- * Copyright (C) 2006-2007 Campus Source Initiative NRW
- *
- * Campus Source Engine is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Contact Information:
- *
- * cse...@ca...
- *
- * CampusSource Geschaeftsstelle
- * at the FernUniversitaet in Hagen
- * Universitaetsstrasse 11
- * D-58097 Hagen
- * Germany
- *
- */
-
-
-
package de.campussource.cse.webconfig;
import java.io.Serializable;
import java.net.URL;
import java.net.MalformedURLException;
+import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
// TODO: Auto-generated Javadoc
/**
@@ -52,11 +27,19 @@
*
* @author johannesd represents a concrete setting like "password=1234"
*/
+
+@NamedQueries({
+ @NamedQuery( name = "Setting.getAll",
+ query = "SELECT s FROM Setting s"),
+
+ @NamedQuery( name = "Setting.getByNames",
+ query = "SELECT s FROM Setting s WHERE s.category.name = :categoryName AND s.name = :settingName")
+})
+
@Entity
@XmlRootElement(name="setting")
public class Setting implements Serializable{
- /* CONSTANTS */
/** The Constant serialVersionUID. */
@Transient
private static final long serialVersionUID = 8044991853608326088L;
@@ -76,28 +59,20 @@
* when creating a list of values, value will hold the elements of the list
* seperated with this char.
*/
- public static final String SPLITCHAR = "³";
-
-
+ public static final String SPLITCHAR = "|";
-
-
- /* START of XML-only fields */
/** the default value for this setting. */
- @Transient
- @XmlAttribute(required=true, name="default")
+// @Transient
+ @XmlAttribute(required = true, name = "default")
private String defaultValue;
- /** Description for this setting, eg "Password for Webservice". */
- @Transient
- @XmlAttribute(required=true, name="description")
+ /** Description for this setting */
+ @XmlAttribute(required = true)
private String description;
/** the type of this settings value, see constants TYPE_XXX. */
- @XmlAttribute(required=false, name="type")
- private short type=TYPE_STRING;
-
- /* END of XML-only fields, start of persistent-only fields */
+ @XmlAttribute(required = false)
+ private short type = TYPE_STRING;
/** The id. */
@Id
@@ -108,30 +83,24 @@
@Column(columnDefinition="text")
private String value;
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+ @JoinColumn(name = "categoryId")
+ @XmlTransient
+ private SettingCategory category;
-
- /* END of persistent-only fields, start of shared fields */
-
-
/**
* name of this setting, eg "ilias3_password" WARNING: the name has to be
* unique for the complete configuration, not only within its category.
*/
@XmlAttribute(required=true, name="name")
private String name;
-
- /* END of shared fields */
-
-
-
- /* standard getters */
-
+
/**
* Gets the name.
*
* @return the unique name of this setting
*/
- public String getName(){
+ public String getName() {
return name;
}
@@ -140,7 +109,7 @@
*
* @return a human readable description
*/
- public String getDescription(){
+ public String getDescription() {
return description;
}
@@ -149,7 +118,7 @@
*
* @return the id
*/
- public int getId(){
+ public int getId() {
return id;
}
@@ -158,7 +127,7 @@
*
* @return the type of this setting, see TYPE_XXX constants in this class
*/
- public short getType(){
+ public short getType() {
return type;
}
@@ -168,45 +137,45 @@
*
* @return the value of this setting as String
*/
- public String getValueS(){
+ public String getAsString() {
return value;
}
/**
- * Gets the value and will replace all placeholdes with the given parameters ($0 with the first element
+ * Gets the value and will replace all placeholdes with the given parameters ($0 with the first element, etc.)
+ *
* @param params list of parameters that will be translated into the value
* @return the value of this setting as String
*/
- public String getValueS(String[] params){
- String ret=value;
- if(params!=null){
- for(int n=0;n<params.length;n++){
- String token="\\$"+n;
- ret=ret.replaceAll(token, params[n]);
+ public String getAsString(String[] params) {
+ String ret = value;
+ if (params != null) {
+ for (int n = 0; n < params.length; n++) {
+ String token = "\\$" + n;
+ ret = ret.replaceAll(token, params[n]);
}
}
return ret;
}
-
/**
- * a list of strings(the original value splitted by SPLITCHAR) the entrys
+ * A list of strings(the original value splitted by SPLITCHAR) the entrys
* are trim()-ed, so you can put something like "dummy1, dummy2" for value
* and will recieve a array ["dummy1"]["dummy2"].
*
* @return the list
*/
- public String[] getListOfValuesS(){
+ public String[] getAsListOfStrings(){
- String[] ret=value.split(SPLITCHAR);
- for(int x=0;x<ret.length;x++){
- ret[x]=ret[x].trim();
+ String[] ret = value.split(SPLITCHAR);
+ for (int x = 0; x < ret.length; x++) {
+ ret[x] = ret[x].trim();
}
return ret;
}
/**
- * returns a list of integers (the original value splitted by SPLITCHAR and
+ * Returns a list of integers (the original value splitted by SPLITCHAR and
* cast to int).
*
* @return the list
@@ -215,27 +184,24 @@
* if one of the entrys could not be cast to int or the type
* isnt TYPE_INT_LIST
*/
- public int[] getListOfValuesI() throws IllegalArgumentException{
- if(type!=TYPE_INT_LIST)
- throw new IllegalArgumentException("cannot get Integer type value for setting: "+name);
- String[] tmp = getListOfValuesS(); //"1","2","3"...
- int[] ret=new int[tmp.length];
- for(int x=0;x<ret.length;x++){
- try{
- ret[x]=new Integer(tmp[x]).intValue();
- }
- catch(NumberFormatException e){
- throw new IllegalArgumentException("cannot parse to Integer value for setting: "+name+" value: "+value);
- }
+ public int[] getAsListOfIntegers() throws IllegalArgumentException {
+ if ( type != TYPE_INT_LIST) {
+ throw new IllegalArgumentException("Setting-type incompatible with list of integers for setting: " + name);
+ }
+ String[] tmp = getAsListOfStrings(); //"1","2","3"...
+ int[] ret = new int[tmp.length];
+ for (int x = 0; x < ret.length; x++) {
+ try {
+ ret[x] = new Integer(tmp[x]).intValue();
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Cannot parse string as integer: " + name + ", value: " + value);
+ }
}
return ret;
}
-
-
-
/**
- * Gets the value i.
+ * Gets the value as integer.
*
* @return integer value
*
@@ -243,19 +209,19 @@
* when this setting isnt of type Int or the stored value cannot
* be cast to int
*/
- public int getValueI() throws IllegalArgumentException{
- if(type!=TYPE_INT)
- throw new IllegalArgumentException("cannot get Integer type value for setting: "+name);
- try{
- return new Integer(value).intValue();
- }
- catch(NumberFormatException e){
- throw new IllegalArgumentException("cannot parse to Integer value for setting: "+name+" value: "+value);
- }
+ public int getAsInteger() throws IllegalArgumentException {
+ if (type != TYPE_INT) {
+ throw new IllegalArgumentException("Setting-type incompatible with integer: " + name);
+ }
+ try {
+ return new Integer(value).intValue();
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Cannot parse string as integer: " + name + ", value: " + value);
+ }
}
/**
- * Gets the value b.
+ * Gets the value as boolean.
*
* @return boolean value
*
@@ -263,165 +229,165 @@
* when this setting isnt of type Bool or the stored value
* cannot be interpreted as bool
*/
- public boolean getValueB() throws IllegalArgumentException{
- if(type!=TYPE_BOOL)
- throw new IllegalArgumentException("cannot get Boolean type value for setting: "+name);
- if(value.equals(BOOLEAN_TRUE)){
- return true;
- }
- if(value.equals(BOOLEAN_FALSE)){
- return false;
- }
- //if we get here, the value was strange and defintly not boolean
- throw new IllegalArgumentException("cannot get Boolean type value for setting: "+name);
- }
+ public boolean getAsBoolean() throws IllegalArgumentException {
+ if (type != TYPE_BOOL) {
+ throw new IllegalArgumentException("Setting-type incompatible with boolean: " + name);
+ }
+ if (value.equals(BOOLEAN_TRUE)) {
+ return true;
+ }
+ if (value.equals(BOOLEAN_FALSE)) {
+ return false;
+ }
+ /* If we get here, the value was strange and defintly not boolean */
+ throw new IllegalArgumentException("Cannot parse string as boolean: " + name + ", value: " + value);
+ }
-
/**
- * Gets the value u.
+ * Gets the value as URL.
*
* @return url value
*
* @throws IllegalArgumentException
* when this setting is not of type URL
*/
- public URL getValueU() throws IllegalArgumentException{
- if(type!=TYPE_URL)
- throw new IllegalArgumentException("cannot get URL type value for setting: "+name);
- String urlString = value.trim();
- try {
- return new URL(urlString);
- }
- catch (MalformedURLException e) {
- throw new IllegalArgumentException("cannot get URL type value for setting: "+name);
- }
- }
+ public URL getAsUrl() throws IllegalArgumentException {
+ if (type != TYPE_URL) {
+ throw new IllegalArgumentException("Setting-type incompatible with url: " + name);
+ }
+ String urlString = value.trim();
+ try {
+ return new URL(urlString);
+ } catch (MalformedURLException e) {
+ throw new IllegalArgumentException("Cannot parse string as url: " + name + ", value: " + value);
+ }
+ }
/**
- * for date-settings, this will get the day of the month
+ * For date-settings, this will get the day of the month
*
* @return day value
*
* @throws IllegalArgumentException
* when this setting is not of type URL
*/
- public int getValueDateDay() throws IllegalArgumentException{
- if(type!=TYPE_DATE)
- throw new IllegalArgumentException("cannot get URL type value for setting: "+name);
- String[] parts= value.trim().split("-");
- try {
- return new Integer(parts[2]).intValue();
- }
- catch (Exception e) {
- throw new IllegalArgumentException("cannot get Day value for setting: "+name);
- }
- }
+ public int getAsDateDay() throws IllegalArgumentException {
+ if (type != TYPE_DATE) {
+ throw new IllegalArgumentException("Setting-type incompatible with date-day: " + name);
+ }
+ String[] parts = value.trim().split("-");
+ try {
+ return new Integer(parts[2]).intValue();
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Cannot parse string as date-day: " + name + ", value: " + value);
+ }
+ }
+
/**
- * for date-settings, this will get the month-of-year
+ * For date-settings, this will get the month-of-year
*
* @return day value
*
* @throws IllegalArgumentException
* when this setting is not of type URL
*/
- public int getValueDateMonth() throws IllegalArgumentException{
- if(type!=TYPE_DATE)
- throw new IllegalArgumentException("cannot get URL type value for setting: "+name);
- String[] parts= value.trim().split("-");
- try {
- return new Integer(parts[1]).intValue();
- }
- catch (Exception e) {
- throw new IllegalArgumentException("cannot get Month value for setting: "+name);
- }
- }
+ public int getAsDateMonth() throws IllegalArgumentException {
+ if (type != TYPE_DATE) {
+ throw new IllegalArgumentException("Setting-type incompatible with date-month: " + name);
+ }
+ String[] parts = value.trim().split("-");
+ try {
+ return new Integer(parts[1]).intValue();
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Cannot parse string as date-month: " + name + ", value: " + value);
+ }
+ }
/**
- * for date-settings, this will get the month-of-year
+ * For date-settings, this will get the month-of-year
*
* @return day value
*
* @throws IllegalArgumentException
* when this setting is not of type URL
*/
- public int getValueDateYear() throws IllegalArgumentException{
- if(type!=TYPE_DATE)
- throw new IllegalArgumentException("cannot get URL type value for setting: "+name);
- try {
- return new Integer(value.substring(0,4));
- }
- catch (Exception e) {
- throw new IllegalArgumentException("cannot get Year value for setting: "+name);
- }
- }
-
-
-
+ public int geAsDateYear() throws IllegalArgumentException {
+ if (type != TYPE_DATE) {
+ throw new IllegalArgumentException("Setting-type incompatible with date-year: " + name);
+ }
+ try {
+ return new Integer(value.substring(0, 4));
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Cannot parse string as date-year: " + name + ", value: " + value);
+ }
+ }
+
/**
- * sets the new value of this setting.
+ * Sets the new value of this setting.
*
* @param newval
* the new value
*/
- public void setValue(int newval){
- value=newval+"";
- }
+ public void setValue(int newval) {
+ value = newval + "";
+ }
/**
- * sets the new value of this setting.
+ * Sets the new value of this setting.
*
* @param newval
* the new value
*/
- public void setValue(boolean newval){
- value=newval?BOOLEAN_TRUE:BOOLEAN_FALSE;
- }
+ public void setValue(boolean newval) {
+ value = newval ? BOOLEAN_TRUE : BOOLEAN_FALSE;
+ }
/**
- * sets the new value of this setting. if this setting is of type list, it
+ * Sets the new value of this setting. If this setting is of type list, it
* will replace all newline-chars with SPLITCHAR so you can feed setvalue()
* directly with the HTTP-parameters form a textarea-field
*
* @param newval
* the new value
*/
- public void setValue(String newval){
- if(type==TYPE_INT_LIST || type==TYPE_STRING_LIST){
- value=newval.replaceAll("\n", SPLITCHAR);
- //removed empty list entries
- String[] listvalues=getListOfValuesS();
- value="";
- for(String currentListEntry:listvalues){
- if(currentListEntry.trim().length()>0){
- value+=currentListEntry.trim()+SPLITCHAR;
- }
- }
- if(value.length()>1){
- value=value.substring(0, value.length()-1);
- }
- }
- else
- value=newval;
- }
+ public void setValue(String newval) {
+ if (type == TYPE_INT_LIST || type == TYPE_STRING_LIST) {
+ value = newval.replaceAll("\n", SPLITCHAR);
+ //removed empty list entries
+ String[] listvalues = getAsListOfStrings();
+ value = "";
+ for (String currentListEntry : listvalues) {
+ if (currentListEntry.trim().length() > 0) {
+ value += currentListEntry.trim() + SPLITCHAR;
+ }
+ }
+ if (value.length() > 1) {
+ value = value.substring(0, value.length() - 1);
+ }
+ } else {
+ value = newval;
+ }
+ }
/**
- * will set the settings value to its default value.
+ * Will set the settings value to its default value.
*
* @throws IllegalStateException
* if default value is null, which usually means that we created
* this entity from persistence rather then from XML
*/
- public void setToDefault() throws IllegalStateException{
- if(defaultValue==null){
- throw new IllegalStateException("Default-value is null for setting [" + name + "], we most likely created this entity from persistence rather then from XML.");
- }
- if(type==TYPE_BOOL){
- value=defaultValue.equalsIgnoreCase(BOOLEAN_TRUE)?BOOLEAN_TRUE:BOOLEAN_FALSE;
- }
- else{
- value=defaultValue;
- }
- }
+ public void setToDefault() throws IllegalStateException {
+/*
+ if (defaultValue == null) {
+ throw new IllegalStateException("Default-value is null for setting [" + name + "], we most likely created this entity from persistence rather then from XML.");
+ }
+*/
+ if (type == TYPE_BOOL) {
+ value = defaultValue.equalsIgnoreCase(BOOLEAN_TRUE) ? BOOLEAN_TRUE : BOOLEAN_FALSE;
+ } else {
+ value = defaultValue;
+ }
+ }
/**
* Gets the default value.
@@ -432,12 +398,14 @@
* if default value is null, which usually means that we created
* this entity from persistence rather then from XML
*/
- public String getDefaultValue() throws IllegalStateException {
- if(defaultValue==null){
- throw new IllegalStateException("defaultvalue is null, we most likely created this entity from persistence rather then from XML");
- }
- return defaultValue;
- }
+ public String getDefaultValue() throws IllegalStateException {
+/*
+ if (defaultValue == null) {
+ throw new IllegalStateException("defaultvalue is null, we most likely created this entity from persistence rather then from XML");
+ }
+ */
+ return defaultValue;
+ }
/**
* Sets the the name.
@@ -445,16 +413,22 @@
* @param thename
* the new the name
*/
- public void setTheName(String thename) {
- this.name=thename;
- }
+ public void setTheName(String thename) {
+ this.name = thename;
+ }
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
- public String toString(){
- return getName()+"="+(getType()==TYPE_PASSWORD?"****":getValueS());
- }
+ public String toString() {
+ return getName() + "=" + (getType() == TYPE_PASSWORD ? "****" : getAsString());
+ }
-
+ public SettingCategory getCategory() {
+ return category;
+ }
+
+ public void setCategory(SettingCategory category) {
+ this.category = category;
+ }
}
Modified: trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/SettingCategory.java
===================================================================
--- trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/SettingCategory.java 2009-06-27 16:12:05 UTC (rev 279)
+++ trunk/sandbox/lsf-adapter-demo/WebConfig/WebConfig-ejb/src/java/de/campussource/cse/webconfig/SettingCategory.java 2009-06-30 11:39:55 UTC (rev 280)
@@ -1,129 +1,99 @@
-/*
- *
- * Campus Source Engine (CSE) is a Middleware framwork designed for educational Institutions. Its aim is to provide an easy solution for setting up IT infrastructures.
- * Copyright (C) 2006-2007 Campus Source Initiative NRW
- *
- * Campus Source Engine is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Contact Information:
- *
- * cse...@ca...
- *
- * CampusSource Geschaeftsstelle
- * at the FernUniversitaet in Hagen
- * Universitaetsstrasse 11
- * D-58097 Hagen
- * Germany
- *
- */
-
-
-
package de.campussource.cse.webconfig;
+
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
-// TODO: Auto-generated Javadoc
-/**
- * The Class SettingCategory.
- *
- * @author johannesd represents a system configuration category like "ilias"
- * note that this is NOT an ejb3 entity and thus is NOT persistent,its
- * just a helper to show the configuration more structured when its
- * loaded from XML
- */
+@NamedQueries({
+ @NamedQuery( name = "SettingCategory.getAll",
+ query = "SELECT c FROM SettingCategory c")
+})
+
+@Entity
@XmlRootElement(name="category")
public class SettingCategory implements Serializable{
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -317373796493949632L;
-
- /**
- * if the settings in this group may be changed by any admin or only core
- * admins.
- */
- @XmlAttribute(required=true,name="public")
- private boolean publicCategory;
-
+ /** The id. */
+ @Id
+ @GeneratedValue(strategy = GenerationType.TABLE)
+ private int id;
+
/** its name. */
- @XmlAttribute(required=true, name="name")
- private String categoryName;
+ private String name;
/** its description. */
- @XmlAttribute(required=true,name="description")
- private String description;
+ private String description;
-
- /** list of all settings within this category. */
- @XmlElement(name="setting")
- private List<Setting> settings;
+ /** List of all settings within this category. */
+ @OneToMany(mappedBy="category", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+ private Collection<Setting> settings = new ArrayList<Setting>();
-
-
- /**
- * Instantiates a new setting category.
- */
public SettingCategory() {
}
+ @XmlAttribute(required = true, name = "description")
+ public Strin...
[truncated message content] |