Java tutorial
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author Odyssic */ public class MainFrame extends JFrame { /** * Creates new form MainFrame */ public MainFrame() { initComponents(); } /** * 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() { jTabbedPane1 = new javax.swing.JTabbedPane(); jInternalFrame1 = new javax.swing.JInternalFrame(); umlDesigner1 = new UmlDesigner(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JPopupMenu.Separator(); jMenuItem4 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem(); jMenu2 = new javax.swing.JMenu(); jMenuItem5 = new javax.swing.JMenuItem(); jMenu3 = new javax.swing.JMenu(); jMenuItem6 = new javax.swing.JMenuItem(); jMenuItem7 = new javax.swing.JMenuItem(); jInternalFrame1.setVisible(true); javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout( jInternalFrame1.getContentPane()); jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout); jInternalFrame1Layout.setHorizontalGroup(jInternalFrame1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 0, Short.MAX_VALUE)); jInternalFrame1Layout.setVerticalGroup(jInternalFrame1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 4, Short.MAX_VALUE)); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("UML Class Diagram Designer"); javax.swing.GroupLayout umlDesigner1Layout = new javax.swing.GroupLayout(umlDesigner1); umlDesigner1.setLayout(umlDesigner1Layout); umlDesigner1Layout.setHorizontalGroup(umlDesigner1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 628, Short.MAX_VALUE)); umlDesigner1Layout.setVerticalGroup(umlDesigner1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 398, Short.MAX_VALUE)); jMenu1.setText("File"); jMenu1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenu1ActionPerformed(evt); } }); jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.ALT_MASK)); jMenuItem1.setText("New..."); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); jMenu1.add(jMenuItem1); jMenuItem2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK)); jMenuItem2.setText("Open"); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jMenu1.add(jMenuItem2); jMenu1.add(jSeparator1); jMenuItem4.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.ALT_MASK)); jMenuItem4.setText("Save"); jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem4ActionPerformed(evt); } }); jMenu1.add(jMenuItem4); jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.ALT_MASK)); jMenuItem3.setText("Exit"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); jMenu1.add(jMenuItem3); jMenuBar1.add(jMenu1); jMenu2.setText("Add"); jMenu2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenu2ActionPerformed(evt); } }); jMenuItem5.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK)); jMenuItem5.setText("Class"); jMenuItem5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem5ActionPerformed(evt); } }); jMenu2.add(jMenuItem5); jMenuBar1.add(jMenu2); jMenu3.setText("Scaffold"); jMenuItem6.setText("Java"); jMenuItem6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem6ActionPerformed(evt); } }); jMenu3.add(jMenuItem6); jMenuItem7.setText("C#"); jMenuItem7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem7ActionPerformed(evt); } }); jMenu3.add(jMenuItem7); jMenuBar1.add(jMenu3); setJMenuBar(jMenuBar1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(umlDesigner1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent( umlDesigner1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); pack(); }// </editor-fold>//GEN-END:initComponents private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed if (umlDesigner1.getClasses().isEmpty()) { return; } int newWindow = JOptionPane.showConfirmDialog(null, "Are you sure to lose your unsaved changes?", "New window?", JOptionPane.YES_NO_OPTION); if (newWindow == JOptionPane.YES_OPTION) { umlDesigner1.removeAll(); } else { } }//GEN-LAST:event_jMenuItem1ActionPerformed private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed JFileChooser chooser = new JFileChooser(); if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { return; } File file = chooser.getSelectedFile(); if (file == null) { return; } BufferedReader reader; try { reader = new BufferedReader(new FileReader(file)); StringBuilder sb = new StringBuilder(); String line = reader.readLine(); while (line != null) { sb.append(line); sb.append(System.lineSeparator()); line = reader.readLine(); } String everything = sb.toString(); Gson gson = new Gson(); DiagramProject project = gson.fromJson(everything, new TypeToken<DiagramProject>() { }.getType()); umlDesigner1.setProject(project); umlDesigner1.repaint(); } catch (Exception ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jMenuItem2ActionPerformed private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed Gson gson = new Gson(); String json = gson.toJson(umlDesigner1.getProject()); JFileChooser chooser = new JFileChooser(); if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) { return; } File file = chooser.getSelectedFile(); if (file == null) { return; } FileWriter writer = null; try { writer = new FileWriter(file); writer.write(json); } catch (IOException ex) { JOptionPane.showMessageDialog(this, "File Not Saved", "ERROR", JOptionPane.ERROR_MESSAGE); } finally { if (writer != null) { try { writer.close(); } catch (IOException x) { } } } }//GEN-LAST:event_jMenuItem4ActionPerformed private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed System.exit(0); }//GEN-LAST:event_jMenuItem3ActionPerformed private void jMenu2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenu2ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jMenu2ActionPerformed private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem5ActionPerformed CreateClassDialog createClass = new CreateClassDialog(umlDesigner1); createClass.setVisible(true); }//GEN-LAST:event_jMenuItem5ActionPerformed private void jMenu1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenu1ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jMenu1ActionPerformed private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem6ActionPerformed JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) { return; } File file = chooser.getSelectedFile(); if (file == null) { return; } for (DiagramClass dC : umlDesigner1.getClasses()) { FileWriter classScaffold = null; try { classScaffold = new FileWriter(new File(file, dC.getName() + ".java")); writeJavaFile(classScaffold, dC); } catch (IOException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } finally { try { classScaffold.close(); } catch (IOException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } } } }//GEN-LAST:event_jMenuItem6ActionPerformed private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem7ActionPerformed JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) { return; } File file = chooser.getSelectedFile(); if (file == null) { return; } for (DiagramClass dC : umlDesigner1.getClasses()) { FileWriter classScaffold = null; try { classScaffold = new FileWriter(new File(file, dC.getName() + ".cs")); writeCSharpFile(classScaffold, dC); } catch (IOException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } finally { try { classScaffold.close(); } catch (IOException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } } } }//GEN-LAST:event_jMenuItem7ActionPerformed private void writeJavaFile(FileWriter fw, DiagramClass c) throws IOException { fw.append("public class " + c.getName() + " {\n\n"); // Generate variables. for (DiagramAttribute dA : c.getAttributes()) { // Write AccessModifier. if (dA.getAccess() == DiagramAccessModifier.ACCESS_PRIVATE) { fw.append("\tprivate "); } else if (dA.getAccess() == DiagramAccessModifier.ACCESS_PUBLIC) { fw.append("\tpublic "); } else if (dA.getAccess() == DiagramAccessModifier.ACCESS_PROTECTED) { fw.append("\tprotected "); } else { fw.append("\t"); } // Write DataType. if (dA.getDataType().isEmpty()) { fw.append("Object " + dA.getText() + ";\n\n"); } else { fw.append(dA.getDataType() + " " + dA.getText() + ";\n\n"); } } // Generate members. for (DiagramOperation dO : c.getOperations()) { // Write AccessModifier. if (dO.getAccess() == DiagramAccessModifier.ACCESS_PRIVATE) { fw.append("\tprivate "); } else if (dO.getAccess() == DiagramAccessModifier.ACCESS_PUBLIC) { fw.append("\tpublic "); } else if (dO.getAccess() == DiagramAccessModifier.ACCESS_PROTECTED) { fw.append("\tprotected "); } else { fw.append("\t"); } // Write DateType. if (dO.getDataType().isEmpty()) { fw.append("void "); } else { fw.append(dO.getDataType() + " "); } //Write name of method. fw.append(dO.getText() + "() {\n\n }\n\n"); } fw.append("}"); } private void writeCSharpFile(FileWriter fw, DiagramClass c) throws IOException { fw.append("public class " + c.getName() + " \n{\n"); // Generate variables. for (DiagramAttribute dA : c.getAttributes()) { // Write AccessModifier. if (dA.getAccess() == DiagramAccessModifier.ACCESS_PRIVATE) { fw.append("\tprivate "); } else if (dA.getAccess() == DiagramAccessModifier.ACCESS_PUBLIC) { fw.append("\tpublic "); } else if (dA.getAccess() == DiagramAccessModifier.ACCESS_PROTECTED) { fw.append("\tprotected "); } else { fw.append("\t"); } // Write DataType. if (dA.getDataType().isEmpty()) { fw.append("Object " + dA.getText() + ";\n\n"); } else { fw.append(dA.getDataType() + " " + dA.getText() + ";\n\n"); } } // Generate members. for (DiagramOperation dO : c.getOperations()) { // Write AccessModifier. if (dO.getAccess() == DiagramAccessModifier.ACCESS_PRIVATE) { fw.append("\tprivate "); } else if (dO.getAccess() == DiagramAccessModifier.ACCESS_PUBLIC) { fw.append("\tpublic "); } else if (dO.getAccess() == DiagramAccessModifier.ACCESS_PROTECTED) { fw.append("\tprotected "); } else { fw.append("\t"); } // Write DateType. if (dO.getDataType().isEmpty()) { fw.append("void "); } else { fw.append(dO.getDataType() + " "); } //Write name of method. fw.append(dO.getText() + "()\n\t{\n\t}\n\n"); } fw.append("}"); } /** * @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(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new MainFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JInternalFrame jInternalFrame1; private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenu jMenu3; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem3; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JMenuItem jMenuItem5; private javax.swing.JMenuItem jMenuItem6; private javax.swing.JMenuItem jMenuItem7; private javax.swing.JPopupMenu.Separator jSeparator1; private javax.swing.JTabbedPane jTabbedPane1; private UmlDesigner umlDesigner1; // End of variables declaration//GEN-END:variables }