Author: mickw
Date: 2006-04-25 13:43:54 +0200 (Tue, 25 Apr 2006)
New Revision: 2794
Added:
trunk/src/java/no/schibstedsok/front/searchportal/configuration/SiteConfiguration.java
Log:
dawdle duckling
Added:
trunk/src/java/no/schibstedsok/front/searchportal/configuration/SiteConfiguration.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/configuration/SiteConfiguration.java
(rev 0)
+++
trunk/src/java/no/schibstedsok/front/searchportal/configuration/SiteConfiguration.java
2006-04-25 11:43:54 UTC (rev 2794)
@@ -0,0 +1,107 @@
+// Copyright (2006) Schibsted Søk AS
+package no.schibstedsok.front.searchportal.configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import no.schibstedsok.common.ioc.BaseContext;
+import
no.schibstedsok.front.searchportal.configuration.loader.PropertiesContext;
+
+import
no.schibstedsok.front.searchportal.configuration.loader.PropertiesLoader;
+import
no.schibstedsok.front.searchportal.configuration.loader.UrlResourceLoader;
+import no.schibstedsok.front.searchportal.site.Site;
+import no.schibstedsok.front.searchportal.site.SiteContext;
+import no.schibstedsok.front.searchportal.util.SearchConstants;
+import org.apache.log4j.Logger;
+
+
+/**
+ * SiteConfiguration properties.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Magnus Eklund</a>
+ * @version <tt>$Revision: 2720 $</tt>
+ */
+public final class SiteConfiguration {
+
+ public interface Context extends BaseContext, PropertiesContext,
SiteContext {
+ }
+
+ private final Properties properties = new Properties();
+
+ private final Context context;
+
+ private final PropertiesLoader propertyLoader;
+
+ private static final Map<Site, SiteConfiguration> INSTANCES = new
HashMap<Site,SiteConfiguration>();
+ private static final ReentrantReadWriteLock INSTANCES_LOCK = new
ReentrantReadWriteLock();
+
+ private static final Logger LOG =
Logger.getLogger(SiteConfiguration.class);
+
+
+
+ private SiteConfiguration(final Context cxt) {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Configuration()");
+ }
+
+ context = cxt;
+
+ propertyLoader =
context.newPropertiesLoader(SearchConstants.CONFIGURATION_FILE, properties);
+
+ INSTANCES_LOCK.writeLock().lock();
+ INSTANCES.put(context.getSite(), this);
+ INSTANCES_LOCK.writeLock().unlock();
+ }
+
+ public Properties getProperties() {
+ propertyLoader.abut();
+ return properties;
+ }
+
+ /** Find the correct instance handling this Site.
+ * We need to use a Context instead of the Site directly so we can handle
different styles of loading resources.
+ **/
+ public static SiteConfiguration valueOf(final Context cxt) {
+ final Site site = cxt.getSite();
+
+ INSTANCES_LOCK.readLock().lock();
+ SiteConfiguration instance = INSTANCES.get(site);
+ INSTANCES_LOCK.readLock().unlock();
+
+ if (instance == null) {
+ instance = new SiteConfiguration(cxt);
+ }
+ return instance;
+ }
+
+ /**
+ * Utility wrapper to the valueOf(Context).
+ * <b>Makes the presumption we will be using the UrlResourceLoader to load
the resource.</b>
+ */
+ public static SiteConfiguration valueOf(final Site site) {
+
+ // SiteConfiguration.Context for this site & UrlResourceLoader.
+ final SiteConfiguration stc = SiteConfiguration.valueOf(new
SiteConfiguration.Context() {
+ public Site getSite() {
+ return site;
+ }
+
+ public PropertiesLoader newPropertiesLoader(final String resource,
final Properties properties) {
+ return UrlResourceLoader.newPropertiesLoader(this, resource,
properties);
+ }
+ });
+ return stc;
+ }
+
+ public static boolean remove(final Site site){
+
+ try{
+ INSTANCES_LOCK.writeLock().lock();
+ return null != INSTANCES.remove(site);
+ }finally{
+ INSTANCES_LOCK.writeLock().unlock();
+ }
+ }
+}
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits