package org.juxtasoftware.util;
import org.juxtasoftware.Constants;
import org.juxtasoftware.dao.QNameFilterDao;
import org.juxtasoftware.dao.WorkspaceDao;
import org.juxtasoftware.model.QNameFilter;
import org.juxtasoftware.model.Workspace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import eu.interedition.text.NameRepository;
/**
* Helper class to create/get common qname filters.
*
* @author loufoster
*
*/
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public final class QNameFilters {
private static final String DIFF_FILTER = "differences";
private static final String REVISIONS_FILTER = "revisions";
private static final String TRANSPOSITIONS_FILTER = "transpositions";
private static final String TOKENS_FILTER = "tokens";
@Autowired private QNameFilterDao filterDao;
@Autowired private NameRepository qnameRepo;
@Autowired private WorkspaceDao workspaceDao;
/**
* Create all common filters
*/
public void initialize() {
Workspace pub = this.workspaceDao.getPublic();
if ( pub == null ) {
pub = new Workspace();
pub.setName("public");
pub.setDescription("Default public workspace");
this.workspaceDao.create(pub);
}
getDifferencesFilter();
getRevisionsFilter();
getTokensFilter();
getTranspositionsFilter();
}
/**
* Get a filter for transpositions
* @return
*/
public QNameFilter getTranspositionsFilter() {
QNameFilter filter = this.filterDao.find(TRANSPOSITIONS_FILTER);
if ( filter == null ) {
filter = new QNameFilter();
addPublicWorkspace( filter );
filter.setName(TRANSPOSITIONS_FILTER);
filter.getQNames().add( this.qnameRepo.get( Constants.TRANSPOSITION_NAME ) );
this.filterDao.create(filter);
}
return filter;
}
private void addPublicWorkspace( QNameFilter filter ) {
Workspace ws = this.workspaceDao.getPublic();
filter.setWorkspaceId(ws.getId());
}
/**
* Get a filter for heatmap-related QNames; Change and ADD/DEL
* @return
*/
public QNameFilter getDifferencesFilter() {
QNameFilter filter = this.filterDao.find(DIFF_FILTER);
if ( filter == null ) {
filter = new QNameFilter();
addPublicWorkspace( filter );
filter.setName(DIFF_FILTER);
filter.getQNames().add( this.qnameRepo.get( Constants.CHANGE_NAME ) );
filter.getQNames().add( this.qnameRepo.get( Constants.ADD_DEL_NAME ) );
this.filterDao.create(filter);
}
return filter;
}
/**
* Get a filter for revision-related QNames; add/addSpan/del/delSpan
* @return
*/
public QNameFilter getRevisionsFilter() {
QNameFilter filter = this.filterDao.find(REVISIONS_FILTER);
if ( filter == null ) {
filter = new QNameFilter();
addPublicWorkspace( filter );
filter.setName(REVISIONS_FILTER);
filter.getQNames().add( this.qnameRepo.get( Constants.TEI_ADD ) );
filter.getQNames().add( this.qnameRepo.get( Constants.TEI_ADD_SPAN ) );
filter.getQNames().add( this.qnameRepo.get( Constants.TEI_DEL ) );
filter.getQNames().add( this.qnameRepo.get( Constants.TEI_DEL_SPAN ) );
this.filterDao.create(filter);
}
return filter;
}
/**
* Get a filter for tokens
* @return
*/
public QNameFilter getTokensFilter() {
QNameFilter filter = this.filterDao.find(TOKENS_FILTER);
if ( filter == null ) {
filter = new QNameFilter();
addPublicWorkspace( filter );
filter.setName(TOKENS_FILTER);
filter.getQNames().add( this.qnameRepo.get( Constants.TOKEN_NAME ) );
this.filterDao.create(filter);
}
return filter;
}
}