package br.uff.ic.gems.peixeespadacliente.model.agent; import br.uff.ic.oceano.core.exception.ServiceException; import br.uff.ic.oceano.core.factory.ObjectFactory; import br.uff.ic.oceano.core.model.MetricQualityAttribute; import br.uff.ic.oceano.core.model.QualityAttribute; import br.uff.ic.oceano.core.service.QualityAttributeService; import java.util.ArrayList; import java.util.List; import translation.Translate; /** * * @author Heliomar */ public class MeterAgent extends PeixeEspadaAgent { protected QualityAttributeService qualityAttributeService = ObjectFactory.getObjectWithoutDataBaseDependencies(QualityAttributeService.class); @Override protected void plan() { throw new UnsupportedOperationException("Not supported yet."); } @Override protected void planTesting() { throw new UnsupportedOperationException("Not supported yet."); } public void mensureQualityAttribute(QualityAttribute originalQualityAttribute) { } public void calculeteFirstQualityAttributeValue(LocalManagerAgent agentPeixeEspada) throws ServiceException { try { Translate translate = Translate.getTranslate(); qualityAttributeService.calculateValue(agentPeixeEspada.getDefaultRevision(), agentPeixeEspada.getOrchestratorAgent().getQualityAttribute()); // copy values from calculated quality attribute to next normalizations copyQualityAttribute(agentPeixeEspada.getOrchestratorAgent().getQualityAttribute(), agentPeixeEspada.getFirstQualityAttribute()); copyQualityAttribute(agentPeixeEspada.getOrchestratorAgent().getQualityAttribute(), agentPeixeEspada.getCurrentQualityWithoutNormalize()); agentPeixeEspada.appendMessage(translate.firstMeasurement()); printQualityAttribute(agentPeixeEspada, agentPeixeEspada.getFirstQualityAttribute()); agentPeixeEspada.appendMessage(translate.normalizedValue()); getNormalizedQualitiAttribute(agentPeixeEspada.getFirstQualityAttribute(), agentPeixeEspada.getOrchestratorAgent().getQualityAttribute()); agentPeixeEspada.setCurrentQualityAttributeValue(agentPeixeEspada.getOrchestratorAgent().getQualityAttribute().getCurrentValue()); } catch (Exception ex) { throw new ServiceException(ex); } } /** * * Copy the values from qualityAttributeOriginal to qualityAttributeResulting * * @param qualityAttributeOriginal * @param qualityAttributeResulting * */ private void copyQualityAttribute(QualityAttribute qualityAttributeOriginal, QualityAttribute qualityAttributeResulting) { qualityAttributeResulting.setDescricao(qualityAttributeOriginal.getDescricao()); qualityAttributeResulting.setName(qualityAttributeOriginal.getName()); qualityAttributeResulting.setCurrentValue(qualityAttributeOriginal.getCurrentValue()); List<MetricQualityAttribute> metricQualityAttributes = new ArrayList<MetricQualityAttribute>(qualityAttributeOriginal.getMetricQualityAttributes().size()); for (MetricQualityAttribute metricQualityAttribute : qualityAttributeOriginal.getMetricQualityAttributes()) { MetricQualityAttribute metricQuali = new MetricQualityAttribute(); metricQuali.setFactor(metricQualityAttribute.getFactor()); metricQuali.setMetricValue(metricQualityAttribute.getMetricValue()); metricQuali.setMetric(metricQualityAttribute.getMetric()); metricQualityAttributes.add(metricQuali); } qualityAttributeResulting.setMetricQualityAttributes(metricQualityAttributes); } public void calculateNormalizedQualityAttributeValueSettingImprove(LocalManagerAgent agentPeixeEspada) throws ServiceException { QualityAttribute retornedQualityAttribute = new QualityAttribute(); copyQualityAttribute(agentPeixeEspada.getOrchestratorAgent().getQualityAttribute(), retornedQualityAttribute); try { Double calculedValue = qualityAttributeService.calculateValue(agentPeixeEspada.getDefaultRevision(), retornedQualityAttribute); // agentPeixeEspada.appendMessage("\nNÃO NORMALIZADO"); // printQualityAttribute(agentPeixeEspada, calculedValue); retornedQualityAttribute = getNormalizedQualitiAttribute(agentPeixeEspada.getFirstQualityAttribute(), retornedQualityAttribute); agentPeixeEspada.appendMessage(Translate.getTranslate().normalized()); printQualityAttribute(agentPeixeEspada, retornedQualityAttribute); calculedValue = retornedQualityAttribute.getCurrentValue(); if (calculedValue.compareTo(agentPeixeEspada.getCurrentQualityAttributeValue()) > 0) { setCurrentQualityAttributeBySucess(agentPeixeEspada, retornedQualityAttribute); } else if (calculedValue.compareTo(agentPeixeEspada.getCurrentQualityAttributeValue()) < 0) { agentPeixeEspada.setHasImproved(false); } else { agentPeixeEspada.setHasImproved(null); } } catch (Exception ex) { throw new ServiceException(ex); } } public QualityAttribute calculateNormalizedQualityAttributeValue(LocalManagerAgent agentPeixeEspada) throws ServiceException { QualityAttribute retornedQualityAttribute = new QualityAttribute(); copyQualityAttribute(agentPeixeEspada.getOrchestratorAgent().getQualityAttribute(), retornedQualityAttribute); try { qualityAttributeService.calculateValue(agentPeixeEspada.getDefaultRevision(), retornedQualityAttribute); retornedQualityAttribute = getNormalizedQualitiAttribute(agentPeixeEspada.getFirstQualityAttribute(), retornedQualityAttribute); return retornedQualityAttribute; } catch (Exception ex) { throw new ServiceException(ex); } } private Double calculateQualityAttributeValue(QualityAttribute qualityAttribute) { Double value = 0d; for (MetricQualityAttribute metricQualityAttribute : qualityAttribute.getMetricQualityAttributes()) { value += metricQualityAttribute.getMetricValue() * metricQualityAttribute.getFactor(); } return value; } private QualityAttribute getNormalizedQualitiAttribute(QualityAttribute baseQualityAttribute, QualityAttribute notNormalizedQualityAttribute) { int bound = baseQualityAttribute.getMetricQualityAttributes().size(); List<MetricQualityAttribute> listNotNormalized = notNormalizedQualityAttribute.getMetricQualityAttributes(); List<MetricQualityAttribute> baseList = baseQualityAttribute.getMetricQualityAttributes(); for (int i = 0; i < bound; i++) { listNotNormalized.get(i).setMetricValue(listNotNormalized.get(i).getMetricValue() / baseList.get(i).getMetricValue()); } notNormalizedQualityAttribute.setCurrentValue(calculateQualityAttributeValue(notNormalizedQualityAttribute)); return notNormalizedQualityAttribute; } private QualityAttribute getBeforeNormalizeQualitiAttribute(QualityAttribute baseQualityAttribute, QualityAttribute normalizedQualityAttribute) { int bound = baseQualityAttribute.getMetricQualityAttributes().size(); List<MetricQualityAttribute> listNotNormalized = normalizedQualityAttribute.getMetricQualityAttributes(); List<MetricQualityAttribute> baseList = baseQualityAttribute.getMetricQualityAttributes(); for (int i = 0; i < bound; i++) { listNotNormalized.get(i).setMetricValue(listNotNormalized.get(i).getMetricValue() * baseList.get(i).getMetricValue()); } normalizedQualityAttribute.setCurrentValue(calculateQualityAttributeValue(normalizedQualityAttribute)); return normalizedQualityAttribute; } public void printQualityAttribute(LocalManagerAgent agentPeixeEspada, QualityAttribute qualityAttributeValue) { Translate translate = Translate.getTranslate(); agentPeixeEspada.appendMessage(translate.measuredValue(qualityAttributeValue.getCurrentValue())); agentPeixeEspada.appendMessage(translate.oldValue(agentPeixeEspada.getCurrentQualityAttributeValue())); StringBuilder stringBuilderMetricas = new StringBuilder(translate.metricValues()); List<MetricQualityAttribute> metricQualityAttributes = qualityAttributeValue.getMetricQualityAttributes(); for (MetricQualityAttribute metricQualityAttribute : metricQualityAttributes) { stringBuilderMetricas.append( translate.metricValuesItem( metricQualityAttribute.getMetric().getAcronym(), metricQualityAttribute.getMetricValue() )); } agentPeixeEspada.appendMessage(stringBuilderMetricas.toString()); stringBuilderMetricas = null; } public boolean hasImprove() { return true; } public void setCurrentQualityAttributeBySucess(LocalManagerAgent agentPeixeEspada, QualityAttribute calculedValue) { agentPeixeEspada.getOrchestratorAgent().setQualityAttribute(calculedValue); agentPeixeEspada.setCurrentQualityAttributeValue(calculedValue.getCurrentValue()); copyQualityAttribute(getBeforeNormalizeQualitiAttribute(agentPeixeEspada.getFirstQualityAttribute(), calculedValue), agentPeixeEspada.getCurrentQualityWithoutNormalize()); agentPeixeEspada.setHasImproved(true); } public Boolean hasImproved(LocalManagerAgent agentPeixeEspada, QualityAttribute calculedValue) { if (calculedValue.getCurrentValue().compareTo(agentPeixeEspada.getCurrentQualityAttributeValue()) > 0) { return true; } else if (calculedValue.getCurrentValue().compareTo(agentPeixeEspada.getCurrentQualityAttributeValue()) < 0) { return false; } return null; } }