package com.sap.coghead.metamodel.eventhandlers; import java.util.HashMap; import java.util.Map; import org.osgi.framework.BundleContext; import coghead.Account; import coghead.AccountLevelPermission; import coghead.Role; 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 AccountCreationEventHandler 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(Account.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(); Account account= (Account) ece.getAffectedElement(conn); constructImplicitRolesAndPermissions(account, conn); } } } private void constructImplicitRolesAndPermissions(Account account, Connection conn) { Role admins = createRole("Admins", conn); Role support = createRole("Support", conn); Role users = createRole("Users", conn); account.getRoles().add(admins); account.getRoles().add(support); account.getRoles().add(users); AccountLevelPermission accountLevelPermissions = conn.createElement(AccountLevelPermission.CLASS_DESCRIPTOR); account.setPermissions(accountLevelPermissions); accountLevelPermissions.getDesignTimeCreate().add(admins); accountLevelPermissions.getDesignTimeUpdate().add(admins); accountLevelPermissions.getDesignTimeRetrieve().add(admins); accountLevelPermissions.getDesignTimeDelete().add(admins); accountLevelPermissions.getRuntimeCreate().add(admins); accountLevelPermissions.getRuntimeUpdate().add(admins); accountLevelPermissions.getRuntimeRetrieve().add(admins); accountLevelPermissions.getRuntimeDelete().add(admins); accountLevelPermissions.getRuntimeCreate().add(users); accountLevelPermissions.getRuntimeUpdate().add(users); accountLevelPermissions.getRuntimeRetrieve().add(users); accountLevelPermissions.getRuntimeDelete().add(users); } private Role createRole(String name, Connection conn) { Role role = conn.createElement(Role.CLASS_DESCRIPTOR); role.setName(name); role.setDescription(name); return role; } }