Java tutorial
/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale 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 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ package org.squale.squaleweb.gwt.motionchart.server; import java.text.DateFormat; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.commons.exception.JrafEnterpriseException; import org.squale.squalecommon.enterpriselayer.facade.quality.FactorResultFacade; import org.squale.squalecommon.enterpriselayer.facade.quality.QualityResultFacade; import org.squale.squalecommon.enterpriselayer.facade.quality.FactorResultFacade.MotionChartApplicationFactorData; import org.squale.squalecommon.enterpriselayer.facade.quality.QualityResultFacade.MotionChartApplicationMetricData; import org.squale.squaleweb.applicationlayer.formbean.LogonBean; import org.squale.squaleweb.applicationlayer.formbean.component.ApplicationForm; import org.squale.squaleweb.gwt.motionchart.client.DataService; import org.squale.squaleweb.gwt.motionchart.client.data.Application; import org.squale.squaleweb.gwt.motionchart.client.data.AuditValues; import org.squale.squaleweb.gwt.motionchart.client.data.MotionChartData; import org.squale.squaleweb.resources.WebMessages; import org.squale.welcom.struts.util.WConstants; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * The server side implementation of the RPC service that provides data to the motion chart. * * @author Fabrice BELLINGARD */ public class DataServiceImpl extends RemoteServiceServlet implements DataService { private static final long serialVersionUID = -8491108470852437054L; /** * Logger */ private static Log log = LogFactory.getLog(DataServiceImpl.class); public MotionChartData getData() { MotionChartData data = new MotionChartData(); try { // let's find the factors that exist in the database List<String> factorsList = FactorResultFacade.findFactorNames(); for (String factorDatabaseName : factorsList) { String factorName = WebMessages.getString(getThreadLocalRequest(), "rule." + factorDatabaseName); data.addFactor(factorDatabaseName, factorName); } // lets' now retrieve the data that is needed for the Motion Chart for (ApplicationForm app : findApplicationsForUser()) { Application applicationData = data.createApplication(app.getApplicationName()); // Metriques MotionChartApplicationMetricData metricsAppData = QualityResultFacade .findMetricsForMotionChart(app.getId()); for (Iterator<Object[]> iterator = metricsAppData.iterator(); iterator.hasNext();) { Object[] metricData = (Object[]) iterator.next(); AuditValues audit = applicationData.getAudit(metricsAppData.getAuditId(metricData), metricsAppData.getAuditDate(metricData)); if (metricsAppData.getMetricName(metricData).equals("numberOfCodeLines")) { audit.addLinesOfCode(metricsAppData.getMetricValue(metricData)); } else { // this is sumVg for the moment audit.addVg(metricsAppData.getMetricValue(metricData)); } } // Factors MotionChartApplicationFactorData factorsAppData = FactorResultFacade .findFactorsForMotionChart(app.getId()); for (Iterator<Object[]> iterator = factorsAppData.iterator(); iterator.hasNext();) { Object[] factorData = (Object[]) iterator.next(); AuditValues audit = applicationData.getAudit(factorsAppData.getAuditId(factorData)); audit.addFactorValue(factorsAppData.getFactorName(factorData), factorsAppData.getFactorValue(factorData)); } } } catch (JrafEnterpriseException e) { log.warn("Error while generating data needed for the Motion Chart:" + e.getMessage(), e); } // just for debug purposes printMotionChartDataInLog(data); return data; } /** * Finds the application that the user can see * * @return the list of applications */ @SuppressWarnings("unchecked") private List<ApplicationForm> findApplicationsForUser() { HttpSession httpSession = getThreadLocalRequest().getSession(); LogonBean userLogonBean = (LogonBean) httpSession.getAttribute(WConstants.USER_KEY); List<ApplicationForm> apps = userLogonBean.getApplicationsList(); return apps; } /** * Just for debugging purposes * * @param data the data generated for the Motion Chart */ private void printMotionChartDataInLog(MotionChartData data) { if (log.isDebugEnabled()) { log.debug("============================================================="); Collection<Application> computedApps = data.getApplications(); for (Application application : computedApps) { log.debug(application.getName()); Collection<AuditValues> audits = application.getAuditValues(); for (AuditValues auditValues : audits) { log.debug("\t" + DateFormat.getInstance().format(auditValues.getDate())); log.debug("\t\tLOC : " + auditValues.getLinesOfCode()); log.debug("\t\tvG : " + auditValues.getComplexity()); } } log.debug("============================================================="); } } }