Skip to content
Snippets Groups Projects
Commit 0898f022 authored by tjc's avatar tjc
Browse files

add qualifier options and change layout

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@10198 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent 413f7995
No related branches found
No related tags found
No related merge requests found
......@@ -24,22 +24,32 @@
package uk.ac.sanger.artemis.components;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import uk.ac.sanger.artemis.Entry;
import uk.ac.sanger.artemis.EntryGroup;
......@@ -72,6 +82,7 @@ class TransferAnnotationTool extends JFrame
"isObsolete",
"timelastmodified",
"cytoplasm_location",
"membrane_structure",
"non_cytoplasm_location",
"orthologous_to",
"paralogous_to",
......@@ -84,6 +95,8 @@ class TransferAnnotationTool extends JFrame
"transmembrane",
"previous_systematic_id"
};
private static org.apache.log4j.Logger logger4j =
org.apache.log4j.Logger.getLogger(TransferAnnotationTool.class);
public TransferAnnotationTool(final Feature feature,
final EntryGroup entryGroup,
......@@ -92,27 +105,38 @@ class TransferAnnotationTool extends JFrame
super("Transfer Annotation Tool :: "
+ feature.getIDString());
JPanel pane = (JPanel) getContentPane();
pane.setLayout(new GridBagLayout());
FlowLayout flow = new FlowLayout(FlowLayout.LEFT);
JPanel panel = new JPanel(flow);
JPanel pane = new JPanel(new GridBagLayout());
JScrollPane jsp = new JScrollPane(panel);
panel.add(pane);
JPanel framePanel = (JPanel)getContentPane();
framePanel.add(jsp, BorderLayout.CENTER);
framePanel.setPreferredSize(new Dimension(600,600));
GridBagConstraints c = new GridBagConstraints();
int nrows = 0;
c.gridx = 0;
c.anchor = GridBagConstraints.NORTHWEST;
c.gridx = 2;
c.gridy = 0;
JLabel geneLabel = new JLabel(feature.getIDString() + " Qualifiers");
geneLabel.setFont(geneLabel.getFont().deriveFont(Font.BOLD));
pane.add(geneLabel, c);
c.gridx = 1;
c.gridx = 0;
JLabel label = new JLabel("Gene List");
label.setFont(label.getFont().deriveFont(Font.BOLD));
pane.add(label, c);
c.gridx = 0;
c.gridy = ++nrows;
c.gridy = ++nrows;
c.anchor = GridBagConstraints.WEST;
final Vector qualifierCheckBoxes = new Vector();
final Hashtable qualifierCheckBoxes = new Hashtable();
final QualifierVector qualifiers = feature.getQualifiers();
for(int i = 0; i < qualifiers.size(); i++)
{
......@@ -121,65 +145,107 @@ class TransferAnnotationTool extends JFrame
if(isNonTransferable(qualifier.getName()))
continue;
JCheckBox checkBox = new JCheckBox(qualifier.getName(), false);
pane.add(checkBox, c);
qualifierCheckBoxes.add(checkBox);
c.gridy = ++nrows;
final JCheckBox qualifierNameCheckBox = new JCheckBox(qualifier.getName(), false);
c.gridx = 1;
Box qualifierValueBox = Box.createVerticalBox();
JButton detailsShowHide = new JButton("+");
final Vector qualifierValuesCheckBox = setExpanderButton(detailsShowHide,
qualifier, qualifierValueBox, qualifierNameCheckBox, pane);
qualifierNameCheckBox.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
for(int i=0; i<qualifierValuesCheckBox.size(); i++)
{
JCheckBox cb = (JCheckBox) qualifierValuesCheckBox.get(i);
cb.setSelected(qualifierNameCheckBox.isSelected());
}
}
});
pane.add(detailsShowHide, c);
c.gridx = 2;
pane.add(qualifierNameCheckBox, c);
qualifierCheckBoxes.put(qualifierNameCheckBox, qualifierValuesCheckBox);
c.gridy = ++nrows;
pane.add(qualifierValueBox, c);
c.gridy = ++nrows;
}
c.gridx = 1;
c.gridy = 1;
c.gridx = 0;
c.gridy = 2;
c.gridheight = nrows;
c.fill = GridBagConstraints.BOTH;
final JTextArea geneNameTextArea = new JTextArea("gene1");
geneNameTextArea.setEditable(true);
pane.add(geneNameTextArea, c);
final Vector geneNameCheckBoxes = new Vector();
final Box geneNameBox = Box.createVerticalBox();
pane.add(geneNameBox, c);
if(geneNames != null)
{
geneNameTextArea.setText("");
for(int i = 0; i < geneNames.size(); i++)
{
geneNameTextArea.append((String) geneNames.get(i)+"\n");
JCheckBox cb = new JCheckBox((String) geneNames.get(i),true);
geneNameBox.add(cb);
geneNameCheckBoxes.add(cb);
}
}
c.gridy = ++nrows;
c.gridy = 1;
c.gridheight = 1;
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
final JButton toggle = new JButton("Toggle Selection");
c.gridx = 2;
final JButton toggle = new JButton("Toggle");
toggle.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i < qualifierCheckBoxes.size(); i++)
Enumeration enumQualifiers = qualifierCheckBoxes.keys();
while(enumQualifiers.hasMoreElements())
{
JCheckBox cb = (JCheckBox) qualifierCheckBoxes.get(i);
JCheckBox cb = (JCheckBox) enumQualifiers.nextElement();
cb.setSelected(!cb.isSelected());
}
}
});
pane.add(toggle, c);
final JButton toggleGeneList = new JButton("Toggle");
toggleGeneList.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i < geneNameCheckBoxes.size(); i++)
{
JCheckBox cb = (JCheckBox) geneNameCheckBoxes.get(i);
cb.setSelected(!cb.isSelected());
}
}
});
c.gridx = 0;
pane.add(toggleGeneList, c);
final JCheckBox sameKeyCheckBox = new JCheckBox("Add to feature of same key", true);
Box buttonBox = Box.createHorizontalBox();
final JButton transfer = new JButton(">>TRANSFER");
transfer.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
transferAnnotation(qualifierCheckBoxes, geneNameTextArea, feature,
transferAnnotation(qualifierCheckBoxes, geneNameCheckBoxes, feature,
entryGroup, sameKeyCheckBox.isSelected());
}
});
c.gridx = 1;
pane.add(transfer, c);
c.gridy = ++nrows;
c.gridx = 1;
pane.add(sameKeyCheckBox, c);
Box yBox = Box.createVerticalBox();
yBox.add(transfer);
yBox.add(sameKeyCheckBox);
buttonBox.add(yBox);
final JButton close = new JButton("CLOSE");
close.addActionListener(new ActionListener()
......@@ -189,12 +255,61 @@ class TransferAnnotationTool extends JFrame
dispose();
}
});
c.gridy = ++nrows;
pane.add(close, c);
yBox = Box.createVerticalBox();
yBox.add(close);
yBox.add(Box.createVerticalGlue());
buttonBox.add(yBox);
buttonBox.add(Box.createHorizontalGlue());
framePanel.add(buttonBox, BorderLayout.SOUTH);
pack();
setVisible(true);
}
private Vector setExpanderButton(final JButton butt,
final Qualifier qualifier,
final Box qualifierValueBox,
final JCheckBox qualifierNameCheckBox,
final JPanel pane)
{
butt.setMargin(new Insets(0,0,0,0));
butt.setHorizontalAlignment(SwingConstants.RIGHT);
butt.setBorderPainted(false);
butt.setFont(new Font("SansSerif", Font.BOLD, 11));
butt.setPreferredSize(new Dimension(butt.getPreferredSize().width,11));
butt.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(butt.getText().equals("+"))
{
butt.setText("-");
qualifierValueBox.setVisible(true);
}
else
{
butt.setText("+");
qualifierValueBox.setVisible(false);
}
pane.revalidate();
}
});
// set-up qualifier values list
qualifierValueBox.setVisible(false);
Vector qualifierValuesCheckBox = new Vector();
StringVector values = qualifier.getValues();
for(int i=0; i<values.size(); i++)
{
JCheckBox cb = new JCheckBox((String)values.get(i),
qualifierNameCheckBox.isSelected());
qualifierValueBox.add(cb);
qualifierValuesCheckBox.add(cb);
}
return qualifierValuesCheckBox;
}
/**
* Returns true if this qualifier is non-transferable
* @param qualifierName
......@@ -218,8 +333,8 @@ class TransferAnnotationTool extends JFrame
* @param feature - feature to copy from
* @param entryGroup
*/
private void transferAnnotation(final Vector qualifierCheckBoxes,
final JTextArea geneNameTextArea,
private void transferAnnotation(final Hashtable qualifierCheckBoxes,
final Vector geneNameCheckBoxes,
final Feature orginatingFeature,
final EntryGroup entryGroup,
final boolean sameKey)
......@@ -228,17 +343,63 @@ class TransferAnnotationTool extends JFrame
// transfer selected annotation to genes
final QualifierVector qualifiers = orginatingFeature.getQualifiers();
final QualifierVector qualifiersToTransfer = new QualifierVector();
for(int i = 0; i < qualifierCheckBoxes.size(); i++)
Enumeration enumQualifiers = qualifierCheckBoxes.keys();
while(enumQualifiers.hasMoreElements())
{
JCheckBox cb = (JCheckBox) qualifierCheckBoxes.get(i);
JCheckBox cb = (JCheckBox) enumQualifiers.nextElement();
if (cb.isSelected())
{
qualifiersToTransfer.addElement(
qualifiers.getQualifierByName(cb.getText()).copy());
Vector qualifierValuesCheckBox = (Vector)qualifierCheckBoxes.get(cb);
StringVector values = qualifiers.getQualifierByName(cb.getText()).getValues();
StringVector valuesToTransfer = new StringVector(values);
logger4j.debug("TRANSFER "+cb.getText());
for(int i=0; i<qualifierValuesCheckBox.size(); i++)
{
JCheckBox valuesCb = (JCheckBox) qualifierValuesCheckBox.get(i);
if(!valuesCb.isSelected())
{
valuesToTransfer.remove(valuesCb.getText());
logger4j.debug("NOT TRANSFERING "+valuesCb.getText());
}
}
String geneNames[] = geneNameTextArea.getText().split("\\s");
if(valuesToTransfer.size() < 1)
continue;
qualifiersToTransfer.addElement(new Qualifier(cb.getText(), valuesToTransfer));
}
}
int count = 0;
for(int i =0; i<geneNameCheckBoxes.size(); i++)
{
if( ((JCheckBox)geneNameCheckBoxes.get(i)).isSelected() )
count++;
}
if(count < 1)
{
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
JOptionPane.showMessageDialog(this,
"No genes selected.",
"Warning", JOptionPane.WARNING_MESSAGE);
return;
}
String geneNames[] = new String[count];
count = 0;
for(int i =0; i<geneNameCheckBoxes.size(); i++)
{
JCheckBox cb = (JCheckBox)geneNameCheckBoxes.get(i);
if( cb.isSelected() )
{
geneNames[count] = cb.getText();
logger4j.debug("TRANSFER ANNOTATION TO "+geneNames[count]);
count++;
}
}
//geneNameTextArea.getText().split("\\s");
final String key = orginatingFeature.getKey().getKeyString();
final FeatureVector features = entryGroup.getAllFeatures();
......@@ -259,8 +420,8 @@ class TransferAnnotationTool extends JFrame
for (int i = 0; i < geneNames.length; i++)
{
DatabaseDocumentEntry newDbEntry =
GeneEdit.makeGeneEntry(null, geneNames[i], doc, null);
DatabaseDocumentEntry newDbEntry = GeneEdit.makeGeneEntry(null,
geneNames[i], doc, null);
if (newDbEntry == null)
{
......@@ -278,7 +439,10 @@ class TransferAnnotationTool extends JFrame
{
entry = new Entry(newDbEntry);
}
catch(Exception e) { e.printStackTrace(); }
catch (Exception e)
{
e.printStackTrace();
}
SimpleEntryGroup entry_group = new SimpleEntryGroup();
entry_group.addElement(entry);
......@@ -288,10 +452,10 @@ class TransferAnnotationTool extends JFrame
entry_group.addEntryChangeListener(ctm);
ctm.setEntryGroup(entry_group);
transfer(entry.getAllFeatures(), qualifiersToTransfer, key,
sameKey, true, geneNames);
ChadoTransactionManager.commit(
(DatabaseDocument)newDbEntry.getDocument(), false, ctm);
transfer(entry.getAllFeatures(), qualifiersToTransfer, key, sameKey,
true, geneNames);
ChadoTransactionManager.commit((DatabaseDocument) newDbEntry
.getDocument(), false, ctm);
entry_group.removeFeatureChangeListener(ctm);
entry_group.removeEntryChangeListener(ctm);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment