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.openrefine database jar - 3.1-SNAPSHOT OpenRefine - Database extension Connections 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.openrefine gdata jar - 3.1-SNAPSHOT OpenRefine - Gdata extension Connects 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.openrefine pc-axis jar - 3.1-SNAPSHOT OpenRefine - PC-axis extension OpenRefine 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.openrefine wikidata jar - 3.1-SNAPSHOT OpenRefine - Wikidata extension Schema 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.openrefine main jar - 3.1-SNAPSHOT OpenRefine - main OpenRefine 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;i 4.0.0 - org.openrefine packaging - 3.1-SNAPSHOT - OpenRefine - packaging Creates packages for all supported operating systems http://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.openrefine server jar - 3.1-SNAPSHOT OpenRefine - server OpenRefine 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.plugins maven-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 + + + + + + + + + +