Revision 2108

tmp/org.txm.analec.rcp/src/org/txm/macro/urs/democrat/Verifications_alMacro.groovy (revision 2108)
1
// Auteur Matthieu Quignard
2
// Date : 14 janvier 2019
3

  
4
/**********
5
Vérifications automatiques
6
1. Repère les mentions sans catégorie : CHECK > CAT
7
2. Repère les mentions sans référent : CHECK > REF
8
3. Supprime les ponctuations en début et en fin de mention : CHECK > BORNES
9
4. Supprime les prépositions autres que 'de' en début de mention : CHECK > BORNES
10
5. Supprime automatiquement toutes les mentions vides = sans aucun mot = de longueur 0
11
6. Détecter les mentions qui ont exactement les mêmes bornes  : CHECK > DOUBLON
12
7 (option). Détecter les pronoms hors mention : CHECK > NEW
13
***********/
14

  
15
package org.txm.macro.urs.democrat
16

  
17
import org.apache.commons.lang.*
18
import org.kohsuke.args4j.*
19
import groovy.transform.*
20
import org.txm.*
21
import org.txm.rcpapplication.swt.widget.parameters.*
22
import org.txm.analec.*
23
import org.txm.searchengine.cqp.*
24
import org.txm.searchengine.cqp.corpus.*
25
import visuAnalec.Message.*
26
import visuAnalec.donnees.*
27
import visuAnalec.elements.*
28
import visuAnalec.vue.*
29

  
30
// TODO : ajouter les étiquettes équivalentes issues du tagset TreeTagger
31
// Ponctuations et Prépositions
32
def interditsAuDebut = ["PONfbl", "PONfrt", "PONpxx", "PRE"]
33
// Ponctuations
34
def interditsALaFin = ["PONfbl", "PONfrt", "PONpxx"]
35
// Pronoms en tous genres
36
def listePronoms = ["PROadv", "PROcar", "PROdem", "PROind", "PROint", "PROper", "PROpos", "PROrel"]
37
// AL: supprimé PROimp (non référentiel) de la liste des pronoms
38

  
39
// CORPS DU SCRIPT
40

  
41
if (!(corpusViewSelection instanceof MainCorpus)) {
42
	println "Corpora selection is not a Corpus"
43
	return
44
}
45

  
46
// BEGINNING OF PARAMETERS
47
@Field @Option(name="unit_type", usage="Unité", widget="String", required=true, def="MENTION")
48
def unit_type
49
@Field @Option(name="pos_property_name", usage="Etiquette de morphosyntaxe", widget="String", required=true, def="frpos")
50
def pos_property_name
51
@Field @Option(name="cat_name", usage="Propriété CATEGORIE", widget="String", required=true, def="CATEGORIE")
52
def cat_name
53
@Field @Option(name="ref_name", usage="Propriété REF", widget="String", required=true, def="REF")
54
def ref_name
55
@Field @Option(name="checkPronouns", usage="Vérifier les pronoms oubliés", widget="Boolean", required=true, def="true")
56
def checkPronouns
57

  
58
if (!ParametersDialog.open(this)) return
59

  
60
corpus = corpusViewSelection
61
CQI = Toolbox.getCqiClient()
62
word = corpus.getWordProperty()
63
posProperty = corpus.getProperty(pos_property_name)
64
if (posProperty == null) {
65
	println "Error: CQP corpus does not contain the word property with name=$pos_property_name"
66
	return
67
}
68

  
69
analecCorpus = AnalecCorpora.getCorpus(corpus.getName())
70
vue = AnalecCorpora.getVue(corpus.getName())
71
structure = analecCorpus.getStructure()
72

  
73
if (!structure.getUnites().contains(unit_type)) { // check if the structure contains the unit_type units
74
	println "Error: corpus structure does not contains unit with name=$unit_type"
75
	return
76
}
77

  
78
if (!structure.getUniteProperties(unit_type).contains(cat_name)) { 
79
	println "Erreur : les unités $unit_type n'ont pas de propriété $cat_name"
80
	return
81
}
82

  
83
if (!structure.getUniteProperties(unit_type).contains(ref_name)) { 
84
	println "Erreur : les unités $unit_type n'ont pas de propriété $ref_name"
85
	return
86
}
87

  
88
println "Détection des pronoms oubliés : $checkPronouns"
89

  
90
// Reinitialiser la propriété CHECK
91
if (!structure.getUniteProperties(unit_type).contains("CHECK")) {
92
	analecCorpus.ajouterProp(Unite.class, unit_type, "CHECK")
93
} else {
94
	println "Nettoyage des anciennes annotations CHECK"
95
  	def tmpvalues = new HashSet()
96
	tmpvalues.addAll(structure.getValeursProp(Unite.class, unit_type, "CHECK"));
97
	for (String val : tmpvalues) {
98
		structure.supprimerVal(Unite.class, unit_type, "CHECK", val);
99
		//println "suppression de l'étiquette $val"
100
	}
101
}
102

  
103
structure.ajouterVal(Unite.class, unit_type, "CHECK", "DONE")
104

  
105
	
106

  
107
def nModified = 0
108
def nIgnored = 0
109
def nDeleted = 0
110
def nAdded = 0
111

  
112
def garbageBin = []
113

  
114
def nToks = corpus.getSize()
115
def tokenIndex = new int[nToks]
116

  
117
def i = 0
118
for (i=0 ; i< nToks ; i++) tokenIndex[i] = 1
119

  
120
errors = new HashMap()
121
def units = analecCorpus.getUnites(unit_type)
122
units.sort() { a, b -> a.getDeb() <=> b.getDeb() ?: a.getFin() <=> b.getFin() }
123

  
124
// pour les doublons
125
def lastUnit = null
126

  
127
for (Unite unit : units) { // process all units
128
	def erreur = ""
129
	
130
	// 1. Catégories vides
131
	def cat = unit.getProp( cat_name );
132
	if (cat == "") erreur += "CAT "
133
	
134
	// 2. Référents vides (plus grave) ; pas besoin de catégories
135
	def ref = unit.getProp( ref_name );
136
	if (ref == "") erreur += "REF "
137
	
138
	// 3. Suppression des erreurs initiales ; besoin de catégories
139
	int[] positions = null
140
	if (unit.getDeb() == unit.getFin()) positions = [unit.getDeb()]
141
	else positions = (unit.getDeb()..unit.getFin())
142
	def Mention = CQI.cpos2Str(posProperty.getQualifiedName(), positions)
143
	
144
	def isOK = false
145
	while (isOK == false) {
146
	   if (interditsAuDebut.contains(Mention[0])) {
147
	      if (positions.size() == 1) {
148
	         erreur += "SUPPR"
149
	         isOK = true
150
	      } else {
151
	         def debut = unit.getDeb()
152
	         unit.setDeb(  debut + 1 )
153
	         
154
	         if (unit.getDeb() == unit.getFin()) positions = [unit.getDeb()]
155
			 else positions = (unit.getDeb()..unit.getFin())
156
			 Mention = CQI.cpos2Str(posProperty.getQualifiedName(), positions)
157
			 if (!erreur.contains("BORNESG")) erreur += "BORNESG "
158
	      }
159
	   } else { 
160
	      isOK = true
161
	   } 
162
	}
163
	
164
	
165
	// 4. Suppression des erreurs de borne de fin ; besoin de catégories
166
	if (unit.getDeb() == unit.getFin()) positions = [unit.getDeb()]
167
	else positions = (unit.getDeb()..unit.getFin())
168
	Mention = CQI.cpos2Str(posProperty.getQualifiedName(), positions)
169
	
170
	isOK = false
171
	while ((isOK == false) && (erreur != "remove")) {
172
		def n = Mention.size()
173
		if (interditsALaFin.contains(Mention[ n-1 ])) {
174
			if (positions.size() == 1) {
175
	         if (!erreur.contains("SUPPR")) erreur += "SUPPR"
176
	         isOK = true
177
	      } else {
178
	         def fin = unit.getFin()
179
	         unit.setFin(  fin - 1 )
180
	         
181
	         if (unit.getDeb() == unit.getFin()) positions = [unit.getDeb()]
182
			 else positions = (unit.getDeb()..unit.getFin())
183
			 Mention = CQI.cpos2Str(posProperty.getQualifiedName(), positions)
184
			 if (!erreur.contains("BORNESD")) erreur += "BORNESD "
185
	      }
186
		} else isOK = true
187
	}
188
	
189
	// 5. Suppression des unités problématiques (bornes incohérentes ou mot vide) ; pas besoin de catégories
190
	def forme = CQI.cpos2Str(word.getQualifiedName(), positions)[0].trim().toLowerCase()
191
	
192
	if (erreur == "remove") {}
193
	else if (unit.getFin() < unit.getDeb()) {
194
	   println "ERREUR GRAVE : segmentation incohérente"
195
	   erreur = "remove"
196
	} else if ( forme.length() == 0 ) {
197
	   println "ERREUR GRAVE : unité sans mot"
198
	   erreur = "remove"
199
	}
200
	
201
	// 6. Détection des doublons ; pas besoin de catégories
202
	if (lastUnit != null) {
203
	   if ((unit.getDeb() == lastUnit.getDeb()) && (unit.getFin() == lastUnit.getFin()) ) {
204
	   		erreur += " DOUBLON "
205
	   }
206
	}
207
	lastUnit = unit
208
	
209
	
210
	erreur = erreur.trim()
211
	if (erreur == "remove") {
212
	    garbageBin.add( unit )
213
		nDeleted++
214
	} else if (erreur != "") {
215
		vue.setValeurChamp(unit, "CHECK", erreur)
216
		nModified++
217
	} else {
218
		nIgnored++
219
	}
220
	
221
	// mise à jour des tokens couverts
222
	for (int p=unit.getDeb() ; p <= unit.getFin() ; p++) {
223
	   tokenIndex[p] = 0
224
	}
225
}
226

  
227
// Suppression effective des unités incohérentes
228
garbageBin.each {
229
   analecCorpus.supUnite( it )
230
}
231

  
232
// 7. Ajouter les pronoms non couverts par une annotation ; besoin de catégories
233
// Parcourir les tokens non couverts ; obtenir leur POS et créer une unité si c'est un pronom
234

  
235
if (checkPronouns) {
236
	println "Détection des pronoms oubliés"
237
	for (i=0 ; i < nToks ; i++) {
238
    	if (tokenIndex[i] > 0) {
239
			Mention = CQI.cpos2Str(posProperty.getQualifiedName(), i)
240
			mentionForme = CQI.cpos2Str(word.getQualifiedName(), i)
241
			if (listePronoms.contains(Mention[0]) && mentionForme[0] != "s'" && mentionForme[0] != "se" && mentionForme[0] != "riens") {
242
	    		def props = [:]
243
        		props["CHECK"] = "NEW"
244
        		Unite u = analecCorpus.addUniteSaisie(unit_type, i, i, props)
245
        		vue.setValeurChamp(u, "CHECK", "NEW")
246
	    		nAdded++
247
	    	}
248
		}
249
	}
250
}
251

  
252
if (nAdded + nModified + nDeleted > 0) corpus.setIsModified(true);
253

  
254
println "Result:"
255
println "- $nModified units of type $unit_type have been modified."
256
println "- $nDeleted units of type $unit_type have been deleted."
257
println "- $nIgnored units of type $unit_type have not been modified."
258
println "- $nAdded forgotten pronominal units of type $unit_type have been added.\n"
259

  
260
AnalecCorpora.getVue(analecCorpus).retablirVueParDefaut()
tmp/org.txm.analec.rcp/src/org/txm/macro/urs/democrat/VerificationsMacro.groovy (revision 2108)
1
// Auteur Matthieu Quignard
1
// Auteur Matthieu Quignard, Alexey Lavrentev
2 2
// Date : 14 janvier 2019
3 3

  
4 4
/**********
5
Vérifications automatiques
5
Vérifications automatiques :
6 6
1. Repère les mentions sans catégorie : CHECK > CAT
7 7
2. Repère les mentions sans référent : CHECK > REF
8 8
3. Supprime les ponctuations en début et en fin de mention : CHECK > BORNES
tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/editors/ConcordanceEditor.java (revision 2108)
1257 1257
			}
1258 1258

  
1259 1259
			JobsTimer.stopAndPrint();
1260

  
1261 1260
		}
1262 1261
		catch (Exception e1) {
1263 1262
			Log.severe(NLS.bind(ConcordanceUIMessages.errorWhileComputingTheConcordanceColonP0, Log.toString(e1)));
tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/preferences/ConcordancePreferencePage.java (revision 2108)
54 54
		this.addField(new IntegerFieldEditor(ConcordancePreferences.LEFT_CONTEXT_SIZE, ConcordanceUIMessages.ampLeftContextLengthInWords, this.getFieldEditorParent()));
55 55
		this.addField(new IntegerFieldEditor(ConcordancePreferences.RIGHT_CONTEXT_SIZE, ConcordanceUIMessages.ampRightContextLengthInWords, this.getFieldEditorParent()));
56 56
	}
57
	
58
	
59 57

  
60 58
	@Override
61 59
	public void init(IWorkbench workbench) {
tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/MainCorpus.java (revision 2108)
372 372
	public List<Match> getMatches() {
373 373
		List<Match> rez = new ArrayList<Match>();
374 374
		try {
375
			rez.add(new Match(0, this.getSize()));
375
			rez.add(new Match(0, this.getSize()-1));
376 376
			return rez;
377 377
		} catch (CqiClientException e) {
378 378
			org.txm.utils.logger.Log.printStackTrace(e);
tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/messages/messages_fr.properties (revision 2108)
33 33
noValueFoundWithTheP0Id=Aucune valeur trouvée avec l''identifiant {0}.
34 34
oK=OK
35 35
openTheListOfCategories=Ouvrir la liste de catégories
36
pleaseEnterTheNewTypeName=Entrer le nom du nouveau type
36
pleaseEnterTheNewTypeName=Entrer le nom de la nouvelle catégorie
37 37
proceedToAnnotation=Passer à l'annotation
38 38
property=Propriété
39 39
saveTheAnnotations=Enregistrer les annotations
tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/messages/messages.properties (revision 2108)
33 33
noValueFoundWithTheP0Id=No value found with the {0} identifier.
34 34
oK=OK
35 35
openTheListOfCategories=Open the list of categories
36
pleaseEnterTheNewTypeName=Enter the name of the new type
36
pleaseEnterTheNewTypeName=Enter the name of the new category
37 37
proceedToAnnotation=Proceed to annotation
38 38
property=Property
39 39
saveTheAnnotations=Save the annotations
tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/concordance/ConcordanceAnnotations.java (revision 2108)
204 204
		}
205 205
		return annotationsPerMatch;
206 206
	}
207
	
208 207

  
209 208
	public void setViewAnnotation(AnnotationType type) {
210 209
		viewAnnotation = type;
tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/concordance/KRAnnotation.java (revision 2108)
389 389
							id = baseid+"_"+(c++); //$NON-NLS-1$
390 390
						}
391 391
						AnnotationType type = kr.addType(name, id, ""); //$NON-NLS-1$
392
						type.setEffect(AnnotationEffect.SEGMENT);
392 393
						typesList.add(type);
393 394

  
394 395
						if (annotationTypesCombo != null) annotationTypesCombo.refresh();
tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/concordance/WordAnnotationToolbar.java (revision 2108)
37 37
import org.eclipse.swt.widgets.Label;
38 38
import org.eclipse.swt.widgets.TableColumn;
39 39
import org.eclipse.swt.widgets.Text;
40
import org.eclipse.ui.dialogs.ListDialog;
40 41
import org.txm.annotation.kr.core.Annotation;
41 42
import org.txm.annotation.kr.core.AnnotationManager;
42 43
import org.txm.annotation.kr.core.CQPAnnotation;
......
51 52
import org.txm.annotation.kr.rcp.commands.InitializeKnowledgeRepository;
52 53
import org.txm.annotation.kr.rcp.commands.SaveAnnotations;
53 54
import org.txm.annotation.kr.rcp.messages.KRAnnotationUIMessages;
55
import org.txm.annotation.kr.rcp.views.knowledgerepositories.KRView;
54 56
import org.txm.annotation.rcp.editor.AnnotationArea;
55 57
import org.txm.annotation.rcp.editor.AnnotationExtension;
56 58
import org.txm.concordance.core.functions.Concordance;
57 59
import org.txm.concordance.core.functions.Line;
58 60
import org.txm.concordance.rcp.editors.ConcordanceEditor;
59 61
import org.txm.concordance.rcp.editors.ConcordanceEditor.ConcordanceColumnSizeControlListener;
62
import org.txm.concordance.rcp.messages.ConcordanceUIMessages;
60 63
import org.txm.core.messages.TXMCoreMessages;
61 64
import org.txm.core.results.TXMResult;
62 65
import org.txm.objects.Match;
......
121 124
	private TableViewerColumn annotationColumnViewer;
122 125
	private Font annotationColummnFont;
123 126
	private Font defaultColummnFont;
127
	private Button addAnnotationTypeLink;
128
	private Button addTypedValueLink;
124 129

  
125 130
	public String getName() {
126 131
		return KRAnnotationUIMessages.motsPropritsInfDfaut;
......
480 485

  
481 486
		annotationArea = new GLComposite(parent, SWT.NONE, KRAnnotationUIMessages.concordanceAnnotationArea);
482 487
		annotationArea.getLayout().numColumns = 12;
488
		annotationArea.getLayout().horizontalSpacing = 2;
483 489
		annotationArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
484 490

  
485 491
		GridData gdata = new GridData(SWT.CENTER, SWT.CENTER, false, false);
486 492
		gdata.widthHint = 90;
487 493

  
494
		new Label(annotationArea, SWT.NONE).setText(TXMCoreMessages.common_property);
495
		
488 496
		//Display combo with list of Annotation Type 
489
		annotationTypesCombo = new ComboViewer(annotationArea, SWT.SINGLE);
497
		annotationTypesCombo = new ComboViewer(annotationArea, SWT.READ_ONLY);
490 498
		annotationTypesCombo.setContentProvider(new ArrayContentProvider());
491 499
		annotationTypesCombo.setLabelProvider(new SimpleLabelProvider() {
492 500
			@Override
......
498 506
				return ((AnnotationType)element).getName(); //$NON-NLS-1$
499 507
			}
500 508
		});
501
		annotationTypesCombo.getCombo().addKeyListener(new KeyListener() {
502
			
503
			@Override
504
			public void keyReleased(KeyEvent e) {
505
				if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
506
					String name = annotationTypesCombo.getCombo().getText();
507
					if (currentKnowledgeRepository.getType(name) == null) {
508
						createNewType(e, name);
509
					} else {
510
						for (AnnotationType type : typesList) {
511
							if (name.equals(type.getId())) {
512
								StructuredSelection selection = new StructuredSelection(type);
513
								annotationTypesCombo.setSelection(selection, true);
514
								break;
515
							}
516
						}
517
					}
518
				}
519
			}
520
			
521
			@Override
522
			public void keyPressed(KeyEvent e) { }
523
		});
509
//		annotationTypesCombo.getCombo().addKeyListener(new KeyListener() {
510
//			
511
//			@Override
512
//			public void keyReleased(KeyEvent e) {
513
//				if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
514
//					String name = annotationTypesCombo.getCombo().getText();
515
//					if (currentKnowledgeRepository.getType(name) == null) {
516
//						createNewType(e, name);
517
//					} else {
518
//						for (AnnotationType type : typesList) {
519
//							if (name.equals(type.getId())) {
520
//								StructuredSelection selection = new StructuredSelection(type);
521
//								annotationTypesCombo.setSelection(selection, true);
522
//								break;
523
//							}
524
//						}
525
//					}
526
//				}
527
//			}
528
//			
529
//			@Override
530
//			public void keyPressed(KeyEvent e) { }
531
//		});
524 532
	
525 533
		gdata = new GridData(SWT.CENTER, SWT.CENTER, false, false);
526 534
		gdata.widthHint = 200;
......
544 552
				onAnnotationTypeSelected(event);
545 553
			}
546 554
		});
555
		
556
		addAnnotationTypeLink = new Button(annotationArea, SWT.PUSH);
557
		addAnnotationTypeLink.setToolTipText(KRAnnotationUIMessages.addANewCategory);
558
		addAnnotationTypeLink.setImage(IImageKeys.getImage(IImageKeys.ACTION_ADD));
559
		addAnnotationTypeLink.setEnabled(true);
560
		addAnnotationTypeLink.setLayoutData(new GridData(SWT.FILL,	SWT.CENTER, false, false));
561
		addAnnotationTypeLink.addSelectionListener(new SelectionListener() {
562
			@Override
563
			public void widgetSelected(SelectionEvent e) {
564
				if (currentKnowledgeRepository == null) return;
565
				if (!(currentKnowledgeRepository instanceof LocalKnowledgeRepository)) return;
547 566

  
567
				LocalKnowledgeRepository kr = (LocalKnowledgeRepository)currentKnowledgeRepository;
568

  
569
				InputDialog dialog = new InputDialog(e.widget.getDisplay().getActiveShell(), "New property", "Enter the new property name", "", null);
570
				if (dialog.open() == InputDialog.OK) {
571
					String name = dialog.getValue();
572
					if (name.trim().length() == 0) return;
573
					String baseid = AsciiUtils.buildId(name);
574
					String id = AsciiUtils.buildId(name);
575
					int c = 1;
576
					while (kr.getType(id) != null) {
577
						id = baseid+"_"+(c++); //$NON-NLS-1$
578
					}
579
					AnnotationType type = kr.addType(name, id, "", AnnotationEffect.TOKEN); //$NON-NLS-1$
580
					typesList.add(type);
581

  
582
					if (annotationTypesCombo != null) annotationTypesCombo.refresh();
583
					if (typesList.size() == 1) {
584
						if (annotationTypesCombo != null) annotationTypesCombo.getCombo().select(typesList.size()-1);
585
						
586
						if (concordance != null) {
587
							annotations.setViewAnnotation(type);
588
							annotations.setAnnotationOverlap(true);
589
							annotationColumn.setText(type.getId());
590
							editor.fillDisplayArea(false);
591
						}
592
						annotationArea.layout(true);
593
						
594
					} else {
595
						if (typesList.size() > 1) {
596
							if (annotationTypesCombo != null) {
597
								annotationTypesCombo.setSelection(new StructuredSelection(typesList.get(typesList.size()-1)));
598
							}
599
						}
600
					}
601
					annotations.setViewAnnotation(type);
602
					annotationTypesCombo.setSelection(new StructuredSelection(typesList.get(typesList.size()-1)));
603
					annotationArea.layout(true);
604
					KRView.refresh();
605
					updateAnnotationWidgetStates();
606
				} else {
607
					System.out.println("Creation aborted."); //$NON-NLS-1$
608
				}
609
			}
610

  
611
			@Override
612
			public void widgetDefaultSelected(SelectionEvent e) { }
613
		});
614

  
548 615
		equalLabel = new Label(annotationArea, SWT.NONE);
549 616
		equalLabel.setText("="); //$NON-NLS-1$
550 617
		equalLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
......
565 632
			@Override
566 633
			public void keyPressed(KeyEvent e) { }
567 634
		});
635
		
636
		addTypedValueLink = new Button(annotationArea, SWT.PUSH);
637
		addTypedValueLink.setText("..."); //$NON-NLS-1$
638
		addTypedValueLink.setToolTipText(KRAnnotationUIMessages.selectAValueAmongTheList);
639
		addTypedValueLink.setEnabled(true);
640
		addTypedValueLink.setLayoutData(new GridData(SWT.FILL,	SWT.CENTER, false, false));
641
		addTypedValueLink.addSelectionListener(new SelectionListener() {
642
			@Override
643
			public void widgetSelected(SelectionEvent e) {
644
				if (currentKnowledgeRepository == null) return;
645
				if (!(currentKnowledgeRepository instanceof LocalKnowledgeRepository)) return;
568 646

  
647
				AnnotationType type = getSelectedAnnotationType();
648
				if (type == null) return;
649

  
650
				LocalKnowledgeRepository kr = (LocalKnowledgeRepository)currentKnowledgeRepository;
651

  
652
				ListDialog dialog = new ListDialog(e.widget.getDisplay().getActiveShell());
653
				String title = currentKnowledgeRepository.getString(editor.getLocale(), "ConcordancesEditor_100"); //$NON-NLS-1$
654
				if (title == null) title = KRAnnotationUIMessages.availableValuesForP0;
655
				dialog.setTitle(ConcordanceUIMessages.bind(title, type.getName()));//+"valeurs de "+type.getName());
656
				dialog.setContentProvider(new ArrayContentProvider());
657
				dialog.setLabelProvider(new SimpleLabelProvider() {
658
					public String getColumnText(Object element, int columnIndex) {
659
						if (element instanceof TypedValue)
660
							return ((TypedValue)element).getId();
661
						return element.toString();
662
					}
663
				});
664
				List<TypedValue> values;
665
				try {
666
					values = kr.getValues(type);
667
				} catch (Exception e1) {
668
					e1.printStackTrace();
669
					return;
670
				}
671
				dialog.setInput(values);
672
				if (dialog.open() == InputDialog.OK) {
673
					TypedValue value = (TypedValue) dialog.getResult()[0];
674
					String name = value.getId();
675
					if (name.trim().length() == 0) return;
676

  
677
					annotationValuesText.setText(name);
678
				} else {
679

  
680
				}
681
			}
682

  
683
			@Override
684
			public void widgetDefaultSelected(SelectionEvent e) { }
685
		});
686

  
687
		new Label(annotationArea, SWT.NONE).setText(" ");
688
		
569 689
		affectAnnotationButton = new Button(annotationArea, SWT.PUSH);
570 690
		affectAnnotationButton.setText(KRAnnotationUIMessages.oK);
571 691
		affectAnnotationButton.setToolTipText(KRAnnotationUIMessages.proceedToAnnotation);
......
710 830
			while (kr.getType(id) != null) {
711 831
				id = baseid+"_"+(c++); //$NON-NLS-1$
712 832
			}
713
			AnnotationType type = kr.addType(name, id, ""); //$NON-NLS-1$
714
			type.setEffect(AnnotationEffect.TOKEN);
833
			AnnotationType type = kr.addType(name, id, "", AnnotationEffect.TOKEN); //$NON-NLS-1$
715 834
			typesList.add(type);
716 835
			annotationTypesCombo.refresh();
717 836
			StructuredSelection selection = new StructuredSelection(type);
tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/preferences/KRAnnotationPreferencePage.java (revision 2108)
27 27
//
28 28
package org.txm.annotation.kr.rcp.preferences;
29 29

  
30
import org.eclipse.jface.preference.BooleanFieldEditor;
31
import org.eclipse.jface.preference.IntegerFieldEditor;
30 32
import org.eclipse.ui.IWorkbench;
31
import org.txm.annotation.kr.core.preferences.AnnotationPreferences;
33
import org.txm.annotation.kr.core.preferences.KRAnnotationPreferences;
34
import org.txm.concordance.core.preferences.ConcordancePreferences;
35
import org.txm.concordance.rcp.messages.ConcordanceUIMessages;
32 36
import org.txm.rcp.IImageKeys;
33 37
import org.txm.rcp.preferences.TXMPreferencePage;
34 38
import org.txm.rcp.preferences.TXMPreferenceStore;
......
44 48
 */
