ModelDefinitionSelectionPanel.java
// @formatter:off
/*******************************************************************************
*
* This file is part of JMad.
*
* Copyright (c) 2008-2011, CERN. All rights reserved.
*
* 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.
*
******************************************************************************/
// @formatter:on
package cern.accsoft.steering.jmad.gui.panels;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import cern.accsoft.steering.jmad.domain.machine.RangeDefinition;
import cern.accsoft.steering.jmad.model.JMadModel;
import cern.accsoft.steering.jmad.model.JMadModelStartupConfiguration;
import cern.accsoft.steering.jmad.model.manage.JMadModelManager;
import cern.accsoft.steering.jmad.model.manage.JMadModelManagerAdapter;
import cern.accsoft.steering.jmad.modeldefs.JMadModelDefinitionManager;
import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;
import cern.accsoft.steering.jmad.service.JMadService;
import cern.accsoft.steering.util.gui.panels.Applyable;
import cern.accsoft.steering.util.gui.panels.Titleable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ModelDefinitionSelectionPanel extends JPanel implements Titleable, Applyable {
private final static Logger logger = LoggerFactory.getLogger(ModelDefinitionSelectionPanel.class);
private static final long serialVersionUID = -3095464304653777882L;
/** the jmad-service to create models */
private JMadService jmadService;
private JComboBox cboModel;
private JMadModelStartupConfiguration jmadModelStartupConfiguration = null;
private ActionListener modelSelectionComboListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateSubPanels();
}
};
/**
* An (optional) range selection panel. If this is present, then also the sequence and range can be selected.
*/
private RangeSelectionPanel rangeSelectionPanel;
public ModelDefinitionSelectionPanel() {
/* nothing to do */
}
private void updateSubPanels() {
if (ModelDefinitionSelectionPanel.this.rangeSelectionPanel != null) {
JMadModelDefinition modelDefinition = getActiveModelDefinition();
if (modelDefinition != null) {
ModelDefinitionSelectionPanel.this.rangeSelectionPanel.setActiveModelDefinition(modelDefinition,
modelDefinition.getDefaultSequenceDefinition().getDefaultRangeDefinition());
}
}
}
public ModelDefinitionSelectionPanel(boolean showRangeSelection) {
if (showRangeSelection) {
this.rangeSelectionPanel = new RangeSelectionPanel();
this.rangeSelectionPanel.init();
}
}
public void init() {
initComponenets();
}
private void initComponenets() {
setLayout(new BorderLayout());
/*
* Combo-Boxes
*/
JPanel comboPanel = new JPanel(new GridBagLayout());
add(comboPanel, BorderLayout.CENTER);
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.fill = GridBagConstraints.BOTH;
comboPanel.add(new JLabel("Model: "), constraints);
constraints.gridx++;
cboModel = createModelSelectionComboBox();
comboPanel.add(cboModel, constraints);
if (this.rangeSelectionPanel != null) {
add(this.rangeSelectionPanel, BorderLayout.SOUTH);
}
updateSubPanels();
/*
* if a model manager is already available then we try to set the model.
*/
if (getModelManager() != null) {
JMadModel model = getModelManager().getActiveModel();
if (model != null) {
setActiveModel(model);
}
}
}
/**
* sets the values of all comboboxes to the values given by the model.
*
* @param model
*/
private void setActiveModel(JMadModel model) {
if (model == null) {
return;
}
setActiveModelDefinition(model.getModelDefinition());
if (this.rangeSelectionPanel != null) {
this.rangeSelectionPanel.setActiveModel(model);
}
}
/**
* sets the active model and initializes the Combo-boxes accordingly.
*/
public void setActiveModelDefinition(JMadModelDefinition modelDefinition) {
cboModel.setSelectedItem(modelDefinition);
}
/**
* @return the actually selected {@link JMadModelDefinition}
*/
public JMadModelDefinition getActiveModelDefinition() {
return (JMadModelDefinition) this.cboModel.getSelectedItem();
}
private JComboBox createModelSelectionComboBox() {
JComboBox comboBox = new JComboBox(getModelDefinitionManager().getAllModelDefinitions().toArray());
comboBox.setToolTipText("Selects the actual model.");
comboBox.addActionListener(this.modelSelectionComboListener);
return comboBox;
}
@Override
public String getTitle() {
return "Select model";
}
@Override
public boolean apply() {
RangeDefinition rangeDefinition = null;
this.jmadModelStartupConfiguration = null;
if (this.rangeSelectionPanel != null) {
rangeDefinition = this.rangeSelectionPanel.getActiveRangeDefinition();
if (rangeDefinition != null) {
JMadModelStartupConfiguration startupConfiguration = new JMadModelStartupConfiguration();
startupConfiguration.setInitialRangeDefinition(rangeDefinition);
startupConfiguration.setLoadDefaultRange(false);
this.jmadModelStartupConfiguration = startupConfiguration;
}
}
return getActiveModelDefinition() != null;
}
@Override
public void cancel() {
/* do nothing */
}
public void setJmadService(JMadService jmadService) {
this.jmadService = jmadService;
this.jmadService.getModelManager().addListener(new JMadModelManagerAdapter() {
@Override
public void changedActiveModel(JMadModel model) {
setActiveModel(model);
}
});
}
private JMadService getJmadService() {
if (this.jmadService == null) {
logger.warn("jmadService not set. Maybe config error.");
}
return jmadService;
}
private JMadModelManager getModelManager() {
if (getJmadService() == null) {
return null;
}
return getJmadService().getModelManager();
}
private JMadModelDefinitionManager getModelDefinitionManager() {
return getJmadService().getModelDefinitionManager();
}
public JMadModelStartupConfiguration getStartupConfiguration() {
return jmadModelStartupConfiguration;
}
}