blob: 084cbe87503f11d06077fac79506ada35e5a52a6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.ui.views;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.Iterator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.forms.events.*;
import org.eclipse.ui.forms.widgets.*;
import org.eclipse.update.configuration.ILocalSite;
import org.eclipse.update.core.*;
import org.eclipse.update.internal.ui.*;
import org.eclipse.update.internal.ui.model.*;
import org.eclipse.update.operations.*;
public class ConfigurationPreview implements IUpdateModelChangedListener {
private ScrolledForm form;
private ConfigurationView view;
private FormToolkit toolkit;
private FormText desc;
private FormText taskList;
private IPreviewTask[] tasks;
public ConfigurationPreview(ConfigurationView view) {
this.view = view;
UpdateModel model = UpdateUI.getDefault().getUpdateModel();
model.addUpdateModelChangedListener(this);
}
public void dispose() {
UpdateModel model = UpdateUI.getDefault().getUpdateModel();
model.removeUpdateModelChangedListener(this);
toolkit.dispose();
}
public void objectsAdded(Object parent, Object[] children) {
}
public void objectsRemoved(Object parent, Object[] children) {
}
public void objectChanged(Object object, String property) {
}
public Control getControl() {
return form;
}
public void createControl(Composite parent) {
toolkit = new FormToolkit(parent.getDisplay());
form = toolkit.createScrolledForm(parent);
TableWrapLayout layout = new TableWrapLayout();
form.getBody().setLayout(layout);
layout.leftMargin = 10;
layout.rightMargin = 5;
layout.topMargin = 10;
layout.horizontalSpacing = 0;
layout.verticalSpacing = 20;
IHyperlinkListener urlAction = new HyperlinkAdapter() {
public void linkActivated(HyperlinkEvent e) {
String url = (String) e.getHref();
if (url != null)
UpdateUI.showURL(url);
}
};
IHyperlinkListener taskAction = new HyperlinkAdapter() {
public void linkActivated(HyperlinkEvent e) {
String indexArg = (String) e.getHref();
try {
int index = Integer.parseInt(indexArg);
if (tasks != null)
tasks[index].run();
} catch (NumberFormatException ex) {
}
}
};
//taskAction.setStatusLineManager(view.getConfigurationWindow().getStatusLineManager());
desc = toolkit.createFormText(form.getBody(), true);
desc.setHyperlinkSettings(toolkit.getHyperlinkGroup());
desc.addHyperlinkListener(urlAction);
desc.setText("", false, false); //$NON-NLS-1$
TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
desc.setLayoutData(td);
taskList = toolkit.createFormText(form.getBody(), false);
taskList.setHyperlinkSettings(toolkit.getHyperlinkGroup());
taskList.addHyperlinkListener(taskAction);
taskList.setText("", false, false); //$NON-NLS-1$
//factory.setHyperlinkUnderlineMode(HyperlinkSettings.UNDERLINE_ROLLOVER);
td = new TableWrapData(TableWrapData.FILL_GRAB);
taskList.setLayoutData(td);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "org.eclipse.update.ui.SiteForm"); //$NON-NLS-1$
}
public void setSelection(IStructuredSelection selection) {
Object object = selection.getFirstElement();
tasks = view.getPreviewTasks(object);
String title = getObjectLabel(selection.size()>1?selection:object);
form.setText(title);
String description = getObjectDescription(selection.size()>1?selection:object);
boolean tags = description.startsWith("<form>"); //$NON-NLS-1$
desc.setText(description, tags, !tags);
String taskText = getTasksText();
taskList.setText(taskText, true, false);
form.reflow(true);
}
private String getObjectLabel(Object object) {
if (object == null)
return ""; //$NON-NLS-1$
TreeViewer viewer = view.getTreeViewer();
LabelProvider provider = (LabelProvider) viewer.getLabelProvider();
if (object instanceof IStructuredSelection) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
int counter=1;
for (Iterator iter = ((IStructuredSelection)object).iterator();
iter.hasNext();) {
pw.println(counter+". "+provider.getText(iter.next())); //$NON-NLS-1$
counter++;
}
return sw.toString();
}
return provider.getText(object);
}
private String getObjectDescription(Object object) {
if (object instanceof IFeatureAdapter) {
return getFeatureDescription((IFeatureAdapter) object);
}
if (object instanceof IConfiguredSiteAdapter) {
return UpdateUIMessages.ConfigurationPreviewForm_install;
}
if (object instanceof ILocalSite) {
return UpdateUIMessages.ConfigurationPreviewForm_configDescription;
}
return ""; //$NON-NLS-1$
}
private String getFeatureDescription(IFeatureAdapter adapter) {
try {
IFeature feature = adapter.getFeature(null);
IURLEntry entry = feature.getDescription();
if (entry != null) {
String text = entry.getAnnotation();
if (text != null) {
URL url = entry.getURL();
if (url == null)
return text;
else {
String link = " <a href=\"" + url //$NON-NLS-1$
+ "\">"+UpdateUIMessages.MoreInfoGenerator_moreInfo+"</a>"; //$NON-NLS-1$//$NON-NLS-2$
String fullText = "<form><p>" + text + link //$NON-NLS-1$
+ "</p></form>"; //$NON-NLS-1$
return fullText;
}
}
}
} catch (CoreException e) {
}
return ""; //$NON-NLS-1$
}
private String getTasksText() {
if (tasks == null || tasks.length == 0)
return "<form/>"; //$NON-NLS-1$
boolean hasEnabledTasks = false;
for (int i = 0; i < tasks.length; i++) {
if (tasks[i].isEnabled()) {
hasEnabledTasks = true;
break;
}
}
if (!hasEnabledTasks)
return "<form/>"; //$NON-NLS-1$
StringBuffer buf = new StringBuffer();
buf.append("<form><p><b>"); //$NON-NLS-1$
buf.append(UpdateUIMessages.ConfigurationPreviewForm_AvailableTasks);
buf.append("</b></p>"); //$NON-NLS-1$
for (int i = 0; i < tasks.length; i++) {
IPreviewTask task = tasks[i];
if (task.isEnabled() == false)
continue;
buf.append("<li style=\"text\" indent=\"0\"><a href=\"" + i + "\">" //$NON-NLS-1$ //$NON-NLS-2$
+ task.getName() + "</a></li>"); //$NON-NLS-1$
buf.append("<li style=\"text\" indent=\"10\" vspace=\"false\">" //$NON-NLS-1$
+ task.getDescription() + "</li>"); //$NON-NLS-1$
}
buf.append("</form>"); //$NON-NLS-1$
return buf.toString();
}
}