package com.perforce.spark.repository;
import java.lang.reflect.Constructor;
import spark.Request;
import com.perforce.spark.artifact.ArtifactType;
import com.perforce.spark.site.GroupSite;
import com.perforce.spark.site.ProxySite;
import com.perforce.spark.site.SiteType;
import com.perforce.spark.store.GemStore;
import com.perforce.spark.store.MavenStore;
import com.perforce.spark.store.PerforceStore;
public class RepoFactory {
static String TYPE = "type";
public static RepoInterface create(Request request) throws Exception {
String siteStr = RepoFormID.SITE.get(request);
SiteType site = SiteType.parse(siteStr);
String typeStr = RepoFormID.TYPE.get(request);
ArtifactType type = ArtifactType.parse(typeStr);
Class<?> repoClass = getClass(site, type);
Class<?> params[] = { Request.class };
Constructor<?> ctor = repoClass.getDeclaredConstructor(params);
return (RepoInterface) ctor.newInstance(request);
}
public static Class<?> getClass(SiteType site, ArtifactType type) {
switch (site) {
case STORE:
switch (type) {
case LOCAL:
return PerforceStore.class;
case MAVEN:
return MavenStore.class;
case GEM:
return GemStore.class;
default:
return null;
}
case PROXY:
return ProxySite.class;
case GROUP:
return GroupSite.class;
default:
return null;
}
}
public static RepoInterface createStore(ArtifactType type) {
switch (type) {
case LOCAL:
return new PerforceStore(type);
case MAVEN:
return new MavenStore(type);
case GEM:
return new GemStore(type);
default:
return null;
}
}
}