package com.clearlyspam23.GLE.GUI.template; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.EmptyBorder; import com.clearlyspam23.GLE.JAnGLEData; import com.clearlyspam23.GLE.PluginManager; import com.clearlyspam23.GLE.Template; import com.clearlyspam23.GLE.basic.compression.NoCompression; import com.clearlyspam23.GLE.basic.compression.ZipCompression; import com.clearlyspam23.GLE.basic.coordinates.BottomLeft; import com.clearlyspam23.GLE.basic.coordinates.CenteredDown; import com.clearlyspam23.GLE.basic.coordinates.CenteredUp; import com.clearlyspam23.GLE.basic.coordinates.TopLeft; import com.clearlyspam23.GLE.basic.languages.JavaLanguageOptions; import com.clearlyspam23.GLE.basic.layers.tile.TileLayerDefinition; import com.clearlyspam23.GLE.basic.parameters.CurrentLevelMacro; import com.clearlyspam23.GLE.basic.parameters.CurrentTemplateMacro; import com.clearlyspam23.GLE.basic.parameters.ExecutableDirectoryMacro; import com.clearlyspam23.GLE.basic.parameters.ExecutableLocationMacro; import com.clearlyspam23.GLE.basic.parameters.WorkingDirectoryMacro; import com.clearlyspam23.GLE.basic.properties.IntPropertyDefinition; import com.clearlyspam23.GLE.basic.properties.VectorPropertyDefinition; import com.clearlyspam23.GLE.basic.serializers.JsonSerializer; import com.clearlyspam23.GLE.level.LayerDefinition; import com.clearlyspam23.GLE.level.LayerTemplate; import com.clearlyspam23.GLE.util.Utility; public class TemplateDialog extends JDialog implements ActionListener{ /** * */ private static final long serialVersionUID = 1L; private final JPanel contentPanel = new JPanel(); // private final GeneralPanel generalPanel; // private final PLangPanel langPanel; // private final LayerPanel layerPanel; private final List<TemplateSubPanel> subPanels = new ArrayList<TemplateSubPanel>(); private boolean accepted = false; private Template template; private JTabbedPane tabbedPane; /** * Launch the application. */ public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e1) { //honestly, if this doesnt work, whatever we'll use default. should fail silently. } try { PluginManager manager = new PluginManager(); JAnGLEData data = new JAnGLEData(manager); manager.addCoordinateSystems(new TopLeft()); manager.addCoordinateSystems(new BottomLeft()); manager.addCoordinateSystems(new CenteredDown()); manager.addCoordinateSystems(new CenteredUp()); manager.addProgrammingLanguage(new JavaLanguageOptions()); manager.addMacro(new CurrentLevelMacro()); manager.addMacro(new CurrentTemplateMacro()); manager.addMacro(new ExecutableDirectoryMacro()); manager.addMacro(new ExecutableLocationMacro()); manager.addMacro(new WorkingDirectoryMacro()); manager.addProperty(new IntPropertyDefinition()); manager.addProperty(new VectorPropertyDefinition()); manager.addCompression(new NoCompression()); manager.addCompression(new ZipCompression()); manager.addSerializer(new JsonSerializer()); manager.addLayerDefinition(new TileLayerDefinition()); manager.addTemplatePanel(new GeneralPanel(data.getPlugins())); manager.addTemplatePanel(new LayerPanel(data.getPlugins())); manager.addAdvancedTemplatePanel(new PLangPanel(data.getPlugins())); TemplateDialog dialog = new TemplateDialog(data); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.showDialog(); // Template t = dialog.getTemplate(); // TemplateSerializer serializer = new TemplateSerializer(manager); // if(t!=null){ // String s = serializer.serialize(t); // PrintWriter w = new PrintWriter(t.getTemplateFile()); // w.print(s); // w.close(); // Template recreate = serializer.deserialize(s, t.getTemplateFile()); // System.out.println(recreate); // } } catch (Exception e) { e.printStackTrace(); } } private JAnGLEData data; /** * Create the dialog. */ public TemplateDialog(JAnGLEData data) { setModal(true); this.data = data; //this code should be moved somewhere else eventually for(TemplateSubPanel p : data.getPlugins().getTemplatePanels()){ subPanels.add(p); } for(TemplateSubPanel p : data.getPlugins().getAdvancedTemplatePanels()) subPanels.add(p); // subPanels.add(new GeneralPanel(data.getPlugins())); // subPanels.add(new PLangPanel(data.getPlugins())); // subPanels.add(new LayerPanel(data.getPlugins())); setResizable(false); setBounds(100, 100, 580, 680); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); contentPanel.setLayout(new GridLayout(0, 1, 0, 0)); tabbedPane = new JTabbedPane(JTabbedPane.TOP); contentPanel.add(tabbedPane); for(TemplateSubPanel panel : data.getPlugins().getTemplatePanels()) tabbedPane.addTab(panel.getPanelName(), panel); JPanel aPanel = new JPanel(); aPanel.setLayout(new BorderLayout()); JTabbedPane advanced = new JTabbedPane(); aPanel.add(advanced, BorderLayout.CENTER); for(TemplateSubPanel p : data.getPlugins().getAdvancedTemplatePanels()){ advanced.addTab(p.getPanelName(), p); } tabbedPane.addTab("Advanced", advanced); { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton okButton = new JButton("OK"); okButton.setActionCommand("OK"); buttonPane.add(okButton); okButton.addActionListener(this); } { JButton cancelButton = new JButton("Cancel"); cancelButton.setActionCommand("Cancel"); buttonPane.add(cancelButton); getRootPane().setDefaultButton(cancelButton); cancelButton.addActionListener(this); } } } public boolean isAccepted(){ return accepted; } public void showDialog(Template template){ accepted = false; this.template = template; for(TemplateSubPanel p : subPanels) p.reset(); if(template!=null) for(TemplateSubPanel p : subPanels) p.setToTemplate(template); setVisible(true); tabbedPane.setSelectedIndex(0); } public void showDialog(){ showDialog(new Template()); } @SuppressWarnings("rawtypes") @Override public void actionPerformed(ActionEvent e) { accepted = "OK".equals(e.getActionCommand()); if(accepted) { Template template = new Template(); List<String> problems = new ArrayList<String>(); for(TemplateSubPanel p : subPanels){ List<String> issues = p.verify(); if(issues!=null&&!issues.isEmpty()){ for(String s : issues){ problems.add(p.getPanelName() + " : " + s); } } } if(!problems.isEmpty()){ StringBuilder b = new StringBuilder(); for(String s : problems) b.append(s).append(Utility.NEWLINE); JOptionPane.showMessageDialog(this, "Unable to save the Template for the following reasons:" + Utility.NEWLINE + Utility.NEWLINE + b.toString() + Utility.NEWLINE + "Please fix these issues before continuing"); return; } for(TemplateSubPanel p : subPanels) p.generateTemplate(template); Set<LayerDefinition> seen = new HashSet<LayerDefinition>(); for(LayerTemplate lt : template.getLayers()){ if(!seen.contains(lt.getDefinition())){ lt.getDefinition().onTemplateCreation(template); seen.add(lt.getDefinition()); } } this.template = template; if(!data.saveTemplate(template)){ //TODO this is an error, handle it somehow return; } } setVisible(false); } public Template getTemplate() { return template; } public void reset(){ for(TemplateSubPanel p : subPanels) p.reset(); } }