Author: brett Date: Sat Mar 2 01:51:41 2013 New Revision: 1451817 URL: http://svn.apache.org/r1451817 Log: reformat
Modified: incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/notes.md Modified: incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/notes.md URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/notes.md?rev=1451817&r1=1451816&r2=1451817&view=diff ============================================================================== --- incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/notes.md (original) +++ incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/notes.md Sat Mar 2 01:51:41 2013 @@ -1,10 +1,13 @@ # Project Importer Notes -The following notes are intended to partially document the current design, and primarily assist in future refactoring and cleanup efforts. +The following notes are intended to partially document the current design, +and primarily assist in future refactoring and cleanup efforts. ## POM Converters -Currently, there is a functional class, PomConverter, which is responsible for allocating the appropriate type of IPomConverter instance and executing its conversion methods, depending on the type of project. +Currently, there is a functional class, PomConverter, which is responsible +for allocating the appropriate type of IPomConverter instance and executing +its conversion methods, depending on the type of project. The PomConverter class handles making the parent project. @@ -33,33 +36,48 @@ The following are converted by the Norma The parent POM generation can be turned into a new project converter. -All converters can be made to work from the single abstract converter, with functionality pushed up. +All converters can be made to work from the single abstract converter, with +functionality pushed up. -The types can be turned into filters - single conversion stream, but additional elements process the model as it progresses. +The types can be turned into filters - single conversion stream, but +additional elements process the model as it progresses. Add a fallback project type for converting unrecognised projects to a basic POM. -The duplication of handling SCM URLs should be rationalised. In addition, the API refers to an "SCM tag", but it is constantly treated as an Subversion URL. A richer SCM structure should be possible to support different connection/viewer elements, as well as other SCM systems. - -AddPluginConfiguration in the AbstractPomConverter should rename the overloaded methods to be clearer what types of arguments are passed. There also appears to be some hardcoded configuration options in the one that takes properties - this appears to be a shortcut for certain types that could be clearer. +The duplication of handling SCM URLs should be rationalised. In addition, the +API refers to an "SCM tag", but it is constantly treated as an Subversion +URL. A richer SCM structure should be possible to support different +connection/viewer elements, as well as other SCM systems. + +AddPluginConfiguration in the AbstractPomConverter should rename the +overloaded methods to be clearer what types of arguments are passed. There +also appears to be some hardcoded configuration options in the one that takes +properties - this appears to be a shortcut for certain types that could be +clearer. ## Project Type Importers -The project type importers determine the structure of the project, and create POMs as appropriate. The following formats are supported: +The project type importers determine the structure of the project, and create +POMs as appropriate. The following formats are supported: - * "Abnormal" - represents a project structure that is not supported, for example if the project is outside of the solution directory - * Flat Multi Module - multiple projects where one is in the same directory as the solution + * "Abnormal" - represents a project structure that is not supported, for + example if the project is outside of the solution directory + * Flat Multi Module - multiple projects where one is in the same directory + as the solution * Flat Single Module - single project in the same directory as the solution * Single Module - single project in a subdirectory of the solution * Multi Module - multiple projects in subdirectories of the solution All derive from the AbstractProjectAlgorithm. -The inconsistency in naming should be corrected (importer on the interface, but the types are just "Project", and the base class is an "ProjectAlgorithm"). +The inconsistency in naming should be corrected (importer on the interface, +but the types are just "Project", and the base class is an +"ProjectAlgorithm"). ## Project Digesters -Has an interface for digesting a project, and a base class that provides a utility method. +Has an interface for digesting a project, and a base class that provides a +utility method. Two implementations: @@ -73,23 +91,36 @@ The "normal" digester performs the follo * add build properties * add build items - including resolving references -The web digester has a little duplication, but mostly omits the unnecessary pieces. - -Like with the converters, the web project need not be as unique and this might be better dealt with as a filter over a single digest process. It should at least factor out the common code. - -In addition, the existing POM file is read. This is used both for reimporting (see below), and for retaining dependencies on a full import. Ideally, this would only be read when needed, not in the digest process. +The web digester has a little duplication, but mostly omits the unnecessary +pieces. -The BaseProjectDigesterAlgorithm contains a method GetAssemblyName that seems to also digest the whole project for a single value. This could be slowing the process down and refactored to avoid the need. - -AddDependency looks for duplicates keyed only on group and artefact ID - if there are any with different types and/or classifiers (which is valid), they may not be added. +Like with the converters, the web project need not be as unique and this +might be better dealt with as a filter over a single digest process. It +should at least factor out the common code. + +In addition, the existing POM file is read. This is used both for reimporting +(see below), and for retaining dependencies on a full import. Ideally, this +would only be read when needed, not in the digest process. + +The BaseProjectDigesterAlgorithm contains a method GetAssemblyName that seems +to also digest the whole project for a single value. This could be slowing +the process down and refactored to avoid the need. + +AddDependency looks for duplicates keyed only on group and artefact ID - if +there are any with different types and/or classifiers (which is valid), they +may not be added. ## Parser -This only contains a solution parser, which should be removed in favour of EnvDTE. However, we don't want automation in the project importer library, so we should instead pass that information in to the importer (as there is very little actual data used from the solutions). +This only contains a solution parser, which should be removed in favour of +EnvDTE. However, we don't want automation in the project importer library, so +we should instead pass that information in to the importer (as there is very +little actual data used from the solutions). ## Validator -This does a small amount of validation, but primarily determines what project type importer to use. +This does a small amount of validation, but primarily determines what project +type importer to use. This should be folded into the project type importer structure. @@ -97,23 +128,37 @@ This also contains the project type enum ## Verifier -Despite the name, this seems to only be for re-syncing an existing POM when re-importing. +Despite the name, this seems to only be for re-syncing an existing POM when +re-importing. Should rename appropriately. -This could potentially be merged with the VS operations that modify the POM on the fly so that they behave the same way and there is less logic in the addin. - -Note that this contains a form and some message boxes to ask questions if the project structure changes. These should be moved into the add-in. These could potentially be passed in as change request listeners, or the API split to determine the changes, then apply them and let the add in determine what to ask in the middle. +This could potentially be merged with the VS operations that modify the POM +on the fly so that they behave the same way and there is less logic in the +addin. + +Note that this contains a form and some message boxes to ask questions if the +project structure changes. These should be moved into the add-in. These could +potentially be passed in as change request listeners, or the API split to +determine the changes, then apply them and let the add in determine what to +ask in the middle. ## Utility classes -A note on NPanday.Utils is worth making here. There's an odd split between utilities operating on Model.Pom - several copies exist in the POM converters that are also in the utilities. Ideally, the utilities library would be split into functional groups with POM operations added to Model.Pom directly (or a companion assembly), and moved out of the project importer. - -Some of the methods in here, such as HasPlugin, read the POM each time they are called. This could lead to many POM reads for a single import / addin operation that is a performance concern. +A note on NPanday.Utils is worth making here. There's an odd split between +utilities operating on Model.Pom - several copies exist in the POM converters +that are also in the utilities. Ideally, the utilities library would be split +into functional groups with POM operations added to Model.Pom directly (or a +companion assembly), and moved out of the project importer. + +Some of the methods in here, such as HasPlugin, read the POM each time they +are called. This could lead to many POM reads for a single import / addin +operation that is a performance concern. # Required test cases -The following are the test cases we need to exercise. Some are already present - they haven't been matched up. +The following are the test cases we need to exercise. Some are already +present - they haven't been matched up. ## Project Importer @@ -147,4 +192,5 @@ The following are the test cases we need ## Project Synchronization -The project sync API should be tested for reimporting existing projects with certain characteristics. \ No newline at end of file +The project sync API should be tested for reimporting existing projects with +certain characteristics.