FeaturesFile ffile = new FeaturesFile();
- if (reply == JvOptionPane.OK_OPTION && name.getText().length() > 0)
- String enteredType = name.getText().trim();
++ final String enteredType = name.getText().trim();
++ final String enteredGroup = group.getText().trim();
++ final String enteredDescription = description.getText().replaceAll("\n", " ");
++
+ if (reply == JvOptionPane.OK_OPTION && enteredType.length() > 0)
{
/*
* update default values only if creating using default values
*/
if (useLastDefaults)
{
- lastFeatureAdded = name.getText().trim();
- lastFeatureGroupAdded = group.getText().trim();
+ lastFeatureAdded = enteredType;
- lastFeatureGroupAdded = group.getText().trim();
++ lastFeatureGroupAdded = enteredGroup;
// TODO: determine if the null feature group is valid
if (lastFeatureGroupAdded.length() < 1)
{
{
/*
* YES_OPTION corresponds to the Amend button
-- * need to refresh Feature Settings if type, group or colour changed
++ * need to refresh Feature Settings if type, group or colour changed;
++ * note we don't force the feature to be visible - the user has been
++ * warned if a hidden feature type or group was entered
*/
- String newType = name.getText().trim();
- String newFeatureGroup = group.getText().trim();
- String newDescription = description.getText().replaceAll("\n", " ");
- boolean refreshSettings = (!featureType.equals(sf.type) || !featureGroup
- .equals(sf.featureGroup));
- sf.type = enteredType;
- sf.featureGroup = group.getText().trim();
- sf.description = description.getText().replaceAll("\n", " ");
- boolean refreshSettings = (!featureType.equals(sf.type) || !featureGroup
- .equals(sf.featureGroup));
++ boolean refreshSettings = (!featureType.equals(enteredType) || !featureGroup
++ .equals(enteredGroup));
refreshSettings |= (fcol != oldcol);
- setColour(newType, fcol);
- /*?*/ getFeaturesDisplayed().setVisible(newType);
-
- setColour(sf.type, fcol);
-
++ setColour(enteredType, fcol);
+ int newBegin = sf.begin;
+ int newEnd = sf.end;
try
{
- sf.begin = ((Integer) start.getValue()).intValue();
- sf.end = ((Integer) end.getValue()).intValue();
+ newBegin = ((Integer) start.getValue()).intValue();
+ newEnd = ((Integer) end.getValue()).intValue();
} catch (NumberFormatException ex)
{
+ // JSpinner doesn't accept invalid format data :-)
+ }
+
+ /*
+ * replace the feature by deleting it and adding a new one
+ * (to ensure integrity of SequenceFeatures data store)
+ */
+ sequences.get(0).deleteFeature(sf);
- SequenceFeature newSf = new SequenceFeature(newType,
- newDescription, newBegin, newEnd, sf.getScore(),
- newFeatureGroup);
++ SequenceFeature newSf = new SequenceFeature(enteredType,
++ enteredDescription, newBegin, newEnd, sf.getScore(),
++ enteredGroup);
+ // ensure any additional properties are copied
+ if (sf.otherDetails != null)
+ {
+ newSf.otherDetails = new HashMap<String, Object>(sf.otherDetails);
+ }
+ ffile.parseDescriptionHTML(newSf, false);
+ // add any additional links not parsed from description
+ if (sf.links != null)
+ {
+ for (String link : sf.links)
+ {
+ newSf.addLink(link);
+ }
}
+ // amend features only gets one sequence to act on
+ sequences.get(0).addSequenceFeature(newSf);
- ffile.parseDescriptionHTML(sf, false);
if (refreshSettings)
{
featuresAdded();
for (int i = 0; i < sequences.size(); i++)
{
SequenceFeature sf = features.get(i);
- sf.type = name.getText().trim();
- // fix for JAL-1538 - always set feature group here
- sf.featureGroup = group.getText().trim();
- sf.description = description.getText().replaceAll("\n", " ");
- sequences.get(i).addSequenceFeature(sf);
- ffile.parseDescriptionHTML(sf, false);
- sf.type = enteredType;
- // fix for JAL-1538 - always set feature group here
- sf.featureGroup = group.getText().trim();
- sf.description = description.getText().replaceAll("\n", " ");
- sequences.get(i).addSequenceFeature(sf);
- ffile.parseDescriptionHTML(sf, false);
++ SequenceFeature sf2 = new SequenceFeature(enteredType,
++ enteredDescription, sf.getBegin(), sf.getEnd(),
++ Float.NaN, enteredGroup);
++ sequences.get(i).addSequenceFeature(sf2);
++ ffile.parseDescriptionHTML(sf2, false);
}
- setColour(lastFeatureAdded, fcol);
+ setColour(enteredType, fcol);
featuresAdded();