Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfiguration.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfiguration.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfiguration.java (working copy) @@ -57,6 +57,8 @@ private boolean resolveBeforeLaunch; + private boolean useExtendedResolveId; + /** * attributes attached to the container but not IvyDE related (Webtools or AspectJfor instance) */ @@ -188,7 +190,15 @@ public void setResolveBeforeLaunch(boolean resolveBeforeLaunch) { this.resolveBeforeLaunch = resolveBeforeLaunch; } + + public boolean isUseExtendedResolveId() { + return useExtendedResolveId; + } + public void setUseExtendedResolveId(boolean useExtendedResolveId) { + this.useExtendedResolveId = useExtendedResolveId; + } + public IJavaProject getJavaProject() { return javaProject; } @@ -329,6 +339,13 @@ return resolveBeforeLaunch; } + public boolean isInheritedUseExtendedResolveId() { + if (!isAdvancedProjectSpecific) { + return IvyPlugin.getPreferenceStoreHelper().isUseExtendedResolveId(); + } + return useExtendedResolveId; + } + public String toString() { return ivyXmlPath + (javaProject == null ? "" : " in '" + javaProject.getProject().getName() + "'"); Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java (working copy) @@ -28,6 +28,8 @@ import java.util.List; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; +import org.apache.ivy.core.module.id.ModuleRevisionId; +import org.apache.ivy.core.resolve.ResolveOptions; import org.apache.ivyde.eclipse.FakeProjectManager; import org.apache.ivyde.eclipse.IvyDEException; import org.apache.ivyde.eclipse.IvyPlugin; @@ -326,4 +328,34 @@ descriptor.toIvyFile(container.getState().getIvyFile()); } } + + /** + * Build the resolve id used when reading and writing resolve reports. + * + * @param conf The IvyClasspathContainerConfiguration indicating if extended resolve id is being used. + * @param md The ModuleDescriptor to be resolved. + * @return The resolve id. + */ + public static String buildResolveId(IvyClasspathContainerConfiguration conf, ModuleDescriptor md) { + StringBuilder sb = new StringBuilder(ResolveOptions.getDefaultResolveId(md)); + if (conf.isInheritedUseExtendedResolveId()) { + ModuleRevisionId mrid = md.getModuleRevisionId(); + String sts = md.getStatus(); + String bch = mrid.getBranch(); + String rev = mrid.getRevision(); + sb.append("-"); + if (sts != null) { + sb.append(sts); + } + sb.append("-"); + if (bch != null) { + sb.append(bch); + } + sb.append("-"); + if (rev != null) { + sb.append(rev); + } + } + return sb.toString(); + } } Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java (working copy) @@ -247,10 +247,10 @@ public URL getReportUrl() throws IvyDEException { Ivy ivy = state.getIvy(); ModuleDescriptor md = state.getModuleDescriptor(); - String resolveId = ResolveOptions.getDefaultResolveId(md); + String resolveId = IvyClasspathUtil.buildResolveId(conf, md); try { return ivy.getResolutionCacheManager().getConfigurationResolveReportInCache(resolveId, - md.getConfigurationsNames()[0]).toURL(); + md.getConfigurationsNames()[0]).toURI().toURL(); } catch (MalformedURLException e) { // should never happen throw new RuntimeException(e); Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java (working copy) @@ -86,6 +86,8 @@ private Button resolveBeforeLaunchCheck; + private Button useExtendedResolveIdCheck; + private Button settingsProjectSpecificButton; private Button advancedProjectSpecificButton; @@ -224,6 +226,7 @@ conf.setAlphaOrder(alphaOrderCheck.getSelectionIndex() == 1); conf.setResolveInWorkspace(resolveInWorkspaceCheck.getSelection()); conf.setResolveBeforeLaunch(resolveBeforeLaunchCheck.getSelection()); + conf.setUseExtendedResolveId(useExtendedResolveIdCheck.getSelection()); } else { conf.setAdvancedProjectSpecific(false); } @@ -519,6 +522,13 @@ resolveBeforeLaunchCheck .setToolTipText("Trigger a resolve before each run of any kind of java launch configuration"); + useExtendedResolveIdCheck = new Button(configComposite, SWT.CHECK); + useExtendedResolveIdCheck.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, + false, 3, 1)); + useExtendedResolveIdCheck.setText("Use extended resolve id"); + useExtendedResolveIdCheck + .setToolTipText("Will append status, branch and revision info to the default resolve id"); + Label label = new Label(configComposite, SWT.NONE); label.setText("Order of the classpath entries:"); @@ -576,12 +586,14 @@ alphaOrderCheck.select(conf.isAlphaOrder() ? 1 : 0); resolveInWorkspaceCheck.setSelection(conf.isResolveInWorkspace()); resolveBeforeLaunchCheck.setSelection(conf.isResolveBeforeLaunch()); + useExtendedResolveIdCheck.setSelection(conf.isUseExtendedResolveId()); } else { advancedProjectSpecificButton.setSelection(false); acceptedSuffixesTypesComposite.init(helper.getContainerMappingSetup()); alphaOrderCheck.select(helper.isAlphOrder() ? 1 : 0); resolveInWorkspaceCheck.setSelection(helper.isResolveInWorkspace()); resolveBeforeLaunchCheck.setSelection(helper.isResolveBeforeLaunch()); + useExtendedResolveIdCheck.setSelection(helper.isUseExtendedResolveId()); } updateFieldsStatusSettings(); @@ -611,6 +623,7 @@ alphaOrderCheck.setEnabled(projectSpecific); resolveInWorkspaceCheck.setEnabled(projectSpecific); resolveBeforeLaunchCheck.setEnabled(projectSpecific); + useExtendedResolveIdCheck.setEnabled(projectSpecific); } public void initialize(IJavaProject p, IClasspathEntry[] currentEntries) { Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java (working copy) @@ -168,6 +168,10 @@ conf.setResolveBeforeLaunch(Boolean.valueOf(value).booleanValue()); conf.setAdvancedProjectSpecific(true); } + else if (parameter[0].equals("useExtendedResolveId")) { + conf.setUseExtendedResolveId(Boolean.valueOf(value).booleanValue()); + conf.setAdvancedProjectSpecific(true); + } } if (conf.isAdvancedProjectSpecific()) { // in this V1 version, it is just some paranoid check @@ -281,6 +285,7 @@ append(path, "alphaOrder", conf.isAlphaOrder()); append(path, "resolveInWorkspace", conf.isResolveInWorkspace()); append(path, "resolveBeforeLaunch", conf.isResolveBeforeLaunch()); + append(path, "useExtendedResolveId", conf.isUseExtendedResolveId()); } } catch (UnsupportedEncodingException e) { IvyPlugin.log(IStatus.ERROR, UTF8_ERROR, e); Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java (working copy) @@ -194,7 +194,7 @@ boolean parsingOk = true; for (int i = 0; i < confs.length && parsingOk; i++) { File report = ivy.getResolutionCacheManager().getConfigurationResolveReportInCache( - ResolveOptions.getDefaultResolveId(md), confs[i]); + IvyClasspathUtil.buildResolveId(conf, md), confs[i]); parsingOk = false; if (report.exists()) { // found a report, try to parse it. @@ -221,6 +221,7 @@ private boolean resolve() throws ParseException, IOException { ResolveOptions resolveOption = new ResolveOptions().setConfs(confs); resolveOption.setValidate(ivy.getSettings().doValidate()); + resolveOption.setResolveId(IvyClasspathUtil.buildResolveId(conf, md)); ResolveReport report = ivy.resolve(md, resolveOption); problemMessages = report.getAllProblemMessages(); @@ -261,6 +262,7 @@ ResolveOptions options = new ResolveOptions(); options.setRefresh(true); options.setUseCacheOnly(true); + //options.setResolveId(IvyClasspathUtil.buildResolveId(conf, md)); ResolvedModuleRevision dependency = depResolver.getDependency(depDescriptor, new ResolveData(ivy.getResolveEngine(), options)); if (dependency != null) { @@ -332,6 +334,7 @@ RetrieveOptions c = new RetrieveOptions(); c.setSync(conf.getInheritedRetrieveSync()); c.setConfs(conf.getInheritedRetrieveConfs().split(",")); + c.setResolveId(IvyClasspathUtil.buildResolveId(conf, md)); String inheritedRetrieveTypes = conf.getInheritedRetrieveTypes(); if (inheritedRetrieveTypes != null && !inheritedRetrieveTypes.equals("*")) { c.setArtifactFilter(new ArtifactTypeFilter(IvyClasspathUtil Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java (revision 2) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceInitializer.java (working copy) @@ -103,6 +103,8 @@ public static final boolean DEFAULT_RESOLVE_BEFORE_LAUNCH = false; + public static final boolean DEFAULT_USE_EXTENDED_RESOLVE_ID = false; + public static final int DEFAULT_RESOLVE_ON_STARTUP = 1; public static final boolean DEFAULT_AUTO_RESOLVE_ON_CLOSE = true; Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java (revision 2) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/PreferenceConstants.java (working copy) @@ -68,6 +68,8 @@ public static final String RESOLVE_BEFORE_LAUNCH = "resolveBeforeLaunch"; + public static final String USE_EXTENDED_RESOLVE_ID = "useExtendedResolveId"; + public static final String PROPERTY_FILES = "propertyFiles"; public static final String LOAD_SETTINGS_ON_DEMAND = "loadSettingsOnDemand"; Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java (revision 2) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/IvyDEPreferenceStoreHelper.java (working copy) @@ -135,6 +135,14 @@ prefStore.setValue(PreferenceConstants.RESOLVE_BEFORE_LAUNCH, resolveBeforeLaunch); } + public boolean isUseExtendedResolveId() { + return prefStore.getBoolean(PreferenceConstants.USE_EXTENDED_RESOLVE_ID); + } + + public void setUseExtendedResolveId(boolean useExtendedResolveId) { + prefStore.setValue(PreferenceConstants.USE_EXTENDED_RESOLVE_ID, useExtendedResolveId); + } + public String getOrganization() { return prefStore.getString(PreferenceConstants.ORGANISATION); } Index: org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/ClasspathPreferencePage.java =================================================================== --- org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/ClasspathPreferencePage.java (revision 1) +++ org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/preferences/ClasspathPreferencePage.java (working copy) @@ -40,6 +40,8 @@ private Button resolveInWorkspaceCheck; private Button resolveBeforeLaunchCheck; + + private Button useExtendedResolveIdCheck; private Combo alphaOrderCheck; @@ -73,6 +75,13 @@ resolveBeforeLaunchCheck .setToolTipText("Trigger a resolve before each run of any kind of java launch configuration"); + useExtendedResolveIdCheck = new Button(composite, SWT.CHECK); + useExtendedResolveIdCheck.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, + false, 3, 1)); + useExtendedResolveIdCheck.setText("Use extended resolve id"); + useExtendedResolveIdCheck + .setToolTipText("Will append status, branch and revision info to the default resolve id"); + Label label = new Label(composite, SWT.NONE); label.setText("Order of the classpath entries:"); @@ -98,6 +107,7 @@ IvyDEPreferenceStoreHelper helper = IvyPlugin.getPreferenceStoreHelper(); resolveInWorkspaceCheck.setSelection(helper.isResolveInWorkspace()); resolveBeforeLaunchCheck.setSelection(helper.isResolveBeforeLaunch()); + useExtendedResolveIdCheck.setSelection(helper.isUseExtendedResolveId()); alphaOrderCheck.select(helper.isAlphOrder() ? 1 : 0); acceptedSuffixesTypesComposite.init(helper.getContainerMappingSetup()); } @@ -106,6 +116,7 @@ IvyDEPreferenceStoreHelper helper = IvyPlugin.getPreferenceStoreHelper(); helper.setResolveInWorkspace(resolveInWorkspaceCheck.getSelection()); helper.setResolveBeforeLaunch(resolveBeforeLaunchCheck.getSelection()); + helper.setUseExtendedResolveId(useExtendedResolveIdCheck.getSelection()); helper.setAlphOrder(alphaOrderCheck.getSelectionIndex() == 1); helper.setContainerMappingSetup(acceptedSuffixesTypesComposite.getContainerMappingSetup()); return true; @@ -114,6 +125,7 @@ protected void performDefaults() { resolveInWorkspaceCheck.setSelection(PreferenceInitializer.DEFAULT_RESOLVE_IN_WORKSPACE); resolveBeforeLaunchCheck.setSelection(PreferenceInitializer.DEFAULT_RESOLVE_BEFORE_LAUNCH); + useExtendedResolveIdCheck.setSelection(PreferenceInitializer.DEFAULT_USE_EXTENDED_RESOLVE_ID); alphaOrderCheck.select(PreferenceInitializer.DEFAULT_ALPHABETICAL_ORDER ? 1 : 0); acceptedSuffixesTypesComposite.init(PreferenceInitializer.DEFAULT_CONTAINER_MAPPING_SETUP); }