r455 - in trunk: . wikitty-api wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/test/java/org/nuiton/wikitty wikitty-api/src/test/java/org/nuiton/wikitty/conform wikitty-api/src/test/java/org/nuiton/wikitty/importexport wikitty-api/src/test/java/org/nuiton/wikitty/layers wikitty-api/src/test/java/org/nuiton/wikitty/memory wikitty-api/src/test/java/org/nuiton/wikitty/notification wikitty-api/src/test/resources/META-INF/spring wikitty-api/src/test/resources/csv wikitty-jdbc-impl/
Author: bpoussin Date: 2010-10-28 15:54:03 +0200 (Thu, 28 Oct 2010) New Revision: 455 Url: http://nuiton.org/repositories/revision/wikitty/455 Log: New WikittyConfig to centralise all configuration http://www.nuiton.org/issues/show/997 New Class WikittyServiceFactory to create au WikittyService declared in configuration (use picocontainer) Suppress hessian serveur module from build, application can directly use Factory to replace it http://www.nuiton.org/issues/show/1001 Import/Export use configuration http://www.nuiton.org/issues/show/822 Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyServiceHelperTest.java Modified: trunk/pom.xml trunk/wikitty-api/pom.xml trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JGroupsNotifierTransporter.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/XMPPNotifierTransporter.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyI18nTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java trunk/wikitty-api/src/test/resources/META-INF/spring/wikitty-test.xml trunk/wikitty-api/src/test/resources/csv/importtree.csv trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java trunk/wikitty-jdbc-impl/src/test/resources/META-INF/spring/wikitty-test.xml trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/LoginController.java trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/WikittyZkService.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/pom.xml 2010-10-28 13:54:03 UTC (rev 455) @@ -26,12 +26,18 @@ <module>wikitty-ui-zk</module> <module>wikitty-hessian-client</module> - <module>wikitty-hessian-server</module> +<!-- REMOVE use WikittyServiceHelper.build now <module>wikitty-hessian-server</module> --> </modules> <dependencyManagement> <dependencies> + <dependency> + <groupId>org.picocontainer</groupId> + <artifactId>picocontainer</artifactId> + <version>2.11.2</version> + <scope>compile</scope> + </dependency> <!--dependency> <groupId>junit</groupId> Modified: trunk/wikitty-api/pom.xml =================================================================== --- trunk/wikitty-api/pom.xml 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/pom.xml 2010-10-28 13:54:03 UTC (rev 455) @@ -48,6 +48,12 @@ <!-- COMPILE --> <dependency> + <groupId>org.picocontainer</groupId> + <artifactId>picocontainer</artifactId> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JGroupsNotifierTransporter.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JGroupsNotifierTransporter.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JGroupsNotifierTransporter.java 2010-10-28 13:54:03 UTC (rev 455) @@ -24,7 +24,6 @@ */ package org.nuiton.wikitty; -import java.util.Properties; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -34,6 +33,7 @@ import org.jgroups.JChannel; import org.jgroups.Message; import org.jgroups.ReceiverAdapter; +import org.nuiton.util.ApplicationConfig; /** * JGroups notifier. @@ -50,16 +50,6 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(JGroupsNotifierTransporter.class); - /** - * Utilisation du canal de communication basé sur jgroups avec - * comme identifiant d'application le nom de canal en option. - * - * Si ce nom est vide, jgroups n'est pas utilisé. - * Si {@link #WIKITTY_EVENT_PROPAGATE_OPTION} est a true et que cette - * options est vide, une exception est levée. - */ - static public final String WIKITTY_EVENT_JGROUPCHANNELNAME_OPTION = "wikitty.service.event.jgroupschannelname"; - /** Notifier service reference reference. */ protected WikittyServiceNotifier ws; @@ -67,13 +57,13 @@ /** JGroup channel. */ protected JChannel channel; - public JGroupsNotifierTransporter(WikittyServiceNotifier ws, Properties props) { + public JGroupsNotifierTransporter(ApplicationConfig config, WikittyServiceNotifier ws) { this.ws = ws; // can be null according to default constructor - if (props != null) { + if (config != null) { // add notifier as listener - String jgroupChannel = props.getProperty(WIKITTY_EVENT_JGROUPCHANNELNAME_OPTION); + String jgroupChannel = config.getOption(WikittyConfig.Option.WIKITTY_EVENT_TRANSPORTER_JGROUP_CHANNELNAME.getKey()); if (!StringUtils.isBlank(jgroupChannel)) { initChannel(jgroupChannel); } else { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java 2010-10-28 13:54:03 UTC (rev 455) @@ -32,6 +32,7 @@ import org.apache.commons.collections.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; /** * Cette classe sert a introduire du cache dans wikitty. Elle sert a centraliser @@ -52,9 +53,11 @@ protected Map<String, Wikitty> wikittyCache; /** + * + * @param config not used currently but necessary in futur to configure the cache * Create a soft cache. */ - public WikittyCache() { + public WikittyCache(ApplicationConfig config) { this(true); } Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-10-28 13:54:03 UTC (rev 455) @@ -0,0 +1,321 @@ +package org.nuiton.wikitty; + +import java.io.File; +import java.util.Properties; +import static org.nuiton.i18n.I18n._; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.ArgumentsParserException; + +/** + * Configuration de tous les modules Wikitty. La configuration par defaut doit + * permettre un bon fonctionnement de wikitty pour quelqu'un souhaitant faire un + * essaie rapide. La configuration actuelle: + * <li> wikitty-config.properties comme fichier de configuration + * <li> WikittyServiceInMemory + * <li> pas de notification reseau + * <li> /tmp pour les exports + * + * Si on utilise WikittyServiceImpl au lieu de WikittyServiceInMemory par defaut + * <li> base h2 embarque + * <li> solr + * + * Si on utilise la notification des events + * <li> transporter XMPPNotifierTransporter + * <li> serveur im.codelutin.com + * <li> room test@conference.im.codelutin.com + * + * Des la creation de l'objet les fichiers de configuration sont recherches. + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyConfig extends ApplicationConfig { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyConfig.class); + + /** + * Create WikittyConfig with default value and load wikitty-config.properties + */ + public WikittyConfig() { + super(); + init(); + try { + parse(null); + } catch (ArgumentsParserException eee) { + if (log.isErrorEnabled()) { + log.error("Can't load wikitty configuration", eee); + } + } + } + + /** + * Create WikittyConfig and load particular configuration filename + * @param configFilename + */ + public WikittyConfig(String configFilename) { + setDefaultOption(Option.WIKITTY_CONFIG_FILE.getKey(), configFilename); + } + + /** + * Create WikittyConfig and use props as default value + * @param props + */ + public WikittyConfig(Properties props) { + this(); + + // iterate with Properties method and not with Hashtable method to + // prevent missed value with chained Properties object + for (String key : props.stringPropertyNames()) { + setDefaultOption(key, props.getProperty(key)); + } + } + + protected void init() { + // init configuration with default options + for (Option o : Option.values()) { + if (o.defaultValue != null) { + setDefaultOption(o.key, o.defaultValue); + } + } + + // init actions + for (Action a : Action.values()) { + for (String alias : a.aliases) { + addActionAlias(alias, a.action); + } + } + } + + /** + * Configuration option for all modules + */ + public static enum Option implements OptionDef { + + WIKITTY_CONFIG_FILE( + CONFIG_FILE_NAME, + _("Main configuration wikitty file"), + "wikitty-config.properties", String.class, true, true), + + WIKITTY_STORAGE_JDBC_QUERY_FILE( + "wikitty.storage.jdbc.queryfile", + _("JDBC query configuration file"), + "wikitty-jdbc-query.properties", String.class, false, false), + + WIKITTY_STORAGE_JDBC_DRIVER( + "wikitty.storage.jdbc.driver", + _("JDBC driver name"), + "org.h2.Driver", String.class, false, false), + WIKITTY_STORAGE_JDBC_URL( + "wikitty.storage.jdbc.host", + _("JDBC url"), + "jdbc:h2:file:./target/data/data", String.class, false, false), + WIKITTY_STORAGE_JDBC_LOGIN( + "wikitty.storage.jdbc.login", + _("JDBC login name"), + "sa", String.class, false, false), + WIKITTY_STORAGE_JDBC_PASSWORD( + "wikitty.storage.jdbc.password", + _("JDBC password"), + "", String.class, false, false), + WIKITTY_STORAGE_JDBC_XADATASOURCE( + "wikitty.storage.jdbc.xadatasource", + _("JDBC xadatasource driver"), + "org.h2.jdbcx.JdbcDataSource", String.class, false, false), + WIKITTY_STORAGE_JDBC_XADATASOURCE_H2_URL( + "wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.URL", + _("JDBC xadatasource property h2 url"), + "jdbc:h2:file:./target/data/data", String.class, false, false), + WIKITTY_STORAGE_JDBC_XADATASOURCE_H2_USER( + "wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.user", + _("JDBC xadatasource property h2 username"), + "sa", String.class, false, false), + WIKITTY_STORAGE_JDBC_XADATASOURCE_H2_PASSWORD( + "wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password", + _("JDBC xadatasource property h2 password"), + "", String.class, false, false), + + WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_DATA( + "wikitty.searchengine.solr.directory.data", + _("Solr data directory"), + "./target/data/solr", File.class, false, false), + + + WIKITTY_WIKITTYSERVICE_COMPONENTS( + "wikitty.WikittyService.components", + _("WikittyService to use (list must be in right order. " + + "ex: org.nuiton.wikitty.WikittyServiceImpl,org.nuiton.wikitty.WikittyServiceNotifier,org.nuiton.wikitty.WikittyServiceCached,org.nuiton.wikitty.WikittyServiceSecurity)"), + WikittyServiceInMemory.class.getName(), String.class, false, false), + + WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE( + "wikitty.WikittyServiceInMemory.persistence", + _("Indique si les donnees sont stocker entre deux utilisations."), + "false", Boolean.class, false, false), + WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE_FILE( + "wikitty.WikittyServiceInMemory.persistence.file", + _("Fichier ou les donnees sont stocker"), + "/tmp/wikitty-inmemory.ser", File.class, false, false), + + + WIKITTY_WIKITTYSERVICEIMPL_COMPONENTS( + "wikitty.WikittyServiceImpl.components", + _("WikittyServiceImpl component to use (ExtensionStorage, WikittyStorage, SearchEngine)"), + "org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC," + + "org.nuiton.wikitty.jdbc.WikittyStorageJDBC," + + "org.nuiton.wikitty.solr.WikittySearchEnginSolr", String.class, false, false), + + WIKITTY_EXPORT_THREADNUMBER( + "wikitty.addon.export.threadnumber", + _("number of thread used to export task"), + "1", Integer.class, false, false), + WIKITTY_EXPORT_DIRECTORY( + "wikitty.addon.export.directory", + _("directory path where export asynchronous file are stored"), + "/tmp", String.class, false, false), + WIKITTY_EXPORT_PUBLICURL( + "wikitty.addon.export.publicurl", + _("url used by client to retrieve export file when job is ended"), + "file:///tmp/", String.class, false, false), + + WIKITTY_CACHE_LISTEN_REMOTEEVENTS( + "wikitty.service.cache.listenevents", + _("Indique si le service de cache ecoute les events reseaux"), + "false", Boolean.class, false, false), + WIKITTY_CACHE_RESTORE_COPIES( + "wikitty.service.cache.allwaysRestoreCopies", + _("Indique si le cache retourne des copies des objets ou des proxies"), + "false", Boolean.class, false, false), + + WIKITTY_EVENT_PROPAGATE( + "wikitty.service.event.propagate", + _("Indique si le service d'event propage sur le reseau les evenements"), + "false", Boolean.class, false, false), + WIKITTY_EVENT_PROPAGATE_TRANSPORTER( + "wikitty.service.event.propagate.transporter", + _("La classe du transporter a utiliser pour la propagation reseau"), + XMPPNotifierTransporter.class.getName(), Class.class, false, false), + + WIKITTY_EVENT_TRANSPORTER_JGROUP_CHANNELNAME( + "wikitty.service.event.transporter.jgroups.channelname", + _("channel name for jgroups transporter"), + null, String.class, false, false), + + WIKITTY_EVENT_TRANSPORTER_XMPP_SERVER( + "wiktty.service.event.transporter.xmpp.server", + _("XMPP server to use for XMPP transporter"), + "im.codelutin.com", String.class, false, false), + WIKITTY_EVENT_TRANSPORTER_XMPP_ROOM( + "wikitty.service.event.transporter.xmpp.room", + _("Room to use for XMPP transporter"), + "test@conference.im.codelutin.com", String.class, false, false), + WIKITTY_EVENT_TRANSPORTER_XMPP_NOTIFICATION_PERSISTENT( + "wikitty.service.event.transporter.xmpp.notification.persistent", + _("If true client try to retrieve missed message during client" + + "stopped. For that room must have history activated"), + "false", Boolean.class, false, false), + + // achitecture client serveur + WIKITTY_SERVER_HESSIAN_ENDPOINT( + "wikitty.server.hessian.endpoint", + _("Hessian serveur URL"), + null, String.class, false, false); + + public String key; + public String description; + public String defaultValue; + public Class<?> type; + public boolean isTransient; + public boolean isFinal; + + private Option(String key, String description, String defaultValue, Class<?> type, boolean isTransient, boolean isFinal) { + this.key = key; + this.description = description; + this.defaultValue = defaultValue; + this.type = type; + this.isTransient = isTransient; + this.isFinal = isFinal; + } + + @Override + public boolean isFinal() { + return isFinal; + } + + @Override + public boolean isTransient() { + return isTransient; + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getKey() { + return key; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public void setTransient(boolean isTransient) { + this.isTransient = isTransient; + } + + @Override + public void setFinal(boolean isFinal) { + this.isFinal = isFinal; + } + } + + public static enum Action { + + HELP(_("Wikitty help"), + WikittyConfig.class.getName() + "#help", "-h", "--help"); + + public String description; + public String action; + public String[] aliases; + + private Action(String description, String action, String... aliases) { + this.description = description; + this.action = action; + this.aliases = aliases; + } + } + + static public void help() { + System.out.println("Wikitty configuration and action"); + System.out.println("Options (set with --option <key> <value>:"); + for (WikittyConfig.Option o : WikittyConfig.Option.values()) { + log.debug("\t" + o.key + "(" + o.defaultValue + "):" + o.description); + } + + log.debug("Actions:"); + for (WikittyConfig.Action a : WikittyConfig.Action.values()) { + log.debug("\t" + java.util.Arrays.toString(a.aliases) + "(" + a.action + "):" + a.description); + } + System.exit(0); + } + +} Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java 2010-10-28 13:54:03 UTC (rev 455) @@ -39,6 +39,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.importexport.ExportTask; import org.nuiton.wikitty.importexport.ImportExportCSV; @@ -74,18 +75,13 @@ } }; - // FIXME poussin 20090902 next 3 variables must be read from configuration file - /** number of thread used to import/export task */ - protected static final int MAX_IMPORT_EXPORT_THREAD = 1; /** directory path where export asynchronous file are stored */ - protected static final String EXPORT_DIRECTORY = "/tmp/"; + protected String exportDirectory = "/tmp/"; /** url used by client to retrieve export file when job is ended */ - protected static final String EXPORT_URL = "file:///tmp/"; + protected String exportPublicURL = "file:///tmp/"; /** Executor that do import export task */ - protected ExecutorService importExportExecutor = - // TODO poussin 20090902 do thread number configurable - Executors.newFixedThreadPool(MAX_IMPORT_EXPORT_THREAD); + protected ExecutorService importExportExecutor; /** contains all import or export task, key is job id send to client */ protected Map<String, Future<String>> importExportTask = @@ -94,15 +90,34 @@ protected WikittyService ws; protected String securityToken; - public WikittyImportExportService(String securityToken, WikittyService ws) { + public WikittyImportExportService( + ApplicationConfig config, String securityToken, WikittyService ws) { this.securityToken = securityToken; this.ws = ws; + + exportDirectory = config.getOption( + WikittyConfig.Option.WIKITTY_EXPORT_DIRECTORY.getKey()); + exportPublicURL = config.getOption( + WikittyConfig.Option.WIKITTY_EXPORT_PUBLICURL.getKey()); + + int maxThread = config.getOptionAsInt( + WikittyConfig.Option.WIKITTY_EXPORT_THREADNUMBER.getKey()); + this.importExportExecutor = + Executors.newFixedThreadPool(maxThread); } public WikittyService getWikittyService() { return ws; } + public String getExportDirectory() { + return exportDirectory; + } + + public String getExportPublicURL() { + return exportPublicURL; + } + public void syncImport(FORMAT format, String s) { Reader reader = new StringReader(s); ImportTask task = new ImportTask(securityToken, ws, format, reader); @@ -175,8 +190,8 @@ try { String jobId = UUID.randomUUID().toString(); - File file = new File(EXPORT_DIRECTORY, jobId); - String url = EXPORT_URL + jobId; + File file = new File(exportDirectory, jobId); + String url = exportPublicURL + jobId; Writer result = new FileWriter(file); ExportTask task = new ExportTask( securityToken, ws, format, criteria, result); @@ -239,7 +254,7 @@ public void freeJobResource(String jobId) { Future<String> future = importExportTask.remove(jobId); if (future != null) { - File file = new File(EXPORT_DIRECTORY, jobId); + File file = new File(exportDirectory, jobId); file.delete(); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-10-28 13:54:03 UTC (rev 455) @@ -31,11 +31,10 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; /** * Override some method of WikittyService to use cache @@ -51,17 +50,20 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceCached.class); - /** - * Utiliser pour mettre à jour le cache en ecoutant les evenements - * sur le service. - * - * Le service {@link #ws} doit supporter l'enregistrement de listener. - */ - static public final String WIKITTY_CACHE_LISTENEVENTS_OPTION = "wikitty.service.cache.listenevents"; + // FIXME REMOVE IT +// /** +// * Utiliser pour mettre à jour le cache en ecoutant les evenements +// * sur le service. +// * +// * Le service {@link #ws} doit supporter l'enregistrement de listener. +// */ +// static public final String WIKITTY_CACHE_LISTEN_REMOTEEVENTS = +// "wikitty.service.cache.listenevents"; +// +// /** used as property name in props given in the constructor */ +// public static final String WIKITTY_CACHE_RESTORE_COPIES = +// "wikitty.service.cache.allwaysRestoreCopies"; - /** used as property name in props given in the constructor */ - public static final String WIKITTY_CACHE_ALLWAYS_RESTORE_COPIES_POLICY_OPTION = "wikitty.service.cache.allwaysRestoreCopies"; - /** Cache. */ protected WikittyCache cache = null; @@ -80,14 +82,15 @@ */ protected boolean allwaysRestoreCopies = false; - /** - * Default constructor. - * - * @param ws delegate service - */ - public WikittyServiceCached(WikittyService ws) { - this(ws, null); - } + // FIXME 20101027 REMOVE IT when WikittyConfig is used everywhere +// /** +// * Default constructor. +// * +// * @param ws delegate service +// */ +// public WikittyServiceCached(WikittyService ws) { +// this(null, ws); +// } /** * Constructor with configuration. @@ -95,15 +98,15 @@ * @param ws delegate service * @param props properties (can be null) */ - public WikittyServiceCached(WikittyService ws, Properties props) { + public WikittyServiceCached(ApplicationConfig config, WikittyService ws) { this.ws = ws; - cache = new WikittyCache(); - registerWikittyServiceListener(props); - - // reading configuration and set allwaysRestoreCopies accordingly - if (props != null && props.containsKey(WIKITTY_CACHE_ALLWAYS_RESTORE_COPIES_POLICY_OPTION)) { - allwaysRestoreCopies = Boolean.parseBoolean( - props.getProperty(WIKITTY_CACHE_ALLWAYS_RESTORE_COPIES_POLICY_OPTION)); + cache = new WikittyCache(config); + registerWikittyServiceListener(config); + + if (config != null) { + // reading configuration and set allwaysRestoreCopies accordingly + allwaysRestoreCopies = + config.getOptionAsBoolean(WikittyConfig.Option.WIKITTY_CACHE_RESTORE_COPIES.getKey()); } } @@ -136,12 +139,12 @@ * * @param props properties (can be null) */ - protected void registerWikittyServiceListener(Properties props) { - - if (props != null) { + protected void registerWikittyServiceListener(ApplicationConfig config) { + if (config != null) { // add notifier as listener - String listenEvents = props.getProperty(WIKITTY_CACHE_LISTENEVENTS_OPTION, "false"); - if ("true".equalsIgnoreCase(listenEvents)) { + boolean listenEvents = config.getOptionAsBoolean( + WikittyConfig.Option.WIKITTY_CACHE_LISTEN_REMOTEEVENTS.getKey()); + if (listenEvents) { // add service listener for synchronisation // listener des remote event addWikittyServiceListener(cache, ServiceListenerType.REMOTE); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceEvent.java 2010-10-28 13:54:03 UTC (rev 455) @@ -26,15 +26,12 @@ package org.nuiton.wikitty; import com.thoughtworks.xstream.XStream; -import java.util.Collection; import java.util.Date; import java.util.EnumSet; import java.util.EventObject; import java.util.HashMap; import java.util.LinkedHashMap; -import java.util.LinkedHashSet; import java.util.Map; -import java.util.Set; /** * Wikitty service event. Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java 2010-10-28 13:54:03 UTC (rev 455) @@ -0,0 +1,156 @@ +package org.nuiton.wikitty; + + +import java.util.Arrays; +import java.util.List; +import java.util.Properties; +import org.apache.commons.lang.ClassUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.picocontainer.MutablePicoContainer; +import org.picocontainer.containers.TransientPicoContainer; + +/** + * Point d'entre de wikitty, permet de recuperer un WikittyService pour + * travailler + * + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceFactory { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceFactory.class); + + // FIXME REMOVE IT +// /** +// * Construit l'enchainement des differents WikittyService comme decrit +// * dans le fichier de configuration via la cle: +// * wikitty.WikittyService.components +// * <p> +// * Chaque composant de l'enchainement peut avoir lui aussi ses propres +// * composants dans une cle: +// * wikitty.[nom simple de la classe].components * +// * +// * @param props +// * @return +// */ +// static public WikittyService buildWikittyService(Properties props) { +// WikittyConfig config = new WikittyConfig(props); +// return buildWikittyService(config); +// } + + /** + * Construit l'enchainement des differents WikittyService comme decrit + * dans le fichier de configuration via la cle: + * wikitty.WikittyService.components + * <p> + * Chaque composant de l'enchainement peut avoir lui aussi ses propres + * composants dans une cle: + * wikitty.[nom simple de la classe].components * + * + * @param config + * @return + */ + static public WikittyService buildWikittyService(ApplicationConfig config) { + WikittyService result = null; + + List<Class> layers = getComponents(config, WikittyService.class); + + MutablePicoContainer pico = new TransientPicoContainer(); + pico.addComponent(config); + for (Class<WikittyService> clazz : layers) { + pico.addComponent(WikittyService.class, clazz); + + // on cree un container specifique pour l'instanciate de cette objet + // avec tous les composants dont il a besoin + MutablePicoContainer childPico = getChildContainer(config, pico, clazz); + result = childPico.getComponent(clazz); + + pico.removeComponent(WikittyService.class); + pico.removeComponent("parent"); + pico.addComponent("parent", result); + } + return result; + } + + static public WikittyServiceNotifier.RemoteNotifierTransporter buildTransporter( + ApplicationConfig config, WikittyServiceNotifier notifier) { + Class<WikittyServiceNotifier.RemoteNotifierTransporter> transporterClass = + (Class<WikittyServiceNotifier.RemoteNotifierTransporter>)config.getOptionAsClass( + WikittyConfig.Option.WIKITTY_EVENT_PROPAGATE_TRANSPORTER.getKey()); + + MutablePicoContainer pico = new TransientPicoContainer(); + pico.addComponent(config); + pico.addComponent(notifier); + WikittyServiceNotifier.RemoteNotifierTransporter result = + pico.getComponent(transporterClass); + return result; + } + + /** + * Retourne un nouveau container fils de celui passe en parametre et dans + * lequel on a injecte tous les composans necessaire a clazz comme decrit + * dans le fichier de configuration + * + * @param config + * @param parent + * @param clazz + * @return + */ + static protected MutablePicoContainer getChildContainer( + ApplicationConfig config, MutablePicoContainer parent, Class clazz) { + List<Class> comps = getComponents(config, clazz); + MutablePicoContainer result = makeChildContainer(parent, comps); + return result; + } + + /** + * Recherche dans la config une key de la forme + * <pre> + * wikitty.[nom simple de la classe].components + * </pre> + * Par exemple pour org.nuiton.wikitty.WikittyService le nom simple est + * WikittyService. + * La valeur doit contenir une liste de classes separer par des ','. + * * + * @param config + * @param clazz + * @return la liste de classe trouvee ou null si la cle n'existe pas + */ + static protected List<Class> getComponents(ApplicationConfig config, Class clazz) { + List<Class> result = null; + + String key = "wikitty." + clazz.getSimpleName() + ".components"; + + String componentsString = config.getOption(key); + if (componentsString != null) { + String[] componentsList = componentsString.split(","); + result = (List<Class>) ClassUtils.convertClassNamesToClasses( + Arrays.asList(componentsList)); + } + return result; + } + + /** + * Cree un nouveau container et injecte les classes donnees en parametre + * @param parent + * @param comps + * @return + */ + static protected MutablePicoContainer makeChildContainer( + MutablePicoContainer parent, List<Class> comps) { + MutablePicoContainer result = parent.makeChildContainer(); + if (comps != null) { + for (Class clazz : comps) { + result.addComponent(clazz); + } + } + return result; + } +} Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-10-28 13:54:03 UTC (rev 455) @@ -65,13 +65,14 @@ protected WikittyStorage wikittyStorage; /** + * FIXME poussin 20101027 remove it when all used WikittyServiceHelper.build + * * Used by specific child * {@link org.nuiton.wikitty.jdbc.WikittyServiceJDBC} * {@link org.nuiton.wikitty.jdbc.WikittyServiceJPA} * {@link org.nuiton.wikitty.jdbc.WikittyServiceHbase} */ protected WikittyServiceImpl() { - } public WikittyServiceImpl(WikittyExtensionStorage extensionStorage, Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-10-28 13:54:03 UTC (rev 455) @@ -44,6 +44,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.FieldType.TYPE; import org.nuiton.wikitty.search.And; import org.nuiton.wikitty.search.BinaryOperator; @@ -429,56 +430,58 @@ } /** - * if persitenceFile is not null, serialize all data to disk during store + * if persistenceFile is not null, serialize all data to disk during store * operation and the file is reloaded during init */ - protected File persitenceFile = null; + protected File persistenceFile = null; -// protected WikittyStorage wikittyStorage; -// protected WikittyExtensionStorage extensionStorage; -// protected WikittySearchEngin searchEngin; - - public WikittyServiceInMemory() { + public WikittyServiceInMemory(ApplicationConfig config) { super(new WikittyExtensionStorageInMemory(), new WikittyStorageInMemory(), null); searchEngin = new WikittySearchEnginInMemory( (WikittyStorageInMemory) wikittyStorage); + + boolean persist = config.getOptionAsBoolean( + WikittyConfig.Option.WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE.getKey()); + if (persist) { + persistenceFile = config.getOptionAsFile( + WikittyConfig.Option.WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE_FILE.getKey()); + restoreFromPersistenceFile(persistenceFile); + } } - public WikittyServiceInMemory(File persitenceFile) { - this(); - this.persitenceFile = persitenceFile; - if (persitenceFile != null && persitenceFile.exists()) { + @Override + protected void finalize() throws Throwable { + saveToPersistenceFile(persistenceFile); + + super.finalize(); + } + + protected void restoreFromPersistenceFile(File persistenceFile) { + if (persistenceFile != null && persistenceFile.exists()) { try { ObjectInputStream in = new ObjectInputStream(new FileInputStream( - persitenceFile)); + persistenceFile)); ((WikittyExtensionStorageInMemory)extensionStorage).extensions = (Map) in.readObject(); ((WikittyStorageInMemory)wikittyStorage).wikitties = (Map) in.readObject(); in.close(); } catch (Exception eee) { - log.error("Can't read data file " + persitenceFile, eee); + log.error("Can't read data file " + persistenceFile, eee); } } } - @Override - protected void finalize() throws Throwable { - saveToPersistenceFile(); - - super.finalize(); - } - - public void saveToPersistenceFile() { - if (persitenceFile != null) { + public void saveToPersistenceFile(File persistenceFile) { + if (persistenceFile != null) { try { ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream( - persitenceFile)); + persistenceFile)); out.writeObject(((WikittyExtensionStorageInMemory)extensionStorage).extensions); out.writeObject(((WikittyStorageInMemory)wikittyStorage).wikitties); out.close(); } catch (IOException eee) { - log.error("Can't write data file " + persitenceFile, eee); + log.error("Can't write data file " + persistenceFile, eee); } } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-10-28 13:54:03 UTC (rev 455) @@ -26,14 +26,10 @@ package org.nuiton.wikitty; import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.concurrent.LinkedBlockingQueue; @@ -85,21 +81,12 @@ protected EventThread eventThread; /** - * Default constructor. - * - * @param ws delegate service - */ - public WikittyServiceNotifier(WikittyService ws) { - this(ws, null); - } - - /** * Constructor with configuration. * * @param ws delegate service * @param props properties (can be null) */ - public WikittyServiceNotifier(WikittyService ws, Properties props) { + public WikittyServiceNotifier(ApplicationConfig config, WikittyService ws) { // service this.ws = ws; @@ -115,8 +102,8 @@ remoteWikittyServiceListeners); // can be null according to default constructor - if (props != null) { - notifier = new RemoteNotifier(this, props); + if (config != null) { + notifier = new RemoteNotifier(config, this); } } @@ -566,13 +553,6 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(RemoteNotifier.class); - /** - * Indique si les objects sont propages (true) vers les autres caches ou - * simplement supprimes des autres caches (false). Default to {@code false}. - */ - static public final String WIKITTY_EVENT_PROPAGATE_OPTION = "wikitty.service.event.propagateEvent"; - /** notifier class name in configuration that this service must used */ - static final public String WIKITTY_NOTIFIER_TRANSPORTER_CLASS = "wikitty.notifier.transporter.class"; /** Notifier service reference reference. */ protected WikittyServiceNotifier ws; @@ -586,34 +566,22 @@ protected boolean propagateEvent = false; protected RemoteNotifierTransporter transporter; - public RemoteNotifier(WikittyServiceNotifier ws, Properties props) { + public RemoteNotifier(ApplicationConfig config, WikittyServiceNotifier ws) { // can be null according to default constructor - if (props != null) { + if (config != null) { this.ws = ws; - if (!props.containsKey(WIKITTY_NOTIFIER_TRANSPORTER_CLASS)) { - props.setProperty(WIKITTY_NOTIFIER_TRANSPORTER_CLASS, JGroupsNotifierTransporter.class.getName()); - } - ApplicationConfig config = new ApplicationConfig(props); - - propagateEvent = config.getOptionAsBoolean(WIKITTY_EVENT_PROPAGATE_OPTION); + propagateEvent = config.getOptionAsBoolean( + WikittyConfig.Option.WIKITTY_EVENT_PROPAGATE.getKey()); if (log.isDebugEnabled()) { log.debug("Set propagateEvent option to " + propagateEvent); } - Class transporterClass = config.getOptionAsClass( - WIKITTY_NOTIFIER_TRANSPORTER_CLASS); - try { - transporter = (RemoteNotifierTransporter) ConstructorUtils.invokeConstructor(transporterClass, - new Object[]{ws, props}, - new Class[]{WikittyServiceNotifier.class, Properties.class}); - } catch (Exception eee) { - throw new WikittyException("Can't create notifier: " - + transporterClass.getName(), eee); + if (propagateEvent) { + transporter = WikittyServiceFactory.buildTransporter(config, ws); + // add this as listener when transporter is created without error + ws.addWikittyServiceListener(this, WikittyService.ServiceListenerType.ALL); // weak reference } - - // add this as listener when transporter is created without error - ws.addWikittyServiceListener(this, WikittyService.ServiceListenerType.ALL); // weak reference } if (log.isInfoEnabled()) { if (transporter == null) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-10-28 13:54:03 UTC (rev 455) @@ -36,6 +36,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.search.Search; /** @@ -58,7 +59,12 @@ /** cache de l'id du groupe AppAdmin */ transient protected String appAdminGroupId = null; - public WikittyServiceSecurity(WikittyService ws) { + /** + * + * @param config not use currently but needed in futur + * @param ws + */ + public WikittyServiceSecurity(ApplicationConfig config, WikittyService ws) { this.ws = new WikittyServiceEnhanced(ws); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java 2010-10-28 13:54:03 UTC (rev 455) @@ -51,6 +51,9 @@ } /** + * FIXME poussin 20101027 a supprimer lorsque WikittyServiceTransaction + * aura ete implante + * * Visibilite 'default' car est uilise par WikittyServiceCached qui est dans * le meme package et a priori seulement lui en a besoin * @@ -58,7 +61,7 @@ */ WikittyCache getCache() { if (cache == null) { - cache = new WikittyCache(); + cache = new WikittyCache(false); } return cache; } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/XMPPNotifierTransporter.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/XMPPNotifierTransporter.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/XMPPNotifierTransporter.java 2010-10-28 13:54:03 UTC (rev 455) @@ -32,7 +32,6 @@ import java.net.NetworkInterface; import java.util.Date; import java.util.Enumeration; -import java.util.Properties; import java.util.UUID; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -68,10 +67,6 @@ static private Log log = LogFactory.getLog(XMPPNotifierTransporter.class); static final public String PROPERTY_EVENT_NAME = "wikitty-event"; - static final public String WIKITTY_XMPP_SERVER = "wikitty.xmpp.server"; - static final public String WIKITTY_XMPP_ROOM = "wikitty.xmpp.room"; - static final public String WIKITTY_NOTIFICATION_PERSISTENT = - "wikitty.notification.persistent"; /** Notifier service reference reference. */ protected WikittyServiceNotifier ws; @@ -92,9 +87,9 @@ * @param ws * @param props */ - public XMPPNotifierTransporter(WikittyServiceNotifier ws, Properties props) { + public XMPPNotifierTransporter(ApplicationConfig config, WikittyServiceNotifier ws) { this.ws = ws; - initXMPP(props); + initXMPP(config); } /** @@ -102,14 +97,14 @@ * * @param props */ - protected void initXMPP(Properties props) { - ApplicationConfig config = new ApplicationConfig(props); + protected void initXMPP(ApplicationConfig config) { + persistent = config.getOptionAsBoolean( + WikittyConfig.Option.WIKITTY_EVENT_TRANSPORTER_XMPP_NOTIFICATION_PERSISTENT.getKey()); + String server = config.getOption( + WikittyConfig.Option.WIKITTY_EVENT_TRANSPORTER_XMPP_SERVER.getKey()); - persistent = config.getOptionAsBoolean(WIKITTY_NOTIFICATION_PERSISTENT); - String server = config.getOption(WIKITTY_XMPP_SERVER); - // Keep them to verify that is not us notifications - room = config.getOption(WIKITTY_XMPP_ROOM); + room = config.getOption(WikittyConfig.Option.WIKITTY_EVENT_TRANSPORTER_XMPP_ROOM.getKey()); pseudo = getUniqueLoginName(); try { if (log.isInfoEnabled()) { Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyI18nTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyI18nTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyI18nTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -22,7 +22,8 @@ @Test public void testI18n() throws Exception { // creation d'un proxy sur un ws in memory - WikittyService ws = new WikittyServiceInMemory(); + WikittyConfig config = new WikittyConfig(); + WikittyService ws = new WikittyServiceInMemory(config); WikittyProxy proxy = new WikittyProxy(ws); // creation d'un label pour l'utiliser pour l'i18n Added: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyServiceHelperTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyServiceHelperTest.java (rev 0) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyServiceHelperTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -0,0 +1,39 @@ +package org.nuiton.wikitty; + + +import java.util.Properties; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; + +/** + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceHelperTest { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceHelperTest.class); + + @Test + public void testBuild() throws Exception { + Properties props = new Properties(); + props.setProperty(WikittyConfig.Option.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(), + WikittyServiceInMemory.class.getName() + "," + + WikittyServiceNotifier.class.getName() + "," + + WikittyServiceCached.class.getName()); + WikittyConfig config = new WikittyConfig(props); + WikittyService ws = WikittyServiceFactory.buildWikittyService(config); + + Assert.assertEquals(WikittyServiceCached.class, ws.getClass()); + ws = ((WikittyServiceCached)ws).ws; + Assert.assertEquals(WikittyServiceNotifier.class, ws.getClass()); + ws = ((WikittyServiceNotifier)ws).ws; + Assert.assertEquals(WikittyServiceInMemory.class, ws.getClass()); + } +} Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/ImportExportTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -43,6 +43,7 @@ import org.junit.Test; import org.nuiton.wikitty.Criteria; import org.nuiton.wikitty.Wikitty; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyImportExportService; import org.nuiton.wikitty.search.Element; import org.nuiton.wikitty.search.Search; @@ -59,7 +60,8 @@ protected WikittyImportExportService getImportExportService() { if (ieService == null) { - ieService = new WikittyImportExportService(null, ws); + WikittyConfig config = new WikittyConfig(); + ieService = new WikittyImportExportService(config, null, ws); } return ieService; } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/importexport/ImportExportCSVTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -35,6 +35,7 @@ import org.nuiton.util.StringUtil; import org.nuiton.wikitty.Criteria; import org.nuiton.wikitty.PagedResult; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyTreeNode; import org.nuiton.wikitty.WikittyTreeNodeImpl; import org.nuiton.wikitty.WikittyExtension; @@ -167,11 +168,17 @@ proxy.storeExtension(extensionTag); // declare import service - WikittyImportExportService wsImport = new WikittyImportExportService(null, ws); - String[] importFiles = {"/csv/importclient.csv", "/csv/importtree.csv", "/csv/importtree2.csv"}; + WikittyConfig config = new WikittyConfig(); + WikittyImportExportService wsImport = + new WikittyImportExportService(config, null, ws); + String[] importFiles = { + "/csv/importclient.csv", + "/csv/importtree.csv", + "/csv/importtree2.csv"}; for (String importFile : importFiles) { URL importFileURL = ImportExportCSVTest.class.getResource(importFile); - wsImport.syncImportFromUri(WikittyImportExportService.FORMAT.CSV, importFileURL.toExternalForm()); + wsImport.syncImportFromUri(WikittyImportExportService.FORMAT.CSV, + importFileURL.toExternalForm()); } // test extension support Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceCachedTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -35,6 +35,7 @@ import org.junit.Before; import org.junit.Test; import org.nuiton.wikitty.Wikitty; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyServiceCached; import org.nuiton.wikitty.WikittyServiceInMemory; @@ -43,7 +44,8 @@ @Before public void setUpWikittyServiceCachedTest() { - setService(new WikittyServiceCached(new WikittyServiceInMemory())); + WikittyConfig config = new WikittyConfig(); + setService(new WikittyServiceCached(config, new WikittyServiceInMemory(config))); token = service.login(null, null); service.store(token, null, Collections.singletonList(getaWikitty()), false); } @@ -90,10 +92,12 @@ @Test public void testRestoreAllwaysCopyPolicy() throws Exception { - Properties props = new Properties(); - props.setProperty(WikittyServiceCached.WIKITTY_CACHE_ALLWAYS_RESTORE_COPIES_POLICY_OPTION, "true"); + WikittyConfig config = new WikittyConfig(); + config.setOption( + WikittyConfig.Option.WIKITTY_CACHE_RESTORE_COPIES.getKey(), + "true"); - setService(new WikittyServiceCached(new WikittyServiceInMemory(), props)); + setService(new WikittyServiceCached(config, new WikittyServiceInMemory(config))); token = service.login(null, null); service.store(token, null, Collections.singletonList(getaWikitty()), false); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -40,6 +40,7 @@ import org.nuiton.wikitty.WikittyAuthorisationAbstract; import org.nuiton.wikitty.WikittyAuthorisationHelper; import org.nuiton.wikitty.WikittyAuthorisationImpl; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyGroup; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittySecurityHelper; @@ -67,9 +68,11 @@ @Before public void setUpWikittyServiceSecurityTest() { - WikittyService inMemoryService = new WikittyServiceInMemory(); + WikittyConfig config = new WikittyConfig(); + WikittyService inMemoryService = new WikittyServiceInMemory(config); - WikittyServiceSecurity securityService = new WikittyServiceSecurity(inMemoryService); + WikittyServiceSecurity securityService = + new WikittyServiceSecurity(config, inMemoryService); /** / // FIXME 20101005 bleny implementation should be able to allow Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/memory/InMemoryStorageTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -40,6 +40,7 @@ import org.nuiton.wikitty.ExtensionFactory; import org.nuiton.wikitty.FieldType.TYPE; import org.nuiton.wikitty.Wikitty; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyImpl; import org.nuiton.wikitty.WikittyServiceEnhanced; @@ -53,7 +54,8 @@ @Before public void init() throws Exception { - wikittyService = new WikittyServiceInMemory(); + WikittyConfig config = new WikittyConfig(); + wikittyService = new WikittyServiceInMemory(config); } protected static DateFormat dateFormater = new SimpleDateFormat("dd/MM/yyyy"); @@ -70,7 +72,14 @@ tempPersistFile.delete(); tempPersistFile.deleteOnExit(); - wikittyService = new WikittyServiceInMemory( tempPersistFile ); + WikittyConfig config = new WikittyConfig(); + config.setOption( + WikittyConfig.Option.WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE.getKey(), + "true"); + config.setOption( + WikittyConfig.Option.WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE_FILE.getKey(), + tempPersistFile.getPath()); + wikittyService = new WikittyServiceInMemory(config); String extName = "MyExtName"; WikittyExtension ext = ExtensionFactory.create("MyExtName", "1") .addField("fieldName0", TYPE.NUMERIC) @@ -87,9 +96,9 @@ ); String id = w.getId(); wikittyService.store(null, null, Collections.singletonList(w), false); - ((WikittyServiceInMemory)wikittyService).saveToPersistenceFile(); + ((WikittyServiceInMemory)wikittyService).saveToPersistenceFile(tempPersistFile); - wikittyService = new WikittyServiceInMemory( tempPersistFile ); + wikittyService = new WikittyServiceInMemory( config ); w = WikittyServiceEnhanced.restore(wikittyService, null, id); assertTrue( w.hasField(extName, "fieldName0") ); assertEquals( 123, w.getFieldAsInt(extName, "fieldName0") ); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/WikittyServiceNotificationTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -35,7 +35,7 @@ */ @Test public void testEvent() throws Exception { - WikittyServiceNotifier wsn = new WikittyServiceNotifier(null); + WikittyServiceNotifier wsn = new WikittyServiceNotifier(null, null); Listener l = new Listener(); // test d'envoi et de bonne reception Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/notification/XMPPNotificationTest.java 2010-10-28 13:54:03 UTC (rev 455) @@ -26,9 +26,7 @@ import java.util.Date; -import java.util.HashSet; import java.util.Properties; -import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jivesoftware.smack.PacketListener; @@ -36,8 +34,8 @@ import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smackx.muc.DiscussionHistory; import org.jivesoftware.smackx.muc.MultiUserChat; -import org.jivesoftware.smackx.muc.RoomInfo; import org.junit.Test; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyServiceEvent; import org.nuiton.wikitty.XMPPNotifierTransporter; @@ -58,13 +56,13 @@ public void testXMPP() throws Exception { String server = "im.codelutin.com"; String room = "test@conference.im.codelutin.com"; - Properties props = new Properties(); - props.setProperty(XMPPNotifierTransporter.WIKITTY_XMPP_SERVER, server); - props.setProperty(XMPPNotifierTransporter.WIKITTY_XMPP_ROOM, room); + WikittyConfig config = new WikittyConfig(); + config.setOption(WikittyConfig.Option.WIKITTY_EVENT_TRANSPORTER_XMPP_SERVER.getKey(), server); + config.setOption(WikittyConfig.Option.WIKITTY_EVENT_TRANSPORTER_XMPP_ROOM.getKey(), room); // Envoi d'un message avec le transporter normal - XMPPNotifierTransporter xmpp = new XMPPNotifierTransporter(null, props); + XMPPNotifierTransporter xmpp = new XMPPNotifierTransporter(config, null); WikittyServiceEvent event = new WikittyServiceEvent("test"); event.addRemoveDate("theId", new Date()); Modified: trunk/wikitty-api/src/test/resources/META-INF/spring/wikitty-test.xml =================================================================== --- trunk/wikitty-api/src/test/resources/META-INF/spring/wikitty-test.xml 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/resources/META-INF/spring/wikitty-test.xml 2010-10-28 13:54:03 UTC (rev 455) @@ -31,9 +31,12 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + <bean name="wikittyConfig" class="org.nuiton.wikitty.WikittyConfig"/> + + <bean id="wikittyService" class="org.nuiton.wikitty.WikittyServiceInMemory"> + <constructor-arg ref="wikittyConfig"/> + </bean> - <bean id="wikittyService" class="org.nuiton.wikitty.WikittyServiceInMemory" /> - <context:annotation-config/> <context:component-scan base-package="org.nuiton.wikitty"/> Modified: trunk/wikitty-api/src/test/resources/csv/importtree.csv =================================================================== --- trunk/wikitty-api/src/test/resources/csv/importtree.csv 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-api/src/test/resources/csv/importtree.csv 2010-10-28 13:54:03 UTC (rev 455) @@ -1,3 +1,3 @@ "Wikitty.Id","Wikitty.Ext","WikittyTreeNode.name","WikittyTreeNode.parent","WikittyTreeNode.attachment" "4f6fc798-41f8-48d7-9398-119ef6ab02b6",,"MyRootNode",, -"1142aa4c-af5a-4264-9918-9f72d9ef9d59","Tag","MyTreeNode","4f6fc798-41f8-48d7-9398-119ef6ab02b6","(fbcc8aed-7f67-4e3c-a9aa-221373765f8d),(677ee1e7-239f-416c-a353-6e56bc0451e2)" +"1142aa4c-af5a-4264-9918-9f72d9ef9d59","Tag","MyTreeNode","4f6fc798-41f8-48d7-9398-119ef6ab02b6","(fbcc8aed-7f67-4e3c-a9aa-221373765f8d),(677ee1e7-239f-416c-a353-6e56bc0451e2_dont-exist)" Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-10-28 13:54:03 UTC (rev 455) @@ -41,12 +41,6 @@ import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_SELECT_WHERE; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.TABLE_EXTENSION_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.TABLE_EXTENSION_DATA; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.commitJDBCConnection; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.doQuery; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.getConnection; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.getJDBCConnection; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.loadProperties; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.rollbackJDBCConnection; import java.sql.Connection; import java.sql.PreparedStatement; @@ -63,7 +57,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.FieldType; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyExtension; import org.nuiton.wikitty.WikittyExtensionStorage; @@ -85,7 +81,8 @@ static protected Log log = LogFactory.getLog(WikittyExtensionStorageJDBC.class); /** Properties file */ - protected final Properties conf; + protected final Properties jdbcQuery; + protected ApplicationConfig config; /** cache for extension key: ext id (extname[extversion]) value: WikittyExtension */ protected Map<String, WikittyExtension> extensionCache = @@ -94,31 +91,33 @@ /** cache for last extension version; key: extName value: extVersion */ transient protected Map<String, String> lastVersion = null; - public WikittyExtensionStorageJDBC() { - this(null); - } + // FIXME REMOVE IT +// public WikittyExtensionStorageJDBC() { +// this(null); +// } - public WikittyExtensionStorageJDBC(Properties properties) { - conf = loadProperties(properties); - Connection connectionTest = getJDBCConnection(conf); + public WikittyExtensionStorageJDBC(ApplicationConfig config) { + this.config = config; + jdbcQuery = WikittyJDBCUtil.loadQuery(config); + Connection connectionTest = WikittyJDBCUtil.getJDBCConnection(config); try { // If test of existance work, no exception and do nothing // if exception try to create databse Statement statementTest = connectionTest.createStatement(); - statementTest.execute(conf.getProperty(QUERY_CREATION_EXTENSION_ADMIN_TEST)); - statementTest.execute(conf.getProperty(QUERY_CREATION_EXTENSION_DATA_TEST)); + statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_ADMIN_TEST)); + statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_DATA_TEST)); } catch(SQLException silentError) { if (log.isInfoEnabled()) { log.info("try to create extension database"); } - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { Statement statement = connection.createStatement(); - statement.execute(conf.getProperty(QUERY_CREATION_EXTENSION_ADMIN)); - statement.execute(conf.getProperty(QUERY_CREATION_EXTENSION_DATA)); - commitJDBCConnection(connection); + statement.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_ADMIN)); + statement.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_DATA)); + WikittyJDBCUtil.commitJDBCConnection(connection); } catch (SQLException eee) { - rollbackJDBCConnection(connection); + WikittyJDBCUtil.rollbackJDBCConnection(connection); throw new WikittyException("Can't create table for extension storage", eee); } finally { WikittyJDBCUtil.closeQuietly(connection); @@ -133,13 +132,13 @@ Collection<WikittyExtension> extensions) throws WikittyException { WikittyServiceEvent result = new WikittyServiceEvent(this); - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { for (WikittyExtension ext : extensions) { // extension id is extension name with version String id = ext.getId(); //select all the data with the id "id" - String query = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String query = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), COL_VERSION, TABLE_EXTENSION_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, id); @@ -148,7 +147,8 @@ //if the data is not already recorded if (!versionResultSet.next()) { result.addExtension(ext); - doQuery(connection, conf.getProperty(QUERY_INSERT_EXTENSION_ADMIN), + WikittyJDBCUtil.doQuery(connection, + jdbcQuery.getProperty(QUERY_INSERT_EXTENSION_ADMIN), ext.getId(), ext.getName(), ext.getVersion(), @@ -156,7 +156,8 @@ WikittyUtil.tagValuesToString(ext.getTagValues())); for (String fieldName : ext.getFieldNames()) { FieldType type = ext.getFieldType(fieldName); - doQuery(connection, conf.getProperty(QUERY_INSERT_EXTENSION_DATA), + WikittyJDBCUtil.doQuery(connection, + jdbcQuery.getProperty(QUERY_INSERT_EXTENSION_DATA), ext.getId(), fieldName, type.toDefinition(fieldName)); } } else { @@ -180,10 +181,10 @@ @Override public boolean exists(WikittyTransaction transaction, String id) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { //select the data with teh id "id" in the admin table - String q = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String q = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), COL_ID, TABLE_EXTENSION_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(q); statement.setString(1, id); @@ -200,13 +201,13 @@ @Override public List<String> getAllExtensionIds(WikittyTransaction transaction) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { List<String> result = new ArrayList<String>(); Statement statement = connection.createStatement(); //get all extensions names and versions ResultSet resultSet = statement.executeQuery( - String.format(conf.getProperty(QUERY_SELECT), + String.format(jdbcQuery.getProperty(QUERY_SELECT), COL_ID, TABLE_EXTENSION_ADMIN)); while (resultSet.next()) { @@ -224,10 +225,10 @@ @Override public List<String> getAllExtensionsRequires(WikittyTransaction transaction, String extensionName) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { List<String> result = new ArrayList<String>(); - String q = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String q = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), COL_ID, TABLE_EXTENSION_ADMIN, COL_REQUIRES); PreparedStatement statement = connection.prepareStatement(q); @@ -260,12 +261,12 @@ if (lastVersion == null) { // create cache for futur call Map<String, String> tmp = new HashMap<String, String>(); - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { Statement statement = connection.createStatement(); //get all extensions names and versions ResultSet resultSet = statement.executeQuery( - String.format(conf.getProperty(QUERY_SELECT), + String.format(jdbcQuery.getProperty(QUERY_SELECT), COL_NAME + "," + COL_VERSION, TABLE_EXTENSION_ADMIN)); while (resultSet.next()) { String name = resultSet.getString(COL_NAME); @@ -294,11 +295,11 @@ String id = WikittyExtension.computeId(name, version); WikittyExtension result = extensionCache.get(id); if (result == null) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { //get the data with the id "id" in the admin table - String q = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String q = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), "*", TABLE_EXTENSION_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(q); statement.setString(1, id); @@ -312,7 +313,7 @@ new LinkedHashMap<String, FieldType>(); //get the data with the id "id" in the data table - String qdata = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String qdata = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), "*", TABLE_EXTENSION_DATA, COL_ID); PreparedStatement sta = connection.prepareStatement(qdata); sta.setString(1, id); @@ -349,10 +350,10 @@ @Override public WikittyServiceEvent clear(WikittyTransaction transaction) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { lastVersion = null; - doQuery(connection, conf.getProperty(QUERY_CLEAR_EXTENSION)); + WikittyJDBCUtil.doQuery(connection, jdbcQuery.getProperty(QUERY_CLEAR_EXTENSION)); WikittyServiceEvent result = new WikittyServiceEvent(this); result.addType(WikittyServiceEvent.WikittyEventType.CLEAR_EXTENSION); return result; Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2010-10-28 13:54:03 UTC (rev 455) @@ -49,6 +49,8 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyException; /** @@ -145,16 +147,16 @@ static final public String QUERY_INSERT_EXTENSION_DATA = "jdbc.queries.insert.extension.data"; - /** JDBC JDBC_DRIVER property name */ - static protected String JDBC_DRIVER = "jdbc.con.driver"; - /** JDBC_HOST property name */ - static protected String JDBC_HOST = "jdbc.con.host"; - /** JDBC_USER_NAME property name */ - static protected String JDBC_USER_NAME = "jdbc.con.userName"; - /** JDBC_PASSWORD property name */ - static protected String JDBC_PASSWORD = "jdbc.con.password"; - /** JDBC_XADATASOURCE property name */ - static protected String JDBC_XADATASOURCE = "jdbc.xadatasource"; +// /** JDBC JDBC_DRIVER property name */ +// static protected String JDBC_DRIVER = "jdbc.con.driver"; +// /** JDBC_HOST property name */ +// static protected String JDBC_HOST = "jdbc.con.host"; +// /** JDBC_USER_NAME property name */ +// static protected String JDBC_USER_NAME = "jdbc.con.userName"; +// /** JDBC_PASSWORD property name */ +// static protected String JDBC_PASSWORD = "jdbc.con.password"; +// /** JDBC_XADATASOURCE property name */ +// static protected String JDBC_XADATASOURCE = "jdbc.xadatasource"; /** admin table name */ static protected String TABLE_WIKITTY_ADMIN = "wikitty_admin"; @@ -172,20 +174,22 @@ * @param properties custom properties to override default configuration * @return the properties for the connection and the queries */ - public static synchronized Properties loadProperties(Properties properties) { - Properties queryConfig = new Properties(); - Properties databaseConfig = new Properties(queryConfig); + public static synchronized Properties loadQuery(ApplicationConfig config) { + Properties result = new Properties(); +// Properties databaseConfig = new Properties(queryConfig); InputStream streamQuery = null; - InputStream streamConfig = null; +// InputStream streamConfig = null; try { // FIXME poussin 20100112 perhaps used nuitonutil.ApplicationConfig - + + String wikittyQueryFile = config.getOption( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_QUERY_FILE.getKey()); // queries - URL url = ClassLoader.getSystemResource("wikitty-jdbc-query.properties"); + URL url = ClassLoader.getSystemResource(wikittyQueryFile); if (url == null) { ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); - url = contextClassLoader.getResource("wikitty-jdbc-query.properties"); + url = contextClassLoader.getResource(wikittyQueryFile); } if (log.isInfoEnabled()) { @@ -193,42 +197,43 @@ } // url can't be null streamQuery = url.openStream(); - queryConfig.load(streamQuery); - - // config - url = ClassLoader.getSystemResource("wikitty-jdbc-config.properties"); - if (url == null) { - ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); - url = contextClassLoader.getResource("wikitty-jdbc-config.properties"); - } + result.load(streamQuery); - if (url == null) { - if (log.isInfoEnabled()) { - log.info("No wikitty-jdbc-config.properties file found in classpath (skip default configuration loading)"); - } - } - else { - if (log.isInfoEnabled()) { - log.info("Reading resource from: " + url); - } - streamConfig = url.openStream(); - databaseConfig.load(streamConfig); - } - - // extra config - if (properties != null) { - databaseConfig.putAll(properties); - } + // FIXME REMOVE IT +// // config +// url = ClassLoader.getSystemResource("wikitty-jdbc-config.properties"); +// if (url == null) { +// ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); +// url = contextClassLoader.getResource("wikitty-jdbc-config.properties"); +// } +// +// if (url == null) { +// if (log.isInfoEnabled()) { +// log.info("No wikitty-jdbc-config.properties file found in classpath (skip default configuration loading)"); +// } +// } +// else { +// if (log.isInfoEnabled()) { +// log.info("Reading resource from: " + url); +// } +// streamConfig = url.openStream(); +// databaseConfig.load(streamConfig); +// } +// +// // extra config +// if (properties != null) { +// databaseConfig.putAll(properties); +// } } catch (IOException eee) { throw new WikittyException("Unable to load property file", eee); } finally { IOUtils.closeQuietly(streamQuery); - IOUtils.closeQuietly(streamConfig); +// IOUtils.closeQuietly(streamConfig); } - return databaseConfig; + return result; } private static Map<String, BasicManagedDataSource> dataSources = @@ -241,12 +246,23 @@ * @param conf configuration * @return a new Connection (db transaction) */ - public static synchronized Connection getConnection(Properties conf) { + public static synchronized Connection getConnection(ApplicationConfig conf) { + String driver = conf.getOption( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_DRIVER.getKey()); + String host = conf.getOption( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_URL.getKey()); + String username = conf.getOption( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_LOGIN.getKey()); + String password = conf.getOption( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_PASSWORD.getKey()); + + String xaDataSourceClassName = conf.getOption( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_XADATASOURCE.getKey());; try { - TransactionManager transactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager(); + TransactionManager transactionManager = + com.arjuna.ats.jta.TransactionManager.transactionManager(); - String jdbcUrl = String.format("%s:%s@%s", conf.getProperty(JDBC_USER_NAME), - conf.getProperty(JDBC_PASSWORD), conf.getProperty(JDBC_HOST)); + String jdbcUrl = String.format("%s:%s@%s", username, password, host); if (!dataSources.containsKey(jdbcUrl)) { log.info("Creating BasicManagedDataSource for: " + jdbcUrl); @@ -255,7 +271,6 @@ BasicManagedDataSource dataSource = new BasicManagedDataSource(); // if xadatasource - String xaDataSourceClassName = conf.getProperty(JDBC_XADATASOURCE); if(xaDataSourceClassName != null) { XADataSource xaDataSource = (XADataSource) Class.forName(xaDataSourceClassName).newInstance(); @@ -263,10 +278,14 @@ Set<String> fields = beanMap.keySet(); // Inject properties in xadatasource - for(Entry<Object, Object> properties : conf.entrySet()) { + for(Entry<Object, Object> properties : conf.getFlatOptions().entrySet()) { String propertyName = (String) properties.getKey(); - if (propertyName.startsWith(JDBC_XADATASOURCE + "." + xaDataSourceClassName + ".")) { - propertyName = propertyName.replaceFirst(JDBC_XADATASOURCE + "." + xaDataSourceClassName + ".", ""); + if (propertyName.startsWith( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_XADATASOURCE.getKey() + + "." + xaDataSourceClassName + ".")) { + propertyName = propertyName.replaceFirst( + WikittyConfig.Option.WIKITTY_STORAGE_JDBC_XADATASOURCE.getKey() + + "." + xaDataSourceClassName + ".", ""); if(fields.contains(propertyName)) { String propertyValue = (String) properties.getValue(); BeanUtils.setProperty(xaDataSource, propertyName, propertyValue); @@ -281,10 +300,10 @@ } // else standard datasource - dataSource.setDriverClassName(conf.getProperty(JDBC_DRIVER)); - dataSource.setUrl(conf.getProperty(JDBC_HOST)); - dataSource.setUsername(conf.getProperty(JDBC_USER_NAME)); - dataSource.setPassword(conf.getProperty(JDBC_PASSWORD)); + dataSource.setDriverClassName(driver); + dataSource.setUrl(host); + dataSource.setUsername(username); + dataSource.setPassword(password); dataSource.setTransactionManager(transactionManager); dataSources.put(jdbcUrl, dataSource); @@ -297,7 +316,7 @@ } catch(Exception eee) { throw new WikittyException(String.format( "Can't connect to database %s %s with login %s", - JDBC_DRIVER, JDBC_HOST, JDBC_USER_NAME), eee); + driver, host, username), eee); } } @@ -320,9 +339,9 @@ * @return a new Connection (db transaction) * @throws SQLException if the connection fails */ - public static synchronized Connection getJDBCConnection(Properties conf) { + public static synchronized Connection getJDBCConnection(ApplicationConfig config) { try { - Connection connection = getConnection(conf); + Connection connection = getConnection(config); connection.setAutoCommit(false); return connection; } catch(SQLException eee) { Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-10-28 13:54:03 UTC (rev 455) @@ -25,9 +25,9 @@ package org.nuiton.wikitty.jdbc; -import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyServiceImpl; import org.nuiton.wikitty.solr.WikittySearchEnginSolr; @@ -43,16 +43,17 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceJDBC.class); - public WikittyServiceJDBC() { - extensionStorage = new WikittyExtensionStorageJDBC(); - wikittyStorage = new WikittyStorageJDBC(extensionStorage); - searchEngin = new WikittySearchEnginSolr(extensionStorage); - } + // FIXME REMOVE IT +// public WikittyServiceJDBC() { +// extensionStorage = new WikittyExtensionStorageJDBC(); +// wikittyStorage = new WikittyStorageJDBC(extensionStorage); +// searchEngin = new WikittySearchEnginSolr(extensionStorage); +// } - public WikittyServiceJDBC(Properties config) { + public WikittyServiceJDBC(ApplicationConfig config) { extensionStorage = new WikittyExtensionStorageJDBC(config); - wikittyStorage = new WikittyStorageJDBC(extensionStorage, config); - searchEngin = new WikittySearchEnginSolr(extensionStorage); + wikittyStorage = new WikittyStorageJDBC(config, extensionStorage); + searchEngin = new WikittySearchEnginSolr(config, extensionStorage); } } Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-10-28 13:54:03 UTC (rev 455) @@ -49,12 +49,6 @@ import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_UPDATE_WIKITTY_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.TABLE_WIKITTY_ADMIN; import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.TABLE_WIKITTY_DATA; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.commitJDBCConnection; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.doQuery; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.getConnection; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.getJDBCConnection; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.loadProperties; -import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.rollbackJDBCConnection; import java.sql.Connection; import java.sql.PreparedStatement; @@ -76,6 +70,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.FieldType; import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyException; @@ -102,41 +97,44 @@ static protected Log log = LogFactory.getLog(WikittyStorageJDBC.class); /** Properties file */ - protected final Properties conf; + protected final Properties jdbcQuery; + protected ApplicationConfig config; /** used to parse list field from hbase data. ex: extension.fieldname[11/15] */ static final private Pattern listFieldPattern = Pattern.compile("(.*)\\[(\\d+)/(\\d+)\\]"); protected WikittyExtensionStorage extensionStorage; + + // FIXME REMOVE IT +// public WikittyStorageJDBC(WikittyExtensionStorage extensionStorage) { +// this(extensionStorage, null); +// } - public WikittyStorageJDBC(WikittyExtensionStorage extensionStorage) { - this(extensionStorage, null); - } - - public WikittyStorageJDBC(WikittyExtensionStorage extensionStorage, Properties properties) { + public WikittyStorageJDBC(ApplicationConfig config, WikittyExtensionStorage extensionStorage) { + this.config = config; this.extensionStorage = extensionStorage; - conf = loadProperties(properties); - Connection connectionTest = getJDBCConnection(conf); + jdbcQuery = WikittyJDBCUtil.loadQuery(config); + Connection connectionTest = WikittyJDBCUtil.getJDBCConnection(config); try { // If test of existance work, no exception and do nothing // if exception try to create databse Statement statementTest = connectionTest.createStatement(); - statementTest.execute(conf.getProperty(QUERY_CREATION_WIKITTY_ADMIN_TEST)); - statementTest.execute(conf.getProperty(QUERY_CREATION_WIKITTY_DATA_TEST)); + statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_ADMIN_TEST)); + statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA_TEST)); } catch (SQLException silentError) { if (log.isInfoEnabled()) { log.info("try to create wikitty database"); } - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { Statement statement = connection.createStatement(); - statement.execute(conf.getProperty(QUERY_CREATION_WIKITTY_ADMIN)); - statement.execute(conf.getProperty(QUERY_CREATION_WIKITTY_DATA)); - commitJDBCConnection(connection); + statement.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_ADMIN)); + statement.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA)); + WikittyJDBCUtil.commitJDBCConnection(connection); } catch (SQLException eee) { - rollbackJDBCConnection(connection); + WikittyJDBCUtil.rollbackJDBCConnection(connection); throw new WikittyException("Can't create table for wikitty storage", eee); } finally { WikittyJDBCUtil.closeQuietly(connection); @@ -170,11 +168,11 @@ @Override public WikittyServiceEvent store(WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) throws WikittyException { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { WikittyServiceEvent result = new WikittyServiceEvent(this); for (Wikitty wikitty : wikitties) { - String query = String.format(conf.getProperty(QUERY_SELECT_TWO_WHERE), + String query = String.format(jdbcQuery.getProperty(QUERY_SELECT_TWO_WHERE), COL_VERSION, COL_DELETION_DATE, TABLE_WIKITTY_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, wikitty.getId()); @@ -227,10 +225,14 @@ } if (wikittyAlreadyExists) { - doQuery(connection, conf.getProperty(QUERY_DELETE_WIKITTY_DATA), wikitty.getId()); + WikittyJDBCUtil.doQuery(connection, + jdbcQuery.getProperty(QUERY_DELETE_WIKITTY_DATA), + wikitty.getId()); } else { - doQuery(connection, conf.getProperty(QUERY_INSERT_WIKITTY_ADMIN), wikitty.getId(), newVersion, ""); + WikittyJDBCUtil.doQuery(connection, + jdbcQuery.getProperty(QUERY_INSERT_WIKITTY_ADMIN), + wikitty.getId(), newVersion, ""); } @@ -245,8 +247,9 @@ for (int i = 0; i < list.size(); i++) { Object value = list.get(i); String colName = getColName(type.getType()); - String q = String.format(conf.getProperty(QUERY_INSERT_WIKITTY_DATA), colName); - doQuery(connection, q, + String q = String.format(jdbcQuery.getProperty( + QUERY_INSERT_WIKITTY_DATA), colName); + WikittyJDBCUtil.doQuery(connection, q, wikitty.getId(), ext.getName() + "." + fieldName + "[" + i + "/" + list.size() + "]", value); @@ -262,14 +265,16 @@ Object value = wikitty.getFieldAsObject(ext.getName(), fieldName); if (value != null) { String colName = getColName(type.getType()); - String q = String.format(conf.getProperty(QUERY_INSERT_WIKITTY_DATA), colName); - doQuery(connection, q, + String q = String.format(jdbcQuery.getProperty( + QUERY_INSERT_WIKITTY_DATA), colName); + WikittyJDBCUtil.doQuery(connection, q, wikitty.getId(), ext.getName() + "." + fieldName, value); } else { if (type.isNotNull()) { - throw new WikittyException(String.format("Field %s in extension %s can't be null", + throw new WikittyException(String.format( + "Field %s in extension %s can't be null", fieldName, ext.getName())); } } @@ -283,8 +288,9 @@ } // update extensions in wikitty object - String q = conf.getProperty(QUERY_UPDATE_WIKITTY_ADMIN); - doQuery(connection, q, newVersion, extensionList, null, wikitty.getId()); + String q = jdbcQuery.getProperty(QUERY_UPDATE_WIKITTY_ADMIN); + WikittyJDBCUtil.doQuery(connection, q, newVersion, extensionList, + null, wikitty.getId()); wikitty.setVersion(newVersion); wikitty.clearDirty(); @@ -301,10 +307,10 @@ @Override public boolean exists(WikittyTransaction transaction, String id) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { //select the data with the id "id" in the admin table - String q = String.format(conf.getProperty(QUERY_SELECT_WHERE), COL_ID, + String q = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), COL_ID, TABLE_WIKITTY_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(q); statement.setString(1, id); @@ -321,10 +327,10 @@ @Override public boolean isDeleted(WikittyTransaction transaction, String id) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { //select the data with the id "id" in the admin table - String q = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String q = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), COL_DELETION_DATE, TABLE_WIKITTY_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(q); statement.setString(1, id); @@ -347,10 +353,10 @@ @Override public Wikitty restore(WikittyTransaction transaction, String id, String... fqFieldName) throws WikittyException { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { //select the data with the id "id" in the admin table - String q = String.format(conf.getProperty( + String q = String.format(jdbcQuery.getProperty( QUERY_SELECT_WHERE_NOTDELETED), "*", TABLE_WIKITTY_ADMIN, COL_ID); PreparedStatement statement = connection.prepareStatement(q); statement.setString(1, id); @@ -360,7 +366,7 @@ String version = adminResultSet.getString(COL_VERSION); String extensionList = adminResultSet.getString(COL_EXTENSION); //select the data with the id "id" in the data table - String qdata = String.format(conf.getProperty(QUERY_SELECT_WHERE), + String qdata = String.format(jdbcQuery.getProperty(QUERY_SELECT_WHERE), "*", TABLE_WIKITTY_DATA, COL_ID); PreparedStatement sta = connection.prepareStatement(qdata); sta.setString(1, id); @@ -383,7 +389,7 @@ @Override public WikittyServiceEvent delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { WikittyServiceEvent result = new WikittyServiceEvent(this); Date now = new Date(); @@ -399,7 +405,8 @@ "Wikitty with id '%s' is already deleted", id)); } // addVersionUpdate delete date field - doQuery(connection, conf.getProperty(QUERY_DELETE_WIKITTY_ADMIN), id); + WikittyJDBCUtil.doQuery(connection, jdbcQuery.getProperty( + QUERY_DELETE_WIKITTY_ADMIN), id); result.addRemoveDate(id, now); } @@ -414,14 +421,14 @@ @Override public void scanWikitties(WikittyTransaction transaction, Scanner scanner) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { Statement statement = connection.createStatement(); // get all wikitties // fails with QUERY_SELECT ResultSet resultSet = statement.executeQuery( - String.format(conf.getProperty(QUERY_SELECT_NOTDELETED), + String.format(jdbcQuery.getProperty(QUERY_SELECT_NOTDELETED), COL_ID, TABLE_WIKITTY_ADMIN)); while (resultSet.next()) { @@ -558,9 +565,9 @@ @Override public WikittyServiceEvent clear(WikittyTransaction transaction) { - Connection connection = getConnection(conf); + Connection connection = WikittyJDBCUtil.getConnection(config); try { - doQuery(connection, conf.getProperty(QUERY_CLEAR_WIKITTY)); + WikittyJDBCUtil.doQuery(connection, jdbcQuery.getProperty(QUERY_CLEAR_WIKITTY)); WikittyServiceEvent result = new WikittyServiceEvent(this); result.addType(WikittyServiceEvent.WikittyEventType.CLEAR_WIKITTY); return result; Modified: trunk/wikitty-jdbc-impl/src/test/resources/META-INF/spring/wikitty-test.xml =================================================================== --- trunk/wikitty-jdbc-impl/src/test/resources/META-INF/spring/wikitty-test.xml 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-jdbc-impl/src/test/resources/META-INF/spring/wikitty-test.xml 2010-10-28 13:54:03 UTC (rev 455) @@ -31,8 +31,12 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - <bean name="wikittyService" class="org.nuiton.wikitty.jdbc.WikittyServiceJDBC"/> + <bean name="wikittyConfig" class="org.nuiton.wikitty.WikittyConfig"/> + <bean name="wikittyService" class="org.nuiton.wikitty.jdbc.WikittyServiceJDBC"> + <constructor-arg ref="wikittyConfig"/> + </bean> + <context:annotation-config/> <context:component-scan base-package="org.nuiton.wikitty"/> Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/WikittySearchEnginSolr.java 2010-10-28 13:54:03 UTC (rev 455) @@ -33,7 +33,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import org.apache.commons.logging.Log; @@ -70,6 +69,8 @@ import com.arjuna.ats.arjuna.state.OutputObjectState; import com.arjuna.ats.internal.arjuna.abstractrecords.LastResourceRecord; import java.io.File; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; /** * @@ -84,7 +85,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittySearchEnginSolr.class); - /** Solr data dir config option name. */ + /** Solr data dir, this name are used directly by SolR, don't change it. */ static final protected String SOLR_DATA_DIR_CONFIG = "solr.data.dir"; /** id field in solr */ @@ -477,14 +478,15 @@ /** JTA resource */ protected SolrResource solrResource; - /** - * Init wikitty search engin on solr embedded server. - * - * @param extensionStorage extension storage - */ - public WikittySearchEnginSolr(WikittyExtensionStorage extensionStorage) { - this(extensionStorage, null); - } + // FIXME REMOVE IT +// /** +// * Init wikitty search engin on solr embedded server. +// * +// * @param extensionStorage extension storage +// */ +// public WikittySearchEnginSolr(WikittyExtensionStorage extensionStorage) { +// this(extensionStorage, null); +// } /** * Init wikitty search engin on solr embedded server. @@ -492,11 +494,13 @@ * @param extensionStorage extension storage * @param properties properties (can be null) */ - public WikittySearchEnginSolr(WikittyExtensionStorage extensionStorage, Properties properties) { + public WikittySearchEnginSolr( + ApplicationConfig config, WikittyExtensionStorage extensionStorage) { // init system env solr.data.dir - if (properties != null) { - String solrDataDir = properties.getProperty(SOLR_DATA_DIR_CONFIG); + if (config != null) { + String solrDataDir = config.getOption( + WikittyConfig.Option.WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_DATA.getKey()); // make sure that dir exists if (solrDataDir != null) { File file = new File(solrDataDir); Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/AbstractTestSolr.java 2010-10-28 13:54:03 UTC (rev 455) @@ -25,12 +25,13 @@ package org.nuiton.wikitty.solr.test; import org.junit.Before; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyServiceEnhanced; public abstract class AbstractTestSolr { protected WikittyServiceEnhanced ws = - new WikittyServiceEnhanced(new WikittyServiceSolr()); + new WikittyServiceEnhanced(new WikittyServiceSolr(new WikittyConfig())); @Before public void deleteAll() throws Exception { Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java 2010-10-28 13:54:03 UTC (rev 455) @@ -25,6 +25,7 @@ package org.nuiton.wikitty.solr.test; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyServiceImpl; import org.nuiton.wikitty.WikittyServiceInMemory; import org.nuiton.wikitty.solr.WikittySearchEnginSolr; @@ -39,9 +40,9 @@ */ public class WikittyServiceSolr extends WikittyServiceImpl { - public WikittyServiceSolr() { + public WikittyServiceSolr(ApplicationConfig config) { extensionStorage = new WikittyServiceInMemory.WikittyExtensionStorageInMemory(); wikittyStorage = new WikittyServiceInMemory.WikittyStorageInMemory(); - searchEngin = new WikittySearchEnginSolr(extensionStorage); + searchEngin = new WikittySearchEnginSolr(config, extensionStorage); } } Modified: trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/LoginController.java =================================================================== --- trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/LoginController.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/LoginController.java 2010-10-28 13:54:03 UTC (rev 455) @@ -38,6 +38,7 @@ import org.apache.commons.lang.UnhandledException; import org.nuiton.util.ApplicationConfig; import org.nuiton.util.ArgumentsParserException; +import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.WikittyServiceCached; @@ -245,8 +246,9 @@ protected WikittyProxy createLocalProxy(Properties properties, String login, String password) { WikittyProxy proxy = new WikittyProxy(); try { - WikittyService ws = new WikittyServiceJDBC(properties); - ws = new WikittyServiceCached(ws); + WikittyConfig config = new WikittyConfig(properties); + WikittyService ws = new WikittyServiceJDBC(config); + ws = new WikittyServiceCached(config, ws); proxy.setWikittyService(ws); } catch (Exception eee) { return null; Modified: trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/WikittyZkService.java =================================================================== --- trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/WikittyZkService.java 2010-10-27 09:06:35 UTC (rev 454) +++ trunk/wikitty-ui-zk/src/main/java/org/nuiton/wikitty/ui/WikittyZkService.java 2010-10-28 13:54:03 UTC (rev 455) @@ -34,7 +34,7 @@ public WikittyZkService() throws IOException { WikittyZkConfig config = WikittyZkConfig.getInstance(); - instance = new WikittyServiceJDBC(config.getFlatOptions()); + instance = new WikittyServiceJDBC(config); } public WikittyService getWikittyService() {
participants (1)
-
bpoussin@users.nuiton.org