Author: lcorneliussen
Date: Fri Nov  4 16:31:33 2011
New Revision: 1197631

URL: http://svn.apache.org/viewvc?rev=1197631&view=rev
Log:
[NPANDAY-322, NPANDAY-476] Resync References 
Submitted by: Stoyan Damov

o Applied without changes.

Added:
    
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ArtifactUtils.cs
Modified:
    
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday.VisualStudio.Addin.csproj
    
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/Connect.cs
    
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ReferenceManager.cs
    incubator/npanday/trunk/pom.xml

Modified: 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday.VisualStudio.Addin.csproj
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday.VisualStudio.Addin.csproj?rev=1197631&r1=1197630&r2=1197631&view=diff
==============================================================================
--- 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday.VisualStudio.Addin.csproj
 (original)
+++ 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday.VisualStudio.Addin.csproj
 Fri Nov  4 16:31:33 2011
@@ -107,6 +107,7 @@ under the License.
     <Compile 
Include="NPanday\VisualStudio\Addin\RemoveArtifactsForm.Designer.cs">
       <DependentUpon>RemoveArtifactsForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="NPanday\VisualStudio\Addin\ArtifactUtils.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource 
Include="NPanday\VisualStudio\Addin\AddArtifactsForm.resx">

Added: 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ArtifactUtils.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ArtifactUtils.cs?rev=1197631&view=auto
==============================================================================
--- 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ArtifactUtils.cs
 (added)
+++ 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ArtifactUtils.cs
 Fri Nov  4 16:31:33 2011
@@ -0,0 +1,134 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Xml;
+
+namespace NPanday.VisualStudio.Addin
+{
+    static class ArtifactUtils
+    {
+        public static bool IsSnapshot(Artifact.Artifact artifact)
+        {
+            return artifact.Version.EndsWith("-SNAPSHOT");
+        }
+
+        public static bool Exists(Artifact.Artifact artifact)
+        {
+            return artifact.FileInfo.Exists;
+        }
+
+        public static bool DownloadFromRemoteRepository(Artifact.Artifact 
artifact, NPanday.Logging.Logger logger)
+        {
+            return 
NPanday.ProjectImporter.Digest.Model.Reference.DownloadArtifact(artifact, 
logger);
+        }
+
+        public static string GetArtifactReferenceFolder(Artifact.Artifact 
artifact, string referenceFolder)
+        {
+            //modified artifactFolder to match the .dll searched in 
NPanday.ProjectImporter.Digest.Model.Reference.cs
+            string artifactFolder = Path.Combine(
+                referenceFolder, 
+                string.Format("{0}\\{1}-{2}", 
+                    artifact.GroupId, 
+                    artifact.ArtifactId, 
+                    artifact.Version));
+            return artifactFolder;
+        }
+
+        public static string GetArtifactReferenceFilePath(Artifact.Artifact 
artifact, string referenceFolder)
+        {
+            string artifactReferenceFolder = 
GetArtifactReferenceFolder(artifact, referenceFolder);
+            Directory.CreateDirectory(artifactReferenceFolder);
+
+            string artifactReferenceFilePath = 
Path.Combine(artifactReferenceFolder,
+                String.Concat(artifact.ArtifactId, 
artifact.FileInfo.Extension));
+
+            return artifactReferenceFilePath;
+        }
+
+        public static DateTime GetArtifactTimestamp(Artifact.Artifact artifact)
+        {
+            // try maven-metadata-${repoId}.xml or maven-metadata-local.xml
+            string localRepoArtifactFolder = 
artifact.FileInfo.Directory.FullName;
+            string[] metadataFilePaths = 
Directory.GetFiles(localRepoArtifactFolder, "maven-metadata-*.xml");
+
+            DateTime metadataTimestamp;
+            if (!TryGetArtifactTimestampFromMetadataFiles(metadataFilePaths, 
out metadataTimestamp))
+            {
+                // if that fails, get the file's timestamp)
+                metadataTimestamp = new 
FileInfo(artifact.FileInfo.FullName).LastWriteTimeUtc;
+            }
+
+            return metadataTimestamp;
+        }
+
+        public static bool TryGetArtifactTimestampFromMetadataFiles(
+            IEnumerable<string> metadataFilePaths,
+            out DateTime timestamp)
+        {
+            foreach (string metadataFilePath in metadataFilePaths)
+            {
+                if (TryGetArtifactTimestampFromMetadataFile(metadataFilePath, 
out timestamp))
+                {
+                    return true;
+                }
+            }
+
+            timestamp = DateTime.MinValue;
+            return false;
+        }
+
+        public static bool TryGetArtifactTimestampFromMetadataFile(
+            string metadataFilePath,
+            out DateTime timestamp)
+        {
+            // Try to get the timestamp from metadata/versioning/lastUpdated
+            using (FileStream stream = new FileStream(metadataFilePath, 
FileMode.Open, FileAccess.Read, FileShare.Read))
+            {
+                XmlDocument doc = new XmlDocument();
+                doc.Load(stream);
+                XmlNode node = 
doc.SelectSingleNode("metadata/versioning/lastUpdated");
+                string nodeInnerText;
+                if (node != null && !String.IsNullOrEmpty(nodeInnerText = 
node.InnerText))
+                {
+                    string value = nodeInnerText.Trim();
+                    // format is yyyyMMddHHmmss e.g. 20111028030112)
+                    bool parsed = DateTime.TryParseExact(value,
+                                                         "yyyyMMddHHmmss",
+                                                         
CultureInfo.InvariantCulture,
+                                                         
DateTimeStyles.AssumeUniversal,
+                                                         out timestamp);
+                    if (parsed)
+                    {
+                        timestamp = timestamp.ToUniversalTime();
+                    }
+                    return parsed;
+                }
+            }
+
+            timestamp = DateTime.MinValue;
+            return false;
+        }
+
+        public static bool IsEarlierArtifactTimestamp(DateTime value, DateTime 
comparand)
+        {
+            return CompareDatesWithoutMilliseconds(value, comparand) < 0;
+        }
+
+        public static int CompareDatesWithoutMilliseconds(DateTime left, 
DateTime right)
+        {
+            DateTime l = CreateDateTimeWithoutMilliseconds(left);
+            DateTime r = CreateDateTimeWithoutMilliseconds(right);
+            return l.CompareTo(r);
+        }
+
+        public static DateTime CreateDateTimeWithoutMilliseconds(DateTime 
dateTime)
+        {
+            DateTime result = new DateTime(
+                dateTime.Year, dateTime.Month, dateTime.Day,
+                dateTime.Hour, dateTime.Minute, dateTime.Second, 0,
+                dateTime.Kind);
+            return result;
+        }
+    }
+}

