private boolean _add(Placemark placemark) { synchronized (placemarkMap) { final boolean added = super.add(placemark); if (added) { placemarkMap.put(placemark.getFeature(), placemark); } return added; } }
private void _add(int index, Placemark placemark) { synchronized (placemarkMap) { super.add(index, placemark); placemarkMap.put(placemark.getFeature(), placemark); } }
private boolean _remove(Placemark placemark) { synchronized (placemarkMap) { final boolean removed = super.remove(placemark); if (removed) { placemarkMap.remove(placemark.getFeature()); } return removed; } }
protected void setDateTime(Date value, Placemark placemark) { placemark.getFeature().setAttribute(Placemark.PROPERTY_NAME_DATETIME, value); }
private void addToVectorData(final Placemark placemark) { synchronized (vectorDataNode) { if (!vectorDataNode.getFeatureCollection().contains(placemark.getFeature())) { vectorDataNode.getFeatureCollection().add(placemark.getFeature()); } } }
private void removeFromVectorData(Placemark placemark) { synchronized (vectorDataNode) { vectorDataNode.getFeatureCollection().remove(placemark.getFeature()); } }
@Override public boolean isCellEditable(int rowIndex, int columnIndex) { if (placemark != null && columnIndex == 2) { final AttributeDescriptor attributeDescriptor = placemark.getFeature().getFeatureType().getAttributeDescriptors().get(rowIndex); final Class<?> binding = attributeDescriptor.getType().getBinding(); if (String.class.isAssignableFrom(binding) || Geometry.class.isAssignableFrom(binding)) { return true; } } return false; }
@Override public int getRowCount() { return placemark != null ? placemark.getFeature().getFeatureType().getAttributeCount() : 0; }
@Override public Object getValueAt(int rowIndex, int columnIndex) { if (placemark != null) { if (columnIndex == 0) { return placemark.getFeature().getFeatureType().getDescriptor(rowIndex).getLocalName(); } else if (columnIndex == 1) { return placemark.getFeature().getFeatureType().getDescriptor(rowIndex).getType().getBinding().getSimpleName(); } else { return placemark.getFeature().getAttribute(rowIndex); } } return null; } }
@Override public Object getValueAt(int rowIndex, int columnIndex) { return vectorDataNode.getPlacemarkGroup().get(rowIndex).getFeature().getAttribute(columnIndex); } }
private void assertDateTime(Placemark mark, int year, int month, int day, int hourOfDay, int minute, int second) { final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); cal.setTime((Date) mark.getFeature().getAttribute("dateTime")); assertEquals(year, cal.get(Calendar.YEAR)); assertEquals(month, cal.get(Calendar.MONTH)); assertEquals(day, cal.get(Calendar.DATE)); assertEquals(hourOfDay, cal.get(Calendar.HOUR_OF_DAY)); assertEquals(minute, cal.get(Calendar.MINUTE)); assertEquals(second, cal.get(Calendar.SECOND)); }
@Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { if (placemark != null) { final AttributeDescriptor attributeDescriptor = placemark.getFeature().getFeatureType().getAttributeDescriptors().get(rowIndex); final Class<?> binding = attributeDescriptor.getType().getBinding(); if (String.class.isAssignableFrom(binding)) { placemark.setAttributeValue(attributeDescriptor.getLocalName(), aValue); } else if (Geometry.class.isAssignableFrom(binding)) { WKTReader reader = new WKTReader(); try { final Geometry geometry = reader.read((String) aValue); placemark.setAttributeValue(attributeDescriptor.getLocalName(), geometry); } catch (ParseException e) { // No way to handle this any further :( e.printStackTrace(); } } } }
private static void assertAreEqual(PlacemarkGroup group, FeatureCollection<SimpleFeatureType, SimpleFeature> collection) { final SimpleFeature[] features = collection.toArray(new SimpleFeature[collection.size()]); assertEquals(group.getNodeCount(), features.length); for (int i = 0; i < group.getNodeCount(); i++) { SimpleFeature pinGroupFeature = group.get(i).getFeature(); assertTrue("Feature of pin group is not contained in feature collection\n", collection.contains(pinGroupFeature)); } }
@Test public void testChangingFeature() { placemarkGroup.add(createPlacemark("p1", new PixelPos(3, 1), new GeoPos(12, 34))); placemarkGroup.add(createPlacemark("p2", new PixelPos(5, 4), new GeoPos(16, 48))); placemarkGroup.add(createPlacemark("p3", new PixelPos(6, 2), new GeoPos(-45, 80))); assertAreEqual(placemarkGroup, pinFeatureCollection); final CoordinateArraySequence coordinates = new CoordinateArraySequence( new Coordinate[]{new Coordinate(-30, 70)}); final SimpleFeature changedFeature = placemarkGroup.get(2).getFeature(); changedFeature.setDefaultGeometry(new Point(coordinates, new GeometryFactory())); assertAreEqual(placemarkGroup, pinFeatureCollection); final SimpleFeature[] features = pinFeatureCollection.toArray(new SimpleFeature[pinFeatureCollection.size()]); assertEquals(changedFeature.getDefaultGeometry(), features[2].getDefaultGeometry()); }
@Test public void testCreatePlacemark() throws Exception { final SimpleFeatureType ft = instance.getBaseFeatureType(); SimpleFeatureBuilder fb = new SimpleFeatureBuilder(ft); final SimpleFeature f = fb.buildFeature("id1", new Object[ft.getAttributeCount()]); final Placemark placemark = instance.createPlacemark(f); assertNotNull(placemark); assertSame(f, placemark.getFeature()); assertSame(instance, placemark.getDescriptor()); }
@Test public void testCreatePlacemark() throws Exception { final SimpleFeatureType ft = instance.getBaseFeatureType(); SimpleFeatureBuilder fb = new SimpleFeatureBuilder(ft); final SimpleFeature f = fb.buildFeature("id1", new Object[ft.getAttributeCount()]); final Placemark placemark = instance.createPlacemark(f); assertNotNull(placemark); assertSame(f, placemark.getFeature()); assertSame(instance, placemark.getDescriptor()); }
@Test public void testCreatePlacemark() throws Exception { final SimpleFeatureType ft = instance.getBaseFeatureType(); SimpleFeatureBuilder fb = new SimpleFeatureBuilder(ft); final SimpleFeature f = fb.buildFeature("id1", new Object[ft.getAttributeCount()]); final Placemark placemark = instance.createPlacemark(f); assertNotNull(placemark); assertSame(f, placemark.getFeature()); assertSame(instance, placemark.getDescriptor()); }
@Test public void initialState() { final double x = placemark.getPixelPos().getX(); final double y = placemark.getPixelPos().getY(); assertEquals(1.0, x, 0.0); assertEquals(1.0, y, 0.0); final Point point = (Point) placemark.getFeature().getDefaultGeometry(); assertEquals(2.0, point.getX(), 0.0); assertEquals(2.0, point.getY(), 0.0); final double lon = placemark.getGeoPos().getLon(); final double lat = placemark.getGeoPos().getLat(); assertEquals(2.0, lon, 0.0); assertEquals(2.0, lat, 0.0); }
@Test public void testVectorDataNodeAndPlacemarkGroup() { Product p = new Product("p", "pt", 512, 512); ProductNodeGroup<VectorDataNode> vectorDataGroup = p.getVectorDataGroup(); Placemark placemark = Placemark.createPointPlacemark(PointDescriptor.getInstance(), "placemark_1", null, null, new PixelPos(10, 10), null, null); VectorDataNode vectorDataNode = new VectorDataNode("Features", Placemark.createPointFeatureType("feature")); FeatureCollection<SimpleFeatureType, SimpleFeature> featureCollection = vectorDataNode.getFeatureCollection(); vectorDataGroup.add(vectorDataNode); //Also: Sets the owner of the vectorDataNode vectorDataNode.getPlacemarkGroup(); //Also: Creates the PlacemarkGroup (owner has to be set!) featureCollection.add(placemark.getFeature()); assertEquals(1, vectorDataNode.getFeatureCollection().size()); assertEquals(vectorDataNode.getFeatureCollection().size(), vectorDataNode.getPlacemarkGroup().getNodeCount()); }
@Test public void movePinByPixelPosition() { placemark.setPixelPos(new PixelPos(2.0f, 1.0f)); final double x = placemark.getPixelPos().getX(); final double y = placemark.getPixelPos().getY(); assertEquals(2.0, x, 0.0); assertEquals(1.0, y, 0.0); // todo: rq/?? - make asserts successful final Point point = (Point) placemark.getFeature().getDefaultGeometry(); assertEquals(4.0, point.getX(), 0.0); assertEquals(2.0, point.getY(), 0.0); // todo: rq/?? - make asserts successful final double lon = placemark.getGeoPos().getLon(); final double lat = placemark.getGeoPos().getLat(); assertEquals(4.0, lon, 0.0); assertEquals(2.0, lat, 0.0); }