use of alma.acs.tmcdb.ReductionThreshold in project ACS by ACS-Community.
the class HibernateWDALAlarmPluginImpl method importAlarms.
public static void importAlarms(Session session, Configuration config, ConfigurationAccessor conf, Logger m_logger) throws Exception {
// clean up whatever is in the session
session.getTransaction().commit();
session.clear();
session.beginTransaction();
// create DAOs
ACSAlarmDAOImpl alarmDAO = new ACSAlarmDAOImpl(m_logger);
ACSCategoryDAOImpl categoryDAO = new ACSCategoryDAOImpl(m_logger, alarmDAO);
ACSResponsiblePersonDAOImpl responsiblePersonDAO = new ACSResponsiblePersonDAOImpl();
// configure
alarmDAO.setConfAccessor(conf);
alarmDAO.setSurveillanceAlarmId("SURVEILLANCE:SOURCE:1");
alarmDAO.setResponsiblePersonDAO(responsiblePersonDAO);
categoryDAO.setConfAccessor(conf);
//categoryDAO.setCategoryTreeRoot("ACS");
categoryDAO.setCategoryTreeRoot("ROOT");
categoryDAO.setSurveillanceCategoryPath("ACS.SURVEILLANCE");
responsiblePersonDAO.setAlarmDAO(alarmDAO);
// load
final List<alma.acs.alarmsystem.generated.FaultFamily> families = alarmDAO.loadAlarms();
final alma.acs.alarmsystem.generated.Category[] categories = categoryDAO.loadCategories();
Map<String, ArrayList<AlarmCategory>> categoryFaultFamilyLinks = new HashMap<String, ArrayList<AlarmCategory>>();
// store categories
if (categories != null)
for (alma.acs.alarmsystem.generated.Category daoCategory : categories) {
AlarmCategory category = (AlarmCategory) session.createCriteria(AlarmCategory.class).add(Restrictions.eq("configuration", config)).add(Restrictions.eq("alarmCategoryName", daoCategory.getPath())).uniqueResult();
if (category == null) {
category = new AlarmCategory();
category.setAlarmCategoryName(daoCategory.getPath());
category.setConfiguration(config);
}
category.setDescription(nonEmptyString(daoCategory.getDescription(), "(description)"));
category.setPath(daoCategory.getPath());
category.setIsDefault(daoCategory.getIsDefault());
session.saveOrUpdate(category);
// clear first (in case of update)
category.getFaultFamilies().clear();
// cache mappings
String[] faultFamilies = daoCategory.getAlarms().getFaultFamily();
for (String faultFamily : faultFamilies) {
ArrayList<AlarmCategory> list = categoryFaultFamilyLinks.get(faultFamily);
if (list == null) {
list = new ArrayList<AlarmCategory>();
categoryFaultFamilyLinks.put(faultFamily, list);
}
list.add(category);
}
}
// store fault families and contacts, etc.
if (families != null)
for (alma.acs.alarmsystem.generated.FaultFamily family : families) {
final alma.acs.alarmsystem.generated.Contact daoContact = family.getContact();
Contact contact = (Contact) session.createCriteria(Contact.class).add(Restrictions.eq("contactName", daoContact.getName())).uniqueResult();
if (contact == null) {
contact = new Contact();
contact.setContactName(nonEmptyString(daoContact.getName(), "(empty)"));
contact.setEmail(daoContact.getEmail());
contact.setGsm(daoContact.getGsm());
session.persist(contact);
} else // If contact exist, let's check if this contact contains different information. If so,
// issue an error
{
if (!trimAndNullToEmpty(contact.getEmail()).equals(trimAndNullToEmpty(daoContact.getEmail())) || !trimAndNullToEmpty(contact.getGsm()).equals(trimAndNullToEmpty(daoContact.getGsm()))) {
throw new RuntimeException("Data stored for contact '" + contact.getContactName() + "' in TMCDB " + "does not match that comming from the 'contact' node of fault family '" + family.getName() + "'. " + "TMCDB: <" + contact.getEmail() + ", " + contact.getGsm() + ">, " + "CDB: <" + daoContact.getEmail() + ", " + daoContact.getGsm() + ">");
}
}
FaultFamily faultFamily = (FaultFamily) session.createCriteria(FaultFamily.class).add(Restrictions.eq("configuration", config)).add(Restrictions.eq("familyName", family.getName())).uniqueResult();
if (faultFamily == null) {
faultFamily = new FaultFamily();
faultFamily.setFamilyName(family.getName());
faultFamily.setConfiguration(config);
}
faultFamily.setAlarmSource(family.getAlarmSource());
faultFamily.setHelpURL(family.getHelpUrl());
faultFamily.setContact(contact);
session.saveOrUpdate(faultFamily);
// clear first (in case of update)
faultFamily.getAlarmCategories().clear();
ArrayList<AlarmCategory> list = categoryFaultFamilyLinks.get(family.getName());
if (list != null)
for (AlarmCategory category : list) {
category.getFaultFamilies().add(faultFamily);
faultFamily.getAlarmCategories().add(category);
session.update(category);
session.update(faultFamily);
}
// default fault member
if (family.getFaultMemberDefault() != null) {
DefaultMember defaultMember = null;
// there can be only one
if (faultFamily.getDefaultMembers().size() != 0)
defaultMember = faultFamily.getDefaultMembers().iterator().next();
if (defaultMember == null) {
defaultMember = new DefaultMember();
defaultMember.setFaultFamily(faultFamily);
}
defaultMember.setLocation(getLocation(session, family.getFaultMemberDefault().getLocation()));
session.saveOrUpdate(defaultMember);
} else {
for (DefaultMember memberToRemove : faultFamily.getDefaultMembers()) {
faultFamily.getDefaultMembers().remove(memberToRemove);
session.delete(memberToRemove);
}
session.update(faultFamily);
}
// copy all
Set<FaultMember> faultMembersToRemove = new HashSet<FaultMember>(faultFamily.getFaultMembers());
// add fault members
for (alma.acs.alarmsystem.generated.FaultMember daoFaultMember : family.getFaultMember()) {
FaultMember faultMember = (FaultMember) session.createCriteria(FaultMember.class).add(Restrictions.eq("memberName", daoFaultMember.getName())).add(Restrictions.eq("faultFamily", faultFamily)).uniqueResult();
faultMembersToRemove.remove(faultMember);
if (faultMember == null) {
faultMember = new FaultMember();
faultMember.setMemberName(daoFaultMember.getName());
faultMember.setFaultFamily(faultFamily);
}
faultMember.setLocation(getLocation(session, daoFaultMember.getLocation()));
session.saveOrUpdate(faultMember);
}
if (faultMembersToRemove.size() > 0) {
for (FaultMember faultMemberToRemove : faultMembersToRemove) {
faultFamily.getFaultMembers().remove(faultMemberToRemove);
session.delete(faultMemberToRemove);
}
session.update(faultFamily);
}
// copy all
Set<FaultCode> faultCodesToRemove = new HashSet<FaultCode>(faultFamily.getFaultCodes());
// add fault codes
for (alma.acs.alarmsystem.generated.FaultCode daoFaultCode : family.getFaultCode()) {
FaultCode faultCode = (FaultCode) session.createCriteria(FaultCode.class).add(Restrictions.eq("faultFamily", faultFamily)).add(Restrictions.eq("codeValue", daoFaultCode.getValue())).uniqueResult();
faultCodesToRemove.remove(faultCode);
if (faultCode == null) {
faultCode = new FaultCode();
faultCode.setFaultFamily(faultFamily);
faultCode.setCodeValue(daoFaultCode.getValue());
}
faultCode.setPriority(daoFaultCode.getPriority());
faultCode.setCause(daoFaultCode.getCause());
faultCode.setAction(daoFaultCode.getAction());
faultCode.setConsequence(daoFaultCode.getConsequence());
faultCode.setProblemDescription(nonEmptyString(daoFaultCode.getProblemDescription(), "(description)"));
faultCode.setIsInstant(daoFaultCode.getInstant());
session.saveOrUpdate(faultCode);
}
if (faultCodesToRemove.size() > 0) {
for (FaultCode faultCodeToRemove : faultCodesToRemove) {
faultFamily.getFaultCodes().remove(faultCodeToRemove);
session.delete(faultCodeToRemove);
}
session.update(faultFamily);
}
}
try {
alma.alarmsystem.alarmmessage.generated.ReductionDefinitions redDefs = alarmDAO.getReductionDefinitions();
if (redDefs != null) {
if (redDefs.getLinksToCreate() != null)
saveReductionLinks(session, config, redDefs.getLinksToCreate().getReductionLink(), ReductionLinkAction.CREATE);
if (redDefs.getLinksToRemove() != null)
saveReductionLinks(session, config, redDefs.getLinksToRemove().getReductionLink(), ReductionLinkAction.REMOVE);
int count = 0;
if (redDefs.getThresholds() != null) {
alma.alarmsystem.alarmmessage.generated.Threshold[] thresholds = redDefs.getThresholds().getThreshold();
for (alma.alarmsystem.alarmmessage.generated.Threshold threshold : thresholds) {
// also commit first
if (count % 100 == 0) {
session.getTransaction().commit();
// cleanup first level cache
session.clear();
session.beginTransaction();
config = (Configuration) session.get(Configuration.class, config.getConfigurationId());
}
count++;
alma.acs.tmcdb.AlarmDefinition alarm = getAlarmDefinition(session, config, threshold.getAlarmDefinition(), false);
alma.acs.tmcdb.ReductionThreshold t = (alma.acs.tmcdb.ReductionThreshold) session.createQuery("from ReductionThreshold " + "where AlarmDefinitionId = " + alarm.getAlarmDefinitionId()).uniqueResult();
if (t == null) {
t = new ReductionThreshold();
t.setAlarmDefinition(alarm);
t.setConfiguration(config);
}
t.setValue(threshold.getValue());
session.saveOrUpdate(t);
}
}
}
} finally {
// clear cache (to free memory)
adCache.clear();
}
}
Aggregations