diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2012-11-08 22:24:01 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2012-11-08 22:24:01 +0100 |
commit | 2eae4836279646050e7e342752cde6e8f7c5b6cb (patch) | |
tree | d768a8ec4ef09cf62a09f73c499ae5a17677287a /src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java | |
parent | ddbf5d1ac05d0f03f7cbe9275c303541cca945be (diff) | |
download | esper-testing-2eae4836279646050e7e342752cde6e8f7c5b6cb.tar.gz esper-testing-2eae4836279646050e7e342752cde6e8f7c5b6cb.tar.bz2 esper-testing-2eae4836279646050e7e342752cde6e8f7c5b6cb.tar.xz esper-testing-2eae4836279646050e7e342752cde6e8f7c5b6cb.zip |
wip
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java')
-rw-r--r-- | src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java | 136 |
1 files changed, 87 insertions, 49 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java index c77d7db..ee89527 100644 --- a/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java +++ b/src/main/java/io/trygvis/esper/testing/gitorious/GitoriousImporter.java @@ -1,24 +1,22 @@ package io.trygvis.esper.testing.gitorious; +import com.jolbox.bonecp.*; +import com.jolbox.bonecp.hooks.*; import io.trygvis.esper.testing.*; -import io.trygvis.esper.testing.ResourceManager.*; import org.apache.abdera.*; -import org.apache.abdera.model.*; import org.apache.abdera.protocol.client.*; import org.apache.abdera.protocol.client.cache.*; import org.codehaus.httpcache4j.cache.*; import org.codehaus.httpcache4j.client.*; import java.sql.*; -import java.util.Date; import java.util.*; import java.util.concurrent.*; public class GitoriousImporter { - private final AbderaClient abderaClient; - private final Connection c; - private final AtomDao atomDao; - private final GitoriousDao gitoriousDao; +// private final AbderaClient abderaClient; + private final BoneCP boneCp; + private final GitoriousClient gitoriousClient; public static void main(String[] args) throws Exception { Main.configureLog4j(); @@ -27,70 +25,109 @@ public class GitoriousImporter { public GitoriousImporter() throws Exception { Abdera abdera = new Abdera(); - abderaClient = new AbderaClient(abdera, new LRUCache(abdera, 1000)); - - c = DriverManager.getConnection(DbMain.JDBC_URL, "esper", ""); - c.setAutoCommit(false); +// abderaClient = new AbderaClient(abdera, new LRUCache(abdera, 1000)); + + BoneCPConfig config = new BoneCPConfig(); + config.setJdbcUrl(DbMain.JDBC_URL); + config.setUsername("esper"); + config.setPassword(""); + config.setDefaultAutoCommit(false); + config.setMaxConnectionsPerPartition(1); + + config.setConnectionHook(new AbstractConnectionHook() { + public void onAcquire(ConnectionHandle c) { + try { + c.setDebugHandle(new Daos(c)); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + }); - atomDao = new AtomDao(c); - gitoriousDao = new GitoriousDao(c); + boneCp = new BoneCP(config); HTTPCache httpCache = new HTTPCache(new MemoryCacheStorage(), HTTPClientResponseResolver.createMultithreadedInstance()); - final GitoriousClient gitoriousClient = new GitoriousClient(httpCache, "https://gitorious.org"); - -// Set<GitoriousProject> projects = gitoriousClient.findProjects(); -// -// System.out.println("projects.size() = " + projects.size()); -// for (GitoriousProject project : projects) { -// System.out.println("project.repositories = " + project.repositories); -// } - -// new GitoriousImporter(abderaClient, c).work(); + gitoriousClient = new GitoriousClient(httpCache, "https://gitorious.org"); final ScheduledThreadPoolExecutor service = new ScheduledThreadPoolExecutor(1); int projectsUpdateInterval = 1000; final int projectUpdateInterval = 1000; - ResourceManager<GitoriousProject, GitoriousProjectResourceManager> gitoriousProjects = new ResourceManager<>(service, 1000, +// service.scheduleAtFixedRate(new Runnable() { +// public void run() { +// try { +// discoverProjects(); +// } catch (Exception e) { +// e.printStackTrace(System.out); +// } +// } +// }, projectsUpdateInterval, projectsUpdateInterval, TimeUnit.MILLISECONDS); + + discoverProjects(); + } - new ResourceManagerCallbacks<GitoriousProject, GitoriousProjectResourceManager>() { - public Set<GitoriousProject> discover() throws Exception { - return gitoriousClient.findProjects(); + private void discoverProjects() throws Exception { + Set<GitoriousProject> projects = gitoriousClient.findProjects(); + + try (ConnectionHandle connection = (ConnectionHandle) boneCp.getConnection()) { + Daos daos = (Daos) connection.getDebugHandle(); + GitoriousRepositoryDao repoDao = daos.gitoriousRepositoryDao; + GitoriousProjectDao projectDao = daos.gitoriousProjectDao; + + daos.begin(); + System.out.println("Processing " + projects.size() + " projects."); + for (GitoriousProject project : projects) { + if(projectDao.countProjects(project.slug) == 0) { + System.out.println("New project: " + project.slug + ", has " + project.repositories.size() + " repositories."); + projectDao.insertProject(project); + for (GitoriousRepository repository : project.repositories) { + repoDao.insertRepository(repository); + } } - - public GitoriousProjectResourceManager onNew(GitoriousProject key) { - return new GitoriousProjectResourceManager(service, projectUpdateInterval, key); + else { + for (GitoriousRepository repository : project.repositories) { + if(repoDao.countRepositories(repository) == 0) { + System.out.println("New repository for project " + repository.projectSlug + ": " + repository.name); + repoDao.insertRepository(repository); + } + } + + for (GitoriousRepository repository : repoDao.selectForProject(project.slug)) { + if(project.repositories.contains(repository)) { + continue; + } + System.out.println("Gone repository for project " + repository.projectSlug + ": " + repository.name); + repoDao.delete(repository); + } } + } - public void onGone(GitoriousProject key, GitoriousProjectResourceManager manager) { - System.out.println("Project gone."); - manager.close(); + for (String project : projectDao.selectAll()) { + boolean found = false; + for (Iterator<GitoriousProject> it = projects.iterator(); it.hasNext(); ) { + GitoriousProject p = it.next(); + if(p.slug.equals(project)) { + found = true; + break; + } } - }); - ; - } - - class GitoriousProjectResourceManager extends ResourceManager<GitoriousRepository, GitoriousRepository> { - public GitoriousProjectResourceManager(ScheduledExecutorService executorService, int delay, GitoriousProject key) { - super(executorService, delay, new ResourceManagerCallbacks<GitoriousRepository, GitoriousRepository>() { - public Set<GitoriousRepository> discover() throws Exception { - key + if (found) { + continue; } - public GitoriousRepository onNew(GitoriousRepository key) { - throw new RuntimeException("Not implemented"); - } + System.out.println("Gone project: " + project); + repoDao.deleteForProject(project); + projectDao.delete(project); + } - public void onGone(GitoriousRepository key, GitoriousRepository value) { - throw new RuntimeException("Not implemented"); - } - }); + connection.commit(); } } + /* private void work() throws SQLException, InterruptedException { String url = "http://qt.gitorious.org/projects/show/qt.atom"; @@ -153,4 +190,5 @@ public class GitoriousImporter { Thread.sleep(10 * 1000); } } + */ } |