You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(18) |
Aug
(33) |
Sep
(30) |
Oct
(27) |
Nov
(59) |
Dec
(30) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(67) |
Feb
(44) |
Mar
(70) |
Apr
(73) |
May
(119) |
Jun
(31) |
Jul
(92) |
Aug
(86) |
Sep
(76) |
Oct
(152) |
Nov
(156) |
Dec
(85) |
2008 |
Jan
(111) |
Feb
(121) |
Mar
(107) |
Apr
(102) |
May
(45) |
Jun
(65) |
Jul
(62) |
Aug
(133) |
Sep
(56) |
Oct
(56) |
Nov
(17) |
Dec
(15) |
2009 |
Jan
(10) |
Feb
(5) |
Mar
(10) |
Apr
(14) |
May
(49) |
Jun
(94) |
Jul
(67) |
Aug
(23) |
Sep
(9) |
Oct
(92) |
Nov
(26) |
Dec
(51) |
2010 |
Jan
(105) |
Feb
(83) |
Mar
(52) |
Apr
(59) |
May
(68) |
Jun
(71) |
Jul
(127) |
Aug
(49) |
Sep
(91) |
Oct
(27) |
Nov
(33) |
Dec
(26) |
2011 |
Jan
(26) |
Feb
(45) |
Mar
(26) |
Apr
(28) |
May
(17) |
Jun
(15) |
Jul
(45) |
Aug
(33) |
Sep
(50) |
Oct
(22) |
Nov
(10) |
Dec
(21) |
2012 |
Jan
(33) |
Feb
(24) |
Mar
(36) |
Apr
(60) |
May
(60) |
Jun
(43) |
Jul
(114) |
Aug
(19) |
Sep
(35) |
Oct
(24) |
Nov
(64) |
Dec
(12) |
2013 |
Jan
(54) |
Feb
(58) |
Mar
(51) |
Apr
(46) |
May
(21) |
Jun
(29) |
Jul
(25) |
Aug
(25) |
Sep
(13) |
Oct
(7) |
Nov
(14) |
Dec
(27) |
2014 |
Jan
(10) |
Feb
(7) |
Mar
(16) |
Apr
(14) |
May
(19) |
Jun
(8) |
Jul
(15) |
Aug
(11) |
Sep
(5) |
Oct
(11) |
Nov
(11) |
Dec
(4) |
2015 |
Jan
(52) |
Feb
(27) |
Mar
(22) |
Apr
(17) |
May
(2) |
Jun
(2) |
Jul
(2) |
Aug
(2) |
Sep
(2) |
Oct
|
Nov
(2) |
Dec
|
2016 |
Jan
(2) |
Feb
|
Mar
|
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(3) |
Aug
(2) |
Sep
(2) |
Oct
(2) |
Nov
(2) |
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
(4) |
Jun
|
Jul
|
Aug
(1) |
Sep
(1) |
Oct
(2) |
Nov
|
Dec
(1) |
2018 |
Jan
|
Feb
|
Mar
(4) |
Apr
|
May
(2) |
Jun
(2) |
Jul
(2) |
Aug
(2) |
Sep
(1) |
Oct
(2) |
Nov
(1) |
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
(3) |
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
From: <mg...@us...> - 2007-07-06 19:08:34
|
Revision: 704 http://svn.sourceforge.net/obo/?rev=704&view=rev Author: mgibson Date: 2007-07-06 12:08:36 -0700 (Fri, 06 Jul 2007) Log Message: ----------- some improvements to config gui - still shoddy but coming along ontology part of it better - ont name, ont file Modified Paths: -------------- phenote/trunk/src/java/phenote/config/OntologyConfig.java phenote/trunk/src/java/phenote/gui/ConfigGui.java Modified: phenote/trunk/src/java/phenote/config/OntologyConfig.java =================================================================== --- phenote/trunk/src/java/phenote/config/OntologyConfig.java 2007-07-06 17:55:32 UTC (rev 703) +++ phenote/trunk/src/java/phenote/config/OntologyConfig.java 2007-07-06 19:08:36 UTC (rev 704) @@ -49,6 +49,12 @@ setName("Relationship"); } + public OntologyConfig(String name,String displayName,FieldConfig fc) { + fieldConfig = fc; + setName(name); + // displayname + } + Ontology getOntologyBean() { // if ontologyBean == null ontologyBean = new Ontology(); ??? if (ontologyBean == null) // this is for backward compatible to old ontol ways @@ -79,17 +85,18 @@ // for makePostCompRelCfg PASE - for backward compatibility - private OntologyConfig(String name, String file,FieldConfig fc) { - //this(name,fc); - fieldConfig = fc; - setName(name); - setOntologyFile(file); - } +// private OntologyConfig(String name, String file,FieldConfig fc) { +// //this(name,fc); +// fieldConfig = fc; +// setName(name); +// setOntologyFile(file); +// } // phasing out PASE - now just doing rel as another ontology - backward compatible // called from field config static OntologyConfig makePostCompRelCfg(String file,FieldConfig fc) { - OntologyConfig rel = new OntologyConfig("Relationship",file,fc); + OntologyConfig rel = new OntologyConfig("Relationship",null,fc); + rel.setOntologyFile(file); rel.setIsPostCompRel(true); rel.getOntologyBean().setFile(file); // crucial! fc.getFieldBean().unsetPostcomp(); // also crucial - get rid of it @@ -100,7 +107,7 @@ /** File can be url(repos) or filename (from cache/jar/app), if url sets reposUrlString and ontologyFile with end of url */ - private void setFile(String file) { + public void setFile(String file) { if (file == null) { System.out.println("ERROR: null ontology file "+getName()); new Throwable().printStackTrace(); @@ -124,7 +131,7 @@ return !isBad(getName()); } - void setName(String name) { + public void setName(String name) { if (isBad(name)) return; //this.name = name; Modified: phenote/trunk/src/java/phenote/gui/ConfigGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/ConfigGui.java 2007-07-06 17:55:32 UTC (rev 703) +++ phenote/trunk/src/java/phenote/gui/ConfigGui.java 2007-07-06 19:08:36 UTC (rev 704) @@ -37,6 +37,8 @@ public class ConfigGui { private final static String NO_NAME = "No Name"; + private final static String NO_NAME_ITAL = + "<html><i><font color=gray>"+NO_NAME+"</font></i></html>"; private JList configList; private Config currentConfig; // ??? @@ -221,7 +223,7 @@ // ONTOLOGY LIST ListSelectionListener l = new OntologyListSelectionListener(); - ontologyList = addList("Ontologies",g,fieldPanel,null,l); + ontologyList = addList("Ontologies",g,fieldPanel,new AddOntActionListener(),l); return fieldScroll; } @@ -236,10 +238,10 @@ addTitle("ONTOLOGY",g,ontolPanel); // NAME - ontolNameInput = addNameInput(g,ontolPanel,null);//new OntolNameDocumentListener()); + ontolNameInput = addNameInput(g,ontolPanel,new OntNameDocumentListener()); // FILE/URL - ontolFile = addInput(g,"File/URL",ontolPanel); + ontolFile = addInput(g,"File/URL",ontolPanel,new OntFileDocLis()); namespace = addInput(g,"Namespace",ontolPanel); @@ -254,6 +256,7 @@ } + private PhenoteListModel<Config> getConfigListModel() { return getPhenoteListModel(configList); } @@ -261,12 +264,19 @@ private Config getConfig(int i) { return getConfigListModel().get(i); } + private FieldConfig getFieldConfig(int i) { return getFieldListModel().get(i); } + private OntologyConfig getOntConfig(int i) { return getOntListModel().get(i); } + private PhenoteListModel<FieldConfig> getFieldListModel() { return getPhenoteListModel(fieldList); } + private PhenoteListModel<OntologyConfig> getOntListModel() { + return getPhenoteListModel(ontologyList); + } + private PhenoteListModel getPhenoteListModel(JList l) { ListModel m = l.getModel(); if (m instanceof PhenoteListModel) @@ -296,9 +306,7 @@ System.out.println("Error: no config selected"); return; } - String n = NO_NAME; - String noNameItalics = "<html><i><font color=gray>"+n+"</font></i></html>"; - FieldConfig fc = new FieldConfig(n,noNameItalics,getSelectedConfig()); //?? + FieldConfig fc = new FieldConfig(NO_NAME,NO_NAME_ITAL,getSelectedConfig()); getFieldListModel().add(fc); int newIndex = fieldList.getModel().getSize() - 1; fieldList.setSelectedIndex(newIndex); @@ -306,6 +314,22 @@ } } + private class AddOntActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (!hasSelectedField()) { + System.out.println("Error: no field selected"); + return; + } + OntologyConfig oc = + new OntologyConfig(NO_NAME,NO_NAME_ITAL,getSelectedFieldConfig()); + getOntListModel().add(oc); + int newIndex = ontologyList.getModel().getSize() - 1; + ontologyList.setSelectedIndex(newIndex); + ontologyList.repaint(); + } + } + + private class ConfigNameDocListener implements DocumentListener { public void changedUpdate(DocumentEvent e) { updateConfigListWithName(); } public void insertUpdate(DocumentEvent e) { updateConfigListWithName(); } @@ -345,6 +369,29 @@ fieldList.repaint(); } + private class OntNameDocumentListener implements DocumentListener { + public void changedUpdate(DocumentEvent e) { updateOntListWithName(); } + public void insertUpdate(DocumentEvent e) { updateOntListWithName(); } + public void removeUpdate(DocumentEvent e) { updateOntListWithName(); } + } + + private void updateOntListWithName() { + if (!userEditing) return; + int i = ontologyList.getSelectedIndex(); + if (i == -1) return; // nothing selected + getOntConfig(i).setName(ontolNameInput.getText()); + ontologyList.repaint(); + } + private class OntFileDocLis implements DocumentListener { + public void changedUpdate(DocumentEvent e) { updateOntFile(); } + public void insertUpdate(DocumentEvent e) { updateOntFile(); } + public void removeUpdate(DocumentEvent e) { updateOntFile(); } + } + + private void updateOntFile() { + getSelectedOntologyConfig().setFile(ontolFile.getText()); + } + private class OntologyListSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; // only need 1 event/sel @@ -370,6 +417,10 @@ } } + private boolean hasSelectedField() { + return getSelectedFieldConfig() != null; + } + private FieldConfig getSelectedFieldConfig() { return (FieldConfig)fieldList.getSelectedValue(); // instanceof check? } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-07-06 17:55:29
|
Revision: 703 http://svn.sourceforge.net/obo/?rev=703&view=rev Author: balhoff Date: 2007-07-06 10:55:32 -0700 (Fri, 06 Jul 2007) Log Message: ----------- Added config for PhenoMaP project. Modified Paths: -------------- phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java Added Paths: ----------- phenote/trunk/conf/phenomap.cfg Added: phenote/trunk/conf/phenomap.cfg =================================================================== --- phenote/trunk/conf/phenomap.cfg (rev 0) +++ phenote/trunk/conf/phenomap.cfg 2007-07-06 17:55:32 UTC (rev 703) @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ns:phenote-configuration xmlns:ns="phenote/config/xml" name="PhenoMaP Configuration" author="Jim Balhoff" description="This configuration is used by curators with the PhenoMaP project at NESCent."> + + <ns:log config-file="conf/log4j-standalone.xml"/> + <ns:uvic-graph enable="false"/> + <ns:term-history enable="false"/> + <ns:auto-update-ontologies enable="true"/> + <ns:update-timer timer="4"/> + <ns:autocomplete-settings term="true" synonym="true" definition="false" obsolete="false"/> + <ns:obo-repository url-dir="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/"/> + + <ns:dataadapter name="phenote.dataadapter.delimited.DelimitedFileAdapter" enable="true"/> + <ns:dataadapter name="phenote.dataadapter.phenosyntax.PhenoSyntaxFileAdapter" enable="true"/> + <ns:dataadapter name="phenote.dataadapter.phenoxml.PhenoXmlAdapter" enable="true"/> + <ns:dataadapter name="phenote.dataadapter.nexus.NEXUSAdapter" enable="true"/> + + <ns:group name="specimen-list" title="Specimen List" container="window" interface="character-template"/> + + <ns:field name="Publication" syntax-abbrev="PUB" enable="true" colwidth="150"/> + <ns:field name="Taxon" syntax-abbrev="GT" enable="true" colwidth="150" groups="specimen-list"/> + <ns:field name="Specimen ID" syntax-abbrev="Specimen" enable="true" colwidth="150" groups="specimen-list"/> + <ns:field name="Specimen Count" syntax-abbrev="SpecimenCount" enable="true" colwidth="150" groups="specimen-list"/> + <ns:field name="Specimen Preparation" syntax-abbrev="SpecimenPreparation" enable="true" colwidth="150" groups="specimen-list"/> + <ns:field name="Entity" syntax-abbrev="E" enable="true" colwidth="150"> + <ns:ontology name="Relationship" file="relationship.obo" repos-subdir="OBO_REL" is-postcomp-rel="true"/> + <ns:ontology name="Entity" file="zebrafish_anatomy.obo" repos-subdir="anatomy/gross_anatomy/animal_gross_anatomy/fish" namespace="zebrafish_anatomy"/> + </ns:field> + <ns:field name="Quality" syntax-abbrev="Q" enable="true" colwidth="150"> + <ns:ontology name="Quality" file="quality.obo" repos-subdir="phenotype"/> + </ns:field> + <ns:field name="Add'l Entity" syntax-abbrev="E2" enable="true" colwidth="150"> + <ns:ontology name="Relationship" file="relationship.obo" repos-subdir="OBO_REL" is-postcomp-rel="true"/> + <ns:ontology name="Add'l Entity" file="zebrafish_anatomy.obo" repos-subdir="anatomy/gross_anatomy/animal_gross_anatomy/fish"/> + </ns:field> + <ns:field name="Numerical Value" syntax-abbrev="C" enable="true" colwidth="150"/> + <ns:field name="Unit" syntax-abbrev="U" enable="true" colwidth="150"> + <ns:ontology name="Unit" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/unit.obo"/> + </ns:field> + <ns:field name="Original Description" syntax-abbrev="Desc" enable="true" colwidth="150"/> + <ns:field name="Image URI" syntax-abbrev="URI" enable="true" colwidth="150"/> + +</ns:phenote-configuration> \ No newline at end of file Modified: phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java =================================================================== --- phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java 2007-07-06 15:24:52 UTC (rev 702) +++ phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java 2007-07-06 17:55:32 UTC (rev 703) @@ -51,7 +51,6 @@ } private void createMenu() { - // we should actually get the menu title from a group title JMenuItem menuItem = new JMenuItem(this.getGroupTitle()); menuItem.setActionCommand(CharacterTemplateController.SHOW_CHARACTER_TEMPLATE_ACTION); menuItem.addActionListener(this); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-06 15:24:54
|
Revision: 702 http://svn.sourceforge.net/obo/?rev=702&view=rev Author: mgibson Date: 2007-07-06 08:24:52 -0700 (Fri, 06 Jul 2007) Log Message: ----------- commented out disease ontology - we're not ready for this yet still need to duscuss Modified Paths: -------------- phenote/trunk/conf/birn2.cfg phenote/trunk/conf/smart-atlas.cfg Modified: phenote/trunk/conf/birn2.cfg =================================================================== --- phenote/trunk/conf/birn2.cfg 2007-07-06 15:13:08 UTC (rev 701) +++ phenote/trunk/conf/birn2.cfg 2007-07-06 15:24:52 UTC (rev 702) @@ -35,8 +35,8 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> - <ns:ontology name="DO" - file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> + <!-- ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/ --> </ns:field> <ns:field name="Quality" syntax-abbrev="Q" enable="true"> @@ -55,8 +55,8 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> - <ns:ontology name="DO" - file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> + <!-- ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/ --> </ns:field> <ns:field name="Compare To" syntax-abbrev="Compar" enable="true"/> Modified: phenote/trunk/conf/smart-atlas.cfg =================================================================== --- phenote/trunk/conf/smart-atlas.cfg 2007-07-06 15:13:08 UTC (rev 701) +++ phenote/trunk/conf/smart-atlas.cfg 2007-07-06 15:24:52 UTC (rev 702) @@ -42,8 +42,8 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> - <ns:ontology name="DO" - file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> + <!-- ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/ --> </ns:field> <ns:field name="Quality" datatag="Q" enable="true"> @@ -62,8 +62,8 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> - <ns:ontology name="DO" - file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> + <!-- ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/ --> </ns:field> <ns:field name="Compare To" datatag="Compar" enable="true"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-07-06 15:13:10
|
Revision: 701 http://svn.sourceforge.net/obo/?rev=701&view=rev Author: balhoff Date: 2007-07-06 08:13:08 -0700 (Fri, 06 Jul 2007) Log Message: ----------- Fixed bug where SelectionManager was not set for post-comp ontology fields, because of recent changes to CharFieldGui. Now if SelectionManager is null, the default instance is returned. Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-07-06 14:37:55 UTC (rev 700) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-07-06 15:13:08 UTC (rev 701) @@ -125,7 +125,11 @@ } public SelectionManager getSelectionManager() { + if (this.selectionManager == null) { + return SelectionManager.inst(); + } else { return this.selectionManager; + } } public void setEditManager(EditManager manager) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-07-06 14:37:54
|
Revision: 700 http://svn.sourceforge.net/obo/?rev=700&view=rev Author: balhoff Date: 2007-07-06 07:37:55 -0700 (Fri, 06 Jul 2007) Log Message: ----------- Many changes to support the use of a separate character list for a different window. Multiple instances of CharacterListManager, EditManager, and SelectionManager can be created and used with additonal FieldPanels and CharacterTables. I have not yet made TermInfo or any other gui items work this way. Modified Paths: -------------- phenote/trunk/src/java/phenote/config/Config.java phenote/trunk/src/java/phenote/dataadapter/CharacterListManager.java phenote/trunk/src/java/phenote/edit/AddTransaction.java phenote/trunk/src/java/phenote/edit/CompoundTransaction.java phenote/trunk/src/java/phenote/edit/DeleteTransaction.java phenote/trunk/src/java/phenote/edit/EditManager.java phenote/trunk/src/java/phenote/gui/CharacterTableModel.java phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java phenote/trunk/src/java/phenote/gui/MenuManager.java phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java phenote/trunk/src/java/phenote/gui/field/FieldPanel.java phenote/trunk/src/java/phenote/gui/field/FreeTextField.java phenote/trunk/src/java/phenote/gui/field/RelationCompList.java phenote/trunk/src/java/phenote/gui/field/TermCompList.java phenote/trunk/src/java/phenote/gui/selection/SelectionManager.java phenote/trunk/src/java/phenote/main/Phenote.java Added Paths: ----------- phenote/trunk/src/java/phenote/charactertemplate/ phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java Added: phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java =================================================================== --- phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java (rev 0) +++ phenote/trunk/src/java/phenote/charactertemplate/CharacterTemplateController.java 2007-07-06 14:37:55 UTC (rev 700) @@ -0,0 +1,86 @@ +package phenote.charactertemplate; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JFrame; +import javax.swing.JMenuItem; +import javax.swing.JPanel; + +import phenote.config.Config; +import phenote.dataadapter.CharacterListManager; +import phenote.edit.EditManager; +import phenote.gui.CharacterTablePanel; +import phenote.gui.GridBagUtil; +import phenote.gui.MenuManager; +import phenote.gui.field.FieldPanel; +import phenote.gui.selection.SelectionManager; + +public class CharacterTemplateController implements ActionListener { + + public static final String SHOW_CHARACTER_TEMPLATE_ACTION = "showCharacterTemplate"; + private final String groupName; + private CharacterListManager characterListManager; + private EditManager editManager; + private SelectionManager selectionManager; + private JFrame window; + + public CharacterTemplateController(String groupName) { + super(); + this.characterListManager = new CharacterListManager(); + this.editManager = new EditManager(this.characterListManager); + this.selectionManager = new SelectionManager(); + this.groupName = groupName; + this.createMenu(); + } + + public void actionPerformed(ActionEvent event) { + if (event.getActionCommand().equals(CharacterTemplateController.SHOW_CHARACTER_TEMPLATE_ACTION)) { + this.showCharacterTemplate(); + } + } + + public void showCharacterTemplate() { + this.getWindow().setVisible(true); + } + + private String getGroupTitle() { + return Config.inst().getTitleForGroup(this.groupName); + } + + private void createMenu() { + // we should actually get the menu title from a group title + JMenuItem menuItem = new JMenuItem(this.getGroupTitle()); + menuItem.setActionCommand(CharacterTemplateController.SHOW_CHARACTER_TEMPLATE_ACTION); + menuItem.addActionListener(this); + MenuManager.inst().addViewMenuItem(menuItem); + } + + private JFrame getWindow() { + if (this.window == null) { + this.window = new JFrame(this.getGroupTitle()); + this.window.getContentPane().add(this.createPanel()); + } + return this.window; + } + + private JPanel createPanel() { + JPanel panel = new JPanel(new GridBagLayout()); + JPanel upperPanel = new JPanel(new GridBagLayout()); + FieldPanel fieldPanel = new FieldPanel(true, false, this.groupName, this.selectionManager, this.editManager); + GridBagConstraints upperPanelConstraints = GridBagUtil.makeFillingConstraint(0,0); + upperPanelConstraints.weightx = 1; + upperPanel.add(fieldPanel, upperPanelConstraints); + GridBagConstraints gridBagConstraints = GridBagUtil.makeFillingConstraint(0,0); + gridBagConstraints.weighty = 1; + panel.add(upperPanel, gridBagConstraints); + JPanel tablePanel = new CharacterTablePanel(this.characterListManager, this.editManager, this.selectionManager); + gridBagConstraints.gridy++; + gridBagConstraints.weighty = 10; + panel.add(tablePanel, gridBagConstraints); + return panel; + } + +} Modified: phenote/trunk/src/java/phenote/config/Config.java =================================================================== --- phenote/trunk/src/java/phenote/config/Config.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/config/Config.java 2007-07-06 14:37:55 UTC (rev 700) @@ -1079,6 +1079,15 @@ } return fields; } + + public String getTitleForGroup(String groupName) { + for (Group aGroup : this.phenoConfigBean.getGroupArray()) { + if (aGroup.getName().equals(groupName)) { + return aGroup.getTitle(); + } + } + return null; + } } // if (overwrite || mode.equals("WIPEOUT_ALWAYS")) Modified: phenote/trunk/src/java/phenote/dataadapter/CharacterListManager.java =================================================================== --- phenote/trunk/src/java/phenote/dataadapter/CharacterListManager.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/dataadapter/CharacterListManager.java 2007-07-06 14:37:55 UTC (rev 700) @@ -4,10 +4,11 @@ import java.util.ArrayList; import java.util.List; + import javax.swing.JOptionPane; +import phenote.datamodel.CharacterList; import phenote.datamodel.CharacterListI; -import phenote.datamodel.CharacterList; /** Contains current CharacterList. sends out CharacterListChanged events when character list has changed */ @@ -16,10 +17,9 @@ private static CharacterListManager singleton; private CharacterListI characterList = new CharacterList(); - private List<CharListChangeListener>listenerList - = new ArrayList<CharListChangeListener>(6); + private List<CharListChangeListener> listenerList = new ArrayList<CharListChangeListener>(6); - private CharacterListManager() {} + public CharacterListManager() {} public static CharacterListManager inst() { if (singleton == null) Modified: phenote/trunk/src/java/phenote/edit/AddTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/AddTransaction.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/edit/AddTransaction.java 2007-07-06 14:37:55 UTC (rev 700) @@ -5,22 +5,23 @@ import org.geneontology.oboedit.datamodel.OBOClass; +import phenote.dataadapter.CharacterListManager; +import phenote.datamodel.CharField; import phenote.datamodel.CharacterI; import phenote.datamodel.CharacterListI; -// does char list manager belong in edit package? -import phenote.dataadapter.CharacterListManager; -import phenote.datamodel.CharField; /** For adding a character (not a char subpart - thats an update) */ public class AddTransaction implements TransactionI { private CharacterI addChar; + private CharacterListManager characterListManager; private boolean isUndone = false; // private int index; ?? - public AddTransaction(CharacterI chr) { - addChar = chr; + public AddTransaction(CharacterI chr, CharacterListManager clManager) { + this.addChar = chr; + this.characterListManager = clManager; } public boolean isUpdate() { return false; } @@ -32,7 +33,7 @@ // index = getCharList().indexOf(addChar); ?? } - // public int getIndex() { return index; } ??? +// public int getIndex() { return index; } ??? public void undo() { getCharList().remove(addChar); @@ -47,7 +48,7 @@ // should char list be passed in? charlistMan part of edit pkg? private CharacterListI getCharList() { - return CharacterListManager.inst().getCharacterList(); + return this.characterListManager.getCharacterList(); } /** this is for update trans - return false */ Modified: phenote/trunk/src/java/phenote/edit/CompoundTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/CompoundTransaction.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/edit/CompoundTransaction.java 2007-07-06 14:37:55 UTC (rev 700) @@ -5,8 +5,8 @@ import org.geneontology.oboedit.datamodel.OBOClass; +import phenote.dataadapter.CharacterListManager; import phenote.datamodel.CharField; -import phenote.datamodel.CharFieldEnum; import phenote.datamodel.CharacterI; /** used for bulk updating (see TermCompList) */ @@ -45,21 +45,21 @@ childTransactions.add(trans); } - public static CompoundTransaction makeCopyTrans(List<CharacterI> charsToCopy) { + public static CompoundTransaction makeCopyTrans(List<CharacterI> charsToCopy, CharacterListManager clManager) { CompoundTransaction copyTrans = new CompoundTransaction(); // error if empty list? for (CharacterI c : charsToCopy) { CharacterI copy = c.cloneCharacter(); - AddTransaction at = new AddTransaction(copy); + AddTransaction at = new AddTransaction(copy, clManager); copyTrans.addTransaction(at); } return copyTrans; } - public static CompoundTransaction makeDelTrans(List<CharacterI> delChars) { + public static CompoundTransaction makeDelTrans(List<CharacterI> delChars, CharacterListManager clManager) { CompoundTransaction delTrans = new CompoundTransaction(); for (CharacterI c : delChars) - delTrans.addTransaction(new DeleteTransaction(c)); + delTrans.addTransaction(new DeleteTransaction(c, clManager)); return delTrans; } Modified: phenote/trunk/src/java/phenote/edit/DeleteTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/DeleteTransaction.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/edit/DeleteTransaction.java 2007-07-06 14:37:55 UTC (rev 700) @@ -2,21 +2,26 @@ import java.util.ArrayList; import java.util.List; + import org.geneontology.oboedit.datamodel.OBOClass; +import phenote.dataadapter.CharacterListManager; +import phenote.datamodel.CharField; import phenote.datamodel.CharacterI; import phenote.datamodel.CharacterListI; -import phenote.dataadapter.CharacterListManager; -import phenote.datamodel.CharField; class DeleteTransaction implements TransactionI { private CharacterI delChar; // remember where the char was in the list for undo private int listOrder; + private CharacterListManager characterListManager; private boolean isUndone = false; - DeleteTransaction(CharacterI c) { delChar = c; } + DeleteTransaction(CharacterI c, CharacterListManager clManager) { + this.delChar = c; + this.characterListManager = clManager; + } public void editModel() { listOrder = getCharList().indexOf(delChar); @@ -46,7 +51,7 @@ // should char list be passed in? charlistMan part of edit pkg? private CharacterListI getCharList() { - return CharacterListManager.inst().getCharacterList(); + return this.characterListManager.getCharacterList(); } public OBOClass getNewTerm() { return null; } Modified: phenote/trunk/src/java/phenote/edit/EditManager.java =================================================================== --- phenote/trunk/src/java/phenote/edit/EditManager.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/edit/EditManager.java 2007-07-06 14:37:55 UTC (rev 700) @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; +import phenote.dataadapter.CharacterListManager; import phenote.datamodel.Character; import phenote.datamodel.CharacterI; @@ -23,7 +24,15 @@ private List<TransactionI> transactionList = new ArrayList<TransactionI>(); - private EditManager() {} + private CharacterListManager characterListManager; + + public EditManager() { + this(CharacterListManager.inst()); + } + + public EditManager(CharacterListManager clManager) { + this.characterListManager = clManager; + } public static EditManager inst() { if (singleton == null) @@ -104,7 +113,7 @@ // fire char change event??? private void addCharacter(Character c, boolean recordTrans) { - AddTransaction at = new AddTransaction(c); + AddTransaction at = new AddTransaction(c, this.characterListManager); at.editModel(); if (recordTrans) addTransaction(at); fireChangeEvent(new CharChangeEvent(this,at)); // this??? @@ -115,7 +124,7 @@ log().error("No chars to make copy of"); return; } - CompoundTransaction ct = CompoundTransaction.makeCopyTrans(charsToCopy); + CompoundTransaction ct = CompoundTransaction.makeCopyTrans(charsToCopy, this.characterListManager); ct.editModel(); // clones & adds char to char list addTransaction(ct); // dont need yet an event for this - might eventually @@ -130,13 +139,11 @@ log().error("No chars to delete"); return; } - CompoundTransaction ct = CompoundTransaction.makeDelTrans(delChars); + CompoundTransaction ct = CompoundTransaction.makeDelTrans(delChars, this.characterListManager); ct.editModel(); addTransaction(ct); } - - private void addTransaction(TransactionI t) { transactionList.add(t); //System.out.println("got trans "+t); new Throwable().printStackTrace(); Modified: phenote/trunk/src/java/phenote/gui/CharacterTableModel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/CharacterTableModel.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/CharacterTableModel.java 2007-07-06 14:37:55 UTC (rev 700) @@ -1,22 +1,18 @@ package phenote.gui; import java.util.List; -import java.util.ArrayList; import javax.swing.table.AbstractTableModel; import org.apache.log4j.Logger; +import phenote.config.Config; +import phenote.dataadapter.CharacterListManager; import phenote.datamodel.CharField; -import phenote.datamodel.Character; import phenote.datamodel.CharacterI; import phenote.datamodel.CharacterListI; -import phenote.datamodel.CharFieldEnum; import phenote.datamodel.OntologyManager; -//import phenote.edit.CompoundTransaction; import phenote.edit.EditManager; -import phenote.dataadapter.CharacterListManager; -import phenote.config.Config; /** * table model for table of characters. currently holds list of characters - this should @@ -27,20 +23,30 @@ //private int rowCount = 0; // todo - get this from data adapter/model - especially for loaded private CharacterListI characterList;// = new CharacterList(); + private CharacterListManager characterListManager; + private EditManager editManager; //private Config config = Config.inst(); cant cache - may change! - CharacterTableModel() { - characterList = getCharListManager().getCharacterList(); + CharacterTableModel(CharacterListManager clManager, EditManager eManager) { + this.characterList = clManager.getCharacterList(); + this.characterListManager = clManager; + this.editManager = eManager; // should supress editing model for this i think??? addInitialBlankRow(); // add blank row to start off //getCharListManager().addCharListChangeListener(new TableCharListChangeListener()); // --> panel //EditManager.inst().addCharChangeListener(new TableCharChangeListener()); } + + public CharacterTableModel() { + this(CharacterListManager.inst(), EditManager.inst()); + } private Config cfg() { return Config.inst(); } - private CharacterListManager getCharListManager() { return CharacterListManager.inst(); } + private CharacterListManager getCharListManager() { + return this.characterListManager; + } CharacterI getCharacter(int i) { // check out of bounds @@ -84,13 +90,13 @@ boolean hasRows() { return getRowCount() > 0; } void addInitialBlankRow() { - EditManager.inst().addInitialCharacter(); + this.editManager.addInitialCharacter(); fireTableRowsInserted(getRowCount(),getRowCount()); } /** Returns row # of new row - handy for selection */ int addNewBlankRow() { - EditManager.inst().addNewCharacter(); + this.editManager.addNewCharacter(); fireTableRowsInserted(getRowCount(),getRowCount()); return getRowCount() - 1; // last row //return addCharacter(new Character()); @@ -113,7 +119,7 @@ log().error("No chars selected to make copy of"); return new RowInterval(-1,-1); // ex? } - EditManager.inst().copyChars(charsToCopy); // edit characterTableModel.selects model + this.editManager.copyChars(charsToCopy); // edits model //CompoundTransaction ct = CompoundTransaction.makeCopyTrans(charsToCopy); //ct.editModel(); // clones & adds char to char list fireTableRowsInserted(getRowCount(),getRowCount()); // updates table view @@ -144,7 +150,7 @@ log().error("No rows/chars to delete"); return; } - EditManager.inst().deleteChars(chars); + this.editManager.deleteChars(chars); fireTableRowsDeleted(0,getRowCount()); // could be more savvy } Modified: phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java 2007-07-06 14:37:55 UTC (rev 700) @@ -1,11 +1,6 @@ package phenote.gui; -import java.util.ArrayList; -import java.util.List; -import java.lang.Integer; - import java.awt.Dimension; -//import java.awt.GridLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Point; @@ -14,53 +9,47 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; - +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeEvent; +import java.util.ArrayList; +import java.util.List; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTable; -import javax.swing.JPopupMenu; -import javax.swing.JOptionPane; -import javax.swing.JMenuItem; -import javax.swing.table.TableColumn; -import javax.swing.table.TableColumnModel; -import javax.swing.event.TableColumnModelEvent; -import javax.swing.event.TableColumnModelListener; import javax.swing.ListSelectionModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableColumn; import org.apache.log4j.Logger; +import phenote.config.Config; +import phenote.dataadapter.CharListChangeEvent; +import phenote.dataadapter.CharListChangeListener; +import phenote.dataadapter.CharacterListManager; +import phenote.dataadapter.LoadSaveManager; +import phenote.datamodel.CharFieldValue; import phenote.datamodel.CharacterI; import phenote.datamodel.CharacterListI; -import phenote.datamodel.CharField; -import phenote.datamodel.CharFieldValue; import phenote.edit.CharChangeEvent; import phenote.edit.CharChangeListener; import phenote.edit.EditManager; -import phenote.dataadapter.CharListChangeEvent; -import phenote.dataadapter.CharListChangeListener; -import phenote.dataadapter.CharacterListManager; -import phenote.config.Config; import phenote.gui.selection.SelectionManager; -import phenote.dataadapter.LoadSaveManager; -import phenote.gui.TableRightClickMenu; /** Character panel has character table and del add copy buttons to manipulate * table. Modifications to fields modify columns in selected row in table * for now no explicit commit - may be configurable later */ public class CharacterTablePanel extends JPanel { - private CharacterTableModel characterTableModel = new CharacterTableModel(); - private JTable charJTable = new JTable(characterTableModel); + private CharacterTableModel characterTableModel; + private JTable charJTable; private static int DEFAULT_COLWIDTH=150; //default column width for table private static int INIT_TABLE_WIDTH=1400; private static int INIT_TABLE_HEIGHT=500; @@ -80,6 +69,9 @@ private Point currentMousePoint = new Point(0,0); private int tableWidth=INIT_TABLE_WIDTH; private int tableHeight=INIT_TABLE_HEIGHT; + private CharacterListManager characterListManager; + private EditManager editManager; + private SelectionManager selectionManager; //private int selectedRow; // get from file menu? @@ -89,7 +81,16 @@ public CharacterTablePanel() { //TermPanel tp) { //fieldPanel = tp; - super(); + this(CharacterListManager.inst(), EditManager.inst(), SelectionManager.inst()); + } + + public CharacterTablePanel(CharacterListManager clManager, EditManager eManager, SelectionManager selManager) { + super(); + this.characterListManager = clManager; + this.editManager = eManager; + this.selectionManager = selManager; + this.characterTableModel = new CharacterTableModel(this.characterListManager, this.editManager); + this.charJTable = new JTable(this.characterTableModel); init(); } @@ -152,7 +153,7 @@ add(buttonPanel,gbc); - EditManager.inst().addCharChangeListener(new TableCharChangeListener()); + this.editManager.addCharChangeListener(new TableCharChangeListener()); getCharListManager().addCharListChangeListener(new TableCharListChangeListener()); } @@ -186,7 +187,7 @@ } private CharacterListManager getCharListManager() { - return CharacterListManager.inst(); + return this.characterListManager; } private JButton addButton(String name,ActionListener al,JPanel parent) { @@ -351,7 +352,7 @@ else if (e.getActionCommand().equals("Undo")) { // let char change deal with selection i think?? undo is different doSelection = false; - EditManager.inst().undo(); + CharacterTablePanel.this.editManager.undo(); } else if (e.getActionCommand().equals("Graph")) { @@ -398,7 +399,7 @@ // new way - change this to take list - multi! //SelectionManager.inst().selectCharacter(this,character); - SelectionManager.inst().selectCharacters(this,getSelectedChars()); + CharacterTablePanel.this.selectionManager.selectCharacters(this,getSelectedChars()); } } @@ -447,7 +448,7 @@ characterTableModel.setCharacterList(characterList); // need to repaint & select 1st item in table selectRow(0); - SelectionManager.inst().selectCharacters(this,getSelectedChars()); + CharacterTablePanel.this.selectionManager.selectCharacters(this,getSelectedChars()); //repaint(); //doLayout(); // ?? } Modified: phenote/trunk/src/java/phenote/gui/MenuManager.java =================================================================== --- phenote/trunk/src/java/phenote/gui/MenuManager.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/MenuManager.java 2007-07-06 14:37:55 UTC (rev 700) @@ -2,14 +2,20 @@ // --> phenote.gui.menu ?? import javax.swing.JFrame; +import javax.swing.JMenu; import javax.swing.JMenuBar; +import javax.swing.JMenuItem; public class MenuManager { + + private JMenuBar menuBar; private FileMenu fileMenu; private EditMenu editMenu; + private JMenu viewMenu; + private HelpMenu helpMenu; private SettingsMenu settingsMenu; @@ -23,18 +29,26 @@ public static void createMenuManager(JFrame frame) { singleton.initMenus(frame); } + + public void addViewMenuItem(JMenuItem menuItem) { + if (this.viewMenu == null) { + this.viewMenu = new JMenu("View"); + this.menuBar.add(this.viewMenu, 2); + } + this.viewMenu.add(menuItem); + } private void initMenus(JFrame frame) { - JMenuBar menuBar = new JMenuBar(); + this.menuBar = new JMenuBar(); fileMenu = new FileMenu(); editMenu = new EditMenu(); settingsMenu = new SettingsMenu(); helpMenu = new HelpMenu(); - menuBar.add(fileMenu); - menuBar.add(editMenu); - menuBar.add(settingsMenu); - menuBar.add(helpMenu); - frame.setJMenuBar(menuBar); + this.menuBar.add(fileMenu); + this.menuBar.add(editMenu); + this.menuBar.add(settingsMenu); + this.menuBar.add(helpMenu); + frame.setJMenuBar(this.menuBar); } @@ -42,3 +56,4 @@ // for testing actually public FileMenu getFileMenu() { return fileMenu; } } + Modified: phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/field/CharFieldGui.java 2007-07-06 14:37:55 UTC (rev 700) @@ -56,6 +56,7 @@ static int fieldHeight = 17; static Dimension inputSize = new Dimension(390,fieldHeight); // size of user input box private boolean editModel = true; + private SelectionManager selectionManager; /** CharFieldGui for main window not post comp box - factory method */ @@ -64,19 +65,15 @@ //return new TermCompList(charField,sp,true); // enable listeners TermCompList t = new TermCompList(charField); //t.setSearchParams(sp); - t.enableListeners(true); t.allowPostCompButton(true); return t; } else { FreeTextField f = new FreeTextField(charField); - f.enableListeners(true); return f; } } - - /** createPostCompRelationList - will relation lists ever be in main window and if so will they ever have listeners enabled - maybe, probably not */ static CharFieldGui makeRelationList(CharField cf) { @@ -95,7 +92,6 @@ //t.setSearchParams(sp); // t.isInSeparateWindow(true) or t.isolate(true)?? t.enableEditModel(false); - t.enableListeners(false); t.allowPostCompButton(false); // eventually config for recurse/embed t.setLabel(label); return t; @@ -122,22 +118,19 @@ /** Get the component used for user input - text field or jCombo */ protected abstract Component getUserInputGui(); - protected void enableListeners(boolean enable) { - if (!enable) return; - - // listens for selection (eg from table) - not for PostCompGui - //if (enableListeners) - SelectionManager.inst().addCharSelectionListener(new FieldCharSelectListener()); - // listen for model changes (eg TermInfo commit) - - // this needs renaming. if not editing model then its a post comp window, and - // post comp windows also listen for char changes in PostCompGui not in there - // char field guis. either add a new param or rename "enableListeners" - hmmm - // or subclass CharFieldGui?? hmmmmm.... oh right this is changes in model - // from the main window i think?? - //if (enableListeners) - EditManager.inst().addCharChangeListener(new FieldCharChangeListener()); + + public void setSelectionManager(SelectionManager manager) { + this.selectionManager = manager; + manager.addCharSelectionListener(new FieldCharSelectListener()); } + + public SelectionManager getSelectionManager() { + return this.selectionManager; + } + + public void setEditManager(EditManager manager) { + manager.addCharChangeListener(new FieldCharChangeListener()); + } protected void enableEditModel(boolean em) { editModel = em; } protected boolean editModelEnabled() { return editModel; } @@ -429,7 +422,7 @@ protected CharField getCharField() { return charField; } private CharacterI getFirstSelectedChar() { - return SelectionManager.inst().getFirstSelectedCharacter(); + return this.getSelectionManager().getFirstSelectedCharacter(); } private class FieldCharSelectListener implements CharSelectionListener { Modified: phenote/trunk/src/java/phenote/gui/field/FieldPanel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FieldPanel.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/field/FieldPanel.java 2007-07-06 14:37:55 UTC (rev 700) @@ -11,20 +11,16 @@ import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JComboBox; -import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import phenote.datamodel.CharField; -import phenote.datamodel.CharFieldEnum; -import phenote.datamodel.CharacterI; import phenote.datamodel.OntologyManager; +import phenote.edit.EditManager; import phenote.gui.GridBagUtil; +import phenote.gui.selection.SelectionManager; -import phenote.gui.SearchParamsI; -import phenote.gui.SearchParams; - /** * FieldPanel holds all the fields for the terms - Genotype, Entity/Anatomy, QUALITY. * Can be populated by hand (Genotype), or selection of instance in completion list. @@ -38,6 +34,9 @@ private OntologyManager ontologyManager = OntologyManager.inst(); private JPanel fieldPanel; private JTabbedPane jTabbedPane; + private String representedGroup; + private SelectionManager selectionManager; + private EditManager editManager; /** eventually configurable (with default 12) - for now hardwire at 12 */ private static int fieldsPerTab = 12; @@ -47,6 +46,13 @@ } // false for post comp panel - boolean isPostComp? public FieldPanel(boolean doAllFields,boolean addSearchPanel) { + this(doAllFields, addSearchPanel, null, SelectionManager.inst(), EditManager.inst()); + } + + public FieldPanel(boolean doAllFields, boolean addSearchPanel, String representedGroup, SelectionManager selectionManager, EditManager editManager) { + this.representedGroup = representedGroup; + this.selectionManager = selectionManager; + this.editManager = editManager; initGui(); if (doAllFields) { initCharFieldGuis(); @@ -89,7 +95,7 @@ int fieldNum = 0; int tab = 1; - for (CharField charField : ontologyManager.getCharFieldList()) { + for (CharField charField : this.getCharFieldList()) { if (isTabbed() && fieldNum % fieldsPerTab == 0) { fieldPanel = new JPanel(new GridBagLayout()); jTabbedPane.addTab("Tab "+tab++,fieldPanel); @@ -97,13 +103,19 @@ ++fieldNum; //CharFieldGui gui = new CharFieldGui(charField,this); // adds to panel CharFieldGui gui = CharFieldGui.makeCharFieldGui(charField); + gui.setSelectionManager(this.selectionManager); + gui.setEditManager(this.editManager); addCharFieldGuiToPanel(gui); charFieldGuiList.add(gui); } } private boolean isTabbed() { - return ontologyManager.getNumberOfFields() > fieldsPerTab; + if (this.representedGroup != null) { + return this.ontologyManager.getCharFieldListForGroup(this.representedGroup).size() > FieldPanel.fieldsPerTab; + } else { + return ontologyManager.getNumberOfFields() > fieldsPerTab; + } } void addCharFieldGuiToPanel(CharFieldGui fieldGui) { @@ -204,6 +216,14 @@ public AbstractAutoCompList getQualityComboBox() { return getComboBox("Quality"); } + + private List<CharField> getCharFieldList() { + if (this.representedGroup != null) { + return this.ontologyManager.getCharFieldListForGroup(this.representedGroup); + } else { + return this.ontologyManager.getCharFieldList(); + } + } } Modified: phenote/trunk/src/java/phenote/gui/field/FreeTextField.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/field/FreeTextField.java 2007-07-06 14:37:55 UTC (rev 700) @@ -229,7 +229,7 @@ } private List<CharacterI> getSelectedChars() { - return SelectionManager.inst().getSelectedChars(); + return this.getSelectionManager().getSelectedChars(); } Modified: phenote/trunk/src/java/phenote/gui/field/RelationCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/RelationCompList.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/field/RelationCompList.java 2007-07-06 14:37:55 UTC (rev 700) @@ -20,7 +20,6 @@ //setLabel("Relationship"); //does it get this from char field? allowPostCompButton(false); // cant post comp rels can you? enableEditModel(false); // doesnt directly edit model i dont think ever? - enableListeners(false); // at least while in comp window } // RelationCompList(CompListSearcher searcher,boolean editModel,CharField c) { Modified: phenote/trunk/src/java/phenote/gui/field/TermCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/field/TermCompList.java 2007-07-06 14:37:55 UTC (rev 700) @@ -112,7 +112,7 @@ protected void setCurrentValidItem() throws OboException { setOboClass(getSelectedOboClass()); //this will set text to oboclass // send out selection event that is NOT a mouse over event (for DAG view) - SelectionManager.inst().selectTerm(this, getSelectedOboClass(), false); + this.getSelectionManager().selectTerm(this, getSelectedOboClass(), false); } protected String getCurrentTermRelName() { @@ -194,10 +194,6 @@ EditManager.inst().updateModel(this, ct); } - private SelectionManager getSelectionManager() { - return SelectionManager.inst(); - } - private List<CharacterI> getSelectedChars() { return getSelectionManager().getSelectedChars(); } Modified: phenote/trunk/src/java/phenote/gui/selection/SelectionManager.java =================================================================== --- phenote/trunk/src/java/phenote/gui/selection/SelectionManager.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/gui/selection/SelectionManager.java 2007-07-06 14:37:55 UTC (rev 700) @@ -25,7 +25,7 @@ return singleton; } - private SelectionManager() { + public SelectionManager() { termListenerList = new ArrayList<TermSelectionListener>(5); charListenerList = new ArrayList<CharSelectionListener>(4); } Modified: phenote/trunk/src/java/phenote/main/Phenote.java =================================================================== --- phenote/trunk/src/java/phenote/main/Phenote.java 2007-07-05 13:16:21 UTC (rev 699) +++ phenote/trunk/src/java/phenote/main/Phenote.java 2007-07-06 14:37:55 UTC (rev 700) @@ -8,36 +8,33 @@ import java.awt.GridBagLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import javax.swing.BoxLayout; +import java.io.FileNotFoundException; + +import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.UIManager; -import javax.swing.ImageIcon; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.plaf.metal.MetalLookAndFeel; -import java.io.FileNotFoundException; - - -// import javax.swing.JTextField; -// import javax.swing.text.Keymap; - import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; +import phenote.charactertemplate.CharacterTemplateController; import phenote.config.Config; import phenote.config.ConfigException; -import phenote.datamodel.CharacterListI; +import phenote.config.xml.GroupDocument.Group; import phenote.dataadapter.CharacterListManager; import phenote.dataadapter.OntologyDataAdapter; +import phenote.datamodel.CharacterListI; import phenote.gui.CharacterTablePanel; import phenote.gui.GridBagUtil; import phenote.gui.MenuManager; +import phenote.gui.SelectionHistory; +import phenote.gui.SplashScreen; import phenote.gui.TermInfo; -import phenote.gui.SelectionHistory; import phenote.gui.field.FieldPanel; -import phenote.gui.SplashScreen; public class Phenote { @@ -144,8 +141,16 @@ public void initGui() { makeWindow(); // ok this is silly + this.createGroupGuis(); } + private void createGroupGuis() { + for (Group group : Config.inst().getFieldGroups()) { + if (group.getInterface().equals(Group.Interface.CHARACTER_TEMPLATE)) { + new CharacterTemplateController(group.getName()); + } + } + } private void splashScreenInit() { ImageIcon myImage = new ImageIcon(logoFile); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-05 13:16:19
|
Revision: 699 http://svn.sourceforge.net/obo/?rev=699&view=rev Author: mgibson Date: 2007-07-05 06:16:21 -0700 (Thu, 05 Jul 2007) Log Message: ----------- added config for specifying if you want DataInputServlet enabled - well added the code that utilizes the config this is for smart atlas to send phenotype data to phenote via http - 1 row/character at a time Modified Paths: -------------- phenote/trunk/conf/smart-atlas.cfg phenote/trunk/src/java/phenote/config/Config.java phenote/trunk/src/java/phenote/main/Phenote.java Modified: phenote/trunk/conf/smart-atlas.cfg =================================================================== --- phenote/trunk/conf/smart-atlas.cfg 2007-07-04 22:23:44 UTC (rev 698) +++ phenote/trunk/conf/smart-atlas.cfg 2007-07-05 13:16:21 UTC (rev 699) @@ -9,6 +9,8 @@ in this mode modifying the local is useless --> <ns:master-to-local-config mode="WIPEOUT" when="ALWAYS" overriding-master-url="http://obo.svn.sourceforge.net/viewvc/*checkout*/obo/phenote/trunk/conf/smart-atlas.cfg" /> + + <!-- ********************* FILE ADAPTERS ************************** --> <!-- be sure to include at least one enabled file adapter --> @@ -72,6 +74,7 @@ <!-- *********************** SETTINGS **************************** --> <ns:uvic-graph enable="false"/> <ns:term-history enable="false"/> + <ns:data-input-servlet enable="true"/> <ns:auto-update-ontologies enable="true"/> <!--true=update; false=don't update--> <!--set to 0 if you want to bypass the check; time in seconds--> <ns:update-timer timer="10"/> Modified: phenote/trunk/src/java/phenote/config/Config.java =================================================================== --- phenote/trunk/src/java/phenote/config/Config.java 2007-07-04 22:23:44 UTC (rev 698) +++ phenote/trunk/src/java/phenote/config/Config.java 2007-07-05 13:16:21 UTC (rev 699) @@ -19,6 +19,7 @@ import phenote.config.xml.AutoUpdateOntologiesDocument.AutoUpdateOntologies; import phenote.config.xml.AutocompleteSettingsDocument.AutocompleteSettings; import phenote.config.xml.DataadapterDocument.Dataadapter; +import phenote.config.xml.DataInputServletDocument.DataInputServlet; import phenote.config.xml.FieldDocument.Field; import phenote.config.xml.GroupDocument.Group; import phenote.config.xml.LogDocument.Log; @@ -592,6 +593,19 @@ getUvicGraphBean().setEnable(enable); } + public boolean dataInputServletIsEnabled() { + return getDataInputServletBean().getEnable(); + } + + private DataInputServlet getDataInputServletBean() { + DataInputServlet d = phenoConfigBean.getDataInputServlet(); + if (d == null) d = phenoConfigBean.addNewDataInputServlet(); + return d; + } + public void setDataInputServletIsEnabled(boolean enable) { + getDataInputServletBean().setEnable(enable); + } + public boolean termHistoryIsEnabled() { return getHistoryBean().getEnable(); } @@ -1045,6 +1059,7 @@ phenoConfigBean.setAuthor(author); return; } + public List<Group> getFieldGroups() { return Arrays.asList(this.phenoConfigBean.getGroupArray()); Modified: phenote/trunk/src/java/phenote/main/Phenote.java =================================================================== --- phenote/trunk/src/java/phenote/main/Phenote.java 2007-07-04 22:23:44 UTC (rev 698) +++ phenote/trunk/src/java/phenote/main/Phenote.java 2007-07-05 13:16:21 UTC (rev 699) @@ -107,8 +107,8 @@ phenote.splashScreenDestruct(); } - // if (Config.inst().doSmartAtlasServlet()) - new phenote.servlet.DataInputServer(); + if (Config.inst().dataInputServletIsEnabled()) + new phenote.servlet.DataInputServer(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 22:23:43
|
Revision: 698 http://svn.sourceforge.net/obo/?rev=698&view=rev Author: mgibson Date: 2007-07-04 15:23:44 -0700 (Wed, 04 Jul 2007) Log Message: ----------- using new datatag config datatag can be used to set fields in a char (along with (display) name) char fields know their data tag added datatags to smart-atlas.cfg datatag should replace syntax-abbrev fixed -c cmd line so its always in terms of wiping out config Modified Paths: -------------- phenote/trunk/conf/smart-atlas.cfg phenote/trunk/src/java/phenote/config/Config.java phenote/trunk/src/java/phenote/config/FieldConfig.java phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java phenote/trunk/src/java/phenote/datamodel/CharField.java phenote/trunk/src/java/phenote/datamodel/Character.java Modified: phenote/trunk/conf/smart-atlas.cfg =================================================================== --- phenote/trunk/conf/smart-atlas.cfg 2007-07-04 19:13:21 UTC (rev 697) +++ phenote/trunk/conf/smart-atlas.cfg 2007-07-04 22:23:44 UTC (rev 698) @@ -7,8 +7,8 @@ <!-- wipeout always means that the master will always wipeout the local copy in this mode modifying the local is useless --> - <!--ns:master-to-local-config mode="WIPEOUT" when="ALWAYS" - overriding-master-url="http://obo.svn.sourceforge.net/viewvc/*checkout*/obo/phenote/trunk/conf/birn2.cfg" /--> + <ns:master-to-local-config mode="WIPEOUT" when="ALWAYS" + overriding-master-url="http://obo.svn.sourceforge.net/viewvc/*checkout*/obo/phenote/trunk/conf/smart-atlas.cfg" /> <!-- ********************* FILE ADAPTERS ************************** --> <!-- be sure to include at least one enabled file adapter --> @@ -18,17 +18,17 @@ <!-- ******************** FIELD DEFINITIONS *********************** --> - <ns:field name="Image Name" enable="true" desc="Name of image"/> - <ns:field name="Image Source" enable="true" desc="Source of image"/> - <ns:field name="Annot type" enable="true" desc="Point,line,area,entireimage"/> - <ns:field name="Regions" enable="true" desc="comma delim list of regions, break into sep chars?"/> - <ns:field name="Coordinates" enable="true" desc="coordinates of user selection of image"/> - <ns:field name="User Name" enable="true" desc="should this be hidden?, read only"/> - <ns:field name="Timestamp" enable="true" desc="read only, hidden?"/> - <ns:field name="Slice Type" enable="true" desc="coronal or sagittal, read only?"/> - <ns:field name="Slice Number" enable="true" desc="images have many slices(?)"/> + <ns:field name="Image Name" datatag="imagename" enable="true" desc="Name of image"/> + <ns:field name="Image Source" datatag="imagesource" enable="true" desc="Source of image"/> + <ns:field name="Annot type" datatag="annotationtype" enable="true" desc="Point,line,area,entireimage"/> + <ns:field name="Regions" datatag="regions" enable="true" desc="comma delim list of regions, break into sep chars?"/> + <ns:field name="Coordinates" datatag="coordinates" enable="true" desc="coordinates of user selection of image"/> + <ns:field name="User Name" datatag="userName" enable="true" desc="should this be hidden?, read only"/> + <ns:field name="Timestamp" datatag="timestamp" enable="true" desc="read only, hidden?"/> + <ns:field name="Slice Type" datatag="slicetype" enable="true" desc="coronal or sagittal, read only?"/> + <ns:field name="Slice Number" datatag="slicenumber" enable="true" desc="images have many slices(?)"/> - <ns:field name="Entity" syntax-abbrev="E" enable="true"> + <ns:field name="Entity" datatag="E" enable="true"> <ns:ontology name="Relationship" is-postcomp-rel="true" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/OBO_REL/ro.obo"/> <ns:ontology name="SAO" file="SAO.obo"/> @@ -40,13 +40,15 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> + <ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> </ns:field> - <ns:field name="Quality" syntax-abbrev="Q" enable="true"> + <ns:field name="Quality" datatag="Q" enable="true"> <ns:ontology file="http://www.berkeleybop.org/ontologies/obo-all/quality/quality.obo"/> </ns:field> - <ns:field name="Add'l Entity" syntax-abbrev="E2" enable="true"> + <ns:field name="Add'l Entity" datatag="E2" enable="true"> <ns:ontology name="Relationship" is-postcomp-rel="true" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/OBO_REL/ro.obo"/> <!--ns:ontology name="SAO" file="SAO.obo"/--> @@ -58,11 +60,13 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> + <ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> </ns:field> - <ns:field name="Compare To" syntax-abbrev="Compar" enable="true"/> + <ns:field name="Compare To" datatag="Compar" enable="true"/> - <ns:field name="Description" syntax-abbrev="Desc" enable="true"/> + <ns:field name="Description" datatag="Desc" enable="true"/> <!-- *********************** SETTINGS **************************** --> Modified: phenote/trunk/src/java/phenote/config/Config.java =================================================================== --- phenote/trunk/src/java/phenote/config/Config.java 2007-07-04 19:13:21 UTC (rev 697) +++ phenote/trunk/src/java/phenote/config/Config.java 2007-07-04 22:23:44 UTC (rev 698) @@ -71,6 +71,7 @@ private boolean configInitialized = false; private boolean configModified = false; + private boolean alwaysOverride = false; //flag for if any settings during session have changed, such as search params, col widths, etc. private final static String myphenoteFile = "my-phenote"; @@ -145,8 +146,10 @@ setConfigFile(configFile,true,false,true); } + /** -c from command line does this - should be always but isnt??? */ public void setOverwriteConfigFile(String configFile) throws ConfigException { if (configFile==null) configFile = getDefaultFile(); + alwaysOverride = true; // make sure it wipes out always setConfigFile(configFile,true,true,false); } @@ -198,7 +201,7 @@ to personal if personal doesnt exist, if personal exists ignore passed in config file */ private void setConfigFile(String file, boolean usePersonalConfig, - boolean overwritePersonalConfig,boolean mergeConfigs) + boolean overwritePersonalConfig,boolean mergeConfigs) throws ConfigException { this.configFile = file; // ?? setNameFromConfigFile(file); // ?? @@ -394,6 +397,7 @@ } private boolean isAlways() { + if (alwaysOverride) return true; if (!haveXmlBean()) return false; String when = masterToLocalBean.getWhen(); if (when == null) return false; Modified: phenote/trunk/src/java/phenote/config/FieldConfig.java =================================================================== --- phenote/trunk/src/java/phenote/config/FieldConfig.java 2007-07-04 19:13:21 UTC (rev 697) +++ phenote/trunk/src/java/phenote/config/FieldConfig.java 2007-07-04 22:23:44 UTC (rev 698) @@ -180,14 +180,32 @@ //this.syntaxAbbrev = syn; fieldBean.setSyntaxAbbrev(syn); } - /** gets from label if no syntax abbrev explicitly set, replaces spaces with underscores + /** gets from datatag then label if no syntax abbrev explicitly set, + replaces spaces with underscores in label as pheno syntax is sensitive to spaces (in theory at least) */ String getSyntaxAbbrev() { String s = fieldBean.getSyntaxAbbrev(); - if (s == null) s = getLabel(); // setSynAbb? - s = s.replace(' ','_'); + if (s == null) s = fieldBean.getDatatag(); + if (s == null) { + s = getLabel(); // setSynAbb? + s = s.replace(' ','_'); + } return s; } + + /** DataTag should replace syntax abbrev has a handle to the field, used by + DataInputServlet (and should be used by syn adapter) */ + void setDataTag(String dt) { + fieldBean.setDatatag(dt); + } + + /** First tries to return explicitly set datatag, 2nd syn abbrev, 3rd label w _ */ + public String getDataTag() { + String s = fieldBean.getDatatag(); + if (s == null) s = getSyntaxAbbrev(); + return s; + } + //void String getSyntaxAbbrev() { return syntaxAbbrev; } /** Test both syntaxAbbrev & label - also test for replacing spaces with underscores */ boolean hasSyntaxAbbrev(String abb) { @@ -221,7 +239,7 @@ configs - so this is funny but its actually not funny */ public CharField getCharField() { if (charField == null) - charField = new CharField(getLabel()); + charField = new CharField(getLabel(),getDataTag()); return charField; } boolean hasCharField(CharField cf) { return charField == cf; } Modified: phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java =================================================================== --- phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java 2007-07-04 19:13:21 UTC (rev 697) +++ phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java 2007-07-04 22:23:44 UTC (rev 698) @@ -438,7 +438,7 @@ // getFieldConfigList gives enabled fields - not disabled for (FieldConfig fieldConfig : cfg().getEnbldFieldCfgs()) { if (!fieldConfig.isEnabled()) continue; // not necasary actually - CharField cf = new CharField(fieldConfig.getLabel()); + CharField cf = new CharField(fieldConfig.getLabel(),fieldConfig.getDataTag()); fieldConfig.setCharField(cf); // ONTOLOGIES Modified: phenote/trunk/src/java/phenote/datamodel/CharField.java =================================================================== --- phenote/trunk/src/java/phenote/datamodel/CharField.java 2007-07-04 19:13:21 UTC (rev 697) +++ phenote/trunk/src/java/phenote/datamodel/CharField.java 2007-07-04 22:23:44 UTC (rev 698) @@ -17,18 +17,21 @@ private List<Ontology> ontologyList = new ArrayList<Ontology>(3); private CharFieldEnum charFieldEnum; // or subclass - private String name; + private String name; // display name + private String tag; // non display tag to refer to field (no spaces...) private boolean postCompAllowed=false; private Ontology postCompRelOntol; // index? orderNumber? for order in gui/datamodel? + /** used for relationship */ public CharField(CharFieldEnum c) { charFieldEnum = c; } /** a generic field with no char field enum - get hip */ - public CharField(String name) { + public CharField(String name,String tag) { this.name = name; + this.tag = tag; } public void addOntology(Ontology o) { @@ -50,6 +53,13 @@ return name; } + public boolean isField(String tag) { + if (tag.equalsIgnoreCase(this.tag)) return true; + if (tag.equalsIgnoreCase(name)) return true; + // check with _ substition for spaces?? shouldnt have to + return false; + } + public CharFieldEnum getCharFieldEnum() { return charFieldEnum; } /** generic fields dont have enums */ Modified: phenote/trunk/src/java/phenote/datamodel/Character.java =================================================================== --- phenote/trunk/src/java/phenote/datamodel/Character.java 2007-07-04 19:13:21 UTC (rev 697) +++ phenote/trunk/src/java/phenote/datamodel/Character.java 2007-07-04 22:23:44 UTC (rev 698) @@ -22,7 +22,8 @@ not found in ontologies associated with field */ public void setValue(String fieldString, String valueString) throws CharFieldException,TermNotFoundException { - setValue(getCharFieldForName(fieldString),valueString); + CharField cf = getCharFieldForName(fieldString); + setValue(cf,valueString); } /** for generic fields its just a map from char field to char field value */ @@ -99,7 +100,8 @@ public CharField getCharFieldForName(String fieldName) throws CharFieldException { for (CharField cf : getAllCharFields()) { - if (cf.getName().equalsIgnoreCase(fieldName)) + //if (cf.getName().equalsIgnoreCase(fieldName)) + if (cf.isField(fieldName)) // checks name and datatag return cf; } throw new CharFieldException("No field for "+fieldName); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 19:13:19
|
Revision: 697 http://svn.sourceforge.net/obo/?rev=697&view=rev Author: mgibson Date: 2007-07-04 12:13:21 -0700 (Wed, 04 Jul 2007) Log Message: ----------- added datatag as config param to replace syntax-abbrev as its more general and syntax abbrev is really a data tag also added config to rnc/beans for enabling DataInputServlet also fixed bug in DataInputServlet Modified Paths: -------------- phenote/trunk/conf/phenote-config.rnc phenote/trunk/conf/phenote-config.xsd phenote/trunk/jars/phenoteconfigbeans.jar phenote/trunk/src/java/phenote/servlet/DataInputServlet.java Modified: phenote/trunk/conf/phenote-config.rnc =================================================================== --- phenote/trunk/conf/phenote-config.rnc 2007-07-04 18:56:50 UTC (rev 696) +++ phenote/trunk/conf/phenote-config.rnc 2007-07-04 19:13:21 UTC (rev 697) @@ -18,7 +18,8 @@ obo-repository, autocomplete-settings, field*, - group* + group*, + data-input-servlet } ## specify how the master config interacts with local/cached config @@ -51,8 +52,12 @@ attribute config-file { xsd:string } } +## Weather to enable uvic graphics - not working so well so should stay disabled uvic-graph = element uvic-graph { attribute enable { xsd:boolean } } +## Whether to enable DataInputServlet - used by SmartAtlas +data-input-servlet = element data-input-servlet { attribute enable { xsd:boolean } } + term-history = element term-history { attribute enable { xsd:boolean } } auto-update-ontologies = element auto-update-ontologies { attribute enable { xsd:boolean } } @@ -75,8 +80,10 @@ attribute name { xsd:string }, attribute colwidth { xsd:int }, attribute desc { xsd:string }, - ## tag for field for pheno-syntax adapter + ## tag for field for pheno-syntax adapter - replaced by datatag attribute syntax-abbrev { xsd:string }, + ## tag for field, replaces syntax-abbrev + attribute datatag { xsd:string }, ## whether field is free text or constrained by ontology - take out? ## this is actually unnecasary - if there is no file free text is assumed attribute type { "free_text" | "ontology" }, Modified: phenote/trunk/conf/phenote-config.xsd =================================================================== --- phenote/trunk/conf/phenote-config.xsd 2007-07-04 18:56:50 UTC (rev 696) +++ phenote/trunk/conf/phenote-config.xsd 2007-07-04 19:13:21 UTC (rev 697) @@ -14,6 +14,7 @@ <xs:element ref="x:autocomplete-settings"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="x:field"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="x:group"/> + <xs:element ref="x:data-input-servlet"/> </xs:sequence> <xs:attribute name="version" use="required" type="xs:string"/> <xs:attribute name="description" use="required" type="xs:string"/> @@ -45,6 +46,11 @@ <xs:attribute name="enable" use="required" type="xs:boolean"/> </xs:complexType> </xs:element> + <xs:element name="data-input-servlet"> + <xs:complexType> + <xs:attribute name="enable" use="required" type="xs:boolean"/> + </xs:complexType> + </xs:element> <xs:element name="term-history"> <xs:complexType> <xs:attribute name="enable" use="required" type="xs:boolean"/> @@ -89,9 +95,14 @@ <xs:attribute name="desc" use="required" type="xs:string"/> <xs:attribute name="syntax-abbrev" use="required" type="xs:string"> <xs:annotation> - <xs:documentation>tag for field for pheno-syntax adapter</xs:documentation> + <xs:documentation>tag for field for pheno-syntax adapter - replaced by datatag</xs:documentation> </xs:annotation> </xs:attribute> + <xs:attribute name="datatag" use="required" type="xs:string"> + <xs:annotation> + <xs:documentation>tag for field, replaces syntax-abbrev</xs:documentation> + </xs:annotation> + </xs:attribute> <xs:attribute name="type" use="required"> <xs:simpleType> <xs:restriction base="xs:token"> Modified: phenote/trunk/jars/phenoteconfigbeans.jar =================================================================== (Binary files differ) Modified: phenote/trunk/src/java/phenote/servlet/DataInputServlet.java =================================================================== --- phenote/trunk/src/java/phenote/servlet/DataInputServlet.java 2007-07-04 18:56:50 UTC (rev 696) +++ phenote/trunk/src/java/phenote/servlet/DataInputServlet.java 2007-07-04 19:13:21 UTC (rev 697) @@ -22,7 +22,7 @@ //private static final String CONFIG_FILE_PARAM = "configuration-file"; // PhenoteServlet.class is the distinct name for this logger - private static final Logger LOG = Logger.getLogger(PhenoteServlet.class); + private static final Logger LOG = Logger.getLogger(DataInputServlet.class); public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 18:56:48
|
Revision: 696 http://svn.sourceforge.net/obo/?rev=696&view=rev Author: mgibson Date: 2007-07-04 11:56:50 -0700 (Wed, 04 Jul 2007) Log Message: ----------- uncommented out wipeout always so we can change config for birn without having to do release - nicole is this alright? i know you commented it out is this because it wipes out user prefs (which needs to be fixed for sure) Modified Paths: -------------- phenote/trunk/conf/birn2.cfg Modified: phenote/trunk/conf/birn2.cfg =================================================================== --- phenote/trunk/conf/birn2.cfg 2007-07-04 18:19:37 UTC (rev 695) +++ phenote/trunk/conf/birn2.cfg 2007-07-04 18:56:50 UTC (rev 696) @@ -7,8 +7,8 @@ <!-- wipeout always means that the master will always wipeout the local copy in this mode modifying the local is useless --> - <!--ns:master-to-local-config mode="WIPEOUT" when="ALWAYS" - overriding-master-url="http://obo.svn.sourceforge.net/viewvc/*checkout*/obo/phenote/trunk/conf/birn2.cfg" /--> + <ns:master-to-local-config mode="WIPEOUT" when="ALWAYS" + overriding-master-url="http://obo.svn.sourceforge.net/viewvc/*checkout*/obo/phenote/trunk/conf/birn2.cfg" /> <!-- ********************* FILE ADAPTERS ************************** --> <!-- be sure to include at least one enabled file adapter --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 18:19:36
|
Revision: 695 http://svn.sourceforge.net/obo/?rev=695&view=rev Author: mgibson Date: 2007-07-04 11:19:37 -0700 (Wed, 04 Jul 2007) Log Message: ----------- added disease ontology to entity does it belong as entity or as its own field??? Modified Paths: -------------- phenote/trunk/conf/birn2.cfg Modified: phenote/trunk/conf/birn2.cfg =================================================================== --- phenote/trunk/conf/birn2.cfg 2007-07-04 15:41:51 UTC (rev 694) +++ phenote/trunk/conf/birn2.cfg 2007-07-04 18:19:37 UTC (rev 695) @@ -35,6 +35,8 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> + <ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> </ns:field> <ns:field name="Quality" syntax-abbrev="Q" enable="true"> @@ -53,6 +55,8 @@ file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> <ns:ontology name="CHEBI" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> + <ns:ontology name="DO" + file="http://www.berkeleybop.org/ontologies/obo-all/disease_ontology/disease_ontology.obo"/> </ns:field> <ns:field name="Compare To" syntax-abbrev="Compar" enable="true"/> @@ -69,5 +73,6 @@ <!-- ******************** REVISION HISTORY *********************** --> <!-- 06.20.2007 - added link to GO-edit file --> + <!-- 07.04.2007 - added disease ontology as entity(??) --> </ns:phenote-configuration> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 15:41:51
|
Revision: 694 http://svn.sourceforge.net/obo/?rev=694&view=rev Author: mgibson Date: 2007-07-04 08:41:51 -0700 (Wed, 04 Jul 2007) Log Message: ----------- config for birns smart atlas that will take http requests from smart atlas Added Paths: ----------- phenote/trunk/conf/smart-atlas.cfg Added: phenote/trunk/conf/smart-atlas.cfg =================================================================== --- phenote/trunk/conf/smart-atlas.cfg (rev 0) +++ phenote/trunk/conf/smart-atlas.cfg 2007-07-04 15:41:51 UTC (rev 694) @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ns:phenote-configuration version="1.3-beta1" xmlns:ns="phenote/config/xml" + name="BIRN Test Config 2" + author="Nicole Washington" + description="A test for finding a config for BIRN so I can test annotate from their spreadsheet. It includes their converted brain subcellular anatomy ontology (SAO)."> + <ns:log config-file="conf/log4j-standalone.xml"/> + + <!-- wipeout always means that the master will always wipeout the local copy + in this mode modifying the local is useless --> + <!--ns:master-to-local-config mode="WIPEOUT" when="ALWAYS" + overriding-master-url="http://obo.svn.sourceforge.net/viewvc/*checkout*/obo/phenote/trunk/conf/birn2.cfg" /--> + + <!-- ********************* FILE ADAPTERS ************************** --> + <!-- be sure to include at least one enabled file adapter --> + <ns:dataadapter name="phenote.dataadapter.delimited.DelimitedFileAdapter" enable="true"/> + <ns:dataadapter name="phenote.dataadapter.phenosyntax.PhenoSyntaxFileAdapter" enable="true"/> + <ns:dataadapter name="phenote.dataadapter.phenoxml.PhenoXmlAdapter" enable="true"/> + + + <!-- ******************** FIELD DEFINITIONS *********************** --> + <ns:field name="Image Name" enable="true" desc="Name of image"/> + <ns:field name="Image Source" enable="true" desc="Source of image"/> + <ns:field name="Annot type" enable="true" desc="Point,line,area,entireimage"/> + <ns:field name="Regions" enable="true" desc="comma delim list of regions, break into sep chars?"/> + <ns:field name="Coordinates" enable="true" desc="coordinates of user selection of image"/> + <ns:field name="User Name" enable="true" desc="should this be hidden?, read only"/> + <ns:field name="Timestamp" enable="true" desc="read only, hidden?"/> + <ns:field name="Slice Type" enable="true" desc="coronal or sagittal, read only?"/> + <ns:field name="Slice Number" enable="true" desc="images have many slices(?)"/> + + <ns:field name="Entity" syntax-abbrev="E" enable="true"> + <ns:ontology name="Relationship" is-postcomp-rel="true" + file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/OBO_REL/ro.obo"/> + <ns:ontology name="SAO" file="SAO.obo"/> + <ns:ontology name="FMA" file="fma_obo.obo"/> + <ns:ontology name="Mouse" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/anatomy/gross_anatomy/animal_gross_anatomy/mouse/adult_mouse_anatomy.obo"/> + <ns:ontology name="GO" + file="ftp://ftp.geneontology.org/pub/go/ontology/gene_ontology_edit.obo"/> + <ns:ontology name="CL" + file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> + <ns:ontology name="CHEBI" + file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> + </ns:field> + + <ns:field name="Quality" syntax-abbrev="Q" enable="true"> + <ns:ontology file="http://www.berkeleybop.org/ontologies/obo-all/quality/quality.obo"/> + </ns:field> + + <ns:field name="Add'l Entity" syntax-abbrev="E2" enable="true"> + <ns:ontology name="Relationship" is-postcomp-rel="true" + file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/OBO_REL/ro.obo"/> + <!--ns:ontology name="SAO" file="SAO.obo"/--> + <ns:ontology name="FMA" file="fma_obo.obo"/> + <ns:ontology name="Mouse" file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/anatomy/gross_anatomy/animal_gross_anatomy/mouse/adult_mouse_anatomy.obo"/> + <ns:ontology name="GO" + file="ftp://ftp.geneontology.org/pub/go/ontology/gene_ontology_edit.obo"/> + <ns:ontology name="CL" + file="http://www.berkeleybop.org/ontologies/obo-all/cell/cell.obo" /> + <ns:ontology name="CHEBI" + file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/chemical/chebi.obo"/> + </ns:field> + + <ns:field name="Compare To" syntax-abbrev="Compar" enable="true"/> + + <ns:field name="Description" syntax-abbrev="Desc" enable="true"/> + + + <!-- *********************** SETTINGS **************************** --> + <ns:uvic-graph enable="false"/> + <ns:term-history enable="false"/> + <ns:auto-update-ontologies enable="true"/> <!--true=update; false=don't update--> + <!--set to 0 if you want to bypass the check; time in seconds--> + <ns:update-timer timer="10"/> + + <!-- ******************** REVISION HISTORY *********************** --> + <!-- 06.20.2007 - added link to GO-edit file --> + +</ns:phenote-configuration> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 15:40:51
|
Revision: 693 http://svn.sourceforge.net/obo/?rev=693&view=rev Author: mgibson Date: 2007-07-04 08:40:53 -0700 (Wed, 04 Jul 2007) Log Message: ----------- jetty jars needed for servlet Added Paths: ----------- phenote/trunk/jars/jetty-6.1.4.jar phenote/trunk/jars/jetty-util-6.1.4.jar Added: phenote/trunk/jars/jetty-6.1.4.jar =================================================================== (Binary files differ) Property changes on: phenote/trunk/jars/jetty-6.1.4.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: phenote/trunk/jars/jetty-util-6.1.4.jar =================================================================== (Binary files differ) Property changes on: phenote/trunk/jars/jetty-util-6.1.4.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-07-04 15:36:44
|
Revision: 692 http://svn.sourceforge.net/obo/?rev=692&view=rev Author: mgibson Date: 2007-07-04 08:36:43 -0700 (Wed, 04 Jul 2007) Log Message: ----------- Added DataInputServlet and server - takes in http where params are fields and enters as new character - just 1 - this is for SmartAtlas which will send data over to phenote restful/http - at first i thought this was particular to smart atlas and i was going to hardwire the smart atlas params then i realized http request is just a tag value hash and phenote is really just a tag val hash (configged semantics coming) and so really its a general tool of just entering a http request as a character into phenote if we wanted to do more than one character(row) we probably will want to resort to xml - but for now a simple hash is fine. so servlet causes transaction of adding row - which previously was not sending out change event but now is so character table panel refreshes and causesd a little refactoring of transactions Modified Paths: -------------- phenote/trunk/src/java/phenote/config/Config.java phenote/trunk/src/java/phenote/datamodel/CharFieldValue.java phenote/trunk/src/java/phenote/edit/AddTransaction.java phenote/trunk/src/java/phenote/edit/CharChangeEvent.java phenote/trunk/src/java/phenote/edit/CompoundTransaction.java phenote/trunk/src/java/phenote/edit/DeleteTransaction.java phenote/trunk/src/java/phenote/edit/EditManager.java phenote/trunk/src/java/phenote/edit/TransactionI.java phenote/trunk/src/java/phenote/edit/UpdateTransaction.java phenote/trunk/src/java/phenote/gui/CharacterTableModel.java phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java phenote/trunk/src/java/phenote/main/CommandLine.java phenote/trunk/src/java/phenote/main/Phenote.java Added Paths: ----------- phenote/trunk/src/java/phenote/servlet/DataInputServer.java phenote/trunk/src/java/phenote/servlet/DataInputServlet.java Modified: phenote/trunk/src/java/phenote/config/Config.java =================================================================== --- phenote/trunk/src/java/phenote/config/Config.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/config/Config.java 2007-07-04 15:36:43 UTC (rev 692) @@ -48,7 +48,7 @@ private List<FieldConfig> enabledFields = new ArrayList<FieldConfig>(); /** enabled & disabled */ private List<FieldConfig> allFields = new ArrayList<FieldConfig>(); - private static final String defaultLogConfigFile = "conf/log4j.xml"; + private static final String defaultLogConfigFile = "conf/log4j-standalone.xml"; // maybe should be using xmlbean where possible? //private boolean uvicGraphEnabled = false; // default false for now //private boolean termHistoryEnabled = false; //default to false for now Modified: phenote/trunk/src/java/phenote/datamodel/CharFieldValue.java =================================================================== --- phenote/trunk/src/java/phenote/datamodel/CharFieldValue.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/datamodel/CharFieldValue.java 2007-07-04 15:36:43 UTC (rev 692) @@ -75,6 +75,7 @@ } void setCharacter(CharacterI c) { character = c; } + public CharacterI getCharacter() { return character; } boolean isEmpty() { if (isOboClass) Modified: phenote/trunk/src/java/phenote/edit/AddTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/AddTransaction.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/AddTransaction.java 2007-07-04 15:36:43 UTC (rev 692) @@ -1,5 +1,8 @@ package phenote.edit; +import java.util.ArrayList; +import java.util.List; + import org.geneontology.oboedit.datamodel.OBOClass; import phenote.datamodel.CharacterI; @@ -13,19 +16,35 @@ public class AddTransaction implements TransactionI { private CharacterI addChar; + private boolean isUndone = false; + // private int index; ?? public AddTransaction(CharacterI chr) { addChar = chr; } public boolean isUpdate() { return false; } + public boolean isAdd() { return !isUndone; } public void editModel() { getCharList().add(addChar); + isUndone = false; + // index = getCharList().indexOf(addChar); ?? } - public void undo() { getCharList().remove(addChar); } + // public int getIndex() { return index; } ??? + public void undo() { + getCharList().remove(addChar); + isUndone = true; + } + + public List<CharacterI> getCharacters() { + List<CharacterI> l = new ArrayList<CharacterI>(); + l.add(addChar); + return l; + } + // should char list be passed in? charlistMan part of edit pkg? private CharacterListI getCharList() { return CharacterListManager.inst().getCharacterList(); Modified: phenote/trunk/src/java/phenote/edit/CharChangeEvent.java =================================================================== --- phenote/trunk/src/java/phenote/edit/CharChangeEvent.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/CharChangeEvent.java 2007-07-04 15:36:43 UTC (rev 692) @@ -4,7 +4,11 @@ import org.geneontology.oboedit.datamodel.OBOClass; import phenote.datamodel.CharField; -/** This actually is for a CharField change - rename this CharFieldChangeEvent? */ +/** This actually is for a CharField change - rename this CharFieldChangeEvent? + but its really the value of the field thats changed + perhaps CharFieldValueChangeEvent - well thats verbose + but wait this holds the transaction that could be an update to a char field val + or a whole new char, or delete char... so maybe the name is proper */ public class CharChangeEvent extends EventObject { // UpdateTrans -> Transaction? yes! @@ -22,6 +26,7 @@ //public String getNewValueString() { return transaction.getNewValueString(); } public boolean isUpdate() { return transaction.isUpdate(); } + public boolean isAdd() { return transaction.isAdd(); } public TransactionI getTransaction() {return transaction;} Modified: phenote/trunk/src/java/phenote/edit/CompoundTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/CompoundTransaction.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/CompoundTransaction.java 2007-07-04 15:36:43 UTC (rev 692) @@ -80,6 +80,20 @@ List<TransactionI> getTransactions() { return childTransactions; } + public List<CharacterI> getCharacters() { + List<CharacterI>l = new ArrayList<CharacterI>(); + for (TransactionI t : getTransactions()) + l.addAll(t.getCharacters()); + return l; + } + + public boolean isAdd() { + if (!hasTransactions()) return false; + for (TransactionI t : getTransactions()) + if (!t.isAdd()) return false; + return true; + } + /** returns true if first child is update, assumes kids are homogenous which currently is a true assumption, change this if that becomes untrue */ public boolean isUpdate() { Modified: phenote/trunk/src/java/phenote/edit/DeleteTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/DeleteTransaction.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/DeleteTransaction.java 2007-07-04 15:36:43 UTC (rev 692) @@ -1,5 +1,7 @@ package phenote.edit; +import java.util.ArrayList; +import java.util.List; import org.geneontology.oboedit.datamodel.OBOClass; import phenote.datamodel.CharacterI; @@ -12,19 +14,32 @@ private CharacterI delChar; // remember where the char was in the list for undo private int listOrder; + private boolean isUndone = false; DeleteTransaction(CharacterI c) { delChar = c; } public void editModel() { listOrder = getCharList().indexOf(delChar); getCharList().remove(delChar); + isUndone = false; } // this doesnt put it where it came from on bulk delete as its getting reentered in // opposite order it got deleted - maybe compound trans should be aware and do kids // in reverse on undo? - actually thats general - public void undo() { getCharList().add(listOrder,delChar); } + public void undo() { + getCharList().add(listOrder,delChar); + isUndone = true; + } + public List<CharacterI> getCharacters() { + List<CharacterI> l = new ArrayList<CharacterI>(); + if (delChar!=null) l.add(delChar); + return l; + } + + public boolean isAdd() { return isUndone; } + public boolean isUpdate() { return false; } public boolean isUpdateForCharField(CharField c) { return false; } Modified: phenote/trunk/src/java/phenote/edit/EditManager.java =================================================================== --- phenote/trunk/src/java/phenote/edit/EditManager.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/EditManager.java 2007-07-04 15:36:43 UTC (rev 692) @@ -83,20 +83,33 @@ /** The initial blank character is a fundamental undoable state, so dont keep the transaction for this as its not undoable */ - public AddTransaction addInitialCharacter() { - AddTransaction at = new AddTransaction(new Character()); - at.editModel(); + public void addInitialCharacter() { + //AddTransaction at = new AddTransaction(new Character()); + //at.editModel(); + addCharacter(new Character(), false); // no addTransaction(at)! - return at; + //return at; } /** same as addInitialChar except we record the adding in the transaction list as it can be undone */ public void addNewCharacter() { - AddTransaction at = addInitialCharacter(); - addTransaction(at); + addCharacter(new Character(), true); + //addTransaction(at); } + public void addCharacter(Character c) { + addCharacter(c,true); + } + + // fire char change event??? + private void addCharacter(Character c, boolean recordTrans) { + AddTransaction at = new AddTransaction(c); + at.editModel(); + if (recordTrans) addTransaction(at); + fireChangeEvent(new CharChangeEvent(this,at)); // this??? + } + public void copyChars(List<CharacterI> charsToCopy) { if (charsToCopy.isEmpty()) { log().error("No chars to make copy of"); @@ -122,6 +135,8 @@ addTransaction(ct); } + + private void addTransaction(TransactionI t) { transactionList.add(t); //System.out.println("got trans "+t); new Throwable().printStackTrace(); Modified: phenote/trunk/src/java/phenote/edit/TransactionI.java =================================================================== --- phenote/trunk/src/java/phenote/edit/TransactionI.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/TransactionI.java 2007-07-04 15:36:43 UTC (rev 692) @@ -1,5 +1,8 @@ package phenote.edit; +import java.util.List; + +import phenote.datamodel.CharacterI; import phenote.datamodel.CharField; import org.geneontology.oboedit.datamodel.OBOClass; @@ -16,6 +19,8 @@ //public String getNewValueString(); public boolean isUpdate(); + public boolean isAdd(); + public List<CharacterI> getCharacters(); // public boolean isDelete(); // public String getDBIDString Modified: phenote/trunk/src/java/phenote/edit/UpdateTransaction.java =================================================================== --- phenote/trunk/src/java/phenote/edit/UpdateTransaction.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/edit/UpdateTransaction.java 2007-07-04 15:36:43 UTC (rev 692) @@ -1,5 +1,8 @@ package phenote.edit; +import java.util.ArrayList; +import java.util.List; + import org.geneontology.oboedit.datamodel.OBOClass; import phenote.datamodel.CharField; @@ -42,6 +45,14 @@ oldValue = c.getValue(cf); } + public List<CharacterI> getCharacters() { + List<CharacterI> l = new ArrayList<CharacterI>(); + if (newValue.getCharacter()!=null) l.add(newValue.getCharacter()); + return l; + } + + public boolean isAdd() { return false; } + public boolean isUpdate() { return true; } // hmmmmmmm.... Modified: phenote/trunk/src/java/phenote/gui/CharacterTableModel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/CharacterTableModel.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/gui/CharacterTableModel.java 2007-07-04 15:36:43 UTC (rev 692) @@ -48,9 +48,14 @@ return characterList.get(i); } + /** returns -1 if not found */ + int indexOf(CharacterI ch) { + return getCharacterList().indexOf(ch); + } + // this should come from datamodel not here - refactor CharacterListI getCharacterList() { - return characterList; + return getCharListManager().getCharacterList(); } void setCharacterList(CharacterListI charList) { @@ -100,19 +105,21 @@ // return addCharacter(copy); // } - /** return int[]? of all new rows to be selected? yes i think so */ + /** return RowInterval of all new rows to be selected? yes i think so + the caller (CharTablePanel) wants to know what rows were created + (so it can selection them) */ RowInterval copyChars(List<CharacterI> charsToCopy) { if (charsToCopy.isEmpty()) { log().error("No chars selected to make copy of"); return new RowInterval(-1,-1); // ex? } - EditManager.inst().copyChars(charsToCopy); // edits model + EditManager.inst().copyChars(charsToCopy); // edit characterTableModel.selects model //CompoundTransaction ct = CompoundTransaction.makeCopyTrans(charsToCopy); //ct.editModel(); // clones & adds char to char list fireTableRowsInserted(getRowCount(),getRowCount()); // updates table view int rowEnd = getRowCount() - 1; // -1 -> 0 based int rowStart = rowEnd - charsToCopy.size() + 1; // +1 inclusive - return new RowInterval(rowStart,rowEnd); // fix this - return int[]! + return new RowInterval(rowStart,rowEnd); } // /** Returns row # of row inserted */ Modified: phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java =================================================================== --- phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/gui/CharacterTablePanel.java 2007-07-04 15:36:43 UTC (rev 692) @@ -367,6 +367,8 @@ selectRow = 0; ignoreSelectionChange = false; } + + // SELECT ROWS if (selectRows != null) // multi select selectRows(selectRows); else if (doSelection) // single row select @@ -404,26 +406,37 @@ kicking out the selection state. so selected row is tracked and reinstated when a data change event happens - although yikes - we may get this event before the table model - i think this all has to be done together - not - independently... */ + independently... triggered by undo, copyChars, update field */ private class TableCharChangeListener implements CharChangeListener { public void charChanged(CharChangeEvent e) { if (e.isUpdate()) { repaint(); // repaint causes new cell val to get displayed - return; + return; // avoid select below } - int row = getSelectedRow(); // multi select?? row del? row add? - // this was commented out repaint was suffic but now needed for undo of copy/delete - // if this is slow we may need to get more savvy - but ill bet its fine - characterTableModel.fireTableDataChanged(); // ??? causes loss of selection - //setRowSelectionInterval(row,row); - // big problem, select row causes char select evt, CFG gets this and tries to - // update itself but causes ex if in middle of edit. need to be more savvy, if - // just char update then need to supress select event as its really just the table - // reinstating its selection actually if update just do repaint and return, - // if add or del then need to - // send out event - selectRow(row); - // repaint(); // is this needed after fireTableDataChanged? + if (e.isAdd()) { // works for add, compound add, delete-undo + charJTable.clearSelection(); + characterTableModel.fireTableDataChanged(); // ??? causes loss of selection + for (CharacterI c : e.getTransaction().getCharacters()) { // compound add?? + int addIndex = characterTableModel.indexOf(c); + if (addIndex != -1) + charJTable.addRowSelectionInterval(addIndex,addIndex); + } + } + else { // delete(undo add) + int selRow = getSelectedRow(); // multi select?? row del? row add? + // this was commented out repaint was suffic but now needed for undo of copy/delete + // if this is slow we may need to get more savvy - but ill bet its fine + characterTableModel.fireTableDataChanged(); // ??? causes loss of selection + //setRowSelectionInterval(row,row); + // big problem, select row causes char select evt, CFG gets this and tries to + // update itself but causes ex if in middle of edit. need to be more savvy, if + // just char update then need to supress select event as its really just the table + // reinstating its selection actually if update just do repaint and return, + // if add or del then need to + // send out event + selectRow(selRow); // ??? + // repaint(); // is this needed after fireTableDataChanged? + } } } Modified: phenote/trunk/src/java/phenote/main/CommandLine.java =================================================================== --- phenote/trunk/src/java/phenote/main/CommandLine.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/main/CommandLine.java 2007-07-04 15:36:43 UTC (rev 692) @@ -1,9 +1,13 @@ package phenote.main; +import java.io.FileNotFoundException; + import com.townleyenterprises.command.CommandOption; import com.townleyenterprises.command.CommandParser; import com.townleyenterprises.command.DefaultCommandListener; +import org.apache.log4j.xml.DOMConfigurator; + import phenote.config.Config; import phenote.config.ConfigException; import phenote.dataadapter.DataAdapterI; @@ -26,9 +30,11 @@ private CommandOption writeFile = new WriteFileCommandOption(); private CommandOption updateConfig = new UpdateConfigCommandOption(); private CommandOption setConfig = new SetConfigCommandOption(); + private CommandOption log = new LogCommandOption(); + private boolean logSpecified = false; CommandOption[] options = new CommandOption[] { inputFile, writeFile, updateConfig, - setConfig }; + setConfig, log }; // this guarantees that we get the right classes (compile time check) private final static String PHENOXML = PhenoXmlAdapter.class.getName(); @@ -163,8 +169,27 @@ } } + private class LogCommandOption extends CommandOption { + private final static String help = "Specify log file"; + private LogCommandOption() { + super("logFile",'l',true,"filename",help); + } + public void execute() throws Exception { + logSpecified = true; +// try { + DOMConfigurator.configure(getArg()); +// } +// catch (FileNotFoundException e) { +// //phenote.splashScreen.setProgress("bad file:"+e.getMessage(),10); +// //LOG.error(e.getMessage()); +// System.out.println("Cmdline log failed "+e.getMessage()); +// } + } + } + boolean isLogSpecified() { return logSpecified; } + /** INPUT FILE COMMAND OPTION */ private class InputFileCommandOption extends CommandOption { private final static String help = Modified: phenote/trunk/src/java/phenote/main/Phenote.java =================================================================== --- phenote/trunk/src/java/phenote/main/Phenote.java 2007-07-03 23:33:43 UTC (rev 691) +++ phenote/trunk/src/java/phenote/main/Phenote.java 2007-07-04 15:36:43 UTC (rev 692) @@ -83,10 +83,17 @@ // put this is in a phenote.util.Log class? - get file from config - default? phenote.splashScreen.setProgress("Configuring...", 10); - try { DOMConfigurator.configure(Config.inst().getLogConfigUrl()); } - catch (FileNotFoundException e) { - phenote.splashScreen.setProgress("bad file:"+e.getMessage(),10); - LOG.error(e.getMessage()); } + // LOG4J + if (!phenote.commandLine.isLogSpecified()) { + try { DOMConfigurator.configure(Config.inst().getLogConfigUrl()); } + catch (FileNotFoundException e) { + phenote.splashScreen.setProgress("bad file:"+e.getMessage(),10); + LOG.error(e.getMessage()); + } + } + + LOG.debug("debug test2 of log4j"); + phenote.splashScreen.setProgress("Initializing Ontologies...", 20); phenote.initOntologies(); phenote.splashScreen.setProgress("Ontologies Initialized", 70); @@ -98,9 +105,11 @@ { phenote.initGui(); phenote.splashScreenDestruct(); + } + // if (Config.inst().doSmartAtlasServlet()) + new phenote.servlet.DataInputServer(); - } } /** private constructor -> singleton */ Added: phenote/trunk/src/java/phenote/servlet/DataInputServer.java =================================================================== --- phenote/trunk/src/java/phenote/servlet/DataInputServer.java (rev 0) +++ phenote/trunk/src/java/phenote/servlet/DataInputServer.java 2007-07-04 15:36:43 UTC (rev 692) @@ -0,0 +1,83 @@ +package phenote.servlet; + +//import org.mortbay.http.HttpContext; +import org.mortbay.jetty.HttpContent; +//import org.mortbay.http.HttpServer; +import org.mortbay.jetty.Server; +//import org.mortbay.http.SocketListener; +import org.mortbay.jetty.Connector; +import org.mortbay.jetty.bio.SocketConnector; +import org.mortbay.jetty.servlet.ServletHandler; +import org.mortbay.jetty.servlet.ServletHolder; +//import org.mortbay.util.MultiException; + +import org.apache.log4j.*; + +/** this class kicks off the servlet. modeled after igb's UnibrowControlServer + * maybe this should go in dataadapter? as its gonna end up loading new data + * actually for now it just scrolls/zooms to range + remodeled after org.mortbay.jetty.example.MinimalServlets */ + +public class DataInputServer { + + // ----------------------------------------------------------------------- + // Class/static variables + // ----------------------------------------------------------------------- + + protected final static Logger logger = LogManager.getLogger(DataInputServer.class); + + private static final int DEFAULT_SERVER_PORT = 8085; // igb is 7085 + private static final String SERVLET_NAME = "phenote"; + + public DataInputServer() { + + // for now just setting port to default - eventually should test if port + // is free, and if not try other ports (like igb does) + int serverPort = DEFAULT_SERVER_PORT; + + //HttpServer httpServer = new HttpServer(); + Server server = new Server(); + // Create a port listener + //SocketListener listener = new SocketListener(); + Connector connector = new SocketConnector(); + //listener.setPort(serverPort); + connector.setPort(serverPort); + //httpServer.addListener(listener); + server.setConnectors(new Connector[]{connector}); + // Create a servlet container + ServletHandler handler = new ServletHandler(); + //context.addHandler(servlets); + server.setHandler(handler); + String servletClassName = "phenote.servlet.DataInputServlet"; + handler.addServletWithMapping(servletClassName, "/"+SERVLET_NAME); // phenote? phenote-input? + + // Map a servlet onto the container +// ServletHolder sholder = handler.addServlet(SERVLET_NAME, "/"+SERVLET_NAME+"/*", +// servletClassName); +// sholder.setInitOrder(1); + // Create a context + //HttpContext context = new HttpContext(); ???? + //context.setContextPath("/"); + //httpServer.addContext(context); // ??? + + String s = "http://localhost:"+serverPort+"/"+SERVLET_NAME; + logger.debug("http server starting at "+s); + System.out.println("http server starting at "+s); + try { + // Start the http server + server.start(); // throws MultiException + // this doesnt return - stays in it + server.join(); + } + catch (Exception e) { + logger.debug("http server wont start", e); + System.out.println("http server wont start"+ e); + } + + //logger.debug("http server started at "+s); + //ystem.out.println("http server started at "+s); + //DataInputServlet smartAtlasController = + // (DataInputServlet)sholder.getServlet(); + } + +} Added: phenote/trunk/src/java/phenote/servlet/DataInputServlet.java =================================================================== --- phenote/trunk/src/java/phenote/servlet/DataInputServlet.java (rev 0) +++ phenote/trunk/src/java/phenote/servlet/DataInputServlet.java 2007-07-04 15:36:43 UTC (rev 692) @@ -0,0 +1,185 @@ +package phenote.servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Date; +import java.util.Enumeration; +import java.util.Vector; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; + +import phenote.datamodel.Character; +import phenote.datamodel.CharFieldException; +import phenote.datamodel.TermNotFoundException; +import phenote.edit.EditManager; + + +public class DataInputServlet extends HttpServlet { + + //private static final String CONFIG_FILE_PARAM = "configuration-file"; + // PhenoteServlet.class is the distinct name for this logger + private static final Logger LOG = Logger.getLogger(PhenoteServlet.class); + + public void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + System.out.println("got get" +request); + LOG.debug("servlet doGet " + new Date()); + + Character ch = new Character(); + Enumeration e = request.getParameterNames(); + while (e.hasMoreElements()) { + Object o = e.nextElement(); + LOG.debug("param "+o); + // test if instance of String? + String field = (String)o; + String value = request.getParameter(field); + try { + ch.setValue(field,value); + } + catch (CharFieldException cfe) { + LOG.error("field not found "+cfe); + } + catch (TermNotFoundException tnfe) { + LOG.error("term not found in field "+field+" "+tnfe); + } + } + EditManager.inst().addCharacter(ch); + } + + /** + * if <load-on-startup>1</load-on-startup> is in web.xml then init will + * happen when web server started (or if code recompiled) - so this is where + * the ontology reading & caching goes + */ + public void init() throws ServletException { + //initDate = new Date(); + super.init(); + // makes links for term info - put this method in Phenote? + //HtmlUtil.setStandAlone(false); + //phenote = Phenote.getPhenote(); + // from web.xml + //String configFile = getInitParameter(CONFIG_FILE_PARAM); + // just in case not in web.xml + //if (configFile == null || configFile.equals("")) + // configFile = "/birn2.cfg"; + //boolean DEBUG = true; if (DEBUG) configFile = "/fiddle.cfg"; +// try { +// Config.inst().setConfigFile(configFile); // causes parse of file +// } catch (ConfigException e) { +// String m = "Error in config file: " + configFile + " " + e.getMessage(); +// LOG.error(m); +// throw new ServletException(m); // ?? +// } + // cheesy - revisit + //String[] args = {"-c","initial-zfin.cfg"}; + //phenote.initConfig(args); // hardwire for now to zfin + //phenote.initOntologies(); + // loads ontologies up - non intuitive? +// OntologyDataAdapter.getInstance(); + // this is not running as a separate thread - investigate +// System.out.println("ontologies loaded - starting file checking thread"); +// OntologyFileCheckThread ofct = new OntologyFileCheckThread(); +// ofct.start(); // is this not running as threaded? +// System.out.println("file thread launched - moving on"); + } + + +// public void doPost(HttpServletRequest request, HttpServletResponse response) +// throws IOException, ServletException { + +// // dont know where this goes??? +// System.out.println("got post" +request); +// LOG.debug("servlet doPost " + new Date()); +// LOG.info("is term comp request: " + isTermCompletionRequest(request)); + +// PrintWriter out = response.getWriter(); + +// if (isTermCompletionRequest(request)) { +// String userInput = getTermCompletionParam(request); +// LOG.info("ontology? " + getOntologyParamString(request) + " param entityInput? " + getTermCompletionParam(request)); +// response.setContentType("text/html"); +// //out.println("Content-Type: text/html; charset=ISO-8859-1"); // this messes things up +// // String list = "<ul><li onmouseover=\"set_ontology()\" id=\"termId\" "+ +// // "onclick=\"set_ontology()\">"+userInput+"</li>\n"+ +// // "<li onmouseover=\"set_ontology()\" id=\"termId\" onclick=\"set_ontology()\">"+ +// // "test</li>\n<li onmouseover=\"set_ontology()\" id=\"termId\" onclick=\"set_ontology()\">dude</li></ul>"; +// String ontol = getOntologyParamString(request); +// String field = getFieldParamString(request); +// String s = ""; +// LOG.debug("printing to response writer: " + substring(s, 55) + "..."); +// out.println(s); +// } + +// } + + private boolean isTermCompletionRequest(HttpServletRequest req) { + return getTermCompletionParam(req) != null; + } + + /** + * this should be renamed from unintuitive "ontologyname" + */ + private String getTermCompletionParam(HttpServletRequest req) { + String par = req.getParameter("userInput"); // new way + if (par == null) + par = req.getParameter("qualityInput"); // for now - pase i think + if (par == null) + par = req.getParameter("entityInput"); + return par; + } + + private String getOntologyParamString(HttpServletRequest req) { + return req.getParameter("ontologyName"); + } + + /** field param string specifies what gui field the request came from - this is + used for UseTermInfo button to populate field from term info */ + private String getFieldParamString(HttpServletRequest req) { + return req.getParameter("field"); + } + + + + + private String substring(String s, int sz) { + sz = (s.length() <= sz) ? s.length() : sz; + return s.substring(0, sz); + } + +// private boolean isTermInfoRequest(HttpServletRequest req) { +// return getTermIdFromTermInfoRequest(req) != null; +// } + +// private String getTermIdFromTermInfoRequest(HttpServletRequest req) { +// return req.getParameter("termId"); +// } + + + + +// private static StringBuffer fn(String fnName, String[] params) { +// return HtmlUtil.fn(fnName,params); +// } +// StringBuffer s = new StringBuffer(fnName).append("(").append(q(params[0])); +// for (int i=1; i<params.length; i++) s.append(",").append(q(params[i])); +// s.append(")"); return s; } + + private static StringBuffer dq(StringBuffer sb) { + return new StringBuffer("\""+sb+"\""); + } + + private static StringBuffer q(StringBuffer sb) { + return new StringBuffer("'"+sb+"'"); + } + + private static String q(String s) { + return "'"+s+"'"; + } + + +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nl...@us...> - 2007-07-03 23:33:41
|
Revision: 691 http://svn.sourceforge.net/obo/?rev=691&view=rev Author: nlw Date: 2007-07-03 16:33:43 -0700 (Tue, 03 Jul 2007) Log Message: ----------- transcripts from today's working group irc chat Added Paths: ----------- phenote/trunk/doc/phenote-website/irc_chat/transcripts/PWG_irc_070307.html Added: phenote/trunk/doc/phenote-website/irc_chat/transcripts/PWG_irc_070307.html =================================================================== --- phenote/trunk/doc/phenote-website/irc_chat/transcripts/PWG_irc_070307.html (rev 0) +++ phenote/trunk/doc/phenote-website/irc_chat/transcripts/PWG_irc_070307.html 2007-07-03 23:33:43 UTC (rev 691) @@ -0,0 +1,666 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + +<head> + +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta name="description" content="Phenote Transcripts 07.03.2007" /> +<meta name="keywords" content="Phenotype, Annotation, Phenote, NCBO, National Center for Biomedical Ontology, Ontology, Berkeley Bioinformatics and Ontology Project, BBOP, Curation, EQ model, entities and qualities, phenotype annotation, PATO, phenotype and trait ontology, OBO, Open Biomedical Ontologies" /> + +<!-- TODO: need an icon --> +<link rel="icon" href="" type="image/png" /> +<link rel="shortcut icon" href="" type="image/png" /> +<link rel="stylesheet" type="text/css" href="/css/colloquy2.css" title="standard" /> +<title>Phenote Working Group IRC chat 07.03.2007</title> + +</head> + +<body> +<div class="event"><span class="message"><message><span class="member">midori</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:27<span class="secs">:54</span></span><span class="ampm">08:27<span class="secs">:54</span>am</span></span></div><div id="CG8IDVQJZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:28<span class="secs">:07</span></span><span class="ampm">08:28<span class="secs">:07</span>am</span>)</span> <span class="message">Hi; mind if I lurk again?</span></div> +</div><div class="event"><span class="message"><message><span class="member">jim</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:28<span class="secs">:36</span></span><span class="ampm">08:28<span class="secs">:36</span>am</span></span></div><div id="RZNO7DTJZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:29<span class="secs">:37</span></span><span class="ampm">08:29<span class="secs">:37</span>am</span>)</span> <span class="message">hi <span class="member">midori</span>. feel free to lurk</span></div> +</div><div id="DRFECJTJZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:29<span class="secs">:43</span></span><span class="ampm">08:29<span class="secs">:43</span>am</span>)</span> <span class="message">hi <span class="member">jim</span></span></div> +</div><div id="Z8T54WTJZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:29<span class="secs">:56</span></span><span class="ampm">08:29<span class="secs">:56</span>am</span>)</span> <span class="message">hi <span class="highlight member">nicole</span>!</span></div> +</div><div id="RZM6LYUJZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:30<span class="secs">:34</span></span><span class="ampm">08:30<span class="secs">:34</span>am</span>)</span> <span class="message">going to give a few more minutes for late stragglers...</span></div> +</div><div class="event"><span class="message"><message><span class="member">DavidOS</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:33<span class="secs">:41</span></span><span class="ampm">08:33<span class="secs">:41</span>am</span></span></div><div class="event"><span class="message"><message><span class="member">mark</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:35<span class="secs">:21</span></span><span class="ampm">08:35<span class="secs">:21</span>am</span></span></div><div class="event"><span class="message"><message><span class="member">mark</span> left the chat room.</message></span> (Quit: mark) <span class="timestamp"><span class="tfh">08:35<span class="secs">:21</span></span><span class="ampm">08:35<span class="secs">:21</span>am</span></span></div><div class="event"><span class="message"><message><span class="member">mark</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:35<span class="secs">:34</span></span><span class="ampm">08:35<span class="secs">:34</span>am</span></span></div><div id="JUG93L3KZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:35<span class="secs">:45</span></span><span class="ampm">08:35<span class="secs">:45</span>am</span>)</span> <span class="message">hi</span></div> +</div><div id="MNS5LQ3KZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:35<span class="secs">:50</span></span><span class="ampm">08:35<span class="secs">:50</span>am</span>)</span> <span class="message">hiya</span></div> +</div><div id="ELAO3Z3KZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:35<span class="secs">:59</span></span><span class="ampm">08:35<span class="secs">:59</span>am</span>)</span> <span class="message">so today's chat doesn't have a heavyweight agenda... are there any issues from any of you?</span></div> +</div><div id="RQ5OFE4KZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:36<span class="secs">:14</span></span><span class="ampm">08:36<span class="secs">:14</span>am</span>)</span> <span class="message">[hi everyone]</span></div> +</div><div id="Q5SV646KZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:16</span></span><span class="ampm">08:37<span class="secs">:16</span>am</span>)</span> <span class="message">hmmmm ok, maybe not...</span></div> +</div><div id="Z2P7B86KZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:20</span></span><span class="ampm">08:37<span class="secs">:20</span>am</span>)</span> <span class="message">so one thing worth mentioning perhaps</span></div> +</div><div id="NHRKDI6KZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:30</span></span><span class="ampm">08:37<span class="secs">:30</span>am</span>)</span> <span class="message">i see <span class="member">jim</span> & david are both on</span></div> +</div><div id="IO3SHM6KZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:34</span></span><span class="ampm">08:37<span class="secs">:34</span>am</span>)</span> <span class="message">I can tell you what I'm working on</span></div> +</div><div id="D4Q5GP6KZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:37</span></span><span class="ampm">08:37<span class="secs">:37</span>am</span>)</span> <span class="message">we could chat about what's been in the works...</span></div> +</div><div id="H1WX7T6KZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:41</span></span><span class="ampm">08:37<span class="secs">:41</span>am</span>)</span> <span class="message">yes, please <span class="member">jim</span></span></div> +</div><div id="UZNGKW6KZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:44</span></span><span class="ampm">08:37<span class="secs">:44</span>am</span>)</span> <span class="message">so david - <span class="member">jim</span> is working on grouping for tabs</span></div> +</div><div id="A1E6827KZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:37<span class="secs">:50</span></span><span class="ampm">08:37<span class="secs">:50</span>am</span>)</span> <span class="message">yea <span class="member">jim</span> go ahead</span></div> +</div><div id="Q4WLKE7KZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:38<span class="secs">:02</span></span><span class="ampm">08:38<span class="secs">:02</span>am</span>)</span> <span class="message">I added a "group" element to the config schema</span></div> +</div><div id="F1UTBT7KZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:38<span class="secs">:17</span></span><span class="ampm">08:38<span class="secs">:17</span>am</span>)</span> <span class="message">so you can make a group and then specify which groups a field is in</span></div> +</div><div id="M7DR2N8KZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:38<span class="secs">:47</span></span><span class="ampm">08:38<span class="secs">:47</span>am</span>)</span> <span class="message">the application can use this for whatever it wants - I think that <span class="member">Mark</span>'s plan with tabs is different from what I want to group fields for</span></div> +</div><div id="OWMB5V8KZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:38<span class="secs">:55</span></span><span class="ampm">08:38<span class="secs">:55</span>am</span>)</span> <span class="message">is that like a "tab" group, or something else?</span></div> +</div><div id="PZMG329KZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:02</span></span><span class="ampm">08:39<span class="secs">:02</span>am</span>)</span> <span class="message">could be more genera</span></div> +</div><div id="CKU5139KZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:03</span></span><span class="ampm">08:39<span class="secs">:03</span>am</span>)</span> <span class="message">l</span></div> +</div><div id="XNVHEB9KZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:11</span></span><span class="ampm">08:39<span class="secs">:11</span>am</span>)</span> <span class="message">yes one use is a tab group</span></div> +</div><div id="NAY7BD9KZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:13</span></span><span class="ampm">08:39<span class="secs">:13</span>am</span>)</span> <span class="message"><span class="member">mark</span> wants tab groups</span></div> +</div><div id="BNXHJO9KZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:24</span></span><span class="ampm">08:39<span class="secs">:24</span>am</span>)</span> <span class="message">ok.</span></div> +</div><div id="KHM0BS9KZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:28</span></span><span class="ampm">08:39<span class="secs">:28</span>am</span>)</span> <span class="message">part of the config will actually say whether tab or window or frame</span></div> +</div><div id="BHNXAU9KZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:30</span></span><span class="ampm">08:39<span class="secs">:30</span>am</span>)</span> <span class="message">but I want to <span class="member">mark</span> a subset of fields that are used in a template interface</span></div> +</div><div id="FG8R36AKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:42</span></span><span class="ampm">08:39<span class="secs">:42</span>am</span>)</span> <span class="message">and eventually this will happen through the docking mechanism</span></div> +</div><div class="event"><span class="message"><message><span class="member">Anon541</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:39<span class="secs">:47</span></span><span class="ampm">08:39<span class="secs">:47</span>am</span></span></div><div class="event"><span class="message"><message><span class="member">DavidOS</span> left the chat room.</message></span> (Ping timeout) <span class="timestamp"><span class="tfh">08:39<span class="secs">:55</span></span><span class="ampm">08:39<span class="secs">:55</span>am</span></span></div><div id="HO15CMAKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:58</span></span><span class="ampm">08:39<span class="secs">:58</span>am</span>)</span> <span class="message">ah yes. the docking is pretty</span></div> +</div><div id="MQ03BNAKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:39<span class="secs">:59</span></span><span class="ampm">08:39<span class="secs">:59</span>am</span>)</span> <span class="message">whos <span class="member">anon541</span>?</span></div> +</div><div id="B70P3PAKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:40<span class="secs">:01</span></span><span class="ampm">08:40<span class="secs">:01</span>am</span>)</span> <span class="message">so there is an attribute of "group" that says what to use the group for</span></div> +</div><div id="D7XM14BKZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:40<span class="secs">:16</span></span><span class="ampm">08:40<span class="secs">:16</span>am</span>)</span> <span class="message">I am using groups of type "character-template"</span></div> +</div><div class="event"><span class="message"><message><span class="member">Anon541</span> left the chat room.</message></span> (Quit: Anon541) <span class="timestamp"><span class="tfh">08:40<span class="secs">:50</span></span><span class="ampm">08:40<span class="secs">:50</span>am</span></span></div><div id="P4KT76CKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:40<span class="secs">:54</span></span><span class="ampm">08:40<span class="secs">:54</span>am</span>)</span> <span class="message">for the moment I am leaving it up to anyone else to make use of the groups for tabs on the main interface - I'm trying to get my template interface working now</span></div> +</div><div class="event"><span class="message"><message><span class="member">DavidOS</span> joined the chat room.</message></span> <span class="timestamp"><span class="tfh">08:41<span class="secs">:08</span></span><span class="ampm">08:41<span class="secs">:08</span>am</span></span></div><div id="MGE19VCKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:41<span class="secs">:19</span></span><span class="ampm">08:41<span class="secs">:19</span>am</span>)</span> <span class="message">that's cool. so i'll be working on the documentation for this. is it fairly intuitive if i read the code, to describe this new element?</span></div> +</div><div id="CL1S3XCKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:41<span class="secs">:21</span></span><span class="ampm">08:41<span class="secs">:21</span>am</span>)</span> <span class="message">might as well go into template interface </span></div> +</div><div id="SQ5RD5DKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:41<span class="secs">:29</span></span><span class="ampm">08:41<span class="secs">:29</span>am</span>)</span> <span class="message">okay</span></div> +</div><div id="K9Q259DKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:41<span class="secs">:33</span></span><span class="ampm">08:41<span class="secs">:33</span>am</span>)</span> <span class="message">and then i can describe how this can be used for genotype</span></div> +</div><div id="R6V4HKDKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:41<span class="secs">:44</span></span><span class="ampm">08:41<span class="secs">:44</span>am</span>)</span> <span class="message">Sorry - my connection went down briefly. Can you explain groups to me...?</span></div> +</div><div id="XK1I40EKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:00</span></span><span class="ampm">08:42<span class="secs">:00</span>am</span>)</span> <span class="message">I will tell you what I want to use groups for</span></div> +</div><div id="B59XB6EKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:06</span></span><span class="ampm">08:42<span class="secs">:06</span>am</span>)</span> <span class="message">so a group is just a way of grouping fields</span></div> +</div><div id="W0BZ5DEKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:13</span></span><span class="ampm">08:42<span class="secs">:13</span>am</span>)</span> <span class="message">OK</span></div> +</div><div id="EE8QAHEKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:17</span></span><span class="ampm">08:42<span class="secs">:17</span>am</span>)</span> <span class="message">both graphically (all in same tab/window)</span></div> +</div><div id="V9Z1BLEKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:21</span></span><span class="ampm">08:42<span class="secs">:21</span>am</span>)</span> <span class="message">and functionally</span></div> +</div><div id="UNIS4REKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:27</span></span><span class="ampm">08:42<span class="secs">:27</span>am</span>)</span> <span class="message">fields being input fields, fields in the table or both?</span></div> +</div><div id="W2EL33FKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:39</span></span><span class="ampm">08:42<span class="secs">:39</span>am</span>)</span> <span class="message">input fields</span></div> +</div><div id="L064L5FKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:42<span class="secs">:41</span></span><span class="ampm">08:42<span class="secs">:41</span>am</span>)</span> <span class="message">in our case, there is a limited number of genotypes (specimens) in one curation session</span></div> +</div><div id="GPVGWFKZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:43<span class="secs">:08</span></span><span class="ampm">08:43<span class="secs">:08</span>am</span>)</span> <span class="message">but these specimens will each be used over and over for different phenotypes in the publication</span></div> +</div><div id="Q4GYHEGKZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:43<span class="secs">:26</span></span><span class="ampm">08:43<span class="secs">:26</span>am</span>)</span> <span class="message">the curator wants to keep choosing out of this specimen list, groups of specimens</span></div> +</div><div id="S77TKMHKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:44<span class="secs">:10</span></span><span class="ampm">08:44<span class="secs">:10</span>am</span>)</span> <span class="message">OK, this does sound quite like how we would use genotypes...</span></div> +</div><div id="PAGQATHKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:44<span class="secs">:17</span></span><span class="ampm">08:44<span class="secs">:17</span>am</span>)</span> <span class="message">so we want have, say, 10 specimens in the list, and check off 5 of them and have a way to create new characters in the main list with all that specimen info all filled in</span></div> +</div><div id="TE5W3XHKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:44<span class="secs">:21</span></span><span class="ampm">08:44<span class="secs">:21</span>am</span>)</span> <span class="message">its sorta like bulk copy but more convenient</span></div> +</div><div id="XH3TADIKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:44<span class="secs">:37</span></span><span class="ampm">08:44<span class="secs">:37</span>am</span>)</span> <span class="message">more intuitive i think</span></div> +</div><div id="RYUA1GIKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:44<span class="secs">:40</span></span><span class="ampm">08:44<span class="secs">:40</span>am</span>)</span> <span class="message">and then they can fill in the common phenotype info that that group of specimens shares</span></div> +</div><div id="QAQMFWIKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:44<span class="secs">:56</span></span><span class="ampm">08:44<span class="secs">:56</span>am</span>)</span> <span class="message">i think its different in someways from genotype but maybe im wrong</span></div> +</div><div id="Q117JBJKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:45<span class="secs">:11</span></span><span class="ampm">08:45<span class="secs">:11</span>am</span>)</span> <span class="message">in these cases they are setting the same phenotype for a group of genotypes, but producing separate annotations for each one</span></div> +</div><div id="OOWG2VJKZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:45<span class="secs">:31</span></span><span class="ampm">08:45<span class="secs">:31</span>am</span>)</span> <span class="message">so if we have fields: specimen ID, taxon, entity, quality</span></div> +</div><div id="X405I6KKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:45<span class="secs">:42</span></span><span class="ampm">08:45<span class="secs">:42</span>am</span>)</span> <span class="message">will these be "separated" into individual characters in the table, or will you keep track that the observation was made on all the specimens as a group?</span></div> +</div><div id="ZQMSH9KKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:45<span class="secs">:45</span></span><span class="ampm">08:45<span class="secs">:45</span>am</span>)</span> <span class="message">I want to put specimen ID and taxon in a group to be used on the template interface</span></div> +</div><div id="JA5SALKKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:45<span class="secs">:57</span></span><span class="ampm">08:45<span class="secs">:57</span>am</span>)</span> <span class="message">indiv chars</span></div> +</div><div id="BP47FOKKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:46<span class="secs">:00</span></span><span class="ampm">08:46<span class="secs">:00</span>am</span>)</span> <span class="message">no, they will be entered as separate characters</span></div> +</div><div id="V0IASKKZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:46<span class="secs">:04</span></span><span class="ampm">08:46<span class="secs">:04</span>am</span>)</span> <span class="message">right <span class="member">Mark</span></span></div> +</div><div id="FM1OZKKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:46<span class="secs">:11</span></span><span class="ampm">08:46<span class="secs">:11</span>am</span>)</span> <span class="message">ok</span></div> +</div><div id="H0X5ILLKZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:46<span class="secs">:33</span></span><span class="ampm">08:46<span class="secs">:33</span>am</span>)</span> <span class="message"><span class="member">mark</span>...this is very similar to what needs to happen for BIRN too</span></div> +</div><div id="TO0ICXLKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:46<span class="secs">:45</span></span><span class="ampm">08:46<span class="secs">:45</span>am</span>)</span> <span class="message">is it? i didnt realize</span></div> +</div><div id="AV89IKMKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:47<span class="secs">:08</span></span><span class="ampm">08:47<span class="secs">:08</span>am</span>)</span> <span class="message">so does that make sense david?</span></div> +</div><div id="XRM0DTMKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:47<span class="secs">:17</span></span><span class="ampm">08:47<span class="secs">:17</span>am</span>)</span> <span class="message">right now I am trying to understand how all the editing works in Phenote and try to work around some of the singleton usage - because the template list will be a separate list of characters from the main characters list</span></div> +</div><div id="SL4PHENKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:47<span class="secs">:38</span></span><span class="ampm">08:47<span class="secs">:38</span>am</span>)</span> <span class="message"><span class="member">jim</span> - we can chat about that if you like</span></div> +</div><div id="ABFYBINKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:47<span class="secs">:42</span></span><span class="ampm">08:47<span class="secs">:42</span>am</span>)</span> <span class="message">they have a group of things that a *region* describes, and they might want to attribute a bunch of phenotype statments to all the things found in the region (which is a grouping of anatomical entities)</span></div> +</div><div id="LDTGH2OKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:48<span class="secs">:02</span></span><span class="ampm">08:48<span class="secs">:02</span>am</span>)</span> <span class="message">oh right the list of regions issue - gotcha</span></div> +</div><div id="C28016OKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:48<span class="secs">:06</span></span><span class="ampm">08:48<span class="secs">:06</span>am</span>)</span> <span class="message">rather, anatomical entities and/or locations</span></div> +</div><div id="H2DVGJOKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:48<span class="secs">:19</span></span><span class="ampm">08:48<span class="secs">:19</span>am</span>)</span> <span class="message">so david for genotypes</span></div> +</div><div id="SH0R6MOKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:48<span class="secs">:22</span></span><span class="ampm">08:48<span class="secs">:22</span>am</span>)</span> <span class="message">yes, its all very similar, which is great</span></div> +</div><div id="PNNEA2PKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:48<span class="secs">:38</span></span><span class="ampm">08:48<span class="secs">:38</span>am</span>)</span> <span class="message">so the genotype maker is a group of fields</span></div> +</div><div id="ZJPLCFPKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:48<span class="secs">:51</span></span><span class="ampm">08:48<span class="secs">:51</span>am</span>)</span> <span class="message">so <span class="member">jim</span>, will you be able to work within the current framework, or will it need to be adjusted?</span></div> +</div><div id="PED51OPKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:00</span></span><span class="ampm">08:49<span class="secs">:00</span>am</span>)</span> <span class="message">either in a tab or window - initially tab - eventually user pref)</span></div> +</div><div id="G9OI0QKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:12</span></span><span class="ampm">08:49<span class="secs">:12</span>am</span>)</span> <span class="message">some adjustment will be needed</span></div> +</div><div id="Q48K9LQKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:33</span></span><span class="ampm">08:49<span class="secs">:33</span>am</span>)</span> <span class="message">for characters right? and char list manager?</span></div> +</div><div id="NI50FMQKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:34</span></span><span class="ampm">08:49<span class="secs">:34</span>am</span>)</span> <span class="message">right now I am trying to see where I need to put in separate instances of things like selectionmanager, and how to do it</span></div> +</div><div id="KJ1ODTQKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:41</span></span><span class="ampm">08:49<span class="secs">:41</span>am</span>)</span> <span class="message">aside, since there's now <span class="member">mark</span>, me, <span class="member">jim</span>, juan carlos (others?) that are working on phenote code, maybe we should have some kind of semi-regular phenote development meeting?</span></div> +</div><div id="BA5XFUQKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:42</span></span><span class="ampm">08:49<span class="secs">:42</span>am</span>)</span> <span class="message">right</span></div> +</div><div id="RUZO65RKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:49<span class="secs">:53</span></span><span class="ampm">08:49<span class="secs">:53</span>am</span>)</span> <span class="message">A genotype maker will be used to make a list of genotypes. During curation of phenotypes, users will be able to choose any genotype from this list.</span></div> +</div><div id="KKLPDERKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:50<span class="secs">:02</span></span><span class="ampm">08:50<span class="secs">:02</span>am</span>)</span> <span class="message">yes good idea <span class="highlight member">nicole</span> - to make sure we dont clash</span></div> +</div><div id="K9YYEVRKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:50<span class="secs">:19</span></span><span class="ampm">08:50<span class="secs">:19</span>am</span>)</span> <span class="message">I have a later goal to add convenient interface for choosing subsets of the templates (like all specimens within a higher taxon)</span></div> +</div><div id="JL34KZRKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:50<span class="secs">:23</span></span><span class="ampm">08:50<span class="secs">:23</span>am</span>)</span> <span class="message">right david - so its different than jims templater</span></div> +</div><div id="D2KEC0SKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:50<span class="secs">:24</span></span><span class="ampm">08:50<span class="secs">:24</span>am</span>)</span> <span class="message"><span class="member">mark</span> - yes yes. that's the most important thing.</span></div> +</div><div id="KZPKBBSKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:50<span class="secs">:35</span></span><span class="ampm">08:50<span class="secs">:35</span>am</span>)</span> <span class="message">I guess you could consider the genotype maker as "grouping", but more complex than making a bag of alleles etc</span></div> +</div><div id="GXRNA0TKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:00</span></span><span class="ampm">08:51<span class="secs">:00</span>am</span>)</span> <span class="message">jims thing will be making characters that will get added to the table/spreadsheet - and will be half filled in</span></div> +</div><div id="MCF8H4TKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:04</span></span><span class="ampm">08:51<span class="secs">:04</span>am</span>)</span> <span class="message">david - i don't know if its more complicated or not. genotype making is complicated too</span></div> +</div><div id="TLMF9ETKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:14</span></span><span class="ampm">08:51<span class="secs">:14</span>am</span>)</span> <span class="message">waiting for EQ to be added (and all new rows selected)</span></div> +</div><div id="R9J12NTKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:23</span></span><span class="ampm">08:51<span class="secs">:23</span>am</span>)</span> <span class="message">that's right</span></div> +</div><div id="T3IN7WTKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:32</span></span><span class="ampm">08:51<span class="secs">:32</span>am</span>)</span> <span class="message">(that is, if we're thinking of genotype making for not just flies but other species with other nomenclatures as well)</span></div> +</div><div id="M0T75XTKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:33</span></span><span class="ampm">08:51<span class="secs">:33</span>am</span>)</span> <span class="message">but for genotype maker - i think -</span></div> +</div><div id="SE8ZIJUKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:55</span></span><span class="ampm">08:51<span class="secs">:55</span>am</span>)</span> <span class="message">the genotype maker will be creating a list for the genotype field to draw on</span></div> +</div><div id="TUY34LUKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:51<span class="secs">:57</span></span><span class="ampm">08:51<span class="secs">:57</span>am</span>)</span> <span class="message">right?</span></div> +</div><div id="MZR1CXUKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:52<span class="secs">:09</span></span><span class="ampm">08:52<span class="secs">:09</span>am</span>)</span> <span class="message">so where it ends up is just different</span></div> +</div><div id="VHXT35VKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:52<span class="secs">:17</span></span><span class="ampm">08:52<span class="secs">:17</span>am</span>)</span> <span class="message">right, i think</span></div> +</div><div id="S2SQ2PVKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:52<span class="secs">:37</span></span><span class="ampm">08:52<span class="secs">:37</span>am</span>)</span> <span class="message">"the genotype maker will be creating a list for the genotype field to draw on " correct</span></div> +</div><div id="GQ3P2PVKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:52<span class="secs">:37</span></span><span class="ampm">08:52<span class="secs">:37</span>am</span>)</span> <span class="message">actually this might be able to be generically configured</span></div> +</div><div id="HLFWDJWKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:53<span class="secs">:07</span></span><span class="ampm">08:53<span class="secs">:07</span>am</span>)</span> <span class="message">as in you can specify for a group whether its destination is a field or the table itself</span></div> +</div><div id="FOXGC7XKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:53<span class="secs">:31</span></span><span class="ampm">08:53<span class="secs">:31</span>am</span>)</span> <span class="message">So, <span class="member">Jim</span>, the grouping will occur in one tab and phenote curation in another?</span></div> +</div><div id="I2QYDBXKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:53<span class="secs">:35</span></span><span class="ampm">08:53<span class="secs">:35</span>am</span>)</span> <span class="message">right so for the gt maker i will build on top of jims grouping stuff</span></div> +</div><div id="IPJRFMXKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:53<span class="secs">:46</span></span><span class="ampm">08:53<span class="secs">:46</span>am</span>)</span> <span class="message">the ability to go into a tab (hes doing window)</span></div> +</div><div id="H88S5YXKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:53<span class="secs">:58</span></span><span class="ampm">08:53<span class="secs">:58</span>am</span>)</span> <span class="message">that's great</span></div> +</div><div id="Q89OB6YKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:06</span></span><span class="ampm">08:54<span class="secs">:06</span>am</span>)</span> <span class="message">right - I am using a window for the moment, shouldn't be much trouble to change that later</span></div> +</div><div id="AHAMB6YKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:06</span></span><span class="ampm">08:54<span class="secs">:06</span>am</span>)</span> <span class="message">and then i will add the ability to inform a field rather than the table</span></div> +</div><div id="YQBNIFYKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:15</span></span><span class="ampm">08:54<span class="secs">:15</span>am</span>)</span> <span class="message">OK - either way I guess. As long as it is possible to switch quickly between the two.</span></div> +</div><div id="MKVL1HYKZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:17</span></span><span class="ampm">08:54<span class="secs">:17</span>am</span>)</span> <span class="message">I think it would be nice for our user to see both at once</span></div> +</div><div id="MVWRBOYKZA1" class="later message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:24</span></span><span class="ampm">08:54<span class="secs">:24</span>am</span>)</span> <span class="message">both windows</span></div> +</div><div id="YXN9LWYKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:33</span></span><span class="ampm">08:54<span class="secs">:33</span>am</span>)</span> <span class="message">and then need to add the fly gt specifics as a plugin/config kinda thing</span></div> +</div><div id="IEU8F9ZKZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:45</span></span><span class="ampm">08:54<span class="secs">:45</span>am</span>)</span> <span class="message">david-eventually this will be configurable with a "docking framework"...you can choose to rip off a separate window, or keep as a tab</span></div> +</div><div id="QUNXJLZKZA1" class="first message color6"> + <div class="text"><span class="member"><a href="member:DavidOS" class="member">DavidOS</a></span><span class="timestamp">(<span class="tfh">08:54<span class="secs">:57</span></span><span class="ampm">08:54<span class="secs">:57</span>am</span>)</span> <span class="message">Ahhh - OK.</span></div> +</div><div id="ZDDZGRZKZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:55<span class="secs">:03</span></span><span class="ampm">08:55<span class="secs">:03</span>am</span>)</span> <span class="message">yes oboedit has implemented a docking framework</span></div> +</div><div id="MUNXBXZKZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:55<span class="secs">:09</span></span><span class="ampm">08:55<span class="secs">:09</span>am</span>)</span> <span class="message">which phenote hopes to reuse</span></div> +</div><div id="KEIK250LZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:55<span class="secs">:17</span></span><span class="ampm">08:55<span class="secs">:17</span>am</span>)</span> <span class="message">at some point</span></div> +</div><div id="HNQ8H90LZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:55<span class="secs">:21</span></span><span class="ampm">08:55<span class="secs">:21</span>am</span>)</span> <span class="message">yes - we'll let oboedit work out all the kinks</span></div> +</div><div id="G4TQDX0LZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:55<span class="secs">:45</span></span><span class="ampm">08:55<span class="secs">:45</span>am</span>)</span> <span class="message">I am planning to add a "title" attribute to the group xml - forgot to do that earlier (right now it has "name" which is used as ID reference in the xml, title is for labeling the group in the interface)</span></div> +</div><div id="IFSE731LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:55<span class="secs">:51</span></span><span class="ampm">08:55<span class="secs">:51</span>am</span>)</span> <span class="message">which then also makes it easier for oboedit and phenote to use each others thingies</span></div> +</div><div id="IGI08G1LZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:04</span></span><span class="ampm">08:56<span class="secs">:04</span>am</span>)</span> <span class="message"><span class="member">jim</span> - ooh good. i like that</span></div> +</div><div id="KU4H8I1LZA1" class="first message color2"> + <div class="text"><span class="member"><a href="member:jim" class="member">jim</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:06</span></span><span class="ampm">08:56<span class="secs">:06</span>am</span>)</span> <span class="message">then I don't have any other plans for the group config</span></div> +</div><div id="SMPVIW1LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:20</span></span><span class="ampm">08:56<span class="secs">:20</span>am</span>)</span> <span class="message">yes title/label would be great - and show up as window or tab label</span></div> +</div><div id="KBBK1Y1LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:22</span></span><span class="ampm">08:56<span class="secs">:22</span>am</span>)</span> <span class="message">aha - something I can comment on at last: the docking in obo-edit is not only cool, it's pretty convenient to use (tho we've found some bugs ...)</span></div> +</div><div id="ZT6CIC2LZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:36</span></span><span class="ampm">08:56<span class="secs">:36</span>am</span>)</span> <span class="message">[you guys all type faster than I do!]</span></div> +</div><div id="D4EWGT2LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:53</span></span><span class="ampm">08:56<span class="secs">:53</span>am</span>)</span> <span class="message"><span class="member">midori</span> - whats your interest in phenote?</span></div> +</div><div id="F64B8W2LZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:56<span class="secs">:56</span></span><span class="ampm">08:56<span class="secs">:56</span>am</span>)</span> <span class="message"><span class="member">midori</span> - good to get user feedback. thanks! helps place it in priority list. <span class="emoticon smile"><samp>:)</samp></span></span></div> +</div><div id="T8533D3LZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:57<span class="secs">:13</span></span><span class="ampm">08:57<span class="secs">:13</span>am</span>)</span> <span class="message">so i can talk a little about what i've been working on too...</span></div> +</div><div id="P9AXCL3LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:57<span class="secs">:21</span></span><span class="ampm">08:57<span class="secs">:21</span>am</span>)</span> <span class="message">my interest in phenote pretty peripheral, I admit ....</span></div> +</div><div id="T2MF8A4LZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">08:57<span class="secs">:46</span></span><span class="ampm">08:57<span class="secs">:46</span>am</span>)</span> <span class="message">my stuff is not so complicated...yet. </span></div> +</div><div id="T8QUCC4LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:57<span class="secs">:48</span></span><span class="ampm">08:57<span class="secs">:48</span>am</span>)</span> <span class="message">trying to stay informed about how it and oboedit get along</span></div> +</div><div id="DQYM1B5LZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:58<span class="secs">:23</span></span><span class="ampm">08:58<span class="secs">:23</span>am</span>)</span> <span class="message">also on the lookout for anything in phenote that other tool developers here might want to reuse <span class="emoticon wink"><samp>;)</samp></span></span></div> +</div><div id="DTI58C6LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:59<span class="secs">:00</span></span><span class="ampm">08:59<span class="secs">:00</span>am</span>)</span> <span class="message">are you looking to eventually curate with phenote</span></div> +</div><div id="YS24FK6LZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:mark" class="member">mark</a></span><span class="timestamp">(<span class="tfh">08:59<span class="secs">:08</span></span><span class="ampm">08:59<span class="secs">:08</span>am</span>)</span> <span class="message">a phenote that is inside of oboedit perhaps?</span></div> +</div><div id="G598GA7LZA1" class="first message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:59<span class="secs">:34</span></span><span class="ampm">08:59<span class="secs">:34</span>am</span>)</span> <span class="message">hmmm. the thought hadn't occurred to me, so I wouldn't jump up and say yes ...</span></div> +</div><div id="ZH8Z3V7LZA1" class="later message color4"> + <div class="text"><span class="member"><a href="member:midori" class="member">midori</a></span><span class="timestamp">(<span class="tfh">08:59<span class="secs">:55</span></span><span class="ampm">08:59<span class="secs">:55</span>am</span>)</span> <span class="message">but since I haven't thought about it at all, I can't rule anything out yet.</span></div> +</div><div id="V55A288LZA1" class="first message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">09:00<span class="secs">:08</span></span><span class="ampm">09:00<span class="secs">:08</span>am</span>)</span> <span class="message">i've been working on incorporating cross-product definitions into the term info display. </span></div> +</div><div id="Q7GH3F8LZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">09:00<span class="secs">:15</span></span><span class="ampm">09:00<span class="secs">:15</span>am</span>)</span> <span class="message"> so far, i can display intra-ontology cross-product display (like sequence ontology). </span></div> +</div><div id="FJ67KG8LZA1" class="later message colors"> + <div class="text"><span class="member self"><a href="member:nicole" class="member">nicole</a></span><span class="timestamp">(<span class="tfh">09:00<span class="secs">:16</span></span><span class="ampm">09:00<span class="secs">:16</span>am</span>)</span> <span class="message">next up is to be able to display inter-ontology cross-products. that gets a ... [truncated message content] |
From: <ba...@us...> - 2007-07-03 16:54:04
|
Revision: 690 http://svn.sourceforge.net/obo/?rev=690&view=rev Author: balhoff Date: 2007-07-03 09:54:02 -0700 (Tue, 03 Jul 2007) Log Message: ----------- Updated group config schema to include "title". Added methods to Config and OntologyManager classes to support groups. Modified Paths: -------------- phenote/trunk/conf/phenote-config.rnc phenote/trunk/conf/phenote-config.xsd phenote/trunk/jars/phenoteconfigbeans.jar phenote/trunk/src/java/phenote/config/Config.java phenote/trunk/src/java/phenote/datamodel/OntologyManager.java Modified: phenote/trunk/conf/phenote-config.rnc =================================================================== --- phenote/trunk/conf/phenote-config.rnc 2007-06-27 21:21:58 UTC (rev 689) +++ phenote/trunk/conf/phenote-config.rnc 2007-07-03 16:54:02 UTC (rev 690) @@ -109,7 +109,8 @@ element group { attribute name { xsd:ID }, attribute container { "window" | "tab" }, - attribute interface { "default" | "character-template" } + attribute interface { "default" | "character-template" }, + attribute title { xsd:string } } Modified: phenote/trunk/conf/phenote-config.xsd =================================================================== --- phenote/trunk/conf/phenote-config.xsd 2007-06-27 21:21:58 UTC (rev 689) +++ phenote/trunk/conf/phenote-config.xsd 2007-07-03 16:54:02 UTC (rev 690) @@ -146,6 +146,7 @@ </xs:restriction> </xs:simpleType> </xs:attribute> + <xs:attribute name="title" use="required" type="xs:string"/> </xs:complexType> </xs:element> <xs:element name="postcomp"> Modified: phenote/trunk/jars/phenoteconfigbeans.jar =================================================================== (Binary files differ) Modified: phenote/trunk/src/java/phenote/config/Config.java =================================================================== --- phenote/trunk/src/java/phenote/config/Config.java 2007-06-27 21:21:58 UTC (rev 689) +++ phenote/trunk/src/java/phenote/config/Config.java 2007-07-03 16:54:02 UTC (rev 690) @@ -1,7 +1,6 @@ package phenote.config; import java.io.File; -import java.io.FilenameFilter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; @@ -11,34 +10,30 @@ import java.io.PrintStream; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import java.lang.Enum; - import org.apache.xmlbeans.XmlException; -import phenote.main.PhenoteVersion; import phenote.config.xml.PhenoteConfigurationDocument; +import phenote.config.xml.AutoUpdateOntologiesDocument.AutoUpdateOntologies; +import phenote.config.xml.AutocompleteSettingsDocument.AutocompleteSettings; import phenote.config.xml.DataadapterDocument.Dataadapter; -//import phenote.config.xml.QueryableDataadapterDocument.QueryableDataadapter; import phenote.config.xml.FieldDocument.Field; +import phenote.config.xml.GroupDocument.Group; import phenote.config.xml.LogDocument.Log; -import phenote.config.xml.OboRepositoryDocument.OboRepository; +import phenote.config.xml.MasterToLocalConfigDocument.MasterToLocalConfig; import phenote.config.xml.PhenoteConfigurationDocument.PhenoteConfiguration; -import phenote.config.xml.UvicGraphDocument.UvicGraph; import phenote.config.xml.TermHistoryDocument.TermHistory; -import phenote.config.xml.AutoUpdateOntologiesDocument.AutoUpdateOntologies; import phenote.config.xml.UpdateTimerDocument.UpdateTimer; -import phenote.config.xml.MasterToLocalConfigDocument.MasterToLocalConfig; -import phenote.config.xml.AutocompleteSettingsDocument.AutocompleteSettings; - +import phenote.config.xml.UvicGraphDocument.UvicGraph; import phenote.dataadapter.DataAdapterI; import phenote.dataadapter.QueryableDataAdapterI; import phenote.datamodel.CharField; -import phenote.datamodel.CharFieldEnum; -import phenote.util.FileUtil; import phenote.gui.SearchFilterType; import phenote.gui.SearchParams; +import phenote.main.PhenoteVersion; +import phenote.util.FileUtil; public class Config { @@ -1047,6 +1042,24 @@ return; } + public List<Group> getFieldGroups() { + return Arrays.asList(this.phenoConfigBean.getGroupArray()); + } + + public List<String> getFieldsInGroup(String groupName) { + List<String> fields = new ArrayList<String>(); + for (Field aField : this.phenoConfigBean.getFieldArray()) { + final List groups = aField.getGroups(); + if (groups != null) { + for (Object aGroup : groups) { + if (((String)aGroup).equals(groupName)) { + fields.add(aField.getName()); + } + } + } + } + return fields; + } } // if (overwrite || mode.equals("WIPEOUT_ALWAYS")) Modified: phenote/trunk/src/java/phenote/datamodel/OntologyManager.java =================================================================== --- phenote/trunk/src/java/phenote/datamodel/OntologyManager.java 2007-06-27 21:21:58 UTC (rev 689) +++ phenote/trunk/src/java/phenote/datamodel/OntologyManager.java 2007-07-03 16:54:02 UTC (rev 690) @@ -1,15 +1,15 @@ package phenote.datamodel; +import java.util.ArrayList; +import java.util.List; + import org.apache.log4j.Logger; import org.geneontology.oboedit.datamodel.OBOClass; import org.geneontology.oboedit.datamodel.OBOSession; import org.geneontology.oboedit.postcomp.ParseException; import org.geneontology.oboedit.postcomp.PostcompUtil; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import phenote.config.Config; //import phenote.datamodel.CharFieldEnum; //import phenote.datamodel.OboUtil; @@ -58,6 +58,17 @@ has one or more ontologies (entity char field often has more than ontology)*/ public List<CharField> getCharFieldList() { return charFieldList; } public int getNumberOfFields() { return charFieldList.size(); } + + public List<CharField> getCharFieldListForGroup(String groupName) { + List<CharField> charFields = new ArrayList<CharField>(); + final List<String> fieldNames = Config.inst().getFieldsInGroup(groupName); + for (CharField field : this.getCharFieldList()) { + if (fieldNames.contains(field.getName())) { + charFields.add(field); + } + } + return charFields; + } public List<Ontology> getAllOntologies() { List<Ontology> ontologies = new ArrayList<Ontology>(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-06-27 21:21:57
|
Revision: 689 http://svn.sourceforge.net/obo/?rev=689&view=rev Author: mgibson Date: 2007-06-27 14:21:58 -0700 (Wed, 27 Jun 2007) Log Message: ----------- suzis improved diagrams Modified Paths: -------------- phenote/trunk/doc/phenote-uml-graffle.graffle phenote/trunk/doc/phenote-uml-graffle.pdf Modified: phenote/trunk/doc/phenote-uml-graffle.graffle =================================================================== --- phenote/trunk/doc/phenote-uml-graffle.graffle 2007-06-27 19:38:07 UTC (rev 688) +++ phenote/trunk/doc/phenote-uml-graffle.graffle 2007-06-27 21:21:58 UTC (rev 689) @@ -26,7 +26,623 @@ <key>GraphicsList</key> <array> <dict> + <key>Bounds</key> + <string>{{843.358, 261.208}, {43, 12}}</string> <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>1163</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>1011</integer> + <key>Position</key> + <real>0.50953656435012817</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 creates}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{859.389, 94.0002}, {41, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>1162</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>969</integer> + <key>Position</key> + <real>0.45679011940956116</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 parses}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{603, 143}, {54, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1161</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>975</integer> + <key>Position</key> + <real>0.49437645077705383</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 populates}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{614, 58}, {32, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1160</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>972</integer> + <key>Position</key> + <real>0.40000367164611816</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 uses}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{490.5, 93.0001}, {43, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1159</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>973</integer> + <key>Position</key> + <real>0.50793653726577759</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 creates}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{500.083, 204.154}, {27, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1158</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>977</integer> + <key>Position</key> + <real>0.60730689764022827</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 has}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{55, 329.142}, {43, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1157</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>966</integer> + <key>Position</key> + <real>0.44453927874565125</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 change}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{61.5, 243.857}, {30, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>1156</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>965</integer> + <key>Position</key> + <real>0.43137255311012268</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 edit}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{160.732, 185.705}, {24, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1155</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>964</integer> + <key>Position</key> + <real>0.49599999189376831</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 old}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{158.443, 170.703}, {29, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1154</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>963</integer> + <key>Position</key> + <real>0.46769514679908752</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 new}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{167.841, 138.785}, {27, 12}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>w</key> + <string>0</string> + </dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>10</real> + </dict> + <key>ID</key> + <integer>1153</integer> + <key>Line</key> + <dict> + <key>ID</key> + <integer>942</integer> + <key>Position</key> + <real>0.46024811267852783</real> + <key>RotationType</key> + <integer>0</integer> + </dict> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs20 \cf0 has}</string> + </dict> + </dict> + <dict> + <key>Class</key> <string>LineGraphic</string> <key>Head</key> <dict> @@ -37,8 +653,8 @@ <integer>1152</integer> <key>Points</key> <array> - <string>{299.273, 207}</string> - <string>{385.058, 136.806}</string> + <string>{306, 159.838}</string> + <string>{369.434, 119}</string> </array> <key>Style</key> <dict> @@ -72,8 +688,8 @@ <integer>1151</integer> <key>Points</key> <array> - <string>{981, 225}</string> - <string>{900, 279}</string> + <string>{1016.6, 254.294}</string> + <string>{945, 306.248}</string> </array> <key>Style</key> <dict> @@ -104,13 +720,15 @@ <dict> <key>ID</key> <integer>1004</integer> + <key>Info</key> + <integer>1</integer> </dict> <key>ID</key> <integer>1150</integer> <key>Points</key> <array> - <string>{981, 189}</string> - <string>{900, 162}</string> + <string>{1017, 218}</string> + <string>{909, 189}</string> </array> <key>Style</key> <dict> @@ -134,7 +752,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{936, 189}, {90, 36}}</string> + <string>{{972, 218}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -172,8 +790,8 @@ <integer>1141</integer> <key>Points</key> <array> - <string>{360, 113.779}</string> - <string>{212.926, 104.788}</string> + <string>{351, 99.0002}</string> + <string>{209.963, 99.0002}</string> </array> <key>Style</key> <dict> @@ -209,8 +827,8 @@ <integer>1054</integer> <key>Points</key> <array> - <string>{756, 338.538}</string> - <string>{792, 360}</string> + <string>{702, 291.781}</string> + <string>{756, 315.248}</string> </array> <key>Style</key> <dict> @@ -248,8 +866,8 @@ <integer>1053</integer> <key>Points</key> <array> - <string>{657, 387}</string> - <string>{792, 360}</string> + <string>{702, 369.124}</string> + <string>{756, 315.248}</string> </array> <key>Style</key> <dict> @@ -275,7 +893,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{792, 342}, {90, 36}}</string> + <string>{{756, 297.248}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -314,8 +932,8 @@ <integer>1051</integer> <key>Points</key> <array> - <string>{657, 387}</string> - <string>{684, 362.143}</string> + <string>{657, 351.124}</string> + <string>{660.564, 324.248}</string> </array> <key>Style</key> <dict> @@ -348,13 +966,15 @@ <dict> <key>ID</key> <integer>1041</integer> + <key>Info</key> + <integer>1</integer> </dict> <key>ID</key> <integer>1050</integer> <key>Points</key> <array> - <string>{873, 652.5}</string> - <string>{891, 684}</string> + <string>{909, 549}</string> + <string>{972, 504}</string> </array> <key>Style</key> <dict> @@ -377,7 +997,7 @@ <key>ID</key> <integer>1048</integer> <key>Info</key> - <integer>3</integer> + <integer>2</integer> </dict> </dict> <dict> @@ -394,8 +1014,8 @@ <integer>1049</integer> <key>Points</key> <array> - <string>{792, 675}</string> - <string>{792, 652.5}</string> + <string>{981, 567}</string> + <string>{954, 567}</string> </array> <key>Style</key> <dict> @@ -421,7 +1041,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{792, 639}, {81, 27}}</string> + <string>{{864, 549}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -455,13 +1075,15 @@ <dict> <key>ID</key> <integer>1046</integer> + <key>Info</key> + <integer>1</integer> </dict> <key>ID</key> <integer>1047</integer> <key>Points</key> <array> - <string>{936, 666}</string> - <string>{967.5, 630}</string> + <string>{972, 468}</string> + <string>{1039.5, 423}</string> </array> <key>Style</key> <dict> @@ -487,7 +1109,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{936, 612}, {63, 18}}</string> + <string>{{1008, 387}, {63, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -521,13 +1143,15 @@ <dict> <key>ID</key> <integer>1044</integer> + <key>Info</key> + <integer>1</integer> </dict> <key>ID</key> <integer>1045</integer> <key>Points</key> <array> - <string>{936, 666}</string> - <string>{882, 621}</string> + <string>{972, 468}</string> + <string>{909, 423}</string> </array> <key>Style</key> <dict> @@ -549,11 +1173,13 @@ <dict> <key>ID</key> <integer>1041</integer> + <key>Info</key> + <integer>2</integer> </dict> </dict> <dict> <key>Bounds</key> - <string>{{837, 585}, {90, 36}}</string> + <string>{{864, 387}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -588,15 +1214,13 @@ <dict> <key>ID</key> <integer>1042</integer> - <key>Info</key> - <integer>3</integer> </dict> <key>ID</key> <integer>1043</integer> <key>Points</key> <array> - <string>{891, 684}</string> - <string>{837, 693}</string> + <string>{972, 504}</string> + <string>{1026, 549}</string> </array> <key>Style</key> <dict> @@ -618,13 +1242,11 @@ <dict> <key>ID</key> <integer>1041</integer> - <key>Info</key> - <integer>4</integer> </dict> </dict> <dict> <key>Bounds</key> - <string>{{747, 675}, {90, 36}}</string> + <string>{{981, 549}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -652,7 +1274,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{891, 666}, {90, 36}}</string> + <string>{{927, 468}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -692,8 +1314,8 @@ <integer>1040</integer> <key>Points</key> <array> - <string>{504, 405}</string> - <string>{535.5, 432}</string> + <string>{288, 449.876}</string> + <string>{360, 450}</string> </array> <key>Style</key> <dict> @@ -731,8 +1353,8 @@ <integer>1039</integer> <key>Points</key> <array> - <string>{450, 441}</string> - <string>{472.5, 414}</string> + <string>{256.5, 387.124}</string> + <string>{256.5, 440.876}</string> </array> <key>Style</key> <dict> @@ -758,7 +1380,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{441, 396}, {63, 18}}</string> + <string>{{225, 440.876}, {63, 18}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -799,7 +1421,7 @@ <integer>1037</integer> <key>Points</key> <array> - <string>{45, 549}</string> + <string>{58.5, 549}</string> <string>{27, 603}</string> </array> <key>Style</key> @@ -865,8 +1487,8 @@ <integer>1035</integer> <key>Points</key> <array> - <string>{45, 549}</string> - <string>{108, 666}</string> + <string>{58.5, 549}</string> + <string>{108, 675}</string> </array> <key>Style</key> <dict> @@ -900,14 +1522,14 @@ <key>ID</key> <integer>1000</integer> <key>Info</key> - <integer>2</integer> + <integer>4</integer> </dict> <key>ID</key> <integer>1034</integer> <key>Points</key> <array> - <string>{90, 531}</string> - <string>{144, 567}</string> + <string>{108, 531}</string> + <string>{135, 531}</string> </array> <key>Style</key> <dict> @@ -938,7 +1560,7 @@ <array> <dict> <key>Bounds</key> - <string>{{684, 288}, {72, 28}}</string> + <string>{{630, 242.248}, {72, 28}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -975,7 +1597,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{684, 316}, {72, 42}}</string> + <string>{{630, 270.248}, {72, 42}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -1015,7 +1637,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{684, 358}, {72, 12}}</string> + <string>{{630, 312.248}, {72, 12}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -1071,8 +1693,8 @@ <integer>1032</integer> <key>Points</key> <array> - <string>{180, 684}</string> - <string>{153, 684}</string> + <string>{180, 693}</string> + <string>{153, 693}</string> </array> <key>Style</key> <dict> @@ -1110,8 +1732,8 @@ <integer>1031</integer> <key>Points</key> <array> - <string>{636.78, 611.504}</string> - <string>{612, 405}</string> + <string>{801, 603}</string> + <string>{657, 387.124}</string> </array> <key>Style</key> <dict> @@ -1133,8 +1755,6 @@ <dict> <key>ID</key> <integer>1029</integer> - <key>Info</key> - <integer>3</integer> </dict> </dict> <dict> @@ -1153,8 +1773,8 @@ <integer>1030</integer> <key>Points</key> <array> - <string>{396, 576}</string> - <string>{549, 630}</string> + <string>{441, 621}</string> + <string>{756, 621}</string> </array> <key>Style</key> <dict> @@ -1180,7 +1800,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{549, 612}, {90, 36}}</string> + <string>{{756, 603}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -1221,8 +1841,8 @@ <integer>1028</integer> <key>Points</key> <array> - <string>{355.5, 648}</string> - <string>{360, 594}</string> + <string>{400.5, 675}</string> + <string>{400.5, 639}</string> </array> <key>Style</key> <dict> @@ -1255,15 +1875,13 @@ <dict> <key>ID</key> <integer>1026</integer> - <key>Info</key> - <integer>1</integer> </dict> <key>ID</key> <integer>1027</integer> <key>Points</key> <array> - <string>{270, 684}</string> - <string>{355.5, 675}</string> + <string>{270, 693}</string> + <string>{360, 693}</string> </array> <key>Style</key> <dict> @@ -1289,7 +1907,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{315, 648}, {81, 27}}</string> + <string>{{360, 675}, {81, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -1328,8 +1946,8 @@ <integer>1025</integer> <key>Points</key> <array> - <string>{450, 504}</string> - <string>{495, 450}</string> + <string>{400.5, 513}</string> + <string>{400.5, 468}</string> </array> <key>Style</key> <dict> @@ -1367,8 +1985,8 @@ <integer>1024</integer> <key>Points</key> <array> - <string>{360, 558}</string> - <string>{405, 522}</string> + <string>{400.5, 603}</string> + <string>{400.5, 549}</string> </array> <key>Style</key> <dict> @@ -1394,7 +2012,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{360, 486}, {90, 36}}</string> + <string>{{360, 513}, {81, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -1434,8 +2052,8 @@ <integer>1022</integer> <key>Points</key> <array> - <string>{306, 549}</string> - <string>{324, 576}</string> + <string>{297, 549}</string> + <string>{360, 621}</string> </array> <key>Style</key> <dict> @@ -1475,8 +2093,8 @@ <integer>1021</integer> <key>Points</key> <array> - <string>{189, 585}</string> - <string>{216, 549}</string> + <string>{225, 531}</string> + <string>{252, 531}</string> </array> <key>Style</key> <dict> @@ -1502,7 +2120,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{216, 531}, {90, 36}}</string> + <string>{{252, 513}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -1542,8 +2160,8 @@ <integer>1019</integer> <key>Points</key> <array> - <string>{207, 621}</string> - <string>{189, 585}</string> + <string>{180, 603}</string> + <string>{180, 549}</string> </array> <key>Style</key> <dict> @@ -1565,8 +2183,6 @@ <dict> <key>ID</key> <integer>1017</integer> - <key>Info</key> - <integer>4</integer> </dict> </dict> <dict> @@ -1585,8 +2201,8 @@ <integer>1018</integer> <key>Points</key> <array> - <string>{324, 576}</string> - <string>{306, 621}</string> + <string>{360, 621}</string> + <string>{234, 621}</string> </array> <key>Style</key> <dict> @@ -1614,7 +2230,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{207, 603}, {99, 36}}</string> + <string>{{126, 603}, {108, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -1656,8 +2272,8 @@ <integer>1016</integer> <key>Points</key> <array> - <string>{423, 570.96}</string> - <string>{396, 576}</string> + <string>{495, 558}</string> + <string>{441, 621}</string> </array> <key>Style</key> <dict> @@ -1683,7 +2299,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{324, 558}, {72, 36}}</string> + <string>{{360, 603}, {81, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -1723,8 +2339,8 @@ <integer>1014</integer> <key>Points</key> <array> - <string>{535.5, 468}</string> - <string>{489.682, 540}</string> + <string>{441, 450}</string> + <string>{504, 504}</string> </array> <key>Style</key> <dict> @@ -1750,7 +2366,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{768.597, 418.266}, {17, 14}}</string> + <string>{{563.079, 368.057}, {17, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -1803,7 +2419,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{661.799, 386.253}, {16, 14}}</string> + <string>{{599.539, 364.857}, {16, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -1870,8 +2486,8 @@ <integer>1013</integer> <key>Points</key> <array> - <string>{792, 423.8}</string> - <string>{657, 387}</string> + <string>{567, 369.791}</string> + <string>{612, 369.124}</string> </array> <key>Style</key> <dict> @@ -1909,8 +2525,8 @@ <integer>1012</integer> <key>Points</key> <array> - <string>{786.375, 101}</string> - <string>{855, 144}</string> + <string>{803.535, 119}</string> + <string>{864, 171}</string> </array> <key>Style</key> <dict> @@ -1935,54 +2551,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{793.953, 232.168}, {43, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1060</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>1011</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 creates}</string> - </dict> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -1996,8 +2564,8 @@ <integer>1011</integer> <key>Points</key> <array> - <string>{783, 234}</string> - <string>{828, 279}</string> + <string>{819, 236}</string> + <string>{909, 297.248}</string> </array> <key>Style</key> <dict> @@ -2035,8 +2603,8 @@ <integer>1010</integer> <key>Points</key> <array> - <string>{873, 234}</string> - <string>{864, 270}</string> + <string>{909, 254.5}</string> + <string>{909, 297.248}</string> </array> <key>Style</key> <dict> @@ -2076,8 +2644,8 @@ <integer>1009</integer> <key>Points</key> <array> - <string>{819, 216}</string> - <string>{855, 180}</string> + <string>{819, 236}</string> + <string>{909, 189}</string> </array> <key>Style</key> <dict> @@ -2115,8 +2683,8 @@ <integer>1008</integer> <key>Points</key> <array> - <string>{873, 198}</string> - <string>{855, 180}</string> + <string>{909, 218}</string> + <string>{909, 189}</string> </array> <key>Style</key> <dict> @@ -2142,7 +2710,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{828, 270}, {72, 18}}</string> + <string>{{873, 297.248}, {72, 18}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2169,7 +2737,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{828, 198}, {90, 36}}</string> + <string>{{864, 218}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2197,7 +2765,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{747, 198}, {72, 36}}</string> + <string>{{747, 218}, {72, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2225,7 +2793,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{810, 144}, {90, 36}}</string> + <string>{{864, 153}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2252,7 +2820,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{518.053, 419.894}, {17, 14}}</string> + <string>{{397.333, 420.912}, {17, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -2305,7 +2873,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{484.741, 356.997}, {19.7, 14}}</string> + <string>{{393.317, 388.212}, {19.7, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -2372,8 +2940,8 @@ <integer>1003</integer> <key>Points</key> <array> - <string>{535.5, 432}</string> - <string>{492.634, 355}</string> + <string>{400.5, 432}</string> + <string>{400.5, 391.124}</string> </array> <key>Style</key> <dict> @@ -2411,8 +2979,8 @@ <integer>1002</integer> <key>Points</key> <array> - <string>{405, 423}</string> - <string>{464.114, 355}</string> + <string>{306, 369.124}</string> + <string>{360, 370.267}</string> </array> <key>Style</key> <dict> @@ -2443,7 +3011,7 @@ <array> <dict> <key>Bounds</key> - <string>{{441, 315}, {81, 14}}</string> + <string>{{360, 351.124}, {81, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -2479,7 +3047,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{441, 329}, {81, 14}}</string> + <string>{{360, 365.124}, {81, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -2510,14 +3078,14 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural -\f0\fs24 \cf0 OboClass}</string> +\f0\fs24 \cf0 OClass}</string> </dict> <key>TextPlacement</key> <integer>0</integer> </dict> <dict> <key>Bounds</key> - <string>{{441, 343}, {81, 12}}</string> + <string>{{360, 379.124}, {81, 12}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -2561,7 +3129,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{99, 567}, {90, 36}}</string> + <string>{{135, 513}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2588,7 +3156,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{63, 666}, {90, 36}}</string> + <string>{{63, 675}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2616,7 +3184,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{180, 666}, {90, 36}}</string> + <string>{{180, 675}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2656,8 +3224,8 @@ <integer>997</integer> <key>Points</key> <array> - <string>{45, 513}</string> - <string>{40.5, 468}</string> + <string>{58.5, 513}</string> + <string>{58.5, 468}</string> </array> <key>Style</key> <dict> @@ -2683,7 +3251,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{-9, 432}, {99, 36}}</string> + <string>{{9, 432}, {99, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2710,7 +3278,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{0, 513}, {90, 36}}</string> + <string>{{9, 513}, {99, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2749,8 +3317,8 @@ <integer>994</integer> <key>Points</key> <array> - <string>{812.915, 452}</string> - <string>{747, 486}</string> + <string>{522, 351.124}</string> + <string>{522, 315.248}</string> </array> <key>Style</key> <dict> @@ -2790,8 +3358,8 @@ <integer>993</integer> <key>Points</key> <array> - <string>{450, 441}</string> - <string>{549, 549}</string> + <string>{306, 369.124}</string> + <string>{351, 297.248}</string> </array> <key>Style</key> <dict> @@ -2831,8 +3399,8 @@ <integer>992</integer> <key>Points</key> <array> - <string>{702, 504}</string> - <string>{648, 549}</string> + <string>{477, 297.248}</string> + <string>{450, 297.248}</string> </array> <key>Style</key> <dict> @@ -2860,7 +3428,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{549, 531}, {99, 36}}</string> + <string>{{351, 279.248}, {99, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -2899,8 +3467,8 @@ <integer>990</integer> <key>Points</key> <array> - <string>{405, 423}</string> - <string>{405, 229}</string> + <string>{256.834, 350.752}</string> + <string>{382.533, 210.829}</string> </array> <key>Style</key> <dict> @@ -2940,8 +3508,8 @@ <integer>989</integer> <key>Points</key> <array> - <string>{495, 450}</string> - <string>{450, 441}</string> + <string>{360, 450}</string> + <string>{306, 369.124}</string> </array> <key>Style</key> <dict> @@ -2967,7 +3535,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{360, 423}, {90, 36}}</string> + <string>{{207, 351.124}, {99, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3002,15 +3570,13 @@ <dict> <key>ID</key> <integer>986</integer> - <key>Info</key> - <integer>2</integer> </dict> <key>ID</key> <integer>987</integer> <key>Points</key> <array> - <string>{657, 387}</string> - <string>{720, 414}</string> + <string>{702, 369.124}</string> + <string>{765, 369.124}</string> </array> <key>Style</key> <dict> @@ -3036,7 +3602,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{675, 414}, {90, 27}}</string> + <string>{{765, 351.124}, {72, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3077,8 +3643,8 @@ <integer>985</integer> <key>Points</key> <array> - <string>{612, 405}</string> - <string>{639, 423}</string> + <string>{657, 387.624}</string> + <string>{657, 513}</string> </array> <key>Style</key> <dict> @@ -3118,8 +3684,8 @@ <integer>984</integer> <key>Points</key> <array> - <string>{612, 405}</string> - <string>{576, 450}</string> + <string>{612, 369.124}</string> + <string>{441, 450}</string> </array> <key>Style</key> <dict> @@ -3157,8 +3723,8 @@ <integer>983</integer> <key>Points</key> <array> - <string>{639, 459}</string> - <string>{603, 477}</string> + <string>{657, 513}</string> + <string>{585, 450}</string> </array> <key>Style</key> <dict> @@ -3196,8 +3762,8 @@ <integer>982</integer> <key>Points</key> <array> - <string>{576, 450}</string> - <string>{603, 477}</string> + <string>{441, 450}</string> + <string>{495, 450}</string> </array> <key>Style</key> <dict> @@ -3223,7 +3789,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{558, 477}, {90, 36}}</string> + <string>{{495, 432}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3251,7 +3817,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{603, 423}, {72, 36}}</string> + <string>{{621, 513}, {72, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3279,7 +3845,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{495, 432}, {81, 36}}</string> + <string>{{360, 432}, {81, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3306,7 +3872,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{702, 486}, {90, 36}}</string> + <string>{{477, 279.248}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3332,54 +3898,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{538.233, 255.999}, {27, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1066</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>977</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 has}</string> - </dict> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -3393,8 +3911,8 @@ <integer>977</integer> <key>Points</key> <array> - <string>{612, 369}</string> - <string>{425.559, 136.806}</string> + <string>{657, 351.124}</string> + <string>{420.847, 119}</string> </array> <key>Style</key> <dict> @@ -3420,7 +3938,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{567, 369}, {90, 36}}</string> + <string>{{612, 351.124}, {90, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -3446,54 +3964,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{653.902, 181.01}, {54, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1067</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>975</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 populates}</string> - </dict> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -3507,8 +3977,8 @@ <integer>975</integer> <key>Points</key> <array> - <string>{658.727, 164}</string> - <string>{664.273, 225}</string> + <string>{630, 118}</string> + <string>{630, 180.705}</string> </array> <key>Style</key> <dict> @@ -3534,7 +4004,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{599.03, 213.959}, {17, 14}}</string> + <string>{{561.995, 172.418}, {17, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -3587,7 +4057,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{458.933, 141.014}, {15, 14}}</string> + <string>{{451.569, 120.612}, {15, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -3654,8 +4124,8 @@ <integer>974</integer> <key>Points</key> <array> - <string>{627.685, 225}</string> - <string>{449.832, 136.806}</string> + <string>{586.7, 180.705}</string> + <string>{446.079, 119}</string> </array> <key>Style</key> <dict> @@ -3680,56 +4150,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{513.544, 104.559}, {53.205, 14}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>Vertical</string> - <key>ID</key> - <integer>1070</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>973</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.45220190286636353</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 creates}</string> - </dict> - <key>Wrap</key> - <string>YES</string> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -3743,8 +4163,8 @@ <integer>973</integer> <key>Points</key> <array> - <string>{603, 138.849}</string> - <string>{459, 122.445}</string> + <string>{576, 99.0001}</string> + <string>{450, 99.0001}</string> </array> <key>Style</key> <dict> @@ -3769,54 +4189,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{648.616, 87.4377}, {32, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1071</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>972</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 uses}</string> - </dict> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -3830,8 +4202,8 @@ <integer>972</integer> <key>Points</key> <array> - <string>{652.206, 126}</string> - <string>{635.047, 58}</string> + <string>{630, 80.0002}</string> + <string>{630, 40}</string> </array> <key>Style</key> <dict> @@ -3857,7 +4229,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{670.551, 31.5236}, {17, 14}}</string> + <string>{{670.297, 17.5297}, {17, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -3910,7 +4282,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{691.976, 23.2868}, {16, 14}}</string> + <string>{{699.499, 13.7982}, {16, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -3977,8 +4349,8 @@ <integer>971</integer> <key>Points</key> <array> - <string>{675, 34.0714}</string> - <string>{702, 27}</string> + <string>{675, 19.3333}</string> + <string>{711, 18}</string> </array> <key>Style</key> <dict> @@ -4004,7 +4376,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{702, 9}, {108, 36}}</string> + <string>{{711, 0}, {108, 36}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>ID</key> @@ -4030,56 +4402,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{796.342, 36.5431}, {51.6558, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>Vertical</string> - <key>ID</key> - <integer>1074</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>969</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 parses}</string> - </dict> - <key>Wrap</key> - <string>YES</string> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -4093,8 +4415,8 @@ <integer>969</integer> <key>Points</key> <array> - <string>{810, 67.4839}</string> - <string>{855, 52.9677}</string> + <string>{810, 100}</string> + <string>{963, 100}</string> </array> <key>Style</key> <dict> @@ -4120,7 +4442,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{705.347, 63.9375}, {17, 14}}</string> + <string>{{714.8, 74.4886}, {17, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4173,7 +4495,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{670.674, 49.6687}, {16, 14}}</string> + <string>{{661.309, 39.3941}, {16, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4240,8 +4562,8 @@ <integer>968</integer> <key>Points</key> <array> - <string>{720, 67.3333}</string> - <string>{675, 52.6667}</string> + <string>{732.938, 81.0004}</string> + <string>{663.75, 40}</string> </array> <key>Style</key> <dict> @@ -4266,56 +4588,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{234.858, 371.803}, {46.0138, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>Vertical</string> - <key>ID</key> - <integer>1078</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>966</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 change}</string> - </dict> - <key>Wrap</key> - <string>YES</string> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -4329,8 +4601,8 @@ <integer>966</integer> <key>Points</key> <array> - <string>{231.923, 364}</string> - <string>{249.231, 414}</string> + <string>{76.5, 315.248}</string> + <string>{76.5, 360}</string> </array> <key>Style</key> <dict> @@ -4355,54 +4627,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{162.304, 282.836}, {27, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1079</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>965</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 edit}</string> - </dict> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -4416,8 +4640,8 @@ <integer>965</integer> <key>Points</key> <array> - <string>{193.696, 324}</string> - <string>{123.261, 279}</string> + <string>{76.5, 275.248}</string> + <string>{76.5, 218.705}</string> </array> <key>Style</key> <dict> @@ -4442,64 +4666,21 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{148.408, 195.51}, {29, 12}}</string> + <key>AllowLabelDrop</key> + <false/> <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1080</integer> - <key>Line</key> + <string>LineGraphic</string> + <key>Head</key> <dict> <key>ID</key> - <integer>964</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.40689659118652344</real> - <key>RotationType</key> - <integer>0</integer> + <integer>1106</integer> </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 new}</string> - </dict> - </dict> - <dict> - <key>AllowLabelDrop</key> - <false/> - <key>Class</key> - <string>LineGraphic</string> <key>ID</key> <integer>964</integer> <key>Points</key> <array> - <string>{144, 229.5}</string> - <string>{207, 207}</string> + <string>{139.5, 191.705}</string> + <string>{206.5, 191.705}</string> </array> <key>Style</key> <dict> @@ -4524,54 +4705,6 @@ </dict> </dict> <dict> - <key>Bounds</key> - <string>{{159.158, 220.83}, {24, 12}}</string> - <key>Class</key> - <string>ShapedGraphic</string> - <key>FitText</key> - <string>YES</string> - <key>ID</key> - <integer>1081</integer> - <key>Line</key> - <dict> - <key>ID</key> - <integer>963</integer> - <key>Offset</key> - <real>-20</real> - <key>Position</key> - <real>0.44914621114730835</real> - <key>RotationType</key> - <integer>0</integer> - </dict> - <key>Shape</key> - <string>Rectangle</string> - <key>Style</key> - <dict> - <key>shadow</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - <key>stroke</key> - <dict> - <key>Draws</key> - <string>NO</string> - </dict> - </dict> - <key>Text</key> - <dict> - <key>Align</key> - <integer>0</integer> - <key>Text</key> - <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs20 \cf0 old}</string> - </dict> - </dict> - <dict> <key>AllowLabelDrop</key> <false/> <key>Class</key> @@ -4579,14 +4712,14 @@ <key>Head</key> <dict> <key>ID</key> - <integer>954</integer> + <integer>1105</integer> </dict> <key>ID</key> <integer>963</integer> <key>Points</key> <array> - <string>{144, 248.41}</string> - <string>{207, 244.821}</string> + <string>{139.5, 181.905}</string> + <string>{211.006, 170.782}</string> </array> <key>Style</key> <dict> @@ -4612,7 +4745,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{405.096, 135.285}, {17, 14}}</string> + <string>{{386.667, 117.183}, {17, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4665,7 +4798,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{400.894, 176.911}, {16, 14}}</string> + <string>{{389.833, 158.646}, {16, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4732,8 +4865,8 @@ <integer>962</integer> <key>Points</key> <array> - <string>{408.524, 136.806}</string> - <string>{405.976, 189}</string> + <string>{400.5, 119}</string> + <string>{400.5, 170.829}</string> </array> <key>Style</key> <dict> @@ -4764,7 +4897,7 @@ <array> <dict> <key>Bounds</key> - <string>{{189, 414}, {135, 14}}</string> + <string>{{9, 360}, {135, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4800,7 +4933,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{189, 428}, {135, 14}}</string> + <string>{{9, 374}, {135, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4838,7 +4971,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{189, 442}, {135, 14}}</string> + <string>{{9, 388}, {135, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4894,7 +5027,7 @@ <array> <dict> <key>Bounds</key> - <string>{{603, 126}, {108, 14}}</string> + <string>{{576, 80.0002}, {108, 14}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4930,7 +5063,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{603, 140}, {108, 12}}</string> + <string>{{576, 94.0002}, {108, 12}}</string> <key>Class</key> <string>ShapedGraphic</string> <key>FitText</key> @@ -4961,7 +5094,7 @@ </dict> <dict> <key>Bounds</key> - <string>{{603, 152}, {108, 12}}</string> + <string>{{576, 106}, {108, 12}}</string> <key>Class</... [truncated message content] |
From: <ba...@us...> - 2007-06-27 19:38:07
|
Revision: 688 http://svn.sourceforge.net/obo/?rev=688&view=rev Author: balhoff Date: 2007-06-27 12:38:07 -0700 (Wed, 27 Jun 2007) Log Message: ----------- Changed phenote-config.rnc to use a list of group names attribute in fields instead of group-ref elements. Updated xsd and jar to match. Modified Paths: -------------- phenote/trunk/conf/phenote-config.rnc phenote/trunk/conf/phenote-config.xsd phenote/trunk/jars/phenoteconfigbeans.jar Modified: phenote/trunk/conf/phenote-config.rnc =================================================================== --- phenote/trunk/conf/phenote-config.rnc 2007-06-27 18:52:07 UTC (rev 687) +++ phenote/trunk/conf/phenote-config.rnc 2007-06-27 19:38:07 UTC (rev 688) @@ -87,9 +87,9 @@ attribute filter-out { xsd:string }, attribute slim { xsd:string }, attribute repos-subdir {xsd:string}, + attribute groups { xsd:IDREFS }?, postcomp?, - ontology*, - group-ref* + ontology* } ontology = @@ -112,10 +112,6 @@ attribute interface { "default" | "character-template" } } - group-ref = - element group-ref { - attribute name { xsd:IDREF } - } ## Whether to check if ontology(obo) has been updated/more current obo file ## I think this needs to be taken out as replaced by quartz scheduler Modified: phenote/trunk/conf/phenote-config.xsd =================================================================== --- phenote/trunk/conf/phenote-config.xsd 2007-06-27 18:52:07 UTC (rev 687) +++ phenote/trunk/conf/phenote-config.xsd 2007-06-27 19:38:07 UTC (rev 688) @@ -13,6 +13,7 @@ <xs:element ref="x:obo-repository"/> <xs:element ref="x:autocomplete-settings"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="x:field"/> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="x:group"/> </xs:sequence> <xs:attribute name="version" use="required" type="xs:string"/> <xs:attribute name="description" use="required" type="xs:string"/> @@ -104,6 +105,7 @@ <xs:attribute name="filter-out" use="required" type="xs:string"/> <xs:attribute name="slim" use="required" type="xs:string"/> <xs:attribute name="repos-subdir" use="required" type="xs:string"/> + <xs:attribute name="groups" type="xs:IDREFS"/> </xs:complexType> </xs:element> <xs:element name="ontology"> @@ -125,6 +127,27 @@ <xs:attribute name="is-postcomp-rel" use="required" type="xs:boolean"/> </xs:complexType> </xs:element> + <xs:element name="group"> + <xs:complexType> + <xs:attribute name="name" use="required" type="xs:ID"/> + <xs:attribute name="container" use="required"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="window"/> + <xs:enumeration value="tab"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="interface" use="required"> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="default"/> + <xs:enumeration value="character-template"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> <xs:element name="postcomp"> <xs:complexType> <xs:sequence> Modified: phenote/trunk/jars/phenoteconfigbeans.jar =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2007-06-27 17:15:11
|
Revision: 686 http://svn.sourceforge.net/obo/?rev=686&view=rev Author: balhoff Date: 2007-06-27 10:15:09 -0700 (Wed, 27 Jun 2007) Log Message: ----------- Added "group" and "group-ref" elements. Fields can belong to any number of groups. Modified Paths: -------------- phenote/trunk/conf/phenote-config.rnc Modified: phenote/trunk/conf/phenote-config.rnc =================================================================== --- phenote/trunk/conf/phenote-config.rnc 2007-06-27 13:40:20 UTC (rev 685) +++ phenote/trunk/conf/phenote-config.rnc 2007-06-27 17:15:09 UTC (rev 686) @@ -17,7 +17,8 @@ update-timer, obo-repository, autocomplete-settings, - field* + field*, + group* } ## specify how the master config interacts with local/cached config @@ -87,7 +88,8 @@ attribute slim { xsd:string }, attribute repos-subdir {xsd:string}, postcomp?, - ontology* + ontology*, + group-ref* } ontology = @@ -102,6 +104,18 @@ attribute repos-subdir {xsd:string}, attribute is-postcomp-rel {xsd:boolean} } + + group = + element group { + attribute name { xsd:ID }, + attribute container { "window" | "tab" }, + attribute interface { "default" | "character-template" } + } + + group-ref = + element group-ref { + attribute name { xsd:IDREF } + } ## Whether to check if ontology(obo) has been updated/more current obo file ## I think this needs to be taken out as replaced by quartz scheduler This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2007-06-27 13:40:25
|
Revision: 685 http://svn.sourceforge.net/obo/?rev=685&view=rev Author: mgibson Date: 2007-06-27 06:40:20 -0700 (Wed, 27 Jun 2007) Log Message: ----------- well this isnt ready for prime time - and should probably be supressed for beta release? or have editing features taken out(browse only?)? or worked on a little more? but i wanna go on to other things this is the furst cut at a config gui - more work to be done for sure - at this point its really just a config browser also slow in coming up - need to work on that - much work to be done Modified Paths: -------------- phenote/trunk/src/java/phenote/config/Config.java phenote/trunk/src/java/phenote/config/ConfigFileQueryGui.java phenote/trunk/src/java/phenote/config/ConfigWriter.java phenote/trunk/src/java/phenote/config/FieldConfig.java phenote/trunk/src/java/phenote/config/OntologyConfig.java phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java phenote/trunk/src/java/phenote/datamodel/Ontology.java phenote/trunk/src/java/phenote/gui/GridBagUtil.java phenote/trunk/src/java/phenote/gui/HelpMenu.java phenote/trunk/src/java/phenote/gui/SettingsMenu.java phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java phenote/trunk/src/java/phenote/main/Phenote.java phenote/trunk/src/java/phenote/util/FileUtil.java Added Paths: ----------- phenote/trunk/src/java/phenote/gui/ConfigGui.java Modified: phenote/trunk/src/java/phenote/config/Config.java =================================================================== --- phenote/trunk/src/java/phenote/config/Config.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/config/Config.java 2007-06-27 13:40:20 UTC (rev 685) @@ -45,7 +45,8 @@ public final static String FLYBASE_DEFAULT_CONFIG_FILE = "flybase.cfg"; private static Config singleton = new Config(); - private String configFile = FLYBASE_DEFAULT_CONFIG_FILE; + + private String configFile = FLYBASE_DEFAULT_CONFIG_FILE; // default private List<DataAdapterConfig> dataAdapConfList; private List<DataAdapterConfig> queryAdapConfList; /** only enabled fields */ @@ -68,6 +69,11 @@ private PhenoteConfigurationDocument phenoDocBean; private PhenoteConfiguration phenoConfigBean; // cache the xml parse bean?? + // so name is both the filename and the display name for the config - which simplifies + // things - but if it becomes a drag we'll break this up + private String name; + private String displayName; // for gui config to get html italics & grey in there - cheesy? + private boolean configInitialized = false; private boolean configModified = false; //flag for if any settings during session have changed, such as search params, col widths, etc. @@ -80,6 +86,23 @@ /** singleton */ private Config() {} + // for gui config + public static Config newInstance(String name,String displayName) { + Config c = new Config(); + c.phenoDocBean = PhenoteConfigurationDocument.Factory.newInstance(); + c.phenoConfigBean = c.phenoDocBean.addNewPhenoteConfiguration(); + c.setConfigName(name); + c.displayName = displayName; + return c; + } + + public static Config makeConfigFromFile(String file) throws ConfigException { + Config c = new Config(); + c.setConfigFile(file,true,false,false); + //c.setConfigName(file); // or in setConfigFile? + return c; + } + public boolean isInitialized() { return configInitialized; } public boolean isConfigModified() { return configModified; } @@ -183,6 +206,7 @@ boolean overwritePersonalConfig,boolean mergeConfigs) throws ConfigException { this.configFile = file; // ?? + setNameFromConfigFile(file); // ?? // look to see if config file in ~/.phenote - if not copy there if (usePersonalConfig) { // for standalone not servlet configFile = getMyPhenoteConfig(configFile,overwritePersonalConfig,mergeConfigs); @@ -656,6 +680,11 @@ return phenoConfigBean.getLog().getConfigFile(); } + /** Adds & returns xml Field bean */ + Field addNewFieldBean() { + return phenoConfigBean.addNewField(); + } + public int getEnbldFieldsNum() { return getEnbldFieldCfgs().size(); } @@ -969,18 +998,42 @@ phenoConfigBean.setFieldArray(index,fc.getFieldBean()); } + public String toString() { + if (displayName != null) return displayName; + return getConfigName(); + } + + // i dont think we should do it this way - i think the name & filename should be + // synonomous - and the user shouldnt have to know anything about files public String getConfigName() { - String name = phenoConfigBean.getName(); - return name; - } + //String name = phenoConfigBean.getName(); + return this.name; + } public void setConfigName(String name) { - phenoConfigBean.setName(name); - return; + this.name = name; //phenoConfigBean.setName(name); + displayName = name; // displayName = null? + setConfigFileFromName(); } + + private void setConfigFileFromName() { + configFile = name.replaceAll(" ","-"); + configFile += ".cfg"; + } + + private void setNameFromConfigFile(String file) { + name = file; + if (name.endsWith(".cfg")) name = name.substring(0,name.length()-4); + name.replaceAll("-"," "); + } + + private String getConfigFile() { + return configFile; + } + public String getConfigDesc() { - String desc = phenoConfigBean.getDescription(); - return desc; - } + String desc = phenoConfigBean.getDescription(); + return desc; + } public void setConfigDesc(String desc) { phenoConfigBean.setDescription(desc); return; @@ -1013,15 +1066,3 @@ //private FieldConfig lumpConfig = new FieldConfig(CharFieldEnum.LUMP,"Genotype"); //private String lumpOntologyFile = null; private OntologyConfig lumpConfig = new OntologyConfig("Genotype"); - //private boolean checkForNewOntologies = false; - //private int newOntologyCheckMinutes = 10; - // --> quartz -// /** perhaps not best name - check if ontology is still fresh, if something newer -// than load it - for obo files check file date - get this into config file! */ -// public boolean checkForNewOntologies() { -// return checkForNewOntologies; -// } -// /** How many minutes between checks for new ontologies */ -// public int getOntologyCheckMinutes() { return newOntologyCheckMinutes; } -// private class DataAdapterConfig { - Modified: phenote/trunk/src/java/phenote/config/ConfigFileQueryGui.java =================================================================== --- phenote/trunk/src/java/phenote/config/ConfigFileQueryGui.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/config/ConfigFileQueryGui.java 2007-06-27 13:40:20 UTC (rev 685) @@ -1,11 +1,16 @@ package phenote.config; +// this should be moved to gui - actually i think ConfigGui may more or less replace it? + import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.LinkedHashSet; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import java.util.Enumeration; import java.util.jar.JarEntry; @@ -95,7 +100,7 @@ try { currentConfig = Config.inst().getMyPhenoteConfigString(); } catch (IOException e) { doFirst = true; } for (String cfg : getConfigNames()) { - JRadioButton b = new JRadioButton(new BtnAction(cfg)); + JRadioButton b = new JRadioButton(new BtnAction(cfg)); // makes display name buttonPanel.add(b); // select current myphenote if exists, else select first if ( (currentConfig != null && cfg.equals(currentConfig)) @@ -183,20 +188,22 @@ } private String makeDisplayFromFile(String f) { f = f.replaceAll(".cfg",""); - //f = f.replaceAll("-"," "); + f = f.replaceAll("-"," "); return f; } - /** query conf directories in app conf, jar conf(webstart) and .phenote/conf */ - private Set<String> getConfigNames() { + /** query conf directories in app conf, jar conf(webstart) and .phenote/conf + List? soreted alphabeitcally? + these strings are the actual filenames as in name-with-dash.cfg */ + public static SortedSet<String> getConfigNames() { - Set<String> names = new LinkedHashSet<String>(); + //Set<String> names = new LinkedHashSet<String>(); + SortedSet<String> names = new TreeSet<String>(); + // JAR // should only go into jar if actually running from jar hmmmmm // will this work with webstart??? probably not - File jf = new File("jars/phenote.jar"); - try { BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService"); URL codeBaseUrl = bs.getCodeBase(); // this is the url to phenote webstart @@ -227,10 +234,13 @@ // ~/.phenote/conf File dotPhenConf = FileUtil.getDotPhenoteConfDir(); addCfgFromDir(dotPhenConf,names); + + //Collections.sort(names); + return names; } - private void addCfgFromDir(File confDir,Set<String> names) { + private static void addCfgFromDir(File confDir,SortedSet<String> names) { FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".cfg");} @@ -255,64 +265,4 @@ } -// silly me - all i needed to do was make the dialog modal! silly silly -// WaitSwingWorkerThread waitSwingWorkerThread; - // doesnt work - still spins - //Thread dt = new DialogThread(); -// try { -// // this says cant do from EventDispatcherThread -// //javax.swing.SwingUtilities.invokeAndWait(new DialogThread()); -// // this literally makes the computer blow up -// //javax.swing.SwingUtilities.invokeLater(new DialogThread()); -// } //catch (InterruptedException e) { System.out.println("interrupted "+e); } -// catch (Exception e) { System.out.println("Exception: "+e); } - //dt.start(); - //DialogSwingWorkerThread dt = new DialogSwingWorkerThread(); - //dt.start(); -// while (!okPressed) { -// System.out.println("ok pressed? "+okPressed+" cur thread "+Thread.currentThread()+" dlg thread "+dt); -// try { Thread.sleep(300); } catch (InterruptedException e) {} -// } // sleep?? -// return selectedFile; //(String) dt.get(); //selectedFile; -// waitSwingWorkerThread = new WaitSwingWorkerThread(); -// waitSwingWorkerThread.start(); -// return (String)waitSwingWorkerThread.get(); -// private class DialogThread extends Thread { -// public void run() { -// makeQueryDialog(); -// } -// } -// private class WaitSwingWorkerThread extends phenote.gui.SwingWorker { -// public Object construct() { -// while (!okPressed) { -// System.out.println("ok pressed? "+okPressed+" cur thread "+Thread.currentThread()+" this "+this+" sel "+selectedFile); -// // try { -// waitSwingWorkerThread.sleep(300);// } catch (InterruptedException e) {} -// } // sleep?? -// return selectedFile; -// } -// } - - -// private class DialogSwingWorkerThread extends phenote.gui.SwingWorker { -// public Object construct() { -// makeQueryDialog(); -// // while (!okPressed) { -// // System.out.println("ok pressed? "+okPressed+" cur thread "+Thread.currentThread()+" this "+this); -// // try { Thread.sleep(300); } catch (InterruptedException e) {} -// // } // sleep?? -// return selectedFile; -// } -// } - -// private class PhenoteClassLoader extends ClassLoader { -// private PhenoteClassLoader() { -// super(ClassLoader.getSystemClassLoader()); -// } -// protected String findLibrary(String lib) { -// return super.findLibrary(lib); -// //return this.getParent().findLibrary(lib); -// } -// //protected ClassLoader getParent() { return super.getParent(); } -// } Modified: phenote/trunk/src/java/phenote/config/ConfigWriter.java =================================================================== --- phenote/trunk/src/java/phenote/config/ConfigWriter.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/config/ConfigWriter.java 2007-06-27 13:40:20 UTC (rev 685) @@ -4,14 +4,8 @@ import java.io.IOException; import org.apache.xmlbeans.XmlOptions; -//import phenote.config.xml.DataadapterDocument.Dataadapter; -//import phenote.config.xml.QueryableDataadapterDocument.QueryableDataadapter; -// import phenote.config.xml.LogDocument.Log; -// import phenote.config.xml.OboRepositoryDocument.OboRepository; -// import phenote.config.xml.OntologyDocument.Ontology; import phenote.config.xml.PhenoteConfigurationDocument; import phenote.config.xml.PhenoteConfigurationDocument.PhenoteConfiguration; -// import phenote.config.xml.UvicGraphDocument.UvicGraph; import phenote.dataadapter.DataAdapterI; import phenote.main.PhenoteVersion; @@ -22,8 +16,6 @@ hindsight is 20 20 */ class ConfigWriter { - //private Config config; - //private PhenoteConfiguration phenCfg; void writeConfig(Config config, File file) { //throws IOException? { //this.config = config; // convenience @@ -34,18 +26,7 @@ phenCfg.setVersion(PhenoteVersion.versionString()); //xml namespace? need to get that working - xsd as a check - dont know how - //addDataAdapters(); - //addQueryDataAdapters(); - - //addLog(); - - //addUvicGraph(); - - //addRepository(); - - //addFields(); - try { // xmlOptions? pretty print doc.save(file,getXmlOptions()); System.out.println("Saved changes to config file "+file);} @@ -60,6 +41,30 @@ return options; } +} + +// GARBAGE... +//import phenote.config.xml.DataadapterDocument.Dataadapter; +//import phenote.config.xml.QueryableDataadapterDocument.QueryableDataadapter; +// import phenote.config.xml.LogDocument.Log; +// import phenote.config.xml.OboRepositoryDocument.OboRepository; +// import phenote.config.xml.OntologyDocument.Ontology; +// import phenote.config.xml.UvicGraphDocument.UvicGraph; + //private Config config; + //private PhenoteConfiguration phenCfg; + + //addDataAdapters(); + + //addQueryDataAdapters(); + + //addLog(); + + //addUvicGraph(); + + //addRepository(); + + //addFields(); + // private void addDataAdapters() { // for (DataAdapterConfig dac : config.getAdapConfigs()) { // addDataAdapter(dac); @@ -107,4 +112,3 @@ // } // } -} Modified: phenote/trunk/src/java/phenote/config/FieldConfig.java =================================================================== --- phenote/trunk/src/java/phenote/config/FieldConfig.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/config/FieldConfig.java 2007-06-27 13:40:20 UTC (rev 685) @@ -25,6 +25,7 @@ //private boolean enabled = true; // default if not specified is true private Config config; private Field fieldBean; + private String displayName; // from gui config @@ -62,7 +63,7 @@ // ONTOLOGIES if only one ontology file is an attribute... (convenience) // this is being phased out - no need and a hassle - if (fieldBean.getFile() != null) { + if (fieldBean.getFile() != null && !fieldBean.getFile().equals("")) { addOntologyConfig(new OntologyConfig(fieldBean,this)); } // otherwise its multiple ontologies listed in ontology elements (entity) @@ -75,15 +76,33 @@ } } + // for ConfigGui + public FieldConfig(String label, String displayName,Config cfg) { + config = cfg; + setLabel(label); + this.displayName = displayName; + } + Config getConfig() { return config; } /** return xml bean for field -always non null */ - Field getFieldBean() { return fieldBean; } + Field getFieldBean() { + if (fieldBean == null) //create one... + fieldBean = config.addNewFieldBean(); + return fieldBean; + } // --> getName? - public String getLabel() { return fieldBean.getName(); } //return label; } + public String getLabel() { return fieldBean.getName(); } boolean hasLabel(String label) { return label.equals(getLabel()); } - // public void setLabel(String label) { fieldBean.setName(label); } // ?? + public void setLabel(String label) { + getFieldBean().setName(label); + displayName = label; + } // ?? + public String toString() { + if (displayName != null) return displayName; + return getLabel(); + } //public String getLabel() { return label; } public String getDesc() { return desc; } Modified: phenote/trunk/src/java/phenote/config/OntologyConfig.java =================================================================== --- phenote/trunk/src/java/phenote/config/OntologyConfig.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/config/OntologyConfig.java 2007-06-27 13:40:20 UTC (rev 685) @@ -64,6 +64,7 @@ //name = field.getName(); setName(field.getName()); setFile(field.getFile());//ontologyFile = field.getFile(); + getOntologyBean().setFile(field.getFile()); // crucial! // downside of strongly types xml beans is filterOut has to be dealt with // separately for field & ontology - annoying - & all other attribs //filterOut = field.getFilterOut()!=null ? field.getFilterOut() : null; @@ -72,10 +73,12 @@ setSlim(field.getSlim()); //reposSubdir = field.getReposSubdir()!=null ? field.getReposSubdir() : null; setReposSubdir(field.getReposSubdir()); + //fc.getFieldBean().setFile(null); // ? + fc.getFieldBean().xsetFile(null); } - // for makePostCompRelCfg PASE + // for makePostCompRelCfg PASE - for backward compatibility private OntologyConfig(String name, String file,FieldConfig fc) { //this(name,fc); fieldConfig = fc; @@ -88,6 +91,8 @@ static OntologyConfig makePostCompRelCfg(String file,FieldConfig fc) { OntologyConfig rel = new OntologyConfig("Relationship",file,fc); rel.setIsPostCompRel(true); + rel.getOntologyBean().setFile(file); // crucial! + fc.getFieldBean().unsetPostcomp(); // also crucial - get rid of it return rel; } @@ -96,6 +101,11 @@ /** File can be url(repos) or filename (from cache/jar/app), if url sets reposUrlString and ontologyFile with end of url */ private void setFile(String file) { + if (file == null) { + System.out.println("ERROR: null ontology file "+getName()); + new Throwable().printStackTrace(); + return; + } if (file.startsWith("http:") || file.startsWith("https:") || file.startsWith("ftp:") || file.startsWith("sftp:")) { reposUrlString = file; Modified: phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java =================================================================== --- phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/dataadapter/OntologyDataAdapter.java 2007-06-27 13:40:20 UTC (rev 685) @@ -105,46 +105,14 @@ if (DO_ONE_OBO_SESSION) { initOntolsOneOboSession(); } - else { + else { // pase - phase out initOntolsSeparateOboSessions(); } initializingOntologies = false; } - private void initOntolsSeparateOboSessions() { - // getFieldConfigList gives enabled fields - not disabled - for (FieldConfig fieldConfig : cfg().getEnbldFieldCfgs()) { - if (!fieldConfig.isEnabled()) continue; // not necasary actually - CharField cf = new CharField(fieldConfig.getLabel()); - fieldConfig.setCharField(cf); - // ONTOLOGIES - if (fieldConfig.hasOntologies()) { - for (OntologyConfig oc : fieldConfig.getOntologyConfigList()) { - try { - Ontology o = initOntology(oc); // LOAD OBO SESSION - if (oc.isPostCompRel()) { // POST COMP REL ONTOLOGY - cf.setPostCompAllowed(true); - cf.setPostCompRelOntol(o); - } - else { // REGULAR ONTOLOGY - cf.addOntology(o); - } - } catch (OntologyException e) { - LOG.error(e.getMessage()+" ignoring init ontology, fix config? "+oc); - } - } - } - else { - cf.setName(fieldConfig.getLabel()); - } - // i think this order needs to be same as config order - ontologyManager.addField(cf); - } - } - - private void initOntolsOneOboSession() { try { OBOSession os = loadAllOboFilesIntoOneOboSession(); @@ -174,7 +142,8 @@ files.add(file); } catch (OntologyException e) { - LOG.warn(e.getMessage()+" Please check config & obo files"); + String m = e.getMessage()+" Please check config & obo files"; + LOG.error(m); System.out.println(m); } } } @@ -231,30 +200,7 @@ } - /** Load up/cache Sets for all ontologies used, anatomyOntologyTermSet - * and patoOntologyTermSet -- move to dataadapter/OntologyDataAdapter... */ - private Ontology initOntology(OntologyConfig ontCfg) throws OntologyException { - Ontology ontology = new Ontology(ontCfg.getName()); // new Ontology(ontCfg)? - if (ontCfg.hasFilter()) // set filter before loading obo session - ontology.setFilter(ontCfg.getFilter()); - if (ontCfg.hasSlim()) - ontology.setSlim(ontCfg.getSlim()); - - loadOboSession(ontology,ontCfg); // throws FileNotFoundEx->OntolEx - return ontology; - } - /** Load obo session with obo edit adapter, unless previously loaded - reuse */ - private void loadOboSession(Ontology o,OntologyConfig oc) throws OntologyException { - // check cache of ontologies to see if ontology file already loaded - if (fileIsInCache(oc.getFile())) { - setOboSessionFromCache(o,oc.getFile()); - } - else { - loadOboSessionCheckRepos(o,oc); - } - } - /** if configged checks if repos has more recent - if so copies to cache if no repos gets from cache(.phenote/obo-files), if no cache gets from app/obo-files throws ontology ex if fails to find in @@ -265,13 +211,15 @@ /** if configged checks if repos has more recent - if so copies to cache - if no repos gets from cache(.phenote/obo-files), if no cache gets from app/obo-files - throws ontology ex if fails to find in + if no repos gets from cache(.phenote/obo-files), if no cache gets from + app/obo-files throws ontology ex if fails to find in url/repos, .phenote/obo-files and app/obo-files */ private URL findOboUrl(OntologyConfig ontCfg) throws OntologyException { // first get local url (if there is one) to use to compare against repos url // get normal/cached/local ontology String filename = ontCfg.getFile(); + if (filename == null) + throw new OntologyException(ontCfg.getName()+" has null file"); // throws OntologyEx if file not found -- catch & try url URL url = null; try { url = findFile(filename); } @@ -302,75 +250,8 @@ } - private boolean fileIsInCache(String filename) { - return fileToOntologyCache.containsKey(filename); - } - private void setOboSessionFromCache(Ontology o,String filename) - throws OntologyException { - Ontology previousOntol = fileToOntologyCache.get(filename); - o.setOboSession(previousOntol.getOboSession()); // throws OntEx if error - System.out.println("obo file already loaded using, obo file from cache "+o.getOboSession()); - o.setTimestamp(previousOntol.getTimestamp()); - o.setSource(previousOntol.getSource()); - } - /** If repository is configured loads obo from repos if local out of date */ - private void loadOboSessionCheckRepos(Ontology o,OntologyConfig oc) - throws OntologyException { - -// // first get normal/cached/local ontology -// String filename = oc.getFile(); -// // throws OntologyEx if file not found -- need to catch - should still try url -// URL url = null; -// try { url = findFile(filename); } -// catch (OntologyException oe) { -// System.out.println(filename+" not found locally, trying url if configured "); -// } - -// // if ontCfg.hasSynchUrl() ? -// // URL synchUrl = ontCfg.getSynchUrl -// if (oc.hasReposUrl()) { -// try { -// URL reposUrl = oc.getReposUrl(); -// // if out of synch copies repos to local(.phenote/obo-files) -// // url may be jar/obo-files or svn/obo-files but this function may put file -// // in cache ~/.phenote/obo-files -// url = synchWithRepositoryUrl(url,reposUrl,o.getName(),filename); - -// // to do - if from repos need to load repos into local obo cache! - -// } catch (/*MalformedURL & IO*/Exception e) { LOG.error(e); } -// } - - URL url = findOboUrl(oc); - - long mem = Runtime.getRuntime().totalMemory()/1000000; - LOG.debug(url+" checking with repos... loading obo session mem "+mem+"\n"); - startTimer(); - - loadOboSessionFromUrl(o,url,oc.getFile()); - stopTimer(url+" checked against repos... obo session loaded"); - mem = Runtime.getRuntime().totalMemory()/1000000; - long max = Runtime.getRuntime().maxMemory()/1000000; - LOG.debug("mem after load "+mem+" max "+max); - } - - /** url is either local file or repos url */ - private void loadOboSessionFromUrl(Ontology o, URL url, String filename) - throws OntologyException { - //URL url = findFile(filename); // throws OntologyEx if file not found - o.setOboSession(getOboSession(url)); // throws OntEx if error - if (filename!=null) - fileToOntologyCache.put(filename,o); // ?? - File file = new File(url.getFile()); - long date = file.lastModified(); - if (date > 0) { // jar files have 0 date??? - o.setTimestamp(date); - o.setSource(file.toString()); - } - } - /** this copies obo file to local cache (~/.phenote/obo-files */ private URL synchWithRepositoryUrl(URL localUrl, URL reposUrl, String ontol, String filename) @@ -487,6 +368,7 @@ /** Look for file in current directory (.) and jar file throws OntologyException if file not found - wraps FileNFEx */ private URL findFile(String fileName) throws OntologyException { + if (fileName == null) throw new OntologyException("file is null"); try { return FileUtil.findUrl(fileName); } catch (FileNotFoundException e) { throw new OntologyException(e); } } @@ -551,7 +433,135 @@ LOG.debug(m+" number of seconds: "+seconds); } + // pase - phase out + private void initOntolsSeparateOboSessions() { + // getFieldConfigList gives enabled fields - not disabled + for (FieldConfig fieldConfig : cfg().getEnbldFieldCfgs()) { + if (!fieldConfig.isEnabled()) continue; // not necasary actually + CharField cf = new CharField(fieldConfig.getLabel()); + fieldConfig.setCharField(cf); + // ONTOLOGIES + if (fieldConfig.hasOntologies()) { + for (OntologyConfig oc : fieldConfig.getOntologyConfigList()) { + try { + Ontology o = initOntology(oc); // LOAD OBO SESSION + if (oc.isPostCompRel()) { // POST COMP REL ONTOLOGY + cf.setPostCompAllowed(true); + cf.setPostCompRelOntol(o); + } + else { // REGULAR ONTOLOGY + cf.addOntology(o); + } + } catch (OntologyException e) { + LOG.error(e.getMessage()+" ignoring init ontology, fix config? "+oc); + } + } + } + else { + + cf.setName(fieldConfig.getLabel()); + } + // i think this order needs to be same as config order + ontologyManager.addField(cf); + } + } + + /** Load up/cache Sets for all ontologies used, anatomyOntologyTermSet + * and patoOntologyTermSet -- move to dataadapter/OntologyDataAdapter... + this is old - phase out? */ + private Ontology initOntology(OntologyConfig ontCfg) throws OntologyException { + Ontology ontology = new Ontology(ontCfg.getName()); // new Ontology(ontCfg)? + if (ontCfg.hasFilter()) // set filter before loading obo session + ontology.setFilter(ontCfg.getFilter()); + if (ontCfg.hasSlim()) + ontology.setSlim(ontCfg.getSlim()); + + loadOboSession(ontology,ontCfg); // throws FileNotFoundEx->OntolEx + return ontology; + } + + /** Load obo session with obo edit adapter, unless previously loaded - reuse + this is old - phase out! */ + private void loadOboSession(Ontology o,OntologyConfig oc) throws OntologyException { + // check cache of ontologies to see if ontology file already loaded + if (fileIsInCache(oc.getFile())) { + setOboSessionFromCache(o,oc.getFile()); + } + else { + loadOboSessionCheckRepos(o,oc); + } + } + + private boolean fileIsInCache(String filename) { + return fileToOntologyCache.containsKey(filename); + } + + private void setOboSessionFromCache(Ontology o,String filename) + throws OntologyException { + Ontology previousOntol = fileToOntologyCache.get(filename); + o.setOboSession(previousOntol.getOboSession()); // throws OntEx if error + System.out.println("obo file already loaded using, obo file from cache "+o.getOboSession()); + o.setTimestamp(previousOntol.getTimestamp()); + o.setSource(previousOntol.getSource()); + } + /** If repository is configured loads obo from repos if local out of date */ + private void loadOboSessionCheckRepos(Ontology o,OntologyConfig oc) + throws OntologyException { + +// // first get normal/cached/local ontology +// String filename = oc.getFile(); +// // throws OntologyEx if file not found -- need to catch - should still try url +// URL url = null; +// try { url = findFile(filename); } +// catch (OntologyException oe) { +// System.out.println(filename+" not found locally, trying url if configured "); +// } + +// // if ontCfg.hasSynchUrl() ? +// // URL synchUrl = ontCfg.getSynchUrl +// if (oc.hasReposUrl()) { +// try { +// URL reposUrl = oc.getReposUrl(); +// // if out of synch copies repos to local(.phenote/obo-files) +// // url may be jar/obo-files or svn/obo-files but this function may put file +// // in cache ~/.phenote/obo-files +// url = synchWithRepositoryUrl(url,reposUrl,o.getName(),filename); + +// // to do - if from repos need to load repos into local obo cache! + +// } catch (/*MalformedURL & IO*/Exception e) { LOG.error(e); } +// } + + URL url = findOboUrl(oc); + + long mem = Runtime.getRuntime().totalMemory()/1000000; + LOG.debug(url+" checking with repos... loading obo session mem "+mem+"\n"); + startTimer(); + + loadOboSessionFromUrl(o,url,oc.getFile()); + stopTimer(url+" checked against repos... obo session loaded"); + mem = Runtime.getRuntime().totalMemory()/1000000; + long max = Runtime.getRuntime().maxMemory()/1000000; + LOG.debug("mem after load "+mem+" max "+max); + } + + /** url is either local file or repos url */ + private void loadOboSessionFromUrl(Ontology o, URL url, String filename) + throws OntologyException { + //URL url = findFile(filename); // throws OntologyEx if file not found + o.setOboSession(getOboSession(url)); // throws OntEx if error + if (filename!=null) + fileToOntologyCache.put(filename,o); // ?? + File file = new File(url.getFile()); + long date = file.lastModified(); + if (date > 0) { // jar files have 0 date??? + o.setTimestamp(date); + o.setSource(file.toString()); + } + } + + // private void loadRelationshipOntology() { hmmmmmm // // for now - todo configure! post comp relationship-ontology // // FieldConfig rfc = cfg().getRelationshipFieldConfig(); Modified: phenote/trunk/src/java/phenote/datamodel/Ontology.java =================================================================== --- phenote/trunk/src/java/phenote/datamodel/Ontology.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/datamodel/Ontology.java 2007-06-27 13:40:20 UTC (rev 685) @@ -253,29 +253,6 @@ return term.getName().startsWith("obo:"); } - /** This is not generic - this looks for ids that have the filterOut string - as a prefix and tosses them - for example "ZFS" filters out all zf stage - terms - can add more flexibility as needed - this is all thats needed for now - also filters out obo: terms - those are obo edit artifacts i think - also filters for slim! */ - private List<OBOClass> filterList(Collection<OBOClass> list) { - List<OBOClass> filteredList = new ArrayList<OBOClass>(); - for (OBOClass term : list) { - // or could do remove on list? - // also filter out obo: terms as they are internal obo edit thingies it seems - // funny logic but more efficient to do in one pass - refactor somehow? - //if (term.getName().startsWith("obo:")) - if (isOboArtifact(term)) - continue; // filter our obo: - //if (hasFilter() && term.getID().startsWith(getFilter())) - if (filterOut(term)) - continue; - if (!inSlim(term)) - continue; - filteredList.add(term); // passed 2 filters above - add it - } - return filteredList; - } private Logger log; private Logger log() { @@ -330,5 +307,29 @@ //for (OBOClass o : sortedTerms) System.out.println(o); } + + /** This is not generic - this looks for ids that have the filterOut string + as a prefix and tosses them - for example "ZFS" filters out all zf stage + terms - can add more flexibility as needed - this is all thats needed for now + also filters out obo: terms - those are obo edit artifacts i think + also filters for slim! - phase out for obo edit stuff */ + private List<OBOClass> filterList(Collection<OBOClass> list) { + List<OBOClass> filteredList = new ArrayList<OBOClass>(); + for (OBOClass term : list) { + // or could do remove on list? + // also filter out obo: terms as they are internal obo edit thingies it seems + // funny logic but more efficient to do in one pass - refactor somehow? + //if (term.getName().startsWith("obo:")) + if (isOboArtifact(term)) + continue; // filter our obo: + //if (hasFilter() && term.getID().startsWith(getFilter())) + if (filterOut(term)) + continue; + if (!inSlim(term)) + continue; + filteredList.add(term); // passed 2 filters above - add it + } + return filteredList; + } } Added: phenote/trunk/src/java/phenote/gui/ConfigGui.java =================================================================== --- phenote/trunk/src/java/phenote/gui/ConfigGui.java (rev 0) +++ phenote/trunk/src/java/phenote/gui/ConfigGui.java 2007-06-27 13:40:20 UTC (rev 685) @@ -0,0 +1,472 @@ +package phenote.gui; + +import java.util.ArrayList; +import java.util.List; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTextField; +import javax.swing.event.ListDataListener; +import javax.swing.ListModel; +import javax.swing.ListSelectionModel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import phenote.config.Config; +import phenote.config.FieldConfig; +import phenote.config.OntologyConfig; +import phenote.config.ConfigException; +import phenote.config.ConfigFileQueryGui; // phase out + +public class ConfigGui { + + private final static String NO_NAME = "No Name"; + + private JList configList; + private Config currentConfig; // ??? + + private JList fieldList; + private JTextField configNameInput; + + private JTextField fieldNameInput; + private JCheckBox fieldEnable; + private JList ontologyList; + + private JTextField ontolNameInput; + private JTextField ontolFile; + private JTextField namespace; + private JTextField slim; + private JCheckBox ontolPostComp; + + private boolean userEditing = true; + + public ConfigGui() { init(); } + + private void init() { + JFrame frame = new JFrame("Phenote Configuration"); + + JComponent allConfigs = makeAllConfigsPanel(); + allConfigs.setPreferredSize(new Dimension(300,300)); + allConfigs.setMinimumSize(new Dimension(250,250)); +// Config c = Config.newInstance("hmm","dipsla");//NO_NAME,noNameItalics); //?? +// //configList.setModel(getConfigListModel()); // ???? +// getConfigListModel().list.add(c); + + JComponent config = makeConfigPanel(); + + // true -> continous layout (???) + JSplitPane configSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true, + allConfigs,config); + + JComponent field = makeFieldPanel(); + + JComponent ontol = makeOntologyPanel(); + ontol.setPreferredSize(new Dimension(300,300)); + // min size? + + JSplitPane fieldOntSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,field, + ontol); + //fieldOntSplit.setPreferredSize(new Dimension(600,300)); + + JSplitPane mainSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,configSplit, + fieldOntSplit); + mainSplit.setDividerLocation(0.5); // halfway? + + frame.add(mainSplit); + + frame.pack(); + configSplit.setDividerLocation(0.5); + fieldOntSplit.setDividerLocation(0.5); + mainSplit.setDividerLocation(0.5); // halfway? + frame.pack(); + frame.setVisible(true); + + Config c2 = Config.newInstance("h2","2");//NO_NAME,noNameItalics); //?? + //configList.setModel(getConfigListModel()); // ???? + //getConfigListModel().list.add(c2); + configList.repaint(); + } + + private JComponent makeAllConfigsPanel() { + JPanel allConfigsPanel = new JPanel(new GridBagLayout()); + JScrollPane allScroll = new JScrollPane(allConfigsPanel); + GridBagConstraints g = GridBagUtil.initConstraint(); + configList = addList(null,g,allConfigsPanel,new AddConfigActionListener(), + new ConfigListSelectionListener()); + //configList.setPreferredSize(new Dimension(250,250)); + + // populate configList with all configs... + PhenoteListModel<Config> listModel = new PhenoteListModel<Config>(); + //configList.setModel(listModel); + int debugShortcut=0; + for (String filename : ConfigFileQueryGui.getConfigNames()) { + try { + Config c = Config.makeConfigFromFile(filename); + listModel.add(c); + System.out.println("added config "+c.toString()); + } catch (ConfigException e) { + System.out.println("Failed to parse config "+filename); // LOG!! + } + //if (++debugShortcut == 4) break; + } + configList.setModel(listModel); + + return allScroll; + } + + private JComponent makeConfigPanel() { + JPanel configPanel = new JPanel(new GridBagLayout()); + JScrollPane configScroll = new JScrollPane(configPanel); // ?? why not + + GridBagConstraints g = GridBagUtil.initConstraint(); + + // Title + addTitle("CONFIG",g,configPanel); + + // NAME + configNameInput = addNameInput(g,configPanel,new ConfigNameDocListener()); + + // Field List + fieldList = addList("Fields",g,configPanel,new AddFieldActionListener(), + new FieldListSelectionListener()); + + return configScroll; + } + + private void addTitle(String title,GridBagConstraints g,JComponent parent) { + g.gridwidth = 2; g.anchor = GridBagConstraints.CENTER; + parent.add(new JLabel(title),g); // ? + } + + private JTextField addNameInput(GridBagConstraints g, JComponent parent, + DocumentListener l) { + + return addInput(g,"Name",parent,l); + } + + private JTextField addInput(GridBagConstraints g, String l,JComponent p) { + return addInput(g,l,p,null); + } + + private JTextField addInput(GridBagConstraints g,String l,JComponent prnt, + DocumentListener dl) { + JLabel label = new JLabel(l+": "); + ++g.gridy; g.gridwidth = 1; g.anchor = GridBagConstraints.WEST; + prnt.add(label,g); + JTextField input = new JTextField(17); + if (dl != null) { + input.getDocument().addDocumentListener(dl); + } + ++g.gridx; + prnt.add(input,g); + --g.gridx; // put it back + return input; + } + + private JList addList(String s,GridBagConstraints g, JComponent parent, + ActionListener al,ListSelectionListener lsl) { + g.gridx = 1; + if (s != null) { + JLabel lab = new JLabel(s+": "); + ++g.gridy; + parent.add(lab,g); + } + JList l = new JList(new DefaultListModel()); + l.addListSelectionListener(lsl); + l.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JScrollPane p = new JScrollPane(l); + ++g.gridy; g.gridwidth = 2; g.fill = GridBagConstraints.BOTH; + g.weighty = 10; + parent.add(p,g); + JButton add = new JButton("+"); // presumptious? + add.addActionListener(al); + ++g.gridy; g.fill = GridBagConstraints.NONE; g.weighty = 1; + parent.add(add,g); + return l; + } + + private JComponent makeFieldPanel() { + + JPanel fieldPanel = new JPanel(new GridBagLayout()); + JScrollPane fieldScroll = new JScrollPane(fieldPanel); //?? + + GridBagConstraints g = GridBagUtil.initConstraint(); + + // Title + addTitle("FIELD",g,fieldPanel); + + // NAME + fieldNameInput = addNameInput(g,fieldPanel,new FieldNameDocumentListener()); + + // ENABLE + fieldEnable = new JCheckBox("Enable",true); // selected + g.gridx = 1; ++g.gridy; + fieldPanel.add(fieldEnable,g); + + // ONTOLOGY LIST + ListSelectionListener l = new OntologyListSelectionListener(); + ontologyList = addList("Ontologies",g,fieldPanel,null,l); + + return fieldScroll; + } + + private JComponent makeOntologyPanel() { + JPanel ontolPanel = new JPanel(new GridBagLayout()); + JScrollPane ontolScroll = new JScrollPane(ontolPanel); //?? + + GridBagConstraints g = GridBagUtil.initConstraint(); + + // Title + addTitle("ONTOLOGY",g,ontolPanel); + + // NAME + ontolNameInput = addNameInput(g,ontolPanel,null);//new OntolNameDocumentListener()); + + // FILE/URL + ontolFile = addInput(g,"File/URL",ontolPanel); + + namespace = addInput(g,"Namespace",ontolPanel); + + slim = addInput(g,"Slim",ontolPanel); + + // POST COMP + ontolPostComp = new JCheckBox("Is Post Comp Relationship?",false); // selected + g.gridx = 1; ++g.gridy; g.gridwidth = 2; + ontolPanel.add(ontolPostComp,g); + + return ontolScroll; + } + + + private PhenoteListModel<Config> getConfigListModel() { + return getPhenoteListModel(configList); + } + + private Config getConfig(int i) { + return getConfigListModel().get(i); + } + private FieldConfig getFieldConfig(int i) { return getFieldListModel().get(i); } + + private PhenoteListModel<FieldConfig> getFieldListModel() { + return getPhenoteListModel(fieldList); + } + + private PhenoteListModel getPhenoteListModel(JList l) { + ListModel m = l.getModel(); + if (m instanceof PhenoteListModel) + return (PhenoteListModel)m; + else { + System.out.println("list model "+m+" not instance of phenote list model "); + return null; // shouldnt happen + } + } + + /** + button pressed in config fields - add noname field to list */ + private class AddConfigActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + String noNameItalics = "<html><i><font color=gray>"+NO_NAME+"</font></i></html>"; + Config c = Config.newInstance(NO_NAME,noNameItalics); //?? + getConfigListModel().add(c); + int newIndex = getConfigListModel().getSize() - 1; + configList.setSelectedIndex(newIndex); + configList.repaint(); + } + } + + /** + button pressed in config fields - add noname field to list */ + private class AddFieldActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (!hasSelectedConfig()) { + System.out.println("Error: no config selected"); + return; + } + String n = NO_NAME; + String noNameItalics = "<html><i><font color=gray>"+n+"</font></i></html>"; + FieldConfig fc = new FieldConfig(n,noNameItalics,getSelectedConfig()); //?? + getFieldListModel().add(fc); + int newIndex = fieldList.getModel().getSize() - 1; + fieldList.setSelectedIndex(newIndex); + fieldList.repaint(); + } + } + + private class ConfigNameDocListener implements DocumentListener { + public void changedUpdate(DocumentEvent e) { updateConfigListWithName(); } + public void insertUpdate(DocumentEvent e) { updateConfigListWithName(); } + public void removeUpdate(DocumentEvent e) { updateConfigListWithName(); } + } + + private void updateConfigListWithName() { + // if change comes from selection no need to update config list + if (!userEditing) return; + int i = configList.getSelectedIndex(); + if (i == -1) return; // nothing selected + // nameable interface??? + //Config c = (Config)getConfigListModel().remove(i); + //c.setConfigName(configNameInput.getText()); + //getConfigDefaultListModel().add(i,c); + //getConfigListModel().setName(i,configNameInput.getText()); + getConfig(i).setConfigName(configNameInput.getText()); + configList.repaint();// repaint list? + //configList.setSelectedIndex(i); // ?? + } + + private class FieldNameDocumentListener implements DocumentListener { + public void changedUpdate(DocumentEvent e) { updateFieldListWithName(); } + public void insertUpdate(DocumentEvent e) { updateFieldListWithName(); } + public void removeUpdate(DocumentEvent e) { updateFieldListWithName(); } + } + + private void updateFieldListWithName() { + if (!userEditing) return; + int i = fieldList.getSelectedIndex(); + if (i == -1) return; // nothing selected + //FieldConfig fc = (FieldConfig)getFieldDefaultListModel().remove(i); + //fc.setLabel(fieldNameInput.getText()); + //getFieldDefaultListModel().add(i,fc); + //fieldList.setSelectedIndex(i); + getFieldConfig(i).setLabel(fieldNameInput.getText()); + fieldList.repaint(); + } + + private class OntologyListSelectionListener implements ListSelectionListener { + public void valueChanged(ListSelectionEvent e) { + if (e.getValueIsAdjusting()) return; // only need 1 event/sel + OntologyConfig oc = getSelectedOntologyConfig(); + if (oc == null) return; + setOntologyConfig(oc); + } + } + private class FieldListSelectionListener implements ListSelectionListener { + public void valueChanged(ListSelectionEvent e) { + if (e.getValueIsAdjusting()) return; // only need 1 event/sel + FieldConfig fc = getSelectedFieldConfig(); + if (fc == null) return; + setFieldConfig(fc); + } + } + private class ConfigListSelectionListener implements ListSelectionListener { + public void valueChanged(ListSelectionEvent e) { + if (e.getValueIsAdjusting()) return; // only need 1 event/sel + if (!hasSelectedConfig()) return; // shouldnt happen + Config c = getSelectedConfig(); + setConfig(c); + } + } + + private FieldConfig getSelectedFieldConfig() { + return (FieldConfig)fieldList.getSelectedValue(); // instanceof check? + } + + private OntologyConfig getSelectedOntologyConfig() { + return (OntologyConfig)ontologyList.getSelectedValue(); + } + + private boolean hasSelectedConfig() { + return getSelectedConfig() != null; + } + + private Config getSelectedConfig() { + return (Config)configList.getSelectedValue(); + } + +// private Object getSelectedItem(JList l) { +// // int i = l.getSelectedIndex(); +// // if (i == -1) return null; // ex? +// // Object o = getDefaultListModel(l).getElementAt(i); +// // return o; +// return l.getSelectedValue(); +// } + + private void setOntologyConfig(OntologyConfig oc) { + if (oc == null) return; + userEditing = false; // this is not a user edit + ontolNameInput.setText(oc.getName()); + ontolFile.setText(oc.getFile()); + namespace.setText(oc.getNamespace()); + slim.setText(oc.getSlim()); + ontolPostComp.setSelected(oc.isPostCompRel()); + userEditing = true; // reset + } + + private void setFieldConfig(FieldConfig fc) { + // oh boy need to turn off listener... endless loop? + //if (currentFieldConfig + if (fc == null) return; + userEditing = false; // this is not a user edit + fieldNameInput.setText(fc.getLabel()); + fieldEnable.setSelected(fc.isEnabled()); + ontologyList.setModel(new PhenoteListModel(fc.getOntologyConfigList())); + selectFirst(ontologyList); + userEditing = true; // reset + } + + /** Set current config in config box */ + private void setConfig(Config c) { + // oh boy need to turn off listener... endless loop? yes - this is not an edit + if (currentConfig == c) return; // ??? already set + currentConfig = c; + userEditing = false; + configNameInput.setText(c.getConfigName()); + fieldList.setModel(new PhenoteListModel<Config>(c.getAllFieldCfgs())); + selectFirst(fieldList); + userEditing = true; + } + + private void selectFirst(JList l) { + // make sure there is something to select... + if (getPhenoteListModel(l).isEmpty()) return; + l.setSelectedIndex(0); + } + + //private interface ListModelI<Type> {} // ?? + + // generic? for configs, fields, & ontols? + private class PhenoteListModel<Type> implements ListModel { + + List<Type> list; + private List<ListDataListener> listeners = new ArrayList<ListDataListener>(); + + private PhenoteListModel(List l) { list = l; } + private PhenoteListModel() { list = new ArrayList(); } + + public Type getElementAt(int index) { return list.get(index); } + private boolean isEmpty() { return list == null || getSize() == 0; } + public int getSize() { return list.size(); } + public void removeListDataListener(ListDataListener l) {} + public void addListDataListener(ListDataListener l) { + listeners.add(l); + } + // i should type this <T>!! + private void add(Type o) { + System.out.println("adding "+o); + list.add(o); + fireChange(); + } + private void fireChange() { + for (ListDataListener l : listeners) + l.contentsChanged(new ListDataEvent(this,ListDataEvent.CONTENTS_CHANGED,0,list.size())); + + } + + private Type get(int i) { return list.get(i); } + //private void setName(int i, String name) { } + } + +} Modified: phenote/trunk/src/java/phenote/gui/GridBagUtil.java =================================================================== --- phenote/trunk/src/java/phenote/gui/GridBagUtil.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/gui/GridBagUtil.java 2007-06-27 13:40:20 UTC (rev 685) @@ -7,6 +7,10 @@ public class GridBagUtil { + public static GridBagConstraints initConstraint() { + return makeConstraint(1,1); + } + public static GridBagConstraints makeConstraint(int x,int y) { return makeConstraint(x,y,3,3,GridBagConstraints.WEST); } Modified: phenote/trunk/src/java/phenote/gui/HelpMenu.java =================================================================== --- phenote/trunk/src/java/phenote/gui/HelpMenu.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/gui/HelpMenu.java 2007-06-27 13:40:20 UTC (rev 685) @@ -9,6 +9,7 @@ import javax.swing.JOptionPane; import javax.swing.ImageIcon; import javax.help.CSH; +import javax.help.HelpBroker; import phenote.dataadapter.CharacterListManager; import phenote.dataadapter.DataAdapterI; @@ -40,10 +41,15 @@ help = new JMenuItem("Phenote Help"); help.setEnabled(Config.inst().hasDataAdapters()); help.setActionCommand("help"); - help.addActionListener(new CSH.DisplayHelpFromSource(HelpManager - .getHelpBroker())); -// help.addActionListener(actionListener); - add(help); + HelpBroker hb = HelpManager.getHelpBroker(); + if (hb == null) { + System.out.println("Unable to retrieve help broker"); + } + else { + help.addActionListener(new CSH.DisplayHelpFromSource(HelpManager.getHelpBroker())); + //help.addActionListener(actionListener); + add(help); + } JMenuItem about = new JMenuItem("About"); about.setEnabled(Config.inst().hasDataAdapters()); Modified: phenote/trunk/src/java/phenote/gui/SettingsMenu.java =================================================================== --- phenote/trunk/src/java/phenote/gui/SettingsMenu.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/gui/SettingsMenu.java 2007-06-27 13:40:20 UTC (rev 685) @@ -77,10 +77,16 @@ addSeparator(); - JMenuItem loadConfig = new JMenuItem("Configuration..."); + JMenuItem loadConfig = new JMenuItem("Set Configuration..."); loadConfig.addActionListener(new ConfigActionListener()); add(loadConfig); + // proto gui config + JMenuItem browseConfig = new JMenuItem("Browse configuration"); + browseConfig.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { new ConfigGui(); } } ); + add(browseConfig); + //not sure if it should be in this menu addSeparator(); showHistory = new JCheckBoxMenuItem("Show History"); Modified: phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java =================================================================== --- phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/gui/field/AbstractAutoCompList.java 2007-06-27 13:40:20 UTC (rev 685) @@ -342,10 +342,12 @@ public JComboBox getJComboBox() { return jComboBox; } private class CompComboBoxModel implements ComboBoxModel { - //private List<CompletionTerm> list; cant do - may also be CompletionRelation! + //private List<CompletionTerm>, cant do - may also be CompletionRelation! private List list; private Object selectedItem; + private CompComboBoxModel(List l) { list = l; } + public Object getSelectedItem() { return selectedItem; } public void setSelectedItem(Object anItem) { selectedItem = anItem; } public void addListDataListener(ListDataListener l) {} Modified: phenote/trunk/src/java/phenote/main/Phenote.java =================================================================== --- phenote/trunk/src/java/phenote/main/Phenote.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/main/Phenote.java 2007-06-27 13:40:20 UTC (rev 685) @@ -78,6 +78,9 @@ phenote = getPhenote(); phenote.splashScreenInit(); //initialize the splash screen; phenote.doCommandLine(args); // does config + + //new phenote.gui.ConfigGui(); // testing out + // put this is in a phenote.util.Log class? - get file from config - default? phenote.splashScreen.setProgress("Configuring...", 10); try { DOMConfigurator.configure(Config.inst().getLogConfigUrl()); } @@ -96,6 +99,7 @@ phenote.initGui(); phenote.splashScreenDestruct(); + } } Modified: phenote/trunk/src/java/phenote/util/FileUtil.java =================================================================== --- phenote/trunk/src/java/phenote/util/FileUtil.java 2007-06-26 13:15:06 UTC (rev 684) +++ phenote/trunk/src/java/phenote/util/FileUtil.java 2007-06-27 13:40:20 UTC (rev 685) @@ -75,6 +75,11 @@ /** split into findMaster?ConfigUrl & findOboUrl!!! */ public static URL findUrl(String filename) throws FileNotFoundException { + if (filename == null) { + String m = "cant find null file"; + LOG.error(m); System.out.println(m); + throw new FileNotFoundException(m); + } List<URL> possibleUrls = getPossibleUrls(filename); for (URL u : possibleUrls) { //System.out.println(u+" url exists "+urlExists(u)); @@ -94,6 +99,11 @@ // split into getPossibleMaster?ConfigUrls & getPossibleOboUrls private static List<URL> getPossibleUrls(String filename) { List<URL> urls = new ArrayList(5); + if (filename == null) { + System.out.println("cant find null file"); + LOG.error("cant find null file"); + return urls; // ?? ex? + } // hmmm - should full path go last? can be problem with running from // jar as config files are in root(fix), obo files finally given dir addFile(filename,urls); // full path or relative to pwd @@ -112,6 +122,11 @@ // make an inner class for this? private static void addFile(String filename,List<URL> urls) { + if (filename == null) { + System.out.println("cant find null file"); + LOG.error("cant find null file"); + return; + } try { URL u = new File(filename).toURL(); if (u != null) urls.add(u); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <oli...@us...> - 2007-06-26 13:15:22
|
Revision: 684 http://svn.sourceforge.net/obo/?rev=684&view=rev Author: olivierarnaiz Date: 2007-06-26 06:15:06 -0700 (Tue, 26 Jun 2007) Log Message: ----------- initial import of parameciumDB config Added Paths: ----------- phenote/trunk/conf/parameciumDB.cfg Added: phenote/trunk/conf/parameciumDB.cfg =================================================================== --- phenote/trunk/conf/parameciumDB.cfg (rev 0) +++ phenote/trunk/conf/parameciumDB.cfg 2007-06-26 13:15:06 UTC (rev 684) @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- *********************** CONFIG INFO ************************** --> +<ns:phenote-configuration version="1.3.1" xmlns:ns="phenote/config/xml" + name="ParameciumDB" + author="ParameciumDB staff" + description="This configuration is for ParameciumDB curators, or others in the Paramecium community for phenotype annotation."> +> + + <!-- *********************** SETTINGS **************************** --> + <ns:master-to-local-config mode="UPDATE" when="ALWAYS" /> + <!-- overriding-master-url="http://paramecium.cgm.cnrs-gif.fr/phenote/paramecium.cfg" />--> + <ns:log config-file="conf/log4j-standalone.xml" /> + + <ns:uvic-graph enable="false"/> + <ns:term-history enable="false"/> + + <ns:auto-update-ontologies enable="true"/> <!--true=update; false=don't update--> + <ns:update-timer timer="0"/><!--set to 0 if you want to bypass the check; time in seconds--> + <ns:autocomplete-settings term="true" synonym="true" definition="false" obsolete="false"/> + + + <!-- ********************* FILE ADAPTERS ************************** --> + <ns:dataadapter name="phenote.dataadapter.delimited.DelimitedFileAdapter" + enable="true"/> + <ns:dataadapter name="phenote.dataadapter.phenosyntax.PhenoSyntaxFileAdapter" + enable="false"/> + <ns:dataadapter name="phenote.dataadapter.phenoxml.PhenoXmlAdapter" enable="false"/> + + + <!-- ******************** FIELD DEFINITIONS *********************** --> + + <ns:field name="Description" syntax-abbrev="Desc"/> + + <ns:field name="Entity" syntax-abbrev="E"> + <ns:ontology name="Paramecium Anatomy" file="http://paramecium.cgm.cnrs-gif.fr/phenote/obo/para.obo"/> + <ns:ontology name="Paramecium Ontology" file="http://paramecium.cgm.cnrs-gif.fr/phenote/obo/paro.obo"/> + <ns:ontology name="Gene Onotology" file="http://paramecium.cgm.cnrs-gif.fr/phenote/obo/go.obo"/> + </ns:field> + + + <ns:field name="Quality" syntax-abbrev="Q"> + <ns:ontology name="Quality" file="http://paramecium.cgm.cnrs-gif.fr/phenote/obo/pato.obo" /> + </ns:field> + + <ns:field name="Assay" syntax-abbrev="A"> + <ns:ontology name="Assay" file="http://paramecium.cgm.cnrs-gif.fr/phenote/obo/pass.obo" /> + </ns:field> + + +</ns:phenote-configuration> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cmu...@us...> - 2007-06-26 00:20:42
|
Revision: 683 http://svn.sourceforge.net/obo/?rev=683&view=rev Author: cmungall Date: 2007-06-25 17:20:44 -0700 (Mon, 25 Jun 2007) Log Message: ----------- Added Paths: ----------- phenote/trunk/conf/go-annotation.cfg Added: phenote/trunk/conf/go-annotation.cfg =================================================================== --- phenote/trunk/conf/go-annotation.cfg (rev 0) +++ phenote/trunk/conf/go-annotation.cfg 2007-06-26 00:20:44 UTC (rev 683) @@ -0,0 +1,45 @@ +<phenote-configuration xmlns="phenote/config/xml"> + + <log config-file="conf/log4j-standalone.xml"/> + + <dataadapter name="phenote.dataadapter.phenosyntax.PhenoSyntaxFileAdapter" enable="true"/> + <dataadapter name="phenote.dataadapter.delimited.DelimitedFileAdapter" enable="true"/> + <dataadapter name="phenote.dataadapter.phenoxml.PhenoXmlAdapter" enable="true"/> + <dataadapter name="phenote.dataadapter.nexus.NEXUSAdapter" enable="false"/> + + <uvic-graph enable="false"/> + <term-history enable="false"/> + + <auto-update-ontologies enable="true"/> <!--true=update; false=don't update--> + <!--set to 0 if you want to bypass the check; time in seconds--> + <update-timer timer="10"/> + + <field name="DB" enable="true"/> + <field name="DB_Object_ID" enable="true"/> + <field name="DB_Object_Symbol" enable="true"/> + <field name="Qualifier" enable="true"/> + <field name="Ontology_ID" enable="true"> + <ontology name="Relationship" is-postcomp-rel="true" + file="http://obofoundry.org/ro/ro.obo"/> + <ontology name="GO" + file="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/genomic-proteomic/gene_ontology.obo"/> + </field> + <field name="Reference" enable="true"/> + <field name="Evidence_Code" enable="true"/> + <field name="With" enable="true"/> + <field name="Aspect" enable="true"/> + <field name="DB_Object_Name" enable="true"/> + <field name="DB_Object_Synonym" enable="true"/> + <field name="DB_Object_Type" enable="true"/> + <field name="taxon" enable="true"/> + <field name="Date" enable="true"/> + <field name="Assigned_by" enable="true"/> + <field name="Properties" enable="true"> + <ontology name="Relationship" is-postcomp-rel="true" + file="http://obofoundry.org/ro/ro.obo"/> + <ontology name="Cell" + file="http://purl.org/obo/obo-all/cell/cell.obo"/> + </field> + + +</phenote-configuration> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nl...@us...> - 2007-06-22 18:29:12
|
Revision: 682 http://svn.sourceforge.net/obo/?rev=682&view=rev Author: nlw Date: 2007-06-22 11:29:13 -0700 (Fri, 22 Jun 2007) Log Message: ----------- *changed the 'introduction to obo ontologies' to say "transitive" instead of "symmetrical". Modified Paths: -------------- phenote/trunk/doc/phenote-website/help/JavaHelpSearch/OFFSETS phenote/trunk/doc/phenote-website/help/JavaHelpSearch/POSITIONS phenote/trunk/doc/phenote-website/help/html/An_Introduction_to_OBO_Ontologies.htm phenote/trunk/doc/phenote-website/help/indexer.log Modified: phenote/trunk/doc/phenote-website/help/JavaHelpSearch/OFFSETS =================================================================== --- phenote/trunk/doc/phenote-website/help/JavaHelpSearch/OFFSETS 2007-06-22 00:30:54 UTC (rev 681) +++ phenote/trunk/doc/phenote-website/help/JavaHelpSearch/OFFSETS 2007-06-22 18:29:13 UTC (rev 682) @@ -1,2 +1,2 @@ \x83\xAC9\xA1\xDBh\xA6mׇ&\x8F*\xBE\xB7E\x93\xF2\xD3%1N\xAAN\xD44-\xB1ɳ*\xA5ip\xA9\xE4\xF2\xE0Eѯ -\xB5L @ \x80 k,c,@R\xEDǦ\xEAB\x82\x82$\xD8\xEB3\xA0Xur!\xB8w\xB9\xAA\xB2\xCE\xF6\x81Zf00\x8Ah# ew\x98\xB7\xECb\xDE`tC\x9An߹\x87\x8E\xBF"\xFCԠ\x88#)\xEA\xEDiI8@\x88\xDA\xA7\xB0\xC2\xCEso\x97_\xCC\xF1\x80\xD6h~0s\x81\x85l:\xD6\xC2\xDF\x8C\x8F\xCEA\x80\xE6\xE1\xEE_ٴ\xA5\xFEy2홍\xA0`\xBBפ \ No newline at end of file +\xB5L @ \x80 k,c0@R\xEDǦ\xEAB\x82\x82$\xD8\xEB3\xA0Xur!\xB8w\xB9\xAA\xB2\xCE\xF6\x81Zf00\x8Ah# ew\x98\xB7\xECb\xDE`tC\x9An߹\x87\x8E\xBF"\xFCԠ\x88#)\xEA\xEDiI8@\x88\xDA\xA7\xB0\xC2\xCEso\x97_\xCC\xF1\x80\xD6h~0s\x81\x85l:\xD6\xC2\xDF\x8C\x8F\xCEA\x80\xE6\xE1\xEE_ٴ\xA5\xFEy2홍\xA0`\xBBפ \ No newline at end of file Modified: phenote/trunk/doc/phenote-website/help/JavaHelpSearch/POSITIONS =================================================================== (Binary files differ) Modified: phenote/trunk/doc/phenote-website/help/html/An_Introduction_to_OBO_Ontologies.htm =================================================================== --- phenote/trunk/doc/phenote-website/help/html/An_Introduction_to_OBO_Ontologies.htm 2007-06-22 00:30:54 UTC (rev 681) +++ phenote/trunk/doc/phenote-website/help/html/An_Introduction_to_OBO_Ontologies.htm 2007-06-22 18:29:13 UTC (rev 682) @@ -83,11 +83,11 @@ relations. If A equals B, B equals A. If A is next to B, B is next to A.</p> <h4>Transitivity<a name="transitivity"></a></h4> <p>A relation is transitive if relationships of this type -remain true across chains of links. If P is a symmetrical relation, and A has +remain true across chains of links. If P is a transitive relation, and A has relationship P to B, and B has relationship P to C, then by definition A has relationship P to C.</p> <p>"Is part of" and "is bigger than" are everyday examples -of symmetrical relations. If A is part of B and B is part of C, A is part of C. +of transitive relations. If A is part of B and B is part of C, A is part of C. If A is bigger than B and B is bigger than C, A is bigger than C.</p> <h4>Cyclicity</h4> <p>If a relation is cyclic, it is legal to create a cycle Modified: phenote/trunk/doc/phenote-website/help/indexer.log =================================================================== --- phenote/trunk/doc/phenote-website/help/indexer.log 2007-06-22 00:30:54 UTC (rev 681) +++ phenote/trunk/doc/phenote-website/help/indexer.log 2007-06-22 18:29:13 UTC (rev 682) @@ -106,4 +106,4 @@ URL: 'html/The__phenote_configuration__Tag.htm' File: 'html/XML_skeleton.htm' URL: 'html/XML_skeleton.htm' - Parse time: 0.841 s + Parse time: 0.921 s This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nl...@us...> - 2007-06-22 00:31:00
|
Revision: 681 http://svn.sourceforge.net/obo/?rev=681&view=rev Author: nlw Date: 2007-06-21 17:30:54 -0700 (Thu, 21 Jun 2007) Log Message: ----------- updates to release notes Modified Paths: -------------- phenote/trunk/doc/phenote-website/phenote-release-notes.html Modified: phenote/trunk/doc/phenote-website/phenote-release-notes.html =================================================================== --- phenote/trunk/doc/phenote-website/phenote-release-notes.html 2007-06-21 00:18:38 UTC (rev 680) +++ phenote/trunk/doc/phenote-website/phenote-release-notes.html 2007-06-22 00:30:54 UTC (rev 681) @@ -14,15 +14,19 @@ <h1>Phenote Release Notes</h1> -<h2>1.4 - </h2> +<h2>1.4 </h2> <h3>version 1.4beta1 - in development</h3> <ul> <li>feature: right-click editing functions for free-text fields in data input frame. right-click copy in table.</li> <li>feature: incorporation of help documentation into Phenote under menu item Help->PhenoteHelp </li> -<li>feature: added plant_grammene.cfg configuration, plus appropriate obo files. +<li>feature: added plant_grammene.cfg configuration, plus appropriate obo files.</li> +<li>feature: navigation bar added to top of term info; buttons to traverse worn paths; term name moved up to top of box [<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1685540&group_id=76834&atid=887913">1685540</a>]</li> +<li>feature: dbxrefs are listed in term info (no external links yet) [<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1739399&group_id=76834&atid=887913">1739399</a>]</li> +<li>change: 'use term' button moved and replaced with checkmark button in navigation bar</li> <li>change: ncbo.cfg changed to always update from master file at url</li> +<li>change: birn2.cfg gene_ontology replaced with gene_ontology_edit.obo reference</li> <li>change: Windows splash screen text edited from 'biomedial' to 'biomedical'</li> </ul> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nl...@us...> - 2007-06-21 00:18:35
|
Revision: 680 http://svn.sourceforge.net/obo/?rev=680&view=rev Author: nlw Date: 2007-06-20 17:18:38 -0700 (Wed, 20 Jun 2007) Log Message: ----------- 1.4beta1 Modified Paths: -------------- phenote/trunk/build.xml phenote/trunk/src/java/phenote/main/PhenoteVersion.java Modified: phenote/trunk/build.xml =================================================================== --- phenote/trunk/build.xml 2007-06-20 22:31:10 UTC (rev 679) +++ phenote/trunk/build.xml 2007-06-21 00:18:38 UTC (rev 680) @@ -194,6 +194,7 @@ <fileset dir="${classfiles}"/> <fileset file="${obo}/*.obo"/> <fileset file="${conf}/*.cfg"/> + <fileset dir="${images}"/> </jar> </target> @@ -204,6 +205,7 @@ <fileset dir="${classfiles}"/> <fileset dir="." includes="obo-files/" excludes="obo-files/old"/> <fileset file="${conf}/*.cfg"/> + <fileset dir="${images}"/> </jar> </target> @@ -214,6 +216,7 @@ <fileset dir="${classfiles}"/> <fileset dir="." includes="obo-files/" excludes="obo-files/old,obo-files/fma_obo.obo,obo-files/gene_ontology.obo,obo-files/chebi.obo" /> <fileset file="${conf}/*.cfg"/> + <fileset dir="${images}"/> </jar> </target> @@ -365,6 +368,7 @@ </lib> <classes dir="${obo}" /> <classes dir="${conf}" /> + <classes dir="${images}" /> </war> </target> @@ -396,7 +400,7 @@ <!-- todo do all jars not just phenote - take out -signed --> <!-- depends on sym link phenote-webstart and env var PHENOTE_VERSION --> - <!-- target name="build-webstart" depends="build-sign-jars,webstart"/ --> + <!--target name="build-webstart" depends="build-sign-jars,webstart"/--> <target name="build-webstart" depends="build-all,jar,webstart"/> <!-- target name="build-sign-jars" depends="build-all,jar,sign-jars"/ --> @@ -416,8 +420,6 @@ <!-- need to test if PHENOTE_VERSION is defined - possible?? --> <target name="webstart" depends="webstart-jars,webstart-webpages,copy-jnlps"/> - - <target name="webstart-jars" depends="build-all,jar,copy-webstart-jars,sign-webstart-jars"/> Modified: phenote/trunk/src/java/phenote/main/PhenoteVersion.java =================================================================== --- phenote/trunk/src/java/phenote/main/PhenoteVersion.java 2007-06-20 22:31:10 UTC (rev 679) +++ phenote/trunk/src/java/phenote/main/PhenoteVersion.java 2007-06-21 00:18:38 UTC (rev 680) @@ -9,7 +9,7 @@ //private static final float MAJOR_VERSION_NUM = 0.8f; //private static final float SUB_VERSION_NUM = .3f; - private static final String VERSION = "1.3 release"; // ?? + private static final String VERSION = "1.4-beta1"; // ?? // type is "dev" or "release" //private static final String type = " dev"; // "release" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nl...@us...> - 2007-06-20 22:31:38
|
Revision: 679 http://svn.sourceforge.net/obo/?rev=679&view=rev Author: nlw Date: 2007-06-20 15:31:10 -0700 (Wed, 20 Jun 2007) Log Message: ----------- changing icon dirs Modified Paths: -------------- phenote/trunk/src/java/phenote/gui/TermInfo.java phenote/trunk/src/java/phenote/main/Phenote.java Modified: phenote/trunk/src/java/phenote/gui/TermInfo.java =================================================================== --- phenote/trunk/src/java/phenote/gui/TermInfo.java 2007-06-20 21:57:51 UTC (rev 678) +++ phenote/trunk/src/java/phenote/gui/TermInfo.java 2007-06-20 22:31:10 UTC (rev 679) @@ -95,20 +95,20 @@ termInfoPanel.setBorder(BorderFactory.createTitledBorder("Term Info")); termInfoPanel.add(scrollPane,BorderLayout.CENTER); //Layout doesn't look good right now. Will fix - ImageIcon ok = new ImageIcon("OK.GIF"); + ImageIcon ok = new ImageIcon("images/OK.GIF"); useTermButton = new JButton(ok); // JButton useTermButton = new JButton("Use Term"); useTermButton.addActionListener(new UseTermActionListener()); useTermButton.setPreferredSize(new Dimension(BUTTON_HEIGHT, BUTTON_HEIGHT)); useTermButton.setMinimumSize(new Dimension(BUTTON_HEIGHT, BUTTON_HEIGHT)); useTermButton.setToolTipText("Use Term"); - ImageIcon back = new ImageIcon("arrow.small.left.gif"); + ImageIcon back = new ImageIcon("images/arrow.small.left.gif"); JButton backButton = new JButton(back); backButton.setToolTipText("Go back a term"); backButton.setPreferredSize(new Dimension(BUTTON_HEIGHT, BUTTON_HEIGHT)); backButton.setMinimumSize(new Dimension(BUTTON_HEIGHT, BUTTON_HEIGHT)); backButton.setMaximumSize(new Dimension(BUTTON_HEIGHT, BUTTON_HEIGHT)); - ImageIcon forward = new ImageIcon("arrow.small.right.gif"); + ImageIcon forward = new ImageIcon("images/arrow.small.right.gif"); JButton forwardButton = new JButton(forward); forwardButton.setToolTipText("Go forward a term"); forwardButton.setPreferredSize(new Dimension(BUTTON_HEIGHT, BUTTON_HEIGHT)); Modified: phenote/trunk/src/java/phenote/main/Phenote.java =================================================================== --- phenote/trunk/src/java/phenote/main/Phenote.java 2007-06-20 21:57:51 UTC (rev 678) +++ phenote/trunk/src/java/phenote/main/Phenote.java 2007-06-20 22:31:10 UTC (rev 679) @@ -52,7 +52,7 @@ private CommandLine commandLine = CommandLine.inst(); private JFrame frame; public SplashScreen splashScreen; - private String logoFile = "src/java/phenote/images/phenote_logo.jpg"; + private String logoFile = "images/phenote_logo.jpg"; // public static Keymap defaultKeymap; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |