Java tutorial
/** * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. * * This library 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 library 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. */ package com.liferay.jira.metrics.util.graph; import com.liferay.jira.metrics.NoSuchJiraMetricException; import com.liferay.jira.metrics.model.JiraComponent; import com.liferay.jira.metrics.model.JiraDataRetrieve; import com.liferay.jira.metrics.model.JiraMetric; import com.liferay.jira.metrics.model.JiraPriority; import com.liferay.jira.metrics.model.JiraProject; import com.liferay.jira.metrics.model.JiraStatus; import com.liferay.jira.metrics.service.JiraDataRetrieveLocalServiceUtil; import com.liferay.jira.metrics.service.JiraMetricLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Cristina Gonzlez */ public class GraphData { public GraphData(List<JiraDataRetrieve> jiraDataRetrieves, JiraProject jiraProject, List<JiraStatus> jiraStatuses, List<JiraComponent> jiraComponents, List<JiraPriority> jiraPriorities) throws PortalException, SystemException { for (JiraDataRetrieve jiraDataRetrieve : jiraDataRetrieves) { Map<String, Integer> bugsByPriority = new HashMap<String, Integer>(); Date date = JiraDataRetrieveLocalServiceUtil.getDate(jiraDataRetrieve); for (JiraComponent jiraComponent : jiraComponents) { for (JiraStatus jiraStatus : jiraStatuses) { Integer value = bugsByPriority.get(""); if (value == null) { value = 0; } JiraMetric jiraMetric = JiraMetricLocalServiceUtil.getJiraMetric(jiraProject.getJiraProjectId(), jiraComponent.getJiraComponentId(), jiraStatus.getJiraStatusId(), -1, date); value += jiraMetric.getTotal(); bugsByPriority.put("priorityEmpty", value); } } for (JiraPriority jiraPriority : jiraPriorities) { for (JiraComponent jiraComponent : jiraComponents) { for (JiraStatus jiraStatus : jiraStatuses) { Integer value = bugsByPriority.get("priority" + jiraPriority.getValue()); if (value == null) { value = 0; } try { JiraMetric jiraMetric = JiraMetricLocalServiceUtil.getJiraMetric( jiraProject.getJiraProjectId(), jiraComponent.getJiraComponentId(), jiraStatus.getJiraStatusId(), jiraPriority.getJiraPriorityId(), date); value += jiraMetric.getTotal(); bugsByPriority.put("priority" + jiraPriority.getValue(), value); } catch (NoSuchJiraMetricException e) { _log.error("Can't find JiraMetric for JiraProject: " + jiraProject.getKey() + "JiraComponent " + jiraComponent.getName() + "Jira Status " + jiraStatus.getName() + "Jira Priority " + jiraPriority.getName(), e); } } } } for (String bugByPriority : bugsByPriority.keySet()) { List<Values> values = _data.get(date); if (values == null) { values = new ArrayList<Values>(); } if (!_series.contains(bugByPriority)) { _series.add(bugByPriority); } values.add(new Values(bugByPriority, bugsByPriority.get(bugByPriority))); _data.put(date, values); } } } public List<String> getGraphSeries() { return _series; } public String getGraphSeriesStyles() { if (_series != null) { StringBundler sb = new StringBundler(19); sb.append(StringPool.BLANK); for (int i = 0; i < _series.size(); i++) { String serie = _series.get(i); concatObjectOpener(sb, serie); concatObjectOpener(sb, "area"); concatQuotedAttribute(sb, "color", _BACKGROUND_COLORS[i]); concatCloseAndContinue(sb); concatObjectOpener(sb, "marker"); concatObjectOpener(sb, "fill"); concatQuotedAttribute(sb, "color", _BACKGROUND_COLORS[i]); concatCloseAndContinue(sb); concatObjectOpener(sb, "border"); concatQuotedAttribute(sb, "color", _LINES_COLORS[i]); concatCloseAndContinue(sb); concatObjectOpener(sb, "over"); concatObjectOpener(sb, "fill"); concatQuotedAttribute(sb, "color", _LINES_COLORS[i]); concatCloseAndContinue(sb); concatObjectOpener(sb, "border"); concatQuotedAttribute(sb, "color", _LINES_COLORS[i]); concatCloseAndContinue(sb); concatAttributeAndContinue(sb, "width", "12"); concatAttribute(sb, "height", "12"); concatCloseAndContinue(sb); concatCloseAndContinue(sb); concatObjectOpener(sb, "line"); concatQuotedAttribute(sb, "color", _LINES_COLORS[i]); sb.append(StringPool.CLOSE_CURLY_BRACE); sb.append(StringPool.CLOSE_CURLY_BRACE); if (i != (_series.size() - 1)) { sb.append(StringPool.COMMA); sb.append(StringPool.NEW_LINE); } } return sb.toString(); } return null; } public String getStringData() { if (_data != null) { StringBundler sb = new StringBundler(23); sb.append(StringPool.BLANK); for (Date date : _data.keySet()) { String stringDate = _formatter.format(date); if (!StringPool.BLANK.equals(sb.toString())) { sb.append(StringPool.COMMA); sb.append(StringPool.NEW_LINE); } sb.append(StringPool.OPEN_CURLY_BRACE); concatQuotedAttribute(sb, "date", stringDate); for (Values value : _data.get(date)) { sb.append(StringPool.COMMA); concatAttribute(sb, value.getSerieName(), String.valueOf(value.getValue())); } sb.append(StringPool.CLOSE_CURLY_BRACE); } return sb.toString(); } return null; } protected void concatAttribute(StringBundler sb, String attributeName, String attributeValue) { _concatAttribute(sb, attributeName, attributeValue, false); } protected void concatAttributeAndContinue(StringBundler sb, String attributeName, String attributeValue) { _concatAttribute(sb, attributeName, attributeValue, true); } protected void concatCloseAndContinue(StringBundler sb) { sb.append(StringPool.CLOSE_CURLY_BRACE); sb.append(StringPool.COMMA); } protected void concatObjectOpener(StringBundler sb, String objectName) { sb.append(objectName); sb.append(StringPool.COLON); sb.append(StringPool.OPEN_CURLY_BRACE); } protected void concatQuotedAttribute(StringBundler sb, String attributeName, String attributeValue) { sb.append(attributeName); sb.append(StringPool.COLON); sb.append(StringPool.QUOTE); sb.append(attributeValue); sb.append(StringPool.QUOTE); } private void _concatAttribute(StringBundler sb, String attributeName, String attributeValue, boolean comma) { sb.append(attributeName); sb.append(StringPool.COLON); sb.append(attributeValue); if (comma) { sb.append(StringPool.COMMA); } } private static final String[] _BACKGROUND_COLORS = new String[] { "#4572A7", "#AA4643", "#89A54E", "#80699B", "#3D96AE", "#DB843D", "#92A8CD", "#A47D7C", "#B5CA92" }; private static final String[] _LINES_COLORS = new String[] { "#365476", "#5F2624", "#4C5C2A", "#80699B", "#3D96AE", "#DB843D", "#92A8CD", "#A47D7C", "#B5CA92" }; private static DateFormat _formatter = new SimpleDateFormat("MM/dd/yyyy"); private static Log _log = LogFactoryUtil.getLog(GraphData.class); private Map<Date, List<Values>> _data = new HashMap<Date, List<Values>>(); private List<String> _series = new ArrayList<String>(); }