All Downloads are FREE. Search and download functionalities are using the official Maven repository.

events.system.service.EventTemplateBusinessService Maven / Gradle / Ivy

package events.system.service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

import javax.persistence.Query;

import hbm.service.jpa.AbstractBusinessService;
import de.alpharogroup.collections.ListExtensions;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import user.management.model.Users;
import de.alpharogroup.scheduler.system.model.Appointments;
import de.alpharogroup.scheduler.system.service.api.AppointmentsService;
import events.system.daos.EventTemplateDao;
import events.system.model.Categories;
import events.system.model.EventLocations;
import events.system.model.EventRatings;
import events.system.model.EventTemplate;
import events.system.model.EventTopics;
import events.system.model.RatingDescriptions;
import events.system.model.Userevents;
import events.system.service.api.EventLocationsService;
import events.system.service.api.EventMessagesService;
import events.system.service.api.EventRatingsService;
import events.system.service.api.EventTemplateService;
import events.system.service.api.EventTopicsService;
import events.system.service.api.RatingDescriptionsService;
import events.system.service.api.UsereventsService;

@Transactional
@Service("eventTemplateService")
public class EventTemplateBusinessService
		extends
		AbstractBusinessService
		implements EventTemplateService {

	private static final long serialVersionUID = 1L;
	/** The Constant logger. */
	private static final Logger logger = Logger
			.getLogger(EventTemplateBusinessService.class.getName());

	@Autowired
	public void setEventTemplateDao(EventTemplateDao eventTemplateDao) {
		setDao(eventTemplateDao);
	}
	


	/** The event locations business service. */
	@Autowired
	private EventLocationsService eventLocationsService;

	/** The event topics business service. */
	@Autowired
	private EventTopicsService eventTopicsService;

	/** The appointments business service. */
	@Autowired
	private AppointmentsService appointmentsService;
	@Autowired
	private EventRatingsService eventRatingsService;
	@Autowired
	private RatingDescriptionsService ratingDescriptionsService;
	@Autowired
	private UsereventsService userEventsService;
	@Autowired
	private EventMessagesService eventMessagesService;

	/**
	 * {@inheritDoc}
	 */
	public EventTemplate deleteEventAndAllReferences(EventTemplate event) {

		event.setCategories(null);
		merge(event);
		
		List eventLocations = eventLocationsService
				.findEvents(event);
		// find all event_topics and delete it...
		List eventTopics = eventTopicsService
				.findEventTopics(event);
		// find all event_ratings and delete it...
		List eventRatings = eventRatingsService
				.findEventRatings(event);
		// delete all related ratings from the event_ratings...
		List userevents = userEventsService
				.findUserevents(event);

		// delete all references from event_topics...
		if (!ListExtensions.isEmpty(eventTopics)) {
			for (EventTopics eventTopic : eventTopics) {
				eventTopic.setTopic(null);
				eventTopic.setEvent(null);
				eventTopic = eventTopicsService.merge(eventTopic);
				eventTopicsService.delete(eventTopic);
			}
		}

		if (!ListExtensions.isEmpty(userevents)) {
			for (Userevents userevent : userevents) {
				userevent.setEvent(null);
				userevent.setUser(null);
				userevent = userEventsService.merge(userevent);
				userEventsService.delete(userevent);
			}
		}
		if (!ListExtensions.isEmpty(eventRatings)) {
			for (EventRatings eventRating : eventRatings) {
				// Get related RatingDescriptions if exists...
				RatingDescriptions rd = eventRatingsService
						.findRatingDescription(eventRating);
				if (rd != null) {
					rd.setEventRatings(null);
					rd = ratingDescriptionsService.merge(rd);
					ratingDescriptionsService.delete(rd);
				}
				eventRating.setEvent(null);
				eventRating.setRater(null);
				eventRating = eventRatingsService.merge(eventRating);
				eventRatingsService.delete(eventRating);
			}
		}

		// delete all references from event_locations...
		if (!ListExtensions.isEmpty(eventLocations)) {
			for (EventLocations eventLocation : eventLocations) {
				if (eventMessagesService
						.findEventMessagesFromEventLocation(eventLocation) != null) {
					// delete only...
					eventLocation.setAppointment(null);
					eventLocation.setEvent(null);
					eventLocation.setEventLocation(null);
					continue;
				}

				if (eventLocation.getAppointment() != null) {
					Appointments appointment = eventLocation.getAppointment();
					eventLocation.setAppointment(null);
					eventLocation.setEvent(null);
					eventLocation.setEventLocation(null);
					eventLocation.setContactperson(null);
					eventLocation = eventLocationsService
							.merge(eventLocation);
					if (appointment != null) {
						appointmentsService.delete(appointment);
					}
					eventLocation = eventLocationsService
							.merge(eventLocation);
					eventLocationsService.delete(eventLocation);
				}
			}
		}
		Integer id = event.getId();
		if(exists(id)) {
			try {
				this.delete(event);
			} catch (Exception e) {
				if (event != null && event.getId() != null) {
					logger.info("Exception thrown by tryin delete an event with id:"
							+ event.getId());
					logger.info(e.getMessage());
				}
				return event;
			} 
		}
		return null;
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public EventTemplate findEvent(final Users provider, final Integer id) {
		String hqlString = "select s from Events as s where s.provider=:provider and s.id=:id";
		final Query query = getQuery(hqlString);
		query.setParameter("provider", provider);
		query.setParameter("id", id);
		final List events = new ArrayList(new HashSet(
				query.getResultList()));
		return ListExtensions.getFirst(events);
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public List findEvents(final String eventname,
			final Categories category, final boolean condition) {
		final StringBuilder hqlString = new StringBuilder();
		if (null != category) {
			if (condition) {
				hqlString
						.append("select s from Events as s where s.name like :eventname and s.categories.name=':category'");
			} else {
				hqlString
						.append("select s from Events as s where s.name like :eventname or s.categories.name=':category'");
			}
		} else {
			hqlString
					.append("select s from Events as s where s.name like :eventname");
		}

		final Query query = getQuery(hqlString.toString());
		query.setParameter("eventname", eventname);
		if (null != category) {
			query.setParameter("category", category);
		}
		final List foundEvents = query.getResultList();
		return foundEvents;
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public List findEvents(final Users provider) {
		final String hqlString = "select distinct ue.event from Userevents ue"
				+ " where ue.user=:provider"
				+ " and ue.relationtype='PROVIDED'";
		final Query query = getQuery(hqlString);
		query.setParameter("provider", provider);
		final List events = new ArrayList(new HashSet(
				query.getResultList()));
		return events;
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy