diff options
author | fbecker | 2010-08-15 19:03:57 +0000 |
---|---|---|
committer | fbecker | 2010-08-15 19:03:57 +0000 |
commit | 773d3a50a32e756ca365e39a103938ade5aa355b (patch) | |
tree | 98547f33038958a4da0f0228202729cf23cb8a32 | |
parent | 1d50a596eee74e568b1bd88d272dd234ed363766 (diff) | |
download | org.eclipse.mylyn.tasks-773d3a50a32e756ca365e39a103938ade5aa355b.tar.gz org.eclipse.mylyn.tasks-773d3a50a32e756ca365e39a103938ade5aa355b.tar.xz org.eclipse.mylyn.tasks-773d3a50a32e756ca365e39a103938ade5aa355b.zip |
ASSIGNED - bug 321054: (automatic) updates of configuration can cause loss of attribute options
https://bugs.eclipse.org/bugs/show_bug.cgi?id=321054
3 files changed, 50 insertions, 6 deletions
diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java index 2dab796ae..6be626b5e 100644 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java +++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java @@ -27,6 +27,7 @@ import java.nio.charset.Charset; import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -696,6 +697,12 @@ public class BugzillaClient { } else { repositoryConfiguration.setETagValue(null); } + Header lastModifiedHeader = method.getResponseHeader("Last-Modified"); //$NON-NLS-1$ + if (lastModifiedHeader != null) { + repositoryConfiguration.setLastModifiedHeader(lastModifiedHeader.getValue()); + } else { + repositoryConfiguration.setLastModifiedHeader((Date) null); + } if (repositoryConfiguration != null) { boolean useXMLRPC = Boolean.parseBoolean(configParameters.get(IBugzillaConstants.BUGZILLA_USE_XMLRPC)); diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java index 5baf68e78..01dfb97fb 100644 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java +++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java @@ -739,18 +739,29 @@ public class BugzillaRepositoryConnector extends AbstractRepositoryConnector { configuration = repositoryConfigurations.get(repository.getRepositoryUrl()); if (configuration == null || forceRefresh) { String eTag = null; + Date lastModifiedHeader = null; if (configuration != null && !forceRefresh) { eTag = configuration.getETagValue(); + lastModifiedHeader = configuration.getLastModifiedHeader(); } BugzillaClient client = getClientManager().getClient(repository, monitor); configuration = client.getRepositoryConfiguration(monitor, eTag); + boolean newer = true; if (configuration != null) { - String configVersion = configuration.getInstallVersion().toString(); - String repositoryVersion = repository.getVersion(); - if (!configVersion.equals(repositoryVersion)) { - repository.setVersion(configVersion); + if (lastModifiedHeader != null) { + Date configLastModifiedHeader = configuration.getLastModifiedHeader(); + if (configLastModifiedHeader != null) { + newer = !configLastModifiedHeader.before(lastModifiedHeader); + } + } + if (newer) { + String configVersion = configuration.getInstallVersion().toString(); + String repositoryVersion = repository.getVersion(); + if (!configVersion.equals(repositoryVersion)) { + repository.setVersion(configVersion); + } + internalAddConfiguration(configuration); } - internalAddConfiguration(configuration); } } } diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java index 138b24537..bf3eef050 100644 --- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java +++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java @@ -13,8 +13,12 @@ package org.eclipse.mylyn.internal.bugzilla.core; import java.io.Serializable; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -33,10 +37,13 @@ import org.eclipse.mylyn.tasks.core.data.TaskOperation; * * @author Rob Elves * @author Charley Wang + * @author Frank Becker */ public class RepositoryConfiguration implements Serializable { - private static final long serialVersionUID = -7248029094079799975L; + // old value private static final long serialVersionUID = -7248029094079799975L; + + private static final long serialVersionUID = -7051029281842783666L; private String repositoryUrl = "<unknown>"; //$NON-NLS-1$ @@ -80,6 +87,8 @@ public class RepositoryConfiguration implements Serializable { private String eTagValue = null; + private Date lastModifiedHeader = null; + public RepositoryConfiguration() { } @@ -960,4 +969,21 @@ public class RepositoryConfiguration implements Serializable { entry.setDefaultMilestone(defaultMilestone); } + public Date getLastModifiedHeader() { + return lastModifiedHeader; + } + + public void setLastModifiedHeader(Date lastModifiedHeader) { + this.lastModifiedHeader = lastModifiedHeader; + } + + public void setLastModifiedHeader(String lastModifiedHeader) { + DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US); //$NON-NLS-1$ + try { + this.lastModifiedHeader = df.parse(lastModifiedHeader); + } catch (ParseException e) { + e.printStackTrace(); + } + } + } |