Révision 3566
| TXM/trunk/org.txm.texts.core/build.properties (revision 3566) | ||
|---|---|---|
| 1 |
source.. = src/ |
|
| 2 |
output.. = bin/ |
|
| 3 |
bin.includes = META-INF/,\ |
|
| 4 |
.,\ |
|
| 5 |
plugin.xml |
|
| 0 | 6 | |
| TXM/trunk/org.txm.texts.core/plugin.xml (revision 3566) | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
<?eclipse version="3.4"?> |
|
| 3 |
<plugin> |
|
| 4 |
<extension |
|
| 5 |
point="org.eclipse.core.runtime.preferences"> |
|
| 6 |
<initializer |
|
| 7 |
class="org.txm.texts.core.TextsViewPreferences"> |
|
| 8 |
</initializer> |
|
| 9 |
</extension> |
|
| 10 |
|
|
| 11 |
</plugin> |
|
| 0 | 12 | |
| TXM/trunk/org.txm.texts.core/.settings/org.eclipse.jdt.core.prefs (revision 3566) | ||
|---|---|---|
| 1 |
eclipse.preferences.version=1 |
|
| 2 |
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled |
|
| 3 |
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 |
|
| 4 |
org.eclipse.jdt.core.compiler.compliance=1.8 |
|
| 5 |
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error |
|
| 6 |
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error |
|
| 7 |
org.eclipse.jdt.core.compiler.source=1.8 |
|
| 0 | 8 | |
| TXM/trunk/org.txm.texts.core/.classpath (revision 3566) | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
<classpath> |
|
| 3 |
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> |
|
| 4 |
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"> |
|
| 5 |
<accessrules> |
|
| 6 |
<accessrule kind="accessible" pattern="**"/> |
|
| 7 |
</accessrules> |
|
| 8 |
</classpathentry> |
|
| 9 |
<classpathentry kind="src" path="src"/> |
|
| 10 |
<classpathentry kind="output" path="bin"/> |
|
| 11 |
</classpath> |
|
| 0 | 12 | |
| TXM/trunk/org.txm.texts.core/META-INF/MANIFEST.MF (revision 3566) | ||
|---|---|---|
| 1 |
Manifest-Version: 1.0 |
|
| 2 |
Bundle-ManifestVersion: 2 |
|
| 3 |
Bundle-Name: org.txm.texts.core |
|
| 4 |
Bundle-SymbolicName: org.txm.texts.core;singleton:=true |
|
| 5 |
Bundle-Version: 1.0.0.qualifier |
|
| 6 |
Automatic-Module-Name: org.txm.texts.core |
|
| 7 |
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 |
|
| 8 |
Require-Bundle: org.txm.core;bundle-version="0.8.2";visibility:=reexport, |
|
| 9 |
org.txm.searchengine.core;bundle-version="1.0.0";visibility:=reexport, |
|
| 10 |
org.txm.utils.core;visibility:=reexport, |
|
| 11 |
org.txm.searchengine.cqp.core;visibility:=reexport |
|
| 12 |
Export-Package: org.txm.texts.core |
|
| 0 | 13 | |
| TXM/trunk/org.txm.texts.core/.project (revision 3566) | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
<projectDescription> |
|
| 3 |
<name>org.txm.texts.core</name> |
|
| 4 |
<comment></comment> |
|
| 5 |
<projects> |
|
| 6 |
</projects> |
|
| 7 |
<buildSpec> |
|
| 8 |
<buildCommand> |
|
| 9 |
<name>org.eclipse.jdt.core.javabuilder</name> |
|
| 10 |
<arguments> |
|
| 11 |
</arguments> |
|
| 12 |
</buildCommand> |
|
| 13 |
<buildCommand> |
|
| 14 |
<name>org.eclipse.pde.ManifestBuilder</name> |
|
| 15 |
<arguments> |
|
| 16 |
</arguments> |
|
| 17 |
</buildCommand> |
|
| 18 |
<buildCommand> |
|
| 19 |
<name>org.eclipse.pde.SchemaBuilder</name> |
|
| 20 |
<arguments> |
|
| 21 |
</arguments> |
|
| 22 |
</buildCommand> |
|
| 23 |
</buildSpec> |
|
| 24 |
<natures> |
|
| 25 |
<nature>org.eclipse.pde.PluginNature</nature> |
|
| 26 |
<nature>org.eclipse.jdt.core.javanature</nature> |
|
| 27 |
</natures> |
|
| 28 |
</projectDescription> |
|
| 0 | 29 | |
| TXM/trunk/org.txm.texts.core/src/org/txm/texts/core/TextsView.java (revision 3566) | ||
|---|---|---|
| 1 |
package org.txm.texts.core; |
|
| 2 |
|
|
| 3 |
import java.io.File; |
|
| 4 |
import java.io.PrintWriter; |
|
| 5 |
import java.util.ArrayList; |
|
| 6 |
import java.util.LinkedHashMap; |
|
| 7 |
import java.util.List; |
|
| 8 |
|
|
| 9 |
import org.apache.commons.lang.StringUtils; |
|
| 10 |
import org.eclipse.osgi.util.NLS; |
|
| 11 |
import org.txm.core.results.Parameter; |
|
| 12 |
import org.txm.core.results.TXMParameters; |
|
| 13 |
import org.txm.core.results.TXMResult; |
|
| 14 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
|
| 15 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 16 |
import org.txm.searchengine.cqp.corpus.Property; |
|
| 17 |
import org.txm.searchengine.cqp.corpus.StructuralUnitProperty; |
|
| 18 |
import org.txm.utils.TXMProgressMonitor; |
|
| 19 |
import org.txm.utils.logger.Log; |
|
| 20 |
|
|
| 21 |
public class TextsView extends TXMResult {
|
|
| 22 |
|
|
| 23 |
@Parameter(key = "columns") |
|
| 24 |
ArrayList<StructuralUnitProperty> pColumns; |
|
| 25 |
|
|
| 26 |
// @Parameter(key = "positiveFilters") |
|
| 27 |
// ArrayList<String> positiveFilters; |
|
| 28 |
|
|
| 29 |
@Parameter(key = "negativeFilters") |
|
| 30 |
String negativeFilters; |
|
| 31 |
|
|
| 32 |
private LinkedHashMap<String, ArrayList<String>> result; |
|
| 33 |
|
|
| 34 |
public CQPCorpus getCorpus() {
|
|
| 35 |
return (CQPCorpus)parent; |
|
| 36 |
} |
|
| 37 |
|
|
| 38 |
public TextsView(CQPCorpus corpus) {
|
|
| 39 |
|
|
| 40 |
super(corpus); |
|
| 41 |
} |
|
| 42 |
|
|
| 43 |
public TextsView(String parametersNodePath) {
|
|
| 44 |
|
|
| 45 |
super(parametersNodePath); |
|
| 46 |
} |
|
| 47 |
|
|
| 48 |
|
|
| 49 |
|
|
| 50 |
@Override |
|
| 51 |
public boolean saveParameters() throws Exception {
|
|
| 52 |
|
|
| 53 |
this.saveParameter("columns", StringUtils.join(pColumns, "\t"));
|
|
| 54 |
// this.saveParameter("positiveFilters", StringUtils.join(positiveFilters, "\t"));
|
|
| 55 |
this.saveParameter("negativeFilters", negativeFilters);
|
|
| 56 |
return true; |
|
| 57 |
} |
|
| 58 |
|
|
| 59 |
@Override |
|
| 60 |
public boolean loadParameters() throws Exception {
|
|
| 61 |
|
|
| 62 |
String v = this.getStringParameterValue("columns").toString();
|
|
| 63 |
if ("*".equals(v)) {
|
|
| 64 |
; |
|
| 65 |
this.pColumns = new ArrayList<>(getCorpus().getStructuralUnit("text").getUserDefinedOrderedProperties());
|
|
| 66 |
for (int i = 0 ; i < pColumns.size() ; i++) {
|
|
| 67 |
if (pColumns.get(i).getName().equals("id")) {
|
|
| 68 |
pColumns.remove(i); |
|
| 69 |
break; |
|
| 70 |
} |
|
| 71 |
} |
|
| 72 |
} else {
|
|
| 73 |
this.pColumns = new ArrayList(Property.stringToProperties(getCorpus(), v)); |
|
| 74 |
} |
|
| 75 |
|
|
| 76 |
v = this.getStringParameterValue("negativeFilters").toString();
|
|
| 77 |
if (v.contains("=")) {
|
|
| 78 |
this.negativeFilters = v; |
|
| 79 |
} else {
|
|
| 80 |
this.negativeFilters = ""; |
|
| 81 |
} |
|
| 82 |
|
|
| 83 |
// v = this.getStringParameterValue("positiveFilters").toString();
|
|
| 84 |
// if (v.contains("=")) {
|
|
| 85 |
// this.positiveFilters = new ArrayList<>(Arrays.asList(v.split("\t")));
|
|
| 86 |
// } else {
|
|
| 87 |
// this.positiveFilters = new ArrayList<>(); |
|
| 88 |
// } |
|
| 89 |
|
|
| 90 |
return pColumns != null; |
|
| 91 |
} |
|
| 92 |
|
|
| 93 |
@Override |
|
| 94 |
public boolean setParameters(TXMParameters parameters) throws Exception {
|
|
| 95 |
|
|
| 96 |
if (parameters.get("columns") != null) {
|
|
| 97 |
|
|
| 98 |
Object o = parameters.get("columns");
|
|
| 99 |
if (o instanceof List) {
|
|
| 100 |
pColumns = new ArrayList((List)o); |
|
| 101 |
} else {
|
|
| 102 |
String v = parameters.get("columns").toString();
|
|
| 103 |
if ("*".equals(v)) {
|
|
| 104 |
this.pColumns = new ArrayList<>(getCorpus().getStructuralUnit("text").getUserDefinedOrderedProperties());
|
|
| 105 |
} else {
|
|
| 106 |
this.pColumns = new ArrayList(Property.stringToProperties(getCorpus(), v)); |
|
| 107 |
} |
|
| 108 |
} |
|
| 109 |
return true; |
|
| 110 |
} |
|
| 111 |
return false; |
|
| 112 |
} |
|
| 113 |
|
|
| 114 |
@Override |
|
| 115 |
public String getName() {
|
|
| 116 |
|
|
| 117 |
return "Texts ("+pColumns+")";
|
|
| 118 |
} |
|
| 119 |
|
|
| 120 |
@Override |
|
| 121 |
public String getSimpleName() {
|
|
| 122 |
|
|
| 123 |
return "Texts"; |
|
| 124 |
} |
|
| 125 |
|
|
| 126 |
@Override |
|
| 127 |
public String getDetails() {
|
|
| 128 |
|
|
| 129 |
return getName(); |
|
| 130 |
} |
|
| 131 |
|
|
| 132 |
@Override |
|
| 133 |
public void clean() {
|
|
| 134 |
|
|
| 135 |
} |
|
| 136 |
|
|
| 137 |
@Override |
|
| 138 |
public boolean canCompute() throws Exception {
|
|
| 139 |
|
|
| 140 |
return pColumns != null; |
|
| 141 |
} |
|
| 142 |
|
|
| 143 |
@Override |
|
| 144 |
protected boolean _compute(TXMProgressMonitor monitor) throws Exception {
|
|
| 145 |
|
|
| 146 |
result = new LinkedHashMap<String, ArrayList<String>>(); |
|
| 147 |
|
|
| 148 |
// preset arrays |
|
| 149 |
String[] texts = getCorpus().getCorpusTextIdsList(); |
|
| 150 |
for (String t : texts) {
|
|
| 151 |
|
|
| 152 |
ArrayList<String> values = new ArrayList<String>(); |
|
| 153 |
result.put(t, values); |
|
| 154 |
|
|
| 155 |
if (getCorpus().getProject().getText(t) == null) {
|
|
| 156 |
Log.warning(NLS.bind("The {0} Corpus has no text named ''{1}''.", getCorpus(), t));
|
|
| 157 |
return false; |
|
| 158 |
} |
|
| 159 |
} |
|
| 160 |
|
|
| 161 |
// optimization: get values property per property then set the Text property value arrays |
|
| 162 |
int positions [] = new int[texts.length]; |
|
| 163 |
for (int i = 0 ; i < texts.length ; i++) {
|
|
| 164 |
positions[i] = i; |
|
| 165 |
} |
|
| 166 |
for (int icol = 0 ; icol < pColumns.size() ; icol++) {
|
|
| 167 |
StructuralUnitProperty col = pColumns.get(icol); |
|
| 168 |
|
|
| 169 |
String[] values = CQPSearchEngine.getCqiClient().struc2Str(col.getQualifiedName(), positions); |
|
| 170 |
|
|
| 171 |
for (int i = 0 ; i < texts.length ; i++) {
|
|
| 172 |
result.get(texts[i]).add( values[i]); |
|
| 173 |
} |
|
| 174 |
} |
|
| 175 |
|
|
| 176 |
if (negativeFilters.length() > 0 && pColumns.size() > 0) {
|
|
| 177 |
|
|
| 178 |
ArrayList<String> columnNames = new ArrayList<>(pColumns.size()); |
|
| 179 |
for (StructuralUnitProperty p : pColumns) columnNames.add(p.getName()); |
|
| 180 |
|
|
| 181 |
String[] filters = negativeFilters.split(";");
|
|
| 182 |
|
|
| 183 |
ArrayList<String> keys = new ArrayList<>(result.keySet()); |
|
| 184 |
for (String text : keys) {
|
|
| 185 |
|
|
| 186 |
for (String negativeFilter : filters) {
|
|
| 187 |
String[] split = negativeFilter.split("=", 2);
|
|
| 188 |
if (split.length == 2 |
|
| 189 |
&& columnNames.contains(split[0]) |
|
| 190 |
&& result.get(text).get(columnNames.indexOf(split[0])).matches(split[1])) {
|
|
| 191 |
// remove this line |
|
| 192 |
result.remove(text); |
|
| 193 |
break; |
|
| 194 |
} |
|
| 195 |
} |
|
| 196 |
} |
|
| 197 |
} |
|
| 198 |
|
|
| 199 |
return true; |
|
| 200 |
} |
|
| 201 |
|
|
| 202 |
@Override |
|
| 203 |
protected boolean _toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
|
|
| 204 |
|
|
| 205 |
PrintWriter writer = org.txm.utils.io.IOUtils.getWriter(outfile, encoding); |
|
| 206 |
|
|
| 207 |
writer.println("text"+colseparator+StringUtils.join(pColumns, colseparator));
|
|
| 208 |
|
|
| 209 |
for (String text : result.keySet()) {
|
|
| 210 |
writer.println(text+colseparator+StringUtils.join(result.get(text), colseparator)); |
|
| 211 |
} |
|
| 212 |
|
|
| 213 |
writer.close(); |
|
| 214 |
return false; |
|
| 215 |
} |
|
| 216 |
|
|
| 217 |
@Override |
|
| 218 |
public String getResultType() {
|
|
| 219 |
return "TextView"; |
|
| 220 |
} |
|
| 221 |
|
|
| 222 |
public LinkedHashMap<String, ArrayList<String>> getLines() {
|
|
| 223 |
return result; |
|
| 224 |
} |
|
| 225 |
|
|
| 226 |
public List<StructuralUnitProperty> getColumns() {
|
|
| 227 |
|
|
| 228 |
return pColumns; |
|
| 229 |
} |
|
| 230 |
|
|
| 231 |
} |
|
| 0 | 232 | |
| TXM/trunk/org.txm.texts.core/src/org/txm/texts/core/TextsViewPreferences.java (revision 3566) | ||
|---|---|---|
| 1 |
package org.txm.texts.core; |
|
| 2 |
|
|
| 3 |
import org.osgi.service.prefs.Preferences; |
|
| 4 |
import org.txm.core.preferences.TXMPreferences; |
|
| 5 |
|
|
| 6 |
public class TextsViewPreferences extends TXMPreferences {
|
|
| 7 |
|
|
| 8 |
public static final String CRITERII = "criterii"; |
|
| 9 |
|
|
| 10 |
public static final String ALLMUSTMATCH = "allmustmatch"; |
|
| 11 |
|
|
| 12 |
public static final String ALLPROPERTIESMUSTMATCH = "allmustmatch"; |
|
| 13 |
|
|
| 14 |
/** |
|
| 15 |
* Gets the instance. |
|
| 16 |
* |
|
| 17 |
* @return the instance |
|
| 18 |
*/ |
|
| 19 |
public static TXMPreferences getInstance() {
|
|
| 20 |
if (!TXMPreferences.instances.containsKey(TextsViewPreferences.class)) {
|
|
| 21 |
new TextsViewPreferences(); |
|
| 22 |
} |
|
| 23 |
return TXMPreferences.instances.get(TextsViewPreferences.class); |
|
| 24 |
} |
|
| 25 |
|
|
| 26 |
@Override |
|
| 27 |
public void initializeDefaultPreferences() {
|
|
| 28 |
super.initializeDefaultPreferences(); |
|
| 29 |
|
|
| 30 |
Preferences preferences = this.getDefaultPreferencesNode(); |
|
| 31 |
|
|
| 32 |
preferences.put("columns", "*");
|
|
| 33 |
} |
|
| 34 |
} |
|
| 0 | 35 | |
| TXM/trunk/org.txm.texts.core/src/org/txm/texts/core/TextsSelection.java (revision 3566) | ||
|---|---|---|
| 1 |
package org.txm.texts.core; |
|
| 2 |
|
|
| 3 |
import java.util.ArrayList; |
|
| 4 |
import java.util.HashMap; |
|
| 5 |
|
|
| 6 |
import org.apache.commons.lang.StringUtils; |
|
| 7 |
import org.txm.core.results.Parameter; |
|
| 8 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 9 |
import org.txm.searchengine.cqp.corpus.Subcorpus; |
|
| 10 |
import org.txm.searchengine.cqp.corpus.query.CQLQuery; |
|
| 11 |
import org.txm.utils.TXMProgressMonitor; |
|
| 12 |
|
|
| 13 |
public class TextsSelection extends Subcorpus {
|
|
| 14 |
|
|
| 15 |
@Parameter(key = TextsViewPreferences.CRITERII) |
|
| 16 |
HashMap<String, ArrayList<String>> criterii; |
|
| 17 |
|
|
| 18 |
@Parameter(key = TextsViewPreferences.ALLPROPERTIESMUSTMATCH) |
|
| 19 |
Boolean allPropertiesMustMatch; |
|
| 20 |
|
|
| 21 |
@Parameter(key = TextsViewPreferences.ALLMUSTMATCH) |
|
| 22 |
HashMap<String, Boolean> allMustMatch; |
|
| 23 |
|
|
| 24 |
public TextsSelection(CQPCorpus corpus) {
|
|
| 25 |
|
|
| 26 |
super(corpus); |
|
| 27 |
} |
|
| 28 |
|
|
| 29 |
/** |
|
| 30 |
* |
|
| 31 |
* @param parametersNodePath |
|
| 32 |
*/ |
|
| 33 |
public TextsSelection(String parametersNodePath) {
|
|
| 34 |
super(parametersNodePath); |
|
| 35 |
} |
|
| 36 |
|
|
| 37 |
public boolean canCompute() {
|
|
| 38 |
return criterii.size() > 0; |
|
| 39 |
} |
|
| 40 |
|
|
| 41 |
public boolean __compute(TXMProgressMonitor monitor) throws Exception {
|
|
| 42 |
|
|
| 43 |
StringBuilder buffer = new StringBuilder(); |
|
| 44 |
buffer.append("<text> [");
|
|
| 45 |
int n = 0; |
|
| 46 |
for (String textprop : criterii.keySet()) {
|
|
| 47 |
|
|
| 48 |
String operator = " && "; |
|
| 49 |
if (allPropertiesMustMatch) operator = " || "; |
|
| 50 |
|
|
| 51 |
if (n > 0) buffer.append(operator); |
|
| 52 |
|
|
| 53 |
String matchOperator = "&"; |
|
| 54 |
if (!allMustMatch.get(textprop)) matchOperator = "|"; |
|
| 55 |
|
|
| 56 |
buffer.append("_.text_"+textprop+"=\""+StringUtils.join(criterii.get(textprop), matchOperator)+"\"");
|
|
| 57 |
} |
|
| 58 |
buffer.append("] expand to text");
|
|
| 59 |
|
|
| 60 |
this.pQuery = new CQLQuery(buffer.toString()); |
|
| 61 |
|
|
| 62 |
return super.__compute(monitor); |
|
| 63 |
} |
|
| 64 |
} |
|
| 0 | 65 | |
| TXM/trunk/org.txm.texts.rcp/.project (revision 3566) | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
<projectDescription> |
|
| 3 |
<name>org.txm.texts.rcp</name> |
|
| 4 |
<comment></comment> |
|
| 5 |
<projects> |
|
| 6 |
</projects> |
|
| 7 |
<buildSpec> |
|
| 8 |
<buildCommand> |
|
| 9 |
<name>org.eclipse.jdt.core.javabuilder</name> |
|
| 10 |
<arguments> |
|
| 11 |
</arguments> |
|
| 12 |
</buildCommand> |
|
| 13 |
<buildCommand> |
|
| 14 |
<name>org.eclipse.pde.ManifestBuilder</name> |
|
| 15 |
<arguments> |
|
| 16 |
</arguments> |
|
| 17 |
</buildCommand> |
|
| 18 |
<buildCommand> |
|
| 19 |
<name>org.eclipse.pde.SchemaBuilder</name> |
|
| 20 |
<arguments> |
|
| 21 |
</arguments> |
|
| 22 |
</buildCommand> |
|
| 23 |
</buildSpec> |
|
| 24 |
<natures> |
|
| 25 |
<nature>org.eclipse.pde.PluginNature</nature> |
|
| 26 |
<nature>org.eclipse.jdt.core.javanature</nature> |
|
| 27 |
</natures> |
|
| 28 |
</projectDescription> |
|
| 0 | 29 | |
| TXM/trunk/org.txm.texts.rcp/src/org/txm/texts/rcp/TextViewColumnLabelProvider.java (revision 3566) | ||
|---|---|---|
| 1 |
package org.txm.texts.rcp; |
|
| 2 |
|
|
| 3 |
import java.util.List; |
|
| 4 |
import java.util.Map; |
|
| 5 |
|
|
| 6 |
import org.eclipse.jface.viewers.ColumnLabelProvider; |
|
| 7 |
import org.txm.objects.Text; |
|
| 8 |
|
|
| 9 |
|
|
| 10 |
public class TextViewColumnLabelProvider extends ColumnLabelProvider {
|
|
| 11 |
|
|
| 12 |
int n; |
|
| 13 |
TextsViewEditor editor; |
|
| 14 |
|
|
| 15 |
public TextViewColumnLabelProvider(TextsViewEditor editor, int n) {
|
|
| 16 |
this.n = n; |
|
| 17 |
this.editor = editor; |
|
| 18 |
} |
|
| 19 |
|
|
| 20 |
@Override |
|
| 21 |
public String getText(Object element) {
|
|
| 22 |
|
|
| 23 |
Text text = (Text)element; |
|
| 24 |
return editor.getResult().getLines().get(text.getName()).get(n); |
|
| 25 |
} |
|
| 26 |
} |
|
| 0 | 27 | |
| TXM/trunk/org.txm.texts.rcp/src/org/txm/texts/rcp/TextsViewEditor.java (revision 3566) | ||
|---|---|---|
| 1 |
package org.txm.texts.rcp; |
|
| 2 |
|
|
| 3 |
import java.util.ArrayList; |
|
| 4 |
import java.util.LinkedHashMap; |
|
| 5 |
import java.util.List; |
|
| 6 |
import java.util.Map; |
|
| 7 |
|
|
| 8 |
import org.eclipse.jface.viewers.ColumnLabelProvider; |
|
| 9 |
import org.eclipse.jface.viewers.DoubleClickEvent; |
|
| 10 |
import org.eclipse.jface.viewers.IDoubleClickListener; |
|
| 11 |
import org.eclipse.jface.viewers.ISelection; |
|
| 12 |
import org.eclipse.jface.viewers.IStructuredContentProvider; |
|
| 13 |
import org.eclipse.jface.viewers.StructuredSelection; |
|
| 14 |
import org.eclipse.jface.viewers.TableViewer; |
|
| 15 |
import org.eclipse.jface.viewers.TableViewerColumn; |
|
| 16 |
import org.eclipse.jface.viewers.ViewerComparator; |
|
| 17 |
import org.eclipse.swt.SWT; |
|
| 18 |
import org.eclipse.swt.graphics.Image; |
|
| 19 |
import org.eclipse.swt.layout.GridData; |
|
| 20 |
import org.eclipse.swt.layout.GridLayout; |
|
| 21 |
import org.eclipse.swt.widgets.Label; |
|
| 22 |
import org.eclipse.swt.widgets.TableColumn; |
|
| 23 |
import org.txm.core.results.Parameter; |
|
| 24 |
import org.txm.edition.rcp.handlers.OpenEdition; |
|
| 25 |
import org.txm.objects.Text; |
|
| 26 |
import org.txm.rcp.IImageKeys; |
|
| 27 |
import org.txm.rcp.editors.TXMEditor; |
|
| 28 |
import org.txm.rcp.editors.TableKeyListener; |
|
| 29 |
import org.txm.rcp.editors.listeners.ComputeSelectionListener; |
|
| 30 |
import org.txm.rcp.swt.widget.PropertiesSelector; |
|
| 31 |
import org.txm.searchengine.cqp.corpus.StructuralUnitProperty; |
|
| 32 |
import org.txm.texts.core.TextsView; |
|
| 33 |
|
|
| 34 |
|
|
| 35 |
public class TextsViewEditor extends TXMEditor<TextsView> {
|
|
| 36 |
|
|
| 37 |
@Parameter(key = "columns") |
|
| 38 |
PropertiesSelector<StructuralUnitProperty> propertiesSelector; |
|
| 39 |
|
|
| 40 |
@Parameter(key = "negativeFilters") |
|
| 41 |
org.eclipse.swt.widgets.Text negativeFiltersText; |
|
| 42 |
|
|
| 43 |
TableViewer viewer; |
|
| 44 |
// HashMap<String, TableViewerColumn> columns = new HashMap<String, TableViewerColumn>(); |
|
| 45 |
|
|
| 46 |
@Override |
|
| 47 |
public void _createPartControl() throws Exception {
|
|
| 48 |
|
|
| 49 |
this.getParent().setLayout(new GridLayout(1, true)); |
|
| 50 |
|
|
| 51 |
this.getMainParametersComposite().getLayout().numColumns = 10; |
|
| 52 |
|
|
| 53 |
propertiesSelector = new PropertiesSelector<>(this.getMainParametersComposite()); |
|
| 54 |
ArrayList<StructuralUnitProperty> properties = new ArrayList<>(getResult().getCorpus().getStructuralUnitProperties("text"));
|
|
| 55 |
for (int i = 0 ; i < properties.size() ; i++) {
|
|
| 56 |
if (properties.get(i).getName().equals("id")) {
|
|
| 57 |
properties.remove(i); |
|
| 58 |
break; |
|
| 59 |
} |
|
| 60 |
} |
|
| 61 |
propertiesSelector.setProperties(properties); |
|
| 62 |
ComputeSelectionListener computeSelectionListener = new ComputeSelectionListener(this); |
|
| 63 |
propertiesSelector.addSelectionListener(computeSelectionListener); |
|
| 64 |
|
|
| 65 |
new Label(this.getMainParametersComposite(), SWT.NONE).setText("Negative filters (p1=v1;p2=v2)");
|
|
| 66 |
|
|
| 67 |
negativeFiltersText = new org.eclipse.swt.widgets.Text(this.getMainParametersComposite(), SWT.BORDER); |
|
| 68 |
negativeFiltersText.addSelectionListener(computeSelectionListener); |
|
| 69 |
GridData gdata = new GridData(GridData.FILL, GridData.CENTER, true, false); |
|
| 70 |
gdata.minimumWidth = 300; |
|
| 71 |
negativeFiltersText.setLayoutData(gdata); |
|
| 72 |
|
|
| 73 |
viewer = new TableViewer(this.getResultArea(), SWT.NONE); |
|
| 74 |
viewer.getTable().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); |
|
| 75 |
viewer.getTable().setHeaderVisible(true); |
|
| 76 |
viewer.getTable().setLinesVisible(true); |
|
| 77 |
viewer.getTable().addKeyListener(new TableKeyListener(viewer)); |
|
| 78 |
|
|
| 79 |
viewer.setContentProvider(new IStructuredContentProvider() {
|
|
| 80 |
|
|
| 81 |
@SuppressWarnings("rawtypes")
|
|
| 82 |
@Override |
|
| 83 |
public Object[] getElements(Object inputElement) {
|
|
| 84 |
|
|
| 85 |
if (inputElement instanceof List) {
|
|
| 86 |
return ((List)inputElement).toArray(); |
|
| 87 |
} |
|
| 88 |
|
|
| 89 |
return null; |
|
| 90 |
} |
|
| 91 |
|
|
| 92 |
}); |
|
| 93 |
|
|
| 94 |
viewer.setComparator(new ViewerComparator()); |
|
| 95 |
|
|
| 96 |
} |
|
| 97 |
|
|
| 98 |
@Override |
|
| 99 |
public void updateResultFromEditor() {
|
|
| 100 |
|
|
| 101 |
} |
|
| 102 |
|
|
| 103 |
@Override |
|
| 104 |
public void updateEditorFromResult(boolean update) throws Exception {
|
|
| 105 |
|
|
| 106 |
|
|
| 107 |
TextsView tv = getResult(); |
|
| 108 |
int currentDisplayedColumns = viewer.getTable().getColumns().length; |
|
| 109 |
int numberOfColumnsToDisplay = (tv.getColumns().size() + 3); |
|
| 110 |
if ( currentDisplayedColumns == 0 || |
|
| 111 |
currentDisplayedColumns != numberOfColumnsToDisplay) {
|
|
| 112 |
|
|
| 113 |
if (viewer.getTable().getColumns().length > 0) { // get rid of current columns
|
|
| 114 |
for (TableColumn column : viewer.getTable().getColumns()) {
|
|
| 115 |
column.dispose(); |
|
| 116 |
} |
|
| 117 |
} |
|
| 118 |
|
|
| 119 |
TableViewerColumn c = new TableViewerColumn(viewer, SWT.NONE); |
|
| 120 |
TableColumn textColumn = c.getColumn(); |
|
| 121 |
textColumn.setText("Text");
|
|
| 122 |
textColumn.setToolTipText("Text");
|
|
| 123 |
textColumn.setWidth(200); |
|
| 124 |
c.setLabelProvider(new ColumnLabelProvider() {
|
|
| 125 |
@Override |
|
| 126 |
public String getText(Object element) {
|
|
| 127 |
Text text = (Text)element; |
|
| 128 |
return text.getName(); |
|
| 129 |
} |
|
| 130 |
}); |
|
| 131 |
|
|
| 132 |
c = new TableViewerColumn(viewer, SWT.NONE); |
|
| 133 |
TableColumn editionColumn = c.getColumn(); |
|
| 134 |
editionColumn.setText("Edition");
|
|
| 135 |
editionColumn.setToolTipText("Edition");
|
|
| 136 |
editionColumn.setWidth(65); |
|
| 137 |
c.setLabelProvider(new ColumnLabelProvider() {
|
|
| 138 |
@Override |
|
| 139 |
public Image getImage(Object element) {
|
|
| 140 |
Text text = (Text)element; |
|
| 141 |
TextsViewEditor.this.getResult().getLines().get(text.getName()); |
|
| 142 |
if (text.getEditions().size() > 0) {
|
|
| 143 |
return IImageKeys.getImage(IImageKeys.EDITION); |
|
| 144 |
} else {
|
|
| 145 |
return null; |
|
| 146 |
} |
|
| 147 |
} |
|
| 148 |
@Override |
|
| 149 |
public String getText(Object element) {
|
|
| 150 |
return null; |
|
| 151 |
} |
|
| 152 |
}); |
|
| 153 |
|
|
| 154 |
c = new TableViewerColumn(viewer, SWT.NONE); |
|
| 155 |
TableColumn separatorColumn = c.getColumn(); |
|
| 156 |
separatorColumn.setText(" ");
|
|
| 157 |
separatorColumn.setWidth(2); |
|
| 158 |
c.getColumn().setResizable(false); |
|
| 159 |
c.setLabelProvider(new ColumnLabelProvider() {
|
|
| 160 |
@Override |
|
| 161 |
public String getText(Object element) {
|
|
| 162 |
return ""; |
|
| 163 |
} |
|
| 164 |
}); |
|
| 165 |
|
|
| 166 |
int nColumn = 0; |
|
| 167 |
for (StructuralUnitProperty col : this.getResult().getColumns()) {
|
|
| 168 |
c = new TableViewerColumn(viewer, SWT.NONE); |
|
| 169 |
TableColumn newColumn = c.getColumn(); |
|
| 170 |
newColumn.setText(col.getName()); |
|
| 171 |
newColumn.setData(nColumn); |
|
| 172 |
newColumn.setToolTipText(col.getFullName()); |
|
| 173 |
newColumn.setWidth(100); |
|
| 174 |
c.setLabelProvider(new TextViewColumnLabelProvider(this, nColumn)); |
|
| 175 |
nColumn++; |
|
| 176 |
} |
|
| 177 |
|
|
| 178 |
} |
|
| 179 |
// |
|
| 180 |
ArrayList<Text> texts = new ArrayList<>(); |
|
| 181 |
for (Text text : getResult().getCorpus().getProject().getTexts()) {
|
|
| 182 |
if (this.getResult().getLines().containsKey(text.getName())) {
|
|
| 183 |
texts.add(text); |
|
| 184 |
} |
|
| 185 |
} |
|
| 186 |
viewer.setInput(texts); |
|
| 187 |
|
|
| 188 |
viewer.addDoubleClickListener(new IDoubleClickListener() {
|
|
| 189 |
|
|
| 190 |
@Override |
|
| 191 |
public void doubleClick(DoubleClickEvent event) {
|
|
| 192 |
ISelection sel = viewer.getSelection(); |
|
| 193 |
StructuredSelection ssel = (StructuredSelection)sel; |
|
| 194 |
Object o = ssel.getFirstElement(); |
|
| 195 |
if (o != null && o instanceof Text) {
|
|
| 196 |
OpenEdition.openEdition(getResult().getCorpus(), new String[] {getResult().getProject().getDefaultEditionName()}, ((Text)o).getName());
|
|
| 197 |
} |
|
| 198 |
} |
|
| 199 |
}); |
|
| 200 |
} |
|
| 201 |
} |
|
| 0 | 202 | |
| TXM/trunk/org.txm.texts.rcp/src/org/txm/texts/rcp/TextsViewAdapterFactory.java (revision 3566) | ||
|---|---|---|
| 1 |
// Copyright © 2010-2020 ENS de Lyon., University of Franche-Comté |
|
| 2 |
package org.txm.texts.rcp; |
|
| 3 |
|
|
| 4 |
import org.eclipse.jface.resource.ImageDescriptor; |
|
| 5 |
import org.eclipse.ui.plugin.AbstractUIPlugin; |
|
| 6 |
import org.osgi.framework.FrameworkUtil; |
|
| 7 |
import org.txm.rcp.adapters.TXMResultAdapter; |
|
| 8 |
import org.txm.rcp.adapters.TXMResultAdapterFactory; |
|
| 9 |
import org.txm.texts.core.TextsView; |
|
| 10 |
|
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* A factory for creating Adapter objects. |
|
| 14 |
* |
|
| 15 |
* @author mdecorde |
|
| 16 |
*/ |
|
| 17 |
public class TextsViewAdapterFactory extends TXMResultAdapterFactory {
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
public static final ImageDescriptor ICON = AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(TextsViewAdapterFactory.class).getSymbolicName(), |
|
| 21 |
"platform:/plugin/org.txm.rcp/icons/objects/books.png"); //$NON-NLS-1$ //$NON-NLS-2$ |
|
| 22 |
|
|
| 23 |
@Override |
|
| 24 |
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
|
|
| 25 |
if (this.canAdapt(adapterType) && adaptableObject instanceof TextsView) {
|
|
| 26 |
return adapterType.cast(new TXMResultAdapter() {
|
|
| 27 |
|
|
| 28 |
@Override |
|
| 29 |
public ImageDescriptor getImageDescriptor(Object object) {
|
|
| 30 |
return ICON; |
|
| 31 |
} |
|
| 32 |
}); |
|
| 33 |
} |
|
| 34 |
return null; |
|
| 35 |
} |
|
| 36 |
} |
|
| 0 | 37 | |
| TXM/trunk/org.txm.texts.rcp/src/org/txm/texts/rcp/ComputeTextView.java (revision 3566) | ||
|---|---|---|
| 1 |
package org.txm.texts.rcp; |
|
| 2 |
|
|
| 3 |
import org.eclipse.core.commands.ExecutionEvent; |
|
| 4 |
import org.eclipse.core.commands.ExecutionException; |
|
| 5 |
import org.txm.core.preferences.TXMPreferences; |
|
| 6 |
import org.txm.rcp.editors.TXMEditor; |
|
| 7 |
import org.txm.rcp.handlers.BaseAbstractHandler; |
|
| 8 |
import org.txm.searchengine.cqp.corpus.CQPCorpus; |
|
| 9 |
import org.txm.searchengine.cqp.corpus.MainCorpus; |
|
| 10 |
import org.txm.texts.core.TextsView; |
|
| 11 |
|
|
| 12 |
public class ComputeTextView extends BaseAbstractHandler {
|
|
| 13 |
|
|
| 14 |
@Override |
|
| 15 |
public Object execute(ExecutionEvent event) throws ExecutionException {
|
|
| 16 |
|
|
| 17 |
if (!this.checkCorpusEngine()) {
|
|
| 18 |
return false; |
|
| 19 |
} |
|
| 20 |
|
|
| 21 |
TextsView concordance = null; |
|
| 22 |
|
|
| 23 |
// From link: creating from parameter node |
|
| 24 |
String parametersNodePath = event.getParameter(TXMPreferences.RESULT_PARAMETERS_NODE_PATH); |
|
| 25 |
if (parametersNodePath != null && !parametersNodePath.isEmpty()) {
|
|
| 26 |
concordance = new TextsView(parametersNodePath); |
|
| 27 |
} |
|
| 28 |
// From view result node |
|
| 29 |
else {
|
|
| 30 |
Object selection = this.getCorporaViewSelectedObject(event); |
|
| 31 |
|
|
| 32 |
// Creating from Corpus |
|
| 33 |
if (selection instanceof CQPCorpus) {
|
|
| 34 |
CQPCorpus corpus = (CQPCorpus) selection; |
|
| 35 |
concordance = new TextsView(corpus); |
|
| 36 |
} |
|
| 37 |
// Reopening existing result |
|
| 38 |
else if (selection instanceof TextsView) {
|
|
| 39 |
concordance = (TextsView) selection; |
|
| 40 |
} |
|
| 41 |
// Error |
|
| 42 |
else {
|
|
| 43 |
return this.logCanNotExecuteCommand(selection); |
|
| 44 |
} |
|
| 45 |
} |
|
| 46 |
|
|
| 47 |
openEditor(concordance); |
|
| 48 |
return null; |
|
| 49 |
} |
|
| 50 |
|
|
| 51 |
public static TXMEditor<TextsView> openEditor(TextsView view) {
|
|
| 52 |
return TXMEditor.openEditor(view, TextsViewEditor.class.getName()); |
|
| 53 |
} |
|
| 54 |
|
|
| 55 |
} |
|
| 0 | 56 | |
| TXM/trunk/org.txm.texts.rcp/build.properties (revision 3566) | ||
|---|---|---|
| 1 |
source.. = src/ |
|
| 2 |
output.. = bin/ |
|
| 3 |
bin.includes = META-INF/,\ |
|
| 4 |
.,\ |
|
| 5 |
plugin.xml,\ |
|
| 6 |
OSGI-INF/l10n/bundle.properties |
|
| 0 | 7 | |
| TXM/trunk/org.txm.texts.rcp/OSGI-INF/l10n/bundle.properties (revision 3566) | ||
|---|---|---|
| 1 |
#Properties file for org.txm.texts.rcp |
|
| 2 |
command.name = Texts |
|
| 3 |
editor.name = Texts |
|
| 0 | 4 | |
| TXM/trunk/org.txm.texts.rcp/plugin.xml (revision 3566) | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
<?eclipse version="3.4"?> |
|
| 3 |
<plugin> |
|
| 4 |
<extension |
|
| 5 |
point="org.eclipse.ui.commands"> |
|
| 6 |
<command |
|
| 7 |
defaultHandler="org.txm.texts.rcp.ComputeTextView" |
|
| 8 |
id="org.txm.texts.rcp.ComputeTextView" |
|
| 9 |
name="%command.name" |
|
| 10 |
returnTypeId="org.txm.texts.core.TextsView"> |
|
| 11 |
</command> |
|
| 12 |
</extension> |
|
| 13 |
<extension |
|
| 14 |
point="org.eclipse.ui.menus"> |
|
| 15 |
<menuContribution |
|
| 16 |
locationURI="menu:menu.corpus"> |
|
| 17 |
<command |
|
| 18 |
commandId="org.txm.texts.rcp.ComputeTextView" |
|
| 19 |
icon="platform:/plugin/org.txm.rcp/icons/objects/books.png" |
|
| 20 |
style="push" |
|
| 21 |
tooltip="%command.name"> |
|
| 22 |
<visibleWhen |
|
| 23 |
checkEnabled="false"> |
|
| 24 |
<or> |
|
| 25 |
<reference |
|
| 26 |
definitionId="OneCorpusSelected"> |
|
| 27 |
</reference> |
|
| 28 |
</or> |
|
| 29 |
</visibleWhen> |
|
| 30 |
</command> |
|
| 31 |
</menuContribution> |
|
| 32 |
<menuContribution |
|
| 33 |
allPopups="false" |
|
| 34 |
locationURI="toolbar:org.txm.rcp.toolbarcorpus"> |
|
| 35 |
<command |
|
| 36 |
commandId="org.txm.texts.rcp.ComputeTextView" |
|
| 37 |
icon="platform:/plugin/org.txm.rcp/icons/objects/books.png" |
|
| 38 |
style="push" |
|
| 39 |
tooltip="%command.name"> |
|
| 40 |
<visibleWhen |
|
| 41 |
checkEnabled="false"> |
|
| 42 |
<or> |
|
| 43 |
<reference |
|
| 44 |
definitionId="OneCorpusSelected"> |
|
| 45 |
</reference> |
|
| 46 |
</or> |
|
| 47 |
</visibleWhen> |
|
| 48 |
</command> |
|
| 49 |
</menuContribution> |
|
| 50 |
<menuContribution |
|
| 51 |
allPopups="false" |
|
| 52 |
locationURI="popup:org.txm.rcp.views.corpora.CorporaView"> |
|
| 53 |
<command |
|
| 54 |
commandId="org.txm.texts.rcp.ComputeTextView" |
|
| 55 |
icon="platform:/plugin/org.txm.rcp/icons/objects/books.png" |
|
| 56 |
style="push" |
|
| 57 |
tooltip="%command.name"> |
|
| 58 |
<visibleWhen |
|
| 59 |
checkEnabled="false"> |
|
| 60 |
<or> |
|
| 61 |
<reference |
|
| 62 |
definitionId="OneCorpusSelected"> |
|
| 63 |
</reference> |
|
| 64 |
</or> |
|
| 65 |
</visibleWhen> |
|
| 66 |
</command> |
|
| 67 |
</menuContribution> |
|
| 68 |
</extension> |
|
| 69 |
<extension |
|
| 70 |
point="org.eclipse.ui.editors"> |
|
| 71 |
<editor |
|
| 72 |
class="org.txm.texts.rcp.TextsViewEditor" |
|
| 73 |
default="false" |
|
| 74 |
icon="platform:/plugin/org.txm.rcp/icons/objects/books.png" |
|
| 75 |
id="org.txm.texts.rcp.TextsViewEditor" |
|
| 76 |
name="%editor.name"> |
|
| 77 |
</editor> |
|
| 78 |
</extension> |
|
| 79 |
<extension |
|
| 80 |
point="org.eclipse.core.runtime.adapters"> |
|
| 81 |
<factory |
|
| 82 |
adaptableType="org.txm.texts.core.TextsView" |
|
| 83 |
class="org.txm.texts.rcp.TextsViewAdapterFactory"> |
|
| 84 |
<adapter |
|
| 85 |
type="org.eclipse.ui.model.IWorkbenchAdapter"> |
|
| 86 |
</adapter> |
|
| 87 |
</factory> |
|
| 88 |
</extension> |
|
| 89 |
|
|
| 90 |
</plugin> |
|
| 0 | 91 | |
| TXM/trunk/org.txm.texts.rcp/.settings/org.eclipse.jdt.core.prefs (revision 3566) | ||
|---|---|---|
| 1 |
eclipse.preferences.version=1 |
|
| 2 |
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled |
|
| 3 |
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 |
|
| 4 |
org.eclipse.jdt.core.compiler.compliance=1.8 |
|
| 5 |
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error |
|
| 6 |
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error |
|
| 7 |
org.eclipse.jdt.core.compiler.source=1.8 |
|
| 0 | 8 | |
| TXM/trunk/org.txm.texts.rcp/.classpath (revision 3566) | ||
|---|---|---|
| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
| 2 |
<classpath> |
|
| 3 |
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> |
|
| 4 |
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"> |
|
| 5 |
<accessrules> |
|
| 6 |
<accessrule kind="accessible" pattern="**"/> |
|
| 7 |
</accessrules> |
|
| 8 |
</classpathentry> |
|
| 9 |
<classpathentry kind="src" path="src"/> |
|
| 10 |
<classpathentry kind="output" path="bin"/> |
|
| 11 |
</classpath> |
|
| 0 | 12 | |
| TXM/trunk/org.txm.texts.rcp/META-INF/MANIFEST.MF (revision 3566) | ||
|---|---|---|
| 1 |
Manifest-Version: 1.0 |
|
| 2 |
Bundle-ManifestVersion: 2 |
|
| 3 |
Bundle-Name: org.txm.texts.rcp |
|
| 4 |
Bundle-SymbolicName: org.txm.texts.rcp;singleton:=true |
|
| 5 |
Bundle-Version: 1.0.0.qualifier |
|
| 6 |
Automatic-Module-Name: org.txm.texts.rcp |
|
| 7 |
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 |
|
| 8 |
Require-Bundle: org.txm.rcp;bundle-version="0.8.2", |
|
| 9 |
org.txm.texts.core;bundle-version="1.0.0", |
|
| 10 |
org.txm.edition.rcp;bundle-version="1.0.0" |
|
| 11 |
Export-Package: org.txm.texts.rcp |
|
| 0 | 12 | |
Formats disponibles : Unified diff