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    }