Package com.opengamma.integration.swing

Source Code of com.opengamma.integration.swing.ViewListModel

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.swing;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

import com.opengamma.core.change.ChangeEvent;
import com.opengamma.core.change.ChangeListener;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.master.config.ConfigDocument;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigSearchRequest;
import com.opengamma.master.config.ConfigSearchResult;

/**
* List model holding list of views - updates when underlying config master updates.
*/
public class ViewListModel extends AbstractListModel<ViewEntry> implements ComboBoxModel<ViewEntry> {
  /**
   * Version UID
   */
  private static final long serialVersionUID = 1L;
  private Object _viewsLock = new Object();
  private volatile List<ViewEntry> _views = new ArrayList<>();
  private volatile List<ViewEntry> _filteredViews = new ArrayList<>();
  private ConfigMaster _configMaster;
  private ViewEntry _selectedItem;
  private String _filter;

  public ViewListModel(ConfigMaster configMaster) {
    _configMaster = configMaster;
    registerListener();
    SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
      @Override
      protected Void doInBackground() throws Exception {
        pullItems();
        runFilter();
        return null;
      }
    };
    worker.execute();
  }
 
  public void setFilter(String filter) {
    _filter = filter;
    SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
      @Override
      protected Void doInBackground() throws Exception {
        runFilter();
        return null;
      }
    };
    worker.execute();
  }
 
  private void runFilter() {
    synchronized (_viewsLock) {
      List<ViewEntry> filtered = new ArrayList<>();
      for (ViewEntry entry : _views) {
        if (_filter == null || entry.getName().contains(_filter)) {
          filtered.add(entry);
        }
      }
      _filteredViews = filtered;
    }
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        fireContentsChanged(this, 0, getSize());
      }
    });
  }
 
  private void pullItems() {
    ConfigSearchRequest<ViewDefinition> searchReq = new ConfigSearchRequest<ViewDefinition>();
    searchReq.setType(ViewDefinition.class);
    ConfigSearchResult<ViewDefinition> search = _configMaster.search(searchReq);
    synchronized (_viewsLock) {
      _views.clear();
      for (ConfigDocument document : search.getDocuments()) {
        _views.add(ViewEntry.of(document.getUniqueId(), document.getName()));
      }
      Collections.sort(_views, ViewEntryComparator.getInstance());
    }
  }
 
  private void registerListener() {
    _configMaster.changeManager().addChangeListener(new ChangeListener() {
      @Override
      public void entityChanged(ChangeEvent event) {
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
          @Override
          protected Void doInBackground() throws Exception {
            pullItems();
            runFilter();
            return null;
          }
        };
        worker.execute();
      }
    });
  }
 
  @Override
  public int getSize() {
    return _filteredViews.size();
  }

  @Override
  public ViewEntry getElementAt(int index) {
    return _filteredViews.get(index);
  }

  @Override
  public void setSelectedItem(Object anItem) {
    _selectedItem = (ViewEntry) anItem;
  }

  @Override
  public Object getSelectedItem() {
    return _selectedItem;
  }

}
TOP

Related Classes of com.opengamma.integration.swing.ViewListModel

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.