001package de.deepamehta.events;
002
003import de.deepamehta.core.RelatedTopic;
004import de.deepamehta.core.Topic;
005import de.deepamehta.core.model.AssociationModel;
006import de.deepamehta.core.model.RoleModel;
007import de.deepamehta.core.osgi.PluginActivator;
008import de.deepamehta.core.service.Inject;
009import de.deepamehta.core.service.event.PreCreateAssociationListener;
010import de.deepamehta.core.util.DeepaMehtaUtils;
011import de.deepamehta.time.TimeService;
012
013import javax.ws.rs.GET;
014import javax.ws.rs.Path;
015import javax.ws.rs.PathParam;
016import javax.ws.rs.Produces;
017import javax.ws.rs.Consumes;
018
019import java.util.List;
020import java.util.logging.Logger;
021
022
023
024@Path("/event")
025@Consumes("application/json")
026@Produces("application/json")
027public class EventsPlugin extends PluginActivator implements EventsService, PreCreateAssociationListener {
028
029    // ---------------------------------------------------------------------------------------------- Instance Variables
030
031    @Inject
032    private TimeService timeService;
033
034    private static final Logger logger = Logger.getLogger(EventsPlugin.class.getName());
035
036    // -------------------------------------------------------------------------------------------------- Public Methods
037
038
039
040    // ************************************
041    // *** EventsService Implementation ***
042    // ************************************
043
044
045
046    @GET
047    @Path("/participant/{id}")
048    @Override
049    public List<RelatedTopic> getEvents(@PathParam("id") long personId) {
050        return dm4.getTopic(personId).getRelatedTopics("dm4.events.participant", "dm4.core.default", "dm4.core.default",
051            "dm4.events.event");
052    }
053
054    @GET
055    @Path("/{id}/participants")
056    @Override
057    public List<RelatedTopic> getParticipants(@PathParam("id") long eventId) {
058        return dm4.getTopic(eventId).getRelatedTopics("dm4.events.participant", "dm4.core.default", "dm4.core.default",
059            "dm4.contacts.person");
060    }
061
062
063
064    // ********************************
065    // *** Listener Implementations ***
066    // ********************************
067
068
069
070    @Override
071    public void preCreateAssociation(AssociationModel assoc) {
072        // Event <-> Person
073        DeepaMehtaUtils.associationAutoTyping(assoc, "dm4.events.event", "dm4.contacts.person",
074            "dm4.events.participant", "dm4.core.default", "dm4.core.default", dm4);
075        //
076        // Event -> Address
077        RoleModel[] roles = DeepaMehtaUtils.associationAutoTyping(assoc, "dm4.events.event", "dm4.contacts.address",
078            "dm4.core.aggregation", "dm4.core.parent", "dm4.core.child", dm4);
079        if (roles != null) {
080            long eventId = roles[0].getPlayerId();
081            Topic event = dm4.getTopic(eventId);
082            event.getChildTopics().getTopic("dm4.contacts.address").getRelatingAssociation().delete();
083            timeService.setModified(event);
084        }
085    }
086}