/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.opentrafficsimulation.gui; import com.opentrafficsimulation.connector.Connector; import com.opentrafficsimulation.connector.utility.ConnectorType; import com.opentrafficsimulation.editor.light.LightEditor; import java.awt.image.BufferedImage; import com.opentrafficsimulation.gui.utility.AssetUtility; import com.opentrafficsimulation.gui.utility.ExtensionFileFilterUtility; import com.opentrafficsimulation.gui.utility.InputFilterUtility; import java.awt.Color; import java.util.ArrayList; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import javax.swing.text.PlainDocument; /** * * @author macromania */ public class CreateMapFrame extends javax.swing.JFrame { // Logo of the project public static BufferedImage logo; // Singleton instance private static CreateMapFrame createMapFrame = new CreateMapFrame(); private int lane_num, grid_num, arm_num, circle_num, iteration_num, max_distance, min_distance; private double lane_speed, grid_length, space_radius; public String netgenerate_file; private String osmnet_file = "osmNet.net.xml"; public String osmFile_path; private JFileChooser chooser; /** * Creates new form CreateMapFrame */ private CreateMapFrame() { initComponents(); // Hide panels with respect to combobox value updateTypes(); // Set input filters setInputFilters(); } public static CreateMapFrame getInstance() { return createMapFrame; } private void updateTypes() { jPanelGrid.setVisible(false); jPanelRandom.setVisible(false); jPanelSpider.setVisible(false); if (jComboBoxType.getSelectedIndex() == 0) { jPanelGrid.setVisible(true); } else if (jComboBoxType.getSelectedIndex() == 1) { jPanelSpider.setVisible(true); } else if (jComboBoxType.getSelectedIndex() == 2) { jPanelRandom.setVisible(true); } } private void setInputFilters() { PlainDocument doc = (PlainDocument) jTextFieldArmNumber.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldCirleNumber.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldGridLength.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldGridNumber.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldIteration.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldLanes.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldMaximumDistance.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldMinimumDistance.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldSpaceRadius.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); doc = (PlainDocument) jTextFieldSpeed.getDocument(); doc.setDocumentFilter(new InputFilterUtility()); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabelCreateMap = new javax.swing.JLabel(); jPanelUpper = new javax.swing.JPanel(); jLabelName = new javax.swing.JLabel(); jTextFieldName = new javax.swing.JTextField(); jLabelLanes = new javax.swing.JLabel(); jTextFieldLanes = new javax.swing.JTextField(); jLabelSpeed = new javax.swing.JLabel(); jTextFieldSpeed = new javax.swing.JTextField(); jComboBoxType = new javax.swing.JComboBox(); jPanelSelection = new javax.swing.JPanel(); jPanelRandom = new javax.swing.JPanel(); jTextFieldIteration = new javax.swing.JTextField(); jLabelIterations = new javax.swing.JLabel(); jLabelMaximumDistance = new javax.swing.JLabel(); jTextFieldMaximumDistance = new javax.swing.JTextField(); jTextFieldMinimumDistance = new javax.swing.JTextField(); jLabelMinimumDistance = new javax.swing.JLabel(); jPanelSpider = new javax.swing.JPanel(); jTextFieldArmNumber = new javax.swing.JTextField(); jLabelArmNumber = new javax.swing.JLabel(); jLabelCircleNumber = new javax.swing.JLabel(); jTextFieldCirleNumber = new javax.swing.JTextField(); jLabelSpaceRadius = new javax.swing.JLabel(); jTextFieldSpaceRadius = new javax.swing.JTextField(); jPanelGrid = new javax.swing.JPanel(); jLabelNameGridNumber = new javax.swing.JLabel(); jTextFieldGridNumber = new javax.swing.JTextField(); jLabelNameGridLength = new javax.swing.JLabel(); jTextFieldGridLength = new javax.swing.JTextField(); jLabelType1 = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jSeparator1 = new javax.swing.JSeparator(); jLabelOr = new javax.swing.JLabel(); jSeparator3 = new javax.swing.JSeparator(); jPanel2 = new javax.swing.JPanel(); jLabelCreateMap1 = new javax.swing.JLabel(); jButtonFileChooser = new javax.swing.JButton(); jLabelFileName = new javax.swing.JLabel(); jButtonImport = new javax.swing.JButton(); jButtonCancelSelection = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); jButtonCreateMap = new javax.swing.JButton(); jSeparator2 = new javax.swing.JSeparator(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Create Map - Open Traffic Simulation"); setIconImage(new AssetUtility().getLogo()); setPreferredSize(new java.awt.Dimension(800, 500)); setResizable(false); jLabelCreateMap.setBackground(new java.awt.Color(227, 225, 225)); jLabelCreateMap.setFont(new java.awt.Font("Arial", 0, 30)); // NOI18N jLabelCreateMap.setForeground(new java.awt.Color(30, 15, 42)); jLabelCreateMap.setText("Create Map"); jPanelUpper.setPreferredSize(new java.awt.Dimension(772, 150)); jLabelName.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelName.setText("Name"); jTextFieldName.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelLanes.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelLanes.setText("Lanes (1-3)"); jTextFieldLanes.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelSpeed.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelSpeed.setText("Speed (10-99)"); jTextFieldSpeed.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jComboBoxType.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jComboBoxType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Grid", "Spider", "Random" })); jComboBoxType.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jComboBoxTypeActionPerformed(evt); } }); jTextFieldIteration.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelIterations.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelIterations.setText("Iterations (10-40)"); jLabelMaximumDistance.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelMaximumDistance.setText("Max. Distance (40-80)"); jTextFieldMaximumDistance.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jTextFieldMinimumDistance.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelMinimumDistance.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelMinimumDistance.setText("Min. Distance (20-40)"); javax.swing.GroupLayout jPanelRandomLayout = new javax.swing.GroupLayout(jPanelRandom); jPanelRandom.setLayout(jPanelRandomLayout); jPanelRandomLayout.setHorizontalGroup( jPanelRandomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelRandomLayout.createSequentialGroup() .addGroup(jPanelRandomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelIterations) .addComponent(jTextFieldIteration, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelRandomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelMaximumDistance) .addComponent(jTextFieldMaximumDistance, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelRandomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelMinimumDistance) .addComponent(jTextFieldMinimumDistance, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(24, 24, 24)) ); jPanelRandomLayout.setVerticalGroup( jPanelRandomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRandomLayout.createSequentialGroup() .addComponent(jLabelMaximumDistance, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldMaximumDistance, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRandomLayout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addGroup(jPanelRandomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRandomLayout.createSequentialGroup() .addComponent(jLabelMinimumDistance, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldMinimumDistance, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRandomLayout.createSequentialGroup() .addComponent(jLabelIterations) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jTextFieldIteration, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)))) ); jTextFieldArmNumber.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelArmNumber.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelArmNumber.setText("Arm Number (3-6)"); jLabelCircleNumber.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelCircleNumber.setText("Circle Number (2-6)"); jTextFieldCirleNumber.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelSpaceRadius.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelSpaceRadius.setText("Space Radius (20-80)"); jTextFieldSpaceRadius.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N javax.swing.GroupLayout jPanelSpiderLayout = new javax.swing.GroupLayout(jPanelSpider); jPanelSpider.setLayout(jPanelSpiderLayout); jPanelSpiderLayout.setHorizontalGroup( jPanelSpiderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelSpiderLayout.createSequentialGroup() .addGroup(jPanelSpiderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelArmNumber) .addComponent(jTextFieldArmNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelSpiderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelCircleNumber) .addComponent(jTextFieldCirleNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelSpiderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelSpaceRadius) .addComponent(jTextFieldSpaceRadius, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(26, 26, 26)) ); jPanelSpiderLayout.setVerticalGroup( jPanelSpiderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelSpiderLayout.createSequentialGroup() .addGroup(jPanelSpiderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(jPanelSpiderLayout.createSequentialGroup() .addComponent(jLabelSpaceRadius, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldSpaceRadius, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanelSpiderLayout.createSequentialGroup() .addComponent(jLabelCircleNumber, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldCirleNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanelSpiderLayout.createSequentialGroup() .addComponent(jLabelArmNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldArmNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(0, 0, Short.MAX_VALUE)) ); jLabelNameGridNumber.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelNameGridNumber.setText("Grid Number (2-6)"); jTextFieldGridNumber.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelNameGridLength.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelNameGridLength.setText("Grid Length (30-80)"); jTextFieldGridLength.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N javax.swing.GroupLayout jPanelGridLayout = new javax.swing.GroupLayout(jPanelGrid); jPanelGrid.setLayout(jPanelGridLayout); jPanelGridLayout.setHorizontalGroup( jPanelGridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelGridLayout.createSequentialGroup() .addGroup(jPanelGridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelNameGridNumber) .addComponent(jTextFieldGridNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelGridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelNameGridLength) .addComponent(jTextFieldGridLength, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE)) ); jPanelGridLayout.setVerticalGroup( jPanelGridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelGridLayout.createSequentialGroup() .addGroup(jPanelGridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanelGridLayout.createSequentialGroup() .addComponent(jLabelNameGridLength, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldGridLength, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanelGridLayout.createSequentialGroup() .addComponent(jLabelNameGridNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldGridNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout jPanelSelectionLayout = new javax.swing.GroupLayout(jPanelSelection); jPanelSelection.setLayout(jPanelSelectionLayout); jPanelSelectionLayout.setHorizontalGroup( jPanelSelectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelRandom, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanelSpider, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanelGrid, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); jPanelSelectionLayout.setVerticalGroup( jPanelSelectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelSelectionLayout.createSequentialGroup() .addContainerGap() .addComponent(jPanelGrid, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanelSpider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanelRandom, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jLabelType1.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelType1.setText("Type"); javax.swing.GroupLayout jPanelUpperLayout = new javax.swing.GroupLayout(jPanelUpper); jPanelUpper.setLayout(jPanelUpperLayout); jPanelUpperLayout.setHorizontalGroup( jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelUpperLayout.createSequentialGroup() .addGap(1, 1, 1) .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelName) .addComponent(jTextFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabelType1) .addComponent(jComboBoxType, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelUpperLayout.createSequentialGroup() .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelLanes) .addComponent(jTextFieldLanes, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTextFieldSpeed, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabelSpeed)) .addGap(1, 1, 1)) .addComponent(jPanelSelection, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanelUpperLayout.setVerticalGroup( jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelUpperLayout.createSequentialGroup() .addContainerGap() .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabelName) .addComponent(jLabelLanes) .addComponent(jLabelSpeed)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jTextFieldLanes, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jTextFieldSpeed, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanelUpperLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelUpperLayout.createSequentialGroup() .addGap(1, 1, 1) .addComponent(jPanelSelection, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addContainerGap()) .addGroup(jPanelUpperLayout.createSequentialGroup() .addGap(15, 15, 15) .addComponent(jLabelType1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jComboBoxType, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); jLabelOr.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelOr.setText("OR"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(1, 1, 1) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 326, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelOr) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSeparator3, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jSeparator3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabelOr, javax.swing.GroupLayout.Alignment.TRAILING) ); jLabelCreateMap1.setBackground(new java.awt.Color(227, 225, 225)); jLabelCreateMap1.setFont(new java.awt.Font("Arial", 0, 30)); // NOI18N jLabelCreateMap1.setForeground(new java.awt.Color(30, 15, 42)); jLabelCreateMap1.setText("Import Open Street Map"); jButtonFileChooser.setText("Choose File"); jButtonFileChooser.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonFileChooserActionPerformed(evt); } }); jLabelFileName.setFont(new java.awt.Font("Arial", 0, 15)); // NOI18N jLabelFileName.setText("You haven't selected a map file."); jButtonImport.setText("Import"); jButtonImport.setEnabled(false); jButtonImport.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonImportActionPerformed(evt); } }); jButtonCancelSelection.setText("Reset"); jButtonCancelSelection.setEnabled(false); jButtonCancelSelection.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCancelSelectionActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelCreateMap1) .addComponent(jLabelFileName) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jButtonFileChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonImport, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(7, 7, 7) .addComponent(jButtonCancelSelection, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(0, 610, Short.MAX_VALUE)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabelCreateMap1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelFileName) .addGap(7, 7, 7) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jButtonImport, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE) .addComponent(jButtonCancelSelection, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButtonFileChooser, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 726, Short.MAX_VALUE) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 20, Short.MAX_VALUE) ); jButtonCreateMap.setText("Continue"); jButtonCreateMap.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCreateMapActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(23, 23, 23) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelUpper, javax.swing.GroupLayout.DEFAULT_SIZE, 1658, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jButtonCreateMap, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabelCreateMap) .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 717, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(22, 22, 22) .addComponent(jLabelCreateMap) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanelUpper, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 9, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(2, 2, 2) .addComponent(jButtonCreateMap, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(2, 2, 2) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); setLocationRelativeTo(null); }// </editor-fold>//GEN-END:initComponents private void jComboBoxTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxTypeActionPerformed updateTypes(); }//GEN-LAST:event_jComboBoxTypeActionPerformed public void createMap(){ String Options = ""; String pattern = "[0-9A-Za-z]*"; boolean isSuccess = false; boolean isValid = true; ArrayList<String> errorMessages = new ArrayList<String>(); Connector connector = new Connector(ConnectorType.CONNECTOR_NETGENERATE); // Check file name if (jTextFieldName.getText().length() < 1) { errorMessages.add("Please enter map name!"); jTextFieldName.setBackground(Color.PINK); isValid = false; } else { if (!jTextFieldName.getText().matches(pattern)) { errorMessages.add("File name is not valid! Only letters and digits are allowed."); jTextFieldName.setBackground(Color.PINK); isValid = false; } else { netgenerate_file = jTextFieldName.getText(); jTextFieldName.setBackground(Color.WHITE); } } // Check lane and speed if (jTextFieldLanes.getText().length() < 1 || jTextFieldSpeed.getText().length() < 1) { errorMessages.add("Please set all values!"); jTextFieldLanes.setBackground(Color.PINK); jTextFieldSpeed.setBackground(Color.PINK); isValid = false; } else { lane_num = Integer.parseInt(jTextFieldLanes.getText()); lane_speed = Double.parseDouble(jTextFieldSpeed.getText()); if (lane_num < 1 || lane_num > 3 || (jTextFieldLanes.getText() == null)) { jTextFieldLanes.setBackground(Color.PINK); errorMessages.add("Please check lane value!"); isValid = false; } else { jTextFieldLanes.setBackground(Color.WHITE); } if (lane_speed < 10 || lane_speed > 99 || (jTextFieldSpeed.getText() == null)) { jTextFieldSpeed.setBackground(Color.PINK); errorMessages.add("Please check speed value!"); isValid = false; } else { jTextFieldSpeed.setBackground(Color.WHITE); } } // Check selected type if (jComboBoxType.getSelectedIndex() == 0) { // Grid if (jTextFieldGridLength.getText().length() < 1 || jTextFieldGridNumber.getText().length() < 1) { errorMessages.add("Please enter grid number and grid length values!"); isValid = false; } else { grid_num = Integer.parseInt(jTextFieldGridNumber.getText()); grid_length = Double.parseDouble(jTextFieldGridLength.getText()); if (grid_num < 2 || grid_num > 6 || (jTextFieldGridNumber.getText() == null)) { jTextFieldGridNumber.setBackground(Color.PINK); isValid = false; } else { jTextFieldGridNumber.setBackground(Color.WHITE); } if (grid_length < 30 || grid_length > 80 || (jTextFieldGridLength.getText() == null)) { jTextFieldGridLength.setBackground(Color.PINK); isValid = false; } else { jTextFieldGridLength.setBackground(Color.WHITE); } if (isValid) { Options = "--grid"; Options += " --grid.number=" + grid_num; Options += " --grid.length=" + grid_length; Options += " -L=" + lane_num + " -S=" + lane_speed; Options += " --output-file=" + connector.getOutputDir() + netgenerate_file + ".net.xml"; } else { errorMessages.add("Please check grid number and grid length values!"); } } } else if (jComboBoxType.getSelectedIndex() == 1) { // Spider if (jTextFieldArmNumber.getText().length() < 1 || jTextFieldCirleNumber.getText().length() < 1 || jTextFieldSpaceRadius.getText().length() < 1) { errorMessages.add("Please enter arm,circle and space radius number values!"); isValid = false; } else { arm_num = Integer.parseInt(jTextFieldArmNumber.getText()); circle_num = Integer.parseInt(jTextFieldCirleNumber.getText()); space_radius = Double.parseDouble(jTextFieldSpaceRadius.getText()); if (arm_num < 3 || arm_num > 6 || (jTextFieldArmNumber.getText() == null)) { jTextFieldArmNumber.setBackground(Color.PINK); isValid = false; } else { jTextFieldArmNumber.setBackground(Color.WHITE); } if (circle_num < 2 || circle_num > 6 || (jTextFieldCirleNumber.getText() == null)) { jTextFieldCirleNumber.setBackground(Color.PINK); isValid = false; } else { jTextFieldCirleNumber.setBackground(Color.WHITE); } if (space_radius < 20 || space_radius > 80 || (jTextFieldSpaceRadius.getText() == null)) { jTextFieldSpaceRadius.setBackground(Color.PINK); isValid = false; } else { jTextFieldSpaceRadius.setBackground(Color.WHITE); } if (isValid) { Options = "--spider-net"; Options += " --spider-arm-number=" + arm_num; Options += " --spider-circle-number=" + circle_num; Options += " --spider-space-rad=" + space_radius; Options += " -L=" + lane_num + " -S=" + lane_speed; Options += " --output-file=" + connector.getOutputDir() + netgenerate_file + ".net.xml"; } else { errorMessages.add("Please check arm,circle and space radius number values!"); } } } else if (jComboBoxType.getSelectedIndex() == 2) { // Random if (jTextFieldIteration.getText().length() < 1 || jTextFieldMaximumDistance.getText().length() < 1 || jTextFieldMinimumDistance.getText().length() < 1) { errorMessages.add("Please enter iteration,minimum distance and maximum distance number values!"); isValid = false; } else { iteration_num = Integer.parseInt(jTextFieldIteration.getText()); max_distance = Integer.parseInt(jTextFieldMaximumDistance.getText()); min_distance = Integer.parseInt(jTextFieldMinimumDistance.getText()); if (iteration_num < 10 || iteration_num > 40 || (jTextFieldIteration.getText() == null)) { jTextFieldIteration.setBackground(Color.PINK); isValid = false; } else { jTextFieldIteration.setBackground(Color.WHITE); } if (max_distance < 40 || max_distance > 80 || (jTextFieldMaximumDistance.getText() == null)) { jTextFieldMaximumDistance.setBackground(Color.PINK); isValid = false; } else { jTextFieldMaximumDistance.setBackground(Color.WHITE); } if (min_distance < 20 || min_distance > 40 || (jTextFieldMinimumDistance.getText() == null)) { jTextFieldMinimumDistance.setBackground(Color.PINK); isValid = false; } else { jTextFieldMinimumDistance.setBackground(Color.WHITE); } if (isValid) { Options = "--random-net"; Options += " --rand-iterations=" + iteration_num; Options += " --rand-max-distance=" + max_distance; Options += " --rand-min-distance=" + min_distance; Options += " -L=" + lane_num + " -S=" + lane_speed; Options += " --output-file=" + connector.getOutputDir() + netgenerate_file + ".net.xml"; } else { errorMessages.add("Please check iteration,minimum distance and maximum distance number values!"); } } } if (isValid) { isSuccess = connector.runCommand(Options); } else { String errorMessage = "Please complete following errors!\n"; for (int i = 0; i < errorMessages.size(); i++) { errorMessage += errorMessages.get(i) + "\n"; } JOptionPane.showMessageDialog(null, errorMessage); } // Goto next screen if (isSuccess) { LightEditor.getInstance().networkFile = new Connector(ConnectorType.CONNECTOR_NETGENERATE).getOutputDir() + netgenerate_file + ".net.xml"; this.setVisible(false); CreateSimulationFrame.getInstance().setVisible(true); CreateSimulationFrame.getInstance().createJunctions(); } else { if (isValid) { JOptionPane.showMessageDialog(null, "The map creation has failed!"); } } } private void jButtonCreateMapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCreateMapActionPerformed createMap(); }//GEN-LAST:event_jButtonCreateMapActionPerformed private void jButtonFileChooserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonFileChooserActionPerformed chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("Select OSM file"); FileFilter xmlFilter = new ExtensionFileFilterUtility("OSM File(*.osm.xml)", "osm.xml"); chooser.setFileFilter(xmlFilter); chooser.addChoosableFileFilter(xmlFilter); chooser.setAcceptAllFileFilterUsed(false); if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) { osmFile_path = chooser.getSelectedFile().getAbsolutePath(); jLabelFileName.setText("File: " + osmFile_path); jButtonFileChooser.setEnabled(false); jButtonImport.setEnabled(true); jButtonCancelSelection.setEnabled(true); } else { //JOptionPane.showMessageDialog(null, "You haven't chosen an OSM file!"); } }//GEN-LAST:event_jButtonFileChooserActionPerformed private void jButtonCancelSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelSelectionActionPerformed osmFile_path = ""; jLabelFileName.setText("You haven't selected a map file."); jButtonFileChooser.setEnabled(true); jButtonImport.setEnabled(false); jButtonCancelSelection.setEnabled(false); }//GEN-LAST:event_jButtonCancelSelectionActionPerformed private void jButtonImportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonImportActionPerformed osmnet_file = Math.random() + "osm"; osmnet_file.replace(".", ""); String Options; Connector connector = new Connector( ConnectorType.CONNECTOR_NETCONVERT); Options = " --osm-files=" + osmFile_path; Options += " -o=" + connector.getOutputDir() + osmnet_file + ".net.xml"; boolean isSuccess = connector.runCommand(Options); // Goto next screen if (isSuccess) { netgenerate_file = osmnet_file; LightEditor.getInstance().networkFile = new Connector(ConnectorType.CONNECTOR_NETGENERATE).getOutputDir() + netgenerate_file + ".net.xml"; this.setVisible(false); CreateSimulationFrame.getInstance().setVisible(true); } else { JOptionPane.showMessageDialog(null, "The map creation has failed!"); } }//GEN-LAST:event_jButtonImportActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(CreateMapFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(CreateMapFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(CreateMapFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(CreateMapFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new CreateMapFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonCancelSelection; private javax.swing.JButton jButtonCreateMap; private javax.swing.JButton jButtonFileChooser; private javax.swing.JButton jButtonImport; private javax.swing.JComboBox jComboBoxType; private javax.swing.JLabel jLabelArmNumber; private javax.swing.JLabel jLabelCircleNumber; private javax.swing.JLabel jLabelCreateMap; private javax.swing.JLabel jLabelCreateMap1; private javax.swing.JLabel jLabelFileName; private javax.swing.JLabel jLabelIterations; private javax.swing.JLabel jLabelLanes; private javax.swing.JLabel jLabelMaximumDistance; private javax.swing.JLabel jLabelMinimumDistance; private javax.swing.JLabel jLabelName; private javax.swing.JLabel jLabelNameGridLength; private javax.swing.JLabel jLabelNameGridNumber; private javax.swing.JLabel jLabelOr; private javax.swing.JLabel jLabelSpaceRadius; private javax.swing.JLabel jLabelSpeed; private javax.swing.JLabel jLabelType1; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanelGrid; private javax.swing.JPanel jPanelRandom; private javax.swing.JPanel jPanelSelection; private javax.swing.JPanel jPanelSpider; private javax.swing.JPanel jPanelUpper; private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator2; private javax.swing.JSeparator jSeparator3; private javax.swing.JTextField jTextFieldArmNumber; private javax.swing.JTextField jTextFieldCirleNumber; private javax.swing.JTextField jTextFieldGridLength; private javax.swing.JTextField jTextFieldGridNumber; private javax.swing.JTextField jTextFieldIteration; private javax.swing.JTextField jTextFieldLanes; private javax.swing.JTextField jTextFieldMaximumDistance; private javax.swing.JTextField jTextFieldMinimumDistance; private javax.swing.JTextField jTextFieldName; private javax.swing.JTextField jTextFieldSpaceRadius; private javax.swing.JTextField jTextFieldSpeed; // End of variables declaration//GEN-END:variables }