You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-user@ant.apache.org by Gilles Scokart <gs...@gmail.com> on 2007/05/04 13:19:15 UTC

ModuleRevisionId factories and constructors



In ModuleRevisionId, is there any reason to have both factory methods and
public constructor mixed.  I'm wondering which one should be used.  And why
there is 2 different style (if there is any reasons).

Here is all the methods that exists:

    public static ModuleRevisionId newInstance(String organisation, String
name, String revision) {
        return new ModuleRevisionId(new ModuleId(organisation, name),
revision);
    }
    public static ModuleRevisionId newInstance(String organisation, String
name, String revision, Map extraAttributes) {
        return new ModuleRevisionId(new ModuleId(organisation, name),
revision, extraAttributes);
    }
    public static ModuleRevisionId newInstance(String organisation, String
name, String branch, String revision) {
        return new ModuleRevisionId(new ModuleId(organisation, name),
branch, revision);
    }
    public static ModuleRevisionId newInstance(String organisation, String
name, String branch, String revision, Map extraAttributes) {
        return new ModuleRevisionId(new ModuleId(organisation, name),
branch, revision, extraAttributes);
    }
	public static ModuleRevisionId newInstance(ModuleRevisionId mrid,
String rev) {
		return new ModuleRevisionId(mrid.getModuleId(),
mrid.getBranch(), rev, mrid.getExtraAttributes());
	}
    
    public ModuleRevisionId(ModuleId moduleId, String revision) {
        this(moduleId, null, revision, null);
    }
    public ModuleRevisionId(ModuleId moduleId, String branch, String
revision) {
        this(moduleId, branch, revision, null);
    }
    public ModuleRevisionId(ModuleId moduleId, String revision, Map
extraAttributes) {
    	this(moduleId, null, revision, extraAttributes);
    }
    public ModuleRevisionId(ModuleId moduleId, String branch, String
revision, Map extraAttributes) {
        super(null, extraAttributes);
        _moduleId = moduleId;
        _branch = branch == null ?
IvyContext.getContext().getSettings().getDefaultBranch(moduleId) : branch;
        _revision = revision == null ? Ivy.getWorkingRevision() : revision;
        _hash = _hashCode(); //stored for performance reasons, hashCode is
very used in many maps
        setStandardAttribute(IvyPatternHelper.ORGANISATION_KEY,
_moduleId.getOrganisation());
        setStandardAttribute(IvyPatternHelper.MODULE_KEY,
_moduleId.getName());
        setStandardAttribute(IvyPatternHelper.BRANCH_KEY, _branch);
        setStandardAttribute(IvyPatternHelper.REVISION_KEY, _revision);
    }


Gilles


Re: ModuleRevisionId factories and constructors

Posted by Xavier Hanin <xa...@gmail.com>.
On 5/4/07, Gilles Scokart <gs...@gmail.com> wrote:
> In ModuleRevisionId, is there any reason to have both factory methods and
> public constructor mixed.  I'm wondering which one should be used.  And why
> there is 2 different style (if there is any reasons).
The rationale behind the use of the two is the following one: when
arguments used to construct the object are properties of the object,
we use a constructor. When it's something different which requires
some processing to be converted in object properties, we use a static
factory method.

The problem is that we have many constructors for backward
compatiblity reason, which clutters the code. If you have ideas to
improve that, they are welcome!

Xavier

>
> Here is all the methods that exists:
>
>     public static ModuleRevisionId newInstance(String organisation, String
> name, String revision) {
>         return new ModuleRevisionId(new ModuleId(organisation, name),
> revision);
>     }
>     public static ModuleRevisionId newInstance(String organisation, String
> name, String revision, Map extraAttributes) {
>         return new ModuleRevisionId(new ModuleId(organisation, name),
> revision, extraAttributes);
>     }
>     public static ModuleRevisionId newInstance(String organisation, String
> name, String branch, String revision) {
>         return new ModuleRevisionId(new ModuleId(organisation, name),
> branch, revision);
>     }
>     public static ModuleRevisionId newInstance(String organisation, String
> name, String branch, String revision, Map extraAttributes) {
>         return new ModuleRevisionId(new ModuleId(organisation, name),
> branch, revision, extraAttributes);
>     }
>         public static ModuleRevisionId newInstance(ModuleRevisionId mrid,
> String rev) {
>                 return new ModuleRevisionId(mrid.getModuleId(),
> mrid.getBranch(), rev, mrid.getExtraAttributes());
>         }
>
>     public ModuleRevisionId(ModuleId moduleId, String revision) {
>         this(moduleId, null, revision, null);
>     }
>     public ModuleRevisionId(ModuleId moduleId, String branch, String
> revision) {
>         this(moduleId, branch, revision, null);
>     }
>     public ModuleRevisionId(ModuleId moduleId, String revision, Map
> extraAttributes) {
>         this(moduleId, null, revision, extraAttributes);
>     }
>     public ModuleRevisionId(ModuleId moduleId, String branch, String
> revision, Map extraAttributes) {
>         super(null, extraAttributes);
>         _moduleId = moduleId;
>         _branch = branch == null ?
> IvyContext.getContext().getSettings().getDefaultBranch(moduleId) : branch;
>         _revision = revision == null ? Ivy.getWorkingRevision() : revision;
>         _hash = _hashCode(); //stored for performance reasons, hashCode is
> very used in many maps
>         setStandardAttribute(IvyPatternHelper.ORGANISATION_KEY,
> _moduleId.getOrganisation());
>         setStandardAttribute(IvyPatternHelper.MODULE_KEY,
> _moduleId.getName());
>         setStandardAttribute(IvyPatternHelper.BRANCH_KEY, _branch);
>         setStandardAttribute(IvyPatternHelper.REVISION_KEY, _revision);
>     }
>
>
> Gilles
>
>


-- 
Learn Ivy at ApacheCon: http://www.eu.apachecon.com/
Manage your dependencies with Ivy!
http://incubator.apache.org/ivy/