package name.abuchen.portfolio.ui.update; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.Version; import com.ibm.icu.text.MessageFormat; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.PortfolioPlugin; import name.abuchen.portfolio.ui.UIConstants; import name.abuchen.portfolio.ui.update.NewVersion.ConditionalMessage; import name.abuchen.portfolio.ui.update.NewVersion.Release; /* package */class UpdateMessageDialog extends MessageDialog { private Button checkOnUpdate; private NewVersion newVersion; public UpdateMessageDialog(Shell parentShell, String title, String message, NewVersion newVersion) { super(parentShell, title, null, message, CONFIRM, new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL }, 0); this.newVersion = newVersion; } @Override protected Control createCustomArea(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridDataFactory.fillDefaults().grab(true, false).applyTo(container); GridLayoutFactory.fillDefaults().numColumns(1).applyTo(container); createText(container); checkOnUpdate = new Button(container, SWT.CHECK); checkOnUpdate.setSelection(PortfolioPlugin.getDefault().getPreferenceStore() .getBoolean(UIConstants.Preferences.AUTO_UPDATE)); checkOnUpdate.setText(Messages.PrefCheckOnStartup); checkOnUpdate.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { PortfolioPlugin.getDefault().getPreferenceStore().setValue(UIConstants.Preferences.AUTO_UPDATE, checkOnUpdate.getSelection()); } }); GridDataFactory.fillDefaults().grab(true, false); return container; } private void createText(Composite container) { StyledText text = new StyledText(container, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY | SWT.BORDER); List<StyleRange> ranges = new ArrayList<StyleRange>(); StringBuilder buffer = new StringBuilder(); if (newVersion.requiresNewJavaVersion()) { StyleRange style = new StyleRange(); style.start = buffer.length(); style.length = Messages.MsgUpdateRequiresLatestJavaVersion.length(); style.foreground = Display.getDefault().getSystemColor(SWT.COLOR_RED); style.fontStyle = SWT.BOLD; ranges.add(style); buffer.append(Messages.MsgUpdateRequiresLatestJavaVersion); } appendReleases(buffer, ranges); text.setText(buffer.toString()); text.setStyleRanges(ranges.toArray(new StyleRange[0])); GridDataFactory.fillDefaults().grab(true, true).applyTo(text); } private void appendReleases(StringBuilder buffer, List<StyleRange> styles) { Version currentVersion = FrameworkUtil.getBundle(this.getClass()).getVersion(); for (Release release : newVersion.getReleases()) { if (release.getVersion().compareTo(currentVersion) <= 0) continue; if (buffer.length() > 0) buffer.append("\n\n"); //$NON-NLS-1$ String heading = MessageFormat.format(Messages.MsgUpdateNewInVersionX, release.getVersion().toString()); StyleRange style = new StyleRange(); style.start = buffer.length(); style.length = heading.length(); style.fontStyle = SWT.BOLD; styles.add(style); buffer.append(heading); buffer.append("\n\n"); //$NON-NLS-1$ appendMessages(buffer, styles, release); for (String line : release.getLines()) buffer.append(line).append("\n"); //$NON-NLS-1$ } } private void appendMessages(StringBuilder buffer, List<StyleRange> styles, Release release) { for (ConditionalMessage msg : release.getMessages()) { if (!msg.isApplicable()) continue; StyleRange style = new StyleRange(); style.start = buffer.length(); style.foreground = Display.getDefault().getSystemColor(SWT.COLOR_RED); style.fontStyle = SWT.BOLD; for (String line : msg.getLines()) buffer.append(line).append("\n"); //$NON-NLS-1$ style.length = buffer.length() - style.start; styles.add(style); buffer.append("\n\n"); //$NON-NLS-1$ } } }