/*******************************************************************************
* Copyright (c) 2016 Rogue Wave Software, Inc.
* 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:
* Rogue Wave Software, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.zdb.ide.configuration;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import org.eclipse.che.ide.api.debug.DebugConfiguration;
import org.eclipse.che.ide.api.debug.DebugConfigurationPage;
import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
import javax.validation.constraints.NotNull;
import java.util.Map;
/**
* Page allows to edit Zend debugger configuration.
*
* @author Bartlomiej Laczkowski
*/
@Singleton
public class ZendDbgConfigurationPagePresenter implements ZendDbgConfigurationPageView.ActionDelegate,
DebugConfigurationPage<DebugConfiguration> {
private final ZendDbgConfigurationPageView view;
private DebugConfiguration editedConfiguration;
private String originClientHostIp;
private int originDebugPort;
private boolean originUseSsslEncryption;
private boolean originBreakAtFirstLine;
private DirtyStateListener listener;
private Provider<DebugConfigurationsManager> debugConfigurationsManagerProvider;
@Inject
public ZendDbgConfigurationPagePresenter(ZendDbgConfigurationPageView view,
Provider<DebugConfigurationsManager> debugConfigurationsManagerProvider) {
this.view = view;
this.debugConfigurationsManagerProvider = debugConfigurationsManagerProvider;
view.setDelegate(this);
}
@Override
public void resetFrom(DebugConfiguration configuration) {
setConfigurationDefaults(configuration);
editedConfiguration = configuration;
Map<String, String> props = configuration.getConnectionProperties();
originBreakAtFirstLine = Boolean.valueOf(props.get(ZendDbgConfigurationType.ATTR_BREAK_AT_FIRST_LINE));
originClientHostIp = props.get(ZendDbgConfigurationType.ATTR_CLIENT_HOST_IP);
originDebugPort = Integer.valueOf(props.get(ZendDbgConfigurationType.ATTR_DEBUG_PORT));
originUseSsslEncryption = Boolean.valueOf(props.get(ZendDbgConfigurationType.ATTR_USE_SSL_ENCRYPTION));
}
@Override
public void go(AcceptsOneWidget container) {
container.setWidget(view);
Map<String, String> props = editedConfiguration.getConnectionProperties();
view.setBreakAtFirstLine(Boolean.valueOf(props.get(ZendDbgConfigurationType.ATTR_BREAK_AT_FIRST_LINE)));
view.setClientHostIP(props.get(ZendDbgConfigurationType.ATTR_CLIENT_HOST_IP));
view.setDebugPort(Integer.valueOf(props.get(ZendDbgConfigurationType.ATTR_DEBUG_PORT)));
view.setUseSslEncryption(Boolean.valueOf(props.get(ZendDbgConfigurationType.ATTR_USE_SSL_ENCRYPTION)));
}
@Override
public boolean isDirty() {
Map<String, String> props = editedConfiguration.getConnectionProperties();
return originBreakAtFirstLine != Boolean.valueOf(props.get(ZendDbgConfigurationType.ATTR_BREAK_AT_FIRST_LINE))
|| !originClientHostIp.equals(props.get(ZendDbgConfigurationType.ATTR_CLIENT_HOST_IP))
|| originDebugPort != Integer.valueOf(props.get(ZendDbgConfigurationType.ATTR_DEBUG_PORT))
|| originUseSsslEncryption != Boolean.valueOf(props.get(ZendDbgConfigurationType.ATTR_USE_SSL_ENCRYPTION));
}
@Override
public void setDirtyStateListener(@NotNull DirtyStateListener listener) {
this.listener = listener;
}
@Override
public void onBreakAtFirstLineChanged(boolean value) {
Map<String, String> props = editedConfiguration.getConnectionProperties();
props.put(ZendDbgConfigurationType.ATTR_BREAK_AT_FIRST_LINE, String.valueOf(view.getBreakAtFirstLine()));
listener.onDirtyStateChanged();
}
@Override
public void onClientHostIPChanged() {
Map<String, String> props = editedConfiguration.getConnectionProperties();
props.put(ZendDbgConfigurationType.ATTR_CLIENT_HOST_IP, view.getClientHostIP());
listener.onDirtyStateChanged();
}
@Override
public void onDebugPortChanged() {
Map<String, String> props = editedConfiguration.getConnectionProperties();
props.put(ZendDbgConfigurationType.ATTR_DEBUG_PORT, String.valueOf(view.getDebugPort()));
listener.onDirtyStateChanged();
}
@Override
public void onUseSslEncryptionChanged(boolean value) {
Map<String, String> props = editedConfiguration.getConnectionProperties();
props.put(ZendDbgConfigurationType.ATTR_USE_SSL_ENCRYPTION, String.valueOf(view.getUseSslEncryption()));
listener.onDirtyStateChanged();
}
private void setConfigurationDefaults(DebugConfiguration configuration) {
if (!configuration.getConnectionProperties().isEmpty()) {
return;
}
DebugConfigurationsManager debugConfigurationsManager = debugConfigurationsManagerProvider.get();
debugConfigurationsManager.removeConfiguration(configuration);
ZendDbgConfigurationType.setDefaults(configuration);
debugConfigurationsManager.createConfiguration(configuration.getType().getId(), configuration.getName(),
configuration.getHost(), configuration.getPort(),
configuration.getConnectionProperties());
}
}