Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 167547 Details for
Bug 263528
display a repository service message to warn users of problems, updates, and other relevant information
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
v1
clipboard.txt (text/plain), 32.90 KB, created by
Robert Elves
on 2010-05-07 15:28:43 EDT
(
hide
)
Description:
v1
Filename:
MIME Type:
Creator:
Robert Elves
Created:
2010-05-07 15:28:43 EDT
Size:
32.90 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.tasks.ui >Index: src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java,v >retrieving revision 1.12 >diff -u -r1.12 ITasksUiPreferenceConstants.java >--- src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java 15 Jan 2010 02:02:58 -0000 1.12 >+++ src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java 7 May 2010 19:26:02 -0000 >@@ -87,4 +87,8 @@ > public static final String PREF_DATA_DIR = "org.eclipse.mylyn.data.dir"; //$NON-NLS-1$ > > public static final String DEFAULT_ATTACHMENTS_DIRECTORY = "org.eclipse.mylyn.tasks.ui.attachments.defaultDirectory"; //$NON-NLS-1$ >+ >+ public static final String SERVICE_MESSAGE_URL = "org.eclipse.mylyn.tasks.ui.servicemessage.url"; //$NON-NLS-1$; >+ >+ public static final String LAST_SERVICE_MESSAGE_ID = "org.eclipse.mylyn.tasks.ui.servicemessage.id"; > } >Index: src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java,v >retrieving revision 1.131 >diff -u -r1.131 TasksUiPlugin.java >--- src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java 5 Feb 2010 01:12:35 -0000 1.131 >+++ src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java 7 May 2010 19:26:02 -0000 >@@ -77,6 +77,7 @@ > import org.eclipse.mylyn.internal.tasks.core.externalization.IExternalizationParticipant; > import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant; > import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer; >+import org.eclipse.mylyn.internal.tasks.core.servicemessage.ServiceMessageManager; > import org.eclipse.mylyn.internal.tasks.ui.notifications.TaskListNotificationReminder; > import org.eclipse.mylyn.internal.tasks.ui.notifications.TaskListNotifier; > import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiExtensionReader; >@@ -149,6 +150,8 @@ > > private RepositoryTemplateManager repositoryTemplateManager; > >+ private ServiceMessageManager serviceMessageManager; >+ > private final Set<AbstractTaskEditorPageFactory> taskEditorPageFactories = new HashSet<AbstractTaskEditorPageFactory>(); > > private final TreeSet<AbstractTaskRepositoryLinkProvider> repositoryLinkProviders = new TreeSet<AbstractTaskRepositoryLinkProvider>( >@@ -605,6 +608,10 @@ > // make this available early for clients that are not initialized through tasks ui but need access > taskListNotificationManager = new TaskListNotificationManager(); > >+ serviceMessageManager = new ServiceMessageManager(getPreferenceStore().getString( >+ ITasksUiPreferenceConstants.SERVICE_MESSAGE_URL)); >+ serviceMessageManager.start(); >+ > // trigger lazy initialization > new TasksUiInitializationJob().schedule(); > } catch (Exception e) { >@@ -727,6 +734,7 @@ > // ContextCorePlugin.getDefault().getPluginPreferences().removePropertyChangeListener( > // PREFERENCE_LISTENER); > // } >+ serviceMessageManager.stop(); > taskEditorBloatManager.dispose(PlatformUI.getWorkbench()); > INSTANCE = null; > } >@@ -894,6 +902,8 @@ > > store.setDefault(ITasksUiPreferenceConstants.AUTO_EXPAND_TASK_LIST, true); > store.setDefault(ITasksUiPreferenceConstants.TASK_LIST_TOOL_TIPS_ENABLED, true); >+ >+ store.setDefault(ITasksUiPreferenceConstants.SERVICE_MESSAGE_URL, "http://eclipse.org/mylyn/message.xml"); //$NON-NLS-1$ > } > > public static TaskActivityManager getTaskActivityManager() { >@@ -1306,4 +1316,8 @@ > } > } > >+ public ServiceMessageManager getServiceMessageManager() { >+ return serviceMessageManager; >+ } >+ > } >Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java,v >retrieving revision 1.338 >diff -u -r1.338 TaskListView.java >--- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java 26 Apr 2010 17:37:32 -0000 1.338 >+++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java 7 May 2010 19:26:02 -0000 >@@ -86,6 +86,7 @@ > import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListSortAction; > import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListViewActionGroup; > import org.eclipse.mylyn.internal.tasks.ui.editors.TaskListChangeAdapter; >+import org.eclipse.mylyn.internal.tasks.ui.notifications.TaskListServiceMessageControl; > import org.eclipse.mylyn.internal.tasks.ui.util.PlatformUtil; > import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion; > import org.eclipse.mylyn.internal.tasks.ui.util.TaskDragSourceListener; >@@ -131,6 +132,7 @@ > import org.eclipse.swt.graphics.Image; > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; >+import org.eclipse.swt.layout.GridLayout; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Menu; > import org.eclipse.swt.widgets.Text; >@@ -390,6 +392,8 @@ > > private CustomTaskListDecorationDrawer customDrawer; > >+ private TaskListServiceMessageControl serviceMessageControl; >+ > private final IPageListener PAGE_LISTENER = new IPageListener() { > public void pageActivated(IWorkbenchPage page) { > filteredTree.indicateActiveTaskWorkingSet(); >@@ -730,6 +734,16 @@ > > @Override > public void createPartControl(Composite parent) { >+ >+ Composite body = new Composite(parent, SWT.NONE); >+ GridLayout layout = new GridLayout(1, false); >+ layout.marginHeight = 0; >+ layout.marginWidth = 0; >+ layout.horizontalSpacing = 0; >+ layout.verticalSpacing = 0; >+ layout.numColumns = 1; >+ body.setLayout(layout); >+ > IWorkbenchSiteProgressService progress = (IWorkbenchSiteProgressService) getSite().getAdapter( > IWorkbenchSiteProgressService.class); > if (progress != null) { >@@ -743,7 +757,7 @@ > themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager(); > themeManager.addPropertyChangeListener(THEME_CHANGE_LISTENER); > >- filteredTree = new TaskListFilteredTree(parent, SWT.MULTI | SWT.VERTICAL | /* SWT.H_SCROLL | */SWT.V_SCROLL >+ filteredTree = new TaskListFilteredTree(body, SWT.MULTI | SWT.VERTICAL | /* SWT.H_SCROLL | */SWT.V_SCROLL > | SWT.NO_SCROLL | SWT.FULL_SELECTION, new SubstringPatternFilter(), getViewSite().getWorkbenchWindow()); > > // need to do initialize tooltip early for native tooltip disablement to take effect >@@ -922,6 +936,11 @@ > TasksUiInternal.getTaskList().addChangeListener(TASKLIST_CHANGE_LISTENER); > > TasksUiPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(tasksUiPreferenceListener); >+ serviceMessageControl = new TaskListServiceMessageControl(body); >+ serviceMessageControl.setServiceMessage(TasksUiPlugin.getDefault() >+ .getServiceMessageManager() >+ .getServiceMessage()); >+ TasksUiPlugin.getDefault().getServiceMessageManager().addServiceMessageListener(serviceMessageControl); > > // Need to do this because the page, which holds the active working set is not around on creation, see bug 203179 > PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPageListener(PAGE_LISTENER); >@@ -1263,6 +1282,7 @@ > } > > public void goIntoCategory() { >+ serviceMessageControl.setHidden(true); > ISelection selection = getViewer().getSelection(); > if (selection instanceof StructuredSelection) { > StructuredSelection structuredSelection = (StructuredSelection) selection; >@@ -1280,6 +1300,7 @@ > } > > public void goUpToRoot() { >+ serviceMessageControl.setHidden(false); > drilledIntoCategory = null; > drillDownAdapter.goBack(); > IActionBars bars = getViewSite().getActionBars(); >Index: src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListServiceMessageControl.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListServiceMessageControl.java >diff -N src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListServiceMessageControl.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/ui/notifications/TaskListServiceMessageControl.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,207 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 Tasktop Technologies 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: >+ * Tasktop Technologies - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.ui.notifications; >+ >+import org.eclipse.jface.dialogs.Dialog; >+import org.eclipse.jface.layout.GridDataFactory; >+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; >+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonThemes; >+import org.eclipse.mylyn.internal.provisional.commons.ui.GradientCanvas; >+import org.eclipse.mylyn.internal.tasks.core.servicemessage.IServiceMessageListener; >+import org.eclipse.mylyn.internal.tasks.core.servicemessage.ServiceMessage; >+import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants; >+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.DisposeEvent; >+import org.eclipse.swt.events.DisposeListener; >+import org.eclipse.swt.graphics.Color; >+import org.eclipse.swt.graphics.Font; >+import org.eclipse.swt.graphics.FontData; >+import org.eclipse.swt.graphics.Image; >+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.Display; >+import org.eclipse.swt.widgets.Label; >+import org.eclipse.ui.PlatformUI; >+import org.eclipse.ui.forms.FormColors; >+import org.eclipse.ui.forms.IFormColors; >+import org.eclipse.ui.forms.events.HyperlinkAdapter; >+import org.eclipse.ui.forms.events.HyperlinkEvent; >+import org.eclipse.ui.forms.events.IHyperlinkListener; >+import org.eclipse.ui.forms.widgets.Hyperlink; >+import org.eclipse.ui.forms.widgets.ImageHyperlink; >+ >+/** >+ * @author Robert Elves >+ */ >+public class TaskListServiceMessageControl implements IServiceMessageListener { >+ >+ private ImageHyperlink imageHyperlink; >+ >+ private Hyperlink titleHyperlink; >+ >+ private Label descriptionLabel; >+ >+ private GridData headData; >+ >+ private final Composite parent; >+ >+ private GradientCanvas head; >+ >+ private ImageHyperlink closeLink; >+ >+ private ServiceMessage currentMessage; >+ >+ private boolean constructed; >+ >+ public TaskListServiceMessageControl(Composite parent) { >+ this.parent = parent; >+ createControl(parent); >+ } >+ >+ private void setTitleImage(Image image) { >+ imageHyperlink.setImage(image); >+ } >+ >+ private void setTitle(String title) { >+ titleHyperlink.setText(title); >+ } >+ >+ private void setDescription(String description) { >+ descriptionLabel.setText(description); >+ } >+ >+ private void addHyperlinkListener(IHyperlinkListener listener) { >+ titleHyperlink.addHyperlinkListener(listener); >+ imageHyperlink.addHyperlinkListener(listener); >+ } >+ >+ public Control createControl(Composite parent) { >+ FormColors colors = new FormColors(parent.getDisplay()); >+ head = new GradientCanvas(parent, SWT.NONE); >+ GridLayout headLayout = new GridLayout(); >+ headLayout.marginHeight = 0; >+ headLayout.marginWidth = 0; >+ headLayout.horizontalSpacing = 0; >+ headLayout.verticalSpacing = 0; >+ headLayout.numColumns = 1; >+ head.setLayout(headLayout); >+ headData = new GridData(SWT.FILL, SWT.TOP, true, false); >+ head.setLayoutData(headData); >+ setHidden(true); >+ >+ Color top = colors.getColor(IFormColors.H_GRADIENT_END); >+ Color bot = colors.getColor(IFormColors.H_GRADIENT_START); >+ head.setBackgroundGradient(new Color[] { bot, top }, new int[] { 100 }, true); >+ head.setSeparatorVisible(true); >+ head.setSeparatorAlignment(SWT.TOP); >+ >+ head.putColor(IFormColors.H_BOTTOM_KEYLINE1, colors.getColor(IFormColors.H_BOTTOM_KEYLINE1)); >+ head.putColor(IFormColors.H_BOTTOM_KEYLINE2, colors.getColor(IFormColors.H_BOTTOM_KEYLINE2)); >+ head.putColor(IFormColors.H_HOVER_LIGHT, colors.getColor(IFormColors.H_HOVER_LIGHT)); >+ head.putColor(IFormColors.H_HOVER_FULL, colors.getColor(IFormColors.H_HOVER_FULL)); >+ head.putColor(IFormColors.TB_TOGGLE, colors.getColor(IFormColors.TB_TOGGLE)); >+ head.putColor(IFormColors.TB_TOGGLE_HOVER, colors.getColor(IFormColors.TB_TOGGLE_HOVER)); >+ >+ Composite informationComp = new Composite(head, SWT.NONE); >+ informationComp.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));//new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL)); >+ informationComp.setLayout(new GridLayout(3, false)); >+ >+ imageHyperlink = new ImageHyperlink(informationComp, SWT.NONE); >+ >+ titleHyperlink = new Hyperlink(informationComp, SWT.WRAP); >+ setHeaderFontSizeAndStyle(titleHyperlink); >+ >+ closeLink = new ImageHyperlink(informationComp, SWT.NONE); >+ closeLink.setImage(CommonImages.getImage(CommonImages.NOTIFICATION_CLOSE)); >+ GridDataFactory.fillDefaults().align(SWT.END, SWT.BEGINNING).applyTo(closeLink); >+ closeLink.addHyperlinkListener(new HyperlinkAdapter() { >+ @Override >+ public void linkActivated(HyperlinkEvent e) { >+ closeMessage(); >+ >+ } >+ >+ }); >+ >+ new Label(informationComp, SWT.NONE); >+ >+ descriptionLabel = new Label(informationComp, SWT.WRAP); >+ GridDataFactory.swtDefaults().span(2, 1).applyTo(descriptionLabel); >+ constructed = true; >+ return head; >+ } >+ >+ private void closeMessage() { >+ if (currentMessage != null) { >+ setHidden(true); >+ TasksUiPlugin.getDefault().getPreferenceStore().setValue( >+ ITasksUiPreferenceConstants.LAST_SERVICE_MESSAGE_ID, currentMessage.getId()); >+ } >+ } >+ >+ public void setHidden(boolean hidden) { >+ headData.exclude = hidden; >+ if (constructed) { >+ parent.layout(true); >+ } >+ } >+ >+ // From EditorUtil >+ private static Font setHeaderFontSizeAndStyle(Control text) { >+ float sizeFactor = 1.2f; >+ Font initialFont = text.getFont(); >+ FontData[] fontData = initialFont.getFontData(); >+ for (FontData element : fontData) { >+ element.setHeight((int) (element.getHeight() * sizeFactor)); >+ element.setStyle(element.getStyle() | SWT.BOLD); >+ } >+ final Font textFont = new Font(text.getDisplay(), fontData); >+ text.setFont(textFont); >+ text.addDisposeListener(new DisposeListener() { >+ public void widgetDisposed(DisposeEvent e) { >+ textFont.dispose(); >+ } >+ }); >+ Color color = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getColorRegistry().get( >+ CommonThemes.COLOR_COMPLETED); >+ text.setForeground(color); >+ return textFont; >+ } >+ >+ public void setServiceMessage(final ServiceMessage message) { >+ if (message != null) { >+ String lastMessageId = TasksUiPlugin.getDefault().getPreferenceStore().getString( >+ ITasksUiPreferenceConstants.LAST_SERVICE_MESSAGE_ID); >+ if (!lastMessageId.equals(message.getId())) { >+ currentMessage = message; >+ Display.getDefault().asyncExec(new Runnable() { >+ >+ public void run() { >+ if (message != null) { >+ setTitle(message.getTitle()); >+ setDescription(message.getDescription()); >+ setTitleImage(Dialog.getImage(message.getImage())); >+ setHidden(false); >+ } else { >+ setHidden(true); >+ } >+ >+ } >+ }); >+ } >+ } >+ } >+ >+} >#P org.eclipse.mylyn.tasks.core >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.core/META-INF/MANIFEST.MF,v >retrieving revision 1.365 >diff -u -r1.365 MANIFEST.MF >--- META-INF/MANIFEST.MF 11 Apr 2010 19:49:55 -0000 1.365 >+++ META-INF/MANIFEST.MF 7 May 2010 19:26:03 -0000 >@@ -14,6 +14,7 @@ > org.eclipse.mylyn.internal.tasks.core;x-friends:="org.eclipse.mylyn.tasks.ui,org.eclipse.mylyn.tasks.bugs", > org.eclipse.mylyn.internal.tasks.core.data;x-friends:="org.eclipse.mylyn.tasks.ui,org.eclipse.mylyn.tasks.bugs", > org.eclipse.mylyn.internal.tasks.core.externalization;x-friends:="org.eclipse.mylyn.tasks.ui,org.eclipse.mylyn.tasks.bugs", >+ org.eclipse.mylyn.internal.tasks.core.servicemessage, > org.eclipse.mylyn.internal.tasks.core.sync;x-friends:="org.eclipse.mylyn.tasks.ui,org.eclipse.mylyn.tasks.bugs", > org.eclipse.mylyn.tasks.core, > org.eclipse.mylyn.tasks.core.data, >Index: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageXmlHandler.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageXmlHandler.java >diff -N src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageXmlHandler.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageXmlHandler.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,70 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 Tasktop Technologies 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: >+ * Tasktop Technologies - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.core.servicemessage; >+ >+import org.xml.sax.Attributes; >+import org.xml.sax.SAXException; >+import org.xml.sax.helpers.DefaultHandler; >+ >+public class ServiceMessageXmlHandler extends DefaultHandler { >+ >+ private StringBuilder characters; >+ >+ private final ServiceMessage message = new ServiceMessage(); >+ >+ @Override >+ public void characters(char[] ch, int start, int length) throws SAXException { >+ characters.append(ch, start, length); >+ } >+ >+ @Override >+ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { >+ characters = new StringBuilder(); >+ } >+ >+ @Override >+ public void endElement(String uri, String localName, String qName) throws SAXException { >+ >+ String parsedText = characters.toString(); >+ ServiceMessage.Element element; >+ try { >+ element = ServiceMessage.Element.valueOf(qName.trim()); >+ switch (element) { >+ case id: >+ message.id = parsedText; >+ break; >+ case description: >+ message.description = parsedText; >+ break; >+ case title: >+ message.title = parsedText; >+ break; >+ case url: >+ message.url = parsedText; >+ break; >+ case image: >+ message.image = parsedText; >+ break; >+ } >+ } catch (RuntimeException e) { >+ if (e instanceof IllegalArgumentException) { >+ // ignore unrecognized elements >+ return; >+ } >+ throw e; >+ } >+ } >+ >+ public ServiceMessage getMessage() { >+ return message; >+ } >+} >Index: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageManager.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageManager.java >diff -N src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageManager.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessageManager.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,172 @@ >+/******************************************************************************* >+ * Copyright (c) 2004, 2008 Tasktop Technologies. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Tasktop EULA >+ * which accompanies this distribution, and is available at >+ * http://tasktop.com/legal >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.core.servicemessage; >+ >+import java.io.InputStream; >+import java.util.HashSet; >+import java.util.Set; >+ >+import javax.xml.parsers.SAXParser; >+import javax.xml.parsers.SAXParserFactory; >+ >+import org.apache.commons.httpclient.HostConfiguration; >+import org.apache.commons.httpclient.HttpClient; >+import org.apache.commons.httpclient.HttpStatus; >+import org.apache.commons.httpclient.methods.GetMethod; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.Status; >+import org.eclipse.core.runtime.SubProgressMonitor; >+import org.eclipse.core.runtime.jobs.IJobChangeEvent; >+import org.eclipse.core.runtime.jobs.Job; >+import org.eclipse.core.runtime.jobs.JobChangeAdapter; >+import org.eclipse.mylyn.commons.core.StatusHandler; >+import org.eclipse.mylyn.commons.net.AbstractWebLocation; >+import org.eclipse.mylyn.commons.net.WebLocation; >+import org.eclipse.mylyn.commons.net.WebUtil; >+import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; >+ >+// Todo: use Last-Modified and ETag headers >+public class ServiceMessageManager { >+ >+ protected static final long START_DELAY = 30 * 1000; >+ >+ protected static final long RECHECK_DELAY = 2 * 60 * 60 * 1000; >+ >+ private static final String USER_AGENT = "MylynServiceMessageManager"; //$NON-NLS-1$ >+ >+// private static final String URL = "http://tasktop.com/support/messages/dashboardMessage.php"; >+ private String serviceMessageUrl; >+ >+ private ServiceMessage currentMessage = null; >+ >+ private Job messageCheckJob; >+ >+ private final Set<IServiceMessageListener> listeners = new HashSet<IServiceMessageListener>(); >+ >+ private final HttpClient httpClient = new HttpClient(WebUtil.getConnectionManager()); >+ >+ public ServiceMessageManager(String serviceMessageUrl) { >+ >+ this.serviceMessageUrl = serviceMessageUrl; >+ >+ WebUtil.configureHttpClient(httpClient, USER_AGENT); >+ >+ } >+ >+ public void start() { >+ if (messageCheckJob == null) { >+ messageCheckJob = new Job("Checking for new Service Message") { //$NON-NLS-1$ >+ @Override >+ protected IStatus run(IProgressMonitor monitor) { >+ >+ updateServiceMessage(monitor); >+ >+ return Status.OK_STATUS; >+ } >+ >+ }; >+ messageCheckJob.setSystem(true); >+ messageCheckJob.addJobChangeListener(new JobChangeAdapter() { >+ @Override >+ public void done(IJobChangeEvent event) { >+ if (messageCheckJob != null) { >+ messageCheckJob.schedule(RECHECK_DELAY); >+ } >+ } >+ }); >+ } >+ messageCheckJob.schedule(START_DELAY); >+ } >+ >+ public void stop() { >+ if (messageCheckJob != null) { >+ messageCheckJob.cancel(); >+ messageCheckJob = null; >+ } >+ } >+ >+ public void setServiceMessageUrl(String url) { >+ this.serviceMessageUrl = url; >+ } >+ >+ public void addServiceMessageListener(IServiceMessageListener listener) { >+ listeners.add(listener); >+ } >+ >+ public void removeServiceMessageListener(IServiceMessageListener listener) { >+ listeners.remove(listener); >+ } >+ >+ private void notifyListeners(ServiceMessage message) { >+ for (IServiceMessageListener listener : listeners) { >+ listener.setServiceMessage(message); >+ } >+ } >+ >+ public ServiceMessage getServiceMessage() { >+ return currentMessage; >+ } >+ >+ /** >+ * Public for testing >+ */ >+ public void updateServiceMessage(IProgressMonitor monitor) { >+ GetMethod getMethod = null; >+ try { >+ >+ HostConfiguration hostConfiguration = null; >+ AbstractWebLocation location = null; >+ >+ location = new WebLocation(serviceMessageUrl); >+ hostConfiguration = WebUtil.createHostConfiguration(httpClient, location, >+ new SubProgressMonitor(monitor, 1)); >+ >+ getMethod = new GetMethod(serviceMessageUrl); >+ >+ httpClient.getHttpConnectionManager().getParams().setSoTimeout(WebUtil.getConnectionTimeout()); >+ >+ int status = WebUtil.execute(httpClient, hostConfiguration, getMethod, monitor); >+ >+ if (status == HttpStatus.SC_OK) { >+ InputStream in = WebUtil.getResponseBodyAsStream(getMethod, monitor); >+ ServiceMessageXmlHandler handler = new ServiceMessageXmlHandler(); >+ try { >+ SAXParserFactory factory = SAXParserFactory.newInstance(); >+ factory.setValidating(false); >+ SAXParser parser = factory.newSAXParser(); >+ parser.parse(in, handler); >+ } finally { >+ in.close(); >+ } >+ >+ ServiceMessage message = handler.getMessage(); >+ if (message.id != null) { >+ currentMessage = message; >+ notifyListeners(message); >+ } >+ >+ } else { >+ StatusHandler.log(new Status(IStatus.WARNING, ITasksCoreConstants.ID_PLUGIN, >+ "Http error retrieving service message: " + HttpStatus.getStatusText(status))); //$NON-NLS-1$ >+ } >+ } catch (Exception e) { >+ StatusHandler.log(new Status(IStatus.WARNING, ITasksCoreConstants.ID_PLUGIN, >+ "Http error retrieving service message.", e)); //$NON-NLS-1$ >+ } finally { >+ try { >+ if (getMethod != null) { >+ getMethod.releaseConnection(); >+ } >+ } catch (Throwable t) { >+ // ignore >+ } >+ } >+ } >+} >Index: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/IServiceMessageListener.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/IServiceMessageListener.java >diff -N src/org/eclipse/mylyn/internal/tasks/core/servicemessage/IServiceMessageListener.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/core/servicemessage/IServiceMessageListener.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,18 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 Tasktop Technologies 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: >+ * Tasktop Technologies - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.core.servicemessage; >+ >+public interface IServiceMessageListener { >+ >+ public void setServiceMessage(ServiceMessage message); >+ >+} >Index: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessage.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessage.java >diff -N src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessage.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/core/servicemessage/ServiceMessage.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,50 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 Tasktop Technologies 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: >+ * Tasktop Technologies - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.core.servicemessage; >+ >+public class ServiceMessage { >+ >+ public enum Element { >+ id, title, description, url, image >+ }; >+ >+ String id; >+ >+ String title; >+ >+ String description; >+ >+ String url; >+ >+ String image; >+ >+ public String getId() { >+ return id; >+ } >+ >+ public String getTitle() { >+ return title; >+ } >+ >+ public String getDescription() { >+ return description; >+ } >+ >+ public String getUrl() { >+ return url; >+ } >+ >+ public String getImage() { >+ return image; >+ } >+ >+} >#P org.eclipse.mylyn.tasks.tests >Index: src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java,v >retrieving revision 1.87 >diff -u -r1.87 AllTasksTests.java >--- src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java 4 Mar 2010 18:41:15 -0000 1.87 >+++ src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java 7 May 2010 19:26:04 -0000 >@@ -30,6 +30,7 @@ > import org.eclipse.mylyn.tasks.tests.ui.editor.RepositoryCompletionProcessorTest; > import org.eclipse.mylyn.tasks.tests.ui.editor.TaskEditorPartDescriptorTest; > import org.eclipse.mylyn.tasks.tests.ui.editor.TaskUrlHyperlinkDetectorTest; >+import org.eclipse.mylyn.tasks.tests.util.ServiceMessageManagerTest; > > /** > * @author Mik Kersten >@@ -102,6 +103,7 @@ > suite.addTestSuite(PlanningPartTest.class); > suite.addTestSuite(RepositoryCompletionProcessorTest.class); > suite.addTestSuite(TaskAttributeDiffTest.class); >+ suite.addTestSuite(ServiceMessageManagerTest.class); > // XXX long running tests, put back? > //suite.addTestSuite(QueryExportImportTest.class); > //suite.addTestSuite(BackgroundSaveTest.class); >Index: src/org/eclipse/mylyn/tasks/tests/util/ServiceMessageManagerTest.java >=================================================================== >RCS file: src/org/eclipse/mylyn/tasks/tests/util/ServiceMessageManagerTest.java >diff -N src/org/eclipse/mylyn/tasks/tests/util/ServiceMessageManagerTest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/tasks/tests/util/ServiceMessageManagerTest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,59 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 Tasktop Technologies 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: >+ * Tasktop Technologies - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.tasks.tests.util; >+ >+import java.io.ByteArrayInputStream; >+import java.io.InputStream; >+ >+import javax.xml.parsers.SAXParser; >+import javax.xml.parsers.SAXParserFactory; >+ >+import junit.framework.TestCase; >+ >+import org.eclipse.core.runtime.NullProgressMonitor; >+import org.eclipse.mylyn.internal.tasks.core.servicemessage.ServiceMessage; >+import org.eclipse.mylyn.internal.tasks.core.servicemessage.ServiceMessageManager; >+import org.eclipse.mylyn.internal.tasks.core.servicemessage.ServiceMessageXmlHandler; >+ >+public class ServiceMessageManagerTest extends TestCase { >+ >+ public void testRetrievingMessage() throws Exception { >+ ServiceMessageManager manager = new ServiceMessageManager("http://eclipse.org/mylyn/messageTest.xml"); >+ manager.updateServiceMessage(new NullProgressMonitor()); >+ ServiceMessage message = manager.getServiceMessage(); >+ >+ assertEquals("1", message.getId()); >+ assertEquals("140 character description here....", message.getDescription()); >+ assertEquals("Mylyn 3.4 now available!", message.getTitle()); >+ assertEquals("http://eclipse.org/mylyn/downloads", message.getUrl()); >+ assertEquals("Mylyn 3.4 now available!", message.getTitle()); >+ assertEquals("dialog_messasge_info_image", message.getImage()); >+ } >+ >+ public void testParsingMessageXml() throws Exception { >+ String messageXml = "<ServiceMessage> <id>1</id><description>140 character description here....</description><title>Mylyn 3.4 now available!</title><url>http://eclipse.org/mylyn/downloads</url><image>dialog_messasge_info_image</image></ServiceMessage>"; >+ InputStream is = new ByteArrayInputStream(messageXml.getBytes("UTF-8")); >+ SAXParserFactory factory = SAXParserFactory.newInstance(); >+ factory.setValidating(false); >+ SAXParser parser = factory.newSAXParser(); >+ ServiceMessageXmlHandler handler = new ServiceMessageXmlHandler(); >+ parser.parse(is, handler); >+ ServiceMessage message = handler.getMessage(); >+ >+ assertEquals("1", message.getId()); >+ assertEquals("140 character description here....", message.getDescription()); >+ assertEquals("Mylyn 3.4 now available!", message.getTitle()); >+ assertEquals("http://eclipse.org/mylyn/downloads", message.getUrl()); >+ assertEquals("Mylyn 3.4 now available!", message.getTitle()); >+ assertEquals("dialog_messasge_info_image", message.getImage()); >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 263528
:
167544
|
167547
|
167548
|
167550
|
169594
|
169595
|
169603
|
169740
|
169741
|
169747
|
169882
|
169902
|
170600
|
170980
|
171059
|
171060