package com.sap.coghead.metamodel.eventhandlers; import java.util.HashMap; import java.util.Map; import org.osgi.framework.BundleContext; import coghead.Collection; import coghead.CollectionLevelPermission; import coghead.Form; import coghead.Variable; import coghead.action.MultiplicityEnum; 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; import com.sap.tc.moin.repository.mmi.reflect.RefClass; public class CollectionCreationEventHandler 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 collectionFilter = new ClassFilter((MofClass) connection.getClass(Collection.CLASS_DESCRIPTOR).refMetaObject(), true); EventFilter collectionCreationFilter = new AndFilter(collectionFilter, new EventTypeFilter(ElementCreateEvent.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 ElementCreateEvent) { ElementCreateEvent ece = (ElementCreateEvent) event; Connection conn = ece.getEventTriggerConnection(); Collection collection = (Collection) ece.getAffectedElement(conn); constructImplicitVariables(collection, conn); constructCollectionLevelPermissions(collection, conn); constructDefaultForm(collection, conn); } } } private void constructDefaultForm(Collection collection, Connection conn) { Form defaultForm = conn.createElement(Form.CLASS_DESCRIPTOR); defaultForm.setName(collection.getName()); collection.getForms().add(defaultForm); } private void constructCollectionLevelPermissions(Collection collection, Connection conn) { CollectionLevelPermission permissions = conn.createElement(CollectionLevelPermission.CLASS_DESCRIPTOR); collection.setPermissions(permissions); } private void constructImplicitVariables(Collection collection, Connection conn) { RefClass variableClazz = conn.getClass(Variable.CLASS_DESCRIPTOR); Variable variable = (Variable) variableClazz.refCreateInstance(); variable.setName("FORM"); variable.setMultiplicity(MultiplicityEnum.SINGLE); if (collection.getSchema() != null) { variable.setSchemaType(collection.getSchema()); } collection.getVariables().add(variable); } }