/* Copyright (c) 2010, skobbler GmbH * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ package org.openstreetmap.josm.plugins.mapdust.service; import java.util.ArrayList; import java.util.List; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.plugins.mapdust.service.connector.response.Geometry; import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustBugContent; import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustBugProperties; import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustCommentProperties; import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustGetBugResponse; import org.openstreetmap.josm.plugins.mapdust.service.connector.response.MapdustGetBugsResponse; import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustBug; import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustComment; import org.openstreetmap.josm.plugins.mapdust.service.value.MapdustRelevance; import org.openstreetmap.josm.plugins.mapdust.service.value.Status; import org.openstreetmap.josm.plugins.mapdust.service.value.BugType; /** * The <code>MapdustConverter</code> object. Builds a MapdustBug, list of * MapdustBug based on the given response object. * * @author Bea * */ final class MapdustConverter { private MapdustConverter() { // Hide default constructor for utilities classes } /** * Builds a <code>MapdustBug</code> object from the given * <code>MapdustGetBugResponse</code> object. * * @param bugResponse A <code>MapdustGetBugResponse</code> object. * @return A <code>MapdustBug</code> object. */ static MapdustBug buildMapdustBug(MapdustGetBugResponse bugResponse) { MapdustBug bug = new MapdustBug(); if (bugResponse != null) { /* sets the id */ bug.setId(bugResponse.getId()); /* sets the coordinates */ Geometry geometry = bugResponse.getGeometry(); LatLon latLon = null; if (geometry != null && geometry.getCoordinates() != null && geometry.getCoordinates().length == 2) { Double longitude = geometry.getCoordinates()[0]; Double latitude = geometry.getCoordinates()[1]; latLon = new LatLon(latitude, longitude); } bug.setLatLon(latLon); /* sets the properties of the bug */ MapdustBugProperties bugProperties = bugResponse.getProperties(); if (bugProperties != null) { /* sets the address */ bug.setAddress(bugProperties.getAddress()); /* sets the status */ Status status = Status.getStatus(bugProperties.getStatus()); bug.setStatus(status); /* sets the type */ BugType type = BugType.getType(bugProperties.getType()); bug.setType(type); /* sets the relevance */ MapdustRelevance relevance = MapdustRelevance.getMapdustRelevance(bugProperties .getRelevance()); bug.setRelevance(relevance); /* sets the creation date */ bug.setDateCreated(bugProperties.getDateCreated()); /* sets the update date */ bug.setDateUpdated(bugProperties.getDateUpdated()); /* sets the description */ bug.setDescription(bugProperties.getDescription()); /* sets the isDefaultDescription */ boolean isDefDescr = bugProperties.getIsDefaultDescription() == 1 ? Boolean.TRUE : Boolean.FALSE; bug.setIsDefaultDescription(isDefDescr); /* sets the skobbler user id */ bug.setSkoUid(bugProperties.getSkoUid()); /* sets the external user id */ bug.setExtUid(bugProperties.getExtUid()); /* sets the nickname */ bug.setNickname(bugProperties.getNickname()); /* sets the source */ bug.setSource(bugProperties.getSource()); /* sets the kml url */ bug.setKmlUrl(bugProperties.getKmlUrl()); /* sets the number of comments */ bug.setNumberOfComments(bugProperties.getNumberOfComments()); /* sets the comments */ MapdustCommentProperties[] commentProperties = bugProperties.getComments(); MapdustComment[] commentArray = buildMapdustCommentArray(bug.getId(), commentProperties); bug.setComments(commentArray); } } return bug; } /** * Builds a list of <code>MapdustBug</code> objects based on the given * <code>MapdustGetBugsResponse</code> object. * * @param bugsResponse A <code>MapdustGetBugsResponse</code> object * @return A list of <code>MapdustBug</code> objects */ static List<MapdustBug> buildMapdustBugList( MapdustGetBugsResponse bugsResponse) { List<MapdustBug> bugsList = new ArrayList<>(); if (bugsResponse != null) { MapdustBugContent[] bugContent = bugsResponse.getFeatures(); if (bugContent != null) { for (MapdustBugContent obj : bugContent) { MapdustBug bug = buildMapdustBug(obj); bugsList.add(bug); } } } return bugsList; } /** * Builds a <code>MapdustBug</code> object from the given * <code>MapdustBugContent</code> object. * * @param bugContent A <code>MapdustBugContent</code> object * @return A <code>MapdustBug</code> object. */ private static MapdustBug buildMapdustBug(MapdustBugContent bugContent) { MapdustBug bug = new MapdustBug(); if (bugContent != null) { /* set the id */ bug.setId(bugContent.getId()); /* set the coordinates */ Geometry geometry = bugContent.getGeometry(); LatLon latLon = null; if (geometry != null && geometry.getCoordinates() != null && geometry.getCoordinates().length == 2) { Double longitude = geometry.getCoordinates()[0]; Double latitude = geometry.getCoordinates()[1]; latLon = new LatLon(latitude, longitude); } bug.setLatLon(latLon); /* set the bug properties */ MapdustBugProperties bugProperties = bugContent.getProperties(); if (bugProperties != null) { /* sets the address */ bug.setAddress(bugProperties.getAddress()); /* sets the status */ Status status = Status.getStatus(bugProperties.getStatus()); bug.setStatus(status); /* sets the type */ BugType type = BugType.getType(bugProperties.getType()); bug.setType(type); /* sets the relevance */ MapdustRelevance relevance = MapdustRelevance.getMapdustRelevance(bugProperties .getRelevance()); bug.setRelevance(relevance); /* sets the creation date */ bug.setDateCreated(bugProperties.getDateCreated()); /* sets the update date */ bug.setDateUpdated(bugProperties.getDateUpdated()); /* sets the description */ bug.setDescription(bugProperties.getDescription()); /* sets the skobbler user id */ bug.setSkoUid(bugProperties.getSkoUid()); /* sets the external user id */ bug.setExtUid(bugProperties.getExtUid()); /* sets the nickname */ bug.setNickname(bugProperties.getNickname()); /* sets the source */ bug.setSource(bugProperties.getSource()); /* sets the kml url */ bug.setKmlUrl(bugProperties.getKmlUrl()); /* sets the number of comments */ bug.setNumberOfComments(bugProperties.getNumberOfComments()); /* sets the comments */ MapdustCommentProperties[] commentProperties = bugProperties.getComments(); MapdustComment[] commentArray = buildMapdustCommentArray(bug.getId(), commentProperties); bug.setComments(commentArray); } } return bug; } /** * Builds a <code>MapdustComment</code> object based on the given arguments. * * @param bugId The id of the bug * @param commentProperties The <code>MapdustCommentProperties</code> * object. * @return A <code>MapdustComment</code> object */ private static MapdustComment buildMapdustComment(Long bugId, MapdustCommentProperties commentProperties) { MapdustComment comment = new MapdustComment(); if (bugId != null) { comment.setBugId(bugId); } if (commentProperties != null) { comment.setDateCreated(commentProperties.getDateCreated()); comment.setCommentText(commentProperties.getComment()); comment.setExtUid(commentProperties.getExtUid()); comment.setNickname(commentProperties.getNickname()); comment.setSkoUid(commentProperties.getSkoUid()); comment.setSource(commentProperties.getSource()); } return comment; } /** * Builds an array of <code>MapdustComment</code> objects based on the given * arguments. * * @param bugId the if of the bug * @param commentProperties The array of * <code>MapdusrCommentProperties</code> objects * @return An array of <code>MapdustComment</code> object */ private static MapdustComment[] buildMapdustCommentArray(Long bugId, MapdustCommentProperties[] commentProperties) { List<MapdustComment> commentList = new ArrayList<>(); if (bugId != null) { if (commentProperties != null) { for (MapdustCommentProperties obj : commentProperties) { MapdustComment comment = buildMapdustComment(bugId, obj); commentList.add(comment); } } } MapdustComment[] commentArray = commentList.toArray(new MapdustComment[0]); return commentArray; } }