/** * Collects the per TileLayer affected bounds * * @see org.geoserver.wfs.TransactionListener#dataStoreChange(org.geoserver.wfs.TransactionEvent) */ public void dataStoreChange(final TransactionEvent event) throws WFSException { log.info("DataStoreChange: " + event.getLayerName() + " " + event.getType()); try { dataStoreChangeInternal(event); } catch (RuntimeException e) { // Do never make the transaction fail due to a GWC error. Yell on the logs though log.log(Level.WARNING, "Error pre computing the transaction's affected area", e); } }
/** * Collects the per TileLayer affected bounds * * @see * org.geoserver.wfs.TransactionListener#dataStoreChange(org.geoserver.wfs.TransactionEvent) */ public void dataStoreChange(final TransactionEvent event) throws WFSException { log.info("DataStoreChange: " + event.getLayerName() + " " + event.getType()); try { dataStoreChangeInternal(event); } catch (RuntimeException e) { // Do never make the transaction fail due to a GWC error. Yell on the logs though log.log(Level.WARNING, "Error pre computing the transaction's affected area", e); } }
public void testDataStoreChangeOfNoInterest() { TransactionEvent event = mock(TransactionEvent.class); when(event.getSource()).thenReturn(new Object()); listener.dataStoreChange(event); verify(event, times(1)).getLayerName(); verify(event, times(1)).getType(); verify(event, times(1)).getSource(); verifyNoMoreInteractions(event, mediator); }
public void testDataStoreChangePostInsert() { InsertElementType insert = mock(InsertElementType.class); TransactionEvent event = mock(TransactionEvent.class); QName layerName = new QName("testType"); when(event.getLayerName()).thenReturn(layerName); when(event.getSource()).thenReturn(insert); when(event.getType()).thenReturn(TransactionEventType.POST_INSERT); listener.dataStoreChange(event); // no need to do anything at post insert, bounds computed at pre_insert verifyNoMoreInteractions(mediator); }
@Override public void dataStoreChange(TransactionEvent event) throws WFSException { TransactionEventType eventType = event.getType(); Integer affectedFeatures = event.getAffectedFeatures().size(); FeatureType featureType = event.getAffectedFeatures().getSchema();
public void testDataStoreChangeDoesNotAffectTileLayer() { InsertElementType insert = mock(InsertElementType.class); TransactionEvent event = mock(TransactionEvent.class); QName layerName = new QName("testType"); when(event.getLayerName()).thenReturn(layerName); when(event.getSource()).thenReturn(insert); when(event.getType()).thenReturn(TransactionEventType.PRE_INSERT); when( mediator.getTileLayersByFeatureType(eq(layerName.getNamespaceURI()), eq(layerName.getLocalPart()))).thenReturn(Collections.EMPTY_SET); listener.dataStoreChange(event); // nothing else to do verify(mediator, times(1)).getTileLayersByFeatureType(eq(layerName.getNamespaceURI()), eq(layerName.getLocalPart())); verifyNoMoreInteractions(mediator); }
private void dataStoreChangeInternal(final TransactionEvent event) { final Object source = event.getSource(); if (!(source instanceof InsertElementType || source instanceof UpdateElementType || source instanceof DeleteElementType)) { return; } final EObject originatingTransactionRequest = (EObject) source; checkNotNull(originatingTransactionRequest, "No original transaction request exists"); final TransactionEventType type = event.getType(); if (TransactionEventType.POST_INSERT.equals(type)) { // no need to compute the bounds, they're the same than for PRE_INSERT return; } final QName featureTypeName = event.getLayerName(); final Set<String> affectedTileLayers = gwc.getTileLayersByFeatureType( featureTypeName.getNamespaceURI(), featureTypeName.getLocalPart()); if (affectedTileLayers.isEmpty()) { // event didn't touch a cached layer return; } final SimpleFeatureCollection affectedFeatures = event.getAffectedFeatures(); final ReferencedEnvelope affectedBounds = affectedFeatures.getBounds(); final TransactionType transaction = event.getRequest(); for (String tileLayerName : affectedTileLayers) { addLayerDirtyRegion(transaction, tileLayerName, affectedBounds); } }
when(event.getType()).thenReturn(TransactionEventType.PRE_INSERT);
private void dataStoreChangeInternal(final TransactionEvent event) { final Object source = event.getSource(); if (!(source instanceof InsertElementType || source instanceof UpdateElementType || source instanceof DeleteElementType)) { return; } final EObject originatingTransactionRequest = (EObject) source; checkNotNull(originatingTransactionRequest, "No original transaction request exists"); final TransactionEventType type = event.getType(); if (TransactionEventType.POST_INSERT.equals(type)) { // no need to compute the bounds, they're the same than for PRE_INSERT return; } final QName featureTypeName = event.getLayerName(); final Set<String> affectedTileLayers = gwc.getTileLayersByFeatureType( featureTypeName.getNamespaceURI(), featureTypeName.getLocalPart()); if (affectedTileLayers.isEmpty()) { // event didn't touch a cached layer return; } final SimpleFeatureCollection affectedFeatures = event.getAffectedFeatures(); final ReferencedEnvelope affectedBounds = affectedFeatures.getBounds(); final TransactionType transaction = event.getRequest(); TransactionRequest request = TransactionRequest.adapt(transaction); for (String tileLayerName : affectedTileLayers) { addLayerDirtyRegion(request, tileLayerName, affectedBounds); } }
assertEquals(TransactionEventType.PRE_INSERT, firstEvent.getType()); assertEquals(CiteTestData.LINES, firstEvent.getLayerName()); assertEquals(TransactionEventType.POST_INSERT, secondEvent.getType()); Feature inserted = (Feature) listener.features.get(1); assertEquals(fid, inserted.getIdentifier().getID());
@Test public void testDelete() throws Exception { // perform a delete String delete = "<wfs:Transaction service=\"WFS\" version=\"1.0.0\" " + "xmlns:cgf=\"http://www.opengis.net/cite/geometry\" " + "xmlns:ogc=\"http://www.opengis.net/ogc\" " + "xmlns:wfs=\"http://www.opengis.net/wfs\"> " + "<wfs:Delete typeName=\"cgf:Points\"> " + "<ogc:Filter> " + "<ogc:PropertyIsEqualTo> " + "<ogc:PropertyName>cgf:id</ogc:PropertyName> " + "<ogc:Literal>t0000</ogc:Literal> " + "</ogc:PropertyIsEqualTo> " + "</ogc:Filter> " + "</wfs:Delete> " + "</wfs:Transaction>"; postAsDOM("wfs", delete); assertEquals(1, listener.events.size()); TransactionEvent event = (TransactionEvent) listener.events.get(0); assertTrue(event.getSource() instanceof DeleteElementType); assertEquals(TransactionEventType.PRE_DELETE, event.getType()); assertEquals(CiteTestData.POINTS, event.getLayerName()); assertEquals(1, listener.features.size()); Feature deleted = (Feature) listener.features.get(0); assertEquals("t0000", deleted.getProperty("id").getValue()); }
TransactionEvent firstEvent = (TransactionEvent) listener.events.get(0); assertTrue(firstEvent.getSource() instanceof UpdateElementType); assertEquals(TransactionEventType.PRE_UPDATE, firstEvent.getType()); assertEquals(CiteTestData.POLYGONS, firstEvent.getLayerName()); Feature updatedBefore = (Feature) listener.features.get(0); assertEquals(TransactionEventType.POST_UPDATE, secondEvent.getType()); assertEquals(CiteTestData.POLYGONS, secondEvent.getLayerName()); Feature updatedAfter = (Feature) listener.features.get(1);