Révision 491

tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/editors/ConcordanceEditorInput.java (revision 491)
1
// Copyright © 2010-2013 ENS de Lyon.
2
// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
3
// Lyon 2, University of Franche-Comté, University of Nice
4
// Sophia Antipolis, University of Paris 3.
5
// 
6
// The TXM platform is free software: you can redistribute it
7
// and/or modify it under the terms of the GNU General Public
8
// License as published by the Free Software Foundation,
9
// either version 2 of the License, or (at your option) any
10
// later version.
11
// 
12
// The TXM platform is distributed in the hope that it will be
13
// useful, but WITHOUT ANY WARRANTY; without even the implied
14
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15
// PURPOSE. See the GNU General Public License for more
16
// details.
17
// 
18
// You should have received a copy of the GNU General
19
// Public License along with the TXM platform. If not, see
20
// http://www.gnu.org/licenses.
21
// 
22
// 
23
// 
24
// $LastChangedDate:$
25
// $LastChangedRevision:$
26
// $LastChangedBy:$ 
27
//
28
package org.txm.concordance.rcp.editors;
29

  
30
import org.txm.concordance.core.functions.Concordance;
31
import org.txm.rcp.editors.TXMResultEditorInput;
32
import org.txm.searchengine.cqp.corpus.Corpus;
33

  
34
/**
35
 * Concordance result editor input.
36
 * @author sjacquot
37
 *
38
 */
39
public class ConcordanceEditorInput extends TXMResultEditorInput {
40

  
41
	/** The corpus. */
42
	private Corpus corpus;
43
	
44
	/**
45
	 * Instantiates a new concordances editor input.
46
	 *
47
	 * @param corpus the corpus
48
	 * @param concordance the concordance
49
	 */
50
	public ConcordanceEditorInput(Corpus corpus, Concordance concordance) {
51
		super(concordance);
52
		if (concordance != null)	{
53
			this.corpus = concordance.getCorpus();
54
		}
55
		else	{
56
			this.corpus = corpus;
57
		}
58
	}
59

  
60
	/**
61
	 * 
62
	 * @param corpus
63
	 */
64
	public ConcordanceEditorInput(Corpus corpus) {
65
		this(corpus, null);
66
	}
67
	
68
	/**
69
	 * Gets the corpus.
70
	 *
71
	 * @return the corpus
72
	 */
73
	public Corpus getCorpus() {
74
		return corpus;
75
	}
76

  
77
	/**
78
	 * Gets the concordance.
79
	 *
80
	 * @return the concordance
81
	 */
82
	public Concordance getConcordance() {
83
		return (Concordance) this.result;
84
	}
85

  
86
	/**
87
	 * 
88
	 * @param newCorpus
89
	 */
90
	public void setCorpus(Corpus newCorpus) {
91
		this.corpus = newCorpus;
92
	}
93

  
94
	@Deprecated
95
	public void setConcordance(Concordance conc) {
96
		this.result = conc;
97
	}
98
	
99
	@Override
100
	public boolean equals(Object obj)	{
101
		if(obj instanceof ConcordanceEditorInput)	{
102
			return this.result == ((ConcordanceEditorInput) obj).getConcordance()
103
					&& (this.result != null && ((ConcordanceEditorInput) obj).getConcordance() != null && this.getConcordance().getQuery() == ((ConcordanceEditorInput) obj).getConcordance().getQuery());
104
		}
105
		return false;
106
	}
107
}
tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/editors/ConcordanceEditor.java (revision 491)
70 70
import org.eclipse.swt.graphics.Font;
71 71
import org.eclipse.swt.graphics.FontData;
72 72
import org.eclipse.swt.graphics.GC;
73
import org.eclipse.swt.graphics.Image;
74 73
import org.eclipse.swt.graphics.Point;
75 74
import org.eclipse.swt.graphics.Rectangle;
76 75
import org.eclipse.swt.layout.FormAttachment;
......
96 95
import org.eclipse.ui.IWorkbenchWindow;
97 96
import org.eclipse.ui.PartInitException;
98 97
import org.eclipse.ui.dialogs.ListDialog;
99
import org.eclipse.ui.part.EditorPart;
100
import org.txm.Toolbox;
101 98
import org.txm.annotation.Annotation;
102 99
import org.txm.annotation.AnnotationManager;
103 100
import org.txm.annotation.KRAnnotationEngine;
......
130 127
import org.txm.cooccurrence.rcp.messages.CooccurrenceUIMessages;
131 128
import org.txm.core.messages.TXMCoreMessages;
132 129
import org.txm.core.preferences.TXMPreferences;
130
import org.txm.core.results.TXMResult;
131
import org.txm.functions.internal.InternalView;
133 132
import org.txm.objects.Page;
134 133
import org.txm.rcp.IImageKeys;
135 134
import org.txm.rcp.JobsTimer;
......
139 138
import org.txm.rcp.commands.OpenBrowser;
140 139
import org.txm.rcp.commands.annotation.InitializeKnowledgeRepository;
141 140
import org.txm.rcp.commands.annotation.SaveAnnotations;
142
import org.txm.rcp.commands.editor.CustomizableEditor;
143 141
import org.txm.rcp.commands.krview.OpenKRView;
144 142
import org.txm.rcp.editors.TXMBrowser;
143
import org.txm.rcp.editors.TXMEditorPart;
144
import org.txm.rcp.editors.TXMResultEditorInput;
145 145
import org.txm.rcp.editors.TableKeyListener;
146
import org.txm.rcp.editors.input.InternalViewEditorInput;
147 146
import org.txm.rcp.editors.internal.InternalViewEditor;
148 147
import org.txm.rcp.preferences.RCPPreferences;
149 148
import org.txm.rcp.swt.dialog.ConfirmDialog;
......
161 160
import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
162 161
import org.txm.searchengine.cqp.corpus.Corpus;
163 162
import org.txm.searchengine.cqp.corpus.Property;
163
import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
164 164
import org.txm.searchengine.cqp.corpus.query.Match;
165 165
import org.txm.searchengine.cqp.corpus.query.Query;
166 166
import org.txm.utils.AsciiUtils;
167 167
import org.txm.utils.logger.Log;
168
// TODO: Auto-generated Javadoc
168

  
169 169
/**
170 170
 * display the concordances parameters and results in the same editor
171 171
 * 
172 172
 * @author mdecorde.
173 173
 */
174
public class ConcordanceEditor extends EditorPart implements CustomizableEditor {
174
public class ConcordanceEditor extends TXMEditorPart {
175 175

  
176
	public static final String ID = ConcordanceEditor.class.getName();
177
	
176 178
	/**
177 179
	 * the limit number of annotation when a confirm dialog box is shown
178 180
	 */
179 181
	private static final int NALERTAFFECTANNOTATIONS = 100;
180 182

  
181 183
	String locale = TXMPreferences.getString(RCPPreferences.UI_LOCALE, RCPPreferences.PREFERENCES_NODE);
182
	
184

  
183 185
	/** The lineids. */
184 186
	List<String> lineids;
185 187

  
......
226 228

  
227 229
	/** The annotation service */
228 230
	private AnnotationManager  annotManager;
229
	
231

  
230 232
	//boolean annotation_expert_mode = TxmPreferences.getBoolean(AnnotationPreferencePage.MODE, false);
231 233

  
232 234
	/** The standard comparator class name. */
......
326 328

  
327 329
	/** The is setup shown. */
328 330
	private boolean isSetupShown = true;
329
	
330 331

  
332

  
331 333
	/** The hide btn. */
332 334
	private Button hideBtn;
333 335
	private Button deleteLineButton;
334 336

  
335 337
	/** The query size. */
336 338
	protected Point querySize;
337
	
339

  
338 340
	protected Point annotationSize;
339
	
341

  
340 342
	/** The annot btn. */
341 343
	private Button annotationButton;
342 344

  
......
426 428
		initializeEditor();
427 429
	}
428 430

  
429
	private void initializeEditor() {
430
		this.corpus = ((ConcordanceEditorInput) getEditorInput()).getCorpus();
431
	private void initializeEditor() throws PartInitException {
432
		
433
		TXMResultEditorInput input = getEditorInput();
434
		TXMResult result = input.getResult();
435
		if (!(result instanceof Concordance)) {
436
			throw new PartInitException("Cannot open ConcordanceEditor with "+result);
437
		}
438
		this.concordance = (Concordance)result;
439
		this.corpus = concordance.getCorpus();
431 440
		this.annotManager = KRAnnotationEngine.getAnnotationManager(corpus);
432 441

  
433 442
		this.standardComparators = new ArrayList<LineComparator>();
......
457 466
				org.txm.rcp.utils.Logger.printStackTrace(e1);
458 467
				Log.severe("Error while computing concordance: "+e.getLocalizedMessage());
459 468
			} 
460
			
469

  
461 470
			return;
462 471
		}
463 472

  
464
		this.concordance = ((ConcordanceEditorInput) getEditorInput()).getConcordance();
473
		initializeFields();
465 474

  
466
		if (this.concordance == null) {
467
			leftContextSize = TXMPreferences.getInt(ConcordancePreferences.LEFT_CONTEXT_SIZE, ConcordancePreferences.PREFERENCES_NODE);
468
			rightContextSize = TXMPreferences.getInt(ConcordancePreferences.RIGHT_CONTEXT_SIZE, ConcordancePreferences.PREFERENCES_NODE);
469

  
470
			selectedLeftViewProperties = new ArrayList<Property>();
471
			selectedRightViewProperties = new ArrayList<Property>();
472
			selectedKeywordViewProperties = new ArrayList<Property>();
473

  
474
			//set default view property
475
			Property defaultViewProperty = availableKeywordViewProperties.get(0);
476
			if(!defaultViewProperty.getName().equals("word")) //$NON-NLS-1$
477
				for(int i = 0 ; i < availableKeywordViewProperties.size() ; i++ )
478
					if (availableKeywordViewProperties.get(i).getName().equals("word")) //$NON-NLS-1$
479
					{
480
						defaultViewProperty = availableKeywordViewProperties.get(i);
481
						break;
482
					}
483

  
484
			availableKeywordViewProperties.remove(defaultViewProperty);
485
			availableLeftViewProperties.remove(defaultViewProperty);
486
			availableRightViewProperties.remove(defaultViewProperty);
487
			selectedLeftViewProperties.add(defaultViewProperty);
488
			selectedRightViewProperties.add(defaultViewProperty);
489
			selectedKeywordViewProperties.add(defaultViewProperty);
490

  
491
			//set default sort property
492
			selectedLeftSortProperties = new ArrayList<Property>();
493
			selectedRightSortProperties = new ArrayList<Property>();
494
			selectedKeywordSortProperties = new ArrayList<Property>();
495

  
496
			Property defaultSortProperty = availableKeywordSortProperties.get(0);
497
			if(!defaultSortProperty.getName().equals("word")) //$NON-NLS-1$
498
				for(int i = 0 ; i < availableKeywordSortProperties.size() ; i++ )
499
					if (availableKeywordSortProperties.get(i).getName().equals("word")) //$NON-NLS-1$
500
					{
501
						defaultSortProperty = availableKeywordSortProperties.get(i);
502
						break;
503
					}
504

  
505
			availableKeywordSortProperties.remove(defaultSortProperty);
506
			availableLeftSortProperties.remove(defaultSortProperty);
507
			availableRightSortProperties.remove(defaultSortProperty);
508
			selectedLeftSortProperties.add(defaultSortProperty);
509
			selectedRightSortProperties.add(defaultSortProperty);
510
			selectedKeywordSortProperties.add(defaultSortProperty);
511

  
512
			this.refViewPattern = new ReferencePattern();
513
			this.refSortPattern = new ReferencePattern();
514
			try { // set the default reference is there is one
515
				if (corpus.getProperty("ref") != null) //$NON-NLS-1$
516
				{
517
					refViewPattern.addProperty(corpus.getProperty("ref")); //$NON-NLS-1$
518
					refSortPattern.addProperty(corpus.getProperty("ref")); //$NON-NLS-1$
519
				} else {
520
					if (corpus.getStructuralUnit("text") != null) //$NON-NLS-1$
521
						if (corpus.getStructuralUnit("text").getProperty("id") != null) //$NON-NLS-1$ //$NON-NLS-2$
522
						{
523
							refViewPattern.addProperty(corpus.getStructuralUnit("text").getProperty("id")); //$NON-NLS-1$ //$NON-NLS-2$
524
							refSortPattern.addProperty(corpus.getStructuralUnit("text").getProperty("id")); //$NON-NLS-1$ //$NON-NLS-2$
525
						}
526
				}
527
			} catch (CqiClientException e) {
528
				System.out.println(NLS.bind(Messages.ConcordancesEditor_43, corpus.getName(), e));
529
			}
530
		} else {
531
			leftContextSize = concordance.getLeftContextSize();
532
			rightContextSize = concordance.getRightContextSize();
533

  
534
			selectedLeftViewProperties = concordance.getLeftViewProperties();
535
			selectedRightViewProperties = concordance.getRightViewProperties();
536
			selectedKeywordViewProperties = concordance.getKeywordViewProperties();
537
			availableKeywordViewProperties.remove(selectedKeywordViewProperties);
538
			availableLeftViewProperties.remove(selectedLeftViewProperties);
539
			availableRightViewProperties.remove(selectedRightViewProperties);
540

  
541
			selectedLeftSortProperties = concordance.getLeftAnalysisProperties();
542
			selectedRightSortProperties = concordance.getRightAnalysisProperties();
543
			selectedKeywordSortProperties = concordance.getKeywordAnalysisProperties();
544
			availableKeywordSortProperties.remove(selectedKeywordSortProperties);
545
			availableLeftSortProperties.remove(selectedLeftSortProperties);
546
			availableRightSortProperties.remove(selectedRightSortProperties);
547

  
548
			this.refViewPattern = concordance.getRefViewPattern();
549
			this.refSortPattern = concordance.getRefAnalysePattern();
550
		}
551

  
552

  
553

  
554 475
		if (concordance != null)
555 476
			setPartName(concordance.getName());
556 477
		else
......
631 552
			}
632 553
		});
633 554

  
634
		//TODO: to enable line deletion, Concordance code must updated 
555
		//TODO: to enable line deletion, Concordance code must updated -> replace with key binding
