corpus-services  1.0
MergeFrame.java
Go to the documentation of this file.
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 package de.uni_hamburg.corpora.swing;
7 
8 import java.awt.Color;
9 import java.util.ArrayList;
10 import javax.swing.JTextPane;
11 import javax.swing.text.DefaultStyledDocument;
12 import javax.swing.text.SimpleAttributeSet;
13 import javax.swing.text.StyleConstants;
14 import javax.swing.text.StyledDocument;
15 
20 public class MergeFrame extends javax.swing.JFrame {
21 
22  ExbMergerGUI mainPage;
23 
27  public MergeFrame() {
28  initComponents();
29 
30  }
31 
32  public MergeFrame(ExbMergerGUI mainPage) {
33  this();
34  this.mainPage = mainPage;
35  String firstVersion = mainPage.instance.exbStrings.get(mainPage.transcriptName);
36  String secondVersion = mainPage.instance.exbStringsTwo.get(mainPage.transcriptName);
37  String[] dif = mainPage.instance.compareTwoExbs(firstVersion,
38  secondVersion);
39  StyledDocument doc = new DefaultStyledDocument();
40  StyledDocument secondDoc = new DefaultStyledDocument();
41  firstPane.setDocument(doc);
42  secondPane.setDocument(secondDoc);
43  firstPane.setText(firstVersion);
44  secondPane.setText(secondVersion);
45  SimpleAttributeSet set = new SimpleAttributeSet();
46  StyleConstants.setBackground(set, new Color(255, 255, 0));
47  String difPart = "";
48  String[] firstLines = firstVersion.split("\n");
49  String[] firstDifLines = dif[0].split("\n");
50  String[] secondLines = secondVersion.split("\n");
51  String[] secondDifLines = dif[1].split("\n");
52  int lineCounter = 0;
53  int lineOffset = 0;
54  for (int i = 0; i < dif[0].length(); i++) {
55  if (dif[0].charAt(i) == '\n') {
56  lineCounter++;
57  lineOffset = 0;
58  } else if (dif[0].charAt(i) != ' ' && dif[0].charAt(i) != '"'
59  && dif[0].charAt(i) != '/' && dif[0].charAt(i) != '>') {
60  difPart += Character.toString(dif[0].charAt(i));
61  } else if (difPart != "") {
62  int offsetLine = firstVersion.indexOf(firstLines[lineCounter]) + lineOffset;
63  int offset = firstVersion.indexOf(difPart, offsetLine - 1);
64  /*if (offset == -1) {
65  offset = firstVersion.lastIndexOf(difPart, i - difPart.length());
66  }*/
67  doc.setCharacterAttributes(offset, difPart.length(), set, true);
68  difPart = "";
69  } else {
70  lineOffset++;
71  }
72  }
73  difPart = "";
74  lineOffset = 0;
75  lineCounter = 0;
76  for (int i = 0; i < dif[1].length(); i++) {
77  if (dif[1].charAt(i) == '\n') {
78  lineCounter++;
79  lineOffset = 0;
80  } else if (dif[1].charAt(i) != ' ' && dif[1].charAt(i) != '"'
81  && dif[1].charAt(i) != '/' && dif[1].charAt(i) != '>') {
82  difPart += Character.toString(dif[1].charAt(i));
83  } else if (difPart != "") {
84  int offsetLine = secondVersion.indexOf(secondLines[lineCounter]) + lineOffset;
85  int offset = secondVersion.indexOf(difPart, offsetLine - 1);
86  secondDoc.setCharacterAttributes(offset, difPart.length(), set, true);
87  difPart = "";
88  } else {
89  lineOffset++;
90  }
91  }
92  }
93 
99  @SuppressWarnings("unchecked")
100  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
101  private void initComponents() {
102 
103  jPanel1 = new javax.swing.JPanel();
104  jLabel1 = new javax.swing.JLabel();
105  jPanel2 = new javax.swing.JPanel();
106  jScrollPane1 = new javax.swing.JScrollPane();
107  firstPane = new javax.swing.JTextPane();
108  jPanel3 = new javax.swing.JPanel();
109  jScrollPane2 = new javax.swing.JScrollPane();
110  secondPane = new javax.swing.JTextPane();
111  backButton = new javax.swing.JButton();
112 
113  setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
114 
115  jLabel1.setFont(new java.awt.Font("SansSerif", 1, 24)); // NOI18N
116  jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
117  jLabel1.setText("Different Lines Between the Two Versions");
118 
119  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
120  jPanel1.setLayout(jPanel1Layout);
121  jPanel1Layout.setHorizontalGroup(
122  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
123  .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
124  );
125  jPanel1Layout.setVerticalGroup(
126  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
127  .addGroup(jPanel1Layout.createSequentialGroup()
128  .addComponent(jLabel1)
129  .addGap(0, 0, Short.MAX_VALUE))
130  );
131 
132  jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "First Version ", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("SansSerif", 1, 14))); // NOI18N
133 
134  jScrollPane1.setViewportView(firstPane);
135 
136  javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
137  jPanel2.setLayout(jPanel2Layout);
138  jPanel2Layout.setHorizontalGroup(
139  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
140  .addGroup(jPanel2Layout.createSequentialGroup()
141  .addContainerGap()
142  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE)
143  .addContainerGap())
144  );
145  jPanel2Layout.setVerticalGroup(
146  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
147  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE)
148  );
149 
150  jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Second Version", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("SansSerif", 1, 14))); // NOI18N
151 
152  jScrollPane2.setViewportView(secondPane);
153 
154  javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
155  jPanel3.setLayout(jPanel3Layout);
156  jPanel3Layout.setHorizontalGroup(
157  jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
158  .addGroup(jPanel3Layout.createSequentialGroup()
159  .addContainerGap()
160  .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
161  .addContainerGap())
162  );
163  jPanel3Layout.setVerticalGroup(
164  jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
165  .addComponent(jScrollPane2)
166  );
167 
168  backButton.setText("Back");
169  backButton.addActionListener(new java.awt.event.ActionListener() {
170  public void actionPerformed(java.awt.event.ActionEvent evt) {
171  backButtonActionPerformed(evt);
172  }
173  });
174 
175  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
176  getContentPane().setLayout(layout);
177  layout.setHorizontalGroup(
178  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
179  .addGroup(layout.createSequentialGroup()
180  .addContainerGap()
181  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
182  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
183  .addGroup(layout.createSequentialGroup()
184  .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
185  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
186  .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
187  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
188  .addGap(0, 0, Short.MAX_VALUE)
189  .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)))
190  .addContainerGap())
191  );
192  layout.setVerticalGroup(
193  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
194  .addGroup(layout.createSequentialGroup()
195  .addContainerGap()
196  .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
197  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
198  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
199  .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
200  .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
201  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
202  .addComponent(backButton)
203  .addGap(17, 17, 17))
204  );
205 
206  pack();
207  }// </editor-fold>//GEN-END:initComponents
208 
209  private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed
210  setVisible(false);
211  mainPage.setVisible(true);
212  }//GEN-LAST:event_backButtonActionPerformed
213 
217  public static void main(String args[]) {
218  /* Set the Nimbus look and feel */
219  //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
220  /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
221  * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
222  */
223  try {
224  for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
225  if ("Nimbus".equals(info.getName())) {
226  javax.swing.UIManager.setLookAndFeel(info.getClassName());
227  break;
228  }
229  }
230  } catch (ClassNotFoundException ex) {
231  java.util.logging.Logger.getLogger(MergeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
232  } catch (InstantiationException ex) {
233  java.util.logging.Logger.getLogger(MergeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
234  } catch (IllegalAccessException ex) {
235  java.util.logging.Logger.getLogger(MergeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
236  } catch (javax.swing.UnsupportedLookAndFeelException ex) {
237  java.util.logging.Logger.getLogger(MergeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
238  }
239  //</editor-fold>
240 
241  /* Create and display the form */
242  java.awt.EventQueue.invokeLater(new Runnable() {
243  public void run() {
244  new MergeFrame().setVisible(true);
245  }
246  });
247  }
248 
249  // Variables declaration - do not modify//GEN-BEGIN:variables
250  private javax.swing.JButton backButton;
251  private javax.swing.JTextPane firstPane;
252  private javax.swing.JLabel jLabel1;
253  private javax.swing.JPanel jPanel1;
254  private javax.swing.JPanel jPanel2;
255  private javax.swing.JPanel jPanel3;
256  private javax.swing.JScrollPane jScrollPane1;
257  private javax.swing.JScrollPane jScrollPane2;
258  private javax.swing.JTextPane secondPane;
259  // End of variables declaration//GEN-END:variables
260 }
HashMap< String, String > exbStrings
Definition: ExbMerger.java:41
String[] compareTwoExbs(String firstExb, String secondExb)
Definition: ExbMerger.java:359
HashMap< String, String > exbStringsTwo
Definition: ExbMerger.java:42
static void main(String args[])