Author: xavier Date: Tue May 26 15:50:41 2009 New Revision: 778769 URL: http://svn.apache.org/viewvc?rev=778769&view=rev Log: IMPROVEMENT: Pre and post retrieve artifact events (IVY-1084)
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/EndRetrieveArtifactEvent.java (with props) ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/RetrieveArtifactEvent.java (with props) ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/StartRetrieveArtifactEvent.java (with props) Modified: ant/ivy/core/trunk/CHANGES.txt ant/ivy/core/trunk/doc/settings/triggers.html ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java ant/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java Modified: ant/ivy/core/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=778769&r1=778768&r2=778769&view=diff ============================================================================== --- ant/ivy/core/trunk/CHANGES.txt (original) +++ ant/ivy/core/trunk/CHANGES.txt Tue May 26 15:50:41 2009 @@ -87,6 +87,8 @@ trunk ===================================== +- IMPROVEMENT: Pre and post retrieve artifact events (IVY-1084) + - FIX: Ibiblio resolver throws IndexOutOfBoundsException when using snapshot versions with usepoms='false' (IVY-1028) - FIX: Wrong BuildException messages (findmodules) (IVY-1056) - FIX: PomModuleDescriptorBuilder does not resolve ejb type dependencies to jar extension (IVY-1058) (thanks to Andrey Lomakin) Modified: ant/ivy/core/trunk/doc/settings/triggers.html URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/doc/settings/triggers.html?rev=778769&r1=778768&r2=778769&view=diff ============================================================================== --- ant/ivy/core/trunk/doc/settings/triggers.html (original) +++ ant/ivy/core/trunk/doc/settings/triggers.html Tue May 26 15:50:41 2009 @@ -171,6 +171,40 @@ </td> <td>Fired at the end of the retrieve process.</td> </tr> + <tr><td>pre-retrieve-artifact <br/><span class="since">since 2.1</span></td> + <td> + <ul> + <li>organisation</li>the organisation of the artifact which is about to be retrieved + <li>module</li>the name of the module of the artifact which is about to be retrieved + <li>revision</li>the revision of the the artifact which is about to be retrieved + <li>artifact</li>the name of the the artifact which is about to be retrieved + <li>type</li>the type of the the artifact which is about to be retrieved + <li>ext</li>the extension of the the artifact which is about to be retrieved + <li>metadata</li>true if the retrieved artifact is a metadata artifact, false for published artifacts + <li>size</li>the size in bytes of the retrieved artifact + <li>from</li>the absolute path from which it will be retrieved (usually a location in cache) + <li>to</li>the absolute path to which it will be retrieved + </ul> + </td> + <td>Fired before an artifact is retrieved from cache to a local location</td> + </tr> + <tr><td>post-retrieve-artifact <br/><span class="since">since 2.1</span></td> + <td> + <ul> + <li>organisation</li>the organisation of the artifact which has just been retrieved + <li>module</li>the name of the module of the artifact which has just been retrieved + <li>revision</li>the revision of the the artifact which has just been retrieved + <li>artifact</li>the name of the the artifact which has just been retrieved + <li>type</li>the type of the the artifact which has just been retrieved + <li>ext</li>the extension of the the artifact which has just been retrieved + <li>metadata</li>true if the retrieved artifact is a metadata artifact, false for published artifacts + <li>size</li>the size in bytes of the retrieved artifact + <li>from</li>the absolute path from which it has just been retrieved (usually a location in cache) + <li>to</li>the absolute path to which it has just been retrieved + </ul> + </td> + <td>Fired after an artifact is retrieved from cache to a local location</td> + </tr> <tr><td>pre-publish-artifact <br/><span class="since">since 2.0</span></td> <td> <ul> Added: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/EndRetrieveArtifactEvent.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/EndRetrieveArtifactEvent.java?rev=778769&view=auto ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/EndRetrieveArtifactEvent.java (added) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/EndRetrieveArtifactEvent.java Tue May 26 15:50:41 2009 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.ivy.core.event.retrieve; + +import java.io.File; + +import org.apache.ivy.core.report.ArtifactDownloadReport; + +public class EndRetrieveArtifactEvent extends RetrieveArtifactEvent { + public static final String NAME = "pre-retrieve-artifact"; + + public EndRetrieveArtifactEvent( + ArtifactDownloadReport report, File destFile) { + super(NAME, report, destFile); + } +} Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/EndRetrieveArtifactEvent.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/RetrieveArtifactEvent.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/RetrieveArtifactEvent.java?rev=778769&view=auto ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/RetrieveArtifactEvent.java (added) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/RetrieveArtifactEvent.java Tue May 26 15:50:41 2009 @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.ivy.core.event.retrieve; + +import java.io.File; + +import org.apache.ivy.core.event.IvyEvent; +import org.apache.ivy.core.module.descriptor.Artifact; +import org.apache.ivy.core.report.ArtifactDownloadReport; + +public class RetrieveArtifactEvent extends IvyEvent { + private ArtifactDownloadReport report; + + private File destFile; + + public RetrieveArtifactEvent( + String name, + ArtifactDownloadReport report, File destFile) { + super(name); + addArtifactAttributes(report.getArtifact()); + + this.report = report; + this.destFile = destFile; + addAttribute("from", report.getLocalFile().getAbsolutePath()); + addAttribute("to", destFile.getAbsolutePath()); + addAttribute("size", String.valueOf(destFile.length())); + } + + protected void addArtifactAttributes(Artifact artifact) { + addMridAttributes(artifact.getModuleRevisionId()); + addAttributes(artifact.getAttributes()); + addAttribute("metadata", String.valueOf(artifact.isMetadata())); + } + + public File getDestFile() { + return destFile; + } + + public ArtifactDownloadReport getReport() { + return report; + } +} Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/RetrieveArtifactEvent.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/StartRetrieveArtifactEvent.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/StartRetrieveArtifactEvent.java?rev=778769&view=auto ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/StartRetrieveArtifactEvent.java (added) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/StartRetrieveArtifactEvent.java Tue May 26 15:50:41 2009 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.ivy.core.event.retrieve; + +import java.io.File; + +import org.apache.ivy.core.report.ArtifactDownloadReport; + +public class StartRetrieveArtifactEvent extends RetrieveArtifactEvent { + public static final String NAME = "pre-retrieve-artifact"; + + public StartRetrieveArtifactEvent( + ArtifactDownloadReport report, File destFile) { + super(NAME, report, destFile); + } +} Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/retrieve/StartRetrieveArtifactEvent.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java?rev=778769&r1=778768&r2=778769&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java Tue May 26 15:50:41 2009 @@ -38,7 +38,9 @@ import org.apache.ivy.core.LogOptions; import org.apache.ivy.core.cache.ResolutionCacheManager; import org.apache.ivy.core.event.EventManager; +import org.apache.ivy.core.event.retrieve.EndRetrieveArtifactEvent; import org.apache.ivy.core.event.retrieve.EndRetrieveEvent; +import org.apache.ivy.core.event.retrieve.StartRetrieveArtifactEvent; import org.apache.ivy.core.event.retrieve.StartRetrieveEvent; import org.apache.ivy.core.module.descriptor.Artifact; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; @@ -128,11 +130,19 @@ File destFile = settings.resolveFile((String) it2.next()); if (!settings.isCheckUpToDate() || !upToDate(archive, destFile)) { Message.verbose("\t\tto " + destFile); + if (this.eventManager != null) { + this.eventManager.fireIvyEvent( + new StartRetrieveArtifactEvent(artifact, destFile)); + } if (options.isMakeSymlinks()) { FileUtil.symlink(archive, destFile, null, true); } else { FileUtil.copy(archive, destFile, null, true); } + if (this.eventManager != null) { + this.eventManager.fireIvyEvent( + new EndRetrieveArtifactEvent(artifact, destFile)); + } totalCopiedSize += destFile.length(); targetsCopied++; } else { Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java?rev=778769&r1=778768&r2=778769&view=diff ============================================================================== --- ant/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java (original) +++ ant/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java Tue May 26 15:50:41 2009 @@ -28,7 +28,9 @@ import org.apache.ivy.core.IvyPatternHelper; import org.apache.ivy.core.event.IvyEvent; import org.apache.ivy.core.event.IvyListener; +import org.apache.ivy.core.event.retrieve.EndRetrieveArtifactEvent; import org.apache.ivy.core.event.retrieve.EndRetrieveEvent; +import org.apache.ivy.core.event.retrieve.StartRetrieveArtifactEvent; import org.apache.ivy.core.event.retrieve.StartRetrieveEvent; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.report.ResolveReport; @@ -141,10 +143,12 @@ ModuleDescriptor md = report.getModuleDescriptor(); String pattern = "build/test/retrieve/[module]/[conf]/[artifact]-[revision].[ext]"; ivy.retrieve(md.getModuleRevisionId(), pattern, getRetrieveOptions()); - assertEquals(2, events.size()); + assertEquals(4, events.size()); assertTrue(events.get(0) instanceof StartRetrieveEvent); - assertTrue(events.get(1) instanceof EndRetrieveEvent); - EndRetrieveEvent ev = (EndRetrieveEvent) events.get(1); + assertTrue(events.get(1) instanceof StartRetrieveArtifactEvent); + assertTrue(events.get(2) instanceof EndRetrieveArtifactEvent); + assertTrue(events.get(3) instanceof EndRetrieveEvent); + EndRetrieveEvent ev = (EndRetrieveEvent) events.get(3); assertEquals(1, ev.getNbCopied()); assertEquals(0, ev.getNbUpToDate());