001 package org.mycore.frontend.redundancy;
002
003 import java.util.ArrayList;
004 import java.util.List;
005
006 import org.apache.log4j.Logger;
007 import org.jdom.JDOMException;
008 import org.jdom.xpath.XPath;
009 import org.mycore.common.MCRConfiguration;
010 import org.mycore.common.MCRConfigurationException;
011 import org.mycore.services.fieldquery.MCRFieldDef;
012 import org.mycore.services.fieldquery.MCRSortBy;
013
014 /**
015 * Data holder class for a redundancy object type.
016 *
017 * @author Matthias Eichner
018 */
019 public class MCRRedundancyTypeData {
020
021 private static final Logger LOGGER = Logger.getLogger(MCRRedundancyTypeData.class);
022
023 protected String type;
024 protected String tableHead;
025 protected List<MCRSortBy> fieldsToSort;
026 protected List<MCRFieldDef> fieldsToCompare;
027 protected List<XPath> xpathToCompareList;
028
029 public MCRRedundancyTypeData(String alias) throws MCRConfigurationException {
030 fieldsToSort = new ArrayList<MCRSortBy>();
031 fieldsToCompare = new ArrayList<MCRFieldDef>();
032 xpathToCompareList = new ArrayList<XPath>();
033 init(alias);
034 }
035
036 protected void init(String alias) throws MCRConfigurationException {
037 MCRConfiguration config = MCRConfiguration.instance();
038 String baseString = "MCR.doubletFinder." + alias + ".";
039 type = config.getString(baseString + "type", alias);
040 tableHead = config.getString(baseString + "tableHead");
041 String fieldsToSortString = config.getString(baseString + "fieldsToSort", null);
042 String fieldsToCompareString = config.getString(baseString + "fieldsToCompare", null);
043 String xpathCompareString = config.getString(baseString + "xpathToCompare", null);
044 if(fieldsToSortString != null && !fieldsToSortString.equals("")) {
045 createFieldsToSort(fieldsToSortString);
046 }
047 if(fieldsToCompareString != null && !fieldsToCompareString.equals("")) {
048 createFieldsToCompare(fieldsToCompareString);
049 }
050 if(xpathCompareString != null && !xpathCompareString.equals("")) {
051 try {
052 createXPathCompareList(xpathCompareString);
053 } catch (JDOMException jdomExc) {
054 LOGGER.error("Couldnt parse xpath expression: " + xpathCompareString, jdomExc);
055 }
056 }
057 }
058
059 protected void createFieldsToSort(String fieldsToSortString) {
060 String[] sList = fieldsToSortString.split(",");
061 for(String sortString : sList) {
062 MCRFieldDef fieldDef = MCRFieldDef.getDef(sortString);
063 MCRSortBy mcrSortBy = new MCRSortBy(fieldDef, MCRSortBy.ASCENDING);
064 fieldsToSort.add(mcrSortBy);
065 }
066 }
067
068 protected void createFieldsToCompare(String fieldsToCompareString) {
069 String[] sList = fieldsToCompareString.split(",");
070 for(String compareString : sList) {
071 MCRFieldDef fieldDef = MCRFieldDef.getDef(compareString);
072 fieldsToCompare.add(fieldDef);
073 }
074 }
075
076 protected void createXPathCompareList(String xpathCompareString) throws JDOMException {
077 String[] sList = xpathCompareString.split(",");
078 for(String xpath : sList) {
079 xpathToCompareList.add(XPath.newInstance(xpath));
080 }
081 }
082
083 public String getType() {
084 return type;
085 }
086 public String getTableHead() {
087 return tableHead;
088 }
089 public List<MCRSortBy> getFieldsToSort() {
090 return fieldsToSort;
091 }
092 public List<MCRFieldDef> getFieldsToCompare() {
093 return fieldsToCompare;
094 }
095 public List<XPath> getXPathCompareList() {
096 return xpathToCompareList;
097 }
098 }