private void updateCategory() throws Exception { int id = 0; for (LabelGroup group : labelGroups) { CCategory groupCategory = null; for (CLabel label : group.labels) { CCategory labelCategory = label.getCategory(); if (null == groupCategory && null != labelCategory) { groupCategory = labelCategory; } if (null != groupCategory && !labelCategory.equals(groupCategory)) { // TODO generating an exception or warning throw new Exception( String.format( "Labels in the same group are belong more than one categories: \"%s\" and \"%s\"", groupCategory.getName(), labelCategory.getName())); } } if (null == groupCategory) { id++; try { category = getOwner().getLocalCategoryBox().newCategory(GROUP_FIELD_NAME + id); } catch (Exception e) { // TODO is it possible? e.printStackTrace(); } } for (CLabel label : group.labels) { label.setCategory(category); } } }
private void initLabelGroups() { if (labelPairs.size() == 0) return; List<LabelPair> tempPairs = new ArrayList(labelPairs.size()); tempPairs.addAll(labelPairs); Stack<CLabel> groupStack = new Stack<CLabel>(); List<LabelPair> trash = new ArrayList<LabelPair>(); while (tempPairs.size() > 0) { LabelPair pair0 = tempPairs.get(0); LabelGroup group = newLabelGroup(); group.addLabel(pair0.label1); group.addLabel(pair0.label2); groupStack.push(pair0.label1); groupStack.push(pair0.label2); tempPairs.remove(0); while (!groupStack.empty()) { CLabel groupedLabel = groupStack.pop(); Iterator<LabelPair> pairs = tempPairs.iterator(); while (pairs.hasNext()) { LabelPair pair = pairs.next(); CLabel candidate = groupedLabel.equals(pair.label1) ? pair.label2 : groupedLabel.equals(pair.label2) ? pair.label1 : null; if (null == candidate) continue; if (!groupStack.contains(candidate)) { groupStack.push(candidate); group.labels.add(candidate); } trash.add(pair); pairs.remove(); } } tempPairs.removeAll(trash); trash.clear(); } }
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; linesLayer = new JPanel() { protected void paintComponent(Graphics g) { super.paintComponent(g); drawLines(g); } }; CPanel = new javax.swing.JPanel(); CLabel = new javax.swing.JLabel(); towerLayer = new javax.swing.JPanel(); ZQPanel = new javax.swing.JPanel(); QLabel = new javax.swing.JLabel(); setLayout(new java.awt.BorderLayout()); setFocusable(false); linesLayer.setLayout(new java.awt.BorderLayout()); linesLayer.setFocusable(false); linesLayer.setName("linesLayer"); linesLayer.setOpaque(false); CPanel.setLayout(new java.awt.GridBagLayout()); CPanel.setFocusable(false); CPanel.setOpaque(false); CLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); CLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/C.png"))); CLabel.setToolTipText("Complex Field"); CLabel.setAlignmentX(0.5F); CLabel.setAlignmentY(0.0F); CLabel.setFocusable(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0); CPanel.add(CLabel, gridBagConstraints); linesLayer.add(CPanel, java.awt.BorderLayout.NORTH); towerLayer.setLayout(new java.awt.GridBagLayout()); towerLayer.setFocusable(false); towerLayer.setName("towerLayer"); towerLayer.setOpaque(false); linesLayer.add(towerLayer, java.awt.BorderLayout.CENTER); ZQPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); ZQPanel.setFocusable(false); ZQPanel.setOpaque(false); QLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Q.png"))); QLabel.setToolTipText("Rational Field"); QLabel.setFocusable(false); QLabel.setIconTextGap(0); ZQPanel.add(QLabel); linesLayer.add(ZQPanel, java.awt.BorderLayout.SOUTH); add(linesLayer, java.awt.BorderLayout.CENTER); }
@Override public int hashCode() { int result = label1 != null ? label1.hashCode() : 0; result += label2 != null ? label2.hashCode() : 0; return result; }