45 49

  
46 50
public class KRAnnotationPreferencePage extends TXMPreferencePage {
47

  
51
	
48 52
	/**
49 53
	 * Instantiates the preference page.
50 54
	 */
......
59 63
	 */
60 64
	@Override
61 65
	public void createFieldEditors() {
62

  
66
		this.addField(new BooleanFieldEditor(KRAnnotationPreferences.PRESERVE_ANNOTATIONS, "Preserve annotations between TXM sessions", this.getFieldEditorParent()));
67
		this.addField(new BooleanFieldEditor(KRAnnotationPreferences.UPDATE_EDITION, "When saving annotations rebuild editions" , this.getFieldEditorParent()));
63 68
	}
64 69
	
65
	
66 70
	/*
67 71
	 * (non-Javadoc)
68 72
	 * 
......
71 75
	 */
72 76
	@Override
73 77
	public void init(IWorkbench workbench) {
74
		this.setPreferenceStore(new TXMPreferenceStore(AnnotationPreferences.getInstance().getPreferencesNodeQualifier()));
78
		this.setPreferenceStore(new TXMPreferenceStore(KRAnnotationPreferences.getInstance().getPreferencesNodeQualifier()));
75 79
		this.setImageDescriptor(IImageKeys.getImageDescriptor(IImageKeys.PENCIL));
76 80
	}
77 81
}
tmp/org.txm.rcp.feature/build.properties (revision 2108)
9 9
root.linux.gtk.x86_64.permissions.755=jre/bin/java,plugins/org.txm.libs.cqp.linux/res/linux32/,plugins/org.txm.libs.cqp.linux/res/linux64/,plugins/org.txm.statsengine.r.core.linux/res/linux64/bin/R,plugins/org.txm.statsengine.r.core.linux/res/linux64/bin/exec/R
10 10
root.linux.gtk.x86_64=linux/
11 11
root.macosx.cocoa.x86_64.permissions.755=jre/bin/java,plugins/org.txm.libs.cqp.macosx/res/macosx/,plugins/org.txm.statsengine.r.core.macosx/res/macosx/bin/R,plugins/org.txm.statsengine.r.core.macosx/res/macosx/bin/exec/R
12
qualifier=svn
tmp/org.txm.groovy.core/src/groovy/org/txm/macro/cqp/ListMatchesMacro.groovy (revision 2108)
1
// STANDARD DECLARATIONS
2
package org.txm.macroproto.cqp
3

  
4
import org.kohsuke.args4j.*
5
import groovy.transform.Field
6
import org.txm.rcpapplication.swt.widget.parameters.*
7
import org.txm.Toolbox
8
import org.txm.searchengine.cqp.*
9
import org.txm.searchengine.cqp.corpus.*
10
import org.txm.utils.*
11

  
12
if (!(corpusViewSelection instanceof Corpus)) {
13
	println "Selection is not a Corpus: $corpusViewSelection"
14
	return false
15
}
16

  
17
println corpusViewSelection.getMatches()
tmp/org.txm.annotation.kr.core/src/org/txm/annotation/kr/core/preferences/AnnotationPreferences.java (revision 2108)
1
package org.txm.annotation.kr.core.preferences;
2

  
3

  
4
import org.osgi.service.prefs.Preferences;
5
import org.txm.core.preferences.TXMPreferences;
6

  
7
/**
8
 * Preferences initializer and manager.
9
 * @author mdecorde
10
 * @author sjacquot
11
 *
12
 */
