All pastes #927026 Raw Edit

DriverPerolaForDb4o

public java v1 · immutable
·published 2008-03-03 23:49 UTC
rendered paste body
/** * Copyright (C) 2005 David Lopes , Fernando Branquinho 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. Contacts perolaproject@gmail.com *//* * Created on 15/02/2008 */package perola.core.drivers;import java.util.List;import java.util.Set;import java.util.TreeSet;import perola.core.PerolaDriver;import com.db4o.DatabaseClosedException;import com.db4o.DatabaseFileLockedException;import com.db4o.Db4o;import com.db4o.ObjectContainer;import com.db4o.query.Predicate;/** * @author Allan Taborda dos Santos * @since 15/02/2008 * @version 1.0.0 */public class DriverPerolaForDb4o extends PerolaDriver {		private String nameFile;		private ObjectContainer objects;		public DriverPerolaForDb4o() {		nameFile="database.yap";	}		public DriverPerolaForDb4o(String file) {		nameFile = file;	}		@Override	public boolean existRoot() {		objects = Db4o.openFile(nameFile);		List <XmlToStore> objs = objects.query(new Predicate <XmlToStore>(){			private static final long serialVersionUID = 1L;			public boolean match(XmlToStore obj){				return obj.getUID().equals("root");			}		});		boolean retorno = (objs.size() > 0);		objects.close();		return retorno;	}	@Override	public String getRoot() throws Exception {		return readObject("root");	}	@Override	public String readObject(final String objectUID) throws Exception {		objects = Db4o.openFile(nameFile);		List <XmlToStore> objs = objects.query(new Predicate <XmlToStore>(){			private static final long serialVersionUID = 1L;			public boolean match(XmlToStore obj){				return obj.getUID().equals(objectUID);			}		});		String contents = objs.get(0).getContents();		objects.close();		return contents;	}	@Override	public void removeObject(final String objectUID) throws Exception {		try {			objects = Db4o.openFile(nameFile);		} catch (DatabaseFileLockedException e) {			//Se isto ocorrer, é que o banco de dados já está aberto, não há nada a fazer! 		}		try {			List <XmlToStore> objs = objects.query(new Predicate <XmlToStore>(){				private static final long serialVersionUID = 1L;				public boolean match(XmlToStore obj){					return obj.getUID().equals(objectUID);				}			});			if (objs.size() != 0) objects.delete(objs.get(0));			objects.commit();			objects.close();		} catch (DatabaseClosedException y) {			removeObject(objectUID); //Se o banco de dados for fechado, repetir o método para que seja aberto novamente!		}	}	@Override	public void saveObject(final String objectUID, String contents) throws Exception {		objects = Db4o.openFile(nameFile);		List <XmlToStore> objs = objects.query(new Predicate <XmlToStore>(){			private static final long serialVersionUID = 1L;			public boolean match(XmlToStore obj){				return obj.getUID().equals(objectUID);			}		});		if (objs.size() == 0) objects.set(new XmlToStore(objectUID,contents));		else {			objs.get(0).setContents(contents);			objects.set(objs.get(0));		}		objects.commit();		objects.close();	}		@Override	public void saveRoot(String contents) throws Exception {		objects = Db4o.openFile(nameFile);		objects.set(new XmlToStore("root",contents));		objects.commit();		objects.close();	}		@Override	public Set<String> listPersistedUIDs() throws Exception {		objects = Db4o.openFile(nameFile);		List <XmlToStore> objs = objects.query(new Predicate <XmlToStore>(){			private static final long serialVersionUID = 1L;			public boolean match(XmlToStore obj){				return !obj.getUID().equals("root");			}		});		Set<String> list=new TreeSet<String>();		for(int c=0;c<objs.size();c++) list.add(objs.get(c).getUID());		objects.close();		return list;	}		private class XmlToStore {				private String uid, contents;				public XmlToStore(String uidx, String contentsx){			uid = uidx;			contents = contentsx;		}				public String getUID(){			return uid;		}				public String getContents(){			return contents;		}				public void setContents(String contentsx){			contents = contentsx;		}	}}