Skip to content
Snippets Groups Projects
EntryHeaderEdit.java 5.55 KiB
Newer Older
  • Learn to ignore specific revisions
  • tjc's avatar
    tjc committed
    /* EntryHeaderEdit.java
     *
     * created: Wed Jun 16 1999
     *
     * This file is part of Artemis
     * 
     * Copyright (C) 1999  Genome Research Limited
     * 
     * 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 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.
     * 
     * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
     *
    
    tjc's avatar
    tjc committed
     * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/EntryHeaderEdit.java,v 1.2 2007-03-23 14:15:54 tjc Exp $
    
    tjc's avatar
    tjc committed
     */
    
    package uk.ac.sanger.artemis.components;
    
    import uk.ac.sanger.artemis.*;
    
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    
    /**
     *  Objects of this class are used to edit the header of an Entry.
     *
     *  @author Kim Rutherford
    
    tjc's avatar
    tjc committed
     *  @version $Id: EntryHeaderEdit.java,v 1.2 2007-03-23 14:15:54 tjc Exp $
    
    tjc's avatar
    tjc committed
     **/
    
    public class EntryHeaderEdit
        implements EntryChangeListener, EntryGroupChangeListener,
                   DocumentListener {
      /**
       *  Create a new EntryHeaderEdit object for the given Entry.
       **/
      public EntryHeaderEdit (final EntryGroup entry_group,
                              final Entry edit_entry) {
        
        this.edit_entry = edit_entry;
        this.entry_group = entry_group;
        
        file_viewer = new FileViewer ("Artemis Entry Header Editor: " +
                                      edit_entry.getName () == null ?
                                      "" : edit_entry.getName ());
    
        file_viewer.getContentPane ().add (error_text, "North");
    
        readHeader ();
    
    
    tjc's avatar
    tjc committed
        file_viewer.getTextPane().setEditable (true);
        file_viewer.getTextPane().getDocument ().addDocumentListener (this);
    
    tjc's avatar
    tjc committed
    
        getEntry ().addEntryChangeListener (this);
        entry_group.addEntryGroupChangeListener (this);
    
        file_viewer.addWindowListener (new WindowAdapter () {
          public void windowClosed (WindowEvent event) {
            stopListening ();
          }
        });
      }
    
    
      /**
       *  Remove this object as a feature and entry change listener.
       **/
      public void stopListening () {
        getEntry ().removeEntryChangeListener (this);
        entry_group.removeEntryGroupChangeListener (this);
      }
    
      /**
       *  Implementation of the EntryChangeListener interface.  We listen to
       *  EntryChange events so we can update this component if the header changes
       *  for another reason.
       **/
      public void entryChanged (EntryChangeEvent event) {
        switch (event.getType ()) {
        case EntryChangeEvent.HEADER_CHANGED:
          
          if (event.getSource () == current_text) {
            // don't bother with events from us
            return;
          }
        
          // re-read the information from the entry
          readHeader ();
          break;
        default:
          // do nothing
          break;
        }
      }
    
      /**
       *  Implementation of the EntryGroupChangeListener interface.  We listen to
       *  EntryGroupChange events so we can notify the user if of this component
       *  if the entry gets deleted.
       **/
      public void entryGroupChanged (final EntryGroupChangeEvent event) {
        switch (event.getType ()) {
        case EntryGroupChangeEvent.ENTRY_DELETED:
          if (event.getEntry () == edit_entry) {
            stopListening ();
            file_viewer.dispose ();
          }
          break;
        default:
          // do nothing
          break;
        }
      }
    
      public void changedUpdate(DocumentEvent e) {
        textValueChanged ();
      }
      public void insertUpdate(DocumentEvent e) {
        textValueChanged ();
      }
      public void removeUpdate(DocumentEvent e) {
        textValueChanged ();
      }
      
      /**
       *  Implementation of the TextListener interface.  When the text changes we
       *  update the Feature object that we are showing.
       **/
      public void textValueChanged () {
        if (current_text.equals (file_viewer.getText ())) {
          // the text hasn't really changed
          return;
        }
        
        current_text = file_viewer.getText ();
    
        try {
          // ignore text change events while reading
          edit_entry.setHeaderText (current_text);
          error_text.setText ("");
        } catch (uk.ac.sanger.artemis.io.ReadFormatException e) {
          error_text.setText (e + (e.getLineNumber () > 1 ?
                                   " at line: " + e.getLineNumber () :
                                   ""));
        } catch (java.io.IOException e) {
          error_text.setText (e.toString ());
        }
      }
    
      /**
       *  Read the header of edit_entry into this component.
       **/
      public void readHeader () {
        final String header = edit_entry.getHeaderText ();
    
        if (header != null) {
          file_viewer.setText (header);
    
          current_text = file_viewer.getText ();
        }
      }
    
      /**
       *  Return the Entry that this object is displaying.
       **/
      private Entry getEntry () {
        return edit_entry;
      }
    
      /**
       *  The EntryGroup that passed to the constructor.
       **/
      private EntryGroup entry_group;
    
      /**
       *  The Entry that contains the Feature this object is displaying.
       **/
      private Entry edit_entry;
    
      /**
       *  The FileViewer object that is displaying the feature.
       **/
      private FileViewer file_viewer;
    
      /**
       *  The text version of the Feature we are currently displaying.
       **/
      private String current_text = "";
    
      /**
       *  A Label for showing errors and messages.
       **/
      private JLabel error_text = new JLabel ("");
    }