class MetadataCreator {

    public Metadata create() {
        return MetadataBuilder.newMetadata()
                .withPath(Paths.convert(path))
                .withRealPath(Paths.convert(path.toRealPath()))
                .withCheckinComment(getCheckinComment())
                .withLastContributor(getLastContributor())
                .withCreator(getCreator())
                .withLastModified(getLastModified())
                .withDateCreated(getDateCreated())
                .withSubject(getSubject())
                .withType(getType())
                .withExternalRelation(getExternalRelation())
                .withExternalSource(getExternalSource())
                .withDescription(getDescription())
                .withTags(getTags())
                .withDiscussion(getDiscussion())
                .withLockInfo(retrieveLockInfo(Paths.convert(path)))
                .withVersion(getVersion())
                .withGenerated(getGenerated())
                .build();
    }

    public  MetadataCreator(Path path,
                           IOService configIOService,
                           SessionInfo sessionInfo,
                           DublinCoreView dublinCoreView,
                           DiscussionView discussionView,
                           OtherMetaView otherMetaView,
                           VersionAttributeView versionAttributeView,
                           GeneratedAttributesView generatedAttributesView);

}