package com.sap.coghead.metamodel.eventhandlers;
import java.util.HashMap;
import java.util.Map;
import org.osgi.framework.BundleContext;
import coghead.Application;
import coghead.ApplicationLevelPermission;
import com.sap.tc.moin.globalmodellistener.GlobalEventListener;
import com.sap.tc.moin.repository.Connection;
import com.sap.tc.moin.repository.events.EventChain;
import com.sap.tc.moin.repository.events.EventListener;
import com.sap.tc.moin.repository.events.UpdateListener;
import com.sap.tc.moin.repository.events.filter.AndFilter;
import com.sap.tc.moin.repository.events.filter.ClassFilter;
import com.sap.tc.moin.repository.events.filter.EventFilter;
import com.sap.tc.moin.repository.events.filter.EventTypeFilter;
import com.sap.tc.moin.repository.events.type.ChangeEvent;
import com.sap.tc.moin.repository.events.type.ElementCreateEvent;
import com.sap.tc.moin.repository.mmi.model.MofClass;
public class ApplicationCreationEventHandler implements GlobalEventListener, UpdateListener {
@Override
public Map<EventFilter, Map<ListenerType, EventListener>> getFilters(Connection connection, BundleContext context) {
HashMap<EventFilter, Map<ListenerType, EventListener>> result = new HashMap<EventFilter, Map<ListenerType, EventListener>>();
EventFilter applicationFilter = new ClassFilter((MofClass) connection.getClass(Application.CLASS_DESCRIPTOR).refMetaObject(), true);
EventFilter applicationCreationFilter = new AndFilter(applicationFilter, new EventTypeFilter(ElementCreateEvent.class));
Map<ListenerType, EventListener> listenerForType = new HashMap<ListenerType, EventListener>();
listenerForType.put(ListenerType.UPDATE, this);
result.put(applicationCreationFilter, listenerForType);
return result;
}
@Override
public void notifyUpdate(EventChain events) {
for (ChangeEvent event : events.getEvents()) {
if (event instanceof ElementCreateEvent) {
ElementCreateEvent ece = (ElementCreateEvent) event;
Connection conn = ece.getEventTriggerConnection();
Application application = (Application) ece.getAffectedElement(conn);
constructPermissions(application, conn);
}
}
}
private void constructPermissions(Application application, Connection conn) {
ApplicationLevelPermission applicationLevelPermissions = conn.createElement(ApplicationLevelPermission.CLASS_DESCRIPTOR);
application.setPermissions(applicationLevelPermissions);
}
}