/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.rm;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.AbstractListModel;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.rm.FlexoResource;
import org.openflexo.foundation.rm.ResourceList;
import org.openflexo.icon.IconLibrary;
import org.openflexo.localization.FlexoLocalization;
import org.openflexo.swing.TableSorter;
/**
* Dialog displaying Resource Management Model
*
* @author sguerin
*
*/
public class ResourceManagerPanel extends JPanel {
ResourceManagerModel _rmModel;
private FlexoResource _selectedResource = null;
private final JList synchronizedResourcesList;
private final JList dependantResourcesList;
private final JList alteredResourcesList;
ResourceManagerWindow _window;
TableSorter sorter;
public ResourceManagerPanel(FlexoProject project, ResourceManagerModel rmModel, ResourceManagerWindow window) {
super();
_window = window;
setLayout(new BorderLayout());
_rmModel = rmModel;
sorter = new TableSorter(_rmModel);
JTable resourceTable = new JTable(sorter);
sorter.setTableHeader(resourceTable.getTableHeader());
resourceTable.getTableHeader().setReorderingAllowed(false);
// JTable resourceTable = new JTable(_rmModel);
for (int i = 0; i < _rmModel.getColumnCount(); i++) {
TableColumn col = resourceTable.getColumnModel().getColumn(i);
col.setPreferredWidth(_rmModel.getPreferedColumnSize(i));
}
resourceTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel rowSM = resourceTable.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// Ignore extra messages.
if (e.getValueIsAdjusting()) {
return;
}
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (lsm.isSelectionEmpty()) {
// no rows are selected
} else {
int selectedRow = lsm.getMinSelectionIndex();
setSelectedResource(_rmModel.resourceAt(sorter.modelIndex(selectedRow)));
}
_window.update();
}
});
JLabel title = new JLabel(_rmModel.getTitle(), SwingConstants.CENTER);
title.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JScrollPane scrollPane = new JScrollPane(resourceTable);
JPanel resourcesPanel = new JPanel();
resourcesPanel.setLayout(new BorderLayout());
resourcesPanel.add(resourceTable.getTableHeader(), BorderLayout.NORTH);
resourcesPanel.add(scrollPane, BorderLayout.CENTER);
resourcesPanel.setPreferredSize(new Dimension(1200, 200));
JPanel syncPanel = new JPanel(new BorderLayout());
JLabel syncTitle = new JLabel(FlexoLocalization.localizedForKey("synchronized_resources"), SwingConstants.CENTER);
synchronizedResourcesList = new JList();
synchronizedResourcesList.setCellRenderer(new ResourceListRenderer());
synchronizedResourcesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
/*
* synchronizedResourcesList.addListSelectionListener(new
* ListSelectionListener() { public void valueChanged(ListSelectionEvent
* e) { //Ignore extra messages. if (e.getValueIsAdjusting()) { return; }
* int selectedRow = synchronizedResourcesList.getSelectedIndex(); }
*
* });
*/
syncPanel.add(syncTitle, BorderLayout.NORTH);
syncPanel.add(new JScrollPane(synchronizedResourcesList), BorderLayout.CENTER);
JPanel dependantPanel = new JPanel(new BorderLayout());
JLabel dependantTitle = new JLabel(FlexoLocalization.localizedForKey("dependant_resources"), SwingConstants.CENTER);
dependantResourcesList = new JList();
dependantResourcesList.setCellRenderer(new ResourceListRenderer());
dependantResourcesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
dependantPanel.add(dependantTitle, BorderLayout.NORTH);
dependantPanel.add(new JScrollPane(dependantResourcesList), BorderLayout.CENTER);
JPanel alteredPanel = new JPanel(new BorderLayout());
JLabel alteredTitle = new JLabel(FlexoLocalization.localizedForKey("altered_resources"), SwingConstants.CENTER);
alteredResourcesList = new JList();
alteredResourcesList.setCellRenderer(new ResourceListRenderer());
alteredResourcesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
alteredPanel.add(alteredTitle, BorderLayout.NORTH);
alteredPanel.add(new JScrollPane(alteredResourcesList), BorderLayout.CENTER);
JPanel relationPanel = new JPanel();
relationPanel.setLayout(new BoxLayout(relationPanel, BoxLayout.X_AXIS));
relationPanel.add(syncPanel);
relationPanel.add(dependantPanel);
relationPanel.add(alteredPanel);
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, resourcesPanel, relationPanel);
splitPane.setDividerLocation(0.5);
splitPane.setResizeWeight(0.5);
add(title, BorderLayout.NORTH);
add(splitPane, BorderLayout.CENTER);
}
/**
* @param resource
*/
protected void setSelectedResource(FlexoResource resource) {
_selectedResource = resource;
synchronizedResourcesList.setModel(new ResourceListModel(resource.getSynchronizedResources()));
dependantResourcesList.setModel(new ResourceListModel(resource.getDependentResources()));
alteredResourcesList.setModel(new ResourceListModel(resource.getAlteredResources()));
}
public FlexoResource getSelectedResource() {
return _selectedResource;
}
protected class ResourceListModel extends AbstractListModel {
private final ResourceList _resList;
protected ResourceListModel(ResourceList resList) {
super();
_resList = resList;
}
@Override
public int getSize() {
return _resList.size();
}
@Override
public Object getElementAt(int index) {
return _resList.elementAt(index);
}
}
protected class ResourceListRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component returned = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (returned instanceof JLabel) {
JLabel label = (JLabel) returned;
label.setText(((FlexoResource) value).getResourceIdentifier());
label.setIcon(IconLibrary.getIconForResourceType(((FlexoResource) value).getResourceType()));
label.setEnabled(((FlexoResource) value).isActive());
}
return returned;
}
}
public ResourceManagerModel getRMModel() {
return _rmModel;
}
}