/**
   * Generates a list of portlets that are processing events or publishing the events
   *
   * @param portletProcessingPublishingEventsFromDescriptor Map where portlet id is the key and list
   *     of events is the value
   * @param eventProcessingPublishingPortlets Map where event is the key and list of portlets is the
   *     value
   */
  private void setEventPortlets(
      Map<PortletID, List<EventHolder>> portletProcessingPublishingEventsFromDescriptor,
      Map<QName, List<PortletID>> eventProcessingPublishingPortlets,
      Map<PortletID, List<EventHolder>> portletSupportingProcessingPublishingEvents) {
    Set<Map.Entry<PortletID, List<EventHolder>>> entries =
        portletProcessingPublishingEventsFromDescriptor.entrySet();
    for (Map.Entry<PortletID, List<EventHolder>> mapEntry : entries) {
      for (EventHolder eventHolder : mapEntry.getValue()) {
        List<EventHolder> supportingEventHolders =
            portletSupportingProcessingPublishingEvents.get(mapEntry.getKey());
        if (supportingEventHolders == null) {
          supportingEventHolders = new ArrayList<EventHolder>();
        }
        if (!supportingEventHolders.contains(eventHolder)) {
          supportingEventHolders.add(eventHolder);
        }
        portletSupportingProcessingPublishingEvents.put(mapEntry.getKey(), supportingEventHolders);

        List<PortletID> portletIDs = eventProcessingPublishingPortlets.get(eventHolder.getQName());
        if (portletIDs == null) {
          portletIDs = new ArrayList<PortletID>();
        }
        if (!portletIDs.contains(mapEntry.getKey())) {
          portletIDs.add(mapEntry.getKey());
        }
        eventProcessingPublishingPortlets.put(eventHolder.getQName(), portletIDs);
      }
    }
  }
 private boolean checkAliases(EventHolder eventHolder, EventHolder supportedEventHolder) {
   boolean containsAlias = false;
   for (QName qname : eventHolder.getAliases()) {
     if (supportedEventHolder.getAliases().contains(qname)) {
       containsAlias = true;
       break;
     }
   }
   return containsAlias;
 }
 public EventHolder verifySupportedProcessingEvent(
     EntityID portletEntityId, EventHolder supportedEventHolder) {
   List<PortletID> portlets =
       getEventPublishingProcessingPortlets(
           this.eventProcessingPortlets, supportedEventHolder.getQName());
   PortletID portletID = portletEntityId.getPortletID();
   if (portlets.contains(portletID)) {
     return supportedEventHolder;
   } else {
     // Check whether supportedEventQName is present in the aliases of any event definition
     // or whether the supportedEventQName is same as the qname of any event definition
     // or whether aliases of the supportedEvent contains the eventQName
     // or whether any qname is common in both aliases
     // if yes use the event qname of that event definition to get the portlet list
     for (List<EventHolder> allEventHolders : this.appEventHolders.values()) {
       for (EventHolder eventHolder : allEventHolders) {
         if (eventHolder.getAliases().contains(supportedEventHolder.getQName())
             || eventHolder.getQName().equals(supportedEventHolder.getQName())
             || supportedEventHolder.getAliases().contains(eventHolder.getQName())
             || checkAliases(eventHolder, supportedEventHolder)) {
           portlets =
               getEventPublishingProcessingPortlets(
                   this.eventProcessingPortlets, eventHolder.getQName());
           if (portlets != null && portlets.contains(portletID)) {
             return eventHolder;
           }
         }
       }
     }
   }
   return null;
 }
 // Remove the portlets associated with the qname and
 // if there  are no portlets associated with the qname remove the qname from the Map
 private void removeEventPublishingPortlets(
     Map<PortletID, List<EventHolder>> portletPublishingEvents, List<PortletID> portletIDs) {
   Set<Map.Entry<PortletID, List<EventHolder>>> entries = portletPublishingEvents.entrySet();
   for (Map.Entry<PortletID, List<EventHolder>> mapEntry : entries) {
     for (EventHolder eventHolder : mapEntry.getValue()) {
       List<PortletID> tempPortletIDs = this.eventPublishingPortlets.get(eventHolder.getQName());
       if (tempPortletIDs != null) {
         for (PortletID portletID : portletIDs) {
           tempPortletIDs.remove(portletID);
         }
         if (tempPortletIDs.isEmpty()) {
           this.eventPublishingPortlets.remove(eventHolder.getQName());
         }
       }
     }
   }
 }
 public EventHolder verifySupportedPublishingEvent(
     EntityID portletEntityId, EventHolder supportedEventHolder) {
   // Check whether it supports any ContainerEvent, if yes do not publish it
   if (getContainerEventService() != null
       && getContainerEventService()
           .getSupportedEvents()
           .contains(supportedEventHolder.getQName())) {
     return null;
   }
   List<PortletID> portlets =
       getEventPublishingProcessingPortlets(
           this.eventPublishingPortlets, supportedEventHolder.getQName());
   PortletID portletID = portletEntityId.getPortletID();
   if (portlets.contains(portletID)) {
     return supportedEventHolder;
   }
   return null;
 }
 public void setSupportedProcessingEvent(EntityID portletEntityId, EventHolder eventHolder)
     throws PublicDescriptorHolderException {
   if (this.portletSupportingProcessingEvents != null) {
     List<EventHolder> eventHolders =
         this.portletSupportingPublishingEvents.get(portletEntityId.getPortletID());
     if (eventHolders != null && eventHolders.contains(eventHolder)) {
       throw new PublicDescriptorHolderException(
           "The SupportingProcessingEvent:" + eventHolder.getQName() + " is already present");
     }
   }
   List<EventHolder> eventHolders = new ArrayList<EventHolder>();
   eventHolders.add(eventHolder);
   Map<PortletID, List<EventHolder>> processingEvents =
       new HashMap<PortletID, List<EventHolder>>();
   processingEvents.put(portletEntityId.getPortletID(), eventHolders);
   createEventProcessingPortlets(processingEvents);
   // print information
   printInformation();
 }
 public void setEventHolder(String portletAppName, EventHolder eventHolder)
     throws PublicDescriptorHolderException {
   if (this.appEventHolders != null) {
     // load Event Holder objects of the portlet application
     List<EventHolder> eventHolders = this.appEventHolders.get(portletAppName);
     if (eventHolders == null) {
       eventHolders = new CopyOnWriteArrayList<EventHolder>();
     }
     if (!eventHolders.contains(eventHolder)) {
       eventHolders.add(eventHolder);
       appEventHolders.put(portletAppName, eventHolders);
     } else {
       throw new PublicDescriptorHolderException(
           "The Event:" + eventHolder.getQName() + " is already present");
     }
   }
   // print information
   printInformation();
 }