/*******************************************************************************
* Copyright (c) 2010 Stefan A. Tzeggai.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* Stefan A. Tzeggai - initial API and implementation
******************************************************************************/
package org.geopublishing.geopublisher;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;
import org.geopublishing.atlasViewer.dp.layer.DpLayerVectorFeatureSource;
import org.geopublishing.atlasViewer.swing.AVDialogManager;
import org.geopublishing.geopublisher.gui.datapool.layer.AttribTranslationJTable;
import org.geopublishing.geopublisher.swing.GeopublisherGUI;
import de.schmitzm.geotools.data.amd.AttributeMetadataImpl;
import de.schmitzm.geotools.data.amd.AttributeMetadataMap;
import de.schmitzm.i18n.Translation;
import de.schmitzm.swing.CancelButton;
import de.schmitzm.swing.CancellableDialogAdapter;
import de.schmitzm.swing.Checkable;
import de.schmitzm.swing.JPanel;
import de.schmitzm.swing.OkButton;
import de.schmitzm.swing.SwingUtil;
/**
* This dialog allows to edit title, description and visibility of the columns.
*/
public class EditAttributesJDialog extends CancellableDialogAdapter implements Checkable {
private DpLayerVectorFeatureSource dplv;
private AttributeMetadataMap backupAttributeMetadataMap;
private AttribTranslationJTable attribTranslationJTable;
public EditAttributesJDialog(Component owner,
DpLayerVectorFeatureSource dpLayerVectorFeatureSource) {
super(SwingUtil.getParentWindow(owner), GeopublisherGUI.R("Attributes.Edit.Dialog.Title",
dpLayerVectorFeatureSource.getTitle()));
dplv = dpLayerVectorFeatureSource;
backup();
final JPanel cp = new JPanel(new BorderLayout());
attribTranslationJTable = new AttribTranslationJTable(dplv);
cp.add(new JScrollPane(attribTranslationJTable), BorderLayout.CENTER);
JPanel buttons = new JPanel(new MigLayout());
CancelButton cancelB = new CancelButton();
cancelB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cancelClose();
}
});
OkButton okB = new OkButton();
okB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
okClose();
}
});
buttons.add(okB, "tag ok");
buttons.add(cancelB, "tag cancel");
cp.add(buttons, BorderLayout.SOUTH);
cp.add(new JLabel(GeopublisherGUI.R("EditAttributesDialog.explanation.html")),
BorderLayout.NORTH);
setContentPane(cp);
pack();
SwingUtil.setRelativeFramePosition(this, owner, SwingUtil.BOUNDS_OUTER, SwingUtil.EAST);
}
private void backup() {
backupAttributeMetadataMap = dplv.getAttributeMetaDataMap().copy();
}
@Override
public void cancel() {
backupAttributeMetadataMap.copyTo(dplv.getAttributeMetaDataMap());
}
@Override
public boolean okClose() {
if (checkValidInputs()) {
dispose();
// Closing all related attribute tables
AVDialogManager.dm_AttributeTable.disposeInstanceFor(dplv);
return true;
}
return false;
}
@Override
public boolean checkValidInputs() {
for (AttributeMetadataImpl amd : dplv.getAttributeMetaDataMap().values()) {
if (!Translation.checkValid(amd.getTitle())) {
JOptionPane
.showMessageDialog(this, SwingUtil
.R("TranslationAskJDialog.ErrorMsg.InvalidCharacterInTranslation"));
return false;
}
if (!Translation.checkValid(amd.getDesc())) {
JOptionPane
.showMessageDialog(this, SwingUtil
.R("TranslationAskJDialog.ErrorMsg.InvalidCharacterInTranslation"));
return false;
}
}
return true;
}
/**
* May be called outside to
*/
public void refreshTable() {
((DefaultTableModel) attribTranslationJTable.getModel()).fireTableDataChanged();
}
}