package com.sap.coghead.metamodel.eventhandlers; import java.util.HashMap; import java.util.Map; import org.osgi.framework.BundleContext; import coghead.ASchemaCollection; import coghead.Collection; import coghead.Schema; import coghead.Variable; 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.AssociationFilter; 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.LinkAddEvent; import com.sap.tc.moin.repository.mmi.model.Association; public class SchemaConnectionLinkAddEventHandler 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 collectionSchemaAssocFilter = new AssociationFilter( (Association) connection.getAssociation(ASchemaCollection.ASSOCIATION_DESCRIPTOR).refMetaObject()); EventFilter collectionCreationFilter = new AndFilter(collectionSchemaAssocFilter, new EventTypeFilter(LinkAddEvent.class)); Map<ListenerType, EventListener> listenerForType = new HashMap<ListenerType, EventListener>(); listenerForType.put(ListenerType.UPDATE, this); result.put(collectionCreationFilter, listenerForType); return result; } @Override public void notifyUpdate(EventChain events) { for (ChangeEvent event : events.getEvents()) { if (event instanceof LinkAddEvent) { LinkAddEvent ece = (LinkAddEvent) event; Connection conn = ece.getEventTriggerConnection(); Schema schema = (Schema) ece.getFirstLinkEnd(conn); Collection collection = (Collection) ece.getSecondLinkEnd(conn); if (collection.getVariables() != null) { for (Variable v : collection.getVariables()) { if (v.getName().equals("FORM")) { v.setSchemaType(schema); } } } } } } }