package org.egonet.tests.broken; import java.awt.BorderLayout; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import javax.swing.JFrame; import javax.swing.JPanel; import org.egonet.graph.ELSFRLayout2; import org.egonet.graph.Edge; import org.egonet.graph.Vertex; import org.egonet.gui.EgoStore; import org.egonet.io.InterviewFileFilter; import org.egonet.io.InterviewReader; import org.egonet.io.StudyReader; import org.egonet.model.Interview; import org.egonet.model.Study; import org.egonet.model.question.AlterPairQuestion; import org.egonet.model.question.Question; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.graph.SparseGraph; import edu.uci.ics.jung.visualization.VisualizationViewer; public class CombineInterviews { final private static Logger logger = LoggerFactory.getLogger(CombineInterviews.class); public void doCombineInterviews() throws Exception { /* Read new study */ EgoStore store = new EgoStore(null); File studyFile = store.selectStudy(new File(".")); StudyReader sr = new StudyReader(studyFile); Study study = sr.getStudy(); //Find the interview files associated with this study File parentFile = studyFile.getParentFile(); File interviewFile = new File(parentFile, "/Interviews/"); File guessLocation = new File("."); if(parentFile.exists() && parentFile.isDirectory() && parentFile.canRead()) guessLocation = parentFile; if(interviewFile.exists() && interviewFile.isDirectory() && interviewFile.canRead()) guessLocation = interviewFile; final File currentDirectory = guessLocation; String[] fileList = currentDirectory.list(); InterviewFileFilter filter = new InterviewFileFilter(study, "Interview Files", "int"); ArrayList<String> alterList = new ArrayList<String>(); int[][] adj = null; Set<Edge> allPairs = new HashSet<Edge>(); Set<Vertex> pairedAlters = new HashSet<Vertex>(); for (String s: fileList){ File f = new File(currentDirectory.toString() + "/" + s); if(!filter.accept(f) || !f.canRead()) throw new IOException("Couldn't read file or file not associated with selected study."); InterviewReader interviewReader = new InterviewReader(study, f); Interview interview = interviewReader.getInterview(); if(!interview.isComplete()) { logger.info("*** SKIPPED because interview isn't complete: " + f.getName()); continue; } logger.info("** Reading next file " + f.getName()); String [] thisInterviewAlterlist = interview.getAlterList(); alterList.addAll(Arrays.asList(interview.getAlterList())); Iterator<Long> questions = study.getQuestionOrder(AlterPairQuestion.class).iterator(); while (questions.hasNext()) { Question q = study.getQuestion((Long) questions.next()); adj = interview.generateAdjacencyMatrix(q, false); // loop through adj // if adj[i][j] == 1, thisInterviewAlters[i] && thisInterviewAlters[j] are adjacent in final matrix for(int i = 0; i < adj.length; i++) { for(int j = 0; j < adj[i].length; j++) { if(adj[i][j] == 1 && i != j) { String alter1 = thisInterviewAlterlist[i]; String alter2 = thisInterviewAlterlist[j]; allPairs.add(new Edge(alter1, alter2)); pairedAlters.add(new Vertex(alter1)); pairedAlters.add(new Vertex(alter2)); // mark those as adjacent in the new big matrix //logger.info(p + " are adjacent"); } } } } } Set<Vertex> vertices = new HashSet<Vertex>(); for(Edge pair : allPairs) { Vertex v1 = new Vertex(pair.pair.getFirst()); Vertex v2 = new Vertex(pair.pair.getSecond()); vertices.add(v1); vertices.add(v2); } for(String isolate : alterList) { Vertex v = new Vertex(isolate); vertices.add(v); } SparseGraph<Vertex,Edge> graph = new SparseGraph<Vertex,Edge>(); for(Edge pair : allPairs) { Vertex v1 = new Vertex(pair.pair.getFirst()); Vertex v2 = new Vertex(pair.pair.getSecond()); if(!graph.getVertices().contains(v1)) graph.addVertex(v1); if(!graph.getVertices().contains(v2)) graph.addVertex(v2); graph.addEdge(pair, Arrays.asList(v1,v2)); } for(String isolate : alterList) { Vertex v = new Vertex(isolate); if(!graph.getVertices().contains(v)) graph.addVertex(v); } Layout<Vertex,Edge> layout = new ELSFRLayout2<Vertex,Edge>(graph); VisualizationViewer<Vertex,Edge> vv = new VisualizationViewer<Vertex,Edge>(layout); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(new BorderLayout()); panel.add(vv, BorderLayout.CENTER); frame.setContentPane(panel); frame.pack(); frame.setVisible(true); // TODO: how do isolates exist from combining personal networks into a whole network? logger.info("Pairs: " + allPairs); alterList.removeAll(pairedAlters); logger.info("Single alters: " + alterList); // TODO: write to file using save dialog } public static void main(String[] args) throws Exception { new CombineInterviews().doCombineInterviews(); } }