Package org.owasp.webscarab.plugin.fragments

Source Code of org.owasp.webscarab.plugin.fragments.FileSystemStore

/***********************************************************************
*
* $CVSHeader$
*
* This file is part of WebScarab, an Open Web Application Security
* Project utility. For details, please see http://www.owasp.org/
*
* Copyright (c) 2002 - 2004 Rogan Dawes
*
* This program 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 2
* 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 Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* Getting Source
* ==============
*
* Source for this application is maintained at Sourceforge.net, a
* repository for free software projects.
*
* For details, please see http://www.sourceforge.net/projects/owasp
*
*/

/*
* FileSystemStore.java
*
* Created on September 14, 2004, 4:11 PM
*/

package org.owasp.webscarab.plugin.fragments;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.logging.Logger;

import org.owasp.webscarab.model.StoreException;

/**
*
* @author  knoppix
*/
public class FileSystemStore implements FragmentsStore {
   
    private File _dir;
   
    private static final String[] NONE = new String[0];
   
    private SortedMap<String, List<String>> _types = new TreeMap<String, List<String>>();
   
    private Logger _logger = Logger.getLogger(getClass().getName());
   
    /** Creates a new instance of FileSystemStore */
    public FileSystemStore(File dir, String session) throws StoreException {
        _dir = dir;
        create();
    }
   
    private void create() throws StoreException {
        if (! _dir.exists()) {
            throw new StoreException( _dir + " does not exist!");
        }
        _dir = new File(_dir,"fragments");
        if (!_dir.exists() && !_dir.mkdirs()) {
            throw new StoreException("Couldn't create directory " + _dir);
        } else if (!_dir.isDirectory()) {
            throw new StoreException(_dir + " exists, and is not a directory!");
        }
        load();
    }
   
    private void load() throws StoreException {
        File index = new File(_dir, "index");
        try {
            String type = null;
            String line;
            List<String> list = null;
            BufferedReader br = new BufferedReader(new FileReader(index));
            while ((line = br.readLine()) != null) {
                if (line.equals("")) {
                    type = null;
                } else if (type == null) {
                    type = line;
                    list = new ArrayList<String>();
                    _types.put(type, list);
                } else {
                    list.add(line);
                }
            }
            br.close();
        } catch (FileNotFoundException fnfe) { // nothing to do
        } catch (IOException ioe) {
            throw new StoreException("IOException reading the index: " + ioe);
        }
    }
   
    /** retrieves a saved text fragment
     * @param key The key used previously to save the fragment
     * @return A String containing the fragment
     * @throws StoreException if there are any problems reading from the Store
     *
     */
    public String getFragment(String key) {
        File f = new File(_dir, key);
        FileReader fr = null;
        try {
            fr = new FileReader(f);
        } catch (FileNotFoundException fnfe) {
            _logger.warning("Error reading fragment '" + key + "' : " + fnfe);
            return "";
        }
        StringBuffer sb = new StringBuffer();
        char[] buf = new char[1024];
        int got = 0;
        try {
            while ((got=fr.read(buf))>0) {
                sb.append(buf,0,got);
            }
            fr.close();
        } catch (IOException ioe) {
            _logger.warning("Error reading fragment '" + key + "' : " + ioe);
        }
        return sb.toString();
    }
   
    /** Stores a text fragment for future retrieval
     * @param type The type of the fragment
     * @param key the key that identifies the fragment.
     * @param fragment The fragment string that should be stored.
     * @throws StoreException if there are any problems writing to the Store
     *
     * @return the position of the new key in the list, or -1 if it was already there
     */
   
    public int putFragment(String type, String key, String fragment) {
        List<String> list = _types.get(type);
        if (list == null) {
            list = new ArrayList<String>();
            _types.put(type, list);
        }
        if (list.indexOf(key)>-1) return -1;
        list.add(key);
        File f = new File(_dir, key);
        FileWriter fw = null;
        try {
            fw = new FileWriter(f);
            fw.write(fragment);
            fw.flush();
            fw.close();
        } catch (IOException ioe) {
            _logger.warning("Error writing fragment " + key + " : " + ioe);
        }
        return list.size()-1;
    }
   
    public void flush() throws StoreException {
        File index = new File(_dir, "index");
        if (_types.size() == 0) return;
        try {
            String type = null;
            List<String> list;
            BufferedWriter bw = new BufferedWriter(new FileWriter(index));
            Iterator<String> it = _types.keySet().iterator();
            while (it.hasNext()) {
                type = it.next();
                bw.write(type + "\r\n");
                list = _types.get(type);
                Iterator<String> it2 = list.iterator();
                while (it2.hasNext()) {
                    String fragment = it2.next();
                    bw.write(fragment + "\r\n");
                }
                bw.write("\r\n");
            }
            bw.close();
        } catch (FileNotFoundException fnfe) { // nothing to do
        } catch (IOException ioe) {
            throw new StoreException("IOException reading the index: " + ioe);
        }
    }
   
    public int getFragmentCount(String type) {
        List<String> fragments = _types.get(type);
        if (fragments == null) return 0;
        return fragments.size();
    }
   
    public String getFragmentKeyAt(String type, int position) {
        List<String> fragments = _types.get(type);
        if (fragments == null) return null;
        return fragments.get(position);
    }
   
    public String getFragmentType(int index) {
        return _types.keySet().toArray(NONE)[index];
    }
   
    public int getFragmentTypeCount() {
        return _types.size();
    }
   
    public int indexOfFragment(String type, String key) {
        List<String> list = _types.get(type);
        if (list == null) return -1;
        return list.indexOf(key);
    }
   
}
TOP

Related Classes of org.owasp.webscarab.plugin.fragments.FileSystemStore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.