Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Change] Finished implementing methods for ChangeAtlas #280

Merged
merged 4 commits into from
Nov 27, 2018

Conversation

matthieun
Copy link
Collaborator

Description:

Finished implementing methods for ChangeAtlas. Also added some tests.

On the side: Added a few methods to Iterables and PolyLine, for convenience in tests.

Potential Impact:

N/A

Unit Test Approach:

Test various use cases for changing features in a ChangeAtlas

Test Results:

All pass except one that is ignored, as it will succeed when relations can self remove missing members.


In doubt: Contributing Guidelines

Copy link
Contributor

@lucaspcram lucaspcram left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few feedback comments.

if (this.bounds == null)
{
// Stream it to make sure the "Iterable" signature is used here (vs. Located, which
// would stack overflow).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hah, good catch.

if (this.metaData == null)
{
final AtlasSize size = new AtlasSize(this);
this.metaData = this.source.metaData().copyWithNewSize(size).copyWithNewOriginal(false);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens here if the source metadata is also null?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NPE!!!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thinking about this some more, is it ever possible for metaData to actually be null in a valid Atlas? I don't think so. It looks like PackedAtlasSerializer will throw an exception if it cannot deserialize a field, so you'll never have a null metadata from a PackedAtlas, at least.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added a check anyway.

@@ -120,61 +139,65 @@ public Node node(final long identifier)
@Override
public long numberOfAreas()
{
throw new UnsupportedOperationException();
return Iterables.size(areas());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be worth caching these values once you've computed them with Iterables.size()? What do you think? Maybe it's just unnecessary code bloat?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

private Optional<Long> numberOfAreas = Optional.empty();
.
.
.
public long numberOfAreas()
{
    if (numberOfAreas.isPresent()) {
         return numberOfAreas.get();
    } else {
        numberOfAreas = Optional.of(Iterables.size(areas()));
        return numberOfAreas.get();
    }
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea.

getIdentifier()));
final AtlasEntity memberChangeEntity = getChangeAtlas().entity(item.getIdentifier(),
item.getType());
if (memberChangeEntity == null)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once we update the member fetching for ChangeRelation, seeing this exception will mean something went seriously wrong - ie. it's a good sanity check that our code is working correctly.

/**
* @author matthieun
*/
public class ChangeAtlasTest
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good stuff.

@lucaspcram lucaspcram merged commit 97537bc into osmlab:change Nov 27, 2018
@matthieun matthieun deleted the change1 branch November 27, 2018 21:11
lucaspcram pushed a commit that referenced this pull request Dec 12, 2018
* [Change] Skeleton for Atlas Change feature (#273)

* test change ideas

* more

* better comments

* test skeleton

* test and more details

* more testing and validation

* refactoring

* validation public

* move around and fix test

* touchup

* code review comments and shallow bloated features and more testing

* added bloated relation

* added test

* added relation testing to edge and node

* fix compilation errors

* finished bloated features and related tests

* added missing change items

* [Change] Finished implementing methods for ChangeAtlas (#280)

* few changes and some tests

* more tests

* add synchronized

* code review comments

* [Change] More ChangeAtlas updates (#284)

* Fixed entitiesFor if an entity was missing

* Checkstyle and comment change

* ChangeNodes now filter out edges which are connected but do not exist

* ChangeNodes now filter out parent relations which do not exist.

* Checkstyle correction in BloatedAtlas interface BloatedEntity, and
FeatureChange comment update.

* Added a ChangeAtlasTest and ChangeAtlasTestRule. Remove these before PR

* Implemented proper bounding for all the bloated entities

* Removed local ChangeAtlasTest

* Fixed spotless errors. but now unit tests are failing

* Fixed a bunch of issues with bounds calculation

* Spotless

* [Change] Fixed failing unit tests (#285)

* Fixed failing unit tests

* Fixed a typo

* [Change] Add validation and related testing to FeatureChange and Change (#286)

* with failing tests

* Validation

* synchronize add and get

* [Change] Lots of filtering implemented (#287)

* Edges now filter themselves out if one of their connected nodes is missing

* Relations now filter out members which do not exist. ChangeAtlas filters empty/shallow relations

* Added a test to demonstrate that shallow relation removal is robust

* Spotless apply

* Added some additional relation tests

* Updated a comment

* [Change] ChangeAtlas validation (#288)

* tests shuffle

* All tests

* spotless

* logger not used

* [Change] Simple refactor and Javadoc (#289)

* compilation and sonar

* forgotten some methods

* package simplification and Javadoc

* forgot tests

* [Change] More complex unit tests (#290)

* add more complex unit tests

* AtlasChangeGenerator

* Added shortcuts for tags

* [Change] Ability to merge FeatureChange objects (#291)

* Added feature change mergeability

* Attempt merge in change

* more tests

* even more tests

* last one?

* [Change] Fixed bug with missing parent relations (#292)

* relation member feature merging broken

* Merge relations in many more places

* Fix tests and change osmIdentifier API in relation

* Added equality tests

* Some cleanup from testing

* Fixed tests and added new relation based generator

* [Change] Keep track of explicitly removed relation members (#295)

* Keep track of explicitly removed relation members

* use method overloading

* Fixed issue where excluded members were wiped in RelationMemberList (#298)

* [Change] Added an AtlasDiff class to produce Changes from a before and after Atlas (#293)

* Started working on a diff generator

* Working on basic AtlasDiff

* Still trying to make valid test case

* Removed relations from test atlas

* Removed node from before atlas

* Still working on diff

* Continuing draft of the AtlasDiff

* Saving temporary working changes

* Lots more doc comments

* Added more comments

* Fixed compilation errors after rebase

* Working on modified entities, more comments

* Working on modify case.

* Lots of new stuff. Doesnt compile lol

* Trying node diffs

* Trying to get parent relations test to work

* Refactor name

* Working on relation support. THings may need to change

* More progress

* getTagChangeIfNecessary now respects useBloated and saveGeo flags. Also fixed a bug in parentRelationIfNec

* Finished member in relation diffing

* Added edge diff

* Added the rest of the changeIfNecessary method

* Relation diffs and more testing

* Finished implementing tests

* Checkstyle and spotless

* Added PackedAtlasCloning equality to tests

* Updated a test

* Tests still failing even after rebase :(

* Isolating bug using testatlas

* Trying to fix bug...

* Further bugfix. Using non-bloated entities still does not work

* Expose bug when using non-bloated entities

* Bug fix in place. Disallowing non-Bloated entities for FeatureChanges. Need to refactor stuff.

* Removed all geometry matching related code. This feature is not necessary due to improved WaySectionProcessor.

* Removed TODOs in AtlasDiff

* Removed useBloatedEntities option

* AtlasDiff now returns an Optional<Change>, and empty Changes are disallowed by the validator

* Fixed Sonar issues in AtlasDiff and AtlasDiffHelper

* Refactored interface for BloatedRelation::withMembers

* Rename variables for clarity

* Fixed awkward copy-pasted typo

* Minor method name refactor

* Fixed a unit test that used a non-Bloated type to create a feature change

* Refactored withMembers to be more null-safe

* Added javadoc

* Removed old method

* Fixed some Sonar issues. Mostly just ignoring false positives (#304)

* Re-arrange NOSONAR locations
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants