/*
* This is a common dao with basic CRUD operations and is not limited to any
* persistent layer implementation
*
* Copyright (C) 2008 Imran M Yousuf (imyousuf@smartitengineering.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package com.smartitengineering.version.impl.jgit.service;
import com.smartitengineering.util.bean.BeanFactoryRegistrar;
import com.smartitengineering.util.bean.annotations.Aggregator;
import com.smartitengineering.util.bean.annotations.InjectableField;
import com.smartitengineering.version.api.factory.VersionAPI;
import com.smartitengineering.version.impl.jgit.domain.Author;
import com.smartitengineering.version.impl.jgit.domain.Commit;
import com.smartitengineering.version.impl.jgit.domain.Resource;
import com.smartitengineering.version.impl.jgit.domain.Revision;
import java.util.LinkedHashSet;
/**
*
* @author imyousuf
*/
@Aggregator(contextName = "com.smartitnengineering.smart-dao.smart-version-jgit")
public class MetaFactory {
private static MetaFactory factory;
@InjectableField(beanName = "metaRCSConfig")
private RCSConfig config;
@InjectableField
private MetaRCSService metaRCSService;
public RCSConfig getConfig() {
if (config == null) {
config = new RCSConfig();
config.setAllowNoChangeCommit(false);
config.setConcurrentWriteOperations(1);
}
return config;
}
public MetaRCSService getMetaRCSService() {
return metaRCSService;
}
private MetaFactory() {
BeanFactoryRegistrar.aggregate(this);
}
public static final MetaFactory getInstance() {
if (factory == null) {
factory = new MetaFactory();
}
return factory;
}
public static Commit transformAPICommit(
final com.smartitengineering.version.api.Commit apiCommit) {
Commit commit = new Commit();
commit.setCommitId(apiCommit.getCommitId());
commit.setCommitMessage(apiCommit.getCommitMessage());
Author committer = new Author();
committer.setName(apiCommit.getAuthor().getName());
committer.setEmail(apiCommit.getAuthor().getEmail());
commit.setCommitter(committer);
commit.setDateTime(apiCommit.getCommitTime());
commit.setParentCommitId(apiCommit.getParentCommitId());
for (com.smartitengineering.version.api.Revision apiRevision : apiCommit.
getRevisions()) {
commit.getRevisions().add(transformAPIRevision(commit, apiRevision));
}
return commit;
}
public static Revision transformAPIRevision(
final Commit commit,
final com.smartitengineering.version.api.Revision apiRevision) {
Revision revision = new Revision();
revision.setCommit(commit);
Resource resource = new Resource();
resource.setResourceId(apiRevision.getResource().getId());
resource.setDeleted(apiRevision.getResource().isDeleted());
resource.setMimeType(apiRevision.getResource().getMimeType());
revision.setResource(resource);
revision.setRevisionId(apiRevision.getRevisionId());
return revision;
}
public static com.smartitengineering.version.api.Commit transformMetaCommit(
Commit commit) {
com.smartitengineering.version.api.Author apiAuthor = VersionAPI.
createAuthor(commit.getCommitter().getName(), commit.getCommitter().
getEmail());
LinkedHashSet<com.smartitengineering.version.api.Revision> apiRevisions =
new LinkedHashSet<com.smartitengineering.version.api.Revision>(commit.getRevisions().
size());
for (Revision revision : commit.getRevisions()) {
apiRevisions.add(transformMetaRevision(revision));
}
return VersionAPI.createCommit(apiRevisions, commit.getCommitId(),
commit.getParentCommitId(), commit.getCommitMessage(), apiAuthor,
commit.getDateTime());
}
public static com.smartitengineering.version.api.Revision transformMetaRevision(
Revision revision) {
final com.smartitengineering.version.api.Resource apiResource;
if (VersionAPI.getInstance().getVersionControlReadDao() == null) {
apiResource = VersionAPI.createResource(revision.getResource().
getResourceId(), "", revision.getResource().isDeleted(),
revision.getResource().getMimeType());
}
else {
final com.smartitengineering.version.api.Resource apiResourceFromApi =
VersionAPI.getInstance().getVersionControlReadDao().
getResourceByRevision(
revision.getRevisionId(), revision.getResource().getResourceId());
apiResource = VersionAPI.createResource(revision.getResource().
getResourceId(), apiResourceFromApi.getContent(),
revision.getResource().isDeleted(), revision.getResource().
getMimeType());
}
return VersionAPI.createRevision(apiResource, revision.getRevisionId());
}
}