13
public class AnnotationPreferences extends TXMPreferences {
14

  
15

  
16
	public static final String ANNOTATION_MODE = "annotation_mode";
17
	
18
	/**
19
	 * Gets the instance.
20
	 * @return the instance
21
	 */
22
	public static TXMPreferences getInstance()	{
23
		if (!TXMPreferences.instances.containsKey(AnnotationPreferences.class)) {
24
			new AnnotationPreferences();
25
		}
26
		return TXMPreferences.instances.get(AnnotationPreferences.class);
27
	}
28

  
29
	
30
	@Override
31
	public void initializeDefaultPreferences() {
32
		super.initializeDefaultPreferences();
33
		Preferences preferences = this.getDefaultPreferencesNode();
34
		preferences.put(ANNOTATION_MODE, "simple");
35
	}
36
}
tmp/org.txm.annotation.kr.core/src/org/txm/annotation/kr/core/preferences/KRAnnotationPreferences.java (revision 2108)
1
package org.txm.annotation.kr.core.preferences;
2

  
3
import org.osgi.service.prefs.Preferences;
4
import org.txm.core.preferences.TXMPreferences;
5

  
6
/**
7
 * Preferences initializer and manager.
8
 * @author mdecorde
9
 * @author sjacquot
10
 *
11
 */
