Package hermes.browser.tasks

Source Code of hermes.browser.tasks.BrowseFIXFileTask

/*
* Copyright 2003,2004 Colin Crist
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package hermes.browser.tasks;

import hermes.browser.DocumentComponetListenerSupport;
import hermes.browser.HermesBrowser;
import hermes.browser.IconCache;
import hermes.browser.actions.FIXSessionBrowserDocumentComponent;
import hermes.fix.FIXMessage;
import hermes.fix.FIXMessageFilter;
import hermes.fix.FIXReader;
import hermes.fix.SessionKey;
import hermes.fix.quickfix.FIXInputStreamReader;
import hermes.fix.quickfix.NIOFIXFileReader;
import hermes.fix.quickfix.QuickFIXMessageCache;
import hermes.util.TextUtils;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import quickfix.field.SenderCompID;
import quickfix.field.TargetCompID;

import com.jidesoft.document.DocumentComponentEvent;

/**
* @author colincrist@hermesjms.com
*/
public class BrowseFIXFileTask extends TaskSupport {
  private static final Logger log = Logger.getLogger(BrowseFIXFileTask.class);
  private InputStream istream;
  private String title;
  private FIXReader reader;
  private Map<SessionKey, FIXSessionBrowserDocumentComponent> documents = new HashMap<SessionKey, FIXSessionBrowserDocumentComponent>();
  private QuickFIXMessageCache messageCache;

  public BrowseFIXFileTask(final QuickFIXMessageCache messageCache, InputStream istream, String title) {
    super(IconCache.getIcon("hermes.file.fix"));
    this.messageCache = messageCache;
    this.istream = istream;
    this.title = title;
  }

  public String getTitle() {
    return title;
  }

  /*
   * (non-Javadoc)
   *
   * @see hermes.browser.tasks.Task#run()
   */
  public void invoke() throws Exception {
    int nmessages = 0;

    if (istream instanceof FileInputStream) {
      reader = new NIOFIXFileReader(messageCache, (FileInputStream) istream);
    } else {
      reader = new FIXInputStreamReader(messageCache, istream);
    }

    if (HermesBrowser.getBrowser().getConfig().getQuickFIX().isFilterSessionMsgTypes()) {
      reader.getFilter().add(FIXMessageFilter.SESSION_MSGTYPES);
    }

    try {
      FIXMessage message;

      while (isRunning() && (message = reader.read()) != null) {
        nmessages++;
        SessionKey key1 = new SessionKey(message.getMessage().getHeader().getString(SenderCompID.FIELD), message.getMessage().getHeader().getString(TargetCompID.FIELD));
        SessionKey key2 = new SessionKey(message.getMessage().getHeader().getString(TargetCompID.FIELD), message.getMessage().getHeader().getString(SenderCompID.FIELD));

        FIXSessionBrowserDocumentComponent document = documents.get(key1);
       
        if (document == null) {
          document = new FIXSessionBrowserDocumentComponent(messageCache, key1);
          documents.put(key1, document);
          documents.put(key2, document)
          addTaskListener(document) ;
          document.addDocumentComponentListener(new DocumentComponetListenerSupport(){
            @Override
            public void documentComponentClosed(DocumentComponentEvent arg0) {
              stop() ;
            }         
          }) ;
        }     
       
       
       
        document.addMessage(message);
      }
    } catch (Throwable ex) {
      log.error("browse stopped: " + ex.getMessage());
    } finally {
      reader.close();

      log.debug("nmessages=" + nmessages);
    }

    notifyStatus("Read " + nmessages + " message" + TextUtils.plural(nmessages) + " from " + title);
  }
}
TOP

Related Classes of hermes.browser.tasks.BrowseFIXFileTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.