/** * * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated NOT */ @Override public EList<HistoricalValues> updateHistoryExtensions(SnapshotCollection snapshotCollection) { // long start = System.currentTimeMillis(); // String typeName = ((EClass)getSEType()).getName(); EList<HistoricalValues> histValsList = new BasicEList<HistoricalValues>(); RepositoryRegistry rg = RepositoryRegistry.vmtMANAGER; // long start4 = System.currentTimeMillis(); Set<VMTRootObject> vObj = rg.getInstances(getSEType()); // logger.info("getting SE instances fo SE type "+typeName +" took: // "+(System.currentTimeMillis()-start4)); EList<EObject> attrList = getAttribute(); EList<ENamedElement> nes = new BasicEList<ENamedElement>(); ServiceEntityHistoryExt histExt; // long start5 = System.currentTimeMillis(); for (VMTRootObject obj : vObj) { // long start3 = System.currentTimeMillis(); boolean constraintFailed = false; ServiceEntity se = (ServiceEntity) obj; // Check constraints + that the se participates in the main market and not a template if ((se.getServiceEntityOf() != null) && se.getServiceEntityOf().isMainMarket() && (se.getTemplateForMarket() == null)) { for (Constraint constraint : getMatchingCriteria()) { if (!constraint.match(obj)) { constraintFailed = true; break; } } } else { constraintFailed = true; } // and skip if any of the constraints do not match if (constraintFailed) continue; histExt = (ServiceEntityHistoryExt) se.createExtension(ReportingExtensionsPackage.eINSTANCE.getServiceEntityHistoryExt()); histExt.setSnapshotCollection(snapshotCollection); if (scLogger.isTraceEnabled()) scLogger.trace(String.format("%s: Updating ServiceEntityHistoryExt", se.toVMTString())); // Get the attribute value and create/add to the historical values if (attrList.size() == 1) { EStructuralFeature attribute = (EStructuralFeature) attrList.get(0); HistoricalValues vals; EList<HistoricalValues> valuesList = histExt.getHistoricalValues(attribute.getName()); // if the attribute was not added to the extension yet create it if (valuesList == null || valuesList.isEmpty()) { vals = ReportingFactory.eINSTANCE.createHistoricalValues(); vals.initValues(snapshotCollection); histExt.addHistoricalValues(attribute.getName(), vals); if (scLogger.isTraceEnabled()) scLogger.trace( String.format( "%s: Adding historicalValues for attribute %s", se.toVMTString(), attribute.getName())); } else { // There cannot be more than 1 value for an attribute. vals = histExt.getHistoricalValues(attribute.getName()).get(0); } // Only add a value if the attribute has been set already - otherwise add no value if (obj.eIsSet(attribute)) { Object attributeValue = obj.eGet(attribute); vals.addValue((Float) attributeValue); histValsList.add(vals); if (scLogger.isTraceEnabled()) scLogger.trace( String.format( "%s: Adding value %f to historicalValues for attribute %s", se.toVMTString(), attributeValue, attribute.getName())); } else { vals.addValue(HistoricalValuesImpl.NO_VALUE); if (scLogger.isTraceEnabled()) scLogger.trace( String.format( "%s: Adding no value to historicalValues for attribute %s", se.toVMTString(), attribute.getName())); } } // Or get the list of attribute values and create/add to historical values for each else { nes.clear(); /* previously we assumed a list of size 3 [reference, commodity, attribute], now we assume * the last entry is the attribute and the third to last entry is the commodity. */ EStructuralFeature attribute = (EStructuralFeature) attrList.get(attrList.size() - 1); EReference reference = (EReference) attrList.get(attrList.size() - 3); // instead of: nes.addAll((Collection<? extends ENamedElement>) attrList.subList(0, // attrList.size()-1)); for (int i = 0; i < attrList.size() - 1; i++) nes.add((ENamedElement) attrList.get(i)); List<Object> matchedCommodities = obj.getValues(nes); for (Object commObj : matchedCommodities) { // long start2 = System.currentTimeMillis(); if (commObj instanceof Commodity) { Commodity comm = (Commodity) commObj; // if a history extension already exists use it, otherwise create a new one and // initialize it. if (comm.getHistoryExtension() == null) { CommodityHistoryExt commHistExt = (CommodityHistoryExt) comm.createExtension( ReportingExtensionsPackage.eINSTANCE.getCommodityHistoryExt()); commHistExt.init(snapshotCollection, histExt); if (scLogger.isTraceEnabled()) scLogger.trace( String.format( "%s: Updating CommodityHistoryExt for %s", se.toVMTString(), comm.toVMTString())); } // update the snapshot collection accumulated used values snapshotCollection.updateOverallCommodityUsage(comm); try { // add the value to the historical ext - insert to the proper historical values HistoricalValues vals = comm.getHistoryExtension().getFeatureHistory(attribute, reference); // Only add a value for the attributes that have been set already if (comm.eIsSet(attribute)) { vals.addValue((Float) comm.eGet(attribute)); histValsList.add(vals); if (scLogger.isTraceEnabled()) scLogger.trace( String.format( "%s: Adding value %f to historicalValues of commodity %s for attribute %s", se.toVMTString(), comm.eGet(attribute), comm.toVMTString(), attribute.getName())); } // otherwise - set to NO VALUE else { vals.addValue(HistoricalValuesImpl.NO_VALUE); if (scLogger.isTraceEnabled()) scLogger.trace( String.format( "%s: Adding no value to historicalValues of commodity %s for attribute %s", se.toVMTString(), comm.toVMTString(), attribute.getName())); } } catch (Exception e) { logger.error( "Exception trying to update history extension for " + comm.getName() + "::" + attribute.getName(), e); } } else { logger.error( "Missconfigured MetaReacord. Penultimate argument should be a Commodity: " + commObj); } // logger.info("updating a single commodity for SE type "+typeName +" took: // "+(System.currentTimeMillis()-start2)); } } // logger.info("updating a single entity for SE type "+typeName +" took: // "+(System.currentTimeMillis()-start3)); } // logger.info("iterating over all entities of type "+typeName +" took: // "+(System.currentTimeMillis()-start5)); // logger.info("update history extension for SE type "+typeName +" took: // "+(System.currentTimeMillis()-start)); return histValsList; }
/** * * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated NOT */ @Override public EList<Record> getRecords() { EList<Record> recordList = new BasicEList<Record>(); RepositoryRegistry rg = RepositoryRegistry.vmtMANAGER; Set<VMTRootObject> vObj = rg.getInstances(getSEType()); EList<EObject> attrList = getAttribute(); EList<ENamedElement> nes = new BasicEList<ENamedElement>(); for (VMTRootObject obj : vObj) { boolean constraintfailed = false; ServiceEntity se = (ServiceEntity) obj; // Check constraints + that the se participates in the main market and not a template if ((se.getServiceEntityOf() != null) && se.getServiceEntityOf().isMainMarket() && (se.getTemplateForMarket() == null)) { for (Constraint constraint : getMatchingCriteria()) { if (!constraint.match(obj)) { constraintfailed = true; break; } } } else { constraintfailed = true; } // and skip if any of the constraints do not match if (constraintfailed) continue; // Get the attribute value and create a single record if (attrList.size() == 1) { EStructuralFeature attribute = (EStructuralFeature) attrList.get(0); // Only create a record if the attribute has been set already if (obj.eIsSet(attribute)) { Object attributeValue = obj.eGet(attribute); RecordFromMetaRecord rec = ReportingFactory.eINSTANCE.createRecordFromMetaRecord(); rec.setObject(obj); rec.setFeature(attribute); if (trackSize && attributeValue instanceof List<?>) { rec.setValueObject(((List<?>) attributeValue).size()); } else if (trackSize) { rec.setValueObject(1); } else { rec.setValueObject(attributeValue); } recordList.add(rec); } // Or get the list of attribute values and create a record for each } else { nes.clear(); EReference reference = (EReference) attrList.get(attrList.size() - 3); ENamedElement commodity = (ENamedElement) attrList.get(attrList.size() - 2); EStructuralFeature attribute = (EStructuralFeature) attrList.get(attrList.size() - 1); for (EObject attrib : attrList) { nes.add((ENamedElement) attrib); } // Only creating a record for the attributes that has been set already, otherwise getValues // returns no elements in the list List<Object> attributeValueList = obj.getValues(nes); for (Object attributeValue : attributeValueList) { RecordFromMetaRecord2 rec = ReportingFactory.eINSTANCE.createRecordFromMetaRecord2(); rec.setObject(obj); rec.setFeature(attribute); rec.setCommodity(commodity); rec.setReference(reference); if (trackSize && attributeValue instanceof List<?>) { rec.setValueObject(((List<?>) attributeValue).size()); } else if (trackSize) { rec.setValueObject(1); } else { rec.setValueObject(attributeValue); } recordList.add(rec); } } } return recordList; }