635 556
		viewer.getTable().addKeyListener(new KeyListener() {
636 557

  
637 558
			@Override
......
639 560

  
640 561
			@Override
641 562
			public void keyPressed(KeyEvent e) {
642
				if (e.keyCode != SWT.DEL ) { // CTRL + C
643
					return;
644
				}
563
				if (e.keyCode != SWT.DEL ) { return; }
645 564

  
646 565
				DeleteLines.deleteConcordanceLines(ConcordanceEditor.this);
647 566
			}
......
901 820
			concordance.setLeftAnalysisProperties(selectedLeftSortProperties);
902 821
			concordance.setKeywordAnalysisProperties(selectedKeywordSortProperties);
903 822
			concordance.setRightAnalysisProperties(selectedRightSortProperties);
904
			
823

  
905 824
			try {
906 825
				Log.info(NLS.bind(CooccurrenceUIMessages.CooccurrencesEditor_0, currentComparator.getName()));
907 826
				if (currentComparator instanceof CompositeComparator)
......
957 876
	public void fillDisplayArea(int from, int to) {
958 877
		if (viewer == null)
959 878
			return;
960
		
879

  
961 880
		viewer.getControl().setRedraw(false);
962
		
881

  
963 882
		from = Math.max(from, 0);
964 883
		to = Math.min(to, concordance.getNLines() - 1);
965 884
		List<Line> lines = null;
......
995 914
		navigationArea.getParent().layout();
996 915

  
997 916
		refreshReferenceColumnTitle();
998
		
917

  
999 918
		viewer.getControl().setRedraw(true);
1000 919
	}
1001 920

  
......
1014 933

  
1015 934
	private Label equalLabel;
1016 935
	Boolean advanced_annotation_mode = false;
1017
	
936

  
1018 937
	private void composeAnnotationArea(final Composite parent){ 
1019 938
		advanced_annotation_mode = "advanced".equals(TXMPreferences.getString(RCPPreferences.ANNOTATION_MODE, RCPPreferences.PREFERENCES_NODE));
1020
		
939

  
1021 940
		List<KnowledgeRepository> krs = InitializeKnowledgeRepository.get(corpus.getMainCorpus());
1022 941
		typesList.clear();
1023 942
		Log.warning("Corpus KRs: "+krs); //$NON-NLS-1$
1024 943

  
1025 944
		for (KnowledgeRepository kr : krs) {
1026 945
			if (kr == null) continue;
1027
			
946

  
1028 947
			currentKnowledgeRepository = kr;
1029 948
			Log.warning(" KR: "+kr); //$NON-NLS-1$
1030 949
			List<AnnotationType> krtypes = kr.getAllAnnotationTypes();
......
1048 967
			Log.warning("Available annotation types: "+typesList);
1049 968
			break;
1050 969
		}
1051
		
970

  
1052 971
		if (currentKnowledgeRepository == null) {
1053 972
			System.out.println("Error: no suitable KnowledgeRepository found");
1054 973
			return;
......
1100 1019
		GridData gdata = new GridData(SWT.CENTER, SWT.CENTER, false, true);
1101 1020
		gdata.widthHint = 90;
1102 1021
		addRemoveCombo.setLayoutData(gdata);
1103
	
1022

  
1104 1023
		withLabel = new Label(annotationArea, SWT.NONE);
1105 1024
		String withLabelText = currentKnowledgeRepository.getString(locale, "ConcordancesEditor_83");
1106 1025
		if (withLabelText == null) withLabelText= Messages.ConcordancesEditor_83;
......
1239 1158
							}else {
1240 1159
								if (typesList.size() > 1){
1241 1160
									if (annotationTypesCombo != null) annotationTypesCombo.getCombo().select(typesList.size()-1);
1242
								
1161

  
1243 1162
								}
1244
								
1163

  
1245 1164
							}
1246 1165
							KRView.refresh();
1247 1166
							updateAnnotationWidgetStates();
......
1390 1309
			@Override
1391 1310
			public void widgetSelected(SelectionEvent e) {
1392 1311
				//@TODO Closing the annotation tool bar 
1393
					//System.out.println("must hide");
1394
					annotationSize = annotationArea.getSize();
1395
					annotationArea.dispose();
1396
					annotationArea = null;
1397
					parent.layout(true);
1398
					parent.layout();
1399
					annotationButton.setToolTipText(Messages.ConcordancesEditor_75);
1400
					annotationButton.setImage(IImageKeys.getImage(IImageKeys.PENCIL));
1401
					annotationColumn.setWidth(0);
1402
					annotationColumn.setResizable(false);
1312
				//System.out.println("must hide");
1313
				annotationSize = annotationArea.getSize();
1314
				annotationArea.dispose();
1315
				annotationArea = null;
1316
				parent.layout(true);
1317
				parent.layout();
1318
				annotationButton.setToolTipText(Messages.ConcordancesEditor_75);
1319
				annotationButton.setImage(IImageKeys.getImage(IImageKeys.PENCIL));
1320
				annotationColumn.setWidth(0);
1321
				annotationColumn.setResizable(false);
1403 1322
			}
1404 1323

  
1405 1324
			@Override
1406 1325
			public void widgetDefaultSelected(SelectionEvent e) { }
1407 1326
		});
1408
		
1409
		
1327

  
1328

  
1410 1329
		updateAnnotationWidgetStates();
1411 1330

  
1412 1331
		parent.layout();
......
1455 1374
					System.out.println("Annotation canceled by user.");
1456 1375
					return Status.CANCEL_STATUS;
1457 1376
				}
1458
				
1377

  
1459 1378
				return Status.OK_STATUS;
1460 1379
			}
1461 1380
		};
......
1611 1530
		// finally we can 'try' to create the annotations \o/
1612 1531
		try {
1613 1532
			HashMap<Match, List<Annotation>> existingAnnots = annotManager.createAnnotations(type, value_to_add, matches, job);
1614
			
1533

  
1615 1534
			// did we had problems ?
1616 1535
			if (existingAnnots!=null && existingAnnots.size() > 0) {
1617 1536
				String message = Messages.ConcordancesEditor_61+value_to_add.getStandardName()+
......
1853 1772
			});
1854 1773
		}
1855 1774
		// Navigation Area: infoLine and buttons
1856
				navigationArea = new NavigationWidget(navigationPanel, SWT.NONE);
1857
				navigationArea.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false, 4, 1));
1775
		navigationArea = new NavigationWidget(navigationPanel, SWT.NONE);
1776
		navigationArea.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, false, 4, 1));
1858 1777

  
1859
				// | [|<] [<] infos [>] [>|] |
1860
				// [|<]
1861
				navigationArea.addFirstListener(new SelectionListener() {
1862
					@Override
1863
					public void widgetDefaultSelected(SelectionEvent arg0) {
1864
					}
1778
		// | [|<] [<] infos [>] [>|] |
1779
		// [|<]
1780
		navigationArea.addFirstListener(new SelectionListener() {
1781
			@Override
1782
			public void widgetDefaultSelected(SelectionEvent arg0) {
1783
			}
1865 1784

  
1866
					@Override
1867
					public void widgetSelected(SelectionEvent arg0) {
1868
						fillDisplayArea(0, nLinePerPage - 1);
1869
					}
1870
				});
1785
			@Override
1786
			public void widgetSelected(SelectionEvent arg0) {
1787
				fillDisplayArea(0, nLinePerPage - 1);
1788
			}
1789
		});
1871 1790

  
1872
				// [<]
1873
				navigationArea.addPreviousListener(new SelectionListener() {
1874
					@Override
1875
					public void widgetDefaultSelected(SelectionEvent e) {
1876
					}
1791
		// [<]
1792
		navigationArea.addPreviousListener(new SelectionListener() {
1793
			@Override
1794
			public void widgetDefaultSelected(SelectionEvent e) {
1795
			}
1877 1796

  
1878
					@Override
1879
					public void widgetSelected(SelectionEvent e) {
1880
						int top = topLine - nLinePerPage;
1881
						if (top < 0)
1882
							top = 0;
1883
						int bottom = top + nLinePerPage -1 ;
1884
						fillDisplayArea(top, bottom);
1885
					}
1886
				});
1797
			@Override
1798
			public void widgetSelected(SelectionEvent e) {
1799
				int top = topLine - nLinePerPage;
1800
				if (top < 0)
1801
					top = 0;
1802
				int bottom = top + nLinePerPage -1 ;
1803
				fillDisplayArea(top, bottom);
1804
			}
1805
		});
1887 1806

  
1888
				// [>]
1889
				navigationArea.addNextListener(new SelectionListener() {
1890
					@Override
1891
					public void widgetDefaultSelected(SelectionEvent e) {
1892
					}
1807
		// [>]
1808
		navigationArea.addNextListener(new SelectionListener() {
1809
			@Override
1810
			public void widgetDefaultSelected(SelectionEvent e) {
1811
			}
1893 1812

  
1894
					@Override
1895
					public void widgetSelected(SelectionEvent e) {
1896
						fillDisplayArea(bottomLine + 1, bottomLine + nLinePerPage);
1897
					}
1898
				});
1813
			@Override
1814
			public void widgetSelected(SelectionEvent e) {
1815
				fillDisplayArea(bottomLine + 1, bottomLine + nLinePerPage);
1816
			}
1817
		});
1899 1818

  
1900
				// [>|]
1901
				navigationArea.addLastListener(new SelectionListener() {
1902
					@Override
1903
					public void widgetDefaultSelected(SelectionEvent e) {
1904
					}
1819
		// [>|]
1820
		navigationArea.addLastListener(new SelectionListener() {
1821
			@Override
1822
			public void widgetDefaultSelected(SelectionEvent e) {
1823
			}
1905 1824

  
1906
					@Override
1907
					public void widgetSelected(SelectionEvent e) {
1908
						int top = (concordance.getNLines()/nLinePerPage)*nLinePerPage;
1909
						int bottom = top + nLinePerPage -1 ;
1910
						fillDisplayArea(top, bottom);
1911
						//fillDisplayArea(concordance.getNLines() - 1 - nLinePerPage,concordance.getNLines() - 1);
1912
					}
1913
				});
1825
			@Override
1826
			public void widgetSelected(SelectionEvent e) {
1827
				int top = (concordance.getNLines()/nLinePerPage)*nLinePerPage;
1828
				int bottom = top + nLinePerPage -1 ;
1829
				fillDisplayArea(top, bottom);
1830
				//fillDisplayArea(concordance.getNLines() - 1 - nLinePerPage,concordance.getNLines() - 1);
1831
			}
1832
		});
1914 1833
		hideBtn = new Button(navigationPanel, SWT.PUSH);
1915 1834
		hideBtn.setText(Messages.ConcordancesEditor_38);
1916 1835
		hideBtn.addSelectionListener(new SelectionListener() {
......
1984 1903
			JobsTimer.start();
1985 1904
			Concordance oldConcordance = concordance;
1986 1905
			System.out.println(NLS.bind(Messages.ConcordancesEditor_5, query.getQueryString(), corpus.getName()));
1987
			concordance = new Concordance(corpus, query,
1906
			concordance = new Concordance(corpus);
1907
			concordance.setParameters(query,
1988 1908
					selectedLeftSortProperties, 
1989 1909
					selectedRightSortProperties,
1990 1910
					selectedKeywordSortProperties,
......
1994 1914
					getViewReferencePattern(),
1995 1915
					getSortReferencePattern(),
1996 1916
					leftContextSize, rightContextSize);
1997

  
1998 1917
			concordance.setCQLSeparator(cql_limit);
1999 1918

  
2000 1919
			if (annotationArea != null) {
......
2021 1940
			CorporaView.refresh();
2022 1941
			CorporaView.expand(corpus);
2023 1942
			QueriesView.refresh();
2024
			//FIXME: the call below doesn't work
2025
			//RVariablesView.refresh();
2026

  
1943
			
2027 1944
			if (fillDisplay) {
2028 1945
				fillDisplayArea(top, bottom);
2029 1946
			}
......
2034 1951
			resetColumnWidths();
2035 1952

  
2036 1953
			updateAnnotationWidgetStates();
2037
			JobsTimer.stopAndPrint();
2038 1954

  
2039

  
2040
			((ConcordanceEditorInput)this.getEditorInput()).setResult(concordance);
2041

  
2042 1955
			JobsTimer.stopAndPrint();
2043 1956

  
2044 1957
		} catch (Exception e1) {
......
2053 1966
				org.txm.rcp.utils.Logger.printStackTrace(e1);
2054 1967
				Log.severe(Log.toString(e1));
2055 1968
			}
2056
			
2057 1969
		}
2058 1970
	}
2059 1971

  
2060

  
2061 1972
	/**
2062 1973
	 * Computes the concordance and fills the display area with lines range corresponding to the first page.
2063 1974
	 */
......
2803 2714
	}
2804 2715
	 */
2805 2716

  
2806
	/* (non-Javadoc)
2807
	 * @see org.txm.rcp.commands.editor.CustomizableEditor#setName(java.lang.String)
2808
	 */
2809
	@Override
2810
	public void setName(String name) {
2811
		this.setPartName(name);
2812
	}
2813

  
2814
	/* (non-Javadoc)
2815
	 * @see org.txm.rcp.commands.editor.CustomizableEditor#setIcon(org.eclipse.swt.graphics.Image)
2816
	 */
2817
	@Override
2818
	public void setIcon(Image image) {
2819
		this.setTitleImage(image);
2820
	}
2821

  
2822
	/* (non-Javadoc)
2823
	 * @see org.txm.rcp.commands.editor.CustomizableEditor#setSource(java.lang.Object)
2824
	 */
2825
	@Override
2826
	public void setSource(Object source)
2827
	{
2828
		//this.source = source;
2829
	}
2830

  
2831
	/* (non-Javadoc)
2832
	 * @see org.txm.rcp.commands.editor.CustomizableEditor#getSource()
2833
	 */
2834
	@Override
2835
	public Object getSource() {
2836
		return concordance;
2837
	}
