Example usage for org.dom4j Element getNamespacePrefix

List of usage examples for org.dom4j Element getNamespacePrefix

Introduction

In this page you can find the example usage for org.dom4j Element getNamespacePrefix.

Prototype

String getNamespacePrefix();

Source Link

Document

Returns the namespace prefix of this element if one exists otherwise an empty String is returned.

Usage

From source file:com.cladonia.xml.viewer.XmlElementNode.java

License:Mozilla Public License

protected Line parseEndTag(Vector lines, Line current, Element elem) {

    StyledElement styledEnd = new StyledElement();
    styledEnd.addString(OPEN_BRACKET);/*from   ww  w . j a  va2s.c  o  m*/
    styledEnd.addString(SLASH);

    if (_viewer.showNamespaces()) {
        String prefix = elem.getNamespacePrefix();

        if (prefix != null && prefix.length() > 0) {
            styledEnd.addString(new ElementPrefix(prefix));
            styledEnd.addString(ELEMENT_COLON);
        }
    }

    styledEnd.addString(new ElementName(elem.getName()));
    styledEnd.addString(CLOSE_BRACKET);
    current.addStyledElement(styledEnd);

    return current;
}

From source file:com.openkm.openmeetings.service.RestService.java

License:Open Source License

/**
 * call//  ww w  .jav a 2  s  .  c  o m
 * 
 * @param request
 * @param param
 * @return
 * @throws Exception
 */
public static Map<String, Element> callMap(String request, Object param) throws Exception {
    HttpClient client = new HttpClient();
    GetMethod method = null;
    try {
        method = new GetMethod(getEncodetURI(request).toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    int statusCode = 0;
    try {
        statusCode = client.executeMethod(method);
    } catch (HttpException e) {
        throw new Exception(
                "Connection to OpenMeetings refused. Please check your OpenMeetings configuration.");
    } catch (IOException e) {
        throw new Exception(
                "Connection to OpenMeetings refused. Please check your OpenMeetings configuration.");
    }

    switch (statusCode) {
    case 200: // OK
        break;
    case 400:
        throw new Exception(
                "Bad request. The parameters passed to the service did not match as expected. The Message should tell you what was missing or incorrect.");
    case 403:
        throw new Exception(
                "Forbidden. You do not have permission to access this resource, or are over your rate limit.");
    case 503:
        throw new Exception(
                "Service unavailable. An internal problem prevented us from returning data to you.");
    default:
        throw new Exception("Your call to OpenMeetings! Web Services returned an unexpected  HTTP status of: "
                + statusCode);
    }

    InputStream rstream = null;
    try {
        rstream = method.getResponseBodyAsStream();
    } catch (IOException e) {
        e.printStackTrace();
        throw new Exception("No Response Body");
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(rstream));
    SAXReader reader = new SAXReader();
    Document document = null;
    String line;
    try {
        while ((line = br.readLine()) != null) {
            document = reader.read(new ByteArrayInputStream(line.getBytes("UTF-8")));
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        throw new Exception("UnsupportedEncodingException by SAXReader");
    } catch (IOException e) {
        e.printStackTrace();
        throw new Exception("IOException by SAXReader in REST Service");
    } catch (DocumentException e) {
        e.printStackTrace();
        throw new Exception("DocumentException by SAXReader in REST Service");
    } finally {
        br.close();
    }

    Element root = document.getRootElement();
    Map<String, Element> elementMap = new LinkedHashMap<String, Element>();

    for (@SuppressWarnings("unchecked")
    Iterator<Element> it = root.elementIterator(); it.hasNext();) {
        Element item = it.next();
        if (item.getNamespacePrefix() == "soapenv") {
            throw new Exception(item.getData().toString());
        }
        String nodeVal = item.getName();
        elementMap.put(nodeVal, item);
    }

    return elementMap;
}

From source file:com.openkm.openmeetings.service.RestService.java

License:Open Source License

/**
 * call/*from   w w  w . ja va2 s  . c  o m*/
 * 
 * @param request
 * @param param
 * @return
 * @throws Exception
 */
public static List<Element> callList(String request, Object param) throws Exception {
    HttpClient client = new HttpClient();
    GetMethod method = null;
    try {
        method = new GetMethod(getEncodetURI(request).toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    int statusCode = 0;
    try {
        statusCode = client.executeMethod(method);
    } catch (HttpException e) {
        throw new Exception(
                "Connection to OpenMeetings refused. Please check your OpenMeetings configuration.");
    } catch (IOException e) {
        throw new Exception(
                "Connection to OpenMeetings refused. Please check your OpenMeetings configuration.");
    }

    switch (statusCode) {
    case 200: // OK
        break;
    case 400:
        throw new Exception(
                "Bad request. The parameters passed to the service did not match as expected. The Message should tell you what was missing or incorrect.");
    case 403:
        throw new Exception(
                "Forbidden. You do not have permission to access this resource, or are over your rate limit.");
    case 503:
        throw new Exception(
                "Service unavailable. An internal problem prevented us from returning data to you.");
    default:
        throw new Exception("Your call to OpenMeetings! Web Services returned an unexpected  HTTP status of: "
                + statusCode);
    }

    InputStream rstream = null;
    try {
        rstream = method.getResponseBodyAsStream();
    } catch (IOException e) {
        e.printStackTrace();
        throw new Exception("No Response Body");
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(rstream));
    SAXReader reader = new SAXReader();
    Document document = null;
    String line;
    try {
        while ((line = br.readLine()) != null) {
            document = reader.read(new ByteArrayInputStream(line.getBytes("UTF-8")));
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        throw new Exception("UnsupportedEncodingException by SAXReader");
    } catch (IOException e) {
        e.printStackTrace();
        throw new Exception("IOException by SAXReader in REST Service");
    } catch (DocumentException e) {
        e.printStackTrace();
        throw new Exception("DocumentException by SAXReader in REST Service");
    } finally {
        br.close();
    }

    Element root = document.getRootElement();
    List<Element> elementList = new ArrayList<Element>();

    for (@SuppressWarnings("unchecked")
    Iterator<Element> it = root.elementIterator(); it.hasNext();) {
        Element item = it.next();
        if (item.getNamespacePrefix() == "soapenv") {
            throw new Exception(item.getData().toString());
        }
        elementList.add(item);
    }

    return elementList;
}

From source file:com.panet.imeta.trans.steps.getxmldata.GetXMLData.java

License:Open Source License

@SuppressWarnings("unchecked")
public void prepareNSMap(Element l) {
    for (Namespace ns : (List<Namespace>) l.declaredNamespaces()) {
        if (ns.getPrefix().trim().length() == 0) {
            data.NAMESPACE.put("pre" + data.NSPath.size(), ns.getURI());
            String path = "";
            Element element = l;
            while (element != null) {
                if (element.getNamespacePrefix() != null && element.getNamespacePrefix().length() > 0) {
                    path = "/" + element.getNamespacePrefix() + ":" + element.getName() + path;
                } else {
                    path = "/" + element.getName() + path;
                }/*from   www. j  av  a 2 s. com*/
                element = element.getParent();
            }
            data.NSPath.add(path);
        } else {
            data.NAMESPACE.put(ns.getPrefix(), ns.getURI());
        }
    }
    for (Element e : (List<Element>) l.elements()) {
        prepareNSMap(e);
    }
}

From source file:com.wabacus.config.xml.XmlAssistant.java

License:Open Source License

public Element getSingleElementByName(Element parent, String nodename) {
    if (parent == null || nodename == null || nodename.trim().equals(""))
        return null;
    List lstChildren = parent.selectNodes(Consts.XML_NAMESPACE_KEY + ":" + nodename);
    if (lstChildren == null || lstChildren.size() == 0)
        return null;
    Element ele = (Element) lstChildren.get(0);
    if (ele == null)
        return null;
    if (!isLegalNamespaceElement(ele)) {
        throw new WabacusConfigLoadingException(
                "namespace" + ele.getNamespacePrefix() + "???");
    }/*from   ww w  . j ava2 s .co  m*/
    return ele;
}

From source file:com.wabacus.config.xml.XmlAssistant.java

License:Open Source License

public boolean isLegalNamespaceElement(Element element) {
    if (element == null)
        return false;
    String prex = element.getNamespacePrefix();
    if (prex == null)
        return false;
    prex = prex.trim();/*from ww  w . j av  a2 s . co m*/
    if (!prex.equals("") && !prex.equals("wx")) {
        return false;
    }
    return true;
}

From source file:com.wabacus.config.xml.XmlAssistant.java

License:Open Source License

public XmlElementBean parseXmlValueToXmlBean(Element element) {
    if (element == null)
        return null;
    if (!isLegalNamespaceElement(element)) {
        throw new WabacusConfigLoadingException("namespace" + element.getNamespacePrefix() + "??");
    }//  ww w  . j a va2s .co m
    XmlElementBean xebean = new XmlElementBean(element.getName());
    String tagContent = element.getText();
    xebean.setContent(tagContent == null ? "" : tagContent.trim());
    Iterator itAttributes = element.attributeIterator();
    Map<String, String> mProps = new HashMap<String, String>();
    xebean.setMProperties(mProps);
    Attribute eleProps;
    while (itAttributes.hasNext()) {
        eleProps = (Attribute) itAttributes.next();
        mProps.put(eleProps.getName(), eleProps.getValue());
    }
    List<XmlElementBean> lstChildren = null;
    List lstChildElements = element.elements();
    if (lstChildElements != null && lstChildElements.size() > 0) {
        lstChildren = new ArrayList<XmlElementBean>();
        XmlElementBean eleTmp;
        for (Object eleObj : lstChildElements) {
            if (eleObj == null)
                continue;
            eleTmp = parseXmlValueToXmlBean((Element) eleObj);
            if (eleTmp == null)
                continue;
            eleTmp.setParentElement(xebean);
            lstChildren.add(eleTmp);
        }
        xebean.setLstChildElements(lstChildren);
    }
    return xebean;
}

From source file:edu.ucsd.library.xdre.imports.RDFDAMS4ImportHandler.java

/**
 * Procedure to populate the RDF metadata and ingest the files
 *//* w  w  w . ja v  a  2 s. c o m*/
public boolean execute() throws Exception {
    if (filesPaths != null) {
        File file = null;
        // List the source files
        for (int i = 0; i < filesPaths.length; i++) {
            file = new File(filesPaths[i]);
            if (file.exists()) {
                listFile(filesMap, file);
            }
        }
    }

    String message = "";
    Document doc = null;
    DamsURI damsURI = null;

    String oid = null;
    int fLen = rdfFiles.length;
    String currFile = null;
    SAXReader saxReader = new SAXReader();
    for (int i = 0; i < fLen && !interrupted; i++) {
        currFile = rdfFiles[i].getName();
        setStatus(
                "Processing external import for file " + currFile + " (" + (i + 1) + " of " + fLen + ") ... ");
        try {
            doc = saxReader.read(rdfFiles[i]);
            List<Node> nodes = doc.selectNodes("//@rdf:about");
            for (int j = 0; j < nodes.size(); j++) {
                Node nUri = nodes.get(j);
                String iUri = nUri.getStringValue();
                Node parentNode = nUri.getParent();
                String nName = parentNode.getName();
                if (iUri.endsWith("/COL") || !(iUri.startsWith("http") && iUri.indexOf("/ark:/") > 0)) {
                    // Assign ARK
                    if (nName.endsWith("Object") || nName.endsWith("Component") || nName.endsWith("File")
                            || (((Element) parentNode).isRootElement()
                                    || (parentNode.getParent().isRootElement()
                                            && parentNode.getParent().getName().equals("RDF")))) {
                        String objId = iUri;

                        if (nName.endsWith("Component") || nName.endsWith("File")) {
                            damsURI = DamsURI.toParts(iUri, null);
                            objId = damsURI.getObject();
                        }
                        String srcObjKey = objId + "::" + rdfFiles[i].getAbsolutePath();
                        oid = idsMap.get(srcObjKey);

                        // Assign new ARK
                        if (oid == null) {
                            oid = getNewId();
                            idsMap.put(srcObjKey, oid);
                        }

                        if (nName.endsWith("Object")) {
                            objId = oid;
                            objRecords.put(objId, currFile);
                        } else if (nName.endsWith("Component") || nName.endsWith("File")) {
                            damsURI.setObject(oid);
                            // XXX
                            // Assign cid and fid for Component and FIle if required
                            objId = damsURI.toString();
                        } else
                            objId = oid;
                        nUri.setText(objId);
                        updateReference(doc, iUri, objId);
                    } else {
                        String field = null;
                        Node tNode = null;
                        String xPath = null;
                        Map<String, String> props = new TreeMap<String, String>();
                        String elemXPath = parentNode.getPath();
                        if (nName.endsWith("Collection") || nName.endsWith("CollectionPart")) {
                            // Retrieve the Collection record
                            field = "title_tesim";
                            xPath = "dams:title/mads:Title/mads:authoritativeLabel";
                            tNode = parentNode.selectSingleNode(xPath);
                            if (tNode == null) {
                                // Loop through to locate the rdfs:label if not selected by xPath.
                                Node n = parentNode.selectSingleNode("dams:title");
                                for (Iterator<Element> it = ((Element) n).elementIterator(); it.hasNext();) {
                                    Element elem = it.next();
                                    if (elem.getNamespacePrefix().equals("mads")
                                            && elem.getName().equals("Title"))
                                        tNode = elem.selectSingleNode("mads:authoritativeLabel");
                                }
                            }
                        } /* else if (nName.endsWith("Language") || nName.endsWith("Authority") || nName.endsWith("Subject") || nName.endsWith("Name") || nName.endsWith("Topic") || nName.endsWith("GenreForm") || nName.endsWith("Temporal") || nName.endsWith("Geographic")){
                            // Subject, Authority records use mads:authoritativeLabel
                            field = "name_tesim";
                            xPath = "mads:authoritativeLabel";
                            tNode = parentNode.selectSingleNode(xPath);
                          } */else if (nName.endsWith(COPYRIGHT)) {
                            // Copyright records use dams:copyrightStatus, plus other properties in the next step.
                            field = "status_tesim";
                            xPath = "dams:copyrightStatus";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = copyrightProperties(parentNode);
                        } else if (nName.endsWith(LICENSE)) {
                            // License records use dams:LicenseNote, plus other properties in the next step.
                            field = "note_tesim";
                            xPath = "dams:licenseNote";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = licenseProperties(parentNode);
                        } else if (nName.endsWith(OTHERRIGHTS)) {
                            // Copyright records use dams:copyrightStatus, plus other properties in the next step.
                            field = "otherRightsBasis_tesim";
                            xPath = "dams:otherRightsBasis";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = licenseProperties(parentNode);
                        } else if (nName.endsWith(RELATEDRESOURCE)) {
                            // RelatedResource records use dams:description, plus other properties in the next step.
                            field = "description_tesim";
                            xPath = "dams:description";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = relatedResourceProperties(parentNode);
                        } else if (nName.endsWith(SOURCECAPTURE)) {
                            // SourceCapture records use dams:sourceType, plus other properties in the next step.
                            field = "sourceType_tesim";
                            xPath = "dams:sourceType";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = sourceCaptureProperties(parentNode);
                        } else if (elemXPath.indexOf("mads", elemXPath.lastIndexOf('/') + 1) >= 0) {
                            // MADSScheme and Language
                            if (nName.endsWith(MADSSCHEME) || nName.equals(LANGUAGE)) {
                                field = "code_tesim";
                                xPath = "mads:code";
                                tNode = parentNode.selectSingleNode(xPath);
                                if (tNode == null) {
                                    field = "name_tesim";
                                    xPath = "rdfs:label";
                                    tNode = parentNode.selectSingleNode(xPath);
                                    if (tNode == null) {
                                        // Loop through to locate the rdfs:label if not selected by xPath.
                                        for (Iterator<Element> it = ((Element) parentNode).elementIterator(); it
                                                .hasNext();) {
                                            Element elem = it.next();
                                            if (elem.getNamespacePrefix().equals("rdfs")
                                                    && elem.getName().equals("label"))
                                                tNode = elem;
                                        }
                                    }
                                }
                            } else {
                                // Subject, Authority records use mads:authoritativeLabel
                                field = "name_tesim";
                                xPath = "mads:authoritativeLabel";
                                tNode = parentNode.selectSingleNode(xPath);
                                if (tNode == null) {
                                    // Try to use the mads:code for mapping when mads:authoritativeLabel is not available
                                    field = "code_tesim";
                                    xPath = "mads:code";
                                    tNode = parentNode.selectSingleNode(xPath);
                                }
                                // Mapping for mads:isMemberOfMADSScheme
                                String madsScheme = null;
                                Node madsSchemeNode = parentNode.selectSingleNode("mads:isMemberOfMADSScheme");
                                if (madsSchemeNode != null) {
                                    Node msValueNode = madsSchemeNode.selectSingleNode("@rdf:resource");
                                    if (msValueNode != null) {
                                        madsScheme = madsSchemeNode.getStringValue();
                                        props.put("scheme_tesim", madsScheme);
                                    } else if ((madsSchemeNode = madsSchemeNode
                                            .selectSingleNode("mads:MADSScheme")) != null
                                            && madsSchemeNode.hasContent()) {
                                        if ((msValueNode = madsSchemeNode
                                                .selectSingleNode("mads:code")) != null) {
                                            madsScheme = msValueNode.getText();
                                            props.put("scheme_code_tesim", madsScheme);
                                        } else if ((msValueNode = madsSchemeNode
                                                .selectSingleNode("rdfs:label")) != null) {
                                            madsScheme = msValueNode.getText();
                                            props.put("scheme_name_tesim", madsScheme);
                                        }
                                    } else {
                                        props.put("scheme_tesim", "");
                                    }
                                } else {
                                    props.put("scheme_tesim", null);
                                }
                            }

                        } else {
                            // XXX Other Rights records like Statute, License, Other Rights etc. 
                            field = "value_tesim";
                            xPath = "rdf:value";
                            tNode = parentNode.selectSingleNode(xPath);
                            field = "code_tesim";
                            if (tNode == null) {
                                xPath = "dams:code";
                                tNode = parentNode.selectSingleNode(xPath);
                            }
                        }
                        if (tNode == null) {
                            throw new Exception("Element " + xPath + " is missing from the " + nName
                                    + " record " + iUri + " in file " + currFile + ".");
                        }
                        updateDocument(doc, parentNode, field, tNode.getText(), props);
                    }
                } else if (nName.endsWith("Object")) {
                    objRecords.put(iUri, currFile);
                }
            }

            String dams4Rdf = doc.asXML();
            logData("dams4_" + rdfFiles[i].getName(), dams4Rdf);

            // Ingest the records
            String subjectId = null;
            DamsURI objURI = null;
            List<DamsURI> objURIs = null;
            RDFStore graph = null;

            rdfStore = new RDFStore();
            Model rdf = rdfStore.loadRDFXML(dams4Rdf);
            initHandler();

            Model iRdf = null;
            int jLen = items.size();

            for (int j = 0; j < jLen && !interrupted; j++) {
                graph = new RDFStore();
                recordsCount++;
                // Add subject
                subjectId = items.get(j);
                try {
                    setStatus("Processing metadata for record " + subjectId + " (" + (j + 1) + " of " + jLen
                            + ") in file " + currFile + " ... ");
                    boolean succeeded = false;
                    objURIs = objects.get(subjectId);

                    for (int k = 0; k < objURIs.size(); k++) {
                        objURI = objURIs.get(k);
                        iRdf = rdfStore.querySubject(objURI.toString());
                        graph.merge(iRdf);
                    }

                    // Update object
                    //log.info(j + " ingesting record " + subjectId + ":\n" + graph.export(RDFStore.RDFXML_ABBREV_FORMAT) + "\n\n");

                    succeeded = damsClient.updateObject(subjectId, graph.export(RDFStore.RDFXML_ABBREV_FORMAT),
                            Constants.IMPORT_MODE_ADD);

                    if (!succeeded) {
                        if (metadataFailed.indexOf(currFile) < 0)
                            failedCount++;
                        metadataFailed.append(subjectId + " (" + currFile + "), \n");
                        message = "Metadata import for record " + subjectId + " failed (" + (j + 1) + " of "
                                + jLen + ") in file " + currFile + ".";
                        setStatus(message);
                        logError(message + "\n Error RDF: \n" + graph.export(RDFStore.RDFXML_ABBREV_FORMAT));
                    } else {
                        recordsIngested.add(subjectId);
                        message = "Metadata import for record " + subjectId + " succeeded (" + (j + 1) + " of "
                                + jLen + ") in file " + currFile + ". ";
                        setStatus(message);
                        logMessage(message);
                        log.info(message);

                        // Update SOLR fre records ingested.
                        updateSOLR(subjectId);
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    if (metadataFailed.indexOf(currFile) < 0)
                        failedCount++;
                    metadataFailed.append(subjectId + " (" + currFile + "), \n");
                    message = "Metadata import failed: " + e.getMessage();
                    setStatus(message + " (" + (j + 1) + " of " + jLen + ") in file " + currFile + ".");
                    logError(message);
                }

                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    interrupted = true;
                    failedCount++;
                    metadataFailed.append(subjectId + " (" + currFile + ") \n");
                    message = "Metadata import interrupted for subject " + subjectId + ". \n Error: "
                            + e.getMessage() + "\n";
                    setStatus("Canceled");
                    clearSession();
                    logError(message);
                }
            }

            // Ingest the source file
            if (importOption.equalsIgnoreCase("metadataAndFiles")) {
                uploadFiles(rdf, currFile);
            }
        } catch (Exception e) {
            e.printStackTrace();
            failedCount++;
            message = "Import failed for " + currFile + ": " + e.getMessage();
            setStatus(message + " (" + (i + 1) + " of " + fLen + ").");
            logError(message);
        } finally {
            // Update SOLR for files uploaded
            int iLen = objWithFiles.size();
            for (int j = 0; j < iLen && !interrupted; j++) {
                updateSOLR(objWithFiles.get(j));
            }
        }

        setProgressPercentage(((i + 1) * 100) / fLen);

        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
            interrupted = true;
            failedCount++;
            message = "Import interrupted for oject in " + currFile + ". \n Error: " + e.getMessage() + "\n";
            setStatus("Canceled");
            clearSession();
            logError(message);
        }
    }
    return exeResult;
}

From source file:edu.ucsd.library.xdre.imports.RDFDAMS4ImportTsHandler.java

/**
 * Procedure to populate the RDF metadata and ingest the files
 *///w  ww .j  a  v a  2 s  . c o  m
@Override
public boolean execute() throws Exception {
    if (filesPaths != null) {
        File file = null;
        // List the source files
        for (int i = 0; i < filesPaths.length; i++) {
            file = new File(filesPaths[i]);
            if (file.exists()) {
                listFile(filesMap, file);
            }
        }
    }

    String message = "";
    Document doc = null;
    DamsURI damsURI = null;

    List<String> recordsToReplace = null;
    String oid = null;
    int fLen = rdfFiles.length;
    String currFile = null;
    SAXReader saxReader = new SAXReader();
    for (int i = 0; i < fLen && !interrupted; i++) {
        if (i == 0)
            logMessage("Object Import status:\n[Object title]   -   [URI]   -   [Status]   -   [Timestamp]");

        recordsToReplace = new ArrayList<>();
        currFile = rdfFiles[i].getName();

        preprocessedTimestamp = damsDateFormat.format(rdfFiles[i].lastModified());

        setStatus(
                "Processing external import for file " + currFile + " (" + (i + 1) + " of " + fLen + ") ... ");
        try {
            doc = saxReader.read(rdfFiles[i]);
            List<Node> nodes = doc.selectNodes("//@rdf:about");
            for (int j = 0; j < nodes.size(); j++) {
                Node nUri = nodes.get(j);
                String iUri = nUri.getStringValue();
                Node parentNode = nUri.getParent();
                String nName = parentNode.getName();
                if (iUri.endsWith("/COL") || !(iUri.startsWith("http") && iUri.indexOf("/ark:/") > 0)) {
                    // Assign ARK
                    if (nName.endsWith("Object") || nName.endsWith("Component") || nName.endsWith("File")
                            || (((Element) parentNode).isRootElement()
                                    || (parentNode.getParent().isRootElement()
                                            && parentNode.getParent().getName().equals("RDF")))) {
                        String objId = iUri;

                        if (nName.endsWith("Component") || nName.endsWith("File")) {
                            damsURI = DamsURI.toParts(iUri, null);
                            objId = damsURI.getObject();
                        }
                        String srcObjKey = objId + "::" + rdfFiles[i].getAbsolutePath();
                        oid = idsMap.get(srcObjKey);

                        // Assign new ARK
                        if (oid == null) {
                            oid = getNewId();
                            idsMap.put(srcObjKey, oid);
                        }

                        if (nName.endsWith("Object")) {
                            objId = oid;
                            objRecords.put(objId, currFile);
                        } else if (nName.endsWith("Component") || nName.endsWith("File")) {
                            damsURI.setObject(oid);
                            // XXX
                            // Assign cid and fid for Component and FIle if required
                            objId = damsURI.toString();
                        } else
                            objId = oid;
                        nUri.setText(objId);
                        updateReference(doc, iUri, objId);
                    } else {
                        String field = null;
                        Node tNode = null;
                        String xPath = null;
                        Map<String, String> props = new TreeMap<String, String>();
                        String elemXPath = parentNode.getPath();
                        if (nName.endsWith("Collection") || nName.endsWith("CollectionPart")) {
                            // Retrieve the Collection record
                            field = "dams:title/mads:authoritativeLabel";
                            xPath = "dams:title/mads:Title/mads:authoritativeLabel";
                            tNode = parentNode.selectSingleNode(xPath);
                            if (tNode == null) {
                                // Loop through to locate the rdfs:label if not selected by xPath.
                                Node n = parentNode.selectSingleNode("dams:title");
                                for (Iterator<Element> it = ((Element) n).elementIterator(); it.hasNext();) {
                                    Element elem = it.next();
                                    if (elem.getNamespacePrefix().equals("mads")
                                            && elem.getName().equals("Title"))
                                        tNode = elem.selectSingleNode("mads:authoritativeLabel");
                                }
                            }
                        } /* else if (nName.endsWith("Language") || nName.endsWith("Authority") || nName.endsWith("Subject") || nName.endsWith("Name") || nName.endsWith("Topic") || nName.endsWith("GenreForm") || nName.endsWith("Temporal") || nName.endsWith("Geographic")){
                            // Subject, Authority records use mads:authoritativeLabel
                            field = "name_tesim";
                            xPath = "mads:authoritativeLabel";
                            tNode = parentNode.selectSingleNode(xPath);
                          } */else if (nName.endsWith(COPYRIGHT)) {
                            // Copyright records use dams:copyrightStatus, plus other properties in the next step.
                            field = "dams:copyrightStatus";
                            xPath = "dams:copyrightStatus";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = copyrightProperties(parentNode);
                        } else if (nName.endsWith(LICENSE)) {
                            // License records use dams:LicenseNote, plus other properties in the next step.
                            field = "dams:licenseNote";
                            xPath = "dams:licenseNote";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = licenseProperties(parentNode);
                        } else if (nName.endsWith(OTHERRIGHTS)) {
                            // Copyright records use dams:copyrightStatus, plus other properties in the next step.
                            field = "dams:otherRightsBasis";
                            xPath = "dams:otherRightsBasis";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = otherRightsProperties(parentNode);
                        } else if (nName.endsWith(RELATEDRESOURCE)) {
                            // RelatedResource records use dams:description, plus other properties in the next step.
                            field = "dams:description";
                            xPath = "dams:description";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = relatedResourceProperties(parentNode);
                        } else if (nName.endsWith(SOURCECAPTURE)) {
                            // SourceCapture records use dams:sourceType, plus other properties in the next step.
                            field = "dams:sourceType";
                            xPath = "dams:sourceType";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = sourceCaptureProperties(parentNode);
                        } else if (nName.endsWith(NOTE)) {
                            // Note records use rdf:value, dams:type, dams:displayLabel.
                            field = "rdf:value";
                            xPath = "rdf:value";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = noteProperties(parentNode);
                        } else if (nName.endsWith(PERMISSION) || nName.equals(RESTRICTION)) {
                            field = "dams:type";
                            xPath = "dams:type";
                            tNode = parentNode.selectSingleNode(xPath);
                            props = dateProperties(parentNode);
                        } else if (elemXPath.indexOf("mads", elemXPath.lastIndexOf('/') + 1) >= 0) {
                            // MADSScheme and Language
                            if (nName.endsWith(MADSSCHEME)) {
                                field = "mads:code";
                                xPath = "mads:code";
                                tNode = parentNode.selectSingleNode(xPath);
                                if (tNode == null) {
                                    field = "rdfs:label";
                                    xPath = "rdfs:label";
                                    tNode = parentNode.selectSingleNode("*[name()='" + xPath + "']");
                                }
                            } else if (nName.endsWith(LANGUAGE)) {
                                field = "mads:code";
                                xPath = "mads:code";
                                tNode = parentNode.selectSingleNode(xPath);
                                if (tNode == null) {
                                    field = "mads:authoritativeLabel";
                                    xPath = "mads:authoritativeLabel";
                                    tNode = parentNode.selectSingleNode(xPath);
                                }
                            } else {
                                // Subject, Authority records use mads:authoritativeLabel
                                field = "mads:authoritativeLabel";
                                xPath = "mads:authoritativeLabel";
                                tNode = parentNode.selectSingleNode(xPath);
                                if (tNode == null) {
                                    // Try to use the mads:code for mapping when mads:authoritativeLabel is not available
                                    field = "mads:code";
                                    xPath = "mads:code";
                                    tNode = parentNode.selectSingleNode(xPath);
                                } else {
                                    Node diplayLabelNode = parentNode
                                            .selectSingleNode("*[name()='dams:displayLabel']");
                                    props.put("dams:displayLabel", encodeLiteralValue(diplayLabelNode));
                                }
                                // Mapping for mads:isMemberOfMADSScheme
                                String madsScheme = null;
                                Node madsSchemeNode = parentNode.selectSingleNode("mads:isMemberOfMADSScheme");
                                if (madsSchemeNode != null) {
                                    Node msValueNode = madsSchemeNode.selectSingleNode("@rdf:resource");
                                    if (msValueNode != null) {
                                        madsScheme = madsSchemeNode.getStringValue();
                                        props.put("mads:isMemberOfMADSScheme", "<" + madsScheme + ">");
                                    } else if ((madsSchemeNode = madsSchemeNode
                                            .selectSingleNode("mads:MADSScheme")) != null
                                            && madsSchemeNode.hasContent()) {
                                        if ((msValueNode = madsSchemeNode
                                                .selectSingleNode("mads:code")) != null) {
                                            madsScheme = encodeLiteralValue(msValueNode);
                                            props.put("mads:isMemberOfMADSScheme/mads:code", madsScheme);
                                        } else if ((msValueNode = madsSchemeNode
                                                .selectSingleNode("rdfs:label")) != null) {
                                            madsScheme = encodeLiteralValue(msValueNode);
                                            props.put("mads:isMemberOfMADSScheme/rdfs:label", madsScheme);
                                        }
                                    } else {
                                        props.put("mads:isMemberOfMADSScheme/rdfs:label", "\"\"");
                                    }
                                } else {
                                    props.put("mads:isMemberOfMADSScheme/rdfs:label", null);
                                }
                            }

                        } else {
                            // XXX Other Rights records like Statute, License, Other Rights etc. 
                            field = "rdf:value";
                            xPath = "rdf:value";
                            tNode = parentNode.selectSingleNode(xPath);
                            field = "dams:code";
                            if (tNode == null) {
                                xPath = "dams:code";
                                tNode = parentNode.selectSingleNode(xPath);
                            }
                        }
                        if (tNode == null && !field.equals("dams:licenseNote")) {
                            throw new Exception("Element " + xPath + " is missing from the " + nName
                                    + " record " + iUri + " in file " + currFile + ".");
                        }

                        updateDocument(doc, parentNode, field, encodeLiteralValue(tNode), props);
                    }
                } else {
                    if (nName.endsWith("Object"))
                        objRecords.put(iUri, currFile);
                    if (replace && !(nName.endsWith("Component") || nName.endsWith("File")))
                        recordsToReplace.add(iUri);
                }
            }

            String dams4Rdf = doc.asXML();
            logData("dams4_" + rdfFiles[i].getName(), dams4Rdf);

            // Ingest the records
            String subjectId = null;
            DamsURI objURI = null;
            List<DamsURI> objURIs = null;
            RDFStore graph = null;

            rdfStore = new RDFStore();
            rdfStore.loadRDFXML(dams4Rdf);
            initHandler();

            Model iRdf = null;

            items = sortRecords(items);
            int jLen = items.size();
            //System.out.println(currFile + " records found: " + jLen);
            for (int j = 0; j < jLen && !interrupted; j++) {

                processIndex = 0;
                status = new boolean[processNames.length];
                messages = new StringBuilder[processNames.length];
                for (int k = 0; k < messages.length; k++) {
                    messages[k] = new StringBuilder();
                }

                Model objModel = null;
                graph = new RDFStore();
                recordsCount++;
                // Add subject
                subjectId = items.get(j);
                try {
                    setStatus("Processing metadata for record " + subjectId + " (" + (j + 1) + " of " + jLen
                            + ") in file " + currFile + " ... ");
                    boolean succeeded = false;
                    objURIs = objects.get(subjectId);

                    for (int k = 0; k < objURIs.size(); k++) {
                        objURI = objURIs.get(k);
                        iRdf = rdfStore.querySubject(objURI.toString());
                        objModel = graph.merge(iRdf);
                    }

                    // Update object
                    //log.info(j + " ingesting record " + subjectId + ":\n" + graph.export(RDFStore.RDFXML_ABBREV_FORMAT) + "\n\n");
                    String importMode = Constants.IMPORT_MODE_ADD;
                    if (replace && recordsToReplace.indexOf(subjectId) >= 0)
                        importMode = Constants.IMPORT_MODE_ALL;
                    succeeded = damsClient.updateObject(subjectId, graph.export(RDFStore.RDFXML_ABBREV_FORMAT),
                            importMode);

                    // Logging for Object RDF/XML validation
                    status[processIndex] = succeeded;
                    messages[processIndex].append(damsDateFormat.format(new Date()));

                    if (!succeeded) {
                        if (metadataFailed.indexOf(currFile) < 0)
                            failedCount++;
                        metadataFailed.append(subjectId + " (" + currFile + "), \n");
                        message = "Metadata import for record " + subjectId + " failed (" + (j + 1) + " of "
                                + jLen + ") in file " + currFile + ".";
                        setStatus(message);
                        log.error(message + "\n Error RDF: \n" + graph.export(RDFStore.RDFXML_ABBREV_FORMAT));
                    } else {
                        recordsIngested.add(subjectId);
                        message = "Metadata import for record " + subjectId + " succeeded (" + (j + 1) + " of "
                                + jLen + ") in file " + currFile + ". ";
                        setStatus(message);
                        log.info(message);

                        processIndex++;
                        status[processIndex] = succeeded;
                        messages[processIndex].append(damsDateFormat.format(new Date()));
                        // Ingest the source file only if metadata ingested successfully
                        if (status[processIndex] && importOption.equalsIgnoreCase("metadataAndFiles")) {
                            uploadFiles(objModel, currFile, subjectId);
                        }
                    }

                } catch (Exception e) {
                    e.printStackTrace();

                    if (metadataFailed.indexOf(currFile) < 0)
                        failedCount++;
                    metadataFailed.append(subjectId + " (" + currFile + "), \n");
                    message = "Metadata import failed: " + e.getMessage();
                    setStatus(message + " (" + (j + 1) + " of " + jLen + ") in file " + currFile + ".");
                    log.error(message);

                    String error = e.getMessage();
                    if (error.indexOf("Invalid RDF input") >= 0) {
                        messages[processIndex].append(error);
                    } else {
                        status[processIndex] = true;
                        messages[processIndex].append(damsDateFormat.format(new Date()));
                        processIndex++;
                        messages[processIndex].append(error);
                    }
                } finally {
                    int solrRequestIndex = processNames.length - 1;
                    try {
                        // Update SOLR for the record.
                        status[solrRequestIndex] = updateSOLR(subjectId);
                        messages[solrRequestIndex].append(damsDateFormat.format(new Date()));
                        log.info("SOLR update requested for " + subjectId + ": " + damsClient.getRequestURL()
                                + " " + status[solrRequestIndex]);

                    } catch (Exception e) {
                        e.printStackTrace();
                        exeResult = false;
                        log.error("SOLR Index failed " + subjectId + ": " + e.getMessage());

                        messages[processNames.length - 1].append(e.getMessage());
                    }

                    if (exeResult)
                        exeResult = status[processIndex];

                    String resultMessage = "http://" + Constants.CLUSTER_HOST_NAME + ".ucsd.edu/dc/object/"
                            + subjectId.substring(subjectId.lastIndexOf("/") + 1) + " - "
                            + (status[processIndex] && status[solrRequestIndex] ? "successful" : "failed")
                            + " - " + damsDateFormat.format(new Date());
                    if (objRecords.containsKey(subjectId)) {
                        String title = getTitle(objModel, subjectId);
                        if (StringUtils.isBlank(title))
                            title = "[Unknown Title]";

                        logMessage("\n" + title + " - " + resultMessage);
                        if (!status[processIndex] || !status[solrRequestIndex]) {
                            // Logging for pre-procesing - succeeded. 
                            logMessage("* Pre-processing - successful - " + preprocessedTimestamp);
                            for (int k = 0; k <= processIndex; k++) {
                                if (status[k] || !status[k] && status[k - 1]) {
                                    logMessage("* " + processNames[k] + " - "
                                            + (status[k] ? "successful" : "failed") + " - "
                                            + messages[k].toString());
                                }
                            }

                            // SOLR index request logging
                            if (!status[solrRequestIndex])
                                logMessage("* " + processNames[solrRequestIndex] + " - "
                                        + (status[solrRequestIndex] ? "successful" : "failed") + " - "
                                        + messages[solrRequestIndex].toString());
                        }

                    } else {

                        ingestMessages.append("\n" + resultMessage);
                        if (!status[processIndex]) {
                            for (int k = 0; k + 1 < processIndex; k++) {
                                if (status[k] || !status[k] && status[k - 1]) {
                                    logMessage("* " + processNames[k] + " - "
                                            + (status[k] ? "successful" : "failed") + " - "
                                            + messages[k].toString());
                                }
                            }
                        }
                    }
                }

                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    interrupted = true;
                    exeResult = false;
                    failedCount++;
                    metadataFailed.append(subjectId + " (" + currFile + ") \n");
                    message = "Metadata import interrupted for subject " + subjectId + ". \n Error: "
                            + e.getMessage() + "\n";
                    setStatus("Canceled");
                    clearSession();
                    log.error(message);

                    logMessage("Client Cancled - " + damsDateFormat.format(new Date()));
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            exeResult = false;
            failedCount++;
            message = "Import failed for " + currFile + ": " + e.getMessage();
            setStatus(message + " (" + (i + 1) + " of " + fLen + ").");
            log.error(message);
        }

        setProgressPercentage(((i + 1) * 100) / fLen);

        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
            exeResult = false;
            interrupted = true;
            failedCount++;
            message = "Import interrupted for oject in " + currFile + ". \n Error: " + e.getMessage() + "\n";
            setStatus("Canceled");
            clearSession();
            log.error(message);

            messages[processIndex].append("Client canceled - " + damsDateFormat.format(new Date()));
        }
    }
    return exeResult;
}

From source file:eu.delving.metadata.RecordValidator.java

License:EUPL

private boolean validateElement(Element element, Path path, List<String> problems, Set<String> entries,
        Map<Path, Counter> counters) {
    path.push(Tag.create(element.getNamespacePrefix(), element.getName()));
    boolean hasElements = false;
    Iterator walk = element.elementIterator();
    while (walk.hasNext()) {
        Element subelement = (Element) walk.next();
        boolean remove = validateElement(subelement, path, problems, entries, counters);
        if (remove) {
            walk.remove();//from  w w w.  j  av a 2 s  .c  o m
        }
        hasElements = true;
    }
    if (!hasElements) {
        boolean fieldRemove = validatePath(element.getTextTrim(), path, problems, entries, counters);
        path.pop();
        return fieldRemove;
    }
    path.pop();
    return false;
}