@Before public void setUp() throws Exception { // setup property file data = File.createTempFile("retype", "data", new File("./target")); data.delete(); data.mkdir(); final String fileName = MockData.PRIMITIVEGEOFEATURE.getLocalPart() + ".properties"; URL properties = MockData.class.getResource(fileName); IOUtils.copy(properties.openStream(), new File(data, fileName)); // build a feature type with less attributes, extra attributes, type changes SimpleFeatureTypeBuilder ftb = new SimpleFeatureTypeBuilder(); ftb.add("description", String.class); ftb.add("pointProperty", MultiPoint.class); // poly -> multi-poly ftb.add("intProperty", Long.class); // int -> long ftb.add("dateTimeProperty", Date.class); // timestamp -> date ftb.add("newProperty", String.class); // new property ftb.setName(RENAMED); // rename type primitive = ftb.buildFeatureType(); PropertyDataStore pds = new PropertyDataStore(data); rts = new RetypingDataStore(pds) { @Override protected SimpleFeatureType transformFeatureType(SimpleFeatureType original) throws IOException { if (original.getTypeName().equals(MockData.PRIMITIVEGEOFEATURE.getLocalPart())) return primitive; else return super.transformFeatureType(original); } @Override protected String transformFeatureTypeName(String originalName) { if (originalName.equals(MockData.PRIMITIVEGEOFEATURE.getLocalPart())) return primitive.getTypeName(); else return super.transformFeatureTypeName(originalName); } }; // build a filter that will retrieve one feature only FilterFactory ff = CommonFactoryFinder.getFilterFactory(null); fid = RENAMED + ".f001"; fidFilter = ff.id(Collections.singleton(ff.featureId(fid))); }
@After public void tearDown() throws Exception { IOUtils.delete(data); }
protected void doTestRasterPlacemark(boolean doPlacemarks) throws Exception { // the style selects a single feature final String requestUrl = "wms/reflect?layers=" + getLayerId(MockData.BASIC_POLYGONS) + "&styles=&format_options=mode:refresh;kmscore:0;kmplacemark:" + doPlacemarks + "&format=" + KMZMapOutputFormat.MIME_TYPE; MockHttpServletResponse response = getAsServletResponse(requestUrl); assertEquals(KMZMapOutputFormat.MIME_TYPE, response.getContentType()); ZipFile zipFile = null; try { // create the kmz File tempDir = org.geoserver.util.IOUtils.createRandomDirectory("./target", "kmplacemark", "test"); tempDir.deleteOnExit(); File zip = new File(tempDir, "kmz.zip"); zip.deleteOnExit(); FileOutputStream output = new FileOutputStream(zip); FileUtils.writeByteArrayToFile(zip, getBinary(response)); output.flush(); output.close(); assertTrue(zip.exists()); // unzip and test it zipFile = new ZipFile(zip); ZipEntry entry = zipFile.getEntry("wms.kml"); assertNotNull(entry); assertNotNull(zipFile.getEntry("images/layers_0.png")); // unzip the wms.kml to file byte[] buffer = new byte[1024]; int len; InputStream inStream = zipFile.getInputStream(entry); File temp = File.createTempFile("test_out", "kmz", tempDir); temp.deleteOnExit(); BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(temp)); while ((len = inStream.read(buffer)) >= 0) outStream.write(buffer, 0, len); inStream.close(); outStream.close(); // read in the wms.kml and check its contents Document document = dom(new BufferedInputStream(new FileInputStream(temp))); // print(document); assertEquals("kml", document.getDocumentElement().getNodeName()); if (doPlacemarks) { assertEquals( getFeatureSource(MockData.BASIC_POLYGONS).getFeatures().size(), document.getElementsByTagName("Placemark").getLength()); XMLAssert.assertXpathEvaluatesTo("3", "count(//kml:Placemark//kml:Point)", document); } else { assertEquals(0, document.getElementsByTagName("Placemark").getLength()); } } finally { if (zipFile != null) { zipFile.close(); } } }