/** * */ package org.goko.core.workspace.service; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.e4.core.services.events.IEventBroker; import org.goko.core.common.exception.GkException; import org.goko.core.common.exception.GkTechnicalException; import org.goko.core.common.service.AbstractGokoService; import org.goko.core.common.service.IGokoService; import org.goko.core.workspace.bean.ProjectContainerUiProvider; import org.goko.core.workspace.bean.ProjectContainerUiProviderComparator; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; /** * @author PsyKo * @date 30 oct. 2015 */ public class WorkspaceUIService extends AbstractGokoService implements IGokoService, IWorkspaceUIService, IWorkspaceListener { /** Service ID */ private static final String SERVICE_ID ="org.goko.core.workspace.WorkspaceUIService"; /** The map of registered UI providers */ private Map<String, ProjectContainerUiProvider> mapProjectContainerUiProvider; /** Event admin for notification to the UI */ private EventAdmin eventAdmin; /** The workspace service */ private IWorkspaceService workspaceService; /** * Constructor */ public WorkspaceUIService() { } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#getServiceId() */ @Override public String getServiceId() throws GkException { return SERVICE_ID; } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#start() */ @Override public void startService() throws GkException { this.mapProjectContainerUiProvider = new HashMap<String, ProjectContainerUiProvider>(); } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#stop() */ @Override public void stopService() throws GkException { } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceUIService#findProjectContainerUiProvider(java.lang.String) */ @Override public ProjectContainerUiProvider findProjectContainerUiProvider(String type) throws GkTechnicalException{ return mapProjectContainerUiProvider.get(type); } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceUIService#getProjectContainerUiProvider(java.lang.String) */ @Override public ProjectContainerUiProvider getProjectContainerUiProvider(String type) throws GkTechnicalException{ ProjectContainerUiProvider result = findProjectContainerUiProvider(type); if(result == null){ throw new GkTechnicalException("ProjectContainerUiProvider not found for type ["+type+"]"); } return result; } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceUIService#existProjectContainerUiProvider(java.lang.String) */ @Override public boolean existProjectContainerUiProvider(String type) throws GkTechnicalException{ return mapProjectContainerUiProvider.containsKey(type); } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceUIService#addProjectContainerUiProvider(org.goko.core.workspace.bean.ProjectContainerUiProvider) */ @Override public void addProjectContainerUiProvider(ProjectContainerUiProvider provider) throws GkTechnicalException{ mapProjectContainerUiProvider.put(provider.getType(), provider); } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceUIService#getProjectContainerUiProvider() */ @Override public List<ProjectContainerUiProvider> getProjectContainerUiProvider() throws GkTechnicalException { List<ProjectContainerUiProvider> content = new ArrayList<ProjectContainerUiProvider>(mapProjectContainerUiProvider.values()); Collections.sort(content, new ProjectContainerUiProviderComparator()); return content; } public void refreshWorkspaceUi(){ eventAdmin.postEvent(new Event(WorkspaceUIEvent.TOPIC_WORKSPACE_REFRESH, new HashMap<String, String>())); } /** * @return the eventAdmin */ public EventAdmin getEventAdmin() { return eventAdmin; } /** * @param eventAdmin the eventAdmin to set */ public void setEventAdmin(EventAdmin eventAdmin) { this.eventAdmin = eventAdmin; } /** * @param eventAdmin the eventAdmin to set */ public void unsetEventAdmin(EventAdmin eventAdmin) { this.eventAdmin = null; } /** * @return the workspaceService */ public IWorkspaceService getWorkspaceService() { return workspaceService; } /** * @param workspaceService the workspaceService to set * @throws GkException GkException */ public void setWorkspaceService(IWorkspaceService workspaceService) throws GkException { this.workspaceService = workspaceService; if(this.workspaceService != null){ this.workspaceService.addWorkspaceListener(this); } } /** * @param workspaceService the workspaceService to remove * @throws GkException GkException */ public void unsetWorkspaceService(IWorkspaceService workspaceService) throws GkException { if(this.workspaceService != null){ this.workspaceService.removeWorkspaceListener(this); } this.workspaceService = null; } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceListener#onWorkspaceEvent(org.goko.core.workspace.service.IWorkspaceEvent) */ @Override public void onWorkspaceEvent(IWorkspaceEvent event) throws GkException { refreshWorkspaceUi(); } /** (inheritDoc) * @see org.goko.core.workspace.service.IWorkspaceUIService#select(java.lang.Object) */ @Override public void select(Object obj) throws GkException { Map<String, Object> data = new HashMap<String, Object>(); data.put(IEventBroker.DATA, obj); eventAdmin.postEvent(new Event(WorkspaceUIEvent.TOPIC_WORKSPACE_SELECT, data)); } }