package opg.other; import java.awt.Desktop; import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Random; import javax.imageio.ImageIO; import opg.spacer.Node; import opg.spacer.Node.NodeGender; import opg.spacer.Node.NodeType; import org.gedcom4j.model.FamilyChild; import org.gedcom4j.model.FamilySpouse; import org.gedcom4j.model.Gedcom; import org.gedcom4j.model.Individual; import org.gedcom4j.parser.GedcomParser; import org.gedcom4j.parser.GedcomParserException; import org.gedcom4j.query.Finder; public class Utility { public static Node makeSimpleDescTree() { int children = 5; int softMax = 100; Random r = new Random(5); Queue<Node> q = new LinkedList<Node>(); Node root = Node.makeRoot(NodeType.Descendent, NodeGender.Male, new Dimension(100, 300)); q.add(root); int count = 1; while (!q.isEmpty()) { Node next = q.poll(); if (count > softMax) { break; } for (int i = 0; i < r.nextInt(children + 1); i++) { q.add(next.makeNode(NodeGender.Undefined, new Dimension(75, 150))); count++; } } return root; } public static Node makeSimpleAncTree() { Node root = Node.makeRoot(NodeType.Ancestor, NodeGender.Male, new Dimension(50, 200)); Node r1 = root.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r2 = root.makeNode(NodeGender.Male, new Dimension(50, 200)); Node r11 = r1.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r21 = r2.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r22 = r2.makeNode(NodeGender.Male, new Dimension(50, 200)); Node r211 = r21.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r212 = r21.makeNode(NodeGender.Male, new Dimension(50, 200)); Node r2121 = r212.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r21211 = r2121.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r212111 = r21211.makeNode(NodeGender.Female, new Dimension(50, 200)); Node r2121111 = r212111.makeNode(NodeGender.Male, new Dimension(50, 200)); Node r2111 = r211.makeNode(NodeGender.Male, new Dimension(50, 200)); Node r21111 = r2111.makeNode(NodeGender.Female, new Dimension(50, 200)); return root; } public static Node makeDescTree2() { Node root = Node.makeRoot(NodeType.Descendent); Node r1 = root.makeNode(); Node r2 = root.makeNode(); Node r121 = r1.makeNode(); Node r211 = r2.makeNode(); Node r2121 = r2.makeNode(); Node r12111 = r121.makeNode().rotate(); Node r21211 = r2121.makeNode().rotate(); Node r21212 = r2121.makeNode().rotate(); Node r121111 = r12111.makeNode().rotate(); Node r212111 = r21211.makeNode().rotate(); Node r212112 = r21211.makeNode().rotate(); Node r212113 = r21211.makeNode().rotate(); return root; } public static Node makeGedcomTree() { GedcomParser gp = new GedcomParser(); Gedcom g = gp.gedcom; try { // gp.load("wigington.ged"); gp.load("src/josephposterity.ged"); } catch (IOException | GedcomParserException e) { e.printStackTrace(); } Finder f = new Finder(g); // List<Individual> found = f.findByName("Wiggonton", "Henry"); List<Individual> found = f.findByName("Smith", "Joseph"); Individual wasParent = found.iterator().next(); // for (FamilyChild fc : wasParent.familiesWhereChild) { // if (fc.family.husband != null) { // System.out.println(fc.family.husband); // } // if (fc.family.wife != null) { // System.out.println(fc.family.wife); // } // } while (true) { Individual husband = null; Individual wife = null; if (wasParent.familiesWhereChild.iterator().hasNext()) { FamilyChild fc = wasParent.familiesWhereChild.iterator().next(); husband = fc.family.husband; wife = fc.family.wife; } if (husband != null) { wasParent = husband; } else if (wife != null) { wasParent = wife; } else break; } Node root = Node.makeRoot(NodeType.Descendent, NodeGender.Undefined, new Dimension(300, 400)); makeGEDperson(root, wasParent, 0); return root; } private static void makeGEDperson(Node parent, Individual i, int generation) { Dimension[] sizes = { new Dimension(200, 300), new Dimension(175, 200), new Dimension(150, 100), new Dimension(125, 100), new Dimension(100, 100) }; parent.id = i.formattedName().replaceAll("/", ""); parent.gender = i.sex.toString().equals("M")? NodeGender.Male : NodeGender.Female; if (i.familiesWhereSpouse.iterator().hasNext()) { FamilySpouse fs = i.familiesWhereSpouse.iterator().next(); // for (FamilySpouse fs : i.familiesWhereSpouse) { for (Individual child : fs.family.children) { Node c = parent.makeNode(NodeGender.Male, sizes[Math.min(generation, sizes.length - 1)]); makeGEDperson(c, child, generation + 1); // } } } } public static void openURL(String url){ try { Desktop.getDesktop().browse(new URI(url)); } catch (IOException | URISyntaxException e) { e.printStackTrace(); } } public static Image loadImage(String path){ Image image = null; try { image = ImageIO.read(new File(path)); } catch (IOException e) { image = null; e.printStackTrace(); } return image; } public static String getFileExtension(String filename){ String extension = null; if(filename.indexOf(".") != -1){ String[] parts = filename.split("\\."); extension = parts[parts.length - 1].toUpperCase(); } return extension; } public static void createPDF(List<BufferedImage> images, String filename){ // // try { // PDDocument document = new PDDocument(); // Chart chart = Controller.singleton().getChart(); // for(BufferedImage image: images){ // PDPage page = new PDPage(new PDRectangle(chart.getWidth(), chart.getHeight())); // document.addPage(page); // PDJpeg jpg = new PDJpeg(document, image); // PDPageContentStream content = new PDPageContentStream(document, page); // content.drawImage(jpg, chart.getMargin().getLeft(), chart.getMargin().getTop()); // content.close(); // } // document.save(filename); // document.close(); // } catch(IOException | COSVisitorException e){ // e.printStackTrace(); // } } public static Chart parse(File file) { // String extension = Utility.getFileExtension(file.getName()); // if (extension == null) // throw new IllegalArgumentException(Const.ERR_NO_FILE_EXT); // // List<Person> individuals = null; // List<Family> families = null; // switch (extension) { // case "GED": // Gedcom gedcom = new ModelParser().parseGedcom(file); // individuals = gedcom.getPeople(); // families = gedcom.getFamilies(); // break; // // case "paf": return parser.parsePAF(); // // case "zip": return parser.parsePAF(); // // case "opg": return parser.parseOPG(); // default: // throw new IllegalArgumentException(Const.ERR_BAD_EXT + extension); // } // // return new Chart(Chart.Types.MULTI_SHEET, individuals, families, null, Const.CHART_HEIGHT, Const.CHART_WIDTH); return null; } public static void writeBytes(byte[] bytes, String filename){ FileOutputStream file; try { file = new FileOutputStream(filename); file.write(bytes); file.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }