List of usage examples for javax.imageio ImageIO createImageInputStream
public static ImageInputStream createImageInputStream(Object input) throws IOException
From source file:com.moviejukebox.scanner.artwork.PosterScanner.java
/** * Read an URL and get the dimensions of the image using a specific image * type/*from w w w . j av a2s . c o m*/ * * @param imageUrl * @param imageType * @return */ public static Dimension getUrlDimensions(String imageUrl, String imageType) { Dimension imageDimension = new Dimension(0, 0); @SuppressWarnings("rawtypes") Iterator readers = ImageIO.getImageReadersBySuffix(imageType); if (readers.hasNext()) { ImageReader reader = (ImageReader) readers.next(); try (InputStream in = new URL(imageUrl).openStream(); ImageInputStream iis = ImageIO.createImageInputStream(in)) { reader.setInput(iis, Boolean.TRUE); imageDimension.setSize(reader.getWidth(0), reader.getHeight(0)); } catch (IOException ex) { LOG.debug("getUrlDimensions error: {}: can't open url: {}", ex.getMessage(), imageUrl); } finally { reader.dispose(); } } return imageDimension; }
From source file:net.naijatek.myalumni.modules.members.presentation.action.MaintainMemberAction.java
public ActionForward updateMemberAvatar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionMessages errors = new ActionMessages(); String fileTypes = SystemConfigConstants.CONTENT_TYPE; String avatarDir = getSysProp().getValue("AVATAR.FILEPATH"); MyAlumniUserContainer continer = getUserContainer(request); int maxFileSize = 0; int maxHeight = 0; int maxWidth = 0; String overwrite = "false"; if (isCancelled(request)) { return mapping.findForward(BaseConstants.FWD_CANCEL); }// www. j a va 2s . c o m MemberVO token = getCurrentLoggedInUser(request); MemberForm memberForm = (MemberForm) form; if (!memberSecurityCheck(request, token)) { return mapping.findForward(BaseConstants.FWD_LOGIN); } // Set Max Size try { maxFileSize = Integer.parseInt(getAppProp().getValue("avatar.image.size").trim()); } catch (Exception e) { maxFileSize = 120000; // 120000 Bytes = 120 KB } // Set Max Height try { maxHeight = Integer.parseInt(getAppProp().getValue("avatar.image.height").trim()); } catch (Exception e) { maxHeight = 200; // 200 px } // Set Max Width try { maxWidth = Integer.parseInt(getAppProp().getValue("avatar.image.width").trim()); } catch (Exception e) { maxWidth = 200; // 200 px } FormFile importFile = memberForm.getAvatarUpload(); overwrite = StringUtil.safeString(memberForm.getAvatarUploadOverwrite()); String importFileName = getCurrentLoggedInUser(request).getMemberUserName() + "." + getFileExtensionForImageReader(importFile.getFileName()); int size = importFile.getFileSize(); //-------------------- VALIDATE THE IMAGE ----------------------------------------- // check width and heigh of image logger.debug(importFileName + " ext = " + getFileExtensionForImageReader(importFileName)); Iterator readers = ImageIO.getImageReadersBySuffix(getFileExtensionForImageReader(importFileName)); ImageReader reader = (ImageReader) readers.next(); try { ImageInputStream iis = ImageIO.createImageInputStream(importFile.getInputStream()); reader.setInput(iis, true); int width = reader.getWidth(0); int height = reader.getHeight(0); logger.debug(importFile.getFileName() + ": width=" + width + ", height=" + height); if (width > maxWidth || height > maxHeight) { errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.dimensions", width, height, maxWidth, maxHeight)); saveMessages(request, errors); return mapping.getInputForward(); } } catch (IOException e) { System.err.println(e.getMessage() + ": can't open"); errors.add(BaseConstants.FATAL_KEY, new ActionMessage("error.notreadable")); saveMessages(request, errors); return mapping.getInputForward(); } // check file name if (importFileName.indexOf(" ") > -1) { errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.filename", importFileName)); saveMessages(request, errors); return mapping.getInputForward(); } //boolean validImageName = false; /* StringTokenizer st0 = new StringTokenizer(importFileName, "."); if (st0.hasMoreTokens()) { if (token.getMemberUserName().equals(st0.nextToken())) { //validImageName = true; } else{ errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.fileusername", token.getMemberUserName(),importFileName )); saveMessages(request, errors); return mapping.getInputForward(); } }*/ File f = new File(avatarDir + importFileName); if (f.exists() && (overwrite.equalsIgnoreCase("false") || overwrite.equalsIgnoreCase(""))) { continer.setOverWriteAvatar(true); errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.filename.exist")); saveMessages(request, errors); return mapping.getInputForward(); } if (size > maxFileSize) { errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.filetoobig", String.valueOf(size), String.valueOf(maxFileSize))); saveMessages(request, errors); return mapping.getInputForward(); } boolean validImageExtension = false; StringTokenizer st = new StringTokenizer(fileTypes, ","); logger.debug("Current Type = " + importFile.getContentType()); while (st.hasMoreTokens()) { if (importFile.getContentType().equalsIgnoreCase(st.nextToken())) { validImageExtension = true; } } // check file extension if (!validImageExtension) { errors.add(BaseConstants.WARN_KEY, new ActionMessage("error.imageext", String.valueOf(fileTypes))); saveMessages(request, errors); return mapping.getInputForward(); } // apend the file extension //avatar = avatar + "." + importFile.getContentType(); //------------------------------------------------------------- if (!uploadFromLocalDrive(importFile, importFileName, avatarDir)) { errors.add(BaseConstants.FATAL_KEY, new ActionMessage("errors.technical.difficulty")); saveMessages(request, errors); return mapping.getInputForward(); } memService.updateMemberAvatar(importFileName, token.getMemberUserName(), getLastModifiedBy(request)); continer.setOverWriteAvatar(false); continer.setAvatar(importFileName); MemberVO memberVO = memService.getMemberProfileByUserName(token.getMemberUserName()); BeanUtils.copyProperties(memberForm, memberVO); return mapping.findForward(BaseConstants.FWD_SUCCESS); }
From source file:org.geotools.utils.imageoverviews.OverviewsEmbedder.java
public void run() { // did we create a local private tile cache or not? boolean localTileCache = false; ///* w w w . ja v a2s. c om*/ // creating the image to use for the successive // subsampling // TileCache baseTC = JAI.getDefaultInstance().getTileCache(); if (baseTC == null) { localTileCache = true; final long tilecacheSize = super.getTileCacheSize(); baseTC = JAI.createTileCache(); baseTC.setMemoryCapacity(tilecacheSize); baseTC.setMemoryThreshold(0.75f); } // // CHECK INPUT DIRECTORIES/FILES // if (sourcePath == null) { fireEvent("Provided sourcePath is null", overallProgress); return; } // getting an image input stream to the file final File file = new File(sourcePath); final File[] files; int numFiles = 1; StringBuilder message; if (!file.canRead() || !file.exists()) { fireEvent("Provided file " + file.getAbsolutePath() + " cannot be read or does not exist", 100); return; } if (file.isDirectory()) { if (wildcardString == null) { fireEvent("Provided wildcardString is null", 100); return; } final FileFilter fileFilter = new WildcardFileFilter(wildcardString); files = file.listFiles(fileFilter); numFiles = files.length; if (numFiles <= 0) { message = new StringBuilder("No files to process!"); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), 100); } } else files = new File[] { file }; if (files == null || files.length == 0) { fireEvent("Unable to find input files for the provided wildcard " + wildcardString + " and input path " + sourcePath, 100); return; } // setting step overallProgressStep = 100 * 1.0 / numFiles; // // ADDING OVERVIEWS TO ALL FOUND FILES // for (fileBeingProcessed = 0; fileBeingProcessed < numFiles; fileBeingProcessed++) { message = new StringBuilder("Managing file ").append(fileBeingProcessed).append(" of ") .append(files[fileBeingProcessed]).append(" files"); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } overallProgress = overallProgressStep * fileBeingProcessed; fireEvent(message.toString(), overallProgress); if (getStopThread()) { message = new StringBuilder("Stopping requested at file ").append(fileBeingProcessed) .append(" of ").append(numFiles).append(" files"); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), overallProgress); return; } ImageInputStream stream = null; ImageWriter writer = null; ImageOutputStream streamOut = null; RenderedOp currentImage = null; RenderedOp newImage = null; try { File localFile = files[fileBeingProcessed]; // // get a stream // stream = ImageIO.createImageInputStream(localFile); if (stream == null) { message = new StringBuilder("Unable to create an input stream for file") .append(files[fileBeingProcessed]); if (LOGGER.isLoggable(Level.SEVERE)) { LOGGER.severe(message.toString()); } fireEvent(message.toString(), overallProgress); break; } stream.mark(); // // get a reader // final Iterator<ImageReader> it = ImageIO.getImageReaders(stream); if (!it.hasNext()) { message = new StringBuilder("Unable to find a reader for file") .append(files[fileBeingProcessed]); if (LOGGER.isLoggable(Level.SEVERE)) { LOGGER.severe(message.toString()); } fireEvent(message.toString(), overallProgress); break; } final ImageReader reader = (ImageReader) it.next(); stream.reset(); stream.mark(); // is it a geotiff reader or not? if (!reader.getFormatName().toLowerCase().startsWith("tif")) { if (LOGGER.isLoggable(Level.INFO)) { LOGGER.info("Discarding input file " + files[fileBeingProcessed] + " since it is not a proper tif file."); } continue; } // // set input // reader.setInput(stream); ImageLayout layout = null; // tiling the image if needed int actualTileW = reader.getTileWidth(0); int actualTileH = reader.getTileHeight(0); if (!reader.isImageTiled(0) || (reader.isImageTiled(0) && (actualTileH != tileH && tileH != -1) || (actualTileW != tileW && tileW != -1))) { message = new StringBuilder("Retiling image ").append(fileBeingProcessed); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), overallProgress); layout = Utils.createTiledLayout(tileW, tileH, 0, 0); } stream.reset(); reader.reset(); reader.dispose(); // // output image stream // if (externalOverviews) { // create a sibling file localFile = new File(localFile.getParent(), FilenameUtils.getBaseName(localFile.getAbsolutePath()) + ".tif.ovr"); } streamOut = ImageIOExt.createImageOutputStream(null, localFile); if (streamOut == null) { message = new StringBuilder("Unable to acquire an ImageOutputStream for the file ") .append(files[fileBeingProcessed].toString()); if (LOGGER.isLoggable(Level.SEVERE)) { LOGGER.severe(message.toString()); } fireEvent(message.toString(), 100); break; } // // Preparing to write the set of images. First of all I write // the first image ` // // getting a writer for this reader writer = TIFF_IMAGE_WRITER_SPI.createWriterInstance(); writer.setOutput(streamOut); writer.addIIOWriteProgressListener(writeProgressListener); writer.addIIOWriteWarningListener(writeProgressListener); ImageWriteParam param = writer.getDefaultWriteParam(); // // setting tiling on the first image using writing parameters // if (tileH != -1 & tileW != -1) { param.setTilingMode(ImageWriteParam.MODE_EXPLICIT); param.setTiling(tileW, tileH, 0, 0); } else { param.setTilingMode(ImageWriteParam.MODE_EXPLICIT); param.setTiling(actualTileW, actualTileH, 0, 0); } if (this.compressionScheme != null && !Double.isNaN(compressionRatio)) { param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType(compressionScheme); param.setCompressionQuality((float) this.compressionRatio); } final RenderingHints newHints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout); newHints.add(new RenderingHints(JAI.KEY_TILE_CACHE, baseTC)); // read base image ParameterBlock pbjRead = new ParameterBlock(); pbjRead.add(stream); pbjRead.add(Integer.valueOf(0)); pbjRead.add(Boolean.FALSE); pbjRead.add(Boolean.FALSE); pbjRead.add(Boolean.FALSE); pbjRead.add(null); pbjRead.add(null); pbjRead.add(null); pbjRead.add(null); currentImage = JAI.create("ImageRead", pbjRead, newHints); message = new StringBuilder("Read original image ").append(fileBeingProcessed); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), overallProgress); int i = 0; // // OVERVIEWS CYLE // for (overviewInProcess = 0; overviewInProcess < numSteps; overviewInProcess++) { message = new StringBuilder("Subsampling step ").append(overviewInProcess + 1) .append(" of image ").append(fileBeingProcessed); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), overallProgress); // paranoiac check if (currentImage.getWidth() / downsampleStep <= 0 || currentImage.getHeight() / downsampleStep <= 0) break; // SCALE // subsampling the input image using the chosen algorithm final SubsampleAlgorithm algorithm = SubsampleAlgorithm.valueOf(scaleAlgorithm); switch (algorithm) { case Average: newImage = Utils.scaleAverage(currentImage, baseTC, downsampleStep, borderExtender); break; case Filtered: newImage = Utils.filteredSubsample(currentImage, baseTC, downsampleStep, lowPassFilter); break; case Bilinear: newImage = Utils.subsample(currentImage, baseTC, new InterpolationBilinear(), downsampleStep, borderExtender); break; case Bicubic: newImage = Utils.subsample(currentImage, baseTC, new InterpolationBicubic(2), downsampleStep, borderExtender); break; case Nearest: newImage = Utils.subsample(currentImage, baseTC, new InterpolationNearest(), downsampleStep, borderExtender); break; default: throw new IllegalArgumentException("Invalid scaling algorithm " + scaleAlgorithm);//cannot get here } //set relevant metadata IIOMetadata imageMetadata = null; if (writer instanceof TIFFImageWriter) { imageMetadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(newImage), param); if (imageMetadata != null) ((TIFFImageMetadata) imageMetadata).addShortOrLongField( BaselineTIFFTagSet.TAG_NEW_SUBFILE_TYPE, BaselineTIFFTagSet.NEW_SUBFILE_TYPE_REDUCED_RESOLUTION); } // write out if (!externalOverviews || i > 0) writer.writeInsert(-1, new IIOImage(newImage, null, imageMetadata), param); else writer.write(null, new IIOImage(newImage, null, imageMetadata), param); message = new StringBuilder("Step ").append(overviewInProcess + 1).append(" of image ") .append(fileBeingProcessed).append(" done!"); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), overallProgress); // switching images currentImage.dispose(); //dispose old image currentImage = newImage; i++; } overallProgress = 100; // close message message = new StringBuilder("Done with image ").append(fileBeingProcessed); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(message.toString()); } fireEvent(message.toString(), overallProgress); } catch (Throwable e) { fireException(e); } finally { // clean up // clean caches if they are local if (localTileCache && baseTC != null) try { baseTC.flush(); } catch (Exception e) { } // // free everything try { if (streamOut != null) streamOut.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINE)) LOGGER.log(Level.FINE, e.getLocalizedMessage(), e); } try { if (writer != null) writer.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINE)) LOGGER.log(Level.FINE, e.getLocalizedMessage(), e); } try { if (currentImage != null) currentImage.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINE)) LOGGER.log(Level.FINE, e.getLocalizedMessage(), e); } try { if (newImage != null) newImage.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINE)) LOGGER.log(Level.FINE, e.getLocalizedMessage(), e); } try { if (stream != null) stream.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINE)) LOGGER.log(Level.FINE, e.getLocalizedMessage(), e); } } } if (LOGGER.isLoggable(Level.FINE)) LOGGER.fine("Done!!!"); }
From source file:org.geoserver.wcs.GetCoverageTest.java
/** * This tests just ended up throwing an exception as the coverage being encoded * was too large due to a bug in the scales estimation * /* w w w . java2 s . co m*/ * @throws Exception */ @Test public void testRotatedPost() throws Exception { String request = "<GetCoverage xmlns=\"http://www.opengis.net/wcs/1.1.1\" xmlns:gml=\"http://www.opengis.net/gml\"\n" + " xmlns:ows11=\"http://www.opengis.net/ows/1.1\"\n" + " xmlns:ows=\"http://www.opengis.net/ows/1.1\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n" + // " xmlns:wcs=\"http://schemas.opengis.net/wcs/1.1.1\"\n" + " xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n" + " service=\"WCS\"\n" + " version=\"1.1.1\"\n" + " xsi:schemaLocation=\"http://www.opengis.net/wcs/1.1.1 http://schemas.opengis.net/wcs/1.1.1/wcsAll.xsd\">\n" + " <ows11:Identifier>RotatedCad</ows11:Identifier>\n" + " <DomainSubset>\n" + " <ows11:BoundingBox crs=\"urn:ogc:def:crs:OGC:1.3:CRS84\">\n" + " <ows11:LowerCorner>7.7634301664746515 45.14713380418506</ows11:LowerCorner>\n" + " <ows11:UpperCorner>7.764350661575157 45.14763319238466</ows11:UpperCorner>\n" + " </ows11:BoundingBox>\n" + " </DomainSubset>\n" + " <Output format=\"image/tiff\"/>\n" + "</GetCoverage>"; MockHttpServletResponse response = postAsServletResponse("wcs", request); // parse the multipart, check there are two parts Multipart multipart = getMultipart(response); assertEquals(2, multipart.getCount()); BodyPart coveragePart = multipart.getBodyPart(1); assertEquals("image/tiff", coveragePart.getContentType()); assertEquals("<theCoverage>", coveragePart.getHeader("Content-ID")[0]); // make sure we can read the coverage back ImageReader reader = ImageIO.getImageReadersByFormatName("tiff").next(); reader.setInput(ImageIO.createImageInputStream(coveragePart.getInputStream())); RenderedImage image = reader.read(0); // check the image is suitably small (without requiring an exact size) assertTrue(image.getWidth() < 1000); assertTrue(image.getHeight() < 1000); }
From source file:org.geoserver.wcs.GetCoverageTest.java
/** * This tests just ended up throwing an exception as the coverage being encoded * was too large due to a bug in the scales estimation * //ww w.j a v a 2 s . co m * @throws Exception */ @Test public void testRotatedGet() throws Exception { String request = "wcs?&service=WCS&request=GetCoverage&version=1.1.1&identifier=RotatedCad&BoundingBox=7.7634071540971386,45.14712131948007,7.76437367395267,45.14764567708965,urn:ogc:def:crs:OGC:1.3:CRS84&Format=image/tiff"; MockHttpServletResponse response = getAsServletResponse(request); // parse the multipart, check there are two parts Multipart multipart = getMultipart(response); assertEquals(2, multipart.getCount()); BodyPart coveragePart = multipart.getBodyPart(1); assertEquals("image/tiff", coveragePart.getContentType()); assertEquals("<theCoverage>", coveragePart.getHeader("Content-ID")[0]); // make sure we can read the coverage back ImageReader reader = ImageIO.getImageReadersByFormatName("tiff").next(); reader.setInput(ImageIO.createImageInputStream(coveragePart.getInputStream())); RenderedImage image = reader.read(0); // check the image is suitably small (without requiring an exact size) assertTrue(image.getWidth() < 1000); assertTrue(image.getHeight() < 1000); }
From source file:org.jimcat.services.imagemanager.ImageUtil.java
/** * get an image reader for the given file content * /* w w w . j a v a 2 s. c o m*/ * @param image * @return an image reader for the given content * @throws IOException */ private static ImageReader getReaderForImage(byte image[]) throws IOException { // resolve image using ImageIO stream ImageInputStream stream = ImageIO.createImageInputStream(new ByteArrayInputStream(image)); // check if there is an image inside the stream Iterator iter = ImageIO.getImageReaders(stream); if (!iter.hasNext()) { // none found return null; } // setup reader ImageReader reader = (ImageReader) iter.next(); reader.setInput(stream, true, true); return reader; }
From source file:com.moviejukebox.scanner.artwork.PosterScanner.java
/** * Return the dimensions of a local image file * * @param imageFile//from w w w .jav a 2 s .c om * @return Dimension */ public static Dimension getFileImageSize(File imageFile) { Dimension imageSize = new Dimension(0, 0); ImageReader reader = null; try (ImageInputStream in = ImageIO.createImageInputStream(imageFile)) { @SuppressWarnings("rawtypes") Iterator readers = ImageIO.getImageReaders(in); if (readers.hasNext()) { reader = (ImageReader) readers.next(); if (reader != null) { reader.setInput(in); return new Dimension(reader.getWidth(0), reader.getHeight(0)); } } } catch (IOException | CMMException ex) { LOG.error("Failed to read image dimensions for {}", imageFile.getName()); LOG.error("Error: {}", ex.getMessage()); return imageSize; } finally { if (reader != null) { reader.dispose(); } } return imageSize; }
From source file:net.naijatek.myalumni.framework.struts.MyAlumniDispatchAction.java
protected ActionMessages validateUploadFile(HttpServletRequest request, FormFile uploadedFile, String fileAllowedTypes, int maxFileSize, boolean validateHeight, int maxHeight, boolean validateWidth, int maxWidth) { ActionMessages msgs = new ActionMessages(); String fileName = uploadedFile.getFileName(); int fileSize = uploadedFile.getFileSize(); if (fileName == null || fileName.length() == 0) { msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.notreadable")); } else {/*www. j a v a2 s. co m*/ // Check for space in file name if (fileName.indexOf(" ") > -1) { msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.filename", fileName)); } // check for file size if (fileSize > maxFileSize) { msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.filetoobig", String.valueOf(fileSize), String.valueOf(maxFileSize))); } boolean validExtension = false; StringTokenizer st = new StringTokenizer(fileAllowedTypes, ","); while (st.hasMoreTokens()) { if (uploadedFile.getContentType().equalsIgnoreCase(st.nextToken())) { validExtension = true; } } if (!validExtension) { msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.imageext", SystemConfigConstants.CONTENT_TYPE)); } else { logger.debug(fileName + " ext = " + getFileExtensionForImageReader(fileName)); Iterator readers = ImageIO.getImageReadersBySuffix(getFileExtensionForImageReader(fileName)); ImageReader reader = (ImageReader) readers.next(); try { ImageInputStream iis = ImageIO.createImageInputStream(uploadedFile.getInputStream()); reader.setInput(iis, true); int width = reader.getWidth(0); int height = reader.getHeight(0); logger.debug(uploadedFile.getFileName() + ": width=" + width + ", height=" + height); if (validateHeight) { if (height > maxHeight) { msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.heightdimensions", height, maxHeight)); } } if (validateWidth) { if (width > maxWidth || height > maxHeight) { msgs.add(BaseConstants.WARN_KEY, new ActionMessage("error.widthdimensions", width, maxWidth)); } } } catch (IOException e) { msgs.add(BaseConstants.FATAL_KEY, new ActionMessage("error.notreadable")); } } } return msgs; }
From source file:org.n52.v3d.terrainserver.povraywts.WebTerrainServlet.java
/** * bearbeitet HTTP-Get-Anfragen an das Servlet.<p> * @param pRequest HTTP-Anfrage-Objekt/*from ww w . j a v a2s.c o m*/ * @param pResponse HTTP-Antwort-Objekt * @throws ServletException * @throws IOException */ public void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse) throws ServletException, IOException { T3dTimeList lTimeProt = new T3dTimeList(); // zur Protokollierung der Rechenzeiten lTimeProt.addTimeStamp("init"); /* Enumeration hnames = pRequest.getHeaderNames(); while(hnames.hasMoreElements()){ String header = (String) hnames.nextElement(); Enumeration headers = pRequest.getHeaders(header); while (headers.hasMoreElements()) { System.out.println("header: " + header + ", value=" + (String) headers.nextElement()); //if (header.equalsIgnoreCase("accept") && pRequest.getHeader(header).startsWith("image/")) // return; } } */ // Eindeutigen Temporrdatei-Rumpf fr aktuelle Anfrage festlegen: String lTmpName = "~" + (mCounter++) + "_" + new java.util.Date().getTime(); // Objektdefinitionen fr Temporrdateien-Verwaltung: boolean lCacheScene = false; TempFileHandler lRequTmpMngr = null; boolean lKeepTempFilesInCaseOfError = false; TempFileHandler lSessionTmpMngr = null; try { // Request-Parameter holen: HttpRequestParams lReqParams = this.fetchRequestParameters(pRequest); String lSRS = (String) lReqParams.getParameterValue("SRS"); String lRequest = (String) lReqParams.getParameterValue("REQUEST"); GmEnvelope lBBox = (GmEnvelope) lReqParams.getParameterValue("BBOX"); VgPoint lPoi; try { lPoi = (VgPoint) lReqParams.getParameterValue("POI"); } catch (T3dException e) { lPoi = null; } double lYaw = ((Double) lReqParams.getParameterValue("YAW")).doubleValue(); double lPitch = ((Double) lReqParams.getParameterValue("PITCH")).doubleValue(); double lDistance; try { lDistance = ((Double) lReqParams.getParameterValue("DISTANCE")).doubleValue(); } catch (T3dException e) { lDistance = 0.; } double lAov = ((Double) lReqParams.getParameterValue("AOV")).doubleValue(); String lFormat = (String) lReqParams.getParameterValue("FORMAT"); int lWidth = ((Integer) lReqParams.getParameterValue("WIDTH")).intValue(); int lHeight = ((Integer) lReqParams.getParameterValue("HEIGHT")).intValue(); double lExaggeration = ((Double) lReqParams.getParameterValue("EXAGGERATION")).doubleValue(); String lDrape = (String) lReqParams.getParameterValue("DRAPE"); String lWmsLayers = (String) lReqParams.getParameterValue("WMSLAYERS"); double lWmsRes = ((Double) lReqParams.getParameterValue("WMSRES")).doubleValue(); double lSearchRadius = ((Double) lReqParams.getParameterValue("SEARCHRADIUS")).doubleValue(); int lVisAdds = ((Integer) lReqParams.getParameterValue("VISADDS")).intValue(); boolean lTransparent = ((Boolean) lReqParams.getParameterValue("TRANSPARENT")).booleanValue(); String lBgColorHex = (String) lReqParams.getParameterValue("BGCOLOR"); lCacheScene = ((Boolean) lReqParams.getParameterValue("CACHESCENE")).booleanValue(); String lExceptions = (String) lReqParams.getParameterValue("EXCEPTIONS"); int lQuality = ((Integer) lReqParams.getParameterValue("QUALITY")).intValue(); double lLightInt = ((Double) lReqParams.getParameterValue("LIGHTINT")).doubleValue(); String lMonProtUser = (String) lReqParams.getParameterValue("MONPROTUSER"); String lMonProtPasswd = (String) lReqParams.getParameterValue("MONPROTPASSWD"); if (lRequest.equalsIgnoreCase("GetCapabilities")) { HttpStandardResponse response = new HttpStandardResponse(); response.sendXMLFile(mCapabilitiesFile, pResponse); this.logGetCapabilitiesInfo(lTmpName, pRequest); return; } if (lRequest.equalsIgnoreCase("GetMonProtocol")) { // hier evtl. besseren Zugriffsschutz realisieren... if (pRequest.getMethod().equalsIgnoreCase("POST")) { if ((mMonProtUser != null && mMonProtPasswd != null && lMonProtUser.compareTo(mMonProtUser) == 0 && lMonProtPasswd.compareTo(mMonProtPasswd) == 0) || lMonProtUser.compareTo("wtsadmin") == 0 && lMonProtPasswd.compareTo("geheim") == 0) { this.monitorProtocol(pResponse); } } return; } if (!lRequest.equalsIgnoreCase("GetView")) { lKeepTempFilesInCaseOfError = false; throw new T3dException("Illegal request type " + lRequest + "..."); } // Request-Parameter aufbereiten und Wertebereiche prfen: ParameterPreparer pp = new ParameterPreparer(); lSRS = pp.prepareSRS(lSRS); lBBox = pp.prepareBBOX(lBBox, lSRS); lPoi = pp.preparePOI(lPoi, lSRS); lYaw = pp.prepareYAW(lYaw); lPitch = pp.preparePITCH(lPitch); lDistance = pp.prepareDISTANCE(lDistance); lAov = pp.prepareAOV(lAov); lWmsLayers = pp.prepareWMSLAYERS(lWmsLayers); lWmsRes = pp.prepareWMSRES(lWmsRes); lTransparent = pp.prepareTRANSPARENT(lTransparent); T3dColor lBgColor = pp.prepareBGCOLOR(lBgColorHex); lWidth = pp.prepareWIDTH(lWidth); lHeight = pp.prepareHEIGHT(lHeight); lExceptions = pp.prepareEXCEPTIONS(lExceptions); lQuality = pp.prepareQUALITY(lQuality); lLightInt = pp.prepareLIGHTINT(lLightInt); sLogger.debug("WebTerrainServlet (" + lTmpName + "): Received GetView request."); if (lSearchRadius < mSearchRadiusMin) // todo lSearchRadius = mSearchRadiusMin; if (!lBBox.hasMetricSRS()) { if (lBBox.hasGeographicSRS()) { // metrisch bentigte Parameter umrechnen lExaggeration /= Wgs84Helper.degree2meter; lSearchRadius /= Wgs84Helper.degree2meter; } else throw new T3dException("Missing SRS support for \"" + lBBox.getSRS() + "\"."); } // Temporrdateien-Verwaltung gewhrleisten und ggf. Session-Objekt holen: WTSSession lWtsSession = new WTSSession(); lWtsSession = this.setUpSession(lWtsSession, lCacheScene, pRequest, lBBox, lDrape, lWmsLayers); HttpSession lSession = lWtsSession.getHttpSession(); lRequTmpMngr = lWtsSession.getRequTempFileHandler(); if (lCacheScene) lSessionTmpMngr = lWtsSession.getSessionTempFileHandler(); lTimeProt.setFinished("init"); // Hhenmodell berechnen (Gridding): lTimeProt.addTimeStamp("dem_access"); VgElevationGrid lTerrain = this.setUpTerrain(lCacheScene, lSession, lBBox, lHeight, lWidth, lSearchRadius); lTimeProt.setFinished("dem_access"); // Drape holen: lTimeProt.addTimeStamp("drape_access"); String lDrapeFile = this.setUpDrape(lCacheScene, lWtsSession, lDrape, lWmsLayers, lBBox, lSRS, lWidth, lTerrain, lTmpName, lWmsRes); if (mLocalDebug) System.out.println("lDrapeFile = \"" + lDrapeFile + "\""); lTimeProt.setFinished("drape_access"); // POV-Ray-Szene definieren: lTimeProt.addTimeStamp("scene_def"); if (lDistance == 0. && lPoi == null) lDistance = this.determineDefaultDistance(lTerrain, lYaw * Math.PI / 180., lExaggeration, 2. * lAov); VsSimpleScene lScene = this.defineScene(lTerrain, lDrapeFile, lVisAdds, lDistance, lPoi, lYaw * Math.PI / 180., -lPitch * Math.PI / 180., lExaggeration, 2. * lAov); lScene.setBackgroundColor(lBgColor); lRequTmpMngr.addTempFile(mWorkingDirectory + "/" + lTmpName + ".pov"); lRequTmpMngr.addTempFile(mWorkingDirectory + "/" + lTmpName + ".bat"); lTimeProt.setFinished("scene_def"); // POV-Ray-Umgebung setzen und Szene rendern: // todo: alles noch zu POV-Ray-spezifisch -> Interface bauen/erweitern? / j3dwts-Servlet mit gemeinsamem Kern? lTimeProt.addTimeStamp("rendering"); this.configureRenderer(lScene, lWidth, lHeight, lTmpName, lLightInt); String lGifEncodedDEM = null; if (lCacheScene) // Dateinamen fr GIF-kodiertes Hhenmodell aus Session holen lGifEncodedDEM = (String) lSession.getAttribute("demgif_" + lSession.getId()); boolean lInstanceOverflow = false; try { if (mUseTimeSlices) { Long lTimeSlice = mTimeSliceAssigner.getAssignedSlice(); if (lTimeSlice != null) { long lTimeSliceStart = lTimeSlice.longValue(); long lCurrTime = mTimeSliceAssigner.currentTime(); if (lTimeSliceStart > lCurrTime) { long lDelay = lTimeSliceStart - lCurrTime; sLogger.debug("WebTerrainServlet (" + lTmpName + "): " + "Rendering process will be delayed for " + lDelay + " msecs..."); Thread.sleep(lDelay); } else { // Bem.: Fr lTimeSliceStart <= lCurrTime keine Verzgerung if (mLocalDebug) System.out.println("Rendering process will not be be delayed..."); } } else { // keine freie Zeitscheibe verfgbar lKeepTempFilesInCaseOfError = false; throw new T3dException("The server is too busy at the moment. Please try again later.", 100); } } if (mRendererInstances < mMaxRendererInstances) { mRendererInstances++; try { ((PovrayScene) lScene).setLocalDebug(mLocalDebug); if (lGifEncodedDEM == null) // CACHESCENE nicht gesetzt oder 1. Aufruf (GIF-Dateiname nicht in Session) ((PovrayScene) lScene).render(); else ((PovrayScene) lScene).renderCachedDEM(lGifEncodedDEM); } catch (Throwable e) { mRendererInstances--; lKeepTempFilesInCaseOfError = true; throw e; } //System.out.println("mRendererInstances = " + mRendererInstances); mRendererInstances--; } else lInstanceOverflow = true; } catch (T3dException e) { lKeepTempFilesInCaseOfError = true; throw e; } catch (Exception e) { lKeepTempFilesInCaseOfError = true; throw new T3dException("For unknown reasons, the scene could not be rendered...", 400); } if (lInstanceOverflow) { lKeepTempFilesInCaseOfError = false; throw new T3dException("The server is too busy at the moment. Please try again later.", 101); } if (lCacheScene) { // GIF in Session legen lSession.setAttribute("demgif_" + lSession.getId(), ((PovrayScene) lScene).getGifEncodedDEM()); lSessionTmpMngr.addTempFile(((PovrayScene) lScene).getGifEncodedDEM()); } else lRequTmpMngr.addTempFile(((PovrayScene) lScene).getGifEncodedDEM()); lRequTmpMngr.addTempFile(mWorkingDirectory + "/" + lTmpName + ".png"); if (!mRendererImmediateTermination) lTimeProt.setFinished("rendering"); // POV-Ray-Ergebnisbild holen: if (!mRendererImmediateTermination) lTimeProt.addTimeStamp("prepare_image"); String resExt = MimeTypeHelper.getFileExtension(((PovrayScene) lScene).getImageFormat()); String resFile = mWorkingDirectory + "/" + lTmpName + "." + resExt; sLogger.debug("WebTerrainServlet (" + lTmpName + "): Preparing image \"" + resFile + "\"..."); File f = new File(resFile); ImageInputStream is = ImageIO.createImageInputStream(f); if (!mRendererImmediateTermination) { if (is == null) { lKeepTempFilesInCaseOfError = true; throw new T3dException("For unknown reasons, the renderer did not generate an image file.", 401); } } else { int lMaxIntervalChecks = 40; long lCheckInterval = mRendererTimeout / lMaxIntervalChecks; int ct = 0; while (is == null && ct < lMaxIntervalChecks) { ct++; try { Thread.sleep(lCheckInterval); } catch (Exception e2) { } ; is = ImageIO.createImageInputStream(f); } if (is == null && ct >= lMaxIntervalChecks) { lKeepTempFilesInCaseOfError = true; throw new T3dException("An I/O exception occured. The renderer did not generate an image file.", 402); } lTimeProt.setFinished("rendering"); lTimeProt.addTimeStamp("prepare_image"); } BufferedImage lImage = this.prepareImage(is, lHeight, lWidth, lTerrain, lPitch, lYaw, lDistance, lExaggeration, (lVisAdds & 4) > 0, (lVisAdds & 8) > 0); lTimeProt.setFinished("prepare_image"); // Ergebnisbild als Antwort senden: lTimeProt.addTimeStamp("send_response"); try { this.sendResponse(lFormat, pResponse, lImage, resExt, lQuality); } catch (Throwable e) { is.close(); lKeepTempFilesInCaseOfError = false; throw e; } is.close(); lTimeProt.setFinished("send_response"); String lOutputFormatInfo = lFormat + " (" + lWidth + "x" + lHeight + ")"; this.logGetViewInfo(lTmpName, lTerrain, lTimeProt, pRequest, lOutputFormatInfo); //this.removeTempFiles(lRequTmpMngr, lSessionTmpMngr, lCacheScene); sLogger.debug("WebTerrainServlet (" + lTmpName + "): Duly finished execution."); } catch (Throwable e) { sLogger.debug("WebTerrainServlet (" + lTmpName + "): Aborting execution. Error: " + e.getMessage()); if (!lKeepTempFilesInCaseOfError) this.removeTempFiles(lRequTmpMngr, lSessionTmpMngr, lCacheScene); HttpStandardResponse response = new HttpStandardResponse(); try { String lExceptions = (String) this.fetchRequestParameters(pRequest).getParameterValue("EXCEPTIONS"); if (lExceptions.equalsIgnoreCase("application/vnd.ogc.se_inimage")) { int lWidth = ((Integer) this.fetchRequestParameters(pRequest).getParameterValue("WIDTH")) .intValue(); int lHeight = ((Integer) this.fetchRequestParameters(pRequest).getParameterValue("HEIGHT")) .intValue(); String lFormat = (String) this.fetchRequestParameters(pRequest).getParameterValue("FORMAT"); response.sendException(T3dExceptionMessage.getInstance().translate(e), pResponse, lFormat, lWidth, lHeight); } else response.sendException(e.getMessage(), pResponse); } catch (Throwable e2) { try { response.sendException(e.getMessage(), pResponse); } catch (Throwable e3) { System.out.println("WebTerrainServlet: FATAL ERROR - " + e2.getMessage()); } } try { this.logErrorInfo(lTmpName, lTimeProt, pRequest, e); } catch (Throwable e2) { System.out.println("WebTerrainServlet: FATAL ERROR - " + e2.getMessage()); } } }
From source file:com.evolveum.polygon.connector.drupal.DrupalConnector.java
private String createFile(byte[] fileContent, String fileName) throws IOException { // determine image type String extension = "jpg"; try {/*from ww w . ja v a 2 s . c o m*/ ByteArrayInputStream is = new ByteArrayInputStream(fileContent); ImageInputStream iis = ImageIO.createImageInputStream(is); Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(iis); while (imageReaders.hasNext()) { ImageReader reader = (ImageReader) imageReaders.next(); extension = reader.getFormatName(); } } catch (IOException e) { throw new ConnectorIOException("not parseable image extension (JPEG/PNG/...): " + e.getMessage(), e); } JSONObject jo = new JSONObject(); jo.put(ATTR_FILE_STATUS, ATTR_FILE_STATUS_DEFAULT); jo.put(ATTR_FILE_FILE, Base64.encode(fileContent)); jo.put(ATTR_FILE_FILENAME, fileName + "." + extension); HttpPost request = new HttpPost(getConfiguration().getServiceAddress() + FILE); JSONObject file = callRequest(request, jo); return file.getString(FID); }