/*
* Licensed Materials - Property of Perforce Software, Inc.
* © Copyright Perforce Software, Inc. 2014, 2021
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package filter;
import java.awt.Color;
import java.util.regex.PatternSyntaxException;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import ilog.views.gantt.IlvGanttChart;
import ilog.views.gantt.IlvGanttModel;
import ilog.views.gantt.IlvHierarchyChart;
import ilog.views.gantt.model.filter.IlvBasicFilterGanttModel;
import ilog.views.util.filter.IlvFilter;
import shared.swing.CustomizerPanel;
import shared.swing.ExampleFrame;
import xml.XMLGanttExample;
/**
* This example shows how to create an implementation of the {@link IlvFilter}
* interface that filters activities by applying a regular expression to their
* names.
*/
public class GanttFilterExample extends XMLGanttExample {
/**
* The filter model that wrappers the data model loaded by the user.
*/
protected IlvBasicFilterGanttModel filterModel;
/**
* The regex filter on activity names.
*/
protected ActivityNameFilter activityFilter;
/**
* The activity filter regex entry field.
*/
protected JTextField activityField;
/**
* Creates a new example.
*/
public GanttFilterExample() {
activityFilter = new ActivityNameFilter();
filterModel = new IlvBasicFilterGanttModel(null, activityFilter, null);
}
/**
* Creates the Gantt chart.
*
* @return The Gantt chart.
*/
Override
protected IlvHierarchyChart createChart() {
return new IlvGanttChart() {
Override
public void setGanttModel(IlvGanttModel model) {
filterModel.setFilteredModel(model);
if (getGanttModel() != filterModel) {
super.setGanttModel(filterModel);
}
}
};
}
/**
* This method is invoked whenever the user modifies the regex entry field.
* The activity filter is updated and the entry field is colored to indicate
* if the regex is valid or not.
*
* @param regex
* The regular expression.
*/
protected void setRegex(String regex) {
try {
activityFilter.setRegex(regex);
activityField.setForeground(Color.black);
} catch (PatternSyntaxException e) {
activityField.setForeground(Color.red);
}
}
// =========================================
// Menu
// =========================================
/**
* Initializes the actions for the Edit menu.
*/
Override
protected void initEditActions() {
super.initEditActions();
// Disable the following actions that create non-intuitive
// results when filtering is enabled.
rowIndentAction = null;
rowOutdentAction = null;
rowUpAction = null;
rowDownAction = null;
}
// =========================================
// Control Panel
// =========================================
/**
* Adds the tabbed pages to the customizer panel.
*
* @param customizerPanel
* The customizer panel.
*/
Override
protected void addCustomizerTabs(JTabbedPane customizerPanel) {
customizerPanel.addTab("Filter", createFilterCustomizer());
super.addCustomizerTabs(customizerPanel);
}
/**
* Creates and returns a customizer for applying filters.
*
* @return The filter customizer.
*/
protected JComponent createFilterCustomizer() {
CustomizerPanel panel = new CustomizerPanel();
panel.addHeading("Activity Name Filter");
activityField = new JTextField(15);
activityField.setText(activityFilter.getRegex());
activityField.getDocument().addDocumentListener(new DocumentListener() {
private void updateRegex() {
setRegex(activityField.getText());
}
Override
public void insertUpdate(DocumentEvent e) {
updateRegex();
}
Override
public void removeUpdate(DocumentEvent e) {
updateRegex();
}
Override
public void changedUpdate(DocumentEvent e) {
updateRegex();
}
});
panel.add(activityField);
return panel;
}
// =========================================
// Example Application
// =========================================
/**
* Returns the title of the example.
*
* @return The title of the example.
*/
Override
public String getTitle() {
return "Gantt Chart Activity Filter Example";
}
/**
* Application mainline.
*
* @param args
* The command line arguments.
*/
public static void main(String[] args) {
ExampleFrame.createAndShowGUI(GanttFilterExample.class);
}
}