/*
* Copyright 2007 - 2017 the original author or authors.
*
* 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 net.sf.jailer.ui;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import net.sf.jailer.datamodel.Association;
import net.sf.jailer.datamodel.DataModel;
import net.sf.jailer.datamodel.Table;
import net.sf.jailer.ui.AssociationListUI.AssociationModel;
import net.sf.jailer.ui.AssociationListUI.DefaultAssociationModel;
/**
* Closure Border Dialog.
*
* @author Ralf Wisser
*/
public abstract class ClosureBorderDialog extends javax.swing.JDialog {
private static final long serialVersionUID = -7151994890007647782L;
protected AssociationListUI associationListUI;
/** Creates new form ClosureBorderDialog */
public ClosureBorderDialog(java.awt.Frame parent, boolean withInfoLine) {
super(parent, false);
initComponents();
if (!withInfoLine) {
rootNameLabel.setVisible(false);
jLabel1.setVisible(false);
}
associationListUI = new AssociationListUI("Remove Restrictions", "Remove Restrictions from selected Associations", false) {
private static final long serialVersionUID = 1129925600909956307L;
@Override
protected void applyAction(Collection<AssociationModel> selection) {
Collection<Association> associations = new ArrayList<Association>();
for (AssociationModel associationModel: selection) {
associations.add(((DefaultAssociationModel) associationModel).association);
}
removeRestrictions(associations);
}
@Override
protected void onSelect(AssociationModel association) {
ClosureBorderDialog.this.onSelect(((DefaultAssociationModel) association).association);
}
};
rootNameLabel.setFont(
new Font(rootNameLabel.getFont().getName(),
rootNameLabel.getFont().getStyle() | Font.BOLD,
rootNameLabel.getFont().getSize()));
GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
jPanel1.add(associationListUI, gridBagConstraints);
setLocation(30, 80);
setSize(500, 500);
setAlwaysOnTop(true);
refresh();
}
protected abstract void removeRestrictions(Collection<Association> associations);
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
rootNameLabel = new javax.swing.JLabel();
setTitle("Closure Border");
getContentPane().setLayout(new java.awt.GridBagLayout());
jPanel1.setLayout(new java.awt.GridBagLayout());
jLabel1.setText("Closure-Border of ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
jPanel1.add(jLabel1, gridBagConstraints);
rootNameLabel.setText("jLabel2");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
jPanel1.add(rootNameLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 2, 0, 2);
getContentPane().add(jPanel1, gridBagConstraints);
pack();
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel rootNameLabel;
// End of variables declaration//GEN-END:variables
/**
* Refreshes view after model changes.
*/
public void refresh() {
Table root = getRoot();
DataModel datamodel = getDataModel();
if (root != null && datamodel != null) {
rootNameLabel.setText(datamodel.getDisplayName(root));
Set<Association> border = new HashSet<Association>();
Set<Table> closure = root.closure(new HashSet<Table>(), true);
for (Table table: closure) {
for (Association association: table.associations) {
if (association.isIgnored() && !closure.contains(association.destination)) {
border.add(association);
}
}
}
Collection<AssociationModel> model = new ArrayList<AssociationListUI.AssociationModel>();
for (Association association: border) {
model.add(new DefaultAssociationModel(association));
}
associationListUI.setModel(model);
}
}
protected abstract Table getRoot();
protected abstract DataModel getDataModel();
protected abstract void onSelect(Association association);
}