Révision 3979
| TXM/trunk/bundles/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/structures/AdvancedSubcorpusPanel.java (revision 3979) | ||
|---|---|---|
| 1 |
// Copyright © 2010-2020 ENS de Lyon., University of Franche-Comté |
|
| 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.rcp.swt.widget.structures; |
|
| 29 |
|
|
| 30 |
import org.eclipse.swt.SWT; |
|
| 31 |
import org.eclipse.swt.layout.GridData; |
|
| 32 |
import org.eclipse.swt.layout.GridLayout; |
|
| 33 |
import org.eclipse.swt.widgets.Composite; |
|
| 34 |
import org.eclipse.swt.widgets.Label; |
|
| 35 |
import org.txm.rcp.messages.TXMUIMessages; |
|
| 36 |
import org.txm.rcp.swt.widget.QueryWidget; |
|
| 37 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
|
| 38 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 39 |
|
|
| 40 |
/** |
|
| 41 |
* The Class AdvancedSubcorpusPanel : a query. |
|
| 42 |
*/ |
|
| 43 |
public class AdvancedSubcorpusPanel extends Composite {
|
|
| 44 |
|
|
| 45 |
/** The corpus. */ |
|
| 46 |
CQPCorpus corpus; |
|
| 47 |
|
|
| 48 |
/** The query. */ |
|
| 49 |
String query; |
|
| 50 |
|
|
| 51 |
/** The query field. */ |
|
| 52 |
QueryWidget queryField; |
|
| 53 |
|
|
| 54 |
/** |
|
| 55 |
* Instantiates a new complex subcorpus panel. |
|
| 56 |
* |
|
| 57 |
* @param parent the parent |
|
| 58 |
* @param style the style |
|
| 59 |
* @param corpus the corpus |
|
| 60 |
*/ |
|
| 61 |
public AdvancedSubcorpusPanel(Composite parent, int style, CQPCorpus corpus) {
|
|
| 62 |
|
|
| 63 |
super(parent, style); |
|
| 64 |
|
|
| 65 |
this.setLayout(new GridLayout(2, false)); |
|
| 66 |
this.corpus = corpus; |
|
| 67 |
|
|
| 68 |
Label l = new Label(this, SWT.NONE); |
|
| 69 |
l.setText(TXMUIMessages.query); |
|
| 70 |
|
|
| 71 |
queryField = new QueryWidget(this, SWT.BORDER, corpus.getProject(), CQPSearchEngine.getEngine()); |
|
| 72 |
queryField.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
| 73 |
|
|
| 74 |
} |
|
| 75 |
|
|
| 76 |
public void updateQueryField() {
|
|
| 77 |
|
|
| 78 |
queryField.update(); |
|
| 79 |
} |
|
| 80 |
|
|
| 81 |
/** |
|
| 82 |
* Update display. |
|
| 83 |
*/ |
|
| 84 |
public void updateDisplay() {
|
|
| 85 |
this.layout(); |
|
| 86 |
} |
|
| 87 |
|
|
| 88 |
/** |
|
| 89 |
* Gets the query string. |
|
| 90 |
* |
|
| 91 |
* @return the generated query string |
|
| 92 |
*/ |
|
| 93 |
public String getQueryString() {
|
|
| 94 |
|
|
| 95 |
String q = queryField.getQuery().getQueryString(); |
|
| 96 |
|
|
| 97 |
return q; |
|
| 98 |
} |
|
| 99 |
|
|
| 100 |
/** |
|
| 101 |
* |
|
| 102 |
* @return the raw query without the context filter |
|
| 103 |
*/ |
|
| 104 |
public String getQueryFieldValue() {
|
|
| 105 |
|
|
| 106 |
String query = this.queryField.getText(); |
|
| 107 |
if (query == null || query.length() == 0) {
|
|
| 108 |
query = getQueryString(); |
|
| 109 |
} |
|
| 110 |
return query; |
|
| 111 |
} |
|
| 112 |
|
|
| 113 |
public String getGeneratedName() {
|
|
| 114 |
|
|
| 115 |
return null; |
|
| 116 |
} |
|
| 117 |
} |
|
| 0 | 118 | |
| TXM/trunk/bundles/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/structures/CrossedPartitionPanel.java (revision 3979) | ||
|---|---|---|
| 1 |
package org.txm.rcp.swt.widget.structures; |
|
| 2 |
|
|
| 3 |
import java.util.ArrayList; |
|
| 4 |
import java.util.List; |
|
| 5 |
import java.util.UUID; |
|
| 6 |
|
|
| 7 |
import org.eclipse.jface.viewers.LabelProvider; |
|
| 8 |
import org.eclipse.swt.SWT; |
|
| 9 |
import org.eclipse.swt.events.SelectionEvent; |
|
| 10 |
import org.eclipse.swt.events.SelectionListener; |
|
| 11 |
import org.eclipse.swt.layout.GridData; |
|
| 12 |
import org.eclipse.swt.layout.GridLayout; |
|
| 13 |
import org.eclipse.swt.widgets.Composite; |
|
| 14 |
import org.eclipse.swt.widgets.Label; |
|
| 15 |
import org.eclipse.swt.widgets.Text; |
|
| 16 |
import org.txm.core.messages.TXMCoreMessages; |
|
| 17 |
import org.txm.rcp.messages.TXMUIMessages; |
|
| 18 |
import org.txm.searchengine.cqp.clientExceptions.CqiClientException; |
|
| 19 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 20 |
import org.txm.searchengine.cqp.corpus.Partition; |
|
| 21 |
import org.txm.searchengine.cqp.corpus.StructuralUnit; |
|
| 22 |
import org.txm.searchengine.cqp.corpus.StructuralUnitProperty; |
|
| 23 |
import org.txm.searchengine.cqp.corpus.Subcorpus; |
|
| 24 |
import org.txm.utils.logger.Log; |
|
| 25 |
|
|
| 26 |
public class CrossedPartitionPanel extends Composite {
|
|
| 27 |
|
|
| 28 |
/** The selected structural unit property. */ |
|
| 29 |
private List<StructuralUnitProperty> selectedStructuralUnitProperties = new ArrayList<>(); |
|
| 30 |
|
|
| 31 |
/** The structural units final. */ |
|
| 32 |
private List<StructuralUnit> structuralUnitsFinal; |
|
| 33 |
|
|
| 34 |
private Text separatorText; |
|
| 35 |
|
|
| 36 |
/** The property combo. */ |
|
| 37 |
private SuperListViewer propertyCombo; |
|
| 38 |
|
|
| 39 |
private CQPCorpus corpus; |
|
| 40 |
|
|
| 41 |
private Text expandText; |
|
| 42 |
|
|
| 43 |
public CrossedPartitionPanel(Composite parent, int style, CQPCorpus corpus) {
|
|
| 44 |
super(parent, style); |
|
| 45 |
|
|
| 46 |
this.corpus = corpus; |
|
| 47 |
|
|
| 48 |
GridLayout layout = new GridLayout(2, false); |
|
| 49 |
this.setLayout(layout); |
|
| 50 |
|
|
| 51 |
// StructuralUnit |
|
| 52 |
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
| 53 |
|
|
| 54 |
List<StructuralUnit> structuralUnits = null; |
|
| 55 |
try {
|
|
| 56 |
structuralUnits = corpus.getOrderedStructuralUnits(); |
|
| 57 |
} |
|
| 58 |
catch (CqiClientException e) {
|
|
| 59 |
Log.severe(TXMCoreMessages.bind(TXMCoreMessages.error_errorP0, Log.toString(e))); |
|
| 60 |
} |
|
| 61 |
structuralUnitsFinal = new ArrayList<>(); |
|
| 62 |
for (StructuralUnit unit : structuralUnits) {
|
|
| 63 |
if (unit.getName().equals("txmcorpus")) continue; // ignore txmcorpus structure //$NON-NLS-1$
|
|
| 64 |
|
|
| 65 |
if (unit.getOrderedProperties() != null && unit.getOrderedProperties().size() != 0) {
|
|
| 66 |
/* |
|
| 67 |
* if ((unit.getName().equals("text") &&
|
|
| 68 |
* unit.getProperties().size() > 3)) //$NON-NLS-1$ {
|
|
| 69 |
* structuralUnitsCombo.add(unit.getName()); |
|
| 70 |
* structuralUnitsFinal.add(unit); } else |
|
| 71 |
* if (!unit.getName().equals("text")) //$NON-NLS-1$ {
|
|
| 72 |
*/ |
|
| 73 |
structuralUnitsFinal.add(unit); |
|
| 74 |
// } |
|
| 75 |
} |
|
| 76 |
} |
|
| 77 |
|
|
| 78 |
// StructuralUnitProperty |
|
| 79 |
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
| 80 |
|
|
| 81 |
Label propertyLabel = new Label(this, SWT.NONE); |
|
| 82 |
propertyLabel.setText(TXMUIMessages.Structures); |
|
| 83 |
propertyLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); |
|
| 84 |
propertyLabel.setToolTipText("Select at least two properties");
|
|
| 85 |
|
|
| 86 |
propertyCombo = new SuperListViewer(this, SWT.MULTI); |
|
| 87 |
propertyCombo.setLabelProvider(new LabelProvider() {
|
|
| 88 |
@Override |
|
| 89 |
public String getText(Object element) {
|
|
| 90 |
if (element instanceof StructuralUnitProperty) {
|
|
| 91 |
return ""+((StructuralUnitProperty)element).getFullName(); //$NON-NLS-1$ |
|
| 92 |
} else {
|
|
| 93 |
return ""+element; //$NON-NLS-1$ |
|
| 94 |
} |
|
| 95 |
} |
|
| 96 |
}); |
|
| 97 |
propertyCombo.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); |
|
| 98 |
|
|
| 99 |
ArrayList<StructuralUnitProperty> all = new ArrayList<>(); |
|
| 100 |
for (StructuralUnit su : structuralUnitsFinal) {
|
|
| 101 |
for (StructuralUnitProperty property : su.getOrderedProperties()) {
|
|
| 102 |
if (!(su.getName().equals("text") && //$NON-NLS-1$
|
|
| 103 |
(property.getName().equals("project") || property.getName().equals("base")))) //$NON-NLS-1$ //$NON-NLS-2$
|
|
| 104 |
all.add(property); |
|
| 105 |
} |
|
| 106 |
} |
|
| 107 |
|
|
| 108 |
propertyCombo.getList().addSelectionListener(new SelectionListener() {
|
|
| 109 |
|
|
| 110 |
@Override |
|
| 111 |
public void widgetDefaultSelected(SelectionEvent e) {}
|
|
| 112 |
|
|
| 113 |
@Override |
|
| 114 |
public void widgetSelected(SelectionEvent event) {
|
|
| 115 |
selectedStructuralUnitProperties = propertyCombo.getSelection().toList(); |
|
| 116 |
} |
|
| 117 |
}); |
|
| 118 |
|
|
| 119 |
propertyCombo.setInput(all); |
|
| 120 |
propertyCombo.setToolTipText("Select at least two properties");
|
|
| 121 |
|
|
| 122 |
Label separatorLabel = new Label(this, SWT.NONE); |
|
| 123 |
separatorLabel.setText("Values separator");
|
|
| 124 |
separatorLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); |
|
| 125 |
separatorLabel.setToolTipText("The separator is inserted between the values of the part names.\nWarning: spaces are not trimmed.");
|
|
| 126 |
|
|
| 127 |
separatorText = new Text(this, SWT.BORDER); |
|
| 128 |
separatorText.setText("x");
|
|
| 129 |
separatorText.setToolTipText("The separator is inserted between the values of the part names.\nWarning: spaces are not trimmed.");
|
|
| 130 |
|
|
| 131 |
Label expandLabel = new Label(this, SWT.NONE); |
|
| 132 |
expandLabel.setText("Expand structure");
|
|
| 133 |
expandLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); |
|
| 134 |
expandLabel.setToolTipText("Define the limit structure. If not set, the last selected structure is used");
|
|
| 135 |
|
|
| 136 |
expandText = new Text(this, SWT.BORDER); |
|
| 137 |
expandText.setText("");
|
|
| 138 |
expandText.setToolTipText("Define the limit structure. If not set, the last selected structure is used");
|
|
| 139 |
} |
|
| 140 |
|
|
| 141 |
/** |
|
| 142 |
* Gets the structural unit property. |
|
| 143 |
* |
|
| 144 |
* @return the structural unit property |
|
| 145 |
*/ |
|
| 146 |
public List<StructuralUnitProperty> getStructuralUnitProperties() {
|
|
| 147 |
|
|
| 148 |
return selectedStructuralUnitProperties; |
|
| 149 |
} |
|
| 150 |
|
|
| 151 |
public Partition createPartition(String name) {
|
|
| 152 |
|
|
| 153 |
if (selectedStructuralUnitProperties.size() < 2) {
|
|
| 154 |
return null; |
|
| 155 |
} |
|
| 156 |
|
|
| 157 |
String partNamePrefix = ""; |
|
| 158 |
ArrayList<String> structuralUnits = new ArrayList<>(); |
|
| 159 |
ArrayList<String> structuralUnitProperties = new ArrayList<>(); |
|
| 160 |
for (StructuralUnitProperty sup : selectedStructuralUnitProperties) {
|
|
| 161 |
structuralUnits.add(sup.getStructuralUnit().getName()); |
|
| 162 |
structuralUnitProperties.add(sup.getName()); |
|
| 163 |
} |
|
| 164 |
ArrayList<String> structuralUnitToIgnore = new ArrayList<>(); |
|
| 165 |
String separator = separatorText.getText(); |
|
| 166 |
String expandTarget = expandText.getText(); |
|
| 167 |
|
|
| 168 |
PartitionQueriesGenerator pqg = new PartitionQueriesGenerator(); |
|
| 169 |
Partition partition; |
|
| 170 |
try {
|
|
| 171 |
partition = pqg.createPartition(corpus, false, |
|
| 172 |
name, partNamePrefix, separator, |
|
| 173 |
structuralUnits, structuralUnitProperties, |
|
| 174 |
structuralUnitToIgnore, expandTarget); |
|
| 175 |
|
|
| 176 |
return partition; |
|
| 177 |
} catch (Exception e) {
|
|
| 178 |
e.printStackTrace(); |
|
| 179 |
} |
|
| 180 |
return null; |
|
| 181 |
|
|
| 182 |
} |
|
| 183 |
|
|
| 184 |
/** |
|
| 185 |
* Create a list of queries and part names regarding the structural units, structural units properties, structural units to ignore user defined lists and expand target value specified. |
|
| 186 |
* @author s |
|
| 187 |
* |
|
| 188 |
*/ |
|
| 189 |
public class PartitionQueriesGenerator {
|
|
| 190 |
|
|
| 191 |
public boolean DEBUG = false; // si DEBUG, alors les requêtes sont affichées mais la partition n'est pas créée |
|
| 192 |
|
|
| 193 |
public String PARTITION_NAME = ""; // Nom de la partition (optionnel) |
|
| 194 |
public List<String> STRUCTURAL_UNITS = new ArrayList<>(); // Liste des unités structurelles sur lesquelles effectuer la partition, ex: ['text', 'div1'] |
|
| 195 |
public List<String> STRUCTURAL_UNITS_PROPERTIES = new ArrayList<>(); // Propriétés des unités structurelles sur lesquelles effectuer la partition, ex : ['id', 'name'] |
|
| 196 |
public List<String> STRUCTURAL_UNITS_TO_IGNORE = new ArrayList<>(); // Structure à ignorer, ex. CQL : !speaker (optionnel) |
|
| 197 |
public String PART_NAMES_PREFIX = ""; // Prefix pour les noms de partie (optionnel) |
|
| 198 |
public String EXPAND_TARGET = ""; // Expand to target, englobe les empans jusqu'à la balise parente spécifiée. |
|
| 199 |
public String VALUES_SEPARATOR = "x"; |
|
| 200 |
// NOTE : Le expand entre en conflit avec les sections à ignorer. |
|
| 201 |
// Si la target est à un niveau supérieur aux balises à ignorer, il les remet dans liste de résultats CWB et elles ne sont donc pas ignorées |
|
| 202 |
|
|
| 203 |
public List<String> queries = new ArrayList<>(); |
|
| 204 |
public List<String> partNames = new ArrayList<>(); |
|
| 205 |
|
|
| 206 |
/** |
|
| 207 |
* Init the generator and process. |
|
| 208 |
* @throws CqiClientException |
|
| 209 |
* @throws InterruptedException |
|
| 210 |
*/ |
|
| 211 |
public Partition createPartition(CQPCorpus corpus, boolean debug, |
|
| 212 |
String partitionName, String partNamePrefix, String separator, |
|
| 213 |
List<String> structuralUnits, List<String> structuralUnitProperties, |
|
| 214 |
List<String> structuralUnitToIgnore, String expandTarget) throws CqiClientException, InterruptedException {
|
|
| 215 |
|
|
| 216 |
PARTITION_NAME = partitionName; |
|
| 217 |
STRUCTURAL_UNITS = structuralUnits; |
|
| 218 |
STRUCTURAL_UNITS_PROPERTIES = structuralUnitProperties; |
|
| 219 |
STRUCTURAL_UNITS_TO_IGNORE = structuralUnitToIgnore; |
|
| 220 |
PART_NAMES_PREFIX = partNamePrefix; |
|
| 221 |
EXPAND_TARGET = expandTarget; |
|
| 222 |
VALUES_SEPARATOR = separator; |
|
| 223 |
DEBUG = debug; |
|
| 224 |
|
|
| 225 |
if (DEBUG) {
|
|
| 226 |
System.out.println("Arguments: ");
|
|
| 227 |
System.out.println("PARTITION_NAME = $PARTITION_NAME");
|
|
| 228 |
System.out.println("STRUCTURAL_UNITS = $STRUCTURAL_UNITS");
|
|
| 229 |
System.out.println("STRUCTURAL_UNITS_PROPERTIES = $STRUCTURAL_UNITS_PROPERTIES");
|
|
| 230 |
System.out.println("STRUCTURAL_UNITS_TO_IGNORE = $STRUCTURAL_UNITS_TO_IGNORE");
|
|
| 231 |
System.out.println("PART_NAMES_PREFIX = $PART_NAMES_PREFIX");
|
|
| 232 |
System.out.println("EXPAND_TARGET = $EXPAND_TARGET");
|
|
| 233 |
System.out.println("DEBUG = $DEBUG");
|
|
| 234 |
} |
|
| 235 |
|
|
| 236 |
if (STRUCTURAL_UNITS.size() > 0 && STRUCTURAL_UNITS.size() == STRUCTURAL_UNITS_PROPERTIES.size()) {
|
|
| 237 |
|
|
| 238 |
if (DEBUG) System.out.println("Creating the queries on corpus " + corpus + "\""); ;
|
|
| 239 |
if (DEBUG) System.out.println("PARTITION_NAME: "+ PARTITION_NAME);
|
|
| 240 |
|
|
| 241 |
//Corpus corpus = CorpusManager.getCorpusManager().getCorpus(corpusName); |
|
| 242 |
|
|
| 243 |
// Recursing through the corpus and subcorpus |
|
| 244 |
process(corpus, 0, "", "", VALUES_SEPARATOR); |
|
| 245 |
|
|
| 246 |
// Displaying the queries |
|
| 247 |
if (DEBUG) {
|
|
| 248 |
System.out.println("Queries processed: ");
|
|
| 249 |
for (int i = 0 ; i < queries.size() ; i++) {
|
|
| 250 |
System.out.println(partNames.get(i) + " = " + queries.get(i)); |
|
| 251 |
} |
|
| 252 |
} |
|
| 253 |
|
|
| 254 |
// Finalizing the queries |
|
| 255 |
finalizeQueries(); |
|
| 256 |
|
|
| 257 |
// Displaying the queries |
|
| 258 |
if (DEBUG) {
|
|
| 259 |
System.out.println("Queries finalized: ");
|
|
| 260 |
for (int i = 0 ; i < queries.size() ; i++) {
|
|
| 261 |
System.out.println(partNames.get(i) + " = " + queries.get(i)); |
|
| 262 |
} |
|
| 263 |
} |
|
| 264 |
|
|
| 265 |
if (DEBUG) System.out.println("Queries created.");
|
|
| 266 |
|
|
| 267 |
// Creating the partition |
|
| 268 |
if (!DEBUG && queries.size() == partNames.size()) {
|
|
| 269 |
Partition partition = new Partition(corpus); |
|
| 270 |
partition.setParameters(PARTITION_NAME, queries, partNames); |
|
| 271 |
partition.compute(); |
|
| 272 |
return partition; |
|
| 273 |
} |
|
| 274 |
} else {
|
|
| 275 |
System.out.println("Error: Structural units count or structural units properties count error.");
|
|
| 276 |
return null; |
|
| 277 |
} |
|
| 278 |
return null; |
|
| 279 |
} |
|
| 280 |
|
|
| 281 |
/** |
|
| 282 |
* Recurse through structural units and structural units properties of corpus and create the queries and the part names. |
|
| 283 |
* @param corpus the corpus or subcorpus |
|
| 284 |
* @param index the index for recursion |
|
| 285 |
* @param tmpQuery the temporary query for creating subcorpus part |
|
| 286 |
* @param tmpPartName the temporary part name of the subcorpus part |
|
| 287 |
* @throws CqiClientException |
|
| 288 |
*/ |
|
| 289 |
protected void process(CQPCorpus corpus, int index, String tmpQuery, String tmpPartName, String propertySeparator) throws CqiClientException {
|
|
| 290 |
// End of array |
|
| 291 |
if (index >= STRUCTURAL_UNITS.size()) {
|
|
| 292 |
|
|
| 293 |
queries.add(tmpQuery); |
|
| 294 |
partNames.add(PART_NAMES_PREFIX + tmpPartName); |
|
| 295 |
|
|
| 296 |
return; |
|
| 297 |
} |
|
| 298 |
|
|
| 299 |
StructuralUnit su = corpus.getStructuralUnit(STRUCTURAL_UNITS.get(index)); |
|
| 300 |
StructuralUnitProperty sup = su.getProperty(STRUCTURAL_UNITS_PROPERTIES.get(index)); |
|
| 301 |
|
|
| 302 |
if (DEBUG) {
|
|
| 303 |
if (index == 0) {
|
|
| 304 |
System.out.println("Pocessing Structural Unit Property " + sup.getFullName() + " on mother corpus " + corpus.getID());
|
|
| 305 |
} else {
|
|
| 306 |
System.out.println("Pocessing Structural Unit Property " + sup.getFullName() + " on subcorpus part " + tmpPartName);
|
|
| 307 |
} |
|
| 308 |
} |
|
| 309 |
|
|
| 310 |
|
|
| 311 |
// Creating the queries parts for each structural units properties values |
|
| 312 |
// for (supValue in sup.getOrderedValues()) { // TODO : signaler bug Matthieu, on ne devrait pas être obligé de repasser le sous-corpus à la méthode car sup a déjà été créée depuis le sous-corpus ? getValues() bugge aussi
|
|
| 313 |
for (String supValue : sup.getOrderedValues(corpus)) {
|
|
| 314 |
|
|
| 315 |
if (DEBUG) System.out.println("Value " + supValue);
|
|
| 316 |
|
|
| 317 |
// Getting the subcorpus linked to the structural unit property value |
|
| 318 |
Subcorpus tmpSubcorpus = corpus.createSubcorpusWithQueryString(su, sup, supValue, "tmp" + UUID.randomUUID()); |
|
| 319 |
|
|
| 320 |
// Partition conditions and part name separators |
|
| 321 |
String and = ""; |
|
| 322 |
String underscore = ""; |
|
| 323 |
if (tmpQuery != "") {
|
|
| 324 |
underscore = propertySeparator; |
|
| 325 |
and = " & "; |
|
| 326 |
} |
|
| 327 |
|
|
| 328 |
process(tmpSubcorpus, index + 1, (tmpQuery + and + "_." + sup.getFullName() + "=\"" + supValue + "\""), tmpPartName + underscore + supValue, propertySeparator); |
|
| 329 |
|
|
| 330 |
// Deleting the temporary subcorpus |
|
| 331 |
// TODO : bug : cette méthode ne supprime pas le corpus sans doute car il faut que le sous-corpus ne contienne pas d'autres sous-corpus ? le delete() en revanche fonctionne. |
|
| 332 |
// corpus.dropSubcorpus(tmpSubcorpus); |
|
| 333 |
tmpSubcorpus.delete(); |
|
| 334 |
} |
|
| 335 |
} |
|
| 336 |
|
|
| 337 |
|
|
| 338 |
/** |
|
| 339 |
* Autoname the partition. |
|
| 340 |
* @param partitionName |
|
| 341 |
*/ |
|
| 342 |
protected void autoNamePartition(String partitionName) {
|
|
| 343 |
|
|
| 344 |
// Structural units names and properties |
|
| 345 |
for (int i = 0; i < STRUCTURAL_UNITS.size(); i++) {
|
|
| 346 |
partitionName += STRUCTURAL_UNITS.get(i) + '_' + STRUCTURAL_UNITS_PROPERTIES.get(i) + VALUES_SEPARATOR; |
|
| 347 |
} |
|
| 348 |
|
|
| 349 |
// Structural units to ignore |
|
| 350 |
for (int i = 0; i < STRUCTURAL_UNITS_TO_IGNORE.size(); i++) {
|
|
| 351 |
partitionName += "NOT_" + STRUCTURAL_UNITS_TO_IGNORE.get(i) + '.'; |
|
| 352 |
} |
|
| 353 |
|
|
| 354 |
// Removing last 'x' in partition name |
|
| 355 |
PARTITION_NAME = partitionName.substring(0, partitionName.length() - 3); |
|
| 356 |
} |
|
| 357 |
|
|
| 358 |
/** |
|
| 359 |
* Finalize the queries. |
|
| 360 |
*/ |
|
| 361 |
protected void finalizeQueries() {
|
|
| 362 |
|
|
| 363 |
String expandTo = ""; |
|
| 364 |
// Expanding to user defined target |
|
| 365 |
if (EXPAND_TARGET != null && EXPAND_TARGET.length() > 0) {
|
|
| 366 |
expandTo = " expand to " + EXPAND_TARGET; |
|
| 367 |
} |
|
| 368 |
// Expanding to last child structural unit in user defined hierarchy |
|
| 369 |
else if(STRUCTURAL_UNITS_TO_IGNORE.size() == 0) {
|
|
| 370 |
expandTo = " expand to " + STRUCTURAL_UNITS.get(STRUCTURAL_UNITS.size() - 1); |
|
| 371 |
} |
|
| 372 |
|
|
| 373 |
// Autonaming the partition |
|
| 374 |
if (PARTITION_NAME != null && PARTITION_NAME.length() == 0) {
|
|
| 375 |
autoNamePartition(PARTITION_NAME); |
|
| 376 |
// Finalizing partition name |
|
| 377 |
if (EXPAND_TARGET != null && EXPAND_TARGET.length() > 0) |
|
| 378 |
PARTITION_NAME += expandTo.replace(" expand to", ".EXPAND TO").replace(" ", "_");
|
|
| 379 |
} |
|
| 380 |
|
|
| 381 |
// Finalizing queries |
|
| 382 |
for (int j = 0; j < queries.size(); j++) {
|
|
| 383 |
|
|
| 384 |
String queryEnd = ""; |
|
| 385 |
|
|
| 386 |
// Removing some sections |
|
| 387 |
for (String sectionToIgnore : STRUCTURAL_UNITS_TO_IGNORE) {
|
|
| 388 |
queryEnd += " & !" + sectionToIgnore; |
|
| 389 |
} |
|
| 390 |
|
|
| 391 |
queryEnd += ']' + expandTo; |
|
| 392 |
queries.set(j, '[' + queries.get(j) + queryEnd); |
|
| 393 |
} |
|
| 394 |
} |
|
| 395 |
} |
|
| 396 |
} |
|
| 0 | 397 | |
| TXM/trunk/bundles/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/structures/ContextsSubcorpusPanel.java (revision 3979) | ||
|---|---|---|
| 1 |
// Copyright © 2010-2020 ENS de Lyon., University of Franche-Comté |
|
| 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.rcp.swt.widget.structures; |
|
| 29 |
|
|
| 30 |
import java.util.ArrayList; |
|
| 31 |
import java.util.HashMap; |
|
| 32 |
import java.util.LinkedHashSet; |
|
| 33 |
import java.util.List; |
|
| 34 |
|
|
| 35 |
import org.apache.commons.lang.StringUtils; |
|
| 36 |
import org.eclipse.jface.viewers.ArrayContentProvider; |
|
| 37 |
import org.eclipse.jface.viewers.IStructuredSelection; |
|
| 38 |
import org.eclipse.jface.viewers.ListViewer; |
|
| 39 |
import org.eclipse.swt.SWT; |
|
| 40 |
import org.eclipse.swt.events.SelectionEvent; |
|
| 41 |
import org.eclipse.swt.events.SelectionListener; |
|
| 42 |
import org.eclipse.swt.layout.GridData; |
|
| 43 |
import org.eclipse.swt.layout.GridLayout; |
|
| 44 |
import org.eclipse.swt.widgets.Button; |
|
| 45 |
import org.eclipse.swt.widgets.Combo; |
|
| 46 |
import org.eclipse.swt.widgets.Composite; |
|
| 47 |
import org.eclipse.swt.widgets.Group; |
|
| 48 |
import org.eclipse.swt.widgets.Label; |
|
| 49 |
import org.eclipse.swt.widgets.Spinner; |
|
| 50 |
import org.eclipse.swt.widgets.Text; |
|
| 51 |
import org.txm.core.messages.TXMCoreMessages; |
|
| 52 |
import org.txm.rcp.messages.TXMUIMessages; |
|
| 53 |
import org.txm.rcp.swt.widget.QueryWidget; |
|
| 54 |
import org.txm.rcp.swt.widget.parameters.QueryField; |
|
| 55 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
|
| 56 |
import org.txm.searchengine.cqp.clientExceptions.CqiClientException; |
|
| 57 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 58 |
import org.txm.searchengine.cqp.corpus.StructuralUnit; |
|
| 59 |
import org.txm.searchengine.cqp.corpus.StructuralUnitProperty; |
|
| 60 |
|
|
| 61 |
/** |
|
| 62 |
* The Class ComplexSubcorpusPanel. |
|
| 63 |
*/ |
|
| 64 |
public class ContextsSubcorpusPanel extends Composite {
|
|
| 65 |
|
|
| 66 |
/** The corpus. */ |
|
| 67 |
CQPCorpus corpus; |
|
| 68 |
|
|
| 69 |
/** The query. */ |
|
| 70 |
String query; |
|
| 71 |
|
|
| 72 |
/** The structuralunits. */ |
|
| 73 |
List<String> structuralunits; |
|
| 74 |
|
|
| 75 |
/** The query field. */ |
|
| 76 |
QueryWidget queryField; |
|
| 77 |
|
|
| 78 |
Combo structuralUnitCombo; |
|
| 79 |
|
|
| 80 |
private Spinner wordContextSize; |
|
| 81 |
|
|
| 82 |
/** |
|
| 83 |
* Instantiates a new complex subcorpus panel. |
|
| 84 |
* |
|
| 85 |
* @param parent the parent |
|
| 86 |
* @param style the style |
|
| 87 |
* @param corpus the corpus |
|
| 88 |
*/ |
|
| 89 |
public ContextsSubcorpusPanel(Composite parent, int style, CQPCorpus corpus) {
|
|
| 90 |
|
|
| 91 |
super(parent, style); |
|
| 92 |
|
|
| 93 |
this.setLayout(new GridLayout(2, false)); |
|
| 94 |
this.corpus = corpus; |
|
| 95 |
|
|
| 96 |
try {
|
|
| 97 |
ArrayList<StructuralUnit> tmp = new ArrayList<>(corpus.getOrderedStructuralUnits()); |
|
| 98 |
this.structuralunits = new ArrayList<String>(); |
|
| 99 |
for (StructuralUnit su : tmp) {
|
|
| 100 |
if (!(su.getName().equals("txmcorpus"))) { //$NON-NLS-1$
|
|
| 101 |
this.structuralunits.add(su.getName()); |
|
| 102 |
} |
|
| 103 |
} |
|
| 104 |
} |
|
| 105 |
catch (CqiClientException e) {
|
|
| 106 |
org.txm.utils.logger.Log.printStackTrace(e); |
|
| 107 |
} |
|
| 108 |
|
|
| 109 |
Label firstStep = new Label(this, SWT.NONE); |
|
| 110 |
firstStep.setText("1- set pivot");
|
|
| 111 |
firstStep = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL); |
|
| 112 |
firstStep.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1)); |
|
| 113 |
|
|
| 114 |
Label l = new Label(this, SWT.NONE); |
|
| 115 |
l.setText(TXMUIMessages.query); |
|
| 116 |
|
|
| 117 |
queryField = new QueryWidget(this, SWT.BORDER, corpus.getProject(), CQPSearchEngine.getEngine()); |
|
| 118 |
queryField.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
| 119 |
|
|
| 120 |
Label secondStep = new Label(this, SWT.NONE); |
|
| 121 |
secondStep.setText("2- set context");
|
|
| 122 |
secondStep = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL); |
|
| 123 |
secondStep.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1)); |
|
| 124 |
|
|
| 125 |
l = new Label(this, SWT.NONE); |
|
| 126 |
l.setText("Limit");
|
|
| 127 |
|
|
| 128 |
structuralUnitCombo = new Combo(this, SWT.SINGLE|SWT.READ_ONLY); |
|
| 129 |
structuralUnitCombo.setItems(structuralunits.toArray(new String[structuralunits.size()])); |
|
| 130 |
structuralUnitCombo.add("<w>", 0);
|
|
| 131 |
|
|
| 132 |
structuralUnitCombo.setText("text");
|
|
| 133 |
|
|
| 134 |
l = new Label(this, SWT.NONE); |
|
| 135 |
l.setText(TXMUIMessages.contextSize); |
|
| 136 |
|
|
| 137 |
wordContextSize = new Spinner(this, SWT.NONE); |
|
| 138 |
wordContextSize.setMinimum(1); |
|
| 139 |
} |
|
| 140 |
|
|
| 141 |
public void updateQueryField() {
|
|
| 142 |
|
|
| 143 |
queryField.update(); |
|
| 144 |
} |
|
| 145 |
|
|
| 146 |
/** |
|
| 147 |
* Update display. |
|
| 148 |
*/ |
|
| 149 |
public void updateDisplay() {
|
|
| 150 |
this.layout(); |
|
| 151 |
} |
|
| 152 |
|
|
| 153 |
/** |
|
| 154 |
* Gets the query string. |
|
| 155 |
* |
|
| 156 |
* @return the generated query string |
|
| 157 |
*/ |
|
| 158 |
public String getQueryString() {
|
|
| 159 |
|
|
| 160 |
String q = queryField.getQuery().fixQuery(corpus.getLang()).getQueryString(); |
|
| 161 |
if (!q.contains(" expand to ") &&
|
|
| 162 |
(wordContextSize.getSelection() > 1 || !("<w>".equals(structuralUnitCombo.getText())))) {
|
|
| 163 |
q += " expand to"; |
|
| 164 |
|
|
| 165 |
if (wordContextSize.getSelection() > 1) {
|
|
| 166 |
q += " " + wordContextSize.getSelection(); |
|
| 167 |
} |
|
| 168 |
|
|
| 169 |
if (!("<w>".equals(structuralUnitCombo.getText()))) {
|
|
| 170 |
q += " " +structuralUnitCombo.getText(); |
|
| 171 |
} |
|
| 172 |
} |
|
| 173 |
|
|
| 174 |
return q; |
|
| 175 |
} |
|
| 176 |
|
|
| 177 |
/** |
|
| 178 |
* |
|
| 179 |
* @return the raw query without the context filter |
|
| 180 |
*/ |
|
| 181 |
public String getQueryFieldValue() {
|
|
| 182 |
|
|
| 183 |
String query = this.queryField.getText(); |
|
| 184 |
if (query == null || query.length() == 0) {
|
|
| 185 |
query = getQueryString(); |
|
| 186 |
} |
|
| 187 |
return query; |
|
| 188 |
} |
|
| 189 |
|
|
| 190 |
public String getGeneratedName() {
|
|
| 191 |
|
|
| 192 |
String s = queryField.getQueryString()+">"; |
|
| 193 |
if ("<w>".equals(structuralUnitCombo.getText())) {
|
|
| 194 |
|
|
| 195 |
if (wordContextSize.getSelection() > 1) {
|
|
| 196 |
return "<"+wordContextSize.getSelection() +"w "+s; |
|
| 197 |
} else {
|
|
| 198 |
return "<w "+s; |
|
| 199 |
} |
|
| 200 |
} else {
|
|
| 201 |
if (wordContextSize.getSelection() > 1) {
|
|
| 202 |
return "<"+wordContextSize.getSelection()+ structuralUnitCombo.getText()+" "+s; |
|
| 203 |
} else {
|
|
| 204 |
return "<"+structuralUnitCombo.getText()+" "+s; |
|
| 205 |
} |
|
| 206 |
} |
|
| 207 |
|
|
| 208 |
} |
|
| 209 |
} |
|
| 0 | 210 | |
| TXM/trunk/bundles/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/structures/AdvancedPartitionPanel.java (revision 3979) | ||
|---|---|---|
| 1 |
package org.txm.rcp.swt.widget.structures; |
|
| 2 |
|
|
| 3 |
import java.io.File; |
|
| 4 |
import java.util.ArrayList; |
|
| 5 |
import java.util.List; |
|
| 6 |
import java.util.Properties; |
|
| 7 |
|
|
| 8 |
import org.eclipse.swt.SWT; |
|
| 9 |
import org.eclipse.swt.custom.ScrolledComposite; |
|
| 10 |
import org.eclipse.swt.events.ControlAdapter; |
|
| 11 |
import org.eclipse.swt.events.ControlEvent; |
|
| 12 |
import org.eclipse.swt.graphics.Rectangle; |
|
| 13 |
import org.eclipse.swt.layout.GridData; |
|
| 14 |
import org.eclipse.swt.layout.GridLayout; |
|
| 15 |
import org.eclipse.swt.widgets.Button; |
|
| 16 |
import org.eclipse.swt.widgets.Composite; |
|
| 17 |
import org.eclipse.swt.widgets.Event; |
|
| 18 |
import org.eclipse.swt.widgets.FileDialog; |
|
| 19 |
import org.eclipse.swt.widgets.Listener; |
|
| 20 |
import org.eclipse.swt.widgets.Text; |
|
| 21 |
import org.txm.core.messages.TXMCoreMessages; |
|
| 22 |
import org.txm.rcp.messages.TXMUIMessages; |
|
| 23 |
import org.txm.rcp.swt.widget.QueryWidget; |
|
| 24 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
|
| 25 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 26 |
import org.txm.searchengine.cqp.corpus.Partition; |
|
| 27 |
import org.txm.utils.io.IOUtils; |
|
| 28 |
import org.txm.utils.logger.Log; |
|
| 29 |
|
|
| 30 |
public class AdvancedPartitionPanel extends Composite {
|
|
| 31 |
|
|
| 32 |
// for the "advanced" tab |
|
| 33 |
/** The queries. */ |
|
| 34 |
private List<QueryWidget> queries = new ArrayList<>(); |
|
| 35 |
|
|
| 36 |
/** The part names. */ |
|
| 37 |
private List<Text> partNames = new ArrayList<>(); |
|
| 38 |
|
|
| 39 |
/** The queries string. */ |
|
| 40 |
List<String> queriesString = new ArrayList<>(); |
|
| 41 |
|
|
| 42 |
private CQPCorpus corpus; |
|
| 43 |
|
|
| 44 |
private ScrolledComposite scrollComposite; |
|
| 45 |
|
|
| 46 |
private Composite compositeForAdvanced; |
|
| 47 |
|
|
| 48 |
public AdvancedPartitionPanel(Composite parent, int style, CQPCorpus corpus) {
|
|
| 49 |
super(parent, style); |
|
| 50 |
|
|
| 51 |
this.setLayout(new GridLayout(2, false)); |
|
| 52 |
this.corpus = corpus; |
|
| 53 |
|
|
| 54 |
scrollComposite = new ScrolledComposite(this, SWT.V_SCROLL); |
|
| 55 |
scrollComposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1)); |
|
| 56 |
|
|
| 57 |
Button importButton = new Button(this, SWT.NONE); |
|
| 58 |
importButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER, GridData.FILL, false, false)); |
|
| 59 |
importButton.setText("+ from properties file..."); //$NON-NLS-1$
|
|
| 60 |
importButton.addListener(SWT.Selection, new Listener() {
|
|
| 61 |
@Override |
|
| 62 |
public void handleEvent(Event event) {
|
|
| 63 |
FileDialog d = new FileDialog(event.display.getActiveShell()); |
|
| 64 |
d.setFilterExtensions(new String[] {"*.properties"});
|
|
| 65 |
d.setText("Select a .properties file containing CQL queries");
|
|
| 66 |
String path = d.open(); |
|
| 67 |
if (path != null) {
|
|
| 68 |
Properties props = new Properties(); |
|
| 69 |
try {
|
|
| 70 |
props.load(IOUtils.getReader(new File(path))); |
|
| 71 |
for (Object key : props.keySet()) {
|
|
| 72 |
String value = props.getProperty(key.toString()); |
|
| 73 |
QueryWidget qw = addQueryField(key.toString().substring(0, Math.min(20, key.toString().length())), value); |
|
| 74 |
} |
|
| 75 |
} catch (Exception e) {
|
|
| 76 |
// TODO Auto-generated catch block |
|
| 77 |
e.printStackTrace(); |
|
| 78 |
} |
|
| 79 |
} |
|
| 80 |
|
|
| 81 |
} |
|
| 82 |
}); |
|
| 83 |
|
|
| 84 |
compositeForAdvanced = new Composite(scrollComposite, SWT.NONE); |
|
| 85 |
GridLayout layoutForAdvanced = new GridLayout(4, false); |
|
| 86 |
compositeForAdvanced.setLayout(layoutForAdvanced); |
|
| 87 |
|
|
| 88 |
scrollComposite.setContent(compositeForAdvanced); |
|
| 89 |
scrollComposite.setExpandVertical(true); |
|
| 90 |
scrollComposite.setExpandHorizontal(true); |
|
| 91 |
scrollComposite.addControlListener(new ControlAdapter() {
|
|
| 92 |
|
|
| 93 |
@Override |
|
| 94 |
public void controlResized(ControlEvent e) {
|
|
| 95 |
|
|
| 96 |
Rectangle r = scrollComposite.getClientArea(); |
|
| 97 |
scrollComposite.setMinSize(compositeForAdvanced.computeSize(r.width, SWT.DEFAULT)); |
|
| 98 |
} |
|
| 99 |
}); |
|
| 100 |
|
|
| 101 |
createAdvancedQueryField(); |
|
| 102 |
} |
|
| 103 |
|
|
| 104 |
/** |
|
| 105 |
* Creates the advanced query field. |
|
| 106 |
* |
|
| 107 |
*/ |
|
| 108 |
private void createAdvancedQueryField() {
|
|
| 109 |
|
|
| 110 |
addQueryField(); |
|
| 111 |
Rectangle r = scrollComposite.getClientArea(); |
|
| 112 |
scrollComposite.setMinSize(compositeForAdvanced.computeSize(r.width, SWT.DEFAULT)); |
|
| 113 |
} |
|
| 114 |
|
|
| 115 |
/** |
|
| 116 |
* Adds the query field. |
|
| 117 |
* |
|
| 118 |
*/ |
|
| 119 |
private QueryWidget addQueryField() {
|
|
| 120 |
|
|
| 121 |
return addQueryField(null, null); |
|
| 122 |
} |
|
| 123 |
|
|
| 124 |
/** |
|
| 125 |
* Adds the query field. |
|
| 126 |
* |
|
| 127 |
* @param name the query name |
|
| 128 |
* @param value the query |
|
| 129 |
*/ |
|
| 130 |
private QueryWidget addQueryField(String name, String value) {
|
|
| 131 |
|
|
| 132 |
final Text advancedPartLabel = new Text(compositeForAdvanced, SWT.BORDER); |
|
| 133 |
advancedPartLabel.setText(TXMUIMessages.part + (partNames.size() + 1)); |
|
| 134 |
advancedPartLabel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false)); |
|
| 135 |
if (name != null && name.length() > 0) {
|
|
| 136 |
advancedPartLabel.setText(name); |
|
| 137 |
} |
|
| 138 |
partNames.add(advancedPartLabel); |
|
| 139 |
|
|
| 140 |
final QueryWidget queryText; |
|
| 141 |
queryText = new QueryWidget(compositeForAdvanced, SWT.DROP_DOWN, corpus.getProject(), CQPSearchEngine.getEngine()); |
|
| 142 |
queryText.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false)); |
|
| 143 |
GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, false); |
|
| 144 |
// gridData.widthHint = convertHeightInCharsToPixels(20); |
|
| 145 |
queryText.setLayoutData(gridData); |
|
| 146 |
queries.add(queryText); |
|
| 147 |
if (value != null) {
|
|
| 148 |
queryText.setText(value); |
|
| 149 |
} |
|
| 150 |
|
|
| 151 |
Button plusButton = new Button(compositeForAdvanced, SWT.NONE); |
|
| 152 |
plusButton.setText("+"); //$NON-NLS-1$
|
|
| 153 |
plusButton.addListener(SWT.Selection, new Listener() {
|
|
| 154 |
|
|
| 155 |
@Override |
|
| 156 |
public void handleEvent(Event event) {
|
|
| 157 |
addQueryField(); |
|
| 158 |
} |
|
| 159 |
}); |
|
| 160 |
|
|
| 161 |
final Button minusButton = new Button(compositeForAdvanced, SWT.NONE); |
|
| 162 |
minusButton.setText("-"); //$NON-NLS-1$
|
|
| 163 |
minusButton.addListener(SWT.Selection, new Listener() {
|
|
| 164 |
|
|
| 165 |
@Override |
|
| 166 |
public void handleEvent(Event event) {
|
|
| 167 |
if (queries.size() <= 1) return; |
|
| 168 |
queries.remove(queryText); |
|
| 169 |
partNames.remove(advancedPartLabel); |
|
| 170 |
advancedPartLabel.dispose(); |
|
| 171 |
queryText.dispose(); |
|
| 172 |
minusButton.dispose(); |
|
| 173 |
plusButton.dispose(); |
|
| 174 |
compositeForAdvanced.layout(true); |
|
| 175 |
} |
|
| 176 |
}); |
|
| 177 |
Rectangle r = scrollComposite.getClientArea(); |
|
| 178 |
scrollComposite.setMinSize(compositeForAdvanced.computeSize(r.width, SWT.DEFAULT)); |
|
| 179 |
scrollComposite.update(); |
|
| 180 |
scrollComposite.layout(); |
|
| 181 |
compositeForAdvanced.update(); |
|
| 182 |
compositeForAdvanced.layout(); |
|
| 183 |
|
|
| 184 |
return queryText; |
|
| 185 |
} |
|
| 186 |
|
|
| 187 |
/** |
|
| 188 |
* Gets the advance part names. |
|
| 189 |
* |
|
| 190 |
* @return the advance part names |
|
| 191 |
*/ |
|
| 192 |
private List<String> getAdvancePartNames() {
|
|
| 193 |
|
|
| 194 |
ArrayList<String> values = new ArrayList<>(); |
|
| 195 |
int count = 0; |
|
| 196 |
for (Text t : partNames) {
|
|
| 197 |
String name = t.getText().trim(); |
|
| 198 |
if (name.length() == 0) {
|
|
| 199 |
name = TXMUIMessages.part + count++; |
|
| 200 |
} |
|
| 201 |
values.add(name); |
|
| 202 |
} |
|
| 203 |
return values; |
|
| 204 |
} |
|
| 205 |
|
|
| 206 |
/** |
|
| 207 |
* Gets the queries. |
|
| 208 |
* |
|
| 209 |
* @return the queries |
|
| 210 |
*/ |
|
| 211 |
public List<String> getQueries() {
|
|
| 212 |
|
|
| 213 |
return queriesString; |
|
| 214 |
} |
|
| 215 |
|
|
| 216 |
/** |
|
| 217 |
* Return true if no query is currently given in the "advanced" tab (ie if |
|
| 218 |
* all Text field opened are empty). |
|
| 219 |
* |
|
| 220 |
* @return true, if successful |
|
| 221 |
*/ |
|
| 222 |
public boolean isQueriesSet() {
|
|
| 223 |
|
|
| 224 |
for (QueryWidget query : queries) {
|
|
| 225 |
if (query.getText().length() == 0) {
|
|
| 226 |
return true; |
|
| 227 |
} |
|
| 228 |
} |
|
| 229 |
return false; |
|
| 230 |
} |
|
| 231 |
|
|
| 232 |
public Partition createPartition(String name) {
|
|
| 233 |
|
|
| 234 |
queriesString.clear(); |
|
| 235 |
for (QueryWidget query : queries) {
|
|
| 236 |
queriesString.add(query.getQueryString()); |
|
| 237 |
//query.memorize(); |
|
| 238 |
} |
|
| 239 |
|
|
| 240 |
Partition partition = null; |
|
| 241 |
|
|
| 242 |
try {
|
|
| 243 |
// auto-naming if needed |
|
| 244 |
if (name.isEmpty()) {
|
|
| 245 |
name = "partition" + (this.corpus.getPartitions().size() + 1); //$NON-NLS-1$ |
|
| 246 |
Log.info(TXMCoreMessages.bind(TXMUIMessages.noPartitionNameWasSpecifiedTheNameIsP0, name)); |
|
| 247 |
} |
|
| 248 |
|
|
| 249 |
partition = new Partition(this.corpus); |
|
| 250 |
partition.setParameters(name, this.getQueries(), this.getAdvancePartNames()); |
|
| 251 |
} |
|
| 252 |
catch (Exception e) {
|
|
| 253 |
org.txm.utils.logger.Log.printStackTrace(e); |
|
| 254 |
return null; |
|
| 255 |
} |
|
| 256 |
|
|
| 257 |
return partition; |
|
| 258 |
} |
|
| 259 |
} |
|
| 0 | 260 | |
| TXM/trunk/bundles/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/structures/SimplePartitionPanel.java (revision 3979) | ||
|---|---|---|
| 1 |
package org.txm.rcp.swt.widget.structures; |
|
| 2 |
|
|
| 3 |
import java.util.ArrayList; |
|
| 4 |
import java.util.List; |
|
| 5 |
|
|
| 6 |
import org.eclipse.swt.SWT; |
|
| 7 |
import org.eclipse.swt.events.SelectionEvent; |
|
| 8 |
import org.eclipse.swt.events.SelectionListener; |
|
| 9 |
import org.eclipse.swt.layout.GridData; |
|
| 10 |
import org.eclipse.swt.layout.GridLayout; |
|
| 11 |
import org.eclipse.swt.widgets.Combo; |
|
| 12 |
import org.eclipse.swt.widgets.Composite; |
|
| 13 |
import org.eclipse.swt.widgets.Label; |
|
| 14 |
import org.txm.core.messages.TXMCoreMessages; |
|
| 15 |
import org.txm.rcp.messages.TXMUIMessages; |
|
| 16 |
import org.txm.searchengine.cqp.clientExceptions.CqiClientException; |
|
| 17 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 18 |
import org.txm.searchengine.cqp.corpus.Partition; |
|
| 19 |
import org.txm.searchengine.cqp.corpus.StructuralUnit; |
|
| 20 |
import org.txm.searchengine.cqp.corpus.StructuralUnitProperty; |
|
| 21 |
import org.txm.utils.logger.Log; |
|
| 22 |
|
|
| 23 |
public class SimplePartitionPanel extends Composite {
|
|
| 24 |
|
|
| 25 |
// For the "simple" tab |
|
| 26 |
/** The selected structural unit. */ |
|
| 27 |
private StructuralUnit selectedStructuralUnit; |
|
| 28 |
|
|
| 29 |
/** The selected structural unit property. */ |
|
| 30 |
private StructuralUnitProperty selectedStructuralUnitProperty; |
|
| 31 |
|
|
| 32 |
/** The structural units combo. */ |
|
| 33 |
private Combo structuralUnitsCombo; |
|
| 34 |
|
|
| 35 |
/** The structural units final. */ |
|
| 36 |
private List<StructuralUnit> structuralUnitsFinal; |
|
| 37 |
|
|
| 38 |
/** The property combo. */ |
|
| 39 |
private Combo propertyCombo; |
|
| 40 |
|
|
| 41 |
private CQPCorpus corpus; |
|
| 42 |
|
|
| 43 |
public SimplePartitionPanel(Composite parent, int style, CQPCorpus corpus) {
|
|
| 44 |
super(parent, style); |
|
| 45 |
|
|
| 46 |
this.corpus = corpus; |
|
| 47 |
|
|
| 48 |
GridLayout layout = new GridLayout(2, false); |
|
| 49 |
this.setLayout(layout); |
|
| 50 |
|
|
| 51 |
// StructuralUnit |
|
| 52 |
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
| 53 |
|
|
| 54 |
Label structureLabel = new Label(this, SWT.NONE); |
|
| 55 |
structureLabel.setText(TXMUIMessages.ampStructureColon); |
|
| 56 |
structureLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); |
|
| 57 |
|
|
| 58 |
structuralUnitsCombo = new Combo(this, SWT.READ_ONLY); |
|
| 59 |
structuralUnitsCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); |
|
| 60 |
|
|
| 61 |
List<StructuralUnit> structuralUnits = null; |
|
| 62 |
try {
|
|
| 63 |
structuralUnits = corpus.getOrderedStructuralUnits(); |
|
| 64 |
} |
|
| 65 |
catch (CqiClientException e) {
|
|
| 66 |
Log.severe(TXMCoreMessages.bind(TXMCoreMessages.error_errorP0, Log.toString(e))); |
|
| 67 |
} |
|
| 68 |
structuralUnitsFinal = new ArrayList<>(); |
|
| 69 |
for (StructuralUnit unit : structuralUnits) {
|
|
| 70 |
if (unit.getName().equals("txmcorpus")) continue; // ignore txmcorpus structure //$NON-NLS-1$
|
|
| 71 |
|
|
| 72 |
if (unit.getOrderedProperties() != null && unit.getOrderedProperties().size() != 0) {
|
|
| 73 |
/* |
|
| 74 |
* if ((unit.getName().equals("text") &&
|
|
| 75 |
* unit.getProperties().size() > 3)) //$NON-NLS-1$ {
|
|
| 76 |
* structuralUnitsCombo.add(unit.getName()); |
|
| 77 |
* structuralUnitsFinal.add(unit); } else |
|
| 78 |
* if (!unit.getName().equals("text")) //$NON-NLS-1$ {
|
|
| 79 |
*/ |
|
| 80 |
structuralUnitsCombo.add(unit.getName()); |
|
| 81 |
structuralUnitsFinal.add(unit); |
|
| 82 |
// } |
|
| 83 |
} |
|
| 84 |
} |
|
| 85 |
|
|
| 86 |
if (structuralUnitsCombo.getItemCount() == 0) {
|
|
| 87 |
|
|
| 88 |
} |
|
| 89 |
else {
|
|
| 90 |
structuralUnitsCombo.select(0); |
|
| 91 |
String[] items = structuralUnitsCombo.getItems(); |
|
| 92 |
for (int i = 0; i < items.length; i++) {
|
|
| 93 |
if (items[i].equals("text")) { //$NON-NLS-1$
|
|
| 94 |
structuralUnitsCombo.select(i); |
|
| 95 |
break; |
|
| 96 |
} |
|
| 97 |
} |
|
| 98 |
selectedStructuralUnit = structuralUnitsFinal.get(0); |
|
| 99 |
} |
|
| 100 |
// combo.setSize (200, 200); |
|
| 101 |
|
|
| 102 |
// StructuralUnitProperty |
|
| 103 |
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
| 104 |
|
|
| 105 |
Label propertyLabel = new Label(this, SWT.NONE); |
|
| 106 |
propertyLabel.setText(TXMUIMessages.ampPropertyColon); |
|
| 107 |
propertyLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); |
|
| 108 |
|
|
| 109 |
propertyCombo = new Combo(this, SWT.READ_ONLY); |
|
| 110 |
propertyCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); |
|
| 111 |
|
|
| 112 |
// combo.setSize (200, 200); |
|
| 113 |
structuralUnitsCombo.addSelectionListener(new SelectionListener() {
|
|
| 114 |
|
|
| 115 |
@Override |
|
| 116 |
public void widgetDefaultSelected(SelectionEvent e) {}
|
|
| 117 |
|
|
| 118 |
@Override |
|
| 119 |
public void widgetSelected(SelectionEvent event) {
|
|
| 120 |
|
|
| 121 |
reloadProperties(); |
|
| 122 |
} |
|
| 123 |
}); |
|
| 124 |
|
|
| 125 |
for (StructuralUnitProperty property : structuralUnitsFinal.get(0).getOrderedProperties()) {
|
|
| 126 |
if (!(structuralUnitsFinal.get(0).getName().equals("text") && //$NON-NLS-1$
|
|
| 127 |
(property.getName().equals("project") || property.getName().equals("base")))) //$NON-NLS-1$ //$NON-NLS-2$
|
|
| 128 |
propertyCombo.add(property.getName()); |
|
| 129 |
} |
|
| 130 |
propertyCombo.select(0); |
|
| 131 |
selectedStructuralUnitProperty = selectedStructuralUnit.getOrderedProperties().get(0); |
|
| 132 |
|
|
| 133 |
propertyCombo.addSelectionListener(new SelectionListener() {
|
|
| 134 |
|
|
| 135 |
@Override |
|
| 136 |
public void widgetDefaultSelected(SelectionEvent e) {}
|
|
| 137 |
|
|
| 138 |
@Override |
|
| 139 |
public void widgetSelected(SelectionEvent event) {
|
|
| 140 |
|
|
| 141 |
selectedStructuralUnitProperty = selectedStructuralUnit.getOrderedProperties().get(propertyCombo.getSelectionIndex()); |
|
| 142 |
} |
|
| 143 |
}); |
|
| 144 |
|
|
| 145 |
reloadProperties(); |
|
| 146 |
} |
|
| 147 |
|
|
| 148 |
/** |
|
| 149 |
* Reload values. |
|
| 150 |
*/ |
|
| 151 |
protected void reloadValues() {
|
|
| 152 |
|
|
| 153 |
List<StructuralUnitProperty> properties = null; |
|
| 154 |
selectedStructuralUnit = structuralUnitsFinal.get(structuralUnitsCombo.getSelectionIndex()); |
|
| 155 |
|
|
| 156 |
properties = selectedStructuralUnit.getOrderedProperties(); |
|
| 157 |
propertyCombo.removeAll(); |
|
| 158 |
for (StructuralUnitProperty property : properties) {
|
|
| 159 |
/* |
|
| 160 |
* if (!(selectedStructuralUnit.getName().equals("text") &&
|
|
| 161 |
* //$NON-NLS-1$ (property.getName().equals("id") || //$NON-NLS-1$
|
|
| 162 |
* property.getName().equals("base") || //$NON-NLS-1$
|
|
| 163 |
* property.getName().equals("project")))) //$NON-NLS-1$
|
|
| 164 |
*/ |
|
| 165 |
if (selectedStructuralUnit.getName().equals("text") && //$NON-NLS-1$
|
|
| 166 |
(property.getName().equals("project") || property.getName().equals("base"))) continue; // ignore technical properties //$NON-NLS-1$ //$NON-NLS-2$
|
|
| 167 |
propertyCombo.add(property.getName()); |
|
| 168 |
} |
|
| 169 |
if (propertyCombo.getItemCount() > 0) {
|
|
| 170 |
propertyCombo.select(0); |
|
| 171 |
String[] items = propertyCombo.getItems(); |
|
| 172 |
for (int i = 0; i < items.length; i++) {
|
|
| 173 |
if (items[i].equals("id")) { //$NON-NLS-1$
|
|
| 174 |
propertyCombo.select(i); |
|
| 175 |
break; |
|
| 176 |
} |
|
| 177 |
} |
|
| 178 |
selectedStructuralUnitProperty = selectedStructuralUnit |
|
| 179 |
.getOrderedProperties().get(0); |
|
| 180 |
// this.getButton(IDialogConstants.OK_ID).setEnabled(true); |
|
| 181 |
} |
|
| 182 |
} |
|
| 183 |
|
|
| 184 |
/** |
|
| 185 |
* Reload properties. |
|
| 186 |
*/ |
|
| 187 |
protected void reloadProperties() {
|
|
| 188 |
|
|
| 189 |
selectedStructuralUnit = structuralUnitsFinal.get(structuralUnitsCombo.getSelectionIndex()); |
|
| 190 |
List<StructuralUnitProperty> properties = null; |
|
| 191 |
selectedStructuralUnit = structuralUnitsFinal.get(structuralUnitsCombo.getSelectionIndex()); |
|
| 192 |
|
|
| 193 |
properties = selectedStructuralUnit.getOrderedProperties(); |
|
| 194 |
propertyCombo.removeAll(); |
|
| 195 |
for (StructuralUnitProperty property : properties) {
|
|
| 196 |
/* |
|
| 197 |
* if (!(selectedStructuralUnit.getName().equals("text") &&
|
|
| 198 |
* //$NON-NLS-1$ (property.getName().equals("id") || //$NON-NLS-1$
|
|
| 199 |
* property.getName().equals("base") || //$NON-NLS-1$
|
|
| 200 |
* property.getName().equals("project")))) //$NON-NLS-1$
|
|
| 201 |
*/ |
|
| 202 |
if (selectedStructuralUnit.getName().equals("text") && //$NON-NLS-1$
|
|
| 203 |
(property.getName().equals("project") || property.getName().equals("base"))) continue; // ignore technical properties //$NON-NLS-1$ //$NON-NLS-2$
|
|
| 204 |
propertyCombo.add(property.getName()); |
|
| 205 |
} |
|
| 206 |
if (propertyCombo.getItemCount() > 0) {
|
|
| 207 |
propertyCombo.select(0); |
|
| 208 |
String[] items = propertyCombo.getItems(); |
|
| 209 |
for (int i = 0; i < items.length; i++) {
|
|
| 210 |
if (items[i].equals("id")) { //$NON-NLS-1$
|
|
| 211 |
propertyCombo.select(i); |
|
| 212 |
break; |
|
| 213 |
} |
|
| 214 |
} |
|
| 215 |
selectedStructuralUnitProperty = selectedStructuralUnit |
|
| 216 |
.getOrderedProperties().get(0); |
|
| 217 |
// this.getButton(IDialogConstants.OK_ID).setEnabled(true); |
|
| 218 |
} |
|
| 219 |
} |
|
| 220 |
|
|
| 221 |
/** |
|
| 222 |
* Gets the structural unit. |
|
| 223 |
* |
|
| 224 |
* @return the structural unit |
|
| 225 |
*/ |
|
| 226 |
public StructuralUnit getStructuralUnit() {
|
|
| 227 |
|
|
| 228 |
return selectedStructuralUnit; |
|
| 229 |
} |
|
| 230 |
|
|
| 231 |
/** |
|
| 232 |
* Gets the structural unit property. |
|
| 233 |
* |
|
| 234 |
* @return the structural unit property |
|
| 235 |
*/ |
|
| 236 |
public StructuralUnitProperty getStructuralUnitProperty() {
|
|
| 237 |
|
|
| 238 |
return selectedStructuralUnitProperty; |
|
| 239 |
} |
|
| 240 |
|
|
| 241 |
public Partition createPartition(String name) {
|
|
| 242 |
|
|
| 243 |
Partition partition = null; |
|
| 244 |
|
|
| 245 |
// Simple mode |
|
| 246 |
|
|
| 247 |
StructuralUnit structuralUnit = this.structuralUnitsFinal.get(this.structuralUnitsCombo.getSelectionIndex()); |
|
| 248 |
StructuralUnitProperty property = structuralUnit.getProperty(this.propertyCombo.getText()); |
|
| 249 |
try {
|
|
| 250 |
// auto-naming if needed |
|
| 251 |
if (name.isEmpty()) {
|
|
| 252 |
name = property.asFullNameString(); |
|
| 253 |
} |
|
| 254 |
|
|
| 255 |
partition = new Partition(corpus); |
|
| 256 |
partition.setParameters(name, property, null); |
|
| 257 |
} |
|
| 258 |
catch (Exception e) {
|
|
| 259 |
org.txm.utils.logger.Log.printStackTrace(e); |
|
| 260 |
return null; |
|
| 261 |
} |
|
| 262 |
|
|
| 263 |
return partition; |
|
| 264 |
} |
|
| 265 |
} |
|
| 0 | 266 | |
Formats disponibles : Unified diff