/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: CrudContentQueryManager.java 3953 2008-05-08 01:04:08Z gbevin $
*/
package com.uwyn.rife.crud.dam;
import com.uwyn.rife.cmf.dam.ContentQueryManager;
import com.uwyn.rife.database.Datasource;
import com.uwyn.rife.database.exceptions.DatabaseException;
import com.uwyn.rife.resources.ResourceFinder;
import com.uwyn.rife.resources.ResourceFinderClasspath;
import com.uwyn.rife.resources.exceptions.ResourceFinderErrorException;
import com.uwyn.rife.tools.ExceptionUtils;
import java.net.URL;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
public class CrudContentQueryManager<T> extends ContentQueryManager<T>
{
private Preferences mPreferences = null;
public CrudContentQueryManager(Datasource datasource, Class<T> klass)
{
super(datasource, klass);
mPreferences = Preferences.userNodeForPackage(this.getClass());
}
public void install()
throws DatabaseException
{
super.install();
long modification_time = getBaseClassModificationTime();
if (modification_time!= -1)
{
mPreferences.putLong(getBaseClass().getName(), modification_time);
}
}
public boolean isStructureOutdated()
{
long current = getBaseClassModificationTime();
if (-1 == current)
{
return false;
}
long previous = mPreferences.getLong(getBaseClass().getName(), Long.MAX_VALUE);
return previous < current;
}
public void remove()
throws DatabaseException
{
super.remove();
mPreferences.remove(getBaseClass().getName());
}
private long getBaseClassModificationTime()
{
long result = -1;
Class baseclass = getBaseClass();
String baseclass_filename = baseclass.getName().replace('.','/')+".class";
ResourceFinder resource_finder = ResourceFinderClasspath.getInstance();
URL baseclass_url = resource_finder.getResource(baseclass_filename);
if (baseclass_url != null &&
!baseclass_url.getProtocol().equals("jar"))
{
try
{
result = ResourceFinderClasspath.getInstance().getModificationTime(baseclass_url);
}
catch (ResourceFinderErrorException e)
{
Logger.getLogger("com.uwyn.rife.crud").warning("An error occurred while trying to obtain the modification time of the file '"+baseclass_filename+"': "+ExceptionUtils.getExceptionStackTrace(e));
}
}
return result;
}
}