2838

  
2839 2717
	/**
2840 2718
	 * Gets the current comparator used for sorting lines.
2841 2719
	 * @return the currentComparator
......
2852 2730
		return (int) Math.ceil(((double)this.concordance.getNLines() / this.nLinePerPage));
2853 2731
	}
2854 2732

  
2855

  
2856
	@Override
2857
	public Object toConcordance() { return null;}
2858
	@Override
2859
	public Object toIndex() { return null;}
2860
	@Override
2861
	public Object toProgression() { return null;}
2862

  
2863 2733
	public void setQuery(String query) {
2864 2734
		queryWidget.setText(query);
2865 2735
	}
......
2891 2761
		}
2892 2762

  
2893 2763
		// Last resort edition
2894
		InternalViewEditorInput editorInput = new InternalViewEditorInput(corpus, null);
2895

  
2896
		IWorkbenchPage page = TXMWindows.getActiveWindow().getActivePage();
2897 2764
		try {
2765
			InternalView iview = new InternalView(corpus);
2766
			iview.setParameters(concordance.getKeywordAnalysisProperties(), 
2767
					concordance.getCorpus().getStructuralUnit("text"),
2768
					new ArrayList<StructuralUnitProperty>(), null);
2769

  
2770
			TXMResultEditorInput editorInput = new TXMResultEditorInput(iview);
2771

  
2772
			IWorkbenchPage page = TXMWindows.getActiveWindow().getActivePage();
2773

  
2898 2774
			StatusLine.setMessage(Messages.ComputeReferencer_0);
2899
			InternalViewEditor editor = (InternalViewEditor)page.openEditor(editorInput,"org.txm.rcp.editors.internal.InternalViewEditor"); //$NON-NLS-1$
2775
			InternalViewEditor editor = (InternalViewEditor)page.openEditor(editorInput,InternalViewEditor.class.getName()); //$NON-NLS-1$
2900 2776
			editor.backToText(line);
2901 2777
			SWTEditorsUtils.addEditor(this, editor, EModelService.ABOVE);
2902
		} catch (PartInitException e) {
2903
			System.err.println(Messages.CorporaView_6+ e);
2778
		} catch (Exception e) {
2779
			System.err.println("Error: could not open InternalView editor: "+ e);
2780
			Log.printStackTrace(e);
2904 2781
		}
2905 2782

  
2906 2783
		return false;
......
2946 2823
	}
2947 2824

  
2948 2825
	@Override
2949
	public boolean usingCorpus(Corpus corpus) {
2950
		return this.corpus.getName().equals(corpus.getName());
2826
	public boolean isResultUsingParent(TXMResult parent) {
2827
		return this.concordance.getParent().getName().equals(parent.getName());
2951 2828
	}
2952 2829

  
2953 2830
	@Override
2954
	public boolean updateCorpus(Corpus corpus) {
2955
		ConcordanceEditorInput input = (ConcordanceEditorInput) this.getEditorInput();
2956
		input.setCorpus(corpus);
2957
		input.setResult(null);
2958
		initializeEditor();
2959
		return true;
2831
	public void computeResult() {
2832
		// TODO Auto-generated method stub
2833

  
2960 2834
	}
2835

  
2836
	@Override
2837
	protected void initializeFields() {
2838
		if (this.concordance == null) {
2839
			leftContextSize = TXMPreferences.getInt(ConcordancePreferences.LEFT_CONTEXT_SIZE, ConcordancePreferences.PREFERENCES_NODE);
2840
			rightContextSize = TXMPreferences.getInt(ConcordancePreferences.RIGHT_CONTEXT_SIZE, ConcordancePreferences.PREFERENCES_NODE);
2841

  
2842
			selectedLeftViewProperties = new ArrayList<Property>();
2843
			selectedRightViewProperties = new ArrayList<Property>();
2844
			selectedKeywordViewProperties = new ArrayList<Property>();
2845

  
2846
			//set default view property
2847
			Property defaultViewProperty = availableKeywordViewProperties.get(0);
2848
			if(!defaultViewProperty.getName().equals("word")) //$NON-NLS-1$
2849
				for(int i = 0 ; i < availableKeywordViewProperties.size() ; i++ )
2850
					if (availableKeywordViewProperties.get(i).getName().equals("word")) //$NON-NLS-1$
2851
					{
2852
						defaultViewProperty = availableKeywordViewProperties.get(i);
2853
						break;
2854
					}
2855

  
2856
			availableKeywordViewProperties.remove(defaultViewProperty);
2857
			availableLeftViewProperties.remove(defaultViewProperty);
2858
			availableRightViewProperties.remove(defaultViewProperty);
2859
			selectedLeftViewProperties.add(defaultViewProperty);
2860
			selectedRightViewProperties.add(defaultViewProperty);
2861
			selectedKeywordViewProperties.add(defaultViewProperty);
2862

  
2863
			//set default sort property
2864
			selectedLeftSortProperties = new ArrayList<Property>();
2865
			selectedRightSortProperties = new ArrayList<Property>();
2866
			selectedKeywordSortProperties = new ArrayList<Property>();
2867

  
2868
			Property defaultSortProperty = availableKeywordSortProperties.get(0);
2869
			if(!defaultSortProperty.getName().equals("word")) //$NON-NLS-1$
2870
				for(int i = 0 ; i < availableKeywordSortProperties.size() ; i++ )
2871
					if (availableKeywordSortProperties.get(i).getName().equals("word")) //$NON-NLS-1$
2872
					{
2873
						defaultSortProperty = availableKeywordSortProperties.get(i);
2874
						break;
2875
					}
2876

  
2877
			availableKeywordSortProperties.remove(defaultSortProperty);
2878
			availableLeftSortProperties.remove(defaultSortProperty);
2879
			availableRightSortProperties.remove(defaultSortProperty);
2880
			selectedLeftSortProperties.add(defaultSortProperty);
2881
			selectedRightSortProperties.add(defaultSortProperty);
2882
			selectedKeywordSortProperties.add(defaultSortProperty);
2883

  
2884
			this.refViewPattern = new ReferencePattern();
2885
			this.refSortPattern = new ReferencePattern();
2886
			try { // set the default reference is there is one
2887
				if (corpus.getProperty("ref") != null) //$NON-NLS-1$
2888
				{
2889
					refViewPattern.addProperty(corpus.getProperty("ref")); //$NON-NLS-1$
2890
					refSortPattern.addProperty(corpus.getProperty("ref")); //$NON-NLS-1$
2891
				} else {
2892
					if (corpus.getStructuralUnit("text") != null) //$NON-NLS-1$
2893
						if (corpus.getStructuralUnit("text").getProperty("id") != null) //$NON-NLS-1$ //$NON-NLS-2$
2894
						{
2895
							refViewPattern.addProperty(corpus.getStructuralUnit("text").getProperty("id")); //$NON-NLS-1$ //$NON-NLS-2$
2896
							refSortPattern.addProperty(corpus.getStructuralUnit("text").getProperty("id")); //$NON-NLS-1$ //$NON-NLS-2$
2897
						}
2898
				}
2899
			} catch (CqiClientException e) {
2900
				System.out.println(NLS.bind(Messages.ConcordancesEditor_43, corpus.getName(), e));
2901
			}
2902
		} else {
2903
			leftContextSize = concordance.getLeftContextSize();
2904
			rightContextSize = concordance.getRightContextSize();
2905

  
2906
			selectedLeftViewProperties = concordance.getLeftViewProperties();
2907
			selectedRightViewProperties = concordance.getRightViewProperties();
2908
			selectedKeywordViewProperties = concordance.getKeywordViewProperties();
2909
			availableKeywordViewProperties.remove(selectedKeywordViewProperties);
2910
			availableLeftViewProperties.remove(selectedLeftViewProperties);
2911
			availableRightViewProperties.remove(selectedRightViewProperties);
2912

  
2913
			selectedLeftSortProperties = concordance.getLeftAnalysisProperties();
2914
			selectedRightSortProperties = concordance.getRightAnalysisProperties();
2915
			selectedKeywordSortProperties = concordance.getKeywordAnalysisProperties();
2916
			availableKeywordSortProperties.remove(selectedKeywordSortProperties);
2917
			availableLeftSortProperties.remove(selectedLeftSortProperties);
2918
			availableRightSortProperties.remove(selectedRightSortProperties);
2919

  
2920
			this.refViewPattern = concordance.getRefViewPattern();
2921
			this.refSortPattern = concordance.getRefAnalysePattern();
2922
		}
2923

  
2924
	}
2961 2925
}
tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/handlers/ComputeConcordance.java (revision 491)
35 35
import org.eclipse.ui.IEditorPart;
36 36
import org.eclipse.ui.PartInitException;
37 37
import org.txm.concordance.core.functions.Concordance;
38
import org.txm.concordance.rcp.editors.ConcordanceEditorInput;
38
import org.txm.concordance.rcp.editors.ConcordanceEditor;
39 39
import org.txm.rcp.Messages;
40 40
import org.txm.rcp.StatusLine;
41 41
import org.txm.rcp.TXMWindows;
42
import org.txm.rcp.editors.TXMResultEditorInput;
42 43
import org.txm.rcp.handlers.BaseAbstractHandler;
43 44
import org.txm.rcp.views.corpora.CorporaView;
44 45
import org.txm.searchengine.cqp.CQPEngine;
......
52 53
 */
