blob: f049dad1e409b7119e35b06f62394d925016ff9b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Shane Clarke.
* 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:
* Shane Clarke - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.internal.cxf.ui.properties;
import java.util.Collection;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.ClasspathContainerInitializer;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.ws.internal.cxf.core.CXFClasspathContainer;
import org.eclipse.jst.ws.internal.cxf.core.CXFCorePlugin;
import org.eclipse.jst.ws.internal.cxf.core.model.CXFContext;
import org.eclipse.jst.ws.internal.cxf.core.model.CXFInstall;
import org.eclipse.jst.ws.internal.cxf.ui.CXFUIMessages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.dialogs.PropertyPage;
public class CXFPropertyPage extends PropertyPage {
private IJavaProject javaProject;
private IProject project;
private ComboViewer installationsComboViewer;
private Link link;
private CXFInstall defaultInstall;
private CXFContext context;
public CXFPropertyPage() {
context = CXFCorePlugin.getDefault().getJava2WSContext();
}
@Override
protected Control createContents(Composite parent) {
IAdaptable element = getElement();
if (!(element instanceof IJavaProject)) {
return null;
}
javaProject = (IJavaProject) element;
this.project = javaProject.getProject();
Composite composite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout(2, false);
composite.setLayout(gridLayout);
link = new Link(composite, SWT.NONE);
link.setText(CXFUIMessages.CXF_CONFIGURE_INSTALLED_RUNTIMES_LABEL);
link.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int selectedIndex = installationsComboViewer.getCombo().getSelectionIndex();
int result = PreferencesUtil.createPreferenceDialogOn(getShell(),
"org.eclipse.jst.ws.cxf.ui.CXFRuntimePreferencesPage", //$NON-NLS-1$
new String[] {"org.eclipse.jst.ws.cxf.ui.CXFRuntimePreferencesPage"}, null).open(); //$NON-NLS-1$
if (result == Window.OK) {
installationsComboViewer.refresh();
installationsComboViewer.getCombo().select(selectedIndex);
}
}
});
GridData gridData = new GridData(SWT.END, SWT.FILL, true, false);
gridData.horizontalSpan = 2;
link.setLayoutData(gridData);
Label label = new Label(composite, SWT.NONE);
label.setText(CXFUIMessages.CXF_PROPERTY_PAGE_RUNTIME_LABEL);
installationsComboViewer = new ComboViewer(composite, SWT.BORDER | SWT.READ_ONLY);
gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
installationsComboViewer.getCombo().setLayoutData(gridData);
installationsComboViewer.setContentProvider(new IStructuredContentProvider() {
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object inputElement) {
if (inputElement instanceof Collection<?>) {
return ((Collection<?>) inputElement).toArray();
}
return new Object[] {};
}
});
installationsComboViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof CXFInstall) {
CXFInstall cxfInstall = (CXFInstall) element;
return cxfInstall.getType() + " " + cxfInstall.getVersion();
}
return ""; //$NON-NLS-1$
}
});
Collection<CXFInstall> installations = context.getInstallations().values();
installationsComboViewer.setInput(installations);
String intalledVersion = CXFCorePlugin.getDefault().getCXFRuntimeVersion(project);
defaultInstall = context.getInstallations().get(intalledVersion);
if (defaultInstall != null) {
installationsComboViewer.setSelection(new StructuredSelection(defaultInstall), true);
}
return composite;
}
@Override
public boolean performOk() {
CXFInstall selectedInstall = getSelectedInstall();
//if (isUpdateRequired(project, selectedInstall)) {
//if (!defaultInstall.getVersion().equals(selectedInstall.getVersion())) {
if (selectedInstall != null) {
CXFCorePlugin.getDefault().setCXFRuntimeVersion(project, selectedInstall.getVersion());
ClasspathContainerInitializer classpathContainerInitializer = JavaCore.getClasspathContainerInitializer(
CXFCorePlugin.CXF_CLASSPATH_CONTAINER_ID);
if (classpathContainerInitializer != null) {
IPath containerPath = new Path(CXFCorePlugin.CXF_CLASSPATH_CONTAINER_ID);
CXFClasspathContainer cxfClasspathContainer = new CXFClasspathContainer(containerPath, javaProject);
try {
classpathContainerInitializer.requestClasspathContainerUpdate(containerPath, javaProject,
cxfClasspathContainer);
} catch (CoreException ce) {
CXFCorePlugin.log(ce.getStatus());
}
}
}
return true;
}
private CXFInstall getSelectedInstall() {
StructuredSelection structuredSelection = (StructuredSelection) installationsComboViewer.getSelection();
if (!structuredSelection.isEmpty()) {
CXFInstall selectedInstall = (CXFInstall) structuredSelection.getFirstElement();
return selectedInstall;
}
return null;
}
@Override
protected void performDefaults() {
CXFInstall defaultInstall = context.getInstallations().get(context.getDefaultRuntimeVersion());
if (defaultInstall != null) {
installationsComboViewer.setSelection(new StructuredSelection(defaultInstall), true);
}
super.performDefaults();
}
}