package jav.concordance.view; import info.clearthought.layout.TableLayout; import jav.concordance.control.ConcordanceEntry; import jav.correctionBackend.Token; import jav.correctionBackend.TokenImageInfoBox; import jav.gui.events.MessageCenter; import jav.gui.events.tokenNavigation.TokenNavigationEvent; import jav.gui.events.tokenNavigation.TokenNavigationType; import jav.gui.events.tokenStatus.TokenStatusType; import jav.gui.main.MainController; import jav.gui.token.behaviour.TokenVisualizationConcordanceMode; import jav.gui.token.behaviour.TokenVisualizationMode; import jav.gui.token.display.ImageTokenVisualization; import jav.gui.token.display.OnlyTextTokenVisualization; import jav.gui.token.display.PseudoImageTokenVisualization; import jav.gui.token.display.TokenVisualization; import jav.gui.token.tools.ImageProcessor; import java.awt.Color; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Iterator; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; /** * Copyright (c) 2012, IMPACT working group at the Centrum für Informations- und * Sprachverarbeitung, University of Munich. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. Redistributions in binary * form must reproduce the above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or other materials provided * with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * This file is part of the ocr-postcorrection tool developed by the IMPACT * working group at the Centrum für Informations- und Sprachverarbeitung, * University of Munich. For further information and contacts visit * http://ocr.cis.uni-muenchen.de/ * * @author thorsten (thorsten.vobl@googlemail.com) */ public class ConcordancePage extends JPanel { private TableLayout tl; private Border inactiveLeft; private Border inactiveCenter; private Border inactiveRight; private Border activeLeft; private Border activeCenter; private Border activeRight; private ItemListener itemListener; private ImageProcessor ipc; private double p = TableLayout.PREFERRED; ConcordanceTopComponent parent; private TokenVisualizationMode tvMode; long begintime = System.currentTimeMillis(); ConcordancePage(final ConcordanceTopComponent par, int start, int len) { super(); System.out.println("Page construction " + begintime); tvMode = new TokenVisualizationConcordanceMode(); this.setBorder(new EmptyBorder(10, 10, 10, 10)); this.parent = par; this.ipc = new ImageProcessor(); inactiveLeft = BorderFactory.createMatteBorder(2, 2, 2, 0, Color.WHITE); inactiveCenter = BorderFactory.createMatteBorder(2, 0, 2, 0, Color.WHITE); inactiveRight = BorderFactory.createMatteBorder(2, 0, 2, 2, Color.WHITE); activeLeft = BorderFactory.createMatteBorder(2, 2, 2, 0, Color.CYAN); activeCenter = BorderFactory.createMatteBorder(2, 0, 2, 0, Color.CYAN); activeRight = BorderFactory.createMatteBorder(2, 0, 2, 2, Color.CYAN); tl = new TableLayout(); tl.setVGap(10); double[] size = {p, p, p}; tl.setColumn(size); this.setLayout(tl); this.setBackground(Color.white); itemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { Component component = (Component) e.getSource(); TokenVisualization tv = (TokenVisualization) component.getParent().getComponent(1); int tokenId = tv.getTokenID(); if (e.getStateChange() == ItemEvent.SELECTED) { for (JPanel p : parent.getConcordanceGraphicsRegistry().get(tokenId)) { if (p.getName().equals("rightc")) { p.setBorder(activeRight); } else if (p.getName().equals("word")) { p.setBorder(activeCenter); parent.setSelected(tokenId, true); } else if (p.getName().equals("leftc")) { p.setBorder(activeLeft); } } } else if (e.getStateChange() == ItemEvent.DESELECTED) { for (JPanel p : parent.getConcordanceGraphicsRegistry().get(tokenId)) { if (p.getName().equals("rightc")) { p.setBorder(inactiveRight); } else if (p.getName().equals("word")) { p.setBorder(inactiveCenter); parent.setSelected(tokenId, false); } else if (p.getName().equals("leftc")) { p.setBorder(inactiveLeft); } } } } }; int counter = 0; Object[] data = parent.getEntryRegistry().keySet().toArray(); while (counter < len) { Integer tok = (Integer) data[start + counter]; ConcordanceEntry cce = parent.getEntryRegistry().get(tok); long row = System.currentTimeMillis(); this.addRow(tok, cce.getCandidateString(), cce.isSelected(), cce.isCorrected(), cce.isDisabled()); counter++; System.out.println("Row add " + (System.currentTimeMillis()-row)); } System.out.println("Done " + (System.currentTimeMillis()-begintime)); } private void createLeftContext(int tokenId, JPanel container, boolean corrected) { for (int i = 1; i <= parent.getLeftContextSize(); i++) { long prev = System.currentTimeMillis(); Token tt = MainController.findInstance().getDocument().getPreviousToken(tokenId); System.out.println("prev " + (System.currentTimeMillis()-prev)); if (tt != null) { tokenId = tt.getID(); TokenVisualization tv = this.createTokenVisualization(tt); if (corrected) { tv.setBackground(new Color(229, 236, 255)); } else { tv.setBackground(Color.white); } tv.setMode(tvMode); parent.getTVRegistry().add(tt, tv); container.add(tv); } else { break; } } } private void createRightContext(int tokenId, JPanel container, boolean corrected) { for (int i = 1; i <= parent.getRightContextSize(); i++) { long next = System.currentTimeMillis(); Token ttt = MainController.findInstance().getDocument().getNextToken(tokenId); System.out.println("next " + (System.currentTimeMillis()-next)); if (ttt != null) { tokenId = ttt.getID(); TokenVisualization tokv = this.createTokenVisualization(ttt); if (corrected) { tokv.setBackground(new Color(229, 236, 255)); } else { tokv.setBackground(Color.white); } tokv.setMode(tvMode, ttt); parent.getTVRegistry().add(ttt, tokv); container.add(tokv); } else { break; } } } private void addRow(int tokenID, String cand, boolean selected, boolean corrected, boolean disabled) { tl.insertRow(tl.getNumRow(), p); JCheckBox b = new JCheckBox(); JPanel leftC = new JPanel(); leftC.setLayout(new BoxLayout(leftC, BoxLayout.LINE_AXIS)); leftC.setAlignmentX(Component.RIGHT_ALIGNMENT); leftC.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); leftC.setAlignmentY(Component.BOTTOM_ALIGNMENT); leftC.setName("leftc"); JPanel rightC = new JPanel(); rightC.setLayout(new BoxLayout(rightC, BoxLayout.X_AXIS)); rightC.setAlignmentX(Component.LEFT_ALIGNMENT); rightC.setAlignmentY(BOTTOM_ALIGNMENT); rightC.setName("rightc"); JPanel word = new JPanel(); word.setLayout(new BoxLayout(word, BoxLayout.X_AXIS)); word.setAlignmentX(Component.CENTER_ALIGNMENT); word.setAlignmentY(Component.CENTER_ALIGNMENT); word.setName("word"); if (corrected) { b.setEnabled(false); b.setBackground(new Color(229, 236, 255)); leftC.setBackground(new Color(229, 236, 255)); word.setBackground(new Color(229, 236, 255)); rightC.setBackground(new Color(229, 236, 255)); } else if (disabled) { b.setEnabled(false); b.setBackground(Color.lightGray); leftC.setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage")); word.setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage")); rightC.setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage")); leftC.setBackground(Color.lightGray); word.setBackground(Color.lightGray); rightC.setBackground(Color.lightGray); } else { b.setSelected(selected); b.addItemListener(itemListener); b.setBackground(Color.WHITE); leftC.setBackground(Color.WHITE); rightC.setBackground(Color.WHITE); word.setBackground(Color.WHITE); } if (!disabled) { long lc = System.currentTimeMillis(); this.createLeftContext(tokenID, leftC, corrected); System.out.println("left context " + (System.currentTimeMillis()-lc)); } if (selected) { leftC.setBorder(activeLeft); } else { leftC.setBorder(inactiveLeft); } this.add(leftC, "0, " + (tl.getNumRow() - 1) + ", f, f"); word.add(Box.createHorizontalStrut(35)); //new JLabel(" ")); Token tt = MainController.findInstance().getDocument().getTokenByID(tokenID); TokenVisualization tv = this.createTokenVisualization(tt); if (corrected) { tv.setBackground(new Color(229, 236, 255)); } else { tv.setBackground(Color.white); } if (!disabled) { tv.setMode(tvMode, tt); parent.getTVRegistry().add(tokenID, tv); } else { tv.deactivate(); } tv.setAlignmentY(CENTER_ALIGNMENT); word.add(tv); b.setAlignmentY(CENTER_ALIGNMENT); word.add(b); FastCorrectionButton topcandb = new FastCorrectionButton(cand, tv.getTokenID()); if (cand.equals("")) { topcandb.setEnabled(false); } topcandb.setName("topcandb"); topcandb.setAlignmentY(CENTER_ALIGNMENT); // JLabel topcandl = new JLabel(" -> " + cand); // topcandl.setForeground(Color.BLUE); // topcandl.setName("topcandl"); // topcandl.setAlignmentY(CENTER_ALIGNMENT); word.add(topcandb); word.add(Box.createHorizontalStrut(35)); //new JLabel(" ")); if (selected) { word.setBorder(activeCenter); } else { word.setBorder(inactiveCenter); } this.add(word, "1, " + (tl.getNumRow() - 1)); if (!disabled) { long rc = System.currentTimeMillis(); this.createRightContext(tokenID, rightC, corrected); System.out.println("right context " + (System.currentTimeMillis()-rc)); } if (selected) { rightC.setBorder(activeRight); } else { rightC.setBorder(inactiveRight); } this.add(rightC, "2, " + (tl.getNumRow() - 1) + ", f, f"); parent.getConcordanceGraphicsRegistry().add(tt.getID(), leftC, word, rightC); } public void selectAll() { Component[] comp = this.getComponents(); int counter = 0; while (counter < comp.length) { JPanel word = (JPanel) comp[counter + 1]; JCheckBox b = (JCheckBox) word.getComponent(2); if (b.isEnabled() && !b.isSelected()) { b.setSelected(true); } counter += 3; } } public void deselectAll() { Component[] comp = this.getComponents(); int counter = 0; while (counter < comp.length) { JPanel word = (JPanel) comp[counter + 1]; JCheckBox b = (JCheckBox) word.getComponent(2); if (b.isEnabled() && b.isSelected()) { b.setSelected(false); } counter += 3; } } private TokenVisualization createTokenVisualization(Token t) { long time = System.currentTimeMillis(); TokenVisualization tv; TokenImageInfoBox tiib = t.getTokenImageInfoBox(); if (tiib != null && parent.showImage() && parent.hasImage()) { // if no image loaded or token has different source image than last one if (ipc.getImageString() == null || !ipc.getImageString().equals(t.getImageFilename())) { ipc.setImageInput(t.getImageFilename()); } int left = tiib.getCoordinateLeft(); int right = tiib.getCoordinateRight(); int top = tiib.getCoordinateTop(); int bottom = tiib.getCoordinateBottom(); int width = right - left; int height = bottom - top; BufferedImage bi = ipc.getTokenImage(left, top, width, height, parent.getScale()); if (t.getWOCR().equals(" ")) { tv = new OnlyTextTokenVisualization(t, parent.getFontSize()); } else { tv = new ImageTokenVisualization(bi, t, parent.getFontSize()); } } else { tv = new OnlyTextTokenVisualization(t, parent.getFontSize()); } System.out.println("tv " + (System.currentTimeMillis()-time)); return tv; } public void zoomFont(int i) { for (Component ca : this.getComponents()) { if (ca instanceof JPanel) { JPanel tokenVisContainer = (JPanel) ca; for (Component cb : tokenVisContainer.getComponents()) { if (cb instanceof TokenVisualization) { TokenVisualization tv = (TokenVisualization) cb; tv.zoomFont(i); } if (cb instanceof JLabel) { JLabel jl = (JLabel) cb; Font f = jl.getFont(); float nS = (float) i; Font deriveFont = f.deriveFont(nS); jl.setFont(deriveFont); } } } } } public void zoomImg(double scale) { for (Component ca : this.getComponents()) { if (ca instanceof JPanel) { JPanel tokenVisContainer = (JPanel) ca; for (Component cb : tokenVisContainer.getComponents()) { if (cb instanceof ImageTokenVisualization) { ImageTokenVisualization tv = (ImageTokenVisualization) cb; // load image file containing token if not already loaded Token tok = MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()); if (!tok.getImageFilename().equals(ipc.getImageString())) { ipc.setImageInput(tok.getImageFilename()); } TokenImageInfoBox tiib = tok.getTokenImageInfoBox(); if (tiib != null) { int left = tiib.getCoordinateLeft(); int right = tiib.getCoordinateRight(); int top = tiib.getCoordinateTop(); int bottom = tiib.getCoordinateBottom(); int width = right - left; int height = bottom - top; tv.setImage(ipc.getTokenImage(left, top, width, height, scale)); } } } } } } public void toggleImages(boolean on) { for (Component ca : this.getComponents()) { if (ca instanceof JPanel) { JPanel container = (JPanel) ca; for (Component cb : container.getComponents()) { if (cb instanceof ImageTokenVisualization) { ImageTokenVisualization tv = (ImageTokenVisualization) cb; if (on) { TokenImageInfoBox tiib = MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()).getTokenImageInfoBox(); if (tiib != null) { int left = tiib.getCoordinateLeft(); int right = tiib.getCoordinateRight(); int top = tiib.getCoordinateTop(); int bottom = tiib.getCoordinateBottom(); int width = right - left; int height = bottom - top; BufferedImage bi = ipc.getTokenImage(left, top, width, height, parent.getScale()); tv.setImage(bi); } } else { if (tv.hasImage()) { tv.clearImage(); } } } else if (cb instanceof PseudoImageTokenVisualization) { ((PseudoImageTokenVisualization) cb).toggleImage(on); } } } } } public TokenVisualizationMode getVisualizationMode() { return this.tvMode; } // sets the candidate for all tokens, only to be used in clone concordance public void setCandidateString(String s) { for (Component ca : this.getComponents()) { if (ca instanceof JPanel) { if (ca.getName().equals("word")) { JPanel wordContainer = (JPanel) ca; TokenVisualization tokv = (TokenVisualization) wordContainer.getComponent(1); ConcordanceEntry cce = parent.getEntryRegistry().get(tokv.getTokenID()); if (!cce.isCorrected() && !cce.isDisabled()) { JButton wordcandb = (JButton) wordContainer.getComponent(3); //JLabel wordcandl = (JLabel) wordContainer.getComponent(3); wordcandb.setText(s); if (s.equals("")) { wordcandb.setEnabled(false); } else { wordcandb.setEnabled(true); } } } } } } public void grayOut(TokenVisualization tv, boolean grayout) { ArrayList<JPanel> line = parent.getConcordanceGraphicsRegistry().get(tv.getTokenID()); if (grayout) { JPanel leftC = line.get(0); JPanel word = line.get(1); JPanel rightC = line.get(2); JCheckBox b = (JCheckBox) word.getComponent(2); JButton jb = (JButton) word.getComponent(3); jb.setEnabled(false); leftC.setBorder(inactiveRight); word.setBorder(inactiveCenter); rightC.setBorder(inactiveLeft); if( b.isSelected()) { b.setSelected(false); b.setEnabled(false); } for (Component ca : leftC.getComponents()) { if (ca instanceof TokenVisualization) { ca.setBackground(new Color(229, 236, 255)); } } for (Component ca : rightC.getComponents()) { if (ca instanceof TokenVisualization) { ca.setBackground(new Color(229, 236, 255)); } } leftC.setBackground(new Color(229, 236, 255)); word.setBackground(new Color(229, 236, 255)); rightC.setBackground(new Color(229, 236, 255)); tv.setBackground(new Color(229, 236, 255)); b.setBackground(new Color(229, 236, 255)); } else { JPanel leftC = line.get(0); JPanel word = line.get(1); JPanel rightC = line.get(2); JCheckBox b = (JCheckBox) word.getComponent(2); JButton jb = (JButton) word.getComponent(3); jb.setEnabled(true); leftC.setBorder(activeRight); word.setBorder(activeCenter); rightC.setBorder(activeLeft); if( b.isSelected()) { b.setSelected(false); b.setEnabled(true); } for (Component ca : leftC.getComponents()) { if (ca instanceof TokenVisualization) { ca.setBackground(Color.white); } } for (Component ca : rightC.getComponents()) { if (ca instanceof TokenVisualization) { ca.setBackground(Color.white); } } leftC.setBackground(Color.white); word.setBackground(Color.white); rightC.setBackground(Color.white); tv.setBackground(Color.white); b.setBackground(Color.white); } } private void disableEntry(final TokenVisualization tv, int id, ArrayList<JPanel> rowpa) { parent.getConcordanceGraphicsRegistry().remove(id); parent.getEntryRegistry().get(id).setDisabled(true); for (Component ca : rowpa.get(0).getComponents()) { if (ca instanceof TokenVisualization) { TokenVisualization tokv = (TokenVisualization) ca; tokv.setBackground(Color.lightGray); tokv.deactivate(); } } for (Component ca : rowpa.get(1).getComponents()) { if (ca instanceof TokenVisualization) { TokenVisualization tokv = (TokenVisualization) ca; tokv.setBackground(Color.lightGray); tokv.deactivate(); } } for (Component ca : rowpa.get(2).getComponents()) { if (ca instanceof TokenVisualization) { TokenVisualization tokv = (TokenVisualization) ca; tokv.setBackground(Color.lightGray); tokv.deactivate(); } } parent.addDisabled(); JCheckBox b = (JCheckBox) rowpa.get(1).getComponent(2); b.setEnabled(false); b.setSelected(false); FastCorrectionButton fb = (FastCorrectionButton) rowpa.get(1).getComponent(3); fb.setEnabled(false); MouseListener listener = new MouseListener() { @Override public void mouseClicked(MouseEvent me) { } @Override public void mousePressed(MouseEvent me) { } @Override public void mouseReleased(MouseEvent me) { if (me.getButton() == MouseEvent.BUTTON3) { JPopupMenu menu = new JPopupMenu(); JMenuItem jumpItem = new JMenuItem(java.util.ResourceBundle.getBundle("jav/gui/token/display/Bundle").getString("jumpto")); jumpItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { MessageCenter.getInstance().fireTokenNavigationEvent(new TokenNavigationEvent(tv, tv.getTokenID(), TokenNavigationType.FOCUS_IN_MAIN)); } }); menu.add(jumpItem); menu.show(tv, 50, 50); } } @Override public void mouseEntered(MouseEvent me) { } @Override public void mouseExited(MouseEvent me) { } }; rowpa.get(0).addMouseListener(listener); rowpa.get(1).addMouseListener(listener); rowpa.get(2).addMouseListener(listener); rowpa.get(0).setBorder(inactiveRight); rowpa.get(1).setBorder(inactiveCenter); rowpa.get(2).setBorder(inactiveLeft); rowpa.get(0).setBackground(Color.lightGray); rowpa.get(1).setBackground(Color.lightGray); rowpa.get(2).setBackground(Color.lightGray); b.setBackground(Color.lightGray); rowpa.get(0).setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage")); rowpa.get(1).setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage")); rowpa.get(2).setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage")); this.updateTokenRegistry(); } private void enableEntry(final TokenVisualization tv, int index, ArrayList<JPanel> rowpa) { parent.getConcordanceGraphicsRegistry().remove(index); parent.getEntryRegistry().get(index).setDisabled(false); for (Component ca : rowpa.get(0).getComponents()) { if (ca instanceof TokenVisualization) { TokenVisualization tokv = (TokenVisualization) ca; tokv.setBackground(Color.white); tokv.activate(); } } for (Component ca : rowpa.get(1).getComponents()) { if (ca instanceof TokenVisualization) { TokenVisualization tokv = (TokenVisualization) ca; tokv.setBackground(Color.white); tokv.activate(); } } for (Component ca : rowpa.get(2).getComponents()) { if (ca instanceof TokenVisualization) { TokenVisualization tokv = (TokenVisualization) ca; tokv.setBackground(Color.white); tokv.activate(); } } parent.removeDisabled(); JCheckBox b = (JCheckBox) rowpa.get(1).getComponent(2); b.setEnabled(true); b.setSelected(false); FastCorrectionButton fb = (FastCorrectionButton) rowpa.get(1).getComponent(3); fb.setEnabled(true); MouseListener listener = new MouseListener() { @Override public void mouseClicked(MouseEvent me) { } @Override public void mousePressed(MouseEvent me) { } @Override public void mouseReleased(MouseEvent me) { if (me.getButton() == MouseEvent.BUTTON3) { JPopupMenu menu = new JPopupMenu(); JMenuItem jumpItem = new JMenuItem(java.util.ResourceBundle.getBundle("jav/gui/token/display/Bundle").getString("jumpto")); jumpItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { MessageCenter.getInstance().fireTokenNavigationEvent(new TokenNavigationEvent(tv, tv.getTokenID(), TokenNavigationType.FOCUS_IN_MAIN)); } }); menu.add(jumpItem); menu.show(tv, 50, 50); } } @Override public void mouseEntered(MouseEvent me) { } @Override public void mouseExited(MouseEvent me) { } }; rowpa.get(0).removeMouseListener(listener); rowpa.get(1).removeMouseListener(listener); rowpa.get(2).removeMouseListener(listener); rowpa.get(0).setBorder(activeRight); rowpa.get(1).setBorder(activeCenter); rowpa.get(2).setBorder(activeLeft); rowpa.get(0).setBackground(Color.white); rowpa.get(1).setBackground(Color.white); rowpa.get(2).setBackground(Color.white); b.setBackground(Color.white); this.updateTokenRegistry(); } private void updateTokenRegistry() { parent.getTVRegistry().clear(); for (Component ca : this.getComponents()) { if (ca instanceof JPanel) { JPanel container = (JPanel) ca; for (Component cb : container.getComponents()) { if (cb instanceof TokenVisualization) { TokenVisualization tv = (TokenVisualization) cb; parent.getTVRegistry().add(tv.getTokenID(), tv); } } } } } public void update(TokenStatusType t, int affectedID, ArrayList<Integer> affectedTokens) { Iterator<Integer> tokid_it = affectedTokens.iterator(); while (tokid_it.hasNext()) { int tokid = tokid_it.next(); System.out.println(t.toString() + " " + affectedID); for( int i = 0; i<affectedTokens.size();i++) { System.out.println("AFFECTED " + affectedTokens.get(i)); } if (parent.getEntryRegistry().containsKey(tokid)) { Token to = MainController.findInstance().getDocument().getTokenByID(tokid); if (to.isCorrected()) { } } } } // @Deprecated // public void update(TokenStatusType tst, TokenVisualization tv, int tokenIndex, int numAffected, boolean updateIndices) { // // ArrayList<JPanel> rowpa = parent.getConcordanceGraphicsRegistry().get(tl.getConstraints(tv.getParent()).row1); // if (rowpa != null) { // TokenVisualization mid = (TokenVisualization) rowpa.get(1).getComponent(1); // // if (tst == TokenStatusType.MERGED_RIGHT || tst == TokenStatusType.DELETE) { // // if (tv.getParent().getName().equals("leftc")) { // for (AbstractTokenVisualization atv : parent.getTVRegistry().getVisualizations(tokenIndex + numAffected)) { // TokenVisualization test = (TokenVisualization) atv; // if (tl.getConstraints(tv.getParent()).row1 == tl.getConstraints(test.getParent()).row1) { // /* // * if the deleted area affects the concordance // * entry, it has to be disabled because by being // * tampered with, it looses its specific features // * that made it belong to the concordance group // */ // if (!test.getParent().getName().equals("leftc")) { // tv.update(MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()).getWDisplay()); // disableEntry(tv, mid.getTokenID(), rowpa); // rowpa.get(1).removeAll(); // rowpa.get(2).removeAll(); // parent.getEntryRegistry().remove(mid.getTokenID()); // // if (updateIndices) { // this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected); // } // // this.updateTokenRegistry(); // //if the merging is inside the left context of the entry, update the context // } else { // rowpa.get(0).removeAll(); // this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected); // tokenIndex = mid.getTokenID(); // for (int i = 1; i <= parent.getLeftContextSize(); i++) { // if (tokenIndex - i >= 0) { // Token t = MainController.findInstance().getDocument().getTokenByIndex(tokenIndex - i); // TokenVisualization temp = this.createTokenVisualization(t); // temp.setBackground(Color.white); // temp.setMode(tvMode, t); // rowpa.get(0).add(temp); // } // } // rowpa.get(0).revalidate(); // this.updateTokenRegistry(); // } // // break; // } // } // } else if (tv.getParent().getName().equals("word")) { // disableEntry(tv, tokenIndex, rowpa); // tv.getParent().remove(tv); // parent.getEntryRegistry().remove(mid.getTokenID()); // // if (updateIndices) { // this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected); // } // // this.updateTokenRegistry(); // // } else if (tv.getParent().getName().equals("rightc")) { // rowpa.get(2).removeAll(); // this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected); // tokenIndex = mid.getTokenID(); // for (int i = 1; i <= parent.getRightContextSize(); i++) { // if (tokenIndex + i < MainController.findInstance().getDocument().getNumberOfTokens()) { // Token t = MainController.findInstance().getDocument().getTokenByIndex(tokenIndex + i); // TokenVisualization temp = this.createTokenVisualization(t); // temp.setBackground(Color.white); // temp.setMode(tvMode, t); // rowpa.get(2).add(temp); // } // } // rowpa.get(2).revalidate(); // this.updateTokenRegistry(); // } else { // new CustomErrorDialog().showDialog("ClassicConcordancePage::update undefined panel name"); // } // } else if (tst == TokenStatusType.SPLIT) { // // if (tv.getParent().getName().equals("leftc")) { // rowpa.get(0).removeAll(); // this.updateTokenVisualizationIndices(tokenIndex, numAffected); // tokenIndex = mid.getTokenID(); // for (int i = 1; i <= parent.getLeftContextSize(); i++) { // if (tokenIndex - i >= 0) { // TokenVisualization temp = this.createTokenVisualization(MainController.findInstance().getDocument().getTokenByIndex(tokenIndex - i)); // temp.setBackground(Color.white); // temp.setMode(tvMode); // rowpa.get(0).add(temp); // } // } // rowpa.get(0).revalidate(); // this.updateTokenRegistry(); // } else if (tv.getParent().getName().equals("word")) { // // tv.update(MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()).getWDisplay()); // disableEntry(tv, tv.getTokenID(), rowpa); // parent.getEntryRegistry().remove(tokenIndex); // // if (updateIndices) { // this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected); // } // // this.updateTokenRegistry(); // // } else if (tv.getParent().getName().equals("rightc")) { // // rowpa.get(2).removeAll(); // // if (updateIndices) { // this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected); // } // // tokenIndex = mid.getTokenID(); // for (int i = 1; i <= parent.getRightContextSize(); i++) { // if (tokenIndex + i < MainController.findInstance().getDocument().getNumberOfTokens()) { // Token t = MainController.findInstance().getDocument().getTokenByIndex(tokenIndex + i); // TokenVisualization temp = this.createTokenVisualization(t); // temp.setBackground(Color.white); // temp.setMode(tvMode); // rowpa.get(2).add(temp); // } // } // rowpa.get(2).revalidate(); // this.updateTokenRegistry(); // } else { // new CustomErrorDialog().showDialog("ClassicConcordancePage::update undefined panel name"); // } // } // } // } }