private JPanel createMosaicBoundsPanel() { final TableLayout layout = new TableLayout(1); layout.setTableAnchor(TableLayout.Anchor.WEST); layout.setTableFill(TableLayout.Fill.BOTH); layout.setTableWeightX(1.0); layout.setTableWeightY(0.0); layout.setRowWeightY(1, 1.0); layout.setRowAnchor(2, TableLayout.Anchor.EAST); layout.setRowFill(2, TableLayout.Fill.NONE); layout.setTablePadding(3, 3); final JPanel panel = new JPanel(layout); panel.setBorder(BorderFactory.createTitledBorder("Mosaic Bounds")); final WorldMapPaneDataModel worldMapModel = mosaicModel.getWorldMapModel(); setMapBoundary(worldMapModel); final JPanel worldMapPanel = new RegionSelectableWorldMapPane(worldMapModel, bindingCtx).createUI(); bindingCtx.addPropertyChangeListener(new MapBoundsChangeListener()); worldMapPanel.setMinimumSize(new Dimension(250, 125)); worldMapPanel.setBorder(BorderFactory.createEtchedBorder()); final JCheckBox showSourceProductsCheckBox = new JCheckBox("Display source products"); bindingCtx.bind(MosaicFormModel.PROPERTY_SHOW_SOURCE_PRODUCTS, showSourceProductsCheckBox); boundsInputPanel = new BoundsInputPanel(bindingCtx, MosaicFormModel.PROPERTY_UPDATE_MODE); panel.add(boundsInputPanel.createBoundsInputPanel(true)); panel.add(worldMapPanel); panel.add(showSourceProductsCheckBox); return panel; }
private void adaptToModelRectangle(Rectangle2D modelRectangle) { correctBoundsIfNecessary(modelRectangle); if (modelRectangle.getWidth() != 0 && modelRectangle.getHeight() != 0 && !modelRectangle.equals(getFirstFigure().getBounds())) { updateFigure(modelRectangle); updateProperties(modelRectangle); } }
static void ensureValidBindingContext(BindingContext bindingContext) { if (bindingContext == null) { throw new IllegalArgumentException("bindingContext must be not null"); } ensureExistingProperty(bindingContext, NORTH_BOUND); ensureExistingProperty(bindingContext, SOUTH_BOUND); ensureExistingProperty(bindingContext, WEST_BOUND); ensureExistingProperty(bindingContext, EAST_BOUND); PropertySet propertySet = bindingContext.getPropertySet(); final Double northBound = propertySet.getValue(NORTH_BOUND); final Double eastBound = propertySet.getValue(EAST_BOUND); final Double southBound = propertySet.getValue(SOUTH_BOUND); final Double westBound = propertySet.getValue(WEST_BOUND); if (northBound == null && eastBound == null && southBound == null && westBound == null) { setDefaultValues(bindingContext); } else if (!geoBoundsAreValid(northBound, eastBound, southBound, westBound)) { throw new IllegalArgumentException(MessageFormat.format("Given geo-bounds ({0}, {1}, {2}, {3}) are invalid.", northBound, eastBound, southBound, westBound)); } }
private void initFigureEditor(DefaultFigureEditor editor, Product selectedProduct) { if (mustInitFigureEditor) { initGeometries(selectedProduct); final ShapeFigure polygonFigure = editor.getFigureFactory().createPolygonFigure(defaultShape, createFigureStyle( (DefaultFigureStyle) editor.getDefaultPolygonStyle())); if (polygonFigure != null) { editor.getFigureCollection().addFigure(polygonFigure); } regionSelectionInteractor.updateProperties(defaultShape.getBounds2D()); mustInitFigureEditor = false; } }
Point2D.Double lowerRight = modelToView(lowerRightGeoPos, modelToViewTransform); Point2D.Double upperLeft = modelToView(upperLeftGeoPos, modelToViewTransform); selectionRectangle = createRectangle(rectangularShape); movableRectangle = createRectangle(rectangularShape); defaultRectangle = createRectangle(rectangularShape); cursorChanger.updateRectanglesForDragCursor(); defaultShape = viewport.getViewToModelTransform().createTransformedShape(rectangularShape);
RegionSelectableWorldMapPane.ensureValidBindingContext(bindingContext); this.bindingContext = bindingContext; final RegionSelectableWorldMapPane worldMapPane = new RegionSelectableWorldMapPane(worldMapPaneDataModel, bindingContext); worldMapPaneUI = worldMapPane.createUI();
@Test public void testThatEachValueMustBeNotNull() { assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(null, validEastBound, validSouthBound, validWestBound)); assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, null, validSouthBound, validWestBound)); assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, validEastBound, null, validWestBound)); assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, validEastBound, validSouthBound, null)); }
@Test public void testThatBindingContextMustBeNotNull() { try { RegionSelectableWorldMapPane.ensureValidBindingContext(null); fail("should not come here"); } catch (IllegalArgumentException expected) { assertEquals("bindingContext must be not null", expected.getMessage()); } catch (Exception notExpected) { fail("Exception '" + notExpected.getClass().getName() + "' is not expected"); } }
private Figure getFirstFigure() { return getFigureEditor().getFigureCollection().getFigure(0); }
@Test public void testThatValuesAreInsideValidBounds() { assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(91.0, validEastBound, validSouthBound, validWestBound)); assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, 181.0, validSouthBound, validWestBound)); assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, validEastBound, -91.0, validWestBound)); assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, validEastBound, validSouthBound, -181.0)); }
@Test public void testThatPropertiesObjectAreFilledWithDefaultValuesIfAllPropertyValuesAreNull() { //preparation propertiesObject.northBound = null; propertiesObject.eastBound = null; propertiesObject.southBound = null; propertiesObject.westBound = null; //execution RegionSelectableWorldMapPane.ensureValidBindingContext(bindingContext); //verification assertEquals(Double.valueOf(75.0), propertiesObject.northBound); assertEquals(Double.valueOf(30.0), propertiesObject.eastBound); assertEquals(Double.valueOf(35.0), propertiesObject.southBound); assertEquals(Double.valueOf(-15.0), propertiesObject.westBound); }
private void handleZoom() { final FigureCollection figureCollection = getFigureEditor().getFigureCollection(); if (figureCollection.getFigureCount() == 0) { return; } final Rectangle2D modelBounds = figureCollection.getFigure(0).getBounds(); final AffineTransform modelToViewTransform = worldMapPane.getLayerCanvas().getViewport().getModelToViewTransform(); final Shape transformedShape = modelToViewTransform.createTransformedShape(modelBounds); movableRectangle.setRect(transformedShape.getBounds2D()); selectionRectangle.setRect(movableRectangle); cursorChanger.updateRectanglesForDragCursor(); }
setMapBoundary(worldMapModel); final JPanel worldMapPanel = new RegionSelectableWorldMapPane(worldMapModel, bindingCtx).createUI(); bindingCtx.addPropertyChangeListener(new MapBoundsChangeListener()); worldMapPanel.setMinimumSize(new Dimension(250, 125));
@Test public void testThatEastValueMustBeBiggerThanWestValue() { assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, 10.0, validSouthBound, 10.0)); }
@Test /** * It suffices to test one invalid property value, since the implementation responsible for testing whether * the property values are valid is well tested in {@link RegionSelectableWorldMapPane_BoundingValuesValidation} */ public void testThatIllegalArgumentExceptionIsThrownIfAnyPropertyValueIsInvalid() { //preparation bindingContext.getPropertySet().setValue(NORTH_BOUND, null); try { //execution RegionSelectableWorldMapPane.ensureValidBindingContext(bindingContext); } catch (IllegalArgumentException expected) { //verification assertEquals("Given geo-bounds (" + null + ", " + EAST_BOUND + ", " + SOUTH_BOUND + ", " + WEST_BOUND + " are invalid.", expected.getMessage()); } catch (Exception notExpected) { fail("Exception '" + notExpected.getClass().getName() + "' not expected"); } }
@Test public void testCorrectBoundsIfNecessary_noCorrection() { final Rectangle2D.Double toCorrect = new Rectangle2D.Double(-175.0, -85.0, 140.0, 110.0); RegionSelectableWorldMapPane.correctBoundsIfNecessary(toCorrect); assertEquals(-175.0, toCorrect.getMinX(), 1e-8); assertEquals(-85.0, toCorrect.getMinY(), 1e-8); assertEquals(-175.0 + 140.0, toCorrect.getMaxX(), 1e-8); assertEquals(-85.0 + 110.0, toCorrect.getMaxY(), 1e-8); }
@Test public void testThatReturnValueIsFalseIfAllBoundingValuesAreNull() { assertFalse(RegionSelectableWorldMapPane.geoBoundsAreValid(null, null, null, null)); }
@Test public void testValidValuesAreNotChanged() { //preparation propertiesObject.northBound = 15.0; propertiesObject.eastBound = 15.0; propertiesObject.southBound = -15.0; propertiesObject.westBound = -15.0; final PropertyContainer objectBacked = PropertyContainer.createObjectBacked(propertiesObject); //execution RegionSelectableWorldMapPane.ensureValidBindingContext(new BindingContext(objectBacked)); //verification assertEquals(Double.valueOf(15.0), propertiesObject.northBound); assertEquals(Double.valueOf(15.0), propertiesObject.eastBound); assertEquals(Double.valueOf(-15.0), propertiesObject.southBound); assertEquals(Double.valueOf(-15.0), propertiesObject.westBound); }
@Test public void testCorrectBoundsIfNecessary_correction_negative_x() { final Rectangle2D.Double toCorrect = new Rectangle2D.Double(-185.499991, -90.0, 360.0, 180.0); RegionSelectableWorldMapPane.correctBoundsIfNecessary(toCorrect); assertEquals(-180.0, toCorrect.getMinX(), 1e-8); assertEquals(174.50000899999895, toCorrect.getMaxX(), 1e-8); assertEquals(-90.0, toCorrect.getMinY(), 1e-8); assertEquals(90.0, toCorrect.getMaxY(), 1e-8); assertTrue(toCorrect.getMinX() + toCorrect.getWidth() <= 180.0); assertTrue(toCorrect.getMinY() + toCorrect.getHeight() <= 90.0); } }
@Test public void testValidBounds() { assertTrue(RegionSelectableWorldMapPane.geoBoundsAreValid(validNorthBound, validEastBound, validSouthBound, validWestBound)); }