/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.editor.preferences.editorproperties;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import org.eclipse.che.ide.api.machine.events.WsAgentStateEvent;
import org.eclipse.che.ide.api.machine.events.WsAgentStateHandler;
import org.eclipse.che.ide.api.event.EditorSettingsChangedEvent;
import org.eclipse.che.ide.editor.preferences.EditorPreferenceSection;
import org.eclipse.che.ide.editor.preferences.editorproperties.sections.EditorPreferenceSectionFactory;
import org.eclipse.che.ide.editor.preferences.editorproperties.sections.EditorPropertiesSection;
import java.util.HashSet;
import java.util.Set;
/**
* Presenter to manage the editor sections in the 'Preferences' menu.
*
* @author Roman Nikitenko
*/
public class EditorPropertiesPresenter implements EditorPreferenceSection, WsAgentStateHandler {
/** The preference page presenter. */
private ParentPresenter parentPresenter;
private Set<EditorPreferenceSection> sectionsSet = new HashSet<>();
private final EventBus eventBus;
private final EditorPropertiesView view;
private final Set<EditorPropertiesSection> sections;
private final EditorPreferenceSectionFactory editorPreferenceSectionFactory;
@Inject
public EditorPropertiesPresenter(final EditorPropertiesView view,
final EventBus eventBus,
final Set<EditorPropertiesSection> sections,
final EditorPreferenceSectionFactory editorPreferenceSectionFactory) {
this.view = view;
this.sections = sections;
this.editorPreferenceSectionFactory = editorPreferenceSectionFactory;
this.eventBus = eventBus;
eventBus.addHandler(WsAgentStateEvent.TYPE, this);
}
@Override
public void storeChanges() {
for (EditorPreferenceSection section : sectionsSet) {
if (section.isDirty()) {
section.storeChanges();
}
}
eventBus.fireEvent(new EditorSettingsChangedEvent());
}
@Override
public void refresh() {
for (EditorPreferenceSection section : sectionsSet) {
if (section.isDirty()) {
section.refresh();
}
}
}
@Override
public boolean isDirty() {
for (EditorPreferenceSection section : sectionsSet) {
if (section.isDirty()) {
return true;
}
}
return false;
}
@Override
public void go(final AcceptsOneWidget container) {
container.setWidget(view);
}
@Override
public void setParent(final EditorPreferenceSection.ParentPresenter parent) {
this.parentPresenter = parent;
}
@Override
public void onWsAgentStarted(WsAgentStateEvent event) {
for (EditorPropertiesSection section : sections) {
EditorPreferenceSection editorPreferenceSection =
editorPreferenceSectionFactory.create(section.getSectionTitle(), section.getProperties());
editorPreferenceSection.go(view.getEditorSectionsContainer());
editorPreferenceSection.setParent(parentPresenter);
sectionsSet.add(editorPreferenceSection);
}
}
@Override
public void onWsAgentStopped(WsAgentStateEvent event) {
}
}