public abstract class GenericServiceImpl<T> implements GenericService<T>
{
private final static GyLogger logger = GyLogger.getLogger(GenericServiceImpl.class);
@Autowired
SolrServerService solrServerService;
String coreName = null;
public GenericServiceImpl() {
initCoreName();
}
/**
* It used to obtain current core name
*/
protected abstract void initCoreName();
/**
*
* @param coreName
*/
protected void setCoreName(String coreName) {
this.coreName = coreName;
}
@Override
public void add(T obj)
{
try
{
solrServerService.add(coreName, obj);
logger.info("Success to add index ["+obj.toString()+ "] for core "+coreName);
} catch (Exception e)
{
logger.error("Fail to add index ["+obj.toString()+ "] for core "+coreName+" due to:"+e.toString());
}
}
@Override
public void delete(String id)
{
try
{
solrServerService.delete(coreName, id);
logger.info("Success to delete index ["+id+ "] for core "+coreName);
}
catch (Exception e)
{
logger.error("Fail to delete index ["+id+ "] for core "+coreName+" due to:"+e.toString());
}
}
@Override
public void batchAdd(List<T> list)
{
try
{
solrServerService.batchAdd(coreName, list);
logger.info("Success to batchAdd index ["+list.size()+ "] for core "+coreName);
}
catch (Exception e)
{
logger.error("Fail to batchAdd ["+list.size()+ "] index for core "+coreName+" due to:"+e.toString());
}
}
@Override
public void batchDelete(List<String> idList)
{
try
{
solrServerService.batchDelete(coreName, idList);
logger.info("Success to batchDelete ["+idList.size()+ "] index for core "+coreName);
}
catch (Exception e)
{
logger.error("Fail to batchDelete ["+idList.size()+ "] index for core "+coreName+" due to:"+e.toString());
}
}
@Override
public void batchUpdate(List<IndexUpdate> updateModels)
{
if(updateModels == null || updateModels.isEmpty())
{
return ;
}
List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();
for(IndexUpdate model: updateModels)
{
SolrInputDocument solrDoc = new SolrInputDocument();
for(Label field:model.getFields())
{
Map<String, Object> map = new HashMap<String, Object>();
map.put(model.getMode().getValue(), field.getValue());
solrDoc.addField(field.getKey(), map);
}
solrDoc.addField("id", model.getId());
solrDocs.add(solrDoc);
}
try
{
solrServerService.updateValues(coreName, solrDocs);
logger.info("Success to batchUpdate ["+solrDocs.size()+ "] index for core "+coreName);
}
catch (Exception e)
{
logger.error("Fail to batchUpdate ["+solrDocs.size()+ "] index for core "+coreName+" due to:"+e.toString());
}
}
@Override
public void update(IndexUpdate updateModel)
{
if(updateModel == null)
{
return ;
}
SolrInputDocument solrDoc = new SolrInputDocument();
for(Label field:updateModel.getFields())
{
Map<String, Object> map = new HashMap<String, Object>();
map.put(updateModel.getMode().getValue(), field.getValue());
solrDoc.addField(field.getKey(), map);
}
solrDoc.addField("id", updateModel.getId());
List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();
solrDocs.add(solrDoc);
try
{
solrServerService.updateValues(coreName, solrDocs);
logger.info("Success to update ["+solrDoc.toString()+ "] index for core "+coreName);
}
catch (Exception e)
{
logger.error("Fail to update ["+solrDoc.toString()+ "] index for core "+coreName+" due to:"+e.toString());
}
}
}