package de.deepamehta.events;
import de.deepamehta.core.RelatedTopic;
import de.deepamehta.core.Topic;
import de.deepamehta.core.model.AssociationModel;
import de.deepamehta.core.model.RoleModel;
import de.deepamehta.core.osgi.PluginActivator;
import de.deepamehta.core.service.Inject;
import de.deepamehta.core.service.event.PreCreateAssociationListener;
import de.deepamehta.core.util.DeepaMehtaUtils;
import de.deepamehta.time.TimeService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import java.util.List;
import java.util.logging.Logger;
@Path("/event")
@Consumes("application/json")
@Produces("application/json")
public class EventsPlugin extends PluginActivator implements EventsService, PreCreateAssociationListener {
// ---------------------------------------------------------------------------------------------- Instance Variables
@Inject
private TimeService timeService;
private static final Logger logger = Logger.getLogger(EventsPlugin.class.getName());
// -------------------------------------------------------------------------------------------------- Public Methods
// ************************************
// *** EventsService Implementation ***
// ************************************
@GET
@Path("/participant/{id}")
@Override
public List<RelatedTopic> getEvents(@PathParam("id") long personId) {
return dm4.getTopic(personId).getRelatedTopics("dm4.events.participant", "dm4.core.default", "dm4.core.default",
"dm4.events.event");
}
@GET
@Path("/{id}/participants")
@Override
public List<RelatedTopic> getParticipants(@PathParam("id") long eventId) {
return dm4.getTopic(eventId).getRelatedTopics("dm4.events.participant", "dm4.core.default", "dm4.core.default",
"dm4.contacts.person");
}
// ********************************
// *** Listener Implementations ***
// ********************************
@Override
public void preCreateAssociation(AssociationModel assoc) {
// Event <-> Person
DeepaMehtaUtils.associationAutoTyping(assoc, "dm4.events.event", "dm4.contacts.person",
"dm4.events.participant", "dm4.core.default", "dm4.core.default", dm4);
//
// Event -> Address
RoleModel[] roles = DeepaMehtaUtils.associationAutoTyping(assoc, "dm4.events.event", "dm4.contacts.address",
"dm4.core.aggregation", "dm4.core.parent", "dm4.core.child", dm4);
if (roles != null) {
long eventId = roles[0].getPlayerId();
Topic event = dm4.getTopic(eventId);
event.getChildTopics().getTopic("dm4.contacts.address").getRelatingAssociation().delete();
timeService.setModified(event);
}
}
}