[jboss-svn-commits] JBL Code SVN: r5106 - in labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status: . common service service/impl

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 14 17:51:01 EDT 2006


Author: wrzep
Date: 2006-07-14 17:50:51 -0400 (Fri, 14 Jul 2006)
New Revision: 5106

Added:
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java
Removed:
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java
Modified:
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java
Log:
JBLAB-689
Pawel


Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -30,7 +30,7 @@
 import org.jboss.forge.status.exceptions.ScoresException;
 import org.jboss.forge.status.service.ScoresManager;
 import org.jboss.forge.status.service.ScoresRepositoryManager;
-import org.jboss.forge.status.service.impl.AsyncScoresManager;
+import org.jboss.forge.status.service.impl.ServiceScoresManager;
 import org.jboss.forge.status.service.impl.ShotokuScoresRepositoryManager;
 import org.jboss.forge.status.service.impl.protocol.ServiceConfImpl;
 import org.jboss.forge.status.service.protocol.ServiceConf;
@@ -86,10 +86,10 @@
 			ServiceConf serviceConf = new ServiceConfImpl(serviceNode);
 			
 			ScoresRepositoryManager repositoryManager =
-										new ShotokuScoresRepositoryManager();
+										new ShotokuScoresRepositoryManager(portalName);
 										// will be replaced by DBScoresRepositoryManager :]
 			
