Package org.eobjects.datacleaner.panels

Source Code of org.eobjects.datacleaner.panels.FilterListPanel

/**
* eobjects.org DataCleaner
* Copyright (C) 2010 eobjects.org
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* 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 Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package org.eobjects.datacleaner.panels;

import java.awt.BorderLayout;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JToolBar;

import org.eobjects.analyzer.beans.api.Renderer;
import org.eobjects.analyzer.job.builder.AnalysisJobBuilder;
import org.eobjects.analyzer.job.builder.FilterChangeListener;
import org.eobjects.analyzer.job.builder.FilterJobBuilder;
import org.eobjects.analyzer.result.renderer.RendererFactory;
import org.eobjects.datacleaner.actions.AddFilterActionListener;
import org.eobjects.datacleaner.actions.JobBuilderTaskPaneTextMouseListener;
import org.eobjects.datacleaner.util.IconUtils;
import org.eobjects.datacleaner.util.ImageManager;
import org.eobjects.datacleaner.util.LabelUtils;
import org.eobjects.datacleaner.util.WidgetFactory;
import org.eobjects.datacleaner.util.WidgetUtils;
import org.eobjects.datacleaner.widgets.DCTaskPaneContainer;
import org.jdesktop.swingx.JXTaskPane;

public class FilterListPanel extends DCPanel implements FilterChangeListener {

  private static final long serialVersionUID = 1L;

  private final Map<FilterJobBuilder<?, ?>, JXTaskPane> _taskPanes;
  private final Map<FilterJobBuilder<?, ?>, FilterJobBuilderPresenter> _presenters;
  private final AnalysisJobBuilder _analysisJobBuilder;
  private final DCTaskPaneContainer _taskPaneContainer;
  private final Set<FilterJobBuilderPresenter> _preconfiguredPresenters;
  private final RendererFactory _componentJobBuilderPresenterRendererFactory;

  public FilterListPanel(AnalysisJobBuilder analysisJobBuilder, RendererFactory componentJobBuilderPresenterRendererFactory) {
    super(ImageManager.getInstance().getImage("images/window/filters-tab-background.png"), 95, 95,
        WidgetUtils.BG_COLOR_BRIGHT, WidgetUtils.BG_COLOR_BRIGHTEST);
    _componentJobBuilderPresenterRendererFactory = componentJobBuilderPresenterRendererFactory;
    setLayout(new BorderLayout());
    _taskPanes = new IdentityHashMap<FilterJobBuilder<?, ?>, JXTaskPane>();
    _presenters = new IdentityHashMap<FilterJobBuilder<?, ?>, FilterJobBuilderPresenter>();
    _analysisJobBuilder = analysisJobBuilder;
    _preconfiguredPresenters = new HashSet<FilterJobBuilderPresenter>();
    _analysisJobBuilder.getFilterChangeListeners().add(this);

    JToolBar toolBar = WidgetFactory.createToolBar();

    // Add filter
    ImageManager imageManager = ImageManager.getInstance();
    JButton addFilterButton = new JButton("Add filter", imageManager.getImageIcon("images/component-types/filter.png"));
    addFilterButton
        .setToolTipText("<html>Filters represent a way to<br/>categorize rows and use these<br/>categories as requirements for<br/>succeeding steps in a job.</html>");
    addFilterButton.addActionListener(new AddFilterActionListener(_analysisJobBuilder.getConfiguration(),
        _analysisJobBuilder, this));
    toolBar.add(addFilterButton);

    add(toolBar, BorderLayout.NORTH);

    _taskPaneContainer = WidgetFactory.createTaskPaneContainer();
    _taskPaneContainer.setOpaque(false);

    add(_taskPaneContainer, BorderLayout.CENTER);
  }

  public void addPreconfiguredPresenter(FilterJobBuilderPresenter presenter) {
    _preconfiguredPresenters.add(presenter);
  }

  public void applyPropertyValues() {
    Set<FilterJobBuilder<?, ?>> filterJobBuilders = _presenters.keySet();
    for (FilterJobBuilder<?, ?> filterJobBuilder : filterJobBuilders) {
      _presenters.get(filterJobBuilder).applyPropertyValues();
    }
  }

  private JXTaskPane createTaskPane(final FilterJobBuilder<?, ?> fjb) {
    String title = LabelUtils.getLabel(fjb);
    Icon icon = IconUtils.getDescriptorIcon(fjb.getDescriptor(), IconUtils.ICON_SIZE_SMALL);
    final JXTaskPane taskPane = WidgetFactory.createTaskPane(title, icon);
    taskPane.add(_presenters.get(fjb).createJComponent());
    return taskPane;
  }

  @Override
  public void removeNotify() {
    _analysisJobBuilder.getFilterChangeListeners().remove(this);
    super.removeNotify();
  }

  @Override
  public void onAdd(FilterJobBuilder<?, ?> fjb) {
    boolean createPresenter = true;
    for (FilterJobBuilderPresenter presenter : _preconfiguredPresenters) {
      final FilterJobBuilder<?, ?> presentedFjb = presenter.getJobBuilder();
      if (presentedFjb == fjb) {
        createPresenter = false;
        _presenters.put(fjb, presenter);
        break;
      }
    }

    if (createPresenter) {
      @SuppressWarnings("unchecked")
      final Renderer<FilterJobBuilder<?, ?>, ? extends ComponentJobBuilderPresenter> renderer = (Renderer<FilterJobBuilder<?, ?>, ? extends ComponentJobBuilderPresenter>) _componentJobBuilderPresenterRendererFactory
          .getRenderer(fjb, ComponentJobBuilderRenderingFormat.class);
      final FilterJobBuilderPresenter presenter = (FilterJobBuilderPresenter) renderer.render(fjb);
      _presenters.put(fjb, presenter);
    }

    final JXTaskPane taskPane = createTaskPane(fjb);
    taskPane.addMouseListener(new JobBuilderTaskPaneTextMouseListener(_analysisJobBuilder, fjb, taskPane));
    _taskPanes.put(fjb, taskPane);
    _taskPaneContainer.add(taskPane);
  }

  @Override
  public void onRemove(FilterJobBuilder<?, ?> fjb) {
    _presenters.remove(fjb);
    JXTaskPane taskPane = _taskPanes.remove(fjb);
    if (taskPane != null) {
      _taskPaneContainer.remove(taskPane);
      updateUI();
    }
  }

  @Override
  public void onConfigurationChanged(FilterJobBuilder<?, ?> filterJobBuilder) {
    FilterJobBuilderPresenter presenter = _presenters.get(filterJobBuilder);
    if (presenter != null) {
      presenter.onConfigurationChanged();
    }
  }

  @Override
  public void onRequirementChanged(FilterJobBuilder<?, ?> filterJobBuilder) {
    FilterJobBuilderPresenter presenter = _presenters.get(filterJobBuilder);
    if (presenter != null) {
      presenter.onRequirementChanged();
    }
  }

  public void initializeExistingComponents() {
    List<FilterJobBuilder<?, ?>> filterJobBuilders = _analysisJobBuilder.getFilterJobBuilders();
    for (FilterJobBuilder<?, ?> filterJobBuilder : filterJobBuilders) {
      onAdd(filterJobBuilder);
    }
  }
}
TOP

Related Classes of org.eobjects.datacleaner.panels.FilterListPanel

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.