public override bool Transform(IProjectManifest templateManifest, IProjectEnvironment environment, IProjectEnvironment templateEnvironment)
        {
            string rootDirectory = _manifestRepository.GetProjectDirectory(environment);
            ITemplateContext context = BuildTemplateContext(_fileSystem, _processor, environment);
            foreach (FileDTO file in templateManifest.Files)
            {
                string templateRoot = _manifestRepository.GetProjectDirectory(templateEnvironment);
                string fileTemplatePath = JoinTemplatePath(templateRoot, file.Source);
                string fileProcessedPath = _processor.Process(fileTemplatePath, context);

                if (!_fileSystem.Exists(fileProcessedPath))
                    throw new FileNotFoundException(
                        string.Format(CultureInfo.CurrentUICulture, nuresources.FileTransformation_MissingFile, fileProcessedPath));

                string fileContent = _fileSystem.ReadToEnd(fileProcessedPath);
                string processedFileContent = _processor.Process(fileContent, context);

                string fileTemplateDestinationPath = JoinTemplatePath(rootDirectory, file.Destination);
                string fileProcessedDestinationPath = _processor.Process(fileTemplateDestinationPath, context);

                _fileSystem.Write(fileProcessedDestinationPath, processedFileContent);
                file.Source = string.Empty;
                file.Destination = fileProcessedDestinationPath;
            }
            return true;
        }
 public Manifest Build(IProjectManifest projectManifest)
 {
     Manifest manifest = new Manifest();
     manifest.folders = new List<FolderDTO>(projectManifest.Directories).ToArray();
     manifest.files = new List<FileDTO>(projectManifest.Files).ToArray();
     manifest.packages = new List<PackageDTO>(projectManifest.Packages).ToArray();
     return manifest;
 }
        public void LoadFromIspac(string filePath, string password)
        {
            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException($"File {filePath} does not exist or you don't have permissions to access it.", filePath);
            }

            if (!filePath.EndsWith(".ispac", StringComparison.OrdinalIgnoreCase))
            {
                throw new InvalidExtensionException(filePath, "ispac");
            }

            using (var ispacStream = new FileStream(filePath, FileMode.Open))
            {
                using (var ispacArchive = new ZipArchive(ispacStream, ZipArchiveMode.Read))
                {
                    foreach (var ispacArchiveEntry in ispacArchive.Entries)
                    {
                        var fileName = ispacArchiveEntry.FullName;
                        using (var fileStream = ispacArchiveEntry.Open())
                        {
                            switch (Path.GetExtension(fileName))
                            {
                            case ".manifest":
                                _projectManifest = new ProjectManifest();
                                _projectManifest.Initialize(fileStream, password);
                                break;

                            case ".params":
                                _projectParams = new ProjectParams();
                                _projectParams.Initialize(fileStream, password);
                                break;

                            case ".dtsx":
                                var package = new Package();
                                package.Initialize(fileStream, password);
                                _packages.Add(fileName, package);
                                break;

                            case ".conmgr":
                                var projectConnection = new ProjectConnection();
                                projectConnection.Initialize(fileStream, password);
                                _projectConnections.Add(fileName, projectConnection);
                                break;

                            case ".xml":
                                break;
                            }
                        }
                    }
                }
            }

            _isLoaded = true;
        }
 public void Process(IProjectManifest templateManifest, IProjectEnvironment environment, IProjectEnvironment templateEnvironment)
 {
     if(_elements != null)
     {
         foreach (ITransformationElement transformationElement in _elements)
         {
             if (!transformationElement.Transform(templateManifest, environment, templateEnvironment))
                 break;
         }
     }
 }
 public override void Save(IProjectEnvironment environment, IProjectManifest projectManifest)
 {
     string manifestPath = GetManifestPath(environment);
     ProjectManifestBuilder builder = new ProjectManifestBuilder();
     XmlSerializer serializer = new XmlSerializer(typeof (Manifest));
     using (StringWriter writer = new StringWriter())
     {
         serializer.Serialize(writer, builder.Build(projectManifest));
         PrepareManifestDirectory(environment);
         _fileSystem.Write(manifestPath, writer.ToString());
     }
 }
 public override bool Transform(IProjectManifest templateManifest, IProjectEnvironment environment, IProjectEnvironment templateEnvironment)
 {
     string rootDirectory = _manifestRepository.GetProjectDirectory(environment);
     ITemplateContext context = BuildTemplateContext(_fileSystem, _templateProcessor, environment);
     foreach (FolderDTO folder in templateManifest.Directories)
     {
         string folderTemplatePath = _fileSystem.Combine(rootDirectory, folder.Path);
         string folderProcessedPath = _templateProcessor.Process(folderTemplatePath, context);
         _fileSystem.CreateDirectory(folderProcessedPath);
         folder.Path = folderProcessedPath;
     }
     return true;
 }
 public abstract bool Transform(IProjectManifest templateManifest, IProjectEnvironment environment, IProjectEnvironment templateEnvironment);
        public void LoadFromDtproj(string filePath, string configurationName, string password)
        {
            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException($"File {filePath} does not exist.", filePath);
            }

            if (!filePath.EndsWith(".dtproj", StringComparison.OrdinalIgnoreCase))
            {
                throw new InvalidExtensionException(filePath, "dtproj");
            }

            var dtprojXmlDoc = new XmlDocument();

            dtprojXmlDoc.Load(filePath);
            ValidateDeploymentMode(dtprojXmlDoc);

            var nsManager = dtprojXmlDoc.GetNameSpaceManager();

            var projectXmlNode = dtprojXmlDoc.SelectSingleNode("/Project/DeploymentModelSpecificContent/Manifest/SSIS:Project", nsManager);

            if (projectXmlNode == null)
            {
                throw new InvalidXmlException("Project Manifest Node was not found.", dtprojXmlDoc);
            }

            var projectDirectory = Path.GetDirectoryName(filePath);

            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(projectXmlNode.OuterXml);
                    writer.Flush();
                    stream.Position = 0;

                    _projectManifest = new ProjectManifest();
                    _projectManifest.Initialize(stream, password);
                }
            }

            _projectParams = new ProjectParams();
            _projectParams.Initialize(Path.Combine(projectDirectory, "Project.params"), password);

            foreach (var connectionManagerName in _projectManifest.ConnectionManagerNames)
            {
                var projectConnection = new ProjectConnection();
                projectConnection.Initialize(Path.Combine(projectDirectory, connectionManagerName), password);
                _projectConnections.Add(connectionManagerName, projectConnection);
            }

            foreach (var packageName in _projectManifest.PackageNames)
            {
                var package = new Package();
                package.Initialize(Path.Combine(projectDirectory, packageName), password);
                _packages.Add(packageName, package);
            }

            _isLoaded = true;

            var configuration = new Configuration(configurationName);

            configuration.Initialize(filePath, password);
            foreach (var configurationParameter in configuration.Parameters)
            {
                UpdateParameter(configurationParameter.Key, configurationParameter.Value.Value, ParameterSource.Configuration);
            }

            var userConfigurationFilePath = $"{filePath}.user";
            var userConfiguration         = new UserConfiguration(configurationName);

            if (File.Exists(userConfigurationFilePath))
            {
                userConfiguration.Initialize(userConfigurationFilePath, password);
                foreach (var userConfigurationParameter in userConfiguration.Parameters)
                {
                    UpdateParameter(userConfigurationParameter.Key, null, ParameterSource.Configuration);
                }
            }
        }
 public virtual void Save(IProjectEnvironment environment, IProjectManifest projectManifest)
 {
     throw new NotImplementedException();
 }