Modified: 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/Connect.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/Connect.cs?rev=1197631&r1=1197630&r2=1197631&view=diff
==============================================================================
--- 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/Connect.cs
 (original)
+++ 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/Connect.cs
 Fri Nov  4 16:31:33 2011
@@ -1192,15 +1192,22 @@ namespace NPanday.VisualStudio.Addin
         CommandBarButton installButton;
         CommandBarButton deployButton;
         CommandBarButton buildButton;
-        CommandBarButton resetReferenceButton;
+        CommandBarButton resyncProjectReferencesButton;
+        CommandBarButton resyncProjectReferencesFromLocalRepositoryButton;
 
         private void createCurrentProjectMenu(CommandBarPopup ctl)
         {
-            resetReferenceButton = 
(CommandBarButton)ctl.Controls.Add(MsoControlType.msoControlButton,
+            resyncProjectReferencesButton = 
(CommandBarButton)ctl.Controls.Add(MsoControlType.msoControlButton,
                 System.Type.Missing, System.Type.Missing, 1, true);
-            resetReferenceButton.Visible = true;
-            resetReferenceButton.Caption = "Resync References";
-            resetReferenceButton.Click += new 
_CommandBarButtonEvents_ClickEventHandler(resetReferenceButton_Click);
+            resyncProjectReferencesButton.Visible = true;
+            resyncProjectReferencesButton.Caption = "Resync References";
+            resyncProjectReferencesButton.Click += new 
_CommandBarButtonEvents_ClickEventHandler(OnResyncProjectReferencesButtonClicked);
+
+            resyncProjectReferencesFromLocalRepositoryButton = 
(CommandBarButton)ctl.Controls.Add(MsoControlType.msoControlButton,
+                System.Type.Missing, System.Type.Missing, 1, true);
+            resyncProjectReferencesFromLocalRepositoryButton.Visible = true;
+            resyncProjectReferencesFromLocalRepositoryButton.Caption = "Resync 
References From Local Repository";
+            resyncProjectReferencesFromLocalRepositoryButton.Click += new 
_CommandBarButtonEvents_ClickEventHandler(OnResyncProjectReferencesFromLocalRepositoryButtonClicked);
 
             cleanButton = 
(CommandBarButton)ctl.Controls.Add(MsoControlType.msoControlButton,
                 System.Type.Missing, System.Type.Missing, 1, true);
@@ -1240,10 +1247,23 @@ namespace NPanday.VisualStudio.Addin
             buildControls.Add(deployButton);
             buildControls.Add(cleanButton);
             buildControls.Add(testButton);
-            buildControls.Add(resetReferenceButton);
+            buildControls.Add(resyncProjectReferencesButton);
+            
buildControls.Add(resyncProjectReferencesFromLocalRepositoryButton);
         }
 
-        void resetReferenceButton_Click(CommandBarButton Ctrl, ref bool 
CancelDefault)
+        void OnResyncProjectReferencesButtonClicked(CommandBarButton button, 
ref bool cancelDefault)
+        {
+            bool resyncFromRemoteRepository = true;
+            ResyncCurrentProjectArtifacts(resyncFromRemoteRepository);
+        }
+
+        void 
OnResyncProjectReferencesFromLocalRepositoryButtonClicked(CommandBarButton 
button, ref bool cancelDefault)
+        {
+            bool resyncFromRemoteRepository = false;
+            ResyncCurrentProjectArtifacts(resyncFromRemoteRepository);
+        }
+
+        private void ResyncCurrentProjectArtifacts(bool fromRemoteRepository)
         {
             refManagerHasError = false;
             outputWindowPane.OutputString(string.Format("\n[INFO] Re-syncing 
artifacts in {0} project... ", CurrentSelectedProject.Name));
@@ -1252,7 +1272,15 @@ namespace NPanday.VisualStudio.Addin
                 IReferenceManager refmanager = new ReferenceManager();
                 refmanager.OnError += new 
EventHandler<ReferenceErrorEventArgs>(refmanager_OnError);
                 
refmanager.Initialize((VSProject2)CurrentSelectedProject.Object);
-                refmanager.ResyncArtifacts(logger);
+
+                if (fromRemoteRepository)
+                {
+                    refmanager.ResyncArtifacts(logger);
+                }
+                else
+                {
+                    refmanager.ResyncArtifactsFromLocalRepository(logger);
+                }
 
                 if (!refManagerHasError)
                 {
@@ -1345,7 +1373,8 @@ namespace NPanday.VisualStudio.Addin
         CommandBarButton testAllButton;
         CommandBarButton installAllButton;
         CommandBarButton buildAllButton;
-        CommandBarButton resetAllButton;
+        CommandBarButton resyncSolutionReferencesButton;
+        CommandBarButton resyncSolutionReferencesFromLocalRepositoryButton;
 
         private void createAllProjectMenu(CommandBar commandBar, 
CommandBarControl control)
         {
@@ -1357,11 +1386,17 @@ namespace NPanday.VisualStudio.Addin
             ctlAll.BeginGroup = true;
             buildControls.Add(ctlAll);
 
-            resetAllButton = 
(CommandBarButton)ctlAll.Controls.Add(MsoControlType.msoControlButton,
+            resyncSolutionReferencesButton = 
(CommandBarButton)ctlAll.Controls.Add(MsoControlType.msoControlButton,
+                System.Type.Missing, System.Type.Missing, 1, true);
+            resyncSolutionReferencesButton.Visible = true;
+            resyncSolutionReferencesButton.Caption = "Resync References";
+            resyncSolutionReferencesButton.Click += new 
_CommandBarButtonEvents_ClickEventHandler(OnResyncSolutionReferencesButtonClicked);
+
+            resyncSolutionReferencesFromLocalRepositoryButton = 
(CommandBarButton)ctlAll.Controls.Add(MsoControlType.msoControlButton,
                 System.Type.Missing, System.Type.Missing, 1, true);
-            resetAllButton.Visible = true;
-            resetAllButton.Caption = "Resync References";
-            resetAllButton.Click += new 
_CommandBarButtonEvents_ClickEventHandler(resetAllButton_Click);
+            resyncSolutionReferencesFromLocalRepositoryButton.Visible = true;
+            resyncSolutionReferencesFromLocalRepositoryButton.Caption = 
"Resync References From Local Repository";
+            resyncSolutionReferencesFromLocalRepositoryButton.Click += new 
_CommandBarButtonEvents_ClickEventHandler(OnResyncSolutionReferencesFromLocalRepositoryButtonClicked);
 
             cleanAllButton = 
(CommandBarButton)ctlAll.Controls.Add(MsoControlType.msoControlButton,
                 System.Type.Missing, System.Type.Missing, 1, true);
@@ -1393,10 +1428,23 @@ namespace NPanday.VisualStudio.Addin
             buildControls.Add(installAllButton);
             buildControls.Add(cleanAllButton);
             buildControls.Add(testAllButton);
-            buildControls.Add(resetAllButton);
+            buildControls.Add(resyncSolutionReferencesButton);
+            
buildControls.Add(resyncSolutionReferencesFromLocalRepositoryButton);
         }
 
-        void resetAllButton_Click(CommandBarButton Ctrl, ref bool 
CancelDefault)
+        void OnResyncSolutionReferencesButtonClicked(CommandBarButton button, 
ref bool cancelDefault)
+        {
+            bool resyncFromRemoteRepository = true;
+            ResyncSolutionArtifacts(resyncFromRemoteRepository);
+        }
+
+        void 
OnResyncSolutionReferencesFromLocalRepositoryButtonClicked(CommandBarButton 
button, ref bool cancelDefault)
+        {
+            bool resyncFromRemoteRepository = false;
+            ResyncSolutionArtifacts(resyncFromRemoteRepository);
+        }
+
+        private void ResyncSolutionArtifacts(bool fromRemoteRepository)
         {
             refManagerHasError = false;
             outputWindowPane.OutputString("\n[INFO] Re-syncing artifacts in 
all projects... ");
@@ -1412,7 +1460,14 @@ namespace NPanday.VisualStudio.Addin
                             IReferenceManager mgr = new ReferenceManager();
                             mgr.OnError += new 
EventHandler<ReferenceErrorEventArgs>(refmanager_OnError);
                             mgr.Initialize((VSProject2)project.Object);
-                            mgr.ResyncArtifacts(logger);
+                            if (fromRemoteRepository)
+                            {
+                                mgr.ResyncArtifacts(logger);
+                            }
+                            else
+                            {
+                                mgr.ResyncArtifactsFromLocalRepository(logger);
+                            }
                             mgr = null;
                         }
                     }

Modified: 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ReferenceManager.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ReferenceManager.cs?rev=1197631&r1=1197630&r2=1197631&view=diff
==============================================================================
--- 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ReferenceManager.cs
 (original)
+++ 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/ReferenceManager.cs
 Fri Nov  4 16:31:33 2011
@@ -19,13 +19,9 @@
 //
 #endregion
 using System;
-using System.Collections.Generic;
-using System.Text;
 using System.IO;
 using NPanday.Model.Pom;
-using System.Windows.Forms;
 using EnvDTE;
-using EnvDTE80;
 
 namespace NPanday.VisualStudio.Addin
 {
@@ -42,6 +38,7 @@ namespace NPanday.VisualStudio.Addin
         string ReferenceFolder { get; }
         void CopyArtifact(Artifact.Artifact artifact, NPanday.Logging.Logger 
logger);
         void ResyncArtifacts(NPanday.Logging.Logger logger);
+        void ResyncArtifactsFromLocalRepository(NPanday.Logging.Logger logger);
         event EventHandler<ReferenceErrorEventArgs> OnError;
     }
 
@@ -66,10 +63,9 @@ namespace NPanday.VisualStudio.Addin
 
         public Artifact.Artifact Add(IReferenceInfo reference)
         {
-            if (!initialized)
-                throw new Exception("Reference manager not initialized.");
+            EnsureInitialized();
 
-            string artifactFileName = 
copyToReferenceFolder(reference.Artifact, referenceFolder);
+            string artifactFileName = 
CopyToReferenceFolder(reference.Artifact, referenceFolder);
 
             Artifact.Artifact a = reference.Artifact;
             
@@ -94,7 +90,7 @@ namespace NPanday.VisualStudio.Addin
             {
                 throw new Exception("Project has no valid pom file.");
             }
-            createReferenceFolder();
+            CreateReferenceFolder();
         }
 
         string referenceFolder;
@@ -114,72 +110,89 @@ namespace NPanday.VisualStudio.Addin
 
         public void CopyArtifact(Artifact.Artifact artifact, 
NPanday.Logging.Logger logger)
         {
-            if (!initialized)
-                throw new Exception("Reference manager not initialized.");
-
-            if (!artifact.FileInfo.Exists || 
artifact.Version.EndsWith("SNAPSHOT"))
-            {
-                if 
(!NPanday.ProjectImporter.Digest.Model.Reference.DownloadArtifact(artifact,logger))
-                {
-                    ReferenceErrorEventArgs e = new ReferenceErrorEventArgs();
-                    e.Message = string.Format("Unable to get the artifact {0} 
from any of your repositories.", artifact.ArtifactId);
-                    onError(e);
-                    return;
-                }
-            }
-
-            copyToReferenceFolder(artifact, referenceFolder);
+            CopyArtifactImpl(artifact, logger, 
ArtifactResyncSource.RemoteRepository);
         }
 
         public void ResyncArtifacts(NPanday.Logging.Logger logger)
         {
-            if (!initialized)
-                throw new Exception("Reference manager not initialized.");
-            getReferencesFromPom(logger);
+            ResyncArtifactsImpl(logger, ArtifactResyncSource.RemoteRepository);
+        }
+
+        public void ResyncArtifactsFromLocalRepository(NPanday.Logging.Logger 
logger)
+        {
+            ResyncArtifactsImpl(logger, ArtifactResyncSource.LocalRepository);
         }
 
         #endregion
 
         #region privates
 
-        static string copyToReferenceFolder(Artifact.Artifact artifact, string 
referenceFolder)
+        private enum ArtifactResyncSource
         {
-            //modified artifactFolder to match the .dll searched in 
NPanday.ProjectImporter.Digest.Model.Reference.cs
-            string artifactFolder = Path.Combine(referenceFolder, 
string.Format("{0}\\{1}-{2}", artifact.GroupId, artifact.ArtifactId, 
artifact.Version));
-            //string artifactFolder = Path.Combine(referenceFolder, 
string.Format("{0}\\{1}", artifact.GroupId, artifact.ArtifactId));
-            
-            DirectoryInfo di = new DirectoryInfo(artifactFolder);
-            if (!di.Exists)
-            {
-                di.Create();
-            }
-            
-            //string artifactFileName = Path.Combine(artifactFolder, 
artifact.FileInfo.Name);
-            string artifactFileName = Path.Combine(artifactFolder, 
artifact.ArtifactId+".dll");
+            RemoteRepository,
+            LocalRepository
+        }
 
-            // TODO: Probably we should use value of 
-            // <metadata>/<versioning>/<lastUpdated> node from maven metadata 
xml file 
-            // as an artifactTimestamp
-            DateTime artifactTimestamp = new 
FileInfo(artifact.FileInfo.FullName).LastWriteTime;
+        private void ResyncArtifactsImpl(
+            NPanday.Logging.Logger logger, 
+            ArtifactResyncSource artifactResyncSource)
+        {
+            EnsureInitialized();
+
+            GetReferencesFromPom(logger, artifactResyncSource);
+        }
 
-            if (!File.Exists(artifactFileName) ||
-                (artifactTimestamp.CompareTo(new 
FileInfo(artifactFileName).LastWriteTime) > 0))
+        private void CopyArtifactImpl(
+            Artifact.Artifact artifact, 
+            NPanday.Logging.Logger logger, 
+            ArtifactResyncSource artifactResyncSource)
+        {
+            EnsureInitialized();
+
+            bool isSnapshot = ArtifactUtils.IsSnapshot(artifact);
+            bool resyncFromRemoteRepo = artifactResyncSource == 
ArtifactResyncSource.RemoteRepository;
+
+            if (!ArtifactUtils.Exists(artifact) || (isSnapshot && 
resyncFromRemoteRepo))
             {
-                try
-                {
-                    byte[] contents = 
File.ReadAllBytes(artifact.FileInfo.FullName);
-                    File.WriteAllBytes(artifactFileName, contents);
-                }
-                catch (Exception ex)
+                if (!ArtifactUtils.DownloadFromRemoteRepository(artifact, 
logger))
                 {
-                    Console.WriteLine(ex.ToString());
+                    RaiseError("Unable to get the artifact {0} from any of 
your repositories.", artifact.ArtifactId);
+                    return;
                 }
             }
-            return artifactFileName;
+
+            CopyToReferenceFolder(artifact, referenceFolder);
         }
 
+        static string CopyToReferenceFolder(Artifact.Artifact artifact, string 
referenceFolder)
+        {
+            string artifactReferenceFilePath = 
ArtifactUtils.GetArtifactReferenceFilePath(artifact, referenceFolder);
 
-        void getReferencesFromPom(NPanday.Logging.Logger logger)
+            bool overwriteReferenceFile;
+            DateTime localRepoArtifactTimestamp = 
ArtifactUtils.GetArtifactTimestamp(artifact);
+            if (File.Exists(artifactReferenceFilePath))
+            {
+                DateTime referenceFileTimestamp = new 
FileInfo(artifactReferenceFilePath).LastWriteTimeUtc;
+                overwriteReferenceFile = 
ArtifactUtils.IsEarlierArtifactTimestamp(
+                    referenceFileTimestamp, 
+                    localRepoArtifactTimestamp);
+            }
+            else
+            {
+                overwriteReferenceFile = true;
+            }
+
+            if (overwriteReferenceFile)
+            {
+                File.Copy(artifact.FileInfo.FullName, 
artifactReferenceFilePath, true);
+                // set the timestamp of the local repo's artifact
+                new FileInfo(artifactReferenceFilePath).LastWriteTimeUtc = 
localRepoArtifactTimestamp;
+            }
+
+            return artifactReferenceFilePath;
+        }
+
+        void GetReferencesFromPom(NPanday.Logging.Logger logger, 
ArtifactResyncSource artifactResyncSource)
         {
             Artifact.ArtifactRepository repository = new 
NPanday.Artifact.ArtifactContext().GetArtifactRepository();
             NPanday.Model.Pom.Model m = 
NPanday.Utils.PomHelperUtility.ReadPomAsModel(new FileInfo(pomFile));
@@ -188,17 +201,41 @@ namespace NPanday.VisualStudio.Addin
             {
                 foreach (Dependency d in m.dependencies)
                 {
-                    // check if intra-project reference and copy
-                    // artifacts from remote repository only
-                    if (!isIntraProject(m, d) && d.classifier == null)
+                    // check if intra-project reference and copy artifacts
+                    if (!IsIntraProject(m, d) && d.classifier == null)
                     {
-                        CopyArtifact(repository.GetArtifact(d),logger);
+                        Artifact.Artifact artifact = repository.GetArtifact(d);
+                        CopyArtifactImpl(artifact, logger, 
artifactResyncSource);
                     }
                 }
             }
         }
 
-        bool isIntraProject(NPanday.Model.Pom.Model m, Dependency d)
+        private void EnsureInitialized()
+        {
+            if (!initialized)
+            {
+                throw new InvalidOperationException("Reference manager not 
initialized.");
+            }
+        }
+
+        private void RaiseError(string format, params object[] args)
+        {
+            ReferenceErrorEventArgs e = new ReferenceErrorEventArgs();
+            e.Message = string.Format(format, args);
+            RaiseError(e);
+        }
+
+        private void RaiseError(ReferenceErrorEventArgs e)
+        {
+            EventHandler<ReferenceErrorEventArgs> handler = OnError;
+            if (handler != null)
+            {
+                handler(this, e);
+            }
+        }
+
+        private bool IsIntraProject(NPanday.Model.Pom.Model m, Dependency d)
         {
             string pomGroupId = (m.parent != null) ? m.parent.groupId : 
m.groupId;
             if (d.groupId == pomGroupId)
@@ -217,12 +254,12 @@ namespace NPanday.VisualStudio.Addin
             return false;
         }
 
-        bool pomExist()
+        private bool pomExist()
         {
             return File.Exists(pomFile);
         }
 
-        void createReferenceFolder()
+        void CreateReferenceFolder()
         {
             DirectoryInfo di = new DirectoryInfo(referenceFolder);
             if (!di.Exists)
@@ -237,17 +274,8 @@ namespace NPanday.VisualStudio.Addin
 
         #region IReferenceManager Members
 
-
         public event EventHandler<ReferenceErrorEventArgs> OnError;
 
-        void onError(ReferenceErrorEventArgs e)
-        {
-            if (OnError != null)
-            {
-                OnError(this, e);
-            }
-        }
-
         #endregion
     }
 

Modified: incubator/npanday/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/pom.xml?rev=1197631&r1=1197630&r2=1197631&view=diff
==============================================================================
--- incubator/npanday/trunk/pom.xml (original)
+++ incubator/npanday/trunk/pom.xml Fri Nov  4 16:31:33 2011
@@ -259,6 +259,9 @@ under the License.
     <contributor>
       <name>Henrik Bie</name>
     </contributor>
+    <contributor>
+      <name>Stoyan Damov</name>
+    </contributor>
   </contributors>
   <modules> 
     <module>components</module>  


Reply via email to