Giter VIP home page Giter VIP logo

hale's People

Contributors

akshatbajaj10 avatar arunverma87 avatar azahnen avatar dmagyari avatar doemming avatar ejn avatar eleazar-araujo avatar emanuelaepure10 avatar fernandor777 avatar flaminietta avatar florianesser avatar franziska-hochenegger avatar johannaott avatar jonherrmann avatar kaischwier avatar kapil-agnihotri avatar kate-lyndegaard avatar michel-kraemer avatar moovida avatar renovate[bot] avatar ridethepenguin avatar stempler avatar thorsten-reitz avatar vpicavet avatar wetransformer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hale's Issues

Improvements for custom functions

Improvements of custom functions introduced with #61

  • Improve mapping on schema elements, support mapping anonymous types
  • Improve entity settings page
  • Add UI for specifying parameters

Add Spatial Join Function

Allow joins based on a defined spatial relationship between selected geometries of two object types, Support at least the "contains", "equals" and "touches" operations.

See object counts per context

When I load source data and create condition contexts on the source schema, I want to see how many objects and properties there are for these contexts.

TopologyException when using InteriorPoint function

Got this error, though only once in a transformation where the function was applied multiple times, so probably an edge case because of a specific geometry.

28.07.2016 18:37:23 ERROR e.e.c.ConceptualSchemaTransformer.transform(168) - Skipping property transformation: Executing property transformation failed.
com.vividsolutions.jts.geom.TopologyException: side location conflict [ (576892.8988647707, 5926862.591675996, NaN) ]
        at com.vividsolutions.jts.geomgraph.EdgeEndStar.propagateSideLabels(EdgeEndStar.java:300) ~[na:na]
        at com.vividsolutions.jts.geomgraph.EdgeEndStar.computeLabelling(EdgeEndStar.java:136) ~[na:na]
        at com.vividsolutions.jts.operation.relate.RelateComputer.labelNodeEdges(RelateComputer.java:297) ~[na:na]
        at com.vividsolutions.jts.operation.relate.RelateComputer.computeIM(RelateComputer.java:132) ~[na:na]
        at com.vividsolutions.jts.operation.relate.RelateOp.getIntersectionMatrix(RelateOp.java:138) ~[na:na]
        at com.vividsolutions.jts.operation.relate.RelateOp.relate(RelateOp.java:83) ~[na:na]
        at com.vividsolutions.jts.geom.Geometry.relate(Geometry.java:1035) ~[na:na]
        at com.vividsolutions.jts.geom.Geometry.contains(Geometry.java:889) ~[na:na]
        at com.vividsolutions.jts.geom.Geometry.within(Geometry.java:850) ~[na:na]
        at eu.esdihumboldt.cst.functions.geometric.interiorpoint.InteriorPoint.calculateInteriorPoint(InteriorPoint.java:112) ~[na:na]
        at eu.esdihumboldt.cst.functions.geometric.interiorpoint.InteriorPoint.evaluate(InteriorPoint.java:59) ~[na:na]
        at eu.esdihumboldt.hale.common.align.transformation.function.impl.AbstractSingleTargetPropertyTransformation.evaluate(AbstractSingleTargetPropertyTransformation.java:57) ~[na:na]
        at eu.esdihumboldt.hale.common.align.transformation.function.impl.AbstractPropertyTransformation.execute(AbstractPropertyTransformation.java:102) ~[na:na]
        at eu.esdihumboldt.cst.internal.FunctionExecutor.executeTransformation(FunctionExecutor.java:224) ~[na:na]
        at eu.esdihumboldt.cst.internal.FunctionExecutor.processValid(FunctionExecutor.java:133) ~[na:na]
        at eu.esdihumboldt.hale.common.align.model.transformation.tree.visitor.CellNodeValidator.visit(CellNodeValidator.java:110) ~[na:na]
        at eu.esdihumboldt.hale.common.align.model.transformation.tree.impl.CellNodeImpl.accept(CellNodeImpl.java:103) ~[na:na]
        at eu.esdihumboldt.hale.common.align.model.transformation.tree.impl.TargetNodeImpl.accept(TargetNodeImpl.java:177) ~[na:na]
        at eu.esdihumboldt.hale.common.align.model.transformation.tree.impl.TargetNodeImpl.accept(TargetNodeImpl.java:173) ~[na:na]
        at eu.esdihumboldt.hale.common.align.model.transformation.tree.impl.TransformationTreeImpl.accept(TransformationTreeImpl.java:129) ~[na:na]
        at eu.esdihumboldt.cst.internal.TreePropertyTransformer$3.run(TreePropertyTransformer.java:194) ~[na:na]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_101]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_101]
        at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_101]

Invalid objects due to concurrent access to the same instance via OrientDB

Accessing the same instance via OrientDB (even if different Java objects) from multiple threads results in invalid objects (duplicate properties). In some cases this happens silently, sometimes a ConcurrentModificationException is raised.

High likelyhood for such behavior is with Groovy type transformations that create multiple targets (as the sources are always the same here).

Short term fix: Transformation in only one thread.

Long term fix could be one of these approaches:

  • Intelligently publish instances for property transformation to avoid such collisions
  • Find a way to have truly independent instances in the different threads

Basic support for custom transformation functions

Allow the user to define custom reusable transformation functions. First implementation is based on defining Groovy scripts. Custom functions can be stored in the alignment or included from an external source (later).

NullPointerException using InstanceAccessor

No simple case for reproduction found yet. In this example happened with a property nested at least three levels deep, with a choice in between.

Caused by: java.lang.NullPointerException
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
    at com.google.common.collect.SingletonImmutableList.<init>(SingletonImmutableList.java:40)
    at com.google.common.collect.ImmutableList.of(ImmutableList.java:89)
    at eu.esdihumboldt.util.groovy.paths.PathImpl.<init>(PathImpl.java:48)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceAccessor$1.apply(InstanceAccessor.groovy:64)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceAccessor$1.apply(InstanceAccessor.groovy)
    at com.google.common.collect.Lists$TransformingRandomAccessList$1.transform(Lists.java:582)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1042)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collectMany(DefaultGroovyMethods.java:2520)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collectMany(DefaultGroovyMethods.java:2496)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceAccessor.findChildPaths(InstanceAccessor.groovy:108)
    at eu.esdihumboldt.util.groovy.paths.AbstractAccessor.findChildren(AbstractAccessor.java:102)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceAccessor.findChildren(InstanceAccessor.groovy:77)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceAccessor.findChildren(InstanceAccessor.groovy)
    at eu.esdihumboldt.util.groovy.paths.AbstractAccessor.getProperty(AbstractAccessor.java:70)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
    at Script1.sourceNameFromModellart(Script1.groovy:3)
    at sun.reflect.GeneratedMethodAccessor121.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:368)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:137)
    at Script1$_run_closure1.doCall(Script1.groovy:17)
    at Script1$_run_closure1.doCall(Script1.groovy)
    at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:278)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callSafe(AbstractCallSite.java:75)
    at eu.esdihumboldt.util.groovy.builder.BuilderBase.methodMissing(BuilderBase.groovy:94)
    at eu.esdihumboldt.util.groovy.builder.BuilderBase.createNode(BuilderBase.groovy:112)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceBuilder.createInstance(InstanceBuilder.groovy:156)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceBuilder.createInstance(InstanceBuilder.groovy:132)
    at eu.esdihumboldt.hale.common.instance.groovy.InstanceBuilder.createInstance(InstanceBuilder.groovy)
    at eu.esdihumboldt.cst.functions.groovy.internal.TargetCollector.toMultiValue(TargetCollector.java:115)
    at eu.esdihumboldt.cst.functions.groovy.GroovyTransformation$1.process(GroovyTransformation.java:137)
    at eu.esdihumboldt.util.groovy.sandbox.DefaultGroovyService.evaluate(DefaultGroovyService.java:163)
    at eu.esdihumboldt.cst.functions.groovy.GroovyTransformation.evaluate(GroovyTransformation.java:120)
    at eu.esdihumboldt.hale.common.align.custom.groovy.CustomGroovyTransformation.evaluate(CustomGroovyTransformation.java:103)
    ... 13 more

Integrate new default base map

The MapQuest map used as a base map in hale until now is no longer available. Thus we need to look for an alternative. Preferred would be a map that also uses a simple URL pattern for accessing tiles based on zoom level and x/y ordinates.

Any suggestions are welcome.

CSV reader should allow to specify decimal divisor

Currently, the CSV reader defaults to the system setting for determining the decimal divisor in numeric fields. This fails if the source file used a different decimal divisor. It should be possible to specify the divisor (. or ,) in the configuration wizard.

Add SKOS Codelist reader

Allow to import codelists using the SKOS format from Files or URLs, and allow to assign these code lists to schema elements.

Improve Alignment Migration tools to transfer Alignment from XSD to SQL

Currently, it is possible to apply an alignment created for one type of data source to another, e.g. from Shapefile to a database table, by exporting the alignment as a separate file and then by importing it to a new project which uses the new schema as source. For each cell, the user then can assign matching entities. This process can be automated to some degree by providing hale studio with information on the general vertical mapping rules applied between the original source schema and the new data source schema. In this task, we improve this wizard so that the user can provide input on what general vertical mapping rules can be applied, either by allowing selection from a concrete list or from a prefixed "profile" (here: XSD to PostNAS).

DoD:

  • User can select from a set of rules such as flattening or renaming rules to decide how the Alignment Migration tools should match elements from the XSD to the SQL schema.
  • Set of specific rules to be decided on.

Generic schema selection page for importing JDBC schemas

Right now the default behavior is to import tables and views from all schemas in a database. This should be configurable for the user, and the availability of these configuration options should be customizable for different kinds of databases.

Provide standard function for ID generation

Generalize rules as defined by the AdV to provide a general ID function. Provide options to either generate an ID or a reference. Remove the old Inspire ID function. Main goal is to provide IDs for XML/GML.

Source data not loaded from relations not being in public schema

Next problem :-)
I have a couple hundred relations in my PostgreSQL database. They are stored in some 40 database schemas. I can load the relations allright but when loading the data, hale only loads data from relations located in the "public" schema.
By the way I use upper and lower case schema and table names (but that is not the cause as data from relations with all lower case schema and relation names are not loaded either).
Extending the search path with alter role "myrole" set search_path to public, "myOtherSchema" doesn't help either.

Application is very slow on Linux with GTK ~3.18

This is due to a bug in the underlying SWT implementation. The same issue can be observed with Eclipse Mars. In Eclipse Neon the problem seems to be fixed. An update to Eclipse Neon however is not a trivial task for hale, as some UI mechanisms retained from Eclipse 3 seem to be no longer supported.

Workaround is switching to GTK 2 for running hale. This can be done by adapting the HALE.ini file.
You need to add the following lines before the -vmargs line:

--launcher.GTK_Version
2

Use asynchronous HTTP client for WFS-T requests

...because otherwise responses may get lost that are returned while hale is still sending request data.

Observed with deegree that may return responses when the request data has not been fully received yet. This can be problematic when trying to determine why deegree aborts the connection (as the reason cannot be found in the deegree logs).

Prevent preemptive closing of internal database connection

A SharedDatabaseConnection may be closed even if instances retrieved via InstanceReferences are still in use.
Not sure why that happens, maybe only sub-instances/-groups are still in use, while the main instance was garbage collected.

Add MS SQL Server Reader

Add a schema and an instance reader to read from MS SQL Server databases. Support Geometry and Geography data types, as well as arrays. Read out as many constraints as possible from the schema. In case of Arcs, interpolate them as described in #181.

DoD:

  • Automatically test with MS SQL Server 2012 or later

Better usage of space in Alignment/Mapping Views

Currently, the size of the schema element display is fixed and doesn't use space if the view is large. This limits element label recognizability, especially when filters are present, and should be improved.

Provide an augmentation function to assign values from a collector