-			ScoresManager scoresManager = new AsyncScoresManager(portalName, serviceConf,
+			ScoresManager scoresManager = new ServiceScoresManager(portalName, serviceConf,
 																		repositoryManager);
 			
 			status = new Status(portalName, statusRoot, pluginsRoot,

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/common/Constants.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -5,14 +5,17 @@
  */
 public class Constants {
 	
-	public static final int MAX_ATTEMPTS 					= 10;
+	public static final int MAX_ATTEMPTS 				= 10;
 	
-	public static final String STATUS_LOCAL_SERVICE	 		= "ScoresService/local"; 
-															//"java:/ScoresService/local";
-	public static final String STATUS_REMOTE_SERVICE 		= "ScoresService/remote";
-															//"java:/ScoresService/remote";
+	public static final String STATUS_LOCAL_SERVICE	= "ScoresService/local"; 
+														  //"java:/ScoresService/local";
+	public static final String STATUS_REMOTE_SERVICE 	= "ScoresService/remote";
+											  			  //"java:/ScoresService/remote";
+
+	public static final String DB_SERVICE 			= "ScoresDBService/local";
 	
-	public static final long CACHE_INTERVAL 					= 5*60*1000; /* milliseconds */
+	public static final long CACHE_INTERVAL 			= 5*60*1000; /* milliseconds */
+
 	
 	/**
 	 * This class cannot be instatiated.

Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/DBService.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,31 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.status.service;
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+public interface DBService {
+		
+	public void save();
+}
\ No newline at end of file

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/ScoresRepositoryManager.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -35,9 +35,9 @@
 
 public interface ScoresRepositoryManager {
 	
-	public void save(PluginsValues pluginsValues, String portalName)
+	public void save(PluginsValues pluginsValues)
 										throws ScoresSaveException;
 	
-	public PluginsValues get(String portalName, Calendar cal)
+	public PluginsValues get(Calendar cal)
 										throws GetScoresException;
 }

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/AsyncScoresManager.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -1,235 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.jboss.forge.status.service.impl;
-
-import java.util.Calendar;
-import java.util.List;
-import java.util.Properties;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
-
-import org.jboss.forge.common.projects.Projects;
-import org.jboss.forge.status.exceptions.GetScoresException;
-import org.jboss.forge.status.exceptions.ScoresException;
-import org.jboss.forge.status.exceptions.ScoresSaveException;
-import org.jboss.forge.status.service.ScoresManager;
-import org.jboss.forge.status.service.ScoresRepositoryManager;
-import org.jboss.forge.status.service.ScoresService;
-import org.jboss.forge.status.service.ScoresServiceLocal;
-import org.jboss.forge.status.service.ScoresServiceRemote;
-import org.jboss.forge.status.service.protocol.PluginConf;
-import org.jboss.forge.status.service.protocol.PluginsValues;
-import org.jboss.forge.status.service.protocol.ServiceConf;
-import org.jboss.forge.status.common.Constants;
-import org.jboss.logging.Logger;
-
-/**
-* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
-*/
-
-public class AsyncScoresManager implements ScoresManager {
-	
-	private Properties properties;
-	private boolean isRemote;
-	private Logger log;
-	
-	ScoresService service;
-	
-	public AsyncScoresManager(String portalName, ServiceConf serviceConf,
-									ScoresRepositoryManager repositoryManager)
-													throws ScoresException {
-		
-		
-		properties = serviceConf.getProperties();
-		isRemote = serviceConf.isRemote();
-		
-		log = Logger.getLogger(this.getClass());
-		
-		try {
-			service = getService();
-			service.init(portalName, this, repositoryManager);
-		} catch (NamingException e) {
-			throw new ScoresException(e);
-		}
-		
-	}
-	
-	public void saveAsync(final Projects projects,
-			final List<PluginConf> pluginsConf) {
-		
-		new Thread() {
-			
-			public void run() {
-				saveAsyncOnce(projects, pluginsConf);
-			}
-			
-		}.start();
-		
-	}
-	
-	private synchronized void saveAsyncOnce(Projects projects,
-										List<PluginConf> pluginsConf) {
-		try {
-			log.info("Saving scores asynchronously...");
-			save(projects, pluginsConf);
-			log.info("Finished async save.");
-		} catch (ScoresSaveException e) {
-			log.warn("Async saving scores failed.");
-		}
-	}
-
-	public void save(Projects projects,
-										List<PluginConf> pluginsConf)
-										throws ScoresSaveException {
-
-		service.save(projects, pluginsConf);	
-	}
-	
-	
-	public boolean hasScores(Calendar cal) throws NamingException {
-		
-		return service.hasPluginsValues(cal);
-	}
-	
-	
-	public PluginsValues getScores(Calendar cal)
-										throws GetScoresException {
-
-		PluginsValues pluginsValues = null;
-
-		try {
-			pluginsValues = service.getPluginsValues(cal);
-		} catch (Exception e) {
-			throw new GetScoresException(e);
-		}
-
-		if (pluginsValues == null) {
-			throw new GetScoresException();
-		}
-
-		return pluginsValues;
-	}
-	
-	
-	public PluginsValues getLatestScores()
-									throws GetScoresException {
-		
-		Calendar cal = Calendar.getInstance();
-		int attempts = 0;
-		
-		for(;;) {
-			
-			System.out.println("Trying " + cal.getTime().toString());
-			
-			boolean hasScores;
-			
-			try {
-				hasScores = hasScores(cal);
-			} catch (NamingException e) {
-				throw new GetScoresException(e);
-			}
-			
-			if (hasScores) {
-				return getScores(cal);
-			}
-			
-			if ((++attempts) == Constants.MAX_ATTEMPTS) {
-				throw new GetScoresException(
-						"Can not find any recently saved scores. " +
-						"Gave up after " + attempts + " attempts.");
-			}
-			
-			cal.add(Calendar.DAY_OF_MONTH, -1);
-		}
-	}
-
-
-	/**
-	 * For the specified plugin returns historical project score
-	 * from the given <code>date</code> in the past.
-	 * 
-	 * Notice that only year, month and day matter in passed dates.
-	 * 
-	 * @return project score from the given date for specified plugin
-	 * @throws GetScoresException
-	 */
-	public long getValue(String pluginId, String projectId,
-											Calendar cal)
-			throws GetScoresException {
-		
-		PluginsValues pluginsValues = getScores(cal);
-	    
-		return pluginsValues.getPluginValue(pluginId, projectId);
-	}
-
-	public long getValue(String id, String projectId,
-			Calendar start, Calendar end) throws GetScoresException {
-		
-		long value;
-		Calendar cal = start;
-		
-		for (;;) {
-			
-			if (cal.after(end)) {
-				throw new GetScoresException();
-			}
-			
-			try {
-				value = getValue(id, projectId, cal);
-				return value;
-			} catch (GetScoresException e) {
-				// try next
-				cal.add(Calendar.DAY_OF_MONTH, 1);
-			}	
-		}
-	}
-	
-	private ScoresService getService() throws NamingException {
-		
-		Context context = null;
-		if (isRemote) {
-			context = new InitialContext(properties);
-		} else {
-			context = new InitialContext();
-		}
-			
-		//	Perform look up using JNDI name of ejb object
-		String serviceBinding =
-			(isRemote ? Constants.STATUS_REMOTE_SERVICE :
-						Constants.STATUS_LOCAL_SERVICE);
-		
-		Object ref = context.lookup(serviceBinding);
-		
-		// Narrow the reference of the object returned by lookup() method
-		ScoresService service = 
-			(ScoresService) PortableRemoteObject.narrow( ref, 
-									(isRemote ? ScoresServiceRemote.class :
-												ScoresServiceLocal.class));
-		
-		return service;
-	}
-	
-}

Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBScoresRepositoryManager.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.status.service.impl;
+
+import java.util.Calendar;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
+
+import org.jboss.forge.status.common.Constants;
+import org.jboss.forge.status.exceptions.GetScoresException;
+import org.jboss.forge.status.exceptions.ScoresSaveException;
+import org.jboss.forge.status.service.DBService;
+import org.jboss.forge.status.service.ScoresRepositoryManager;
+import org.jboss.forge.status.service.protocol.PluginsValues;
+
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+
+public class DBScoresRepositoryManager 
+									implements ScoresRepositoryManager {
+	
+
+	private String portalName;
+	
+	private DBService service;
+	
+	public DBScoresRepositoryManager(String portalName)
+												throws NamingException {
+		
+		this.portalName = portalName;
+		
+		service = getService();
+	};
+	
+	public void save(PluginsValues pluginsValues) throws ScoresSaveException {
+	
+		service.save();
+	}
+
+	public PluginsValues get(Calendar cal) throws GetScoresException {
+		
+		return null;
+	}
+
+	private DBService getService() throws NamingException {
+			
+		Context context = new InitialContext();
+		
+		//	Perform look up using JNDI name of ejb object
+		Object ref = context.lookup(Constants.DB_SERVICE);
+		
+		// Narrow the reference of the object returned by lookup() method
+		DBService service = 
+			(DBService) PortableRemoteObject.narrow( ref, DBService.class);
+		
+		return service;
+	}
+}

Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/DBServiceImpl.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.status.service.impl;
+
+import javax.ejb.Local;
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.annotation.ejb.LocalBinding;
+
+import org.jboss.forge.status.common.Constants;
+import org.jboss.forge.status.service.DBService;
+
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+
+ at Stateful
+ at Local(DBService.class)
+ at LocalBinding(jndiBinding=Constants.DB_SERVICE)
+public class DBServiceImpl implements DBService {
+
+	@PersistenceContext (unitName="scores")
+    protected EntityManager em;
+	
+	public void save() {
+		
+		ScoresEntity se = new ScoresEntity();
+		em.persist(se);
+		System.out.println("entity saved");
+	}
+	
+	
+}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ScoresServiceImpl.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -28,9 +28,11 @@
 import javax.ejb.Local;
 import javax.ejb.Remote;
 import javax.ejb.Stateful;
+import javax.naming.NamingException;
 
 import org.jboss.annotation.ejb.LocalBinding;
 import org.jboss.annotation.ejb.RemoteBinding;
+
 import org.jboss.forge.common.projects.Projects;
 
 import org.jboss.forge.status.common.Constants;
@@ -65,6 +67,7 @@
 	
 	private ScoresManager scoresManager;
 	private ScoresRepositoryManager repositoryManager;
+
 	
 	public void init(String portalName, ScoresManager scoresManager,
 								ScoresRepositoryManager repositoryManager) {
@@ -85,10 +88,8 @@
 	 * @return true iff saving was successful
 	 */
 	public void save(Projects projects, List<PluginConf> pluginsConf)
-												throws ScoresSaveException {
+												throws ScoresSaveException {	
 		
-		System.out.println("log: " + log + " portalName: " + portalName);
-		
 		log.info("Getting plugins...");
 		
 		// Get plugins from conf
@@ -101,7 +102,21 @@
 		PluginsValuesImpl pluginsValues = new PluginsValuesImpl(projects, plugins);
 		
 		log.info("Saving...");
-		repositoryManager.save(pluginsValues, portalName);
+		
+		repositoryManager.save(pluginsValues);
+		
+		// <DEBUG>
+		
+		ScoresRepositoryManager dbrm;
+		try {
+			dbrm = new DBScoresRepositoryManager(portalName);
+			dbrm.save(pluginsValues);
+		} catch (NamingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		// </DEBUG>
 	}
 	
 	
@@ -117,7 +132,7 @@
 	public PluginsValues getPluginsValues(Calendar cal)
 									throws GetScoresException {
 		
-		return repositoryManager.get(portalName, cal);
+		return repositoryManager.get(cal);
 	}
 	
 	public boolean hasPluginsValues(Calendar cal) {

Added: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ServiceScoresManager.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -0,0 +1,234 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.status.service.impl;
+
+import java.util.Calendar;
+import java.util.List;
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
+
+import org.jboss.forge.common.projects.Projects;
+import org.jboss.forge.status.exceptions.GetScoresException;
+import org.jboss.forge.status.exceptions.ScoresException;
+import org.jboss.forge.status.exceptions.ScoresSaveException;
+import org.jboss.forge.status.service.ScoresManager;
+import org.jboss.forge.status.service.ScoresRepositoryManager;
+import org.jboss.forge.status.service.ScoresService;
+import org.jboss.forge.status.service.ScoresServiceLocal;
+import org.jboss.forge.status.service.ScoresServiceRemote;
+import org.jboss.forge.status.service.protocol.PluginConf;
+import org.jboss.forge.status.service.protocol.PluginsValues;
+import org.jboss.forge.status.service.protocol.ServiceConf;
+import org.jboss.forge.status.common.Constants;
+import org.jboss.logging.Logger;
+
+/**
+* @author Pawel Wrzeszcz (pawel.wrzeszcz [at] gmail.com)
+*/
+
+public class ServiceScoresManager implements ScoresManager {
+	
+	private Properties properties;
+	private boolean isRemote;
+	private Logger log;
+	
+	ScoresService service;
+	
+	public ServiceScoresManager(String portalName, ServiceConf serviceConf,
+									ScoresRepositoryManager repositoryManager)
+													throws ScoresException {
+		
+		properties = serviceConf.getProperties();
+		isRemote = serviceConf.isRemote();
+		
+		log = Logger.getLogger(this.getClass());
+		
+		try {
+			service = getService();
+			service.init(portalName, this, repositoryManager);
+		} catch (NamingException e) {
+			throw new ScoresException(e);
+		}
+		
+	}
+	
+	public void saveAsync(final Projects projects,
+			final List<PluginConf> pluginsConf) {
+		
+		new Thread() {
+			
+			public void run() {
+				saveAsyncOnce(projects, pluginsConf);
+			}
+			
+		}.start();
+		
+	}
+	
+	private synchronized void saveAsyncOnce(Projects projects,
+										List<PluginConf> pluginsConf) {
+		try {
+			log.info("Saving scores asynchronously...");
+			save(projects, pluginsConf);
+			log.info("Finished async save.");
+		} catch (ScoresSaveException e) {
+			log.warn("Async saving scores failed.");
+		}
+	}
+
+	public void save(Projects projects,
+										List<PluginConf> pluginsConf)
+										throws ScoresSaveException {
+
+		service.save(projects, pluginsConf);		
+	}
+	
+	
+	public boolean hasScores(Calendar cal) throws NamingException {
+		
+		return service.hasPluginsValues(cal);
+	}
+	
+	
+	public PluginsValues getScores(Calendar cal)
+										throws GetScoresException {
+
+		PluginsValues pluginsValues = null;
+
+		try {
+			pluginsValues = service.getPluginsValues(cal);
+		} catch (Exception e) {
+			throw new GetScoresException(e);
+		}
+
+		if (pluginsValues == null) {
+			throw new GetScoresException();
+		}
+
+		return pluginsValues;
+	}
+	
+	
+	public PluginsValues getLatestScores()
+									throws GetScoresException {
+		
+		Calendar cal = Calendar.getInstance();
+		int attempts = 0;
+		
+		for(;;) {
+			
+			System.out.println("Trying " + cal.getTime().toString());
+			
+			boolean hasScores;
+			
+			try {
+				hasScores = hasScores(cal);
+			} catch (NamingException e) {
+				throw new GetScoresException(e);
+			}
+			
+			if (hasScores) {
+				return getScores(cal);
+			}
+			
+			if ((++attempts) == Constants.MAX_ATTEMPTS) {
+				throw new GetScoresException(
+						"Can not find any recently saved scores. " +
+						"Gave up after " + attempts + " attempts.");
+			}
+			
+			cal.add(Calendar.DAY_OF_MONTH, -1);
+		}
+	}
+
+
+	/**
+	 * For the specified plugin returns historical project score
+	 * from the given <code>date</code> in the past.
+	 * 
+	 * Notice that only year, month and day matter in passed dates.
+	 * 
+	 * @return project score from the given date for specified plugin
+	 * @throws GetScoresException
+	 */
+	public long getValue(String pluginId, String projectId,
+											Calendar cal)
+			throws GetScoresException {
+		
+		PluginsValues pluginsValues = getScores(cal);
+	    
+		return pluginsValues.getPluginValue(pluginId, projectId);
+	}
+
+	public long getValue(String id, String projectId,
+			Calendar start, Calendar end) throws GetScoresException {
+		
+		long value;
+		Calendar cal = start;
+		
+		for (;;) {
+			
+			if (cal.after(end)) {
+				throw new GetScoresException();
+			}
+			
+			try {
+				value = getValue(id, projectId, cal);
+				return value;
+			} catch (GetScoresException e) {
+				// try next
+				cal.add(Calendar.DAY_OF_MONTH, 1);
+			}	
+		}
+	}
+	
+	private ScoresService getService() throws NamingException {
+		
+		Context context = null;
+		if (isRemote) {
+			context = new InitialContext(properties);
+		} else {
+			context = new InitialContext();
+		}
+			
+		//	Perform look up using JNDI name of ejb object
+		String serviceBinding =
+			(isRemote ? Constants.STATUS_REMOTE_SERVICE :
+						Constants.STATUS_LOCAL_SERVICE);
+		
+		Object ref = context.lookup(serviceBinding);
+		
+		// Narrow the reference of the object returned by lookup() method
+		ScoresService service = 
+			(ScoresService) PortableRemoteObject.narrow( ref, 
+									(isRemote ? ScoresServiceRemote.class :
+												ScoresServiceLocal.class));
+		
+		return service;
+	}
+	
+}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java	2006-07-14 21:41:46 UTC (rev 5105)
+++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/service/impl/ShotokuScoresRepositoryManager.java	2006-07-14 21:50:51 UTC (rev 5106)
@@ -32,9 +32,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
 import org.jboss.forge.status.common.Locations;
 import org.jboss.forge.status.exceptions.GetScoresException;
 import org.jboss.forge.status.exceptions.ScoresSaveException;
@@ -60,16 +57,18 @@
 	
 	private Map<String,PluginsValues> values
 										= new HashMap<String,PluginsValues>();
+
+	private String portalName;
 	
 	@Inject
 	private ContentManager cm;
 	
-	@PersistenceContext (unitName="scores")
-    protected EntityManager em;
+	public ShotokuScoresRepositoryManager(String portalName) {
+		
+		this.portalName = portalName;
+	};
 	
-	public ShotokuScoresRepositoryManager() {};
-	
-	public void save(PluginsValues pluginsValues, String portalName)
+	public void save(PluginsValues pluginsValues)
 										throws ScoresSaveException {
 		
 		// Get directory where we store historical scores
@@ -103,7 +102,7 @@
 		log.info("Saved in DB");*/
 	}
 
-	public PluginsValues get(String portalName, Calendar cal) throws GetScoresException {
+	public PluginsValues get(Calendar cal) throws GetScoresException {
 		
 		String key = getNodeName(cal);
 		log.info("Returning plugins values (" + key + ") ...");




More information about the jboss-svn-commits mailing list