/*****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.cayenne.modeler.dialog.datadomain;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.swing.BindingBuilder;
import javax.swing.JCheckBox;
import javax.swing.JPopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FilterDialog extends JPopupMenu {
private JCheckBox dbEntity;
private JCheckBox objEntity;
private JCheckBox embeddable;
private JCheckBox procedure;
private JCheckBox query;
private JCheckBox all;
private ProjectController eventController;
private FilterController filterController;
/* NOTE: Setters and getters are used by view bindings, don't delete them */
public Boolean getDbEntityFilter() {
return filterController.getFilterMap().get("dbEntity");
}
public void setDbEntityFilter(Boolean value) {
filterController.getFilterMap().put("dbEntity", value);
}
public Boolean getObjEntityFilter() {
return filterController.getFilterMap().get("objEntity");
}
public void setObjEntityFilter(Boolean value) {
filterController.getFilterMap().put("objEntity", value);
}
public Boolean getEmbeddableFilter() {
return filterController.getFilterMap().get("embeddable");
}
public void setEmbeddableFilter(Boolean value) {
filterController.getFilterMap().put("embeddable", value);
}
public Boolean getProcedureFilter() {
return filterController.getFilterMap().get("procedure");
}
public void setProcedureFilter(Boolean value) {
filterController.getFilterMap().put("procedure", value);
}
public Boolean getQueryFilter() {
return filterController.getFilterMap().get("query");
}
public void setQueryFilter(Boolean value) {
filterController.getFilterMap().put("query", value);
}
public Boolean getAllFilter() {
for(Boolean selected : filterController.getFilterMap().values()) {
if(!selected) {
return false;
}
}
return true;
}
public void setAllFilter(Boolean value) {
}
public FilterDialog(FilterController filterController){
super();
this.filterController=filterController;
this.eventController=filterController.getEventController();
initView();
initController();
}
public void initView(){
all = new JCheckBox("Show all");
dbEntity = new JCheckBox("DbEntity");
objEntity = new JCheckBox("ObjEntity");
embeddable = new JCheckBox("Embeddable");
procedure = new JCheckBox("Procedure");
query = new JCheckBox("Query");
add(all);
addSeparator();
add(dbEntity);
add(objEntity);
add(embeddable);
add(procedure);
add(query);
}
private void initController() {
BindingBuilder builder = new BindingBuilder(
eventController.getApplication().getBindingFactory(),
this);
builder.bindToStateChange(dbEntity, "dbEntityFilter").updateView();
builder.bindToStateChange(objEntity, "objEntityFilter").updateView();
builder.bindToStateChange(embeddable, "embeddableFilter").updateView();
builder.bindToStateChange(procedure, "procedureFilter").updateView();
builder.bindToStateChange(query, "queryFilter").updateView();
builder.bindToStateChange(all, "allFilter").updateView();
dbEntity.addActionListener(new CheckListener("dbEntity"));
objEntity.addActionListener(new CheckListener("objEntity"));
embeddable.addActionListener(new CheckListener("embeddable"));
procedure.addActionListener(new CheckListener("procedure"));
query.addActionListener(new CheckListener("query"));
all.setEnabled(false);
all.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dbEntity.setSelected(true);
objEntity.setSelected(true);
embeddable.setSelected(true);
procedure.setSelected(true);
query.setSelected(true);
all.setEnabled(false);
filterController.getTreeModel().setFiltered(filterController.getFilterMap());
filterController.getTree().updateUI();
}
});
}
void checkAllStates() {
if(!getAllFilter()) {
all.setSelected(false);
all.setEnabled(true);
} else {
all.setSelected(true);
all.setEnabled(false);
}
}
private class CheckListener implements ActionListener {
String key;
public CheckListener(String key) {
this.key = key;
}
@Override
public void actionPerformed(ActionEvent e) {
filterController.getFilterMap().put(key, ((JCheckBox) e.getSource()).isSelected());
filterController.getTreeModel().setFiltered(filterController.getFilterMap());
filterController.getTree().updateUI();
checkAllStates();
}
}
}