This function allows assigning values to any target element from any collector defined previously, either in a Groovy Script or in a "Define Collector" augmentation function (see #209).

Workflow:

  1. Click on any target property element
  2. After confirmation of the Cell entities, set which defined collector to use

Use Cases:

  • Collect and create references in GML

Configurable tile-based maps

Add the possibility to define custom tile-based maps (based on a tile pattern).
Functionality should be similar (in principle) to defining custom maps based on a WMS.

see #64

Error in display of transformed data

When switching between synchronisation models in the Transformed Data view, I often get the following error:

Problems occurred when invoking code from plug-in: "org.eclipse.jface".

java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?)
    at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1692)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.SampleTransformInstanceSelector$InstanceSelectorControl.updateFeatureTypesSelection(SampleTransformInstanceSelector.java:285)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.SampleTransformInstanceSelector$InstanceSelectorControl.updateInDisplayThread(SampleTransformInstanceSelector.java:174)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.SampleTransformInstanceSelector$InstanceSelectorControl.access$0(SampleTransformInstanceSelector.java:172)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.SampleTransformInstanceSelector$InstanceSelectorControl$2.update(SampleTransformInstanceSelector.java:126)
    at java.util.Observable.notifyObservers(Observable.java:159)
    at java.util.Observable.notifyObservers(Observable.java:115)
    at eu.esdihumboldt.hale.ui.service.instance.sample.internal.InstanceSampleServiceImpl.setReferenceInstances(InstanceSampleServiceImpl.java:52)
    at eu.esdihumboldt.hale.ui.views.data.SourceDataView.onSelectionChange(SourceDataView.java:97)
    at eu.esdihumboldt.hale.ui.views.data.AbstractDataView.selectionChanged(AbstractDataView.java:346)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.InstanceServiceSelector$InstanceSelectorControl.updateSelection(InstanceServiceSelector.java:427)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.InstanceServiceSelector$InstanceSelectorControl$2.selectionChanged(InstanceServiceSelector.java:159)
    at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:163)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
    at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
    at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:160)
    at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2197)
    at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1228)
    at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1257)
    at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:242)
    at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:236)
    at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:408)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362)

Also, an additional dropdown appears that is empty an inactive.

Steps for reproduction:

  1. Load ALKIS to INSPIRE Addresses Project
  2. Pick AX_LageBezeichnungMitHausnummer as the Source Data Type
  3. Pick Random/Filtered Instances
  4. Pick Address

Support SSL connection to PostgreSQL/PostGIS

Our central PostgreSQL/PostGIS server requires users to connect using ssl. When trying to connect to it from Hale I receive this error:
org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "hostip", user "username", database "dbname", SSL off
When entering the credentials there should be a choice of how to connect to the db. In e.g. QGIS these are the choices for SSL:

  • disable
  • allow
  • prefer
  • require

maybe disable and require are sufficient, could then be done with a checkbox connect using SSL defrault would be no

Support for formatted number output

Currently, hale uses java standard number serialization, but in many situations a defined number format, with a fixed number of decimals before and after the point, potentially with leading zeroes is required. It should be possible to define this for formats that don't have a constraint expressing that (many databases do, but XSD doesn't). The preferred implementation for this is as a constraint on the property, with a writer configuration option.

DoD:

  • Provide control for this in XML only.

Target URL should be trimmed in AppSchema REST export

Hi,

I'm facing a problem with exporting HALE alignments as Geoserver App-Schema REST [Direct Upload]: The export always fails with HTTP exception "Method Not Allowed".

The Geoserver I'm using is a local installation straight from the OS X installer with no additional workspaces or other customisation. I have tried both Geoserver 2.8.5 and 2.9.1 running on the packaged jetty, the result is the same.

Based on the Geoserver log it seems to me that HALE is trying to make a DELETE operation for following resource: /rest/workspaces/nns/datastores/target.xml The "nns" workspace does not exist on the Geoserver.

The alignment is a very simple one based of the ProtectedSites project created by the INSPIRE Interactive Data Specifications application (http://inspire-regadmin.jrc.ec.europa.eu/dataspecification/FindYourScope.action). The source schema is the PS 4.0 XML Schema (http://inspire.ec.europa.eu/schemas/ps/4.0/ProtectedSites.xsd) and the source data is read from a local GML file containing a wfs:FeatureCollection of ProtectedSite 4.0 features (identity transformation).

I'm using the HALE 3.0.0 from the installed with the Mac Installer from https://www.wetransform.to/downloads/

Stack trace:

eu.esdihumboldt.hale.io.geoserver.rest.ResourceException: org.apache.http.client.HttpResponseException: Method Not Allowed at eu.esdihumboldt.hale.io.geoserver.rest.AbstractResourceManager.delete(AbstractResourceManager.java:302) at eu.esdihumboldt.hale.io.appschema.writer.AppSchemaMappingUploader.publishAppSchemaDataStore(AppSchemaMappingUploader.java:121) at eu.esdihumboldt.hale.io.appschema.writer.AppSchemaMappingUploader.handleMapping(AppSchemaMappingUploader.java:80) at eu.esdihumboldt.hale.io.appschema.writer.AbstractAppSchemaConfigurator.execute(AbstractAppSchemaConfigurator.java:92) at eu.esdihumboldt.hale.common.core.io.impl.AbstractIOProvider.execute(AbstractIOProvider.java:102) at eu.esdihumboldt.hale.ui.io.IOWizard$3.run(IOWizard.java:687) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119) Caused by: org.apache.http.client.HttpResponseException: Method Not Allowed at eu.esdihumboldt.hale.io.geoserver.rest.AbstractResourceManager$EmptyResponseHandler.handleResponse(AbstractResourceManager.java:463) at eu.esdihumboldt.hale.io.geoserver.rest.AbstractResourceManager$EmptyResponseHandler.handleResponse(AbstractResourceManager.java:1) at org.apache.http.client.fluent.Response.handleResponse(Response.java:90) at eu.esdihumboldt.hale.io.geoserver.rest.AbstractResourceManager.delete(AbstractResourceManager.java:299) ... 6 more

Project variables

Variables for use in the mapping, which can be defined in the project and overridden for the transformation.

TODOs:

  • Consistent behavior regarding variable replacement in transformation functions
  • Support for project variables when validating user input to transformation functions
  • Documentation in hale help

Support basic authentication for WFS-T upload

Currently no authentication is supported when using the InstanceWriters that upload data to a WFS-T interface. At least HTTP Basic Authentication should be supported.

DoD:

  • WFS-T InstanceWriters support HTTP Basic Authentication given a username and a password as credentials
  • User and password parameters can be provided via the command line interface
  • User and password can be provided in the export wizard

Update documentation for release

Add documentation on new features:

  • Collectors in Groovy scripts
  • Priorities for type cells
  • Multiple results for Groovy type transformations
  • Project variables
  • Custom transformation functions
  • Filters for CLI
  • Reference to hale-cli project

Update of property relation to use super type fails

Steps to reproduce:

  • Create a relation on a property of a type that is present also in a super type
  • Change the relation (edit) to use the property in the super type instead
  • Relation still points to the property of the sub-type

Workaround:

  • Clear the type / cell selection when editing the cell, then select the super type and property

Interpolate Arcs during Import

Hale studio doesn't support Arcs other than passing them through. They can't be rendered in the map view, and when a geometry with arcs is processed (buffered, aggregated), the arc isn't taken into account correctly. Therefore we need to interpolate any arcs during the reading process, to a linestring made of straight segments.

The interpolation method must take topology into account, i.e. if two arc nodes or segments touch each other, that relation needs to be maintained. There may be no new gaps or overlaps.

DoD:

  • Add an option to interpolate arcs at least the following readers: JDBC, GML
  • This option needs a single control: maximum positional error
  • Process all arcs

Implementation suggestion: Use grid based iterative interpolation

Specific cell order in alignment file

Having a reproducible order for cells in an alignment when it is saved would allow for easier comparison in a diff.
It is suggested to do the ordering based on the cell target(s).

Error in clearing project

I got the following error when hale cleaned the project during loading of a new project:

java.lang.reflect.InvocationTargetException
    at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:420)
    at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:500)
    at eu.esdihumboldt.hale.ui.util.io.ThreadProgressMonitor$2.run(ThreadProgressMonitor.java:133)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:172)
    at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387)
    at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1002)
    at eu.esdihumboldt.hale.ui.io.IOWizard.performFinish(IOWizard.java:580)
    at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:799)
    at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:429)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:619)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:827)
    at org.eclipse.jface.window.Window.open(Window.java:803)
    at eu.esdihumboldt.hale.ui.service.project.internal.ProjectServiceImpl$7.run(ProjectServiceImpl.java:790)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:186)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4761)
    at eu.esdihumboldt.hale.ui.service.project.internal.ProjectServiceImpl.open(ProjectServiceImpl.java:781)
    at eu.esdihumboldt.hale.ui.service.project.handler.OpenProjectHandler.execute(OpenProjectHandler.java:40)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:252)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:234)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:493)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:486)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:799)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.handleWidgetSelection(HandledContributionItem.java:675)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access$7(HandledContributionItem.java:659)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem$4.handleEvent(HandledContributionItem.java:592)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:694)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:606)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
    at eu.esdihumboldt.hale.ui.application.Application.run(Application.java:117)
    at eu.esdihumboldt.hale.ui.application.Application.run(Application.java:1)
    at eu.esdihumboldt.hale.common.app.AbstractApplication.run(AbstractApplication.java:51)
    at eu.esdihumboldt.hale.common.app.AbstractApplication.start(AbstractApplication.java:33)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
Caused by: org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?))
    at org.eclipse.swt.SWT.error(SWT.java:4491)
    at org.eclipse.swt.SWT.error(SWT.java:4406)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:208)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4761)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.InstanceServiceSelector$InstanceSelectorControl$7.datasetChanged(InstanceServiceSelector.java:268)
    at eu.esdihumboldt.hale.ui.service.instance.internal.AbstractInstanceService.notifyDatasetChanged(AbstractInstanceService.java:242)
    at eu.esdihumboldt.hale.ui.service.instance.internal.orient.OrientInstanceService.clearTransformedInstances(OrientInstanceService.java:511)
    at eu.esdihumboldt.hale.ui.service.instance.internal.AbstractInstanceService$2.alignmentCleared(AbstractInstanceService.java:90)
    at eu.esdihumboldt.hale.ui.service.align.internal.AbstractAlignmentService.notifyAlignmentCleared(AbstractAlignmentService.java:63)
    at eu.esdihumboldt.hale.ui.service.align.internal.AlignmentServiceImpl.clean(AlignmentServiceImpl.java:174)
    at eu.esdihumboldt.hale.ui.service.align.internal.AlignmentServiceImpl$1.onClean(AlignmentServiceImpl.java:69)
    at eu.esdihumboldt.hale.ui.service.project.internal.AbstractProjectService.notifyClean(AbstractProjectService.java:113)
    at eu.esdihumboldt.hale.ui.service.project.internal.ProjectServiceImpl$3.run(ProjectServiceImpl.java:516)
    at eu.esdihumboldt.hale.ui.util.io.ThreadProgressMonitor$1.run(ThreadProgressMonitor.java:121)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119)
Caused by: java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?)
    at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1692)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.InstanceServiceSelector$InstanceSelectorControl.updateTypesSelection(InstanceServiceSelector.java:308)
    at eu.esdihumboldt.hale.ui.views.data.internal.filter.InstanceServiceSelector$InstanceSelectorControl$7$1.run(InstanceServiceSelector.java:272)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:172)
    at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387)
    at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:500)
    at eu.esdihumboldt.hale.ui.util.io.ThreadProgressMonitor$2.run(ThreadProgressMonitor.java:133)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:172)
    at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387)
    at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1002)
    at eu.esdihumboldt.hale.ui.io.IOWizard.performFinish(IOWizard.java:580)
    at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:799)
    at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:429)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:619)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:827)
    at org.eclipse.jface.window.Window.open(Window.java:803)
    at eu.esdihumboldt.hale.ui.service.project.internal.ProjectServiceImpl$7.run(ProjectServiceImpl.java:790)
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:186)
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4761)
    at eu.esdihumboldt.hale.ui.service.project.internal.ProjectServiceImpl.open(ProjectServiceImpl.java:781)
    at eu.esdihumboldt.hale.ui.service.project.handler.OpenProjectHandler.execute(OpenProjectHandler.java:40)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:252)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:234)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:493)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:486)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:799)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.handleWidgetSelection(HandledContributionItem.java:675)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access$7(HandledContributionItem.java:659)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem$4.handleEvent(HandledContributionItem.java:592)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:694)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:606)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
    at eu.esdihumboldt.hale.ui.application.Application.run(Application.java:117)
    at eu.esdihumboldt.hale.ui.application.Application.run(Application.java:1)
    at eu.esdihumboldt.hale.common.app.AbstractApplication.run(AbstractApplication.java:51)
    at eu.esdihumboldt.hale.common.app.AbstractApplication.start(AbstractApplication.java:33)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1515)

Paginate/Partition Requests to WFS as a data source

When performing "Transform External Data" or "Import Source Data", hale should partition requests, e.g. by using the WFS 2.0 pagination capabilities or by using WFS 1.1.0 vendor-specific parameters.

Ideally, hale first requests resultType=hits, and then uses &startIndex=0&maxFeatures=500 for individual requests. This feature might require the user to select the type of WFS (Geoserver or deegree, ...)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.