/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.guvnor.tools.properties;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
import org.guvnor.tools.Activator;
import org.guvnor.tools.Messages;
import org.guvnor.tools.utils.PlatformUtils;
import org.guvnor.tools.views.model.TreeObject;
/**
* Shows properties for a Guvnor repository element.
* @author jgraham
*/
public class RepositoryElementPropsDialog extends TitleAreaDialog {
private static final int INITIAL_WIDTH = 780;
private static final int INITIAL_HEIGHT = 400;
private TreeObject node;
private Text unField;
private Text pwField;
public RepositoryElementPropsDialog(Shell parentShell, TreeObject node) {
super(parentShell);
super.setShellStyle(getShellStyle() | SWT.RESIZE);
this.node = node;
}
@Override
protected Control createDialogArea(Composite parent) {
super.setTitle(Messages.getString("guvnor.repository.element")); //$NON-NLS-1$
super.setMessage(MessageFormat.format(Messages.getString("guvnor.resource.properties"), //$NON-NLS-1$
new Object[] { node.getName() }));
super.setTitleImage(Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN).createImage());
TabFolder folder = new TabFolder(parent, SWT.TOP);
folder.setLayoutData(new GridData(GridData.FILL_BOTH));
TabItem tab = new TabItem(folder, SWT.NONE);
tab.setText(Messages.getString("properties.basic")); //$NON-NLS-1$
Composite composite = PlatformUtils.createComposite(folder, 2);
tab.setControl(composite);
addElementProperties(composite);
tab = new TabItem(folder, SWT.NONE);
tab.setText(Messages.getString("properties.security")); //$NON-NLS-1$
composite = PlatformUtils.createComposite(folder, 2);
tab.setControl(composite);
addSecurityProperties(composite);
return super.createDialogArea(parent);
}
private void addElementProperties(Composite composite) {
IPropertySource ps = (IPropertySource)node.getAdapter(IPropertySource.class);
if (ps == null) {
return;
}
IPropertyDescriptor[] desc = ps.getPropertyDescriptors();
for (int i = 0; i < desc.length; i++) {
if (desc[i] instanceof TextPropertyDescriptor) {
TextPropertyDescriptor oneDesc = (TextPropertyDescriptor)desc[i];
new Label(composite, SWT.NONE).
setText(MessageFormat.format(Messages.getString("guvnor.resource.property"), //$NON-NLS-1$
new Object[] { oneDesc.getDisplayName() }));
String val = ps.getPropertyValue(oneDesc.getId()) != null?
(String)ps.getPropertyValue(oneDesc.getId()):""; //$NON-NLS-1$
new Label(composite, SWT.NONE).setText(val);
}
}
}
private void addSecurityProperties(Composite composite) {
new Label(composite, SWT.NONE).setText(Messages.getString("user.name")); //$NON-NLS-1$
unField = new Text(composite, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
unField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
unField.setEditable(false);
unField.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
new Label(composite, SWT.NONE).setText(Messages.getString("password")); //$NON-NLS-1$
pwField = new Text(composite, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD | SWT.READ_ONLY);
pwField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
pwField.setEditable(false);
pwField.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
populateSecuritySettings();
}
@SuppressWarnings("unchecked")
private void populateSecuritySettings() {
try {
Map info = Platform.getAuthorizationInfo(
new URL(node.getGuvnorRepository().getLocation()), "", "basic"); //$NON-NLS-1$ //$NON-NLS-2$
if (info == null) {
return;
}
String un = (String)info.get("username"); //$NON-NLS-1$
if (un != null) {
unField.setText(un);
}
String pw = (String)info.get("password"); //$NON-NLS-1$
if (pw != null) {
pwField.setText(pw);
}
} catch (MalformedURLException e) {
Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
}
}
@Override
protected Point getInitialSize() {
// Try to set a reasonable default size.
return new Point(INITIAL_WIDTH, INITIAL_HEIGHT);
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(Messages
.getString("guvnor.resource.properties.title")); //$NON-NLS-1$
}
}