diff --git a/eu.alert-project.iccs.analysis/pom.xml b/eu.alert-project.iccs.analysis/pom.xml
new file mode 100644
index 0000000..b0bb904
--- /dev/null
+++ b/eu.alert-project.iccs.analysis/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ eu.alert-project.iccs.analysis
+ core
+ 0.0.1-SNAPSHOT
+ pom
+ eu.alert-project.iccs.analysis
+
+
\ No newline at end of file
diff --git a/eu.alert-project.iccs.analysis/py/.gitignore b/eu.alert-project.iccs.analysis/py/.gitignore
new file mode 100644
index 0000000..0300510
--- /dev/null
+++ b/eu.alert-project.iccs.analysis/py/.gitignore
@@ -0,0 +1,2 @@
+*.pyc
+config.py
\ No newline at end of file
diff --git a/eu.alert-project.iccs.analysis/py/config.py.template b/eu.alert-project.iccs.analysis/py/config.py.template
new file mode 100644
index 0000000..5fea08a
--- /dev/null
+++ b/eu.alert-project.iccs.analysis/py/config.py.template
@@ -0,0 +1,23 @@
+#The connection details of the stardom database
+alert_db_host="localhost"
+alert_db_port=8889
+alert_db_user="alert"
+alert_db_name="alert_dev"
+alert_db_password="1234"
+
+
+#The connection details of the cvsanaly database
+cvsanaly_db_host="localhost"
+cvsanaly_db_port=8889
+cvsanaly_db_user="alert"
+cvsanaly_db_name="cvsanaly_kde_solid"
+cvsanaly_db_password="1234"
+
+
+#The location containing the betweeness values
+io_betweenness_file="~/Betweenness.csv"
+
+#The directory where the results should be stored
+io_results_directory=~/tmp"
+
+#### Do not modify under this line
diff --git a/eu.alert-project.iccs.analysis/py/create_weka_correlation.py b/eu.alert-project.iccs.analysis/py/create_weka_correlation.py
new file mode 100644
index 0000000..873e63a
--- /dev/null
+++ b/eu.alert-project.iccs.analysis/py/create_weka_correlation.py
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+from datetime import date, datetime
+
+import MySQLdb
+import csv
+import re
+import time
+import config
+
+
+QRY_DROP_TABLE="DROP TABLE IF EXISTS `identity_csvid` ; " \
+ "CREATE TABLE `identity_csvid` ( " \
+ "`identity_id` INT NOT NULL, " \
+ "`user_id` INT NOT NULL, " \
+ "`name` TEXT NOT NULL, " \
+ "`email` TEXT NOT NULL) ENGINE = InnoDB;"
+
+QRY_SELECT_ALL_PEOPLE = "select id,name, email from people"
+
+QRY_SELECT_IDENTITY = """select distinct identity_id
+ from profile p
+ join identity_is_profile i on p.id=i.profile_id
+ where email=%s;"""
+
+QRY_INSERT_CSVID = """insert into identity_csvid VALUES(%s,%s,%s,%s) ;"""
+
+
+
+
+def date_distance(date1):
+ fmt = '%Y-%m-%d %H:%M:%S'
+ d1 = datetime.strptime('2012-01-01 17:31:22', fmt)
+ d2 = datetime.strptime(date1, fmt)
+ return (d2-d1).days
+
+def get_alert_connection():
+ return MySQLdb.connect (
+ host = config.alert_db_host,
+ port = config.alert_db_port,
+ user = config.alert_db_user,
+ passwd = config.alert_db_password,
+ db = config.alert_db_name)
+
+
+
+
+def people_mapping_init():
+
+
+ user_to_identity_dict={}
+
+ alert_conn = get_alert_connection()
+
+ cvsanaly_conn = MySQLdb.connect (
+ host = config.cvsanaly_db_host,
+ port = config.cvsanaly_db_port,
+ user = config.cvsanaly_db_user,
+ passwd = config.cvsanaly_db_password,
+ db = config.cvsanaly_db_name)
+
+
+ # Apparently this is a compound statement and
+ # we should close and reopen the cursor
+ alert_cursor=alert_conn.cursor ()
+ alert_cursor.execute (QRY_DROP_TABLE)
+ alert_cursor.close()
+
+ csv_cursor = cvsanaly_conn.cursor ()
+ all_cvsanaly_people = csv_cursor.execute (QRY_SELECT_ALL_PEOPLE)
+
+ counter = 0
+ for x in range(all_cvsanaly_people):
+ row=csv_cursor.fetchone ()
+ user_id=row[0]
+ name=row[1]
+ email = row[2]
+ repl=' '
+ email = re.sub(r"[-_\+\.@]", repl, email)
+ name = re.sub(r"[\']", repl, name)
+
+ print "Processing %s => %s " % (user_id,email,)
+
+ alert_cursor=alert_conn.cursor ()
+ alert_cursor.execute (QRY_SELECT_IDENTITY, (email,))
+ alert_row=alert_cursor.fetchone ()
+
+ if alert_row is None:
+ print '%s NOT FOUND!!! ' % email
+ continue
+ identity_id=alert_row[0]
+ print "Identity id %s found for %s " % (identity_id,email,)
+ alert_cursor.execute (QRY_INSERT_CSVID, (identity_id,user_id,name,email,))
+
+ user_to_identity_dict[user_id]=identity_id
+ alert_cursor.close ()
+
+ csv_cursor.close()
+ alert_conn.close()
+ cvsanaly_conn.close()
+
+ return user_to_identity_dict
+
+
+def get_metric(connection, query, identity_id):
+ print "Executing "+query
+ cursor = connection.cursor()
+ cursor.execute (
+ query,
+ (identity_id,)
+ )
+
+ ret = 0
+ row=cursor.fetchone ()
+ if row is not None:
+ ret =row[1]
+
+ cursor.close()
+
+ return ret
+
+def get_quantitative_metric(connection, identity_id , metric_name):
+
+ qry = """select m.id,quantity,m.identity_id,m.created_at
+ from %s as scm
+ inner join metric_quantitative as mq on scm.id=mq.id
+ inner join metric as m on scm.id=m.id
+ where m.identity_id=%s
+ limit 1;""" % (metric_name,"%s",)
+
+ return get_metric(connection,qry,identity_id)
+
+
+def get_temporal_metric(connection, identity_id , metric_name):
+ qry = """select m.id,temporal,identity_id,created_at
+ from %s as scm
+ inner join metric_temporal as mt on scm.id=mt.id
+ inner join metric as m on scm.id=m.id
+ where identity_id=%s
+ limit 1;""" % (metric_name,"%s",)
+ return date_distance(get_metric(connection,qry,metric_name,identity_id))
+
+
+if __name__ == '__main__':
+
+ metrics = {
+ "scm_activity_metric" :[1, "q"],
+ "its_activity_metric" :[1, "q"],
+ "mailing_list_activity_metric" :[1, "q"],
+ "scm_api_introduced_metric" :[1, "q"],
+ "scm_api_usage_count_metric" :[1, "q"],
+
+ "scm_temporal_metric" :[0, "t"],
+ "its_temporal_metric" :[0, "t"],
+ "mailing_list_temporal_metric" :[0, "t"],
+ }
+
+ # You propably shouldnt bother with what is under this line
+ #
+ # ---------------------------------------------------------
+ #
+
+
+
+ #create the file
+ output_file=config.io_results_file+"/%s.arff" % ("correlation-"+datetime.now().strftime("%Y%m%d%H%S"))
+ print "Creating output file %s" % output_file;
+
+ bugAWriter = open(output_file, 'wb')
+ bugAWriter.writelines(
+ """ % 1. Title: Bug Solution Dataset Numeric
+%
+% 2. Sources:
+%(a) Creator: ALERT Project
+%(b) Date: August, 2011
+%\n\n"""
+ )
+
+ bugAWriter.writelines("@RELATION bug\n")
+ bugAWriter.writelines("\n\n\n")
+ bugAWriter.writelines("@ATTRIBUTE identity_id NUMERIC\n")
+
+ # Go over the enabled metrics and create the heading
+ for metric_name, values in metrics.iteritems():
+
+ if values[0] >= 1:
+ bugAWriter.writelines("@ATTRIBUTE %s NUMERIC\n" % metric_name)
+
+
+
+ bugAWriter.writelines("@ATTRIBUTE betweeness NUMERIC\n")
+ bugAWriter.writelines("\n@DATA\n")
+
+
+
+ people_map_dict={}
+ people_map_dict = people_mapping_init()
+
+ alert_conn = get_alert_connection()
+ spamReader = csv.reader(open(config.io_betweenness_file, 'rb'),delimiter='\t', quotechar='|')
+
+ for row in spamReader:
+
+ identity_id=people_map_dict[int(row[0])]
+ btness=row[1]
+
+ #tdesc = "select m.id,quantity,m.identity_id,created_at from scm_activity_metric as scm inner join metric_quantitative as mq on scm.id=mq.id inner join metric as m on scm.id=m.id where m.identity_id='"+str(identity_id)+"' order by quantity desc limit 1;"
+
+ result =[]
+ result.append(identity_id)
+
+ for metric_name, values in metrics.iteritems():
+
+ if values[0] >= 1:
+
+ if values[1] == 'q':
+ result.append(get_quantitative_metric(alert_conn,identity_id,metric_name))
+ elif values[1] == 't':
+ result.append(get_temporal_metric(alert_conn,identity_id,metric_name))
+
+
+ result.append(btness)
+ bugAWriter.writelines(', '.join(str(x) for x in result)+"\n")
+
+
+ bugAWriter.close()
+ alert_conn.close ()
diff --git a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml
index 9a166ce..ba6c1ac 100644
--- a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml
+++ b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/pom.xml
@@ -13,6 +13,26 @@
+
+ org.springframework
+ spring-core
+
+
+
+ org.springframework
+ spring-context
+
+
+
+ org.springframework
+ spring-support
+
+
+
+ org.springframework
+ spring-jdbc
+
+
net.sf.jung
jung-api
@@ -42,6 +62,11 @@
jung-jai
+
+ mysql
+ mysql-connector-java
+
+
commons-io
commons-io
diff --git a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java
index 80b2c69..032a91b 100644
--- a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java
+++ b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/api/GraphHandler.java
@@ -76,6 +76,10 @@ public Graph create(File inputFile,File outputFile){
}
+ //correct authors
+
+
+
logger.trace("void main(args) Vertex Count: {} ", graph.getVertexCount());
@@ -83,6 +87,7 @@ public Graph create(File inputFile,File outputFile){
logger.trace("void main(args) Betweeness calculated");
+
fos = new FileOutputStream(outputFile);
osw = new OutputStreamWriter(fos, "UTF-8");
fw = new BufferedWriter(osw);
diff --git a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java
index 607129f..d7c828e 100644
--- a/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java
+++ b/eu.alert-project.iccs.graph/eu.alert-project.iccs.graph.kde/src/main/java/eu/alertproject/iccs/graph/kde/swing/GraphViewerController.java
@@ -247,6 +247,7 @@ public boolean evaluate(String s) {
}
}).transform(simpleGraph);
+
return simpleGraph;
}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml
index 61a2d73..8fb0021 100644
--- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.alert-connector/src/main/webapp/WEB-INF/ws-servlet.xml
@@ -174,20 +174,20 @@
-
+
-
+
-
+
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java
index be156fc..aba13c0 100644
--- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityAnalyzer.java
@@ -9,6 +9,8 @@
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+
/**
* User: fotis
* Date: 15/07/11
@@ -27,18 +29,27 @@ public void analyze(Identity identity, MailingListAction action) {
return;
}
- MailingListActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, MailingListActivityMetric.class);
+ List forIdentity = getMetricDao().getForIdentity(identity, MailingListActivityMetric.class);
+
+ MailingListActivityMetric metric = null;
+ if(forIdentity ==null || forIdentity.size() <=0){
- MailingListActivityMetric newMetric = new MailingListActivityMetric();
- newMetric.setCreatedAt(action.getDate());
- newMetric.setIdentity(identity);
- newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity());
+ metric = new MailingListActivityMetric();
+ metric.setQuantity(0);
+ metric.setIdentity(identity);
+ metric = (MailingListActivityMetric) getMetricDao().insert(metric);
+
+ }else{
+ metric = forIdentity.get(0);
+ }
- newMetric.increaseQuantity();
+ metric.setCreatedAt(action.getDate());
+ metric.setCreatedAt(action.getDate());
+ metric.increaseQuantity();
- newMetric = (MailingListActivityMetric) getMetricDao().insert(newMetric);
+ metric = (MailingListActivityMetric)getMetricDao().update(metric);
- logger.trace("void analyze() {} ", newMetric);
+ logger.trace("void analyze() {} ", metric);
}
}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java
new file mode 100644
index 0000000..e86d974
--- /dev/null
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.mailing/src/main/java/eu/alertproject/iccs/stardom/analyzers/mailing/constructor/MailingListActivityHistoryAnalyzer.java
@@ -0,0 +1,42 @@
+package eu.alertproject.iccs.stardom.analyzers.mailing.constructor;
+
+import eu.alertproject.iccs.stardom.analyzers.mailing.connector.MailingListAction;
+import eu.alertproject.iccs.stardom.domain.api.Identity;
+import eu.alertproject.iccs.stardom.domain.api.metrics.MailingListActivityMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * User: fotis
+ * Date: 15/07/11
+ * Time: 22:57
+ */
+
+public class MailingListActivityHistoryAnalyzer extends AbstractMailingListAnalyzer {
+
+ private Logger logger = LoggerFactory.getLogger(MailingListActivityHistoryAnalyzer.class);
+
+ @Override
+ @Transactional
+ public void analyze(Identity identity, MailingListAction action) {
+
+ if(identity == null ){
+ return;
+ }
+
+ MailingListActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, MailingListActivityMetric.class);
+
+ MailingListActivityMetric newMetric = new MailingListActivityMetric();
+ newMetric.setCreatedAt(action.getDate());
+ newMetric.setIdentity(identity);
+ newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity());
+
+ newMetric.increaseQuantity();
+
+ newMetric = (MailingListActivityMetric) getMetricDao().insert(newMetric);
+
+ logger.trace("void analyze() {} ", newMetric);
+
+ }
+}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java
index ba9cff1..56338e7 100644
--- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityAnalyzer.java
@@ -2,12 +2,15 @@
import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmAction;
import eu.alertproject.iccs.stardom.domain.api.Identity;
+import eu.alertproject.iccs.stardom.domain.api.metrics.ItsActivityMetric;
import eu.alertproject.iccs.stardom.domain.api.metrics.ScmActivityMetric;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+
/**
* User: fotis
* Date: 15/07/11
@@ -26,17 +29,26 @@ public void analyze(Identity identity, ScmAction action) {
return;
}
- ScmActivityMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmActivityMetric.class);
+ List forIdentity = getMetricDao().getForIdentity(identity, ScmActivityMetric.class);
+
+ ScmActivityMetric metric = null;
+ if(forIdentity ==null || forIdentity.size() <=0){
+
+ metric = new ScmActivityMetric();
+ metric.setQuantity(0);
+ metric.setIdentity(identity);
+ metric = (ScmActivityMetric) getMetricDao().insert(metric);
+
+ }else{
+ metric = forIdentity.get(0);
+ }
+
+ metric.setCreatedAt(action.getDate());
+ metric.increaseQuantity();
- logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate());
+ metric = (ScmActivityMetric)getMetricDao().update(metric);
- ScmActivityMetric newMetric = new ScmActivityMetric();
- newMetric.setCreatedAt(action.getDate());
- newMetric.setIdentity(identity);
- newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1);
- newMetric = (ScmActivityMetric) getMetricDao().insert(newMetric);
+ logger.trace("void analyze() {} ",metric);
- logger.trace("void analyze() {} = {} -> {} ",
- new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()});
}
}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java
new file mode 100644
index 0000000..bde2dbc
--- /dev/null
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmActivityHistoryAnalyzer.java
@@ -0,0 +1,41 @@
+package eu.alertproject.iccs.stardom.analyzers.scm.constructor;
+
+import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmAction;
+import eu.alertproject.iccs.stardom.domain.api.Identity;
+import eu.alertproject.iccs.stardom.domain.api.metrics.ScmActivityMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * User: fotis
+ * Date: 15/07/11
+ * Time: 22:57
+ */
+
+public class ScmActivityHistoryAnalyzer extends AbstractScmAnalyzer {
+
+ private Logger logger = LoggerFactory.getLogger(ScmActivityHistoryAnalyzer.class);
+
+ @Override
+ @Transactional
+ public void analyze(Identity identity, ScmAction action) {
+
+ if(identity == null ){
+ return;
+ }
+
+ ScmActivityMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmActivityMetric.class);
+
+ logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate());
+
+ ScmActivityMetric newMetric = new ScmActivityMetric();
+ newMetric.setCreatedAt(action.getDate());
+ newMetric.setIdentity(identity);
+ newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1);
+ newMetric = (ScmActivityMetric) getMetricDao().insert(newMetric);
+
+ logger.trace("void analyze() {} = {} -> {} ",
+ new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()});
+ }
+}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java
index fcd7bbc..9b5a72d 100644
--- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedAnalyzer.java
@@ -56,19 +56,27 @@ public void analyze(Identity identity, ScmAction action) {
if(byIdentityPathAndSignature == null ){
- ScmApiIntroducedMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmApiIntroducedMetric.class);
+ List sqmForIdenity = getMetricDao().getForIdentity(identity,ScmApiIntroducedMetric.class);
logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate());
- ScmApiIntroducedMetric newMetric = new ScmApiIntroducedMetric();
- newMetric.setCreatedAt(action.getDate());
- newMetric.setIdentity(identity);
- newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1);
- newMetric = (ScmApiIntroducedMetric) getMetricDao().insert(newMetric);
+ ScmApiIntroducedMetric metric = null;
+ if(sqmForIdenity ==null || sqmForIdenity.size() <= 0 ){
+ metric = new ScmApiIntroducedMetric();
+ metric.setIdentity(identity);
+ metric.setQuantity(0);
+ metric = (ScmApiIntroducedMetric) getMetricDao().insert(metric);
+ }else{
+ metric = sqmForIdenity.get(0);
+ }
- logger.trace("void analyze() {} = {} -> {} ",
- new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()});
+ metric.setCreatedAt(action.getDate());
+ metric.increaseQuantity();
+
+ metric = (ScmApiIntroducedMetric) getMetricDao().update(metric);
+
+ logger.trace("void analyze() {} ",metric);
PathSignatureHistory pathSignatureHistory = new PathSignatureHistory();
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java
new file mode 100644
index 0000000..84e3ac3
--- /dev/null
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.stardom.analyzers.scm/src/main/java/eu/alertproject/iccs/stardom/analyzers/scm/constructor/ScmApiIntroducedHistoryAnalyzer.java
@@ -0,0 +1,87 @@
+package eu.alertproject.iccs.stardom.analyzers.scm.constructor;
+
+import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmAction;
+import eu.alertproject.iccs.stardom.analyzers.scm.connector.ScmFile;
+import eu.alertproject.iccs.stardom.datastore.api.dao.PathSignatureHistoryDao;
+import eu.alertproject.iccs.stardom.domain.api.Identity;
+import eu.alertproject.iccs.stardom.domain.api.PathSignatureHistory;
+import eu.alertproject.iccs.stardom.domain.api.metrics.ScmApiIntroducedMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * User: fotis
+ * Date: 17/07/11
+ * Time: 14:07
+ */
+public class ScmApiIntroducedHistoryAnalyzer extends AbstractScmAnalyzer {
+
+ private Logger logger = LoggerFactory.getLogger(ScmApiIntroducedHistoryAnalyzer.class);
+
+ @Autowired
+ PathSignatureHistoryDao pathSignatureHistoryDao;
+
+ @Override
+ @Transactional
+ public void analyze(Identity identity, ScmAction action) {
+
+ if(identity ==null){
+ return;
+ }
+
+ List newFiles = new ArrayList();
+
+ //check if the api has been introduced before
+ List files = action.getFiles();
+
+ for(ScmFile sf: files){
+
+ String path = sf.getName();
+
+
+
+ List functions = sf.getFunctions();
+ for(String signature: functions) {
+
+ PathSignatureHistory byIdentityPathAndSignature = pathSignatureHistoryDao.findByIdentityPathAndSignature(
+ identity,
+ path,
+ signature);
+
+
+ if(byIdentityPathAndSignature == null ){
+
+ ScmApiIntroducedMetric sqm = getMetricDao().getMostRecentMetric(identity,ScmApiIntroducedMetric.class);
+
+ logger.trace("void analyze() Handling {} -> {} ",identity.getUuid(),action.getDate());
+
+ ScmApiIntroducedMetric newMetric = new ScmApiIntroducedMetric();
+ newMetric.setCreatedAt(action.getDate());
+ newMetric.setIdentity(identity);
+ newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity() + 1);
+ newMetric = (ScmApiIntroducedMetric) getMetricDao().insert(newMetric);
+
+
+ logger.trace("void analyze() {} = {} -> {} ",
+ new Object[]{identity.getUuid(),(sqm ==null ?0:sqm.getQuantity()),newMetric.getQuantity()});
+
+
+ PathSignatureHistory pathSignatureHistory = new PathSignatureHistory();
+ pathSignatureHistory.setIdentity(identity);
+ pathSignatureHistory.setPath(path);
+ pathSignatureHistory.setSignature(signature);
+
+ pathSignatureHistoryDao.insert(pathSignatureHistory);
+
+ }
+ }
+
+ }
+
+ }
+}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java
index 3f35cd9..e90dc58 100644
--- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityAnalyzer.java
@@ -35,18 +35,24 @@ public void analyze(Identity identity, ItsAction action) {
return;
}
- ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class);
+ ItsActivityMetric metric = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class);
+
+ //check if the metric exists
+ if( metric == null){
+ //create
+
+ metric = new ItsActivityMetric();
+ metric.setIdentity(identity);
+ metric.setQuantity(0);
+ metric = (ItsActivityMetric) getMetricDao().insert(metric);
- ItsActivityMetric newMetric = new ItsActivityMetric();
- newMetric.setCreatedAt(action.getDate());
- newMetric.setIdentity(identity);
- newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity());
+ }
- newMetric.increaseQuantity();
+ metric.increaseQuantity();
- newMetric = (ItsActivityMetric) getMetricDao().insert(newMetric);
+ getMetricDao().update(metric);
- logger.trace("void analyze() {} ",newMetric);
+ logger.trace("void analyze() {} ",metric);
}
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java
new file mode 100644
index 0000000..dc1a64c
--- /dev/null
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.analyzers/eu.alert-project.iccs.startdom.analyzers.its/src/main/java/eu/alertproject/iccs/stardom/analyzers/its/constructor/ItsActivityHistoryAnalyzer.java
@@ -0,0 +1,93 @@
+package eu.alertproject.iccs.stardom.analyzers.its.constructor;
+
+import eu.alertproject.iccs.stardom.analyzers.its.connector.DefaultItsAction;
+import eu.alertproject.iccs.stardom.analyzers.its.connector.DefaultItsCommentAction;
+import eu.alertproject.iccs.stardom.analyzers.its.connector.ItsAction;
+import eu.alertproject.iccs.stardom.domain.api.Identity;
+import eu.alertproject.iccs.stardom.domain.api.metrics.ItsActivityMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * User: fotis
+ * Date: 18/07/11
+ * Time: 09:37
+ */
+public class ItsActivityHistoryAnalyzer extends AbstractItsAnalyzer{
+
+ private Logger logger = LoggerFactory.getLogger(ItsActivityHistoryAnalyzer.class);
+
+
+ //Idenity here is null carefull
+ @Override
+ @Transactional
+ public void analyze(Identity identity, ItsAction action) {
+
+ if(identity == null ){
+ return;
+ }
+
+ ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class);
+
+ ItsActivityMetric newMetric = new ItsActivityMetric();
+ newMetric.setCreatedAt(action.getDate());
+ newMetric.setIdentity(identity);
+ newMetric.setQuantity(sqm == null ? 1 : sqm.getQuantity());
+
+ newMetric.increaseQuantity();
+
+ newMetric = (ItsActivityMetric) getMetricDao().insert(newMetric);
+
+ logger.trace("void analyze() {} ",newMetric);
+
+ }
+
+ private void handleItsAction(Identity identity, DefaultItsAction action){
+
+ ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class);
+
+ //check if the metric exists
+ if( sqm == null){
+ //create
+
+ sqm = new ItsActivityMetric();
+ sqm.setIdentity(identity);
+ sqm.setQuantity(0);
+ sqm = (ItsActivityMetric) getMetricDao().insert(sqm);
+
+ }
+
+ sqm.increaseQuantity();
+
+ getMetricDao().update(sqm);
+
+
+
+ }
+
+ private void handleItsCommentAction(Identity identity, DefaultItsCommentAction action){
+
+
+ ItsActivityMetric sqm = getMetricDao().getMostRecentMetric(identity, ItsActivityMetric.class);
+
+ //check if the metric exists
+ if( sqm == null){
+ //create
+
+ sqm = new ItsActivityMetric();
+ sqm.setIdentity(identity);
+ sqm.setQuantity(0);
+ sqm = (ItsActivityMetric) getMetricDao().insert(sqm);
+
+ }
+
+ sqm.increaseQuantity();
+
+ getMetricDao().update(sqm);
+
+ }
+
+}
+
+
diff --git a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java
index b203840..f0ed655 100644
--- a/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java
+++ b/eu.alert-project.iccs.stardom.core/eu.alert-project.iccs.stardom.datastore/src/main/java/eu/alertproject/iccs/stardom/datastore/api/dao/MetricDao.java
@@ -14,7 +14,7 @@
public interface MetricDao extends CommonDao{
public List getForIdentity(Identity identity);
- public List getForIdentity(Identity identity, Class aClass);
+ public List getForIdentity(Identity identity, Class aClass);
public T getMostRecentMetric(Identity identity, Class aClass);
diff --git a/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php b/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php
index 9826d0f..35dc34f 100644
--- a/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php
+++ b/test-environments/constructor/Symfony/src/Iccs/StardomBundle/Command/ScmCommand.php
@@ -195,13 +195,13 @@ private function postActiveMqPayload(\Stomp_Stomp $producer,$payload){
//echo $values.PHP_EOL;
$this->counter++;
- $producer->begin("tx1");
+// $producer->begin("tx1");
$producer->send(
"/topic/".$this->getContainer()->getParameter("stardom.stomp.scm.topic"),
$values);
- $producer->commit("tx1");
+// $producer->commit("tx1");
}