diff --git a/3rd-party/appbundler-1.0.jar b/3rd-party/appbundler-1.0.jar
deleted file mode 100644
index ef30f1cb4..000000000
Binary files a/3rd-party/appbundler-1.0.jar and /dev/null differ
diff --git a/README.md b/README.md
index c4771bde1..8723fef50 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ If you have cloned this repository to your computer, you can run OpenRefine with
* `./refine` on Mac OS and Linux
* `refine.bat` on Windows
-This requires JDK 8 and Apache Ant.
+This requires JDK 8 and Apache Maven.
Documentation and Videos
-------------------------
diff --git a/extensions/database/module/langs/translation-fr.json b/extensions/database/module/langs/translation-fr.json
index 52ce10deb..35a0e03f4 100644
--- a/extensions/database/module/langs/translation-fr.json
+++ b/extensions/database/module/langs/translation-fr.json
@@ -13,7 +13,7 @@
"alert-connection-name": "Vous devez spécifier un nom de connexion",
"alert-initial-database": "Vous devez spécifier une base de données initiale",
"alert-query": "Vous devez spécifier une requête valide",
- "alert-invalid-query-keyword": "La requête ne peut pas contenir un mot clé dédié à la manipulation de données :",
+ "alert-invalid-query-keyword": "La requête ne peut pas contenir ce mot clé destiné à manipuler la base de données :",
"alert-invalid-query-select": "La requête doit débuter par le mot-clé SELECT",
"form-validation-failure": "Le nouveau formulaire de connexion est invalide!",
"alert-connection-edit": "La connexion a été éditée avec succès",
diff --git a/extensions/database/module/langs/translation-nb_NO.json b/extensions/database/module/langs/translation-nb_NO.json
new file mode 100644
index 000000000..cb1c42093
--- /dev/null
+++ b/extensions/database/module/langs/translation-nb_NO.json
@@ -0,0 +1,51 @@
+{
+ "database-import": {
+ "title": "Databasetjenere",
+ "preparing": "Forbereder resultat …",
+ "checking": "Validerer spørring …",
+ "creating": "Oppretter prosjekt …"
+ },
+ "database-source": {
+ "alert-host": "Du må angi en databasevert",
+ "alert-port": "Du må angi en databaseport",
+ "alert-user": "Du må angi en databasebruker",
+ "alert-password": "Du må angi et databasepassord",
+ "alert-connection-name": "Du må angi et tilkoblingsnavn",
+ "alert-initial-database": "Du må angi en initiell database",
+ "alert-query": "Du må angi en gyldig spørring",
+ "alert-invalid-query-select": "Spørringen må starte med nøkkelordet SELECT",
+ "alert-connection-edit": "Tilkoblingen ble redigert",
+ "connectionNameLabel": "Navn:",
+ "databaseTypeLabel": "Type:",
+ "databaseHostLabel": "Vert:",
+ "databasePortLabel": "Port:",
+ "databaseUserLabel": "Bruker:",
+ "databasePasswordLabel": "Passord:",
+ "databaseNameLabel": "Database:",
+ "databaseSchemaLabel": "Skjema:",
+ "databaseTestButton": "Test",
+ "databaseSaveButton": "Lagre",
+ "databaseConnectButton": "Koble til",
+ "newConnectionButtonDiv": "Ny tilkobling",
+ "savedConnectionSpan": "Lagrede tilkoblinger"
+ },
+ "database-parsing": {
+ "start-over": "« Begynn på nytt",
+ "conf-pars": "Konfigurer tolkningsinnstillinger",
+ "proj-name": "Prosjektnavn",
+ "create-proj": "Opprett prosjekt »",
+ "updating-preview": "Oppdaterer forhåndsvisning …",
+ "option": "Innstillinger",
+ "preview-button": "Oppdater forhåndsvisning",
+ "ignore-first": "Ignorer første",
+ "ignore": "linje(r) i begynnelsen av fila",
+ "parse-next": "Tolk neste",
+ "parse": "linje(r) som kolonneoverskrifter",
+ "discard-next": "Forkast de første",
+ "discard": "raden(e) med data",
+ "limit-next": "Last maksimalt",
+ "limit": "rad(er) med data",
+ "store-row": "Lagre blanke rader",
+ "store-cell": "Lagre blanke celler som null"
+ }
+}
diff --git a/extensions/database/pom.xml b/extensions/database/pom.xml
index 141383614..b4d6ea0d3 100644
--- a/extensions/database/pom.xml
+++ b/extensions/database/pom.xml
@@ -2,10 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- org.openrefinedatabasejar
- 3.1-SNAPSHOTOpenRefine - Database extensionConnections to SQL databases for import and export
diff --git a/extensions/gdata/pom.xml b/extensions/gdata/pom.xml
index 5ba1f1e79..fa89a2737 100644
--- a/extensions/gdata/pom.xml
+++ b/extensions/gdata/pom.xml
@@ -2,10 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- org.openrefinegdatajar
- 3.1-SNAPSHOTOpenRefine - Gdata extensionConnects with Google services for data import and export
diff --git a/extensions/pc-axis/pom.xml b/extensions/pc-axis/pom.xml
index 09077e8af..31e04695e 100644
--- a/extensions/pc-axis/pom.xml
+++ b/extensions/pc-axis/pom.xml
@@ -2,10 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- org.openrefinepc-axisjar
- 3.1-SNAPSHOTOpenRefine - PC-axis extensionOpenRefine integration of PC-axis
diff --git a/extensions/wikidata/module/MOD-INF/controller.js b/extensions/wikidata/module/MOD-INF/controller.js
index e2e36dda1..b2e9858dc 100644
--- a/extensions/wikidata/module/MOD-INF/controller.js
+++ b/extensions/wikidata/module/MOD-INF/controller.js
@@ -36,8 +36,10 @@ function init() {
*/
var ExporterRegistry = Packages.com.google.refine.exporters.ExporterRegistry;
var QSExporter = Packages.org.openrefine.wikidata.exporters.QuickStatementsExporter;
+ var SchemaExporter = Packages.org.openrefine.wikidata.exporters.SchemaExporter;
ExporterRegistry.registerExporter("quickstatements", new QSExporter());
+ ExporterRegistry.registerExporter("wikibase-schema", new SchemaExporter());
/*
* Commands
@@ -62,6 +64,7 @@ function init() {
"scripts/dialogs/schema-alignment-dialog.js",
"scripts/dialogs/manage-account-dialog.js",
"scripts/dialogs/perform-edits-dialog.js",
+ "scripts/dialogs/import-schema-dialog.js",
"scripts/jquery.uls.data.js",
]);
@@ -71,6 +74,7 @@ function init() {
[
"styles/dialogs/schema-alignment-dialog.css",
"styles/dialogs/manage-account-dialog.less",
+ "styles/dialogs/import-schema-dialog.less",
"styles/dialogs/perform-edits.less",
]);
diff --git a/extensions/wikidata/module/langs/translation-en.json b/extensions/wikidata/module/langs/translation-en.json
index 40a298048..fa0eaf7fb 100644
--- a/extensions/wikidata/module/langs/translation-en.json
+++ b/extensions/wikidata/module/langs/translation-en.json
@@ -2,9 +2,11 @@
"wikidata-extension": {
"menu-label": "Wikidata",
"edit-wikidata-schema": "Edit Wikidata schema",
+ "import-wikidata-schema": "Import schema",
"manage-wikidata-account": "Manage Wikidata account",
"perform-edits-on-wikidata": "Upload edits to Wikidata",
"export-to-qs": "Export to QuickStatements",
+ "export-schema": "Export schema",
"quickstatements-export-name": "QuickStatements"
},
"wikidata-schema": {
@@ -79,6 +81,13 @@
"cancel": "Cancel",
"analyzing-edits": "Analyzing your edits..."
},
+ "import-wikibase-schema": {
+ "dialog-header": "Import Wikidata schema",
+ "file-label": "From JSON file: ",
+ "schema-label": "Or from JSON text:",
+ "invalid-schema": "Invalid Wikibase schema.",
+ "import": "Import"
+ },
"warnings-messages": {
"new-item-created": {
"title": "This edit batch will create new Wikidata items.",
@@ -169,14 +178,6 @@
"title": "No language provided for monolingual text.",
"body": "Some label, description, alias or monolingual text value have been skipped because no language was provided. Example value: {example_text}."
},
- "leading-whitespace": {
- "title": "Leading whitespace in strings.",
- "body": "Strings such as {example_string} have leading whitespace."
- },
- "trailing-whitespace": {
- "title": "Trailing whitespace in strings.",
- "body": "Strings such as {example_string} have trailing whitespace."
- },
"duplicate-whitespace": {
"title": "Duplicate whitespace in strings.",
"body": "Strings such as {example_string} contain duplicate whitespace."
diff --git a/extensions/wikidata/module/langs/translation-fr.json b/extensions/wikidata/module/langs/translation-fr.json
index adab4dbac..c82590f9c 100644
--- a/extensions/wikidata/module/langs/translation-fr.json
+++ b/extensions/wikidata/module/langs/translation-fr.json
@@ -168,14 +168,6 @@
"title": "Pas de langue fournie pour des textes monolingues.",
"body": "Des libellés, descriptions, alias ou textes monolingues ont été ignorés car aucune langue n'a été fournie. Exemple: {example_text}."
},
- "leading-whitespace": {
- "title": "Espaces au début de chaînes de caractères.",
- "body": "Des chaînes telles que {example_string} ont des espaces au début."
- },
- "trailing-whitespace": {
- "title": "Espaces à la fin de chaînes de caractères.",
- "body": "Des chaînes telles que {example_string} ont des espaces à la fin."
- },
"duplicate-whitespace": {
"title": "Espaces dédoublées dans des chaînes de caractères.",
"body": "Des chaînes telles que {example_string} contiennent des espaces dédoublées."
diff --git a/extensions/wikidata/module/langs/translation-jp.json b/extensions/wikidata/module/langs/translation-jp.json
index c1b4009bf..961e15485 100644
--- a/extensions/wikidata/module/langs/translation-jp.json
+++ b/extensions/wikidata/module/langs/translation-jp.json
@@ -5,7 +5,9 @@
"manage-wikidata-account": "Wikidataアカウントの管理",
"perform-edits-on-wikidata": "Wikidataへアップロード",
"export-to-qs": "クイック・ステートメントへ出力",
- "quickstatements-export-name": "クイック・ステートメント"
+ "quickstatements-export-name": "クイック・ステートメント",
+ "import-wikidata-schema": "スキーマのインポート",
+ "export-schema": "スキーマのエクスポート"
},
"wikidata-schema": {
"dialog-header": "Wikidataにアライン",
@@ -180,14 +182,6 @@
"title": "言語指定がありません.",
"body": "言語指定がないので、ラベル・記述・別名・単一言語テキストが無視されました。例えば: {example_text}."
},
- "leading-whitespace": {
- "title": "文頭に空白文字があります.",
- "body": "{example_string}の文頭に空白文字があります."
- },
- "trailing-whitespace": {
- "title": "文末に空白文字があります.",
- "body": "{example_string}の文末に空白文字があります."
- },
"duplicate-whitespace": {
"title": "二重の空白文字があります.",
"body": "{example_string}には二重の空白文字があります."
@@ -252,5 +246,12 @@
"title": "アイテムに使われる{property_entity}",
"body": "{example_entity}のようなアイテムに{property_entity}を使うことは無効です."
}
+ },
+ "import-wikibase-schema": {
+ "dialog-header": "Wikidataスキーマのインポート",
+ "file-label": "JSONファイル: ",
+ "schema-label": "あるいは、JSONテキスト:",
+ "invalid-schema": "無効のWikidataスキーマです。",
+ "import": "インポート"
}
}
diff --git a/extensions/wikidata/module/langs/translation-nb_NO.json b/extensions/wikidata/module/langs/translation-nb_NO.json
new file mode 100644
index 000000000..afee6bd1a
--- /dev/null
+++ b/extensions/wikidata/module/langs/translation-nb_NO.json
@@ -0,0 +1,233 @@
+{
+ "wikidata-extension": {
+ "menu-label": "Wikidata",
+ "edit-wikidata-schema": "Rediger Wikidata-skjema",
+ "import-wikidata-schema": "Importer skjema",
+ "manage-wikidata-account": "Behandle Wikidata-konto",
+ "perform-edits-on-wikidata": "Last opp redigeringer til Wikidata",
+ "export-to-qs": "Eksporter til QuickStatements",
+ "export-schema": "Eksporter skjema",
+ "quickstatements-export-name": "QuickStatements"
+ },
+ "wikidata-schema": {
+ "dialog-header": "Innrett til Wikidata",
+ "dialog-explanation": "Wikidata-skjemaet nedenfor spesifiserer hvordan dine tabulære data vil transformeres til Wikidata-redigeringer. Du kan dra og slippe kolonnenavnene nedenfor til de fleste inndataboksene: for hver rad vil redigeringer genereres med verdiene i disse kolonnene.",
+ "preview-explanation": "Denne fanen viser de første (av {nb_edits}) redigeringene som vil gjøres når du laster opp endringene til Wikidat. Du kan bruke fasetter for å ettergå redigeringene til spesifikke elementer.",
+ "schema-tab-header": "Skjema",
+ "warnings-tab-header": "Saker",
+ "edits-preview-tab-header": "Forhåndsvisning",
+ "statements-header": "Påstander",
+ "terms-header": "Termer",
+ "empty-statements": "ingen påstander lagt til",
+ "empty-terms": "ingen etiketter, beskrivelser eller aliaser lagt til",
+ "add-item-button": "legg til element",
+ "add-term": "legg til term",
+ "remove": "fjern",
+ "add-statement": "legg til påstand",
+ "add-value": "legg til verdi",
+ "add-qualifier": "legg til kvalifikator",
+ "add-reference": "legg til referanse",
+ "add-reference-snak": "legg til",
+ "property-placeholder": "egenskap",
+ "nb-references": " referanser",
+ "remove-column": "fjern kolonne",
+ "label": "Etikett",
+ "description": "Beskrivelse",
+ "alias": "Alias",
+ "item-or-reconciled-column": "skriv inn element eller dra avstemt kolonne hit",
+ "amount": "antall",
+ "unit": "enhet",
+ "full-url": "full URL inkludert protokoll",
+ "tabular-data-with-prefix": "filnavn som begynner med «Data:»",
+ "commons-media": "filnavn",
+ "math-expression": "matematisk uttrykk",
+ "geoshape-with-prefix": "filnavn som begynner med «Data:»",
+ "datatype-not-supported-yet": "Denne datatypen støttes dessverre ikke ennå.",
+ "invalid-schema-warning-issues": "Skjemaet ditt er ufullstendig, fiks det for å se problemene.",
+ "invalid-schema-warning-preview": "Skjemaet ditt er ufullstendig, fiks det for å se forhåndsvisningen.",
+ "discard-button": "Forkast endringer",
+ "save-button": "Lagre skjema",
+ "close-button": "Lukk",
+ "unsaved-changes-alt": "Du har gjort ulagrede endringer i Wikidata-skjemaet ditt.",
+ "save-schema-alt": "Lagre skjemaet i OpenRefine. Endringene blir ikke lastet opp til Wikidata ennå.",
+ "discard-schema-changes-alt": "Forkast endringene som er gjort i skjemaet.",
+ "incomplete-schema-could-not-be-saved": "Skjemaet ditt er ufullstendig, så det kan ikke lagres ennå.",
+ "unsaved-warning": "Du har gjort ulagrede endringer i Wikidata-skjemaet ditt. Lukke likevel?"
+ },
+ "wikidata-preview": {
+ "new-id": "nytt element"
+ },
+ "wikidata-account": {
+ "dialog-header": "Wikidata-konto",
+ "explain-log-in": "Hvis du logger inn på Wikidata kan du laste opp redigeringer direkte fra OpenRefine.",
+ "username-label": "Brukernavn:",
+ "username-placeholder": "Skriv inn brukernavnet ditt",
+ "password-label": "Passord:",
+ "password-placeholder": "Skriv inn passordet ditt",
+ "remember-credentials-label": "Husk meg (lagres ukryptert i OpenRefines innstillinger)",
+ "close": "Lukk",
+ "log-in": "Logg inn",
+ "logged-in-as": "Du er logget inn som:",
+ "log-out": "Logg ut",
+ "connecting-to-wikidata": "Kobler til Wikidata …"
+ },
+ "perform-wikidata-edits": {
+ "dialog-header": "Last opp redigeringer på Wikidata",
+ "review-your-edits": "Du er i ferd med å laste opp {nb_edits} redigeringer på Wikidata. Sjekk dem nøye. Store redigeringspartier bør gå gjennom botgodkjenning først.",
+ "logged-in-as": "Du er logget inn som",
+ "edit-summary-label": "Redigeringsforklaring:",
+ "edit-summary-placeholder": "noen ord som beskriver redigeringene dine",
+ "perform-edits": "Last opp redigeringer",
+ "cancel": "Avbryt",
+ "analyzing-edits": "Analyserer redigeringene dine …"
+ },
+ "import-wikibase-schema": {
+ "dialog-header": "Importer Wikidata-skjema",
+ "file-label": "Fra JSON-fil: ",
+ "schema-label": "Eller fra JSON-tekst:",
+ "invalid-schema": "Ugyldig Wikibase-skjema.",
+ "import": "Importer"
+ },
+ "warnings-messages": {
+ "new-item-created": {
+ "title": "Dette redigeringspartiet vil opprette nye Wikidata-elementer.",
+ "body": "Sjekk at disse elementene ikke finnes ennå og passer for inkludering på Wikidata."
+ },
+ "new-item-without-labels-or-aliases": {
+ "title": "Nye elementer opprettet uten etikett eller alias.",
+ "body": "Du bør angi minst én etikett for nye elementer som {example_entity}, så andre kan forstå hva elementet handler om."
+ },
+ "new-item-without-descriptions": {
+ "title": "Nye elementer opprettet uten beskrivelse.",
+ "body": "Å legge til beskrivelser til nye elementer som {example_entity} gjør det enklere å skille elementer fra hverandre om de har samme etikett."
+ },
+ "new-item-with-deleted-statements": {
+ "title": "Sletter påstander i nye elementer.",
+ "body": "Det er trolig noe galt med skjemaet eller prosjektet ditt."
+ },
+ "new-item-without-P31-or-P279": {
+ "title": "Nye elementer opprettet uten type.",
+ "body": "Du bør angi påstanden «forekomst av» (P31) eller «underklasse av» (P279) for hvert element du oppretter, som {example_entity}."
+ },
+ "add-statements-with-invalid-format": {
+ "title": "{property_entity} påstander med ugyldig format.",
+ "body": "Verdiene for denne egenskapen forventes å matche det regulære uttrykket {regex}, noe som ikke er tilfelle for {example_value} lagt til på {example_item_entity}."
+ },
+ "remove-statements-with-invalid-format": {
+ "title": "Fjernet påstander med ugyldig format.",
+ "body": "Hvis disse påstandene for tiden finnes på Wikidata vil dette løse brudd på begrensninger."
+ },
+ "missing-inverse-statements": {
+ "title": "Inverse påstander mangler for {added_property_entity}.",
+ "body": "{added_property_entity}-påstander som den fra {source_entity} til {target_entity} bør legges til inverst med {inverse_property_entity}: i dette tilfellet, {target_entity} {inverse_property_entity} {source_entity}."
+ },
+ "self-referential-statements": {
+ "title": "Selv-refererende påstander.",
+ "body": "Det er ikke forbudt, men selv-refererende påstander er generelt sett mistenkelige. Du har noen slike i {example_entity}."
+ },
+ "unsourced-statements": {
+ "title": "Påstander uten referanser.",
+ "body": "De fleste påstander bør ha referanser. Du kan enkelt legge dem til i skjemaet."
+ },
+ "property-found-in-mainsnak": {
+ "title": "{property_entity} brukt som påstand.",
+ "body": "Du bruker {property_entity} som hovedpåstand, men den er ikke designet for det."
+ },
+ "property-found-in-qualifier": {
+ "title": "{property_entity} brukt som kvalifikator.",
+ "body": "Du bruker {property_entity} som kvalifikator, men den er ikke designet for det."
+ },
+ "property-found-in-reference": {
+ "title": "{property_entity} brukt som referanse.",
+ "body": "Du bruker {property_entity} i en referanse, men den er ikke designet for det."
+ },
+ "missing-mandatory-qualifiers": {
+ "title": "{statement_property_entity} mangler en {missing_property_entity}-kvalifikator.",
+ "body": "Påstander som bruker {statement_property_entity}, som den i {example_item_entity}, mangler en obligatorisk {missing_property_entity}-kvalifikator."
+ },
+ "disallowed-qualifiers": {
+ "title": "Kvalifikatoren {disallowed_property_entity} er ikke kompatibel med {statement_property_entity}.",
+ "body": "Påstander som bruker {statement_property_entity}, som den i {example_item_entity}, bør ikke ha kvalifikatoren {disallowed_property_entity}, da de ikke er kompatible."
+ },
+ "single-valued-property-added-more-than-once": {
+ "title": "{property_entity} lagt til mer enn én gang i samme element.",
+ "body": "Denne egenskapet forventes brukt maks én gang per element, men har blitt lagt til flere ganger i samme element, for eksempel i {example_entity}."
+ },
+ "identical-values-for-distinct-valued-property": {
+ "title": "Identiske verdier for {property_entity}",
+ "body": "Denne egenskapen bør ha distinkte verdier, men samme verdi ble funnet i for eksempel {item1_entity} og {item2_entity}."
+ },
+ "no-edit-generated": {
+ "title": "Ingen redigering ble generert.",
+ "body": "Det kan være noe galt med skjemaet ditt."
+ },
+ "no-issue-detected": {
+ "title": "Ingen problemer ble oppdaget i redigeringene dine.",
+ "body": "Merk at OpenRefine ikke kan oppdage alle slags problemer Wikidata-redigeringer kan ha."
+ },
+ "ignored-qualifiers": {
+ "title": "Noen kvalifikatorer ble ignorert.",
+ "body": "Kvalifikatorverdier kunne ikke tolkes, så de blir ikke lagt til i de samsvarende påstandene."
+ },
+ "ignored-references": {
+ "title": "Noen referanser ble ignorert.",
+ "body": "Ingen av påstandene deres kunne tolkes, så ingen referanser ble lagt til."
+ },
+ "monolingual-text-without-language": {
+ "title": "Intet språk angitt for enspråklig tekst.",
+ "body": "Noen etiketter, beskrivelser, aliaser eller enspråklige tekstverdier har blitt hoppet over fordi språk ikke var angitt. Eksempelverdi: {example_text}."
+ },
+ "duplicate-whitespace": {
+ "title": "Dobbelt mellomrom i strenger.",
+ "body": "Strenger som {example_string} inneholder dobbelt mellomrom."
+ },
+ "non-printable-characters": {
+ "title": "Utrykkbare tegn i strenger.",
+ "body": "Strenger som {example_string} inneholder utrykkbare tegn."
+ },
+ "invalid-identifier-space": {
+ "title": "Ugyldig identifikatorrom for avstemte celler.",
+ "body": "Noen avstemnte celler, som {example_cell} ble ignorert fordi de ikke er avstemt mot Wikidata."
+ },
+ "ignored-language": {
+ "title": "Ugyldige språkidentifikatorer.",
+ "body": "Noen språkidentifikatorer er ugyldige, som {example_value}. Se de tillatte verdiene."
+ },
+ "ignored-date": {
+ "title": "Ugyldige datoformater.",
+ "body": "Noen datoer er galt formatert, som {example_value}. Se de tillatte formatene."
+ },
+ "ignored-amount": {
+ "title": "Ugyldige tallformater.",
+ "body": "Noen tall er galt formatert, som {example_value. Se de tillatte formatene."
+ },
+ "ignored-coordinates": {
+ "title": "Ugyldige geografiske koordinater.",
+ "body": "Noen koordinater er galt formatert, som {example_value}. Se de tillatte formatene."
+ },
+ "forbidden-value": {
+ "title": "Ugyldige verdier for {property_entity}",
+ "body": "Elementer som {example_value_entity} lagt til i {example_subject_entity} er ikke tillatte som verdier for {property_entity}."
+ },
+ "bounds-disallowed": {
+ "title": "Kvantitetsgrenser gitt for {property_entity}",
+ "body": "Verdier forventes å ikke ha usikkerhetsgrenser, men {example_value} lagt til i {example_item_entity} har det. Se manualen for å lære hvordan man fikser formatet."
+ },
+ "values-should-be-integers": {
+ "title": "Verdier som ikke er heltall for {property_entity}",
+ "body": "Verdier forventes å være heltall, men {example_value} lagt til i {example_item_entity} har desimaler. Se manualen for å finne ut hvordan man fikser formatet."
+ },
+ "invalid-unit": {
+ "title": "{property_entity} med ugyldige enheter",
+ "body": "Enheter som {unit_entity} brukt i {example_item_entity} er ugyldige for {property_entity}."
+ },
+ "no-unit-provided": {
+ "title": "Enhet mangler for {property_entity}",
+ "body": "Verdier som {example_value} i {example_item_entity} forventes å ha enheter."
+ },
+ "invalid-entity-type": {
+ "title": "{property_entity} brukt i elementer",
+ "body": "Bruken av {property_entity} i elementer som {example_entity} er ugyldig."
+ }
+ }
+}
diff --git a/extensions/wikidata/module/scripts/dialogs/import-schema-dialog.html b/extensions/wikidata/module/scripts/dialogs/import-schema-dialog.html
new file mode 100644
index 000000000..0885460db
--- /dev/null
+++ b/extensions/wikidata/module/scripts/dialogs/import-schema-dialog.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extensions/wikidata/module/scripts/dialogs/import-schema-dialog.js b/extensions/wikidata/module/scripts/dialogs/import-schema-dialog.js
new file mode 100644
index 000000000..5cb0572f7
--- /dev/null
+++ b/extensions/wikidata/module/scripts/dialogs/import-schema-dialog.js
@@ -0,0 +1,64 @@
+var ImportSchemaDialog = {};
+
+ImportSchemaDialog.launch = function() {
+ var self = this;
+ var frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/import-schema-dialog.html"));
+ var elmts = this._elmts = DOM.bind(frame);
+
+ this._elmts.dialogHeader.text($.i18n._('import-wikibase-schema')["dialog-header"]);
+ this._elmts.fileLabel.html($.i18n._('import-wikibase-schema')["file-label"]);
+ this._elmts.schemaLabel.text($.i18n._('import-wikibase-schema')["schema-label"]);
+ this._elmts.cancelButton.text($.i18n._('core-project')["cancel"]);
+ this._elmts.importButton.text($.i18n._('import-wikibase-schema')["import"]);
+
+ this._level = DialogSystem.showDialog(frame);
+
+ var dismiss = function() {
+ DialogSystem.dismissUntil(self._level - 1);
+ };
+
+
+ frame.find('.cancel-button').click(function() {
+ dismiss();
+ });
+
+ elmts.fileInput.on("change", function(evt) {
+ var file = evt.target.files[0];
+ var freader = new FileReader();
+ freader.onload = function(evt) {
+ elmts.schemaTextarea.val(evt.target.result);
+ elmts.schemaTextarea.hide();
+ elmts.schemaLabel.hide();
+ }
+ freader.readAsText(file);
+ });
+
+ elmts.importButton.click(function() {
+ var schema = null;
+ try {
+ schema = JSON.parse(elmts.schemaTextarea.val());
+ } catch(e) {
+ elmts.invalidSchema.text($.i18n._('import-wikibase-schema')["invalid-schema"]);
+ return;
+ }
+
+ Refine.postProcess(
+ "wikidata",
+ "save-wikibase-schema",
+ {},
+ { schema: JSON.stringify(schema) },
+ {},
+ {
+ onDone: function() {
+ theProject.overlayModels.wikibaseSchema = schema;
+ SchemaAlignmentDialog._discardChanges();
+ dismiss();
+ },
+ onError: function(e) {
+ elmts.invalidSchema.text($.i18n._('import-wikibase-schema')["invalid-schema"]);
+ },
+ }
+ );
+ });
+};
+
diff --git a/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js b/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js
index ae3e06b38..bb5a72989 100644
--- a/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js
+++ b/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js
@@ -198,6 +198,10 @@ SchemaAlignmentDialog.switchTab = function(targetTab) {
// Resize the inside of the schema panel
var headerHeight = this._schemaElmts.schemaHeader.outerHeight();
this._schemaElmts.canvas.height(panelHeight - headerHeight - 10);
+
+ if (targetTab === "#view-panel") {
+ ui.dataTableView.render();
+ }
}
SchemaAlignmentDialog.isSetUp = function() {
diff --git a/extensions/wikidata/module/scripts/menu-bar-extension.js b/extensions/wikidata/module/scripts/menu-bar-extension.js
index 0547ab5f0..3ed14fb63 100644
--- a/extensions/wikidata/module/scripts/menu-bar-extension.js
+++ b/extensions/wikidata/module/scripts/menu-bar-extension.js
@@ -19,19 +19,37 @@ $.i18n.setDictionary(dictionary);
ExporterManager.MenuItems.push({});
ExporterManager.MenuItems.push(
{
- "id" : "exportQuickStatements",
- "label": $.i18n._('wikidata-extension')["quickstatements-export-name"],
- "click": function() { WikibaseSchemaExporterMenuBar.checkSchemaAndExport(); }
+ id:"performWikibaseEdits",
+ label: $.i18n._('wikidata-extension')["perform-edits-on-wikidata"],
+ click: function() { PerformEditsDialog.checkAndLaunch(); }
+ });
+ExporterManager.MenuItems.push(
+ {
+ id:"exportQuickStatements",
+ label: $.i18n._('wikidata-extension')["export-to-qs"],
+ click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("quickstatements"); }
+ });
+ExporterManager.MenuItems.push(
+ {
+ id:"exportWikibaseSchema",
+ label: $.i18n._('wikidata-extension')["export-schema"],
+ click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("wikibase-schema"); }
}
);
WikibaseExporterMenuBar = {};
WikibaseExporterMenuBar.exportTo = function(format) {
+ var targetUrl = null;
+ if (format ==="quickstatements") {
+ targetUrl = "statements.txt";
+ } else {
+ targetUrl = "schema.json";
+ }
var form = document.createElement("form");
$(form).css("display", "none")
.attr("method", "post")
- .attr("action", "command/core/export-rows/statements.txt")
+ .attr("action", "command/core/export-rows/"+targetUrl)
.attr("target", "gridworks-export");
$('')
.attr("name", "engine")
@@ -54,9 +72,9 @@ WikibaseExporterMenuBar.exportTo = function(format) {
document.body.removeChild(form);
};
-WikibaseExporterMenuBar.checkSchemaAndExport = function() {
+WikibaseExporterMenuBar.checkSchemaAndExport = function(format) {
var onSaved = function(callback) {
- WikibaseExporterMenuBar.exportTo("quickstatements");
+ WikibaseExporterMenuBar.exportTo(format);
};
if (!SchemaAlignmentDialog.isSetUp()) {
SchemaAlignmentDialog.launch(null);
@@ -85,6 +103,18 @@ $(function(){
label: $.i18n._('wikidata-extension')["manage-wikidata-account"],
click: function() { ManageAccountDialog.checkAndLaunch(); }
},
+ {},
+ {
+ id: "wikidata/import-schema",
+ label: $.i18n._('wikidata-extension')["import-wikidata-schema"],
+ click: function() { ImportSchemaDialog.launch(); }
+ },
+ {
+ id:"wikidata/export-schema",
+ label: $.i18n._('wikidata-extension')["export-schema"],
+ click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("wikibase-schema"); }
+ },
+ {},
{
id:"wikidata/perform-edits",
label: $.i18n._('wikidata-extension')["perform-edits-on-wikidata"],
@@ -93,7 +123,7 @@ $(function(){
{
id:"wikidata/export-qs",
label: $.i18n._('wikidata-extension')["export-to-qs"],
- click: function() { WikibaseExporterMenuBar.checkSchemaAndExport(); }
+ click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("quickstatements"); }
},
]
diff --git a/extensions/wikidata/module/scripts/previewrenderer.js b/extensions/wikidata/module/scripts/previewrenderer.js
index 62f73f9bc..70c502b77 100644
--- a/extensions/wikidata/module/scripts/previewrenderer.js
+++ b/extensions/wikidata/module/scripts/previewrenderer.js
@@ -130,7 +130,8 @@ EditRenderer._renderStatement = function(json, container) {
var qualifierContainer = $('').addClass('wbs-qualifier-container').appendTo(right);
if (json.qualifiers) {
- for (var pid in json.qualifiers) {
+ for (var pid_id in json['qualifiers-order']) {
+ var pid = json['qualifiers-order'][pid_id];
if (json.qualifiers.hasOwnProperty(pid)) {
var qualifiers = json.qualifiers[pid];
for (var i = 0; i != qualifiers.length; i++) {
diff --git a/extensions/wikidata/module/styles/dialogs/import-schema-dialog.less b/extensions/wikidata/module/styles/dialogs/import-schema-dialog.less
new file mode 100644
index 000000000..840c04ae6
--- /dev/null
+++ b/extensions/wikidata/module/styles/dialogs/import-schema-dialog.less
@@ -0,0 +1,10 @@
+
+@import-less url("../theme.less");
+
+.wikibase-invalid-schema {
+ color: red;
+}
+
+.wikibase-schema-textarea {
+ width: 100%;
+ height: 100px;
diff --git a/extensions/wikidata/pom.xml b/extensions/wikidata/pom.xml
index fef9dd644..250fffe4b 100644
--- a/extensions/wikidata/pom.xml
+++ b/extensions/wikidata/pom.xml
@@ -2,10 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- org.openrefinewikidatajar
- 3.1-SNAPSHOTOpenRefine - Wikidata extensionSchema alignment and data upload for Wikidata
diff --git a/extensions/wikidata/src/org/openrefine/wikidata/commands/PreviewWikibaseSchemaCommand.java b/extensions/wikidata/src/org/openrefine/wikidata/commands/PreviewWikibaseSchemaCommand.java
index 28ed72400..eb3749133 100644
--- a/extensions/wikidata/src/org/openrefine/wikidata/commands/PreviewWikibaseSchemaCommand.java
+++ b/extensions/wikidata/src/org/openrefine/wikidata/commands/PreviewWikibaseSchemaCommand.java
@@ -24,6 +24,8 @@
package org.openrefine.wikidata.commands;
+import static org.openrefine.wikidata.commands.CommandUtilities.respondError;
+
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
@@ -36,7 +38,6 @@ import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import org.json.JSONException;
-import org.json.JSONObject;
import org.json.JSONWriter;
import org.openrefine.wikidata.qa.EditInspector;
import org.openrefine.wikidata.qa.QAWarning;
@@ -45,10 +46,7 @@ import org.openrefine.wikidata.schema.WikibaseSchema;
import org.openrefine.wikidata.updates.ItemUpdate;
import org.openrefine.wikidata.updates.scheduler.WikibaseAPIUpdateScheduler;
-import static org.openrefine.wikidata.commands.CommandUtilities.respondError;
-
import com.fasterxml.jackson.databind.ObjectMapper;
-
import com.google.refine.browsing.Engine;
import com.google.refine.commands.Command;
import com.google.refine.model.Project;
diff --git a/extensions/wikidata/src/org/openrefine/wikidata/exporters/SchemaExporter.java b/extensions/wikidata/src/org/openrefine/wikidata/exporters/SchemaExporter.java
new file mode 100644
index 000000000..59698a3ef
--- /dev/null
+++ b/extensions/wikidata/src/org/openrefine/wikidata/exporters/SchemaExporter.java
@@ -0,0 +1,31 @@
+package org.openrefine.wikidata.exporters;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Properties;
+
+import org.json.JSONWriter;
+import org.openrefine.wikidata.schema.WikibaseSchema;
+
+import com.google.refine.browsing.Engine;
+import com.google.refine.exporters.WriterExporter;
+import com.google.refine.model.Project;
+
+public class SchemaExporter implements WriterExporter {
+
+ @Override
+ public String getContentType() {
+ return "application/octet-stream";
+ }
+
+ @Override
+ public void export(Project project, Properties options, Engine engine, Writer writer) throws IOException {
+ WikibaseSchema schema = (WikibaseSchema) project.overlayModels.get("wikibaseSchema");
+ if (schema == null) {
+ schema = new WikibaseSchema();
+ }
+ JSONWriter jsonWriter = new JSONWriter(writer);
+ schema.write(jsonWriter, new Properties());
+ }
+
+}
diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizer.java
index a5685384e..cdcbcc7f1 100644
--- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizer.java
+++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizer.java
@@ -43,15 +43,11 @@ public class WhitespaceScrutinizer extends ValueScrutinizer {
private Map _issuesMap;
- public static final String leadingWhitespaceType = "leading-whitespace";
- public static final String trailingWhitespaceType = "trailing-whitespace";
public static final String duplicateWhitespaceType = "duplicate-whitespace";
public static final String nonPrintableCharsType = "non-printable-characters";
public WhitespaceScrutinizer() {
_issuesMap = new HashMap<>();
- _issuesMap.put(leadingWhitespaceType, Pattern.compile("^\\s"));
- _issuesMap.put(trailingWhitespaceType, Pattern.compile("\\s$"));
_issuesMap.put(duplicateWhitespaceType, Pattern.compile("\\s\\s"));
// https://stackoverflow.com/questions/14565934/regular-expression-to-remove-all-non-printable-characters
diff --git a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbMonolingualExpr.java b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbMonolingualExpr.java
index ef7622f2d..f393c7d15 100644
--- a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbMonolingualExpr.java
+++ b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbMonolingualExpr.java
@@ -53,7 +53,7 @@ public class WbMonolingualExpr implements WbExpression {
String text = getValueExpr().evaluate(ctxt).getString();
try {
String lang = getLanguageExpr().evaluate(ctxt);
- return Datamodel.makeMonolingualTextValue(text, lang);
+ return Datamodel.makeMonolingualTextValue(text.trim(), lang);
} catch (SkipSchemaExpressionException e) {
QAWarning warning = new QAWarning("monolingual-text-without-language", null, QAWarning.Severity.WARNING, 1);
diff --git a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringConstant.java b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringConstant.java
index 7a1ddf9e3..a8d4ce34c 100644
--- a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringConstant.java
+++ b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringConstant.java
@@ -39,7 +39,7 @@ public class WbStringConstant implements WbExpression {
Validate.notNull(value);
Validate.isTrue(!value.isEmpty()); // for now we don't accept empty strings
// because in the variable counterpart of this expression, they are skipped
- this.value = value;
+ this.value = value.trim();
}
@Override
diff --git a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringVariable.java b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringVariable.java
index 7385d35eb..4e1ae3bd2 100644
--- a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringVariable.java
+++ b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbStringVariable.java
@@ -62,7 +62,7 @@ public class WbStringVariable extends WbVariableExpr {
if (cell.value instanceof Double && ((Double)cell.value) % 1 == 0) {
stringValue = Integer.toString(((Double)cell.value).intValue());
}
- return Datamodel.makeStringValue(stringValue);
+ return Datamodel.makeStringValue(stringValue.trim());
}
throw new SkipSchemaExpressionException();
}
diff --git a/extensions/wikidata/tests/src/org/openrefine/wikidata/exporters/SchemaExporterTest.java b/extensions/wikidata/tests/src/org/openrefine/wikidata/exporters/SchemaExporterTest.java
new file mode 100644
index 000000000..16d7740c1
--- /dev/null
+++ b/extensions/wikidata/tests/src/org/openrefine/wikidata/exporters/SchemaExporterTest.java
@@ -0,0 +1,30 @@
+package org.openrefine.wikidata.exporters;
+
+import static org.openrefine.wikidata.testing.JacksonSerializationTest.assertJsonEquals;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Properties;
+
+import org.testng.annotations.Test;
+
+import com.google.refine.browsing.Engine;
+import com.google.refine.model.Project;
+import com.google.refine.tests.RefineTest;
+
+public class SchemaExporterTest extends RefineTest {
+
+ private SchemaExporter exporter = new SchemaExporter();
+
+ @Test
+ public void testNoSchema()
+ throws IOException {
+ Project project = this.createCSVProject("a,b\nc,d");
+ Engine engine = new Engine(project);
+ StringWriter writer = new StringWriter();
+ Properties properties = new Properties();
+ exporter.export(project, properties, engine, writer);
+ assertJsonEquals("{\"itemDocuments\":[]}", writer.toString());
+ }
+
+}
diff --git a/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizerTest.java b/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizerTest.java
index c2ffad6a1..25a70049c 100644
--- a/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizerTest.java
+++ b/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/WhitespaceScrutinizerTest.java
@@ -33,18 +33,6 @@ public class WhitespaceScrutinizerTest extends ValueScrutinizerTest {
return new WhitespaceScrutinizer();
}
- @Test
- public void testLeadingWhitespace() {
- scrutinize(Datamodel.makeStringValue(" a"));
- assertWarningsRaised(WhitespaceScrutinizer.leadingWhitespaceType);
- }
-
- @Test
- public void testTrailingWhitespace() {
- scrutinize(Datamodel.makeStringValue("a\t"));
- assertWarningsRaised(WhitespaceScrutinizer.trailingWhitespaceType);
- }
-
@Test
public void testDuplicateWhitespace() {
scrutinize(Datamodel.makeStringValue("a\t b"));
@@ -65,14 +53,13 @@ public class WhitespaceScrutinizerTest extends ValueScrutinizerTest {
@Test
public void testMultipleIssues() {
- scrutinize(Datamodel.makeStringValue(" a\t b "));
- assertWarningsRaised(WhitespaceScrutinizer.duplicateWhitespaceType, WhitespaceScrutinizer.leadingWhitespaceType,
- WhitespaceScrutinizer.trailingWhitespaceType);
+ scrutinize(Datamodel.makeStringValue("a\t b\u0003"));
+ assertWarningsRaised(WhitespaceScrutinizer.duplicateWhitespaceType, WhitespaceScrutinizer.nonPrintableCharsType);
}
@Test
public void testMonolingualTextValue() {
- scrutinizeLabel(Datamodel.makeMonolingualTextValue(" a", "fr"));
- assertWarningsRaised(WhitespaceScrutinizer.leadingWhitespaceType);
+ scrutinizeLabel(Datamodel.makeMonolingualTextValue("a b", "fr"));
+ assertWarningsRaised(WhitespaceScrutinizer.duplicateWhitespaceType);
}
}
diff --git a/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbMonolingualExprTest.java b/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbMonolingualExprTest.java
index bea0536b8..09dd4bd23 100644
--- a/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbMonolingualExprTest.java
+++ b/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbMonolingualExprTest.java
@@ -43,6 +43,12 @@ public class WbMonolingualExprTest extends WbExpressionTest {
evaluatesTo(Datamodel.makeStringValue("hello world"), constant);
}
+ @Test
+ public void testTrim() {
+ evaluatesTo(Datamodel.makeStringValue("hello world"), new WbStringConstant(" hello world "));
+ }
+
@Test(expectedExceptions = IllegalArgumentException.class)
public void testEmpty() {
new WbStringConstant("");
diff --git a/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbStringVariableTest.java b/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbStringVariableTest.java
index 3cace300c..334ce09f5 100644
--- a/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbStringVariableTest.java
+++ b/extensions/wikidata/tests/src/org/openrefine/wikidata/schema/WbStringVariableTest.java
@@ -47,12 +47,11 @@ public class WbStringVariableTest extends WbVariableTest {
}
/**
- * It is not up to the evaluator to clean up the strings it gets. This is
- * flagged later on by scrutinizers.
+ * The evaluator cleans up leading and trailing whitespace, but not duplicate spaces
*/
@Test
public void testTrailingWhitespace() {
- evaluatesTo(Datamodel.makeStringValue("dirty \t"), "dirty \t");
+ evaluatesTo(Datamodel.makeStringValue("dirty"), "dirty \t");
}
/**
@@ -74,7 +73,7 @@ public class WbStringVariableTest extends WbVariableTest {
@Test
public void testLeadingWhitespace() {
- evaluatesTo(Datamodel.makeStringValue(" dirty"), " dirty");
+ evaluatesTo(Datamodel.makeStringValue("dirty"), " dirty");
}
@Test
diff --git a/main/pom.xml b/main/pom.xml
index cc57a5af9..720b0f64b 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -2,10 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- org.openrefinemainjar
- 3.1-SNAPSHOTOpenRefine - mainOpenRefine is a free, open source power tool for working with messy data and improving it
diff --git a/main/src/com/google/refine/RefineServlet.java b/main/src/com/google/refine/RefineServlet.java
index e757e440b..5597aab83 100644
--- a/main/src/com/google/refine/RefineServlet.java
+++ b/main/src/com/google/refine/RefineServlet.java
@@ -60,7 +60,7 @@ import edu.mit.simile.butterfly.Butterfly;
import edu.mit.simile.butterfly.ButterflyModule;
public class RefineServlet extends Butterfly {
- static private String ASSIGNED_VERSION = "3.0";
+ static private String ASSIGNED_VERSION = "3.1-beta";
static public String VERSION = "";
static public String REVISION = "";
diff --git a/main/src/com/google/refine/browsing/facets/ListFacet.java b/main/src/com/google/refine/browsing/facets/ListFacet.java
index bec36af53..5314820a7 100644
--- a/main/src/com/google/refine/browsing/facets/ListFacet.java
+++ b/main/src/com/google/refine/browsing/facets/ListFacet.java
@@ -305,6 +305,7 @@ public class ListFacet implements Facet {
*/
NominalFacetChoice choice = new NominalFacetChoice(decoratedValue);
choice.count = 0;
+ choice.selected = true;
_choices.add(choice);
}
}
diff --git a/main/src/com/google/refine/expr/functions/ToDate.java b/main/src/com/google/refine/expr/functions/ToDate.java
index 7204bf7f9..1a20e8cdf 100644
--- a/main/src/com/google/refine/expr/functions/ToDate.java
+++ b/main/src/com/google/refine/expr/functions/ToDate.java
@@ -37,8 +37,10 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
+import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
+import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.TimeZone;
@@ -59,10 +61,16 @@ public class ToDate implements Function {
@Override
public Object call(Properties bindings, Object[] args) {
String o1;
+ Boolean month_first = null;
+ List formats = new ArrayList();
+ OffsetDateTime date = null;
+
+ //Check there is at least one argument
if (args.length == 0) {
return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " expects at least one argument");
} else {
Object arg0 = args[0];
+ //check the first argument is something that can be parsed as a date
if (arg0 instanceof OffsetDateTime) {
return arg0;
} else if (arg0 instanceof Long) {
@@ -74,77 +82,96 @@ public class ToDate implements Function {
return new EvalError("Unable to parse as date");
}
}
-
- // "o, boolean month_first (optional)"
- if (args.length == 1 || (args.length == 2 && args[1] instanceof Boolean)) {
- boolean month_first = true;
- if (args.length == 2) {
- month_first = (Boolean) args[1];
- }
- try {
- return CalendarParser.parseAsOffsetDateTime( o1, (month_first) ? CalendarParser.MM_DD_YY : CalendarParser.DD_MM_YY);
- } catch (CalendarParserException e) {
- OffsetDateTime d = ParsingUtilities.stringToDate(o1);
- if (d != null) {
- return d;
- } else {
- try {
- return javax.xml.bind.DatatypeConverter.parseDateTime(o1).getTime().toInstant().atOffset(ZoneOffset.of("Z"));
- } catch (IllegalArgumentException e2) {
- }
- }
- return new EvalError("Unable to parse as date");
- }
- } else if (args.length>=2) {
- // "o, format1, format2 (optional), ..."
- Locale locale = Locale.getDefault();
- for (int i=1;i 1) {
+ if(args[1] instanceof Boolean) {
+ month_first = (Boolean) args[1];
+ } else if (args[1] instanceof String) {
+ formats.add(StringUtils.trim((String) args[1]));
+ } else {
+ return new EvalError("Invalid argument");
+ }
+ for(int i=2;i formats) {
+ if(month_first != null) {
+ try {
+ return CalendarParser.parseAsOffsetDateTime( o1, (month_first) ? CalendarParser.MM_DD_YY : CalendarParser.DD_MM_YY);
+ } catch (CalendarParserException e) {
+ }
+ }
+ return parse(o1,formats);
+ }
+
+ private OffsetDateTime parse(String o1, List formats) {
+ if(formats.size()>0) {
+ String f1 = formats.get(0);
+ formats.remove(0);
+ return parse(o1,f1,formats);
+ } else {
+ return parse(o1,Locale.getDefault(),formats);
+ }
+ }
+
+ private OffsetDateTime parse(String o1, String f1, List formats) {
+ Locale locale = Locale.getDefault();
+ Locale possibleLocale = Locale.forLanguageTag(f1); // Java 1.7+
+ for (Locale l : DateFormat.getAvailableLocales()) {
+ if (l.equals(possibleLocale)) {
+ locale = possibleLocale;
+ } else {
+ formats.add(0,f1);
+ }
+ }
+ return parse(o1,locale,formats);
+ }
+
+ private OffsetDateTime parse(String o1, Locale locale, List formats) {
+ DateFormat formatter;
+ OffsetDateTime date;
+ //need to try using each format in the formats list!
+ if(formats.size()>0) {
+ for(int i=0;i4.0.0
- org.openrefinepackaging
- 3.1-SNAPSHOT
-
OpenRefine - packagingCreates packages for all supported operating systemshttp://openrefine.org/
@@ -218,6 +215,39 @@
+
+
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-antrun-plugin
+
+ [1.4,)
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 083e40630..0fc5e3c6f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -150,9 +150,68 @@
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-install-plugin
+
+ [2.5.2,)
+
+ install-file
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-install-plugin
+
+ [2.5.2,)
+
+ install-file
+
+
+
+
+
+
+
+
+
+
diff --git a/refine.bat b/refine.bat
index cda4707eb..03c93b72b 100644
--- a/refine.bat
+++ b/refine.bat
@@ -184,7 +184,8 @@ set REFINE_LIB_DIR=server\target\lib
rem ----- Respond to the action ----------------------------------------------------------
set ACTION=%1
-
+setlocal
+%@Try%
if ""%ACTION%"" == ""build"" goto doMvn
if ""%ACTION%"" == ""server_test"" goto doMvn
if ""%ACTION%"" == ""extensions_test"" goto doMvn
@@ -192,6 +193,11 @@ if ""%ACTION%"" == ""test"" goto doMvn
if ""%ACTION%"" == ""clean"" goto doMvn
if ""%ACTION%"" == ""distclean"" goto doMvn
if ""%ACTION%"" == ""run"" goto doRun
+%@EndTry%
+:@Catch
+ echo Unknown Refine command called "%1", type "refine /?" for proper usage.
+ exit /B 1
+:@EndCatch
:doRun
rem --- Log for troubleshooting ------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index 5c4c85c2f..3410c2c7b 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -2,10 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- org.openrefineserverjar
- 3.1-SNAPSHOTOpenRefine - serverOpenRefine is a free, open source power tool for working with messy data and improving it
@@ -73,6 +71,16 @@
UTF-8
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.3
+
+ com.google.refine.Refine
+ -Drefine.headless=true -Drefine.autoreload=true -Dbutterfly.autoreload=true -Drefine.memory=1400M -Drefine.port=3333 -Drefine.host=127.0.0.1
+ false
+
+ org.apache.maven.pluginsmaven-surefire-plugin
@@ -126,6 +134,35 @@
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-install-plugin
+
+ [2.5.2,)
+
+ install-file
+
+
+
+
+
+
+
+
+
+