X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FAnnotationLabels.java;h=445ee11e675f90e28f11df608866c9507070161d;hb=ad48d68e5790a0fa55e947b9ab9bb4eb5ca716ca;hp=61b9c31a3d3643f1094395f49a09cf2f3f2f4d4c;hpb=be5a6a44e9eb355110f3b414d6b0fd5419f5936c;p=jalview.git
diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java
index 61b9c31..445ee11 100755
--- a/src/jalview/gui/AnnotationLabels.java
+++ b/src/jalview/gui/AnnotationLabels.java
@@ -1,33 +1,66 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
- * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * along with Jalview. If not, see
");
- }
- if (aa.hasScore())
+ if (aa[selectedRow].sequenceRef != null)
{
- desc.append("Score: " + aa.score);
- }
-
- if (desc.length() != 6)
- {
- desc.append("");
- this.setToolTipText(desc.toString());
- }
- else
- this.setToolTipText(null);
- }
-
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param evt
- * DOCUMENT ME!
- */
- public void mouseClicked(MouseEvent evt)
- {
- AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
- if (SwingUtilities.isLeftMouseButton(evt))
- {
- if (selectedRow < aa.length)
+ final String label = aa[selectedRow].label;
+ JMenuItem hideType = new JMenuItem();
+ String text = MessageManager.getString("label.hide_all") + " "
+ + label;
+ hideType.setText(text);
+ hideType.addActionListener(new ActionListener()
{
- if (aa[selectedRow].groupRef!=null)
- {
- if (evt.getClickCount()>=2)
- {
- // todo: make the ap scroll to the selection
- ap.seqPanel.ap.idPanel.highlightSearchResults(null);
- ap.av.setSelectionGroup(//new SequenceGroup(
- aa[selectedRow].groupRef); // );
- ap.paintAlignment(false);
- } else {
- ap.seqPanel.ap.idPanel.highlightSearchResults(aa[selectedRow].groupRef.getSequences(null));
- }
- return;
- } else
- if (aa[selectedRow].sequenceRef!=null){
- Vector sr = new Vector();
- sr.addElement(aa[selectedRow].sequenceRef);
- if (evt.getClickCount()==1)
- {
- ap.seqPanel.ap.idPanel.highlightSearchResults(sr);
- } else
- if (evt.getClickCount()>=2)
+ @Override
+ public void actionPerformed(ActionEvent e)
{
- ap.seqPanel.ap.idPanel.highlightSearchResults(null);
- SequenceGroup sg = new SequenceGroup();
- sg.addSequence(aa[selectedRow].sequenceRef,false);
- ap.av.setSelectionGroup(sg);
- ap.paintAlignment(false);
- PaintRefresher.Refresh(ap, ap.av.getSequenceSetId());
+ AlignmentUtils.showOrHideSequenceAnnotations(
+ ap.av.getAlignment(), Collections.singleton(label),
+ null, false, false);
+ // for (AlignmentAnnotation ann : ap.av.getAlignment()
+ // .getAlignmentAnnotation())
+ // {
+ // if (ann.sequenceRef != null && ann.label != null
+ // && ann.label.equals(label))
+ // {
+ // ann.visible = false;
+ // }
+ // }
+ ap.refresh(true);
}
-
- }
+ });
+ pop.add(hideType);
}
}
- if (!SwingUtilities.isRightMouseButton(evt))
- {
- return;
- }
-
-
- JPopupMenu pop = new JPopupMenu("Annotations");
- JMenuItem item = new JMenuItem(ADDNEW);
+ item = new JMenuItem(DELETE);
item.addActionListener(this);
-
- if ((aa == null) || (aa.length == 0))
+ pop.add(item);
+ if (hasHiddenRows)
{
item = new JMenuItem(SHOWALL);
item.addActionListener(this);
pop.add(item);
- pop.show(this, evt.getX(), evt.getY());
- return;
}
-
- pop.add(item);
- item = new JMenuItem(EDITNAME);
- item.addActionListener(this);
- pop.add(item);
- item = new JMenuItem(HIDE);
- item.addActionListener(this);
- pop.add(item);
- item = new JMenuItem(DELETE);
- item.addActionListener(this);
- pop.add(item);
- item = new JMenuItem(SHOWALL);
- item.addActionListener(this);
- pop.add(item);
item = new JMenuItem(OUTPUT_TEXT);
item.addActionListener(this);
pop.add(item);
- // TODO: annotation object should be typed for autocalculated/derived property methods
+ // TODO: annotation object should be typed for autocalculated/derived
+ // property methods
if (selectedRow < aa.length)
{
- if (!aa[selectedRow].autoCalculated) {
- if (aa[selectedRow].graph==AlignmentAnnotation.NO_GRAPH)
+ final String label = aa[selectedRow].label;
+ if (!(aa[selectedRow].autoCalculated
+ || label.indexOf("Information Content") > -1))
+ {
+ if (aa[selectedRow].graph == AlignmentAnnotation.NO_GRAPH)
{
// display formatting settings for this row.
pop.addSeparator();
// av and sequencegroup need to implement same interface for
item = new JCheckBoxMenuItem(TOGGLE_LABELSCALE,
- aa[selectedRow].scaleColLabel);
+ aa[selectedRow].scaleColLabel);
item.addActionListener(this);
pop.add(item);
}
}
- else if (aa[selectedRow].label.indexOf("Consensus") > -1)
+ else if (label.indexOf("Consensus") > -1)
{
+
+
pop.addSeparator();
// av and sequencegroup need to implement same interface for
+ final AlignmentAnnotation aaa = aa[selectedRow];
+
final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(
- "Ignore Gaps In Consensus",
+ MessageManager.getString("label.ignore_gaps_consensus"),
(aa[selectedRow].groupRef != null) ? aa[selectedRow].groupRef
- .getIgnoreGapsConsensus()
- : ap.av.getIgnoreGapsConsensus());
- final AlignmentAnnotation aaa = aa[selectedRow];
+ .getIgnoreGapsConsensus() : ap.av
+ .isIgnoreGapsConsensus());
+
cbmi.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
if (aaa.groupRef != null)
{
- // TODO: pass on reference to ap so the view can be updated.
- aaa.groupRef.setIgnoreGapsConsensus(cbmi.getState());
- ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ // TODO: pass on reference to ap so the view can be updated.
+ aaa.groupRef.setIgnoreGapsConsensus(cbmi.getState());
+ ap.getAnnotationPanel().paint(
+ ap.getAnnotationPanel().getGraphics());
}
else
{
ap.av.setIgnoreGapsConsensus(cbmi.getState(), ap);
}
+ ap.alignmentChanged();
}
});
pop.add(cbmi);
@@ -545,10 +474,11 @@ public class AnnotationLabels extends JPanel implements MouseListener,
if (aaa.groupRef != null)
{
final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
- "Show Group Histogram", aa[selectedRow].groupRef
- .isShowConsensusHistogram());
+ MessageManager.getString("label.show_group_histogram"),
+ aa[selectedRow].groupRef.isShowConsensusHistogram());
chist.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
// TODO: pass on reference
@@ -563,11 +493,12 @@ public class AnnotationLabels extends JPanel implements MouseListener,
}
});
pop.add(chist);
- final JCheckBoxMenuItem cprof = new JCheckBoxMenuItem(
- "Show Group Logo", aa[selectedRow].groupRef
- .isIncludeAllConsSymbols());
- cprof.addActionListener(new ActionListener()
+ final JCheckBoxMenuItem cprofl = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_group_logo"),
+ aa[selectedRow].groupRef.isShowSequenceLogo());
+ cprofl.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
// TODO: pass on reference
@@ -576,17 +507,44 @@ public class AnnotationLabels extends JPanel implements MouseListener,
// view
// can be
// updated.
- aaa.groupRef.setIncludeAllConsSymbols(cprof.getState());
+ aaa.groupRef.setshowSequenceLogo(cprofl.getState());
ap.repaint();
// ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
}
});
- pop.add(cprof);
- } else {
+ pop.add(cprofl);
+ final JCheckBoxMenuItem cproflnorm = new JCheckBoxMenuItem(
+ MessageManager.getString("label.normalise_group_logo"),
+ aa[selectedRow].groupRef.isNormaliseSequenceLogo());
+ cproflnorm.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef.setNormaliseSequenceLogo(cproflnorm.getState());
+ // automatically enable logo display if we're clicked
+ aaa.groupRef.setshowSequenceLogo(true);
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cproflnorm);
+ }
+ else
+ {
final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
- "Show Histogram", av.isShowConsensusHistogram());
+ MessageManager.getString("label.show_histogram"),
+ av.isShowConsensusHistogram());
chist.addActionListener(new ActionListener()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
// TODO: pass on reference
@@ -596,15 +554,39 @@ public class AnnotationLabels extends JPanel implements MouseListener,
// can be
// updated.
av.setShowConsensusHistogram(chist.getState());
+ ap.alignFrame.setMenusForViewport();
ap.repaint();
// ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
}
});
pop.add(chist);
final JCheckBoxMenuItem cprof = new JCheckBoxMenuItem(
- "Show Logo", av.isShowConsensusProfile());
+ MessageManager.getString("label.show_logo"),
+ av.isShowSequenceLogo());
cprof.addActionListener(new ActionListener()
{
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowSequenceLogo(cprof.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprof);
+ final JCheckBoxMenuItem cprofnorm = new JCheckBoxMenuItem(
+ MessageManager.getString("label.normalise_logo"),
+ av.isNormaliseSequenceLogo());
+ cprofnorm.addActionListener(new ActionListener()
+ {
+ @Override
public void actionPerformed(ActionEvent e)
{
// TODO: pass on reference
@@ -613,72 +595,571 @@ public class AnnotationLabels extends JPanel implements MouseListener,
// view
// can be
// updated.
- av.setShowConsensusProfile(cprof.getState());
+ av.setShowSequenceLogo(true);
+ av.setNormaliseSequenceLogo(cprofnorm.getState());
+ ap.alignFrame.setMenusForViewport();
ap.repaint();
// ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
}
});
- pop.add(cprof);
+ pop.add(cprofnorm);
}
final JMenuItem consclipbrd = new JMenuItem(COPYCONS_SEQ);
consclipbrd.addActionListener(this);
pop.add(consclipbrd);
}
- }
- pop.show(this, evt.getX(), evt.getY());
- }
-
- /**
- * do a single sequence copy to jalview and the system clipboard
- *
- * @param sq
- * sequence to be copied to clipboard
- */
- protected void copy_annotseqtoclipboard(SequenceI sq)
- {
- SequenceI[] seqs = new SequenceI[]
- { sq };
- String[] omitHidden = null;
- SequenceI[] dseqs = new SequenceI[]
- { sq.getDatasetSequence() };
- if (dseqs[0] == null)
- {
- dseqs[0] = new Sequence(sq);
- dseqs[0].setSequence(jalview.analysis.AlignSeq.extractGaps(
- jalview.util.Comparison.GapChars, sq.getSequenceAsString()));
-
- sq.setDatasetSequence(dseqs[0]);
- }
- Alignment ds = new Alignment(dseqs);
- if (av.hasHiddenColumns)
- {
- omitHidden = av.getColumnSelection().getVisibleSequenceStrings(0,
- sq.getLength(), seqs);
- }
-
- String output = new FormatAdapter().formatSequences("Fasta", seqs,
- omitHidden);
-
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
- new StringSelection(output), Desktop.instance);
-
- Vector hiddenColumns = null;
- if (av.hasHiddenColumns)
- {
- hiddenColumns = new Vector();
- for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size(); i++)
+ else if (label.indexOf("Information Content") > -1) // TODO create labels
+ // in message resource
+ // for these
{
- int[] region = (int[]) av.getColumnSelection().getHiddenColumns()
- .elementAt(i);
+ pop.addSeparator();
+ final AlignmentAnnotation aaa = aa[selectedRow];
- hiddenColumns.addElement(new int[]
- { region[0], region[1] });
- }
+ final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(
+ "Ignore Below Background Frequency",
+ (aa[selectedRow].groupRef != null)
+ ? aa[selectedRow].groupRef
+ .getIgnoreBelowBackground()
+ : ap.av.isIgnoreBelowBackground());
+
+ cbmi.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (aaa.groupRef != null)
+ {
+ // TODO: pass on reference to ap so the view can be updated.
+ aaa.groupRef.setIgnoreBelowBackground(cbmi.getState());
+ ap.getAnnotationPanel()
+ .paint(ap.getAnnotationPanel().getGraphics());
+ }
+ else
+ {
+ ap.av.setIgnoreBelowBackground(cbmi.getState(), ap);
+ }
+ ap.alignmentChanged();
+ }
+ });
+ pop.add(cbmi);
+ if (aaa.groupRef != null)
+ {
+ final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_group_histogram"),
+ aa[selectedRow].groupRef.isShowInformationHistogram());
+ chist.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef.setShowInformationHistogram(chist.getState());
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(chist);
+ final JCheckBoxMenuItem cprofl = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_group_logo"),
+ aa[selectedRow].groupRef.isShowHMMSequenceLogo());
+ cprofl.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef.setshowHMMSequenceLogo(cprofl.getState());
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprofl);
+ final JCheckBoxMenuItem cproflnorm = new JCheckBoxMenuItem(
+ MessageManager.getString("label.normalise_group_logo"),
+ aa[selectedRow].groupRef.isNormaliseHMMSequenceLogo());
+ cproflnorm.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ aaa.groupRef
+ .setNormaliseHMMSequenceLogo(cproflnorm.getState());
+ // automatically enable logo display if we're clicked
+ aaa.groupRef.setshowHMMSequenceLogo(true);
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cproflnorm);
+ }
+ else
+ {
+ final JCheckBoxMenuItem chist = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_histogram"),
+ av.isShowInformationHistogram());
+ chist.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowInformationHistogram(chist.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(chist);
+ final JCheckBoxMenuItem cprof = new JCheckBoxMenuItem(
+ MessageManager.getString("label.show_logo"),
+ av.isShowHMMSequenceLogo());
+ cprof.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowHMMSequenceLogo(cprof.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprof);
+ final JCheckBoxMenuItem cprofnorm = new JCheckBoxMenuItem(
+ MessageManager.getString("label.normalise_logo"),
+ av.isNormaliseHMMSequenceLogo());
+ cprofnorm.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: pass on reference
+ // to ap
+ // so the
+ // view
+ // can be
+ // updated.
+ av.setShowHMMSequenceLogo(true);
+ av.setNormaliseHMMSequenceLogo(cprofnorm.getState());
+ ap.alignFrame.setMenusForViewport();
+ ap.repaint();
+ // ap.annotationPanel.paint(ap.annotationPanel.getGraphics());
+ }
+ });
+ pop.add(cprofnorm);
+ }
+ final JMenuItem consclipbrd = new JMenuItem(COPYCONS_SEQ);
+ consclipbrd.addActionListener(this);
+ pop.add(consclipbrd);
+ }
+ }
+ pop.show(this, evt.getX(), evt.getY());
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt
+ * DOCUMENT ME!
+ */
+ @Override
+ public void mouseReleased(MouseEvent evt)
+ {
+ if (evt.isPopupTrigger())
+ {
+ showPopupMenu(evt);
+ return;
+ }
+
+ int start = selectedRow;
+ getSelectedRow(evt.getY() - getScrollOffset());
+ int end = selectedRow;
+
+ if (start != end)
+ {
+ // Swap these annotations
+ AlignmentAnnotation startAA = ap.av.getAlignment()
+ .getAlignmentAnnotation()[start];
+ if (end == -1)
+ {
+ end = ap.av.getAlignment().getAlignmentAnnotation().length - 1;
+ }
+ AlignmentAnnotation endAA = ap.av.getAlignment()
+ .getAlignmentAnnotation()[end];
+
+ ap.av.getAlignment().getAlignmentAnnotation()[end] = startAA;
+ ap.av.getAlignment().getAlignmentAnnotation()[start] = endAA;
+ }
+
+ resizePanel = false;
+ dragEvent = null;
+ repaint();
+ ap.getAnnotationPanel().repaint();
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt
+ * DOCUMENT ME!
+ */
+ @Override
+ public void mouseEntered(MouseEvent evt)
+ {
+ if (evt.getY() < 10)
+ {
+ resizePanel = true;
+ repaint();
+ }
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt
+ * DOCUMENT ME!
+ */
+ @Override
+ public void mouseExited(MouseEvent evt)
+ {
+ if (dragEvent == null)
+ {
+ resizePanel = false;
+ repaint();
+ }
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt
+ * DOCUMENT ME!
+ */
+ @Override
+ public void mouseDragged(MouseEvent evt)
+ {
+ dragEvent = evt;
+
+ if (resizePanel)
+ {
+ Dimension d = ap.annotationScroller.getPreferredSize();
+ int dif = evt.getY() - oldY;
+
+ dif /= ap.av.getCharHeight();
+ dif *= ap.av.getCharHeight();
+
+ if ((d.height - dif) > 20)
+ {
+ ap.annotationScroller.setPreferredSize(new Dimension(d.width,
+ d.height - dif));
+ d = ap.annotationSpaceFillerHolder.getPreferredSize();
+ ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(
+ d.width, d.height - dif));
+ ap.paintAlignment(true);
+ }
+
+ ap.addNotify();
+ }
+ else
+ {
+ repaint();
+ }
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt
+ * DOCUMENT ME!
+ */
+ @Override
+ public void mouseMoved(MouseEvent evt)
+ {
+ resizePanel = evt.getY() < 10;
+
+ getSelectedRow(evt.getY() - getScrollOffset());
+
+ if (selectedRow > -1
+ && ap.av.getAlignment().getAlignmentAnnotation().length > selectedRow)
+ {
+ AlignmentAnnotation aa = ap.av.getAlignment()
+ .getAlignmentAnnotation()[selectedRow];
+
+ StringBuffer desc = new StringBuffer();
+ if (aa.description != null
+ && !aa.description.equals("New description"))
+ {
+ // TODO: we could refactor and merge this code with the code in
+ // jalview.gui.SeqPanel.mouseMoved(..) that formats sequence feature
+ // tooltips
+ desc.append(aa.getDescription(true).trim());
+ // check to see if the description is an html fragment.
+ if (desc.length() < 6
+ || (desc.substring(0, 6).toLowerCase().indexOf("") < 0))
+ {
+ // clean the description ready for embedding in html
+ desc = new StringBuffer(LEFT_ANGLE_BRACKET_PATTERN.matcher(desc)
+ .replaceAll("<"));
+ desc.insert(0, "");
+ }
+ else
+ {
+ // remove terminating html if any
+ int i = desc.substring(desc.length() - 7).toLowerCase()
+ .lastIndexOf("");
+ if (i > -1)
+ {
+ desc.setLength(desc.length() - 7 + i);
+ }
+ }
+ if (aa.hasScore())
+ {
+ desc.append("
");
+ }
+ // if (aa.hasProperties())
+ // {
+ // desc.append("
" + prop + " | " + // + aa.getProperty(prop) + " |