53 54
public class ComputeConcordance extends BaseAbstractHandler {
54 55

  
55
	
56
	
57 56
	// adds a double click listener to the Corpus View
58 57
	static	{
59 58
		CorporaView.addDoubleClickListener(Concordance.class, ComputeConcordance.class);
60 59
	}
61 60

  
62
	
63

  
64 61
	@Override
65 62
	public Object execute(ExecutionEvent event) throws ExecutionException {
66 63
		
67 64
		Object selection = this.getSelection();
68
		if (!(selection instanceof Corpus))
69
			return null;
70
		Corpus corpus = (Corpus) selection;
71
		if (openEditor(corpus)) {
72

  
73
		} else {
65
		if (!openEditor(selection)) {
74 66
			System.out.println(Messages.ComputeConcordance_1);
75 67
		}
76 68

  
......
78 70
	}
79 71

  
80 72
	@Inject
81
	public static boolean openEditor(Corpus corpus) {
73
	public static boolean openEditor(Object o) {
74
		
82 75
		if (!CQPEngine.isInitialized()) {
83 76
			System.out.println("SearchEngine is not ready. Aborting.");
84 77
			return false;
85 78
		}
86 79
		
87
		ConcordanceEditorInput editorInput = new ConcordanceEditorInput(corpus, null);
88

  
89
		// FIXME: MD: test of manipulating the editor's position in the UI
90
		/*
91
		Workbench wb = (Workbench) PlatformUI.getWorkbench();
92

  
93
		System.out.println("Workbench: " + wb);
94
		for (IWorkbenchWindow iwindow : wb.getWorkbenchWindows()) {
95
			WorkbenchWindow window = (WorkbenchWindow) iwindow;
96

  
97
			System.out.println(" Window: "+window);
98
			for (IWorkbenchPage ipage :window.getPages()) {
99
				WorkbenchPage page = (WorkbenchPage)ipage;
100
				System.out.println("  Page: "+page);
101
				
102
				for (IEditorReference ieditor : page.getInternalEditorReferences()) {
103
					EditorReference editor = (EditorReference)ieditor;
104
					System.out.println("   Editor: "+editor+" "+editor.getId());
105
					System.out.println("    part: "+ieditor.getPart(false));
106
				}
107
				for (IEditorPart dirtyEditor : page.getDirtyEditors()) {
108
					System.out.println("   IEditorPart: "+dirtyEditor);
109
				}
110

  
111
				for (ISaveablePart dirtyPart : page.getDirtyParts()) {
112
					System.out.println("   ISaveablePart: "+dirtyPart);
113
				}
114

  
115
				for (EditorReference editorref : page.getInternalEditorReferences()) {
116
					System.out.println("   EditorReference: "+editorref+" "+editorref.getId());
117
				}
118
				//				for (IViewReference viewref : page.getViewReferences()) {
119
				//					System.out.println("   IViewReference: "+viewref+" "+viewref.getId());
120
				//				}
121
				for (IWorkingSet iworkingset : page.getWorkingSets()) {
122
					WorkingSet workingset = (WorkingSet)iworkingset;
123
					System.out.println("   WorkingSet: "+workingset+" "+workingset.getId());
124
					for (IAdaptable a : workingset.getElements()) {
125
						System.out.println("    IAdaptable: "+a);
126
					}
127
				}
128

  
129
				MWindow modelwindow = window.getModel();
130
				
131
				System.out.println("MWindow: "+modelwindow);
132
				for (MWindowElement elem : modelwindow.getChildren()) {
133
					if (elem instanceof PartSashContainerImpl) {
134
						printChildren(elem, " ");
135
//						PartSashContainerImpl psc = (PartSashContainerImpl)elem;
136
//						System.out.println(" PartSashContainerImpl: "+psc);
137
//						for (MPartSashContainerElement elem2 : psc.getChildren()) {
138
//
139
//							if (elem2 instanceof PerspectiveStackImpl) {
140
//								PerspectiveStackImpl psi = (PerspectiveStackImpl)elem2;
141
//								System.out.println("  PerspectiveStackImpl: "+psi);
142
//								for (MPerspective p : psi.getChildren()) {
143
//									System.out.println("   MPerspective: "+p);
144
//									for (MPartSashContainerElement elem3 : p.getChildren()) {
145
//										if (elem3 instanceof PartSashContainerImpl) {
146
//											PartSashContainerImpl psci = (PartSashContainerImpl)elem3;
147
//											printChildren(psci, "    ");
148
//										} else {
149
//											System.out.println("    MPartSashContainerElement: "+elem3);
150
//										}
151
//									}
152
//								}
153
//							} else if (elem2 instanceof PartStackImpl) {
154
//								PartStackImpl psi = (PartStackImpl)elem2;
155
//								System.out.println("  PartStackImpl: "+psi);
156
//								for (MStackElement e : psi.getChildren()) {
157
//									System.out.println("   MStackElement: "+e);
158
//								}
159
//							} else {
160
//								System.out.println("  MPartSashContainerElement: "+elem2+" id="+elem2.getElementId());
161
//							}
162
//						}
163
					} else {
164
						System.out.println(" MWindowElement: "+elem);
165
					}
166
				}
167
			}
80
		Concordance concordance = null;
81
		if (o instanceof Corpus) {
82
			Corpus corpus = (Corpus) o;
83
			concordance = new Concordance(corpus);
84
		} else if (o instanceof Concordance) {
85
			concordance = (Concordance)o;
86
		} else {
87
			System.out.println("Could not call ComputeConcordance with: "+o);
88
			return false;
168 89
		}
169
	*/
90
		
91
		TXMResultEditorInput editorInput = new TXMResultEditorInput(concordance);
92

  
170 93
		try {
171 94
			StatusLine.setMessage(Messages.ComputeConcordance_0);
172
			IEditorPart editor = TXMWindows.getActiveWindow().getActivePage().openEditor(editorInput, "ConcordanceEditor"); //$NON-NLS-1$
173
			
174
//			WorkbenchWindow window = (WorkbenchWindow)TXMWindows.getActiveWindow();
175
//			MWindow model = window.getModel();
176
//			EModelService modelService = model.getContext().get(EModelService.class);
177
//			EPartService partService = model.getContext().get(EPartService.class);
178
//			modelService.find("org.eclipse.ui.editorss", model); // find org.eclipse.ui.editorss?					
179
//			MPart part = partService.createPart("org.txm.rcp.editors.ConcordancesEditor");
180
//// NEXT STEPS : find partStack, add the part, show the part http://stackoverflow.com/questions/26912078/open-an-editing-partas-an-editor-in-previous-eclipse-versions-in-eclipse-rcp-4
181
// ? direct access to PlaceholderImpl : elementId=org.eclipse.ui.editorss	
182
			if (editor == null) return false;
183
			
95
			IEditorPart editor = TXMWindows.getActiveWindow().getActivePage().openEditor(editorInput, ConcordanceEditor.class.getName()); //$NON-NLS-1$
96
				if (editor == null) return false;
184 97
		} catch (PartInitException e) {
185 98
			System.err.println(NLS.bind(Messages.GetConcordances_4, e));
186 99
			e.printStackTrace();
187 100
		}
188 101
		return true;
189 102
	}
190

  
191
// FIXME: tests
192
//	private static void printChildren(Object o, String space) {
193
//
194
//		System.out.println(space+o.getClass().getSimpleName()+": "+o);
195
//		
196
//		if (o instanceof PlaceholderImpl) {
197
//			PlaceholderImpl phi = (PlaceholderImpl)o;
198
//			System.out.println("phi: "+phi);
199
//		} else if (o instanceof PartSashContainerImpl) {
200
//			PartSashContainerImpl psci = (PartSashContainerImpl)o;
201
//			for (MPartSashContainerElement e :psci.getChildren()) {
202
//				printChildren(e, space+" ");
203
//			}
204
//		} else if (o instanceof PerspectiveStackImpl) {
205
//			PerspectiveStackImpl psi = (PerspectiveStackImpl)o;
206
//			for (MPerspective p : psi.getChildren()) {
207
//				printChildren(p,space+" ");
208
//			}
209
//		} else if (o instanceof MPerspective) {
210
//			MPerspective p = (MPerspective)o;
211
//			for (MPartSashContainerElement e : p.getChildren()) {
212
//				printChildren(e, space+" ");
213
//			}
214
//		} else if (o instanceof PartStackImpl) {
215
//			PartStackImpl psi = (PartStackImpl)o;
216
//			for (MStackElement e : psi.getChildren()) {
217
//				printChildren(e, space+" ");
218
//			}
219
//		}
220
//	}
221 103
}
tmp/org.txm.concordance.rcp/plugin.xml (revision 491)
35 35
            allPopups="false"
36 36
            locationURI="popup:org.txm.rcp.views.CorporaView">
37 37
         <command
38
               commandId="ComputeConcordance"
38
               commandId="org.txm.concordance.rcp.handlers.ComputeConcordance"
39 39
               icon="icons/concordance.png"
40 40
               style="push">
41 41
            <visibleWhen
......
51 51
      <menuContribution
52 52
            locationURI="menu:menu.tools">
53 53
         <command
54
               commandId="ComputeConcordance"
54
               commandId="org.txm.concordance.rcp.handlers.ComputeConcordance"
55 55
               icon="icons/concordance.png"
56 56
               style="push">
57 57
            <visibleWhen
......
68 68
            allPopups="false"
69 69
            locationURI="toolbar:org.txm.rcp.toolbartools">
70 70
         <command
71
               commandId="ComputeConcordance"
71
               commandId="org.txm.concordance.rcp.handlers.ComputeConcordance"
72 72
               icon="icons/concordance.png"
73 73
               style="push"
74 74
               tooltip="%command.tooltip">
......
85 85
      <menuContribution
86 86
            locationURI="popup:org.txm.rcp.editors.ConcordancesEditor">
87 87
         <command
88
               commandId="DeleteConcordanceLines"
88
               commandId="org.txm.concordance.rcp.handlers.DeleteLines"
89
               icon="platform:/plugin/org.txm.rcp/icons/cross.png"
89 90
               style="push">
90 91
         </command>
91 92
      </menuContribution>
......
95 96
      <command
96 97
            categoryId="org.txm.rcp.category.txm"
97 98
            defaultHandler="org.txm.concordance.rcp.handlers.ComputeConcordance"
98
            id="ComputeConcordance"
99
            id="org.txm.concordance.rcp.handlers.ComputeConcordance"
99 100
            name="%command.name">
100 101
      </command>
101 102
      <command
102 103
            defaultHandler="org.txm.concordance.rcp.handlers.DeleteLines"
103
            id="DeleteConcordanceLines"
104
            id="org.txm.concordance.rcp.handlers.DeleteLines"
104 105
            name="%command.name.37">
105 106
      </command>
106 107
   </extension>
tmp/org.txm.ca.rcp/plugin.xml (revision 491)
14 14
            allPopups="false"
15 15
            locationURI="toolbar:org.txm.rcp.toolbartools">
16 16
         <command
17
               commandId="ComputeCA"
17
               commandId="org.txm.ca.rcp.handlers.ComputeCA"
18 18
               icon="icons/ca.png"
19 19
               style="push">
20 20
            <visibleWhen
......
37 37
            allPopups="false"
38 38
            locationURI="popup:org.txm.rcp.views.CorporaView">
39 39
         <command
40
               commandId="ComputeCA"
40
               commandId="org.txm.ca.rcp.handlers.ComputeCA"
41 41
               icon="icons/ca.png"
42 42
               style="push">
43 43
            <visibleWhen
......
59 59
      <menuContribution
60 60
            locationURI="menu:menu.tools">
61 61
         <command
62
               commandId="ComputeCA"
62
               commandId="org.txm.ca.rcp.handlers.ComputeCA"
63 63
               icon="icons/ca.png"
64 64
               style="push">
65 65
            <visibleWhen
......
84 84
      <command
85 85
            categoryId="org.txm.rcp.category.txm"
86 86
            defaultHandler="org.txm.ca.rcp.handlers.ComputeCA"
87
            id="ComputeCA"
87
            id="org.txm.ca.rcp.handlers.ComputeCA"
88 88
            name="%command.name">
89 89
      </command>
90 90
   </extension>
tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java (revision 491)
40 40
import org.eclipse.ui.handlers.HandlerUtil;
41 41
import org.txm.ca.core.functions.CA;
42 42
import org.txm.ca.core.functions.ICAComputable;
43
import org.txm.ca.rcp.editors.CAEditor;
43 44
import org.txm.ca.rcp.messages.CAUIMessages;
44 45
import org.txm.lexicaltable.core.functions.LexicalTable;
46
import org.txm.lexicaltable.core.functions.LexicalTableFactory;
45 47
import org.txm.lexicaltable.rcp.editors.LexicalTableDialog;
46 48
import org.txm.rcp.editors.TXMResultEditorInput;
47 49
import org.txm.rcp.handlers.BaseAbstractHandler;
......
52 54
import org.txm.rcp.views.corpora.CorporaView;
53 55
import org.txm.searchengine.cqp.corpus.Partition;
54 56
import org.txm.searchengine.cqp.corpus.Property;
57
import org.txm.utils.logger.Log;
55 58
import org.txm.utils.logger.MessageBox;
56 59

  
57 60
/**
......
82 85
	/** The Lexical Table. */
83 86
	private LexicalTable lexicaltable;
84 87

  
85
	
86
	
88

  
89

  
87 90
	// adds a double click listener to the Corpus View
88 91
	static	{
89 92
		CorporaView.addDoubleClickListener(CA.class, ComputeCA.class);
90 93
	}
91
	
92
	
93
	
94

  
95

  
96

  
94 97
	/* (non-Javadoc)
95 98
	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
96 99
	 */
97 100
	@Override
98 101
	public Object execute(ExecutionEvent event) throws ExecutionException {
99
		
100
		ca = null;
101
		
102

  
102 103
		if (!this.checkStatsEngine()) {
103 104
			return null;
104 105
		}
105
		
106

  
106 107
		final IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
107 108
		final Object selection = this.getSelection();
108
		
109
		int code = 0;
110
		// Create CA from partition
111
		if (selection instanceof Partition) {
112
			partition = (Partition) selection;
113
			//warning to few parts
114
			if (partition.getNPart() < 4) {
115
				MessageDialog d = new MessageDialog(
116
						window.getShell(),
117
						CAUIMessages.ComputeCorrespondanceAnalysis_3,
118
						null,
119
						NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_4, partition.getNPart()),
120
						0,
121
						new String[] { CAUIMessages.ComputeCorrespondanceAnalysis_6 },
122
						0);
123
				d.open();
124
				return null;
125
			}
126
			//ask property and Fmins and Vmax
127
			String title = Messages.bind(CAUIMessages.ComputeCorrespondanceAnalysisDialog_0, partition.getName());
128
			LexicalTableDialog d = new LexicalTableDialog(
129
					window.getShell(), partition.getCorpus(), title);
130
			code = d.open();
131
			if (code == Window.OK) {
132
				property = d.getProperty();
133
				fmin = d.getFmin();
134
				vmax = d.getMaxLines();
135
			}
109

  
110

  
111

  
112

  
113

  
114
		// final Property property = d.getProperty();
115
		String statusmessage;
116
		if (partition != null)	{
117
			statusmessage = NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_0, partition.getName(), property);
136 118
		}
137
		// Create CA from Lexical Table
138
		else if (selection instanceof LexicalTable) {
139
			lexicaltable = (LexicalTable) selection;
140
			property = lexicaltable.getProperty();
141
			partition = lexicaltable.getPartition();
142
			if (lexicaltable.getNColumns() < 4) {
143
				MessageBox.error(CAUIMessages.ComputeCorrespondanceAnalysis_13);
144
				return null;
145
			}
146
			if (lexicaltable.getNRows() < 4) {
147
				MessageBox.error(CAUIMessages.ComputeCorrespondanceAnalysis_1);
148
				return null;
149
			}
150
			code = Window.OK;
119
		else	{
120
			statusmessage = NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_0, selection, "<none>"); //$NON-NLS-1$
151 121
		}
152
		// Reopens an existing editor
153
		else if (selection instanceof CA) {
154
			ca = (CA) selection;
155
			partition = ca.getPartition();
156
		}
157
		// From others 
158
		else if (selection instanceof ICAComputable) {
159
			partition = ((ICAComputable) selection).getPartition();
160
		}
161 122

  
162
		if (code == Window.OK) {
163
			// final Property property = d.getProperty();
164
			String statusmessage;
165
			if (partition != null)	{
166
				statusmessage = NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_0, partition.getName(), property);
167
			}
168
			else	{
169
				statusmessage = NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_0, selection, "<none>"); //$NON-NLS-1$
170
			}
171
			
172
			System.out.println(statusmessage);
173
			JobHandler jobhandler = new JobHandler(statusmessage) {
174
				@Override
175
				protected IStatus run(IProgressMonitor monitor) {
176
					this.runInit(monitor);
177
					try {
178
						JobsTimer.start();
179
						monitor.beginTask("", 100); //$NON-NLS-1$
180
						monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_15);
123
		System.out.println(statusmessage);
124
		JobHandler jobhandler = new JobHandler(statusmessage) {
125
			@Override
126
			protected IStatus run(IProgressMonitor monitor) {
127
				this.runInit(monitor);
128
				try {
129
					JobsTimer.start();
181 130

  
182
						if (ca == null)	{
183
							if (selection instanceof Partition)	{
184
								ca = new CA(partition, property, fmin, vmax);
185
							}
186
							else if (selection instanceof LexicalTable)	{
187
								ca = new CA(lexicaltable);
188
							}
189
							else if (selection instanceof ICAComputable)	{
190
								ca = ((ICAComputable) selection).toCA();
191
							}
192
	
193
							if (selection instanceof Partition) {
194
								if (monitor.isCanceled()) return Status.CANCEL_STATUS;
195
								monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_16);
196
								
197
								this.acquireSemaphore();
198
								ca.stepLexicalTable();
199
								this.releaseSemaphore();
200
								
201
								this.acquireSemaphore();
202
								ca.stepSortTableLexical();
203
								this.releaseSemaphore();
204
							}
205
							
206
							monitor.worked(20);
131
					monitor.beginTask("", 100); //$NON-NLS-1$
132
					monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_15);
133
					CA ca = null;
207 134

  
208
							if (monitor.isCanceled()) return Status.CANCEL_STATUS;
135
					if (selection instanceof Partition) { // Create CA from partition -> need a LexicalTable
136
						partition = (Partition) selection;
137
						//warning to few parts
138
						if (partition.getNPart() < 4) {
139
							MessageDialog d = new MessageDialog(
140
									window.getShell(),
141
									CAUIMessages.ComputeCorrespondanceAnalysis_3,
142
									null,
143
									NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_4, partition.getNPart()),
144
									0,
145
									new String[] { CAUIMessages.ComputeCorrespondanceAnalysis_6 },
146
									0);
147
							d.open();
148
							return null;
149
						}
150
						//ask property and Fmins and Vmax
151
						String title = Messages.bind(CAUIMessages.ComputeCorrespondanceAnalysisDialog_0, partition.getName());
152
						LexicalTableDialog d = new LexicalTableDialog(
153
								window.getShell(), partition.getCorpus(), title);
154
						if (d.open() == LexicalTableDialog.OK) {
155
							property = d.getProperty();
156
							fmin = d.getFmin();
157
							vmax = d.getMaxLines();
209 158

  
210
							monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_17);
211
							this.acquireSemaphore();
212
							ca.stepCompute();
213
							this.releaseSemaphore();
214
							
215
							ca.getLexicalTable().addResult(ca);
159
							try {
160
								LexicalTable table = LexicalTableFactory.getLexicalTable(partition, property, fmin);
161
							} catch (Exception e) {
162
								System.out.println("Error: cannot create the lexical table: "+e);
163
								Log.printStackTrace(e);
164
							}
165
						}
166
					} else if (selection instanceof LexicalTable) { // Create CA from Lexical Table
167
						lexicaltable = (LexicalTable) selection;
168
						property = lexicaltable.getProperty();
169
						partition = lexicaltable.getPartition();
216 170

  
171
						if (lexicaltable.getNColumns() < 4) {
172
							MessageBox.error(CAUIMessages.ComputeCorrespondanceAnalysis_13);
173
							return null;
217 174
						}
218
						
219
						if (ca == null)	{
220
							return Status.CANCEL_STATUS;
175
						if (lexicaltable.getNRows() < 4) {
176
							MessageBox.error(CAUIMessages.ComputeCorrespondanceAnalysis_1);
177
							return null;
221 178
						}
222 179

  
223
						
224
						monitor.worked(20);
225
						monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_8);
180
						ca = new CA(lexicaltable);
181
					} else if (selection instanceof CA) { // Reopens an existing editor
182
						ca = (CA) selection;
183
					} else {
184
						System.out.println("Error: cannot compute a CA with current selection: "+selection);
185
					}
226 186

  
227
						syncExec(new Runnable() {
228
							@Override
229
							public void run() {
230
								try {
231
									IWorkbenchPage page = window.getActivePage();
232
									TXMResultEditorInput editorInput = new TXMResultEditorInput(ca);
233
									StatusLine.setMessage(CAUIMessages.ComputeCorrespondanceAnalysis_14);
234
									page.openEditor(editorInput, "CAEditor"); //$NON-NLS-1$
235
									StatusLine.setMessage(CAUIMessages.ComputeCorrespondanceAnalysis_14);
236
								} catch (Exception e) {
237
									org.txm.rcp.utils.Logger.printStackTrace(e);
238
								} 
187
					if (ca == null) {
188
						System.out.println("Error: ca is null");
189
						return Status.CANCEL_STATUS;
190
					}
239 191

  
240
							}
241
						});
242
						monitor.worked(50);
192
					monitor.worked(20);
243 193

  
244
						monitor.subTask(Messages.RefreshingCorporaView);
194
					if (monitor.isCanceled()) return Status.CANCEL_STATUS;
245 195

  
246
						//FIXME: doesn't work, why?
247
						//CorporaView.refreshObject(ca);
248
						
249
//						syncExec(new Runnable() {
250
//							@Override
251
//							public void run() {
252
//								CorporaView.refresh();
253
//								CorporaView.expand(ca.getParent());
254
//							}
255
//						});
196
//					monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_17);
197
//					this.acquireSemaphore();
198
//					ca.stepCompute();
199
//					this.releaseSemaphore();
200
//
201
//					ca.getLexicalTable().addResult(ca);
256 202

  
257
						monitor.worked(100);
258
					} catch (ThreadDeath td) {
259
						return Status.CANCEL_STATUS;
260
					} catch (Exception e) {
261
						org.txm.rcp.utils.Logger.printStackTrace(e);
262
					} finally {
263
						monitor.done();
264
						JobsTimer.stopAndPrint();
265
					}
266
					return Status.OK_STATUS;
203
					monitor.worked(20);
204
					monitor.subTask(CAUIMessages.ComputeCorrespondanceAnalysis_8);
205
					
206
					final TXMResultEditorInput editorInput = new TXMResultEditorInput(ca);
207
					syncExec(new Runnable() {
208
						@Override
209
						public void run() {
210
							try {
211
								IWorkbenchPage page = window.getActivePage();
212
								StatusLine.setMessage(CAUIMessages.ComputeCorrespondanceAnalysis_14);
213
								page.openEditor(editorInput, CAEditor.class.getName()); //$NON-NLS-1$
214
								
215
								CorporaView.refresh();
216
							} catch (Exception e) {
217
								org.txm.rcp.utils.Logger.printStackTrace(e);
218
							} 
219
						}
220
					});
221
					monitor.worked(60);
222
					
223
				} catch (ThreadDeath td) {
224
					return Status.CANCEL_STATUS;
225
				} catch (Exception e) {
226
					org.txm.rcp.utils.Logger.printStackTrace(e);
227
				} finally {
228
					monitor.done();
229
					JobsTimer.stopAndPrint();
267 230
				}
268
			};
269
			jobhandler.startJob();
270
		}
231
				return Status.OK_STATUS;
232
			}
233
		};
234
		jobhandler.startJob();
271 235
		return null;
272 236
	}
273 237
}
tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAEditor.java (revision 491)
62 62
import org.eclipse.ui.part.EditorPart;
63 63
import org.txm.ca.core.chartsengine.base.Utils;
64 64
import org.txm.ca.core.functions.CA;
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.

Formats disponibles : Unified diff