package org.goko.common.addons; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow; import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.goko.core.common.exception.GkException; import org.goko.core.config.GokoPreference; import org.goko.core.feature.IFeatureSetManager; import org.goko.core.feature.TargetBoard; import org.goko.core.workspace.element.GkProject; import org.goko.core.workspace.service.AbstractProjectLifecycleListenerAdapter; import org.goko.core.workspace.service.IWorkspaceService; /** * Addons that monitors the name of the current project and displays it it the title bar * @author Psyko */ public class ProjectNameTitleUpdater extends AbstractProjectLifecycleListenerAdapter{ private IWorkspaceService workspaceService; private MApplication application; private EModelService modelService; private IFeatureSetManager featureSetManager; private static final String BASENAME = "Goko"; /** * Update the title of the application to display project name * @throws GkException GkException */ private void updateTitle() throws GkException{ if(application != null && modelService != null && workspaceService != null){ MTrimmedWindow mainMTrimmedWindow = (MTrimmedWindow) modelService.find("goko.application.window", application); GkProject project = workspaceService.getProject(); String projectName = project.getName(); if(StringUtils.isEmpty(projectName)){ projectName = "Untitled project"; } if(project.isDirty()){ projectName += "*"; } TargetBoard targetBoard = featureSetManager.getCurrentTargetBoard(); String title = BASENAME; if(GokoPreference.getInstance().isDeveloperMode()){ title += " - DEV MODE"; } title += " - "+targetBoard.getLabel(); title += " - "+projectName; mainMTrimmedWindow.setLabel(title); } } @Inject public void execute(IWorkspaceService workspaceService, MApplication app, EModelService model, IFeatureSetManager featureSetManager) throws GkException{ this.workspaceService = workspaceService; this.application = app; this.modelService = model; this.featureSetManager = featureSetManager; this.workspaceService.addProjectLifecycleListener(this); updateTitle(); } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLifecycleListener#afterCreate() */ @Override public void afterCreate() throws GkException { updateTitle(); } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLifecycleListener#afterSave() */ @Override public void afterSave() throws GkException { updateTitle(); } /** (inheritDoc) * @see org.goko.core.workspace.service.IProjectLifecycleListener#afterLoad() */ @Override public void afterLoad() throws GkException { updateTitle(); } /** (inheritDoc) * @see org.goko.core.workspace.service.AbstractProjectLifecycleListenerAdapter#onProjectDirtyStateChange() */ @Override public void onProjectDirtyStateChange() throws GkException { updateTitle(); } }