Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * #%L
   * JBossOSGi Framework
   * %%
   * Copyright (C) 2010 - 2012 JBoss by Red Hat
   * %%
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation, either version 2.1 of the
  * License, or (at your option) any later version.
  *
  * This program 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 Lesser Public License for more details.
  *
  * You should have received a copy of the GNU General Lesser Public
  * License along with this program.  If not, see
  * <http://www.gnu.org/licenses/lgpl-2.1.html>.
  * #L%
  */
 package org.jboss.osgi.framework.internal;
 
 import static org.jboss.osgi.framework.FrameworkLogger.LOGGER;
 import static org.jboss.osgi.framework.FrameworkMessages.MESSAGES;
 
 import java.io.File;
 import java.util.Map;
 import java.util.Set;
 
A simple implementation of a BundleStorage

Author(s):
thomas.diesler@jboss.com
Since:
18-Aug-2009
 
 public final class BundleStorageImpl implements BundleStorage {
 
     private final BundleManager bundleManager;
     private final Map<StringStorageStatestorageStates = new HashMap<StringStorageState>();
     private File storageArea;
 
     public BundleStorageImpl(BundleManager bundleManager) {
         this. = bundleManager;
     }
 
     @Override
     public void initialize(Map<StringObjectpropsboolean firstInitthrows IOException {
         // Cleanup the storage area
         String storageClean = (Stringprops.get(.);
         if (firstInit == true && ..equals(storageClean)) {
             File storage = getStorageArea();
             .debugf("Deleting storage: %s"storage.getAbsolutePath());
             deleteRecursive(storage);
         }
 
         // Initialize storage states
         FilenameFilter filter = new FilenameFilter() {
             public boolean accept(File dirString name) {
                 return name.startsWith(.);
             }
         };
         File[] storageDirs = getStorageArea().listFiles(filter);
         if (storageDirs != null) {
             for (File storageDir : storageDirs) {
                 StorageState storageState = StorageState.createStorageState(storageDir);
                 if (storageState.getBundleId() != 0) {
                     .put(storageState.getLocation(), storageState);
                 }
             }
         }
     }
 
     @Override
     public StorageState createStorageState(long bundleIdString locationint startlevelVirtualFile rootFilethrows IOException {
         assert location != null : "Null location";
 
         // Make the bundle's storage dir
         File bundleDir = getStorageDir(bundleId);
         Properties props = StorageState.loadProperties(bundleDir);
         String previousRev = props.getProperty(.);
         int revision = (bundleId != 0 && previousRev != null ? Integer.parseInt(previousRev) + 1 : 0);
 
         // Write the bundle properties
         props.put(.location);
         props.put(.new Long(bundleId).toString());
        props.put(.new Integer(revision).toString());
        props.put(.new Integer(startlevel).toString());
        props.put(.new Long(System.currentTimeMillis()).toString());
        StorageState storageState = StorageState.createStorageState(bundleDirrootFileprops);
        synchronized () {
            if (storageState.getBundleId() != 0) {
                .put(storageState.getLocation(), storageState);
            }
        }
        return storageState;
    }
    @Override
    public void deleteStorageState(StorageState storageState) {
        VFSUtils.safeClose(storageState.getRootFile());
        deleteRecursive(storageState.getStorageDir());
        synchronized () {
            .remove(storageState.getLocation());
        }
    }
    @Override
    public Set<StorageStategetStorageStates() {
        return Collections.unmodifiableSet(new HashSet<StorageState>(.values()));
    }
    @Override
    public StorageState getStorageState(String location) {
        return location != null ? .get(location) : null;
    }
    @Override
    public File getStorageDir(long bundleId) {
        File bundleDir = new File(getStorageArea() + "/bundle-" + bundleId);
        if (bundleDir.exists() == false)
            bundleDir.mkdirs();
        String filePath = bundleDir.getAbsolutePath();
        try {
            filePath = bundleDir.getCanonicalPath();
        } catch (IOException ex) {
            // ignore
        }
        return new File(filePath);
    }
    @Override
    public File getStorageArea() {
        if ( == null) {
            String dirName = (String.getProperty(.);
            if (dirName == null) {
                try {
                    File storageDir = new File("./osgi-store");
                    dirName = storageDir.getCanonicalPath();
                } catch (IOException ex) {
                    throw .illegalStateCannotCreateStorageArea(ex);
                }
            }
             = new File(dirName).getAbsoluteFile();
        }
        return ;
    }
    @Override
    public File getDataFile(long bundleIdString filename) {
        File bundleDir = getStorageDir(bundleId);
        File dataFile = new File(bundleDir.getAbsolutePath() + . + filename);
        dataFile.getParentFile().mkdirs();
        String filePath = dataFile.getAbsolutePath();
        try {
            filePath = dataFile.getCanonicalPath();
        } catch (IOException ex) {
            // ignore
        }
        return new File(filePath);
    }
    private void deleteRecursive(File file) {
        if (file.isDirectory()) {
            for (File aux : file.listFiles())
                deleteRecursive(aux);
        }
        file.delete();
    }
New to GrepCode? Check out our FAQ X