package org.codefaces.ui.internal.commands;
import java.util.ArrayList;
import java.util.Collection;
import org.codefaces.core.models.Repo;
import org.codefaces.core.models.RepoCredential;
import org.codefaces.core.models.RepoFile;
import org.codefaces.core.models.RepoFileInfo;
import org.codefaces.core.models.RepoFolder;
import org.codefaces.core.models.RepoFolderInfo;
import org.codefaces.core.models.RepoFolderRoot;
import org.codefaces.core.models.RepoInfo;
import org.codefaces.core.models.RepoResource;
import org.codefaces.core.models.RepoResourceType;
import org.eclipse.core.runtime.IPath;
public class RepoModelTestingUtils {
private static class MockRepoFolderInfo extends RepoFolderInfo{
public MockRepoFolderInfo() {
super(null);
}
private Collection<RepoResource> children = new ArrayList<RepoResource>();
public void addChild(RepoResource child){
children.add(child);
}
@Override
public Collection<RepoResource> getChildren() {
return children;
}
@Override
public boolean hasChildren() {
return !getChildren().isEmpty();
}
}
private static class MockRepoFileInfo extends RepoFileInfo{
public MockRepoFileInfo() {
super(null, null, null, null, 0);
}
private Collection<RepoResource> children = new ArrayList<RepoResource>();
@Override
public Collection<RepoResource> getChildren() {
return children;
}
@Override
public boolean hasChildren() {
return !getChildren().isEmpty();
}
}
private static class MockRepoInfo extends RepoInfo{
public MockRepoInfo() {
super(null);
}
private Collection<RepoResource> children = new ArrayList<RepoResource>();
public void addChild(RepoResource child){
children.add(child);
}
@Override
public Collection<RepoResource> getChildren() {
return children;
}
@Override
public boolean hasChildren() {
return !getChildren().isEmpty();
}
}
private static class MockRepo extends Repo{
protected MockRepo(String kind, String url, String name,
RepoCredential credential, RepoInfo repoInfo,
RepoFolderInfo rootInfo) {
super(kind, url, name, credential, repoInfo, rootInfo);
}
}
private static class MockRepoFile extends RepoFile{
protected MockRepoFile(RepoFolderRoot root, RepoResource parent,
String id, String name, RepoFileInfo info) {
super(root, parent, id, name, info);
}
}
private static class MockRepoFolder extends RepoFolder{
protected MockRepoFolder(RepoFolderRoot root, RepoResource parent,
String id, String name, RepoResourceType type,
RepoFolderInfo info) {
super(root, parent, id, name, type, info);
}
}
public static RepoResource createMockRepoResourceFromPath(String mockRepoKind,
String mockUrl, String mockUser, String mockPassword, IPath mockPath, boolean isFile) {
MockRepoInfo mockRepoInfo = new MockRepoInfo();
MockRepoFolderInfo mockRootInfo = new MockRepoFolderInfo();
MockRepo repo = new MockRepo(mockRepoKind, mockUrl, "repoName",
new RepoCredential(mockUser, mockPassword), mockRepoInfo, mockRootInfo);
mockRepoInfo.addChild(repo.getRoot());
String[] segments = mockPath.segments();
RepoResource currResource = repo.getRoot();
MockRepoFolderInfo currInfo = mockRootInfo;
for(int i=0; i < segments.length; i++){
MockRepoFolderInfo folderInfo = new MockRepoFolderInfo();
RepoResource resource;
if(isFile && (i == segments.length - 1)){
MockRepoFileInfo fileInfo = new MockRepoFileInfo();
resource = new MockRepoFile(repo.getRoot(), currResource,
segments[i], segments[i], fileInfo);
}
else{
resource = new MockRepoFolder(repo.getRoot(), currResource,
segments[i], segments[i], RepoResourceType.FOLDER, folderInfo);
}
currInfo.addChild(resource);
currResource = resource;
currInfo = folderInfo;
}
return currResource;
}
}