/* $Id: DocClassSpec.java 988245 2010-08-23 18:39:35Z kwright $ */ /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.manifoldcf.crawler.connectors.filenet; import org.apache.manifoldcf.core.interfaces.*; import org.apache.manifoldcf.crawler.interfaces.*; import java.util.*; public class DocClassSpec { public static final String _rcsid = "@(#)$Id: DocClassSpec.java 988245 2010-08-23 18:39:35Z kwright $"; // Each doc class has a set of metadata fields that should be ingested with it, as well as a set of matches that // describe WHICH documents to select. protected boolean allMetadata = false; protected HashMap metadataFields = new HashMap(); protected ArrayList matchItems = new ArrayList(); public DocClassSpec() { } public DocClassSpec(SpecificationNode sn) { // Now, scan for metadata etc. String allmetadata = sn.getAttributeValue(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_ATTRIBUTE_ALLMETADATA); if (allmetadata == null || allmetadata.length() == 0) allmetadata = "false"; int j; if (allmetadata.equals("false")) { j = 0; while (j < sn.getChildCount()) { SpecificationNode node = sn.getChild(j++); if (node.getType().equals(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_NODE_METADATAFIELD)) { String fieldName = node.getAttributeValue(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_ATTRIBUTE_VALUE); metadataFields.put(fieldName,fieldName); } } } else allMetadata = true; j = 0; while (j < sn.getChildCount()) { SpecificationNode node = sn.getChild(j++); if (node.getType().equals(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_NODE_MATCH)) { String matchTypeString = node.getAttributeValue(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_ATTRIBUTE_MATCHTYPE); String matchField = node.getAttributeValue(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_ATTRIBUTE_FIELDNAME); String matchValue = node.getAttributeValue(org.apache.manifoldcf.crawler.connectors.filenet.FilenetConnector.SPEC_ATTRIBUTE_VALUE); appendMatch(matchTypeString,matchField,matchValue); } } } /** Set metadata to "all metadata" */ public void setAllMetadata(boolean value) { this.allMetadata = value; } /** Add a metadata field to include */ public void setMetadataField(String fieldName) { metadataFields.put(fieldName, fieldName); this.allMetadata = false; } /** Add a match */ public int appendMatch(String matchType, String matchField, String matchValue) { int rval = matchItems.size(); matchItems.add(new MatchItem(matchType, matchField, matchValue)); return rval; } /** Get 'all metadata' flag */ public boolean getAllMetadata() { return allMetadata; } /** Get the list of metadata fields */ public String[] getMetadataFields() { String[] rval = new String[metadataFields.size()]; Iterator iter = metadataFields.keySet().iterator(); int i = 0; while (iter.hasNext()) { rval[i++] = (String)iter.next(); } return rval; } /** Check if a metadata field is included */ public boolean checkMetadataIncluded(String fieldName) { if (allMetadata) return true; return (metadataFields.get(fieldName) != null); } /** Get the number of matches */ public int getMatchCount() { return matchItems.size(); } /** For a given match, get its type */ public String getMatchType(int matchIndex) { MatchItem mi = (MatchItem)matchItems.get(matchIndex); return mi.getMatchType(); } /** For a given match, get its field name */ public String getMatchField(int matchIndex) { MatchItem mi = (MatchItem)matchItems.get(matchIndex); return mi.getMatchField(); } /** For a given match, get its match value */ public String getMatchValue(int matchIndex) { MatchItem mi = (MatchItem)matchItems.get(matchIndex); return mi.getMatchValue(); } protected static class MatchItem { String matchType; String matchField; String matchValue; public MatchItem(String matchType, String matchField, String matchValue) { this.matchType = matchType; this.matchField = matchField; this.matchValue = matchValue; } public String getMatchType() { return matchType; } public String getMatchField() { return matchField; } public String getMatchValue() { return matchValue; } } }