JMadOptionPane.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.dialog;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.io.File;
import java.net.URI;
import java.util.Optional;
import cern.accsoft.steering.jmad.model.JMadModel;
import cern.accsoft.steering.jmad.model.JMadModelStartupConfiguration;
import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;
import cern.accsoft.steering.jmad.modeldefs.io.impl.ModelDefinitionUtil;
import cern.accsoft.steering.jmad.service.JMadService;
import com.google.common.base.Strings;
import org.jmad.modelpack.gui.conf.JMadModelSelectionDialogFactory;
import org.jmad.modelpack.gui.domain.JMadModelSelection;
import org.jmad.modelpack.gui.domain.JMadModelSelectionType;
import org.jmad.modelpack.service.JMadModelPackageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This is a collection of utility methods to show dialogs related to
* jmad-models
*
* @author Kajetan Fuchsberger (kajetan.fuchsberger at cern.ch)
*/
public class JMadOptionPane {
private final static Logger LOGGER = LoggerFactory.getLogger(JMadOptionPane.class);
private final static JFileChooser FILECHOOSER = new JFileChooser();
static {
FILECHOOSER.addChoosableFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "JMad Model Definition XML files";
}
@Override
public boolean accept(File f) {
return ModelDefinitionUtil.isXmlFileName(f.getName());
}
});
FILECHOOSER.addChoosableFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "JMad Model Definition ZIP files";
}
@Override
public boolean accept(File f) {
return ModelDefinitionUtil.isZipFileName(f.getName());
}
});
FILECHOOSER.setAcceptAllFileFilterUsed(true);
}
private JMadOptionPane() {
/* no instantiation */
}
public static JMadModel showCreateModelDialog(JMadModelSelectionDialogFactory modelpackDialogFactory,
JMadService jmadService) {
Optional<JMadModelSelection> selection = modelpackDialogFactory
.showAndWaitModelSelection(JMadModelSelectionType.ALL);
if (selection.isPresent()) {
JMadModelDefinition modelDefinition = selection.get().modelDefinition();
JMadModelStartupConfiguration startupConfiguration = selection.get().startupConfiguration().orElse(null);
return jmadService.createModel(modelDefinition, startupConfiguration);
}
return null;
}
public static void showExportModelDefinitionDialog(Frame frame, JMadModelDefinition modelDefinition,
JMadService jmadService) {
FILECHOOSER.setDialogTitle("Exporting model " + modelDefinition.getName());
int returnValue = FILECHOOSER.showSaveDialog(frame);
if (returnValue == JFileChooser.APPROVE_OPTION) {
jmadService.getModelDefinitionExporter().export(modelDefinition, FILECHOOSER.getSelectedFile());
} else {
LOGGER.debug("Definition export aborted by user.");
}
}
public static JMadModel showCreateModelFromFileDialog(Frame frame, JMadService jmadService) {
FILECHOOSER.setDialogTitle("Select model definition file ...");
int returnValue = FILECHOOSER.showOpenDialog(frame);
if (returnValue == JFileChooser.APPROVE_OPTION) {
JMadModelDefinition modelDefinition = jmadService.getModelDefinitionImporter()
.importModelDefinition(FILECHOOSER.getSelectedFile());
return jmadService.createModel(modelDefinition);
} else {
LOGGER.debug("Definition import aborted by user.");
return null;
}
}
public static JMadModel showCreateModelFromUriDialog(Frame frame, JMadModelPackageService modelPackageService) {
String userUri = JOptionPane.showInputDialog(frame, "Enter URI to open ...");
if (Strings.isNullOrEmpty(userUri)) {
LOGGER.debug("URI import aborted by user.");
return null;
}
try {
URI uri = new URI(userUri);
return modelPackageService.createModelFromUri(uri).block();
} catch (Exception e) {
LOGGER.error("Error opening '{}': {}", userUri, e.getMessage(), e);
return null;
}
}
}