Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
  * Fabric3
  * Copyright (c) 2009 Metaform Systems
  *
  * Fabric3 is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as
  * published by the Free Software Foundation, either version 3 of
  * the License, or (at your option) any later version, with the
  * following exception:
 *
 * Linking this software statically or dynamically with other
 * modules is making a combined work based on this software.
 * Thus, the terms and conditions of the GNU General Public
 * License cover the whole combination.
 *
 * As a special exception, the copyright holders of this software
 * give you permission to link this software with independent
 * modules to produce an executable, regardless of the license
 * terms of these independent modules, and to copy and distribute
 * the resulting executable under terms of your choice, provided
 * that you also meet, for each linked independent module, the
 * terms and conditions of the license of that module. An
 * independent module is a module which is not derived from or
 * based on this software. If you modify this software, you may
 * extend this exception to your version of the software, but
 * you are not obligated to do so. If you do not wish to do so,
 * delete this exception statement from your version.
 *
 * Fabric3 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the
 * GNU General Public License along with Fabric3.
 * If not, see <http://www.gnu.org/licenses/>.
 */
 package org.fabric3.fabric.artifact;
 
 import java.io.File;
 import java.net.URI;
 import java.net.URL;
 import java.util.Map;
 
 

Version:
$Rev: 7910 $ $Date: 2009-11-24 10:17:49 +0100 (Tue, 24 Nov 2009) $
 
 public class FSArtifactCache implements ArtifactCache {
     private File tempDir;
     private Map<URIEntryentries;
 
     public FSArtifactCache(@Reference HostInfo info) {
          = new File(info.getTempDir(), "cache");
          = new HashMap<URIEntry>();
     }
 
     @Init
     public void init() throws IOException {
         if (.exists()) {
             FileHelper.deleteDirectory();
         }
         .mkdirs();
     }
 
     public synchronized URL cache(URI uriInputStream streamthrows CacheException {
         if (.containsKey(uri)) {
             throw new CacheRuntimeException("Entry for URI already exists: " + uri);
         }
         try {
             String suffix = getSuffix(uri);
             File file = File.createTempFile("fabric3-"suffix);
             FileHelper.write(streamfile);
             URL url = file.toURI().toURL();
             Entry entry = new Entry(urlfile);
             .put(urientry);
             file.deleteOnExit();
             return url;
         } catch (IOException e) {
             throw new CacheException(e);
         } finally {
             try {
                 stream.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
        }
    }
    public synchronized URL get(URI uri) {
        Entry entry = .get(uri);
        if (entry == null) {
            return null;
        }
        return entry.getEntryURL();
    }
    public synchronized void increment(URI uri) {
        Entry entry = .get(uri);
        if (entry == null) {
            throw new CacheRuntimeException("Entry for URI not found:" + uri);
        }
        entry.getCounter().getAndIncrement();
    }
    public synchronized boolean release(URI uri) {
        Entry entry = .get(uri);
        if (entry == null) {
            return false;
        }
        int i = entry.getCounter().decrementAndGet();
        if (i == 0) {
            entry.getFile().delete();
            .remove(uri);
            return true;
        }
        return false;
    }
    public synchronized int getCount(URI uri) {
        Entry entry = .get(uri);
        if (entry == null) {
            return 0;
        }
        return entry.getCounter().get();
    }

    
Calculates the temporary file name suffix based on the presence of a '.' in the URI path. Suffixes are used to preserve file MIME types, which are often calculated from the file extension.

Parameters:
uri the uri
Returns:
the suffix or null if the URI does not contain a trailing "." in the URI path.
    private String getSuffix(URI uri) {
        String suffix = null;
        String strUri = uri.toString();
        int pos = strUri.lastIndexOf(".");
        if (pos >= 0) {
            suffix = strUri.substring(pos);
        }
        return suffix;
    }
    private class Entry {
        private AtomicInteger counter;
        private URL entryURL;
        private File file;
        private Entry(URL entryURLFile file) {
            this. = entryURL;
            this. = file;
             = new AtomicInteger(1);
        }
        public AtomicInteger getCounter() {
            return ;
        }
        public URL getEntryURL() {
            return ;
        }
        public File getFile() {
            return ;
        }
    }
New to GrepCode? Check out our FAQ X