Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2010 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.callbackparams.support;
 
 import java.io.File;
 import java.net.URL;
 import java.util.Map;

Author(s):
Henrik Kaipe
 
 public class ResourceMap {
 
     private static final String tmpResourceDirProperty =
             "callbackparams.temp.resources";
     private static final File tmpResourceDir = setupTmpResourceDir();
 
     private Map map = new HashMap();
 
     public void put(Class rebytedClassbyte[] byteCode) {
         .put(asClassPathResourcePath(rebytedClass), byteCode);
     }
 
     public InputStream getAsStream(String name) {
         Object resource = .get(name);
         if (null == resource) {
             return null;
 
         } else if (resource instanceof byte[]) {
             return new ByteArrayInputStream((byte[])resource);
 
         } else if (resource instanceof URL) {
             try {
                 return ((URLresource).openStream();
             } catch (IOException ex) {
                 throw new Error(ex);
             }
 
         } else {
             throw new Error("Unexpected resource-type: " + resource.getClass());
         }
     }
 
     public URL getURL(String name) {
         Object resource = .get(name);
 
         if (resource instanceof byte[]) {
             resource = createTmpResourceFile((byte[])resource);
             .put(nameresource);
         }
 
         return (URLresource;
     }
 
     private static String asClassPathResourcePath(Class classResource) {
         return classResource.getName().replace('.''/') + ".class";
     }
 
     private static URL createTmpResourceFile(byte[] b) {
         FileOutputStream fos = null;
         try {
             String prefix = "org.callbackparams$";
             String suffix = "class$rebyted";
             File resourceFile = null == 
                     ? File.createTempFile(prefixsuffix)
                     : File.createTempFile(prefixsuffix);
             resourceFile.deleteOnExit();
             fos = new FileOutputStream(resourceFile);
             fos.write(b);
             return resourceFile.toURI().toURL();
 
         } catch (IOException x) {
             throw new Error(x);
         } finally {
             if (null != fos) {
                 try {
                     fos.close();
                 } catch (IOException ignore) {
                     /* Never mind ... */
                 }
            }
        }
    }
    private static File setupTmpResourceDir() {
        String tmpResourceValue = System.getProperty();
        if (null == tmpResourceValue) {
            return null;
        }
        File resourceDir = new File(tmpResourceValue.trim());
        if (resourceDir.isDirectory() || resourceDir.mkdirs()) {
            return resourceDir;
        } else {
            return null;
        }
    }
New to GrepCode? Check out our FAQ X