12
public class KRAnnotationPreferences extends TXMPreferences {
13

  
14
	public static final String UPDATE_EDITION = "udpate_edition";
15
	public static final String PRESERVE_ANNOTATIONS = "reset_temporary_annotations_when leaving_txm";
16
	
17
	/**
18
	 * Gets the instance.
19
	 * @return the instance
20
	 */
21
	public static TXMPreferences getInstance()	{
22
		if (!TXMPreferences.instances.containsKey(KRAnnotationPreferences.class)) {
23
			new KRAnnotationPreferences();
24
		}
25
		return TXMPreferences.instances.get(KRAnnotationPreferences.class);
26
	}
27
	
28
	@Override
29
	public void initializeDefaultPreferences() {
30
		super.initializeDefaultPreferences();
31
		Preferences preferences = this.getDefaultPreferencesNode();
32
		preferences.putBoolean(UPDATE_EDITION, true);
33
		preferences.putBoolean(PRESERVE_ANNOTATIONS, true);
34
	}
35
}
0 36

  
tmp/org.txm.annotation.kr.core/src/org/txm/annotation/kr/core/storage/temporary/TemporaryAnnotationManager.java (revision 2108)
12 12

  
13 13
import org.eclipse.persistence.config.PersistenceUnitProperties;
14 14
import org.eclipse.persistence.jpa.PersistenceProvider;
15
import org.txm.annotation.core.preferences.AnnotationPreferences;
15 16
import org.txm.annotation.kr.core.Annotation;
16 17
import org.txm.annotation.kr.core.AnnotationPK;
17 18
import org.txm.annotation.kr.core.DatabasePersistenceManager;
19
import org.txm.annotation.kr.core.preferences.KRAnnotationPreferences;
18 20
import org.txm.annotation.kr.core.repository.AnnotationEffect;
19 21
import org.txm.annotation.kr.core.repository.AnnotationType;
20 22
import org.txm.annotation.kr.core.repository.TypedValue;
......
49 51
		properties.put("javax.persistence.jdbc.url", urlProperty);
50 52
		properties.put("javax.persistence.jdbc.username", "SA");
51 53
		properties.put(PersistenceUnitProperties.DDL_GENERATION_MODE, "database");
52
		properties.put(PersistenceUnitProperties.DDL_GENERATION, "drop-and-create-tables"); // create&update table if needed, drop-and-create-tables to reset all
54
		if (KRAnnotationPreferences.getInstance().getBoolean(KRAnnotationPreferences.PRESERVE_ANNOTATIONS)) {
55
			properties.put(PersistenceUnitProperties.DDL_GENERATION, "drop-and-create-tables"); // drop-and-create-tables to reset all
56
		} else {
57
			properties.put(PersistenceUnitProperties.DDL_GENERATION, "create-or-extend-tables"); // create&update table if needed, drop-and-create-tables to reset all
58
		}
53 59
		
54 60
		if (Log.getLevel().intValue() < Level.INFO.intValue()) {
55 61
			properties.put(PersistenceUnitProperties.LOGGING_LEVEL, "INFO");
tmp/org.txm.annotation.kr.core/src/org/txm/annotation/kr/core/repository/KnowledgeRepository.java (revision 2108)
90 90
		properties.put("javax.persistence.jdbc.url", urlProperty);
91 91
//		properties.put("javax.persistence.jdbc.username", "SA");
92 92
//		properties.put(PersistenceUnitProperties.DDL_GENERATION_MODE, "database");
93
//		properties.put(PersistenceUnitProperties.DDL_GENERATION, "create-or-extend-tables"); // create&update table if needed
94
		properties.put(PersistenceUnitProperties.DDL_GENERATION, "drop-and-create-tables"); // drop all and recreate
93
		properties.put(PersistenceUnitProperties.DDL_GENERATION, "create-or-extend-tables"); // create&update table if needed
94
//		properties.put(PersistenceUnitProperties.DDL_GENERATION, "drop-and-create-tables"); // drop all and recreate
95 95
//		if (Log.getLevel().intValue() < Level.WARNING.intValue()) {
96 96
//			properties.put(PersistenceUnitProperties.LOGGING_LEVEL, "WARNING");
97 97
//			properties.put(PersistenceUnitProperties.LOGGING_PARAMETERS, "true");
......
158 158
	}
159 159

  
160 160
	/**
161
	 * returns a resource url for a defined TypedValue (for instance to display in a html viewer)
161
	 * returns a resource URL for a defined TypedValue (for instance to display in a html viewer)
162 162
	 * @param kr
163 163
	 * @param typedValue
164 164
	 * @return
......
168 168
	}
169 169

  
170 170
	/**
171
	 * returns a resource url for a defined TypedValue (for instance to display in a html viewer)
171
	 * returns a resource URL for a defined TypedValue (for instance to display in a html viewer)
172 172
	 * @param kr
173 173
	 * @param typedValue
174 174
	 * @return
......
184 184
	}
185 185

  
186 186
	/**
187
	 * returns a url for a defined KnowledgeRepository (for instance to display in a html viewer)
187
	 * returns a URL for a defined KnowledgeRepository (for instance to display in a html viewer)
188 188
	 * @param kr
189 189
	 * @param typedValue
190 190
	 * @return
tmp/org.txm.annotation.kr.core/plugin.xml (revision 2108)
4 4
   <extension
5 5
         point="org.eclipse.core.runtime.preferences">
6 6
      <initializer
7
            class="org.txm.annotation.kr.core.preferences.AnnotationPreferences">
7
            class="org.txm.annotation.kr.core.preferences.KRAnnotationPreferences">
8 8
      </initializer>
9 9
   </extension>
10 10
   <extension
tmp/org.txm.searchengine.cqp.feature/build.properties (revision 2108)
1 1
#Fri Jul 06 10:25:16 CEST 2018
2
bin.includes=feature.xml
3
qualifier=svn
2
bin.includes=feature.xml
tmp/TXMReleasePlugins.site/site.xml (revision 2108)
3 3
   <description name="TXM Extensions - RELEASE" url="http://txm.textometrie.org/updates/plugins">
4 4
      This update site contains the Release plugins for TXM
5 5
   </description>
6
   <feature url="features/org.txm.backtomedia.feature_1.0.0.201905221522.jar" id="org.txm.backtomedia.feature" version="1.0.0.201905221522">
6
   <feature url="features/org.txm.backtomedia.feature_1.0.0.201905241540.jar" id="org.txm.backtomedia.feature" version="1.0.0.201905241540">
7 7
      <category name="Commands"/>
8 8
   </feature>
9
   <feature url="features/org.txm.wordcloud.feature_1.0.0.201905221522.jar" id="org.txm.wordcloud.feature" version="1.0.0.201905221522">
9
   <feature url="features/org.txm.wordcloud.feature_1.0.0.201905241540.jar" id="org.txm.wordcloud.feature" version="1.0.0.201905241540">
10 10
      <category name="Commands"/>
11 11
   </feature>
12
   <feature url="features/org.txm.treetagger.binaries.feature_1.0.0.201905221522.jar" id="org.txm.treetagger.binaries.feature" version="1.0.0.201905221522" os="" ws="">
12
   <feature url="features/org.txm.treetagger.binaries.feature_1.0.0.201905241540.jar" id="org.txm.treetagger.binaries.feature" version="1.0.0.201905241540" os="" ws="">
13 13
      <category name="Annotation"/>
14 14
   </feature>
15
   <feature url="features/org.txm.treetagger.models.feature_1.0.0.201905221522.jar" id="org.txm.treetagger.models.feature" version="1.0.0.201905221522">
15
   <feature url="features/org.txm.treetagger.models.feature_1.0.0.201905241540.jar" id="org.txm.treetagger.models.feature" version="1.0.0.201905241540">
16 16
      <category name="Annotation"/>
17 17
   </feature>
18
   <feature url="features/org.txm.annotation.urs.feature_1.0.0.201905221522.jar" id="org.txm.annotation.urs.feature" version="1.0.0.201905221522">
18
   <feature url="features/org.txm.annotation.urs.feature_1.0.0.201905241540.jar" id="org.txm.annotation.urs.feature" version="1.0.0.201905241540">
19 19
      <category name="Annotation"/>
20 20
   </feature>
21
   <feature url="features/org.txm.tigersearch.feature_1.0.0.201905221522.jar" id="org.txm.tigersearch.feature" version="1.0.0.201905221522">
21
   <feature url="features/org.txm.tigersearch.feature_1.0.0.201905241540.jar" id="org.txm.tigersearch.feature" version="1.0.0.201905241540">
22 22
      <category name="Annotation"/>
23 23
   </feature>
24 24
   <category-def name="Commands" label="Commands">

Also available in: Unified diff