⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdccrosswalk.java

📁 dspace 用j2ee架构的一个数字图书馆.开源程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     *     *  dc.coverage.temporal = <dcterms:temporal />     */    private void init()        throws CrosswalkException, IOException    {        if (inited)            return;        inited = true;        myName = getPluginInstanceName();        if (myName == null)            throw new CrosswalkInternalException("Cannot determine plugin name, "+                       "You must use PluginManager to instantiate QDCCrosswalk so the instance knows its name.");        // grovel DSpace configuration for namespaces        List nsList = new ArrayList();        Enumeration pe = ConfigurationManager.propertyNames();        String propname = CONFIG_PREFIX + ".namespace."+ myName +".";        while (pe.hasMoreElements())        {            String key = (String)pe.nextElement();            if (key.startsWith(propname))                nsList.add(Namespace.getNamespace(key.substring(propname.length()),                             ConfigurationManager.getProperty(key)));        }        nsList.add(Namespace.XML_NAMESPACE);        namespaces = (Namespace[])nsList.toArray(new Namespace[nsList.size()]);        // get XML schemaLocation fragment from config        schemaLocation = ConfigurationManager.getProperty(CONFIG_PREFIX + ".schemaLocation."+ myName);        // read properties        String cmPropName = CONFIG_PREFIX+".properties."+myName;        String propsFilename = ConfigurationManager.getProperty(cmPropName);        if (propsFilename == null)            throw new CrosswalkInternalException("Configuration error: "+                "No properties file configured for QDC crosswalk named \""+myName+"\"");        String parent = ConfigurationManager.getProperty("dspace.dir") +            File.separator + "config" + File.separator;        File propsFile = new File(parent, propsFilename);        Properties qdcProps = new Properties();        qdcProps.load(new FileInputStream(propsFile));        // grovel properties to initialize qdc->element and element->qdc maps.        // evaluate the XML fragment with a wrapper including namespaces.        String postlog = "</wrapper>";        StringBuffer prologb = new StringBuffer("<wrapper");        for (int i = 0; i < namespaces.length; ++i)        {            prologb.append(" xmlns:");            prologb.append(namespaces[i].getPrefix());            prologb.append("=\"");            prologb.append(namespaces[i].getURI());            prologb.append("\"");        }        prologb.append(">");        String prolog = prologb.toString();        pe = qdcProps.propertyNames();        while (pe.hasMoreElements())        {            String qdc = (String)pe.nextElement();            String val = qdcProps.getProperty(qdc);            try            {                Document d = builder.build(new StringReader(prolog+val+postlog));                Element element = (Element)d.getRootElement().getContent(0);                qdc2element.put(qdc, element);                element2qdc.put(makeQualifiedTagName(element), qdc);                log.debug("Building Maps: qdc=\""+qdc+"\", element=\""+element.toString()+"\"");            }            catch (org.jdom.JDOMException je)            {                throw new CrosswalkInternalException("Failed parsing XML fragment in properties file: \""+prolog+val+postlog+"\": "+je.toString());            }        }    }    public Namespace[] getNamespaces()    {        try        {            init();        }        catch (Exception e)        {        }        return namespaces;    }    public String getSchemaLocation()    {        try        {            init();        }        catch (Exception e)        {        }        return schemaLocation;    }    /**     * Returns object's metadata in MODS format, as XML structure node.     */    public List disseminateList(DSpaceObject dso)        throws CrosswalkException,               IOException, SQLException, AuthorizeException    {        if (dso.getType() != Constants.ITEM)            throw new CrosswalkObjectNotSupported("QDCCrosswalk can only crosswalk an Item.");        Item item = (Item)dso;        init();        DCValue[] dc = item.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY);        List result = new ArrayList(dc.length);        for (int i = 0; i < dc.length; i++)        {            // Compose qualified DC name - schema.element[.qualifier]            // e.g. "dc.title", "dc.subject.lcc", "lom.Classification.Keyword"            String qdc = dc[i].schema+"."+                         ((dc[i].qualifier == null) ? dc[i].element                            : (dc[i].element + "." + dc[i].qualifier));            Element elt = (Element)qdc2element.get(qdc);            // only complain about missing elements in the DC schema:            if (elt == null)            {                if (dc[i].schema.equals(MetadataSchema.DC_SCHEMA))                    log.warn("WARNING: "+myName+": No QDC mapping for \"" + qdc+"\"");            }            else            {                Element qe = (Element)elt.clone();                qe.setText(dc[i].value);                if (dc[i].language != null)                    qe.setAttribute("lang", dc[i].language, Namespace.XML_NAMESPACE);                result.add(qe);            }        }        return result;    }    public Element disseminateElement(DSpaceObject dso)        throws CrosswalkException,               IOException, SQLException, AuthorizeException    {        Element root = new Element("qualifieddc", DCTERMS_NS);        root.addContent(disseminateList(dso));        return root;    }    public boolean canDisseminate(DSpaceObject dso)    {        return true;    }    public void ingest(Context context, DSpaceObject dso, Element root)        throws CrosswalkException, IOException, SQLException, AuthorizeException    {        init();        // NOTE:  don't bother comparing namespace on root element        // because DCMI doesn't specify one, and every app uses its        // own..  just give up in the face of this madness and accept        // anything with the right name.        if (!(root.getName().equals("qualifieddc")))            throw new MetadataValidationException("Wrong root element for Qualified DC: "+root.toString());        ingest(context, dso, root.getChildren());    }    public void ingest(Context context, DSpaceObject dso, List ml)        throws CrosswalkException, IOException, SQLException, AuthorizeException    {        init();        // for now, forget about any targets but item.        if (dso.getType() != Constants.ITEM)            throw new CrosswalkInternalException("Wrong target object type, QDCCrosswalk can only crosswalk to an Item.");        Item item = (Item)dso;        Iterator mi = ml.iterator();        while (mi.hasNext())        {            Element me = (Element)mi.next();            String key = makeQualifiedTagName(me);            // if the root element gets passed here, recurse:            if (me.getName().equals("qualifieddc"))                ingest(context, dso, me.getChildren());            else if (element2qdc.containsKey(key))            {                String qdc[] = ((String)element2qdc.get(key)).split("\\.");                // get language - prefer xml:lang, accept lang.                String lang = me.getAttributeValue("lang", Namespace.XML_NAMESPACE);                if (lang == null)                    lang = me.getAttributeValue("lang");                if (qdc.length == 3)                    item.addMetadata(qdc[0], qdc[1], qdc[2], lang, me.getText());                else if (qdc.length == 2)                    item.addMetadata(qdc[0], qdc[1], null,   lang, me.getText());                else                    throw new CrosswalkInternalException("Unrecognized format in QDC element identifier for key=\""+key+"\", qdc=\""+(String)element2qdc.get(key)+"\"");            }            else                log.warn("WARNING: "+myName+": No mapping for Element=\"" + key+"\" to qdc.");        }    }    public boolean preferList()    {        return true;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -