/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.sa.model.dao;
import java.net.URI;
import java.util.Date;
import java.util.List;
import java.util.Set;
import com.emc.storageos.db.client.model.uimodels.ScheduledEventType;
import org.apache.commons.lang.StringUtils;
import com.emc.sa.model.util.TenantUtils;
import com.emc.storageos.db.client.constraint.NamedElementQueryResultList.NamedElement;
import com.emc.storageos.db.client.model.uimodels.ScheduledEvent;
import com.emc.storageos.db.client.model.uimodels.ScheduledEventStatus;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
public class ScheduledEventFinder extends TenantModelFinder<ScheduledEvent> {
public ScheduledEventFinder(DBClientWrapper client) {
super(ScheduledEvent.class, client);
}
/**
* Finds scheduled events by type. This method is intended for use by the scheduler only, in general use
*
* @param scheduledEventType
* the scheduled event type
* @return the list of scheduled events with the given type.
*/
public List<ScheduledEvent> findByScheduledEventType(ScheduledEventType scheduledEventType) {
List<NamedElement> scheduledEventIds = client.findByAlternateId(ScheduledEvent.class, ScheduledEvent.EVENT_TYPE, scheduledEventType.name());
return findByIds(toURIs(scheduledEventIds));
}
public List<ScheduledEvent> findScheduledEventsByExecutionWindow(String executionWindowId) {
List<ScheduledEvent> results = Lists.newArrayList();
if (StringUtils.isBlank(executionWindowId)) {
return results;
}
Set<URI> eventIds = Sets.newHashSet();
List<NamedElement> scheduledEventElems = client.findByAlternateId(ScheduledEvent.class, ScheduledEvent.EVENT_STATUS, ScheduledEventStatus.APPROVED.name());
for (NamedElement scheduledEventElem : scheduledEventElems) {
ScheduledEvent scheduledEvent = client.findById(ScheduledEvent.class, scheduledEventElem.getId());
if (scheduledEvent.getExecutionWindowId() != null && scheduledEvent.getExecutionWindowId().getURI() != null
&& executionWindowId.equalsIgnoreCase(scheduledEvent.getExecutionWindowId().getURI().toString())) {
results.add(scheduledEvent);
}
}
results.addAll(findByIds(Lists.newArrayList(eventIds)));
return results;
}
}