/*******************************************************************************
* Copyright (c) 2015 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.openshift.cdk.server.ui.internal;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.wst.server.core.IServerWorkingCopy;
import org.eclipse.wst.server.ui.editor.ServerEditorSection;
import org.jboss.ide.eclipse.as.wtp.ui.editor.ServerWorkingCopyPropertyButtonCommand;
import org.jboss.ide.eclipse.as.wtp.ui.editor.ServerWorkingCopyPropertyComboCommand;
import org.jboss.ide.eclipse.as.wtp.ui.editor.ServerWorkingCopyPropertyCommand;
import org.jboss.tools.foundation.core.credentials.CredentialService;
import org.jboss.tools.foundation.ui.credentials.ChooseCredentialComponent;
import org.jboss.tools.foundation.ui.credentials.ICredentialCompositeListener;
import org.jboss.tools.openshift.cdk.server.core.internal.adapter.CDKServer;
/*
* I would love to remake this class to use a credentialing framework
* So users can select the username and password from a central location
*/
public class CDKCredentialSection extends ServerEditorSection {
private Button passCredentialsButton;
private SelectionListener passCredentialsListener;
private ChooseCredentialComponent credentialComposite;
private Text envUserText, envPassText;
private ModifyListener envUserListener, envPassListener;
public CDKCredentialSection() {
// TODO Auto-generated constructor stub
}
@Override
public void init(IEditorSite site, IEditorInput input) {
super.init(site, input);
}
@Override
public void createSection(Composite parent) {
super.createSection(parent);
CDKServer cdkServer = (CDKServer)server.getOriginal().loadAdapter(CDKServer.class, new NullProgressMonitor());
FormToolkit toolkit = new FormToolkit(parent.getDisplay());
Section section = toolkit.createSection(parent, ExpandableComposite.TWISTIE|ExpandableComposite.EXPANDED|ExpandableComposite.TITLE_BAR);
section.setText("Credentials");
section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
Composite composite = toolkit.createComposite(section);
composite.setLayout(new GridLayout(3, false));
passCredentialsButton = toolkit.createButton(composite, "Pass credentials to environment", SWT.CHECK);
passCredentialsButton.setSelection(cdkServer.getServer().getAttribute(CDKServer.PROP_PASS_CREDENTIALS, false));
passCredentialsListener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
execute(new SetPassCredentialsCommand(server));
}
};
passCredentialsButton.addSelectionListener(passCredentialsListener);
credentialComposite = createChooseCredentialComponent(composite);
credentialComposite.addCredentialListener(new ICredentialCompositeListener() {
@Override
public void credentialsChanged() {
execute(new SetUsernameCommand(server));
}
});
Label environmentVars = toolkit.createLabel(composite, "Environment Variables: ");
Label userEnvLabel = toolkit.createLabel(composite, "Username: ");
envUserText = toolkit.createText(composite, cdkServer.getUserEnvironmentKey());
Label passEnvLabel = toolkit.createLabel(composite, "Password: ");
envPassText = toolkit.createText(composite, cdkServer.getPasswordEnvironmentKey());
envUserListener = new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
execute(new SetUsernameVariableCommand(server));
}
};
envUserText.addModifyListener(envUserListener);
envPassListener = new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
execute(new SetPasswordVariableCommand(server));
}
};
envPassText.addModifyListener(envPassListener);
// Layout the widgets
GridDataFactory.generate(passCredentialsButton, new Point(3,1));
credentialComposite.gridLayout(3);
GridDataFactory.generate(environmentVars, new Point(3,1));
GridDataFactory.generate(envUserText, new Point(2,1));
GridDataFactory.generate(envPassText, new Point(2,1));
toolkit.paintBordersFor(composite);
section.setClient(composite);
}
private ChooseCredentialComponent createChooseCredentialComponent(Composite parent) {
String initialUsername = server.getAttribute(CDKServer.PROP_USERNAME, (String)null);
final ChooseCredentialComponent comp = new ChooseCredentialComponent(
new String[]{CredentialService.REDHAT_ACCESS},
initialUsername);
comp.create(parent);
return comp;
}
public class SetUsernameCommand extends ServerWorkingCopyPropertyComboCommand {
public SetUsernameCommand(IServerWorkingCopy server) {
super(server, "Change Username", credentialComposite.getUserCombo(),
credentialComposite.getUser(), CDKServer.PROP_USERNAME, credentialComposite.getUserListener());
}
}
public class SetUsernameVariableCommand extends ServerWorkingCopyPropertyCommand {
public SetUsernameVariableCommand(IServerWorkingCopy server) {
super(server, "Change Username Variable", envUserText,
envUserText.getText(), CDKServer.PROP_USER_ENV_VAR, envUserListener);
}
}
public class SetPasswordVariableCommand extends ServerWorkingCopyPropertyCommand {
public SetPasswordVariableCommand(IServerWorkingCopy server) {
super(server, "Change Password Variable", envPassText,
envPassText.getText(), CDKServer.PROP_PASS_ENV_VAR, envPassListener);
}
}
public class SetPassCredentialsCommand extends ServerWorkingCopyPropertyButtonCommand {
public SetPassCredentialsCommand(IServerWorkingCopy server) {
super(server, "Pass credentials to server", passCredentialsButton, passCredentialsButton.getSelection(),
CDKServer.PROP_PASS_CREDENTIALS, passCredentialsListener);
}
@Override
protected void postOp(int type) {
boolean pass = wc.getAttribute(CDKServer.PROP_PASS_CREDENTIALS, true);
envUserText.setEnabled(pass);
envPassText.setEnabled(pass);
credentialComposite.setEnabled(pass);
}
}
}