File indexing completed on 2025-01-31 02:19:18
0001 #include "Fireworks/FWInterface/src/FWFFMetadataManager.h"
0002 #include "Fireworks/FWInterface/src/FWFFMetadataUpdateRequest.h"
0003 #include "Fireworks/Core/interface/fwLog.h"
0004 #include "DataFormats/Provenance/interface/StableProvenance.h"
0005 #include "DataFormats/Provenance/interface/ProductDescription.h"
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "Fireworks/Core/interface/FWItemAccessorFactory.h"
0008
0009 #include "TClass.h"
0010 FWFFMetadataManager::FWFFMetadataManager() : m_event(nullptr) {}
0011
0012 bool FWFFMetadataManager::hasModuleLabel(std::string &iModuleLabel) {
0013 if (m_event) {
0014 std::vector<edm::StableProvenance const *> provenances;
0015 m_event->getAllStableProvenance(provenances);
0016
0017 for (size_t pi = 0, pe = provenances.size(); pi != pe; ++pi) {
0018 edm::StableProvenance const *provenance = provenances[pi];
0019 if (provenance && (provenance->productDescription().moduleLabel() == iModuleLabel))
0020 return true;
0021 }
0022 }
0023 return false;
0024 }
0025
0026 bool FWFFMetadataManager::doUpdate(FWJobMetadataUpdateRequest *request) {
0027
0028 usableData().clear();
0029
0030 assert(m_typeAndReps);
0031 FWFFMetadataUpdateRequest *fullRequest = dynamic_cast<FWFFMetadataUpdateRequest *>(request);
0032 if (!fullRequest)
0033 return false;
0034 const edm::Event &event = fullRequest->event();
0035 m_event = &event;
0036
0037 typedef std::set<std::string> Purposes;
0038 Purposes purposes;
0039 std::vector<edm::StableProvenance const *> provenances;
0040
0041 event.getAllStableProvenance(provenances);
0042
0043 for (size_t pi = 0, pe = provenances.size(); pi != pe; ++pi) {
0044 edm::StableProvenance const *provenance = provenances[pi];
0045 if (!provenance)
0046 continue;
0047 Data d;
0048 const edm::ProductDescription &desc = provenance->productDescription();
0049
0050 const std::vector<FWRepresentationInfo> &infos = m_typeAndReps->representationsForType(desc.fullClassName());
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067 purposes.clear();
0068 for (size_t ii = 0, ei = infos.size(); ii != ei; ++ii) {
0069
0070
0071
0072 purposes.insert(infos[ii].purpose());
0073 }
0074
0075 if (purposes.empty())
0076 purposes.insert("Table");
0077
0078 for (Purposes::const_iterator itPurpose = purposes.begin(), itEnd = purposes.end(); itPurpose != itEnd;
0079 ++itPurpose) {
0080
0081
0082
0083
0084 TClass *theClass = TClass::GetClass(desc.fullClassName().c_str());
0085
0086 if (!theClass)
0087 continue;
0088
0089 if (!theClass->GetTypeInfo())
0090 continue;
0091
0092
0093 if (!FWItemAccessorFactory::classAccessedAsCollection(theClass)) {
0094 fwLog(fwlog::kDebug) << theClass->GetName() << " will not be displayed in table." << std::endl;
0095 continue;
0096 }
0097 d.type_ = desc.fullClassName();
0098 d.purpose_ = *itPurpose;
0099 d.moduleLabel_ = desc.moduleLabel();
0100 d.productInstanceLabel_ = desc.productInstanceName();
0101 d.processName_ = desc.processName();
0102 usableData().push_back(d);
0103 fwLog(fwlog::kDebug) << "Add collection will display " << d.type_ << " " << d.moduleLabel_ << " "
0104 << d.productInstanceLabel_ << " " << d.processName_ << std::endl;
0105 }
0106 }
0107 return true;
0108 }