package org.phenoscape.main; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; import org.apache.xmlbeans.XmlException; import org.obo.datamodel.OBOSession; import org.obo.datamodel.impl.OBOSessionImpl; import org.phenoscape.io.NeXMLReader; import org.phenoscape.io.NeXMLWriter; import org.phenoscape.model.Character; import org.phenoscape.model.DataSet; import org.phenoscape.model.State; public class SelectCharactersForExercise { /** * @param args * @throws IOException * @throws XmlException */ public static void main(String[] args) throws XmlException, IOException { final DataSet combinedData = new DataSet(); final OBOSession session = new OBOSessionImpl(); final List<Character> selectedCharacters = new ArrayList<Character>(); for (File file : new File("matrices").listFiles()) { final NeXMLReader reader = new NeXMLReader(file, session); final DataSet dataset = reader.getDataSet(); final String pub = dataset.getPublication(); final List<Character> characters = dataset.getCharacters(); for (Character character : characters) { character.setComment(pub + ": " + (characters.indexOf(character) + 1)); } final List<Character> shuffledCharacters = new ArrayList<Character>(characters); Collections.shuffle(shuffledCharacters); selectedCharacters.addAll(shuffledCharacters.subList(0, 29)); } Collections.shuffle(selectedCharacters); for (Character character : selectedCharacters) { combinedData.addCharacter(copyCharacter(character)); } final NeXMLWriter writer = new NeXMLWriter("b" + UUID.randomUUID().toString()); writer.setDataSet(combinedData); writer.write(new File("combined_matrix.xml")); for (Character character : combinedData.getCharacters()) { character.setComment(null); } final NeXMLWriter hiddenPubsWriter = new NeXMLWriter("b" + UUID.randomUUID().toString()); hiddenPubsWriter.setDataSet(combinedData); hiddenPubsWriter.write(new File("combined_matrix_removed_pubs.xml")); } private static Character copyCharacter(Character character) { final Character newCharacter = new Character(); newCharacter.setLabel(character.getLabel()); newCharacter.setComment(character.getComment()); for (State state : character.getStates()) { newCharacter.addState(copyState(state)); } return newCharacter; } private static State copyState(State state) { final State newState = new State(); newState.setLabel(state.getLabel()); newState.setSymbol(state.getSymbol()); return newState; } }