List of usage examples for org.dom4j Node hasContent
boolean hasContent();
hasContent
returns true if this node is a Branch (either an Element or a Document) and it contains at least one content node such as a child Element or Text node.
From source file:com.chingo247.settlercraft.structure.plan.PlanMenuManager.java
License:Open Source License
/** * Loads the PlanMenu from the menu.xml. If menu.xml doesn't exist, the menu.xml from the jar * will be written to the FileSystem.//from ww w . ja va 2 s . c om * * @throws DocumentException When XML is invalid * @throws StructureAPIException When XML contains invalid data */ public final void init() throws DocumentException, StructureAPIException { File file = new File(PLUGIN_FOLDER, "menu.xml"); if (!file.exists()) { InputStream input = PlanMenuManager.class.getClassLoader() .getResourceAsStream(RESOURCE_FOLDER + "/menu.xml"); FileUtil.write(input, file); } Document d = new SAXReader().read(file); List<Node> rows = d.selectNodes("Menu/SlotRow"); if (rows.size() > 2) { throw new StructureAPIException("Max rows is 2 for menu.xml"); } planMenu = MenuAPI.createMenu(SettlerCraft.getInstance(), PLANSHOP_NAME, 54); boolean hasRow2 = false; for (int row = 0; row < rows.size(); row++) { Node rowNode = rows.get(row); List<Node> slotNodes = rowNode.selectNodes("Slot"); // Slot #1 is reserved for all category if (row == 0 && slotNodes.size() > 8) { throw new StructureAPIException(" 'SlotRow#1' has max 8 slots to customize"); } else if (slotNodes.size() > 9) { throw new StructureAPIException(" 'SlotRow#" + (row + 2) + "' has max 9 slots to customize"); } int count = 0; for (Node categorySlotNode : slotNodes) { if (!categorySlotNode.hasContent()) { count++; continue; } Node mId = categorySlotNode.selectSingleNode("MaterialID"); Node cat = categorySlotNode.selectSingleNode("Category"); Node ali = categorySlotNode.selectSingleNode("Aliases"); if (mId == null) { throw new StructureAPIException("Missing 'MaterialID' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } if (cat == null) { throw new StructureAPIException( "Missing 'Category' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } int id; try { id = Integer.parseInt(mId.getText()); } catch (NumberFormatException nfe) { throw new StructureAPIException("Invalid number for 'MaterialID' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } String category = cat.getText(); if (category.isEmpty()) { Element catEl = (Element) cat; category = catEl.attributeValue("value"); } if (category.trim().isEmpty()) { throw new StructureAPIException("Empty 'Category' element in 'SlotRow#" + (row + 1) + "' and 'Slot#" + (count + 1) + "'"); } category = category.replaceAll(" AND ", "&"); String[] aliases; if (ali == null) { aliases = new String[0]; } else { List<Node> aliasNodes = ali.selectNodes("Alias"); aliases = new String[aliasNodes.size()]; for (int j = 0; j < aliasNodes.size(); j++) { String alias = aliasNodes.get(j).getText(); if (alias.isEmpty()) { Element aliasEl = (Element) cat; alias = aliasEl.attributeValue("value"); } if (alias.trim().isEmpty()) { throw new StructureAPIException("Empty 'Alias' element in 'SlotRow#" + (row + 1) + "' and 'Slot#" + (count + 1) + "' and 'Alias#" + (j + 1) + "'"); } aliases[j] = aliasNodes.get(j).getText(); } } int slot = count; if (row == 0) { slot += 1; // slot 0 is reserved... } else { hasRow2 = true; } planMenu.putCategorySlot((row * 9) + slot, category, Material.getMaterial(id), aliases); count++; } // fill remaining if (count < 8 && row == 0) { for (int i = count; i < 8; i++) { planMenu.putLocked(i); } } else if (row > 0 && count < 9) { for (int i = count; i < 9; i++) { planMenu.putLocked((row * 9) + i); } } } if (hasRow2) { planMenu.putLocked(19, 20, 21, 22, 23, 24, 25); planMenu.putActionSlot(18, "Previous", Material.COAL_BLOCK); planMenu.putActionSlot(26, "Next", Material.COAL_BLOCK); } else { planMenu.putLocked(10, 11, 12, 13, 14, 15, 16); planMenu.putActionSlot(9, "Previous", Material.COAL_BLOCK); planMenu.putActionSlot(17, "Next", Material.COAL_BLOCK); } }
From source file:com.chingo247.structureapi.menus.plans.StructurePlanMenuReader.java
License:Open Source License
public CategoryMenu read(File file) throws DocumentException, SettlerCraftException { Preconditions.checkArgument(file.exists(), "File '" + file.getAbsolutePath() + "' does not exist!"); Document d = new SAXReader().read(file); CategoryMenu menu = new DefaultCategoryMenu("Buy & Build"); List<Node> rows = d.selectNodes("Menu/SlotRow"); if (rows.size() > 2) { throw new SettlerCraftException("Max rows is 2 for menu.xml"); }/*from w w w . j a v a2s . co m*/ boolean hasRow2 = false; for (int row = 0; row < rows.size(); row++) { Node rowNode = rows.get(row); List<Node> slotNodes = rowNode.selectNodes("Slot"); // Slot #1 is reserved for all category if (row == 0 && slotNodes.size() > 8) { throw new SettlerCraftException(" 'SlotRow#1' has max 8 slots to customize"); } else if (slotNodes.size() > 9) { throw new SettlerCraftException(" 'SlotRow#" + (row + 2) + "' has max 9 slots to customize"); } int count = 0; for (Node categorySlotNode : slotNodes) { if (!categorySlotNode.hasContent()) { count++; continue; } Node mId = categorySlotNode.selectSingleNode("MaterialID"); Node cat = categorySlotNode.selectSingleNode("Category"); // Node ali = categorySlotNode.selectSingleNode("Aliases"); if (mId == null) { throw new SettlerCraftException("Missing 'MaterialID' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } if (cat == null) { throw new SettlerCraftException( "Missing 'Category' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } int id; try { id = Integer.parseInt(mId.getText()); } catch (NumberFormatException nfe) { throw new SettlerCraftException("Invalid number for 'MaterialID' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } Node catNameNode = cat.selectSingleNode("Name"); if (catNameNode == null) { throw new SettlerCraftException( "Missing 'Name' element in 'SlotRow#" + (row + 1) + "' 'Slot#" + (count + 1) + "'"); } String category = catNameNode.getText(); if (category.isEmpty()) { Element catEl = (Element) cat; category = catEl.attributeValue("value"); } if (category.trim().isEmpty()) { throw new SettlerCraftException("Empty 'Category' element in 'SlotRow#" + (row + 1) + "' and 'Slot#" + (count + 1) + "'"); } category = category.replaceAll(" AND ", "&"); Node synonymsNode = cat.selectSingleNode("Synonyms"); // Set aliases String[] synonyms; if (synonymsNode == null) { synonyms = new String[0]; } else { List<Node> synonymNodes = synonymsNode.selectNodes("Synonym"); synonyms = new String[synonymNodes.size()]; for (int j = 0; j < synonymNodes.size(); j++) { String synonym = synonymNodes.get(j).getText(); if (synonym.isEmpty()) { Element synoEl = (Element) cat; synonym = synoEl.attributeValue("value"); } if (synonym.trim().isEmpty()) { throw new SettlerCraftException("Empty 'Synonym' element in 'SlotRow#" + (row + 1) + "' and 'Slot#" + (count + 1) + "' and 'Synonym#" + (j + 1) + "'"); } synonyms[j] = synonymNodes.get(j).getText(); } } int slot = count; if (row == 0) { slot += 1; // slot 0 is reserved... } else { hasRow2 = true; } CategorySlot categorySlot = SlotFactory.getInstance().createCategorySlot(category, id); categorySlot.addSynonyms(synonyms); menu.setCategorySlot((row * 9) + slot, categorySlot); count++; } // fill remaining if (count < 8 && row == 0) { for (int i = count; i < 8; i++) { menu.setLocked(i); } } else if (row > 0 && count < 9) { for (int i = count; i < 9; i++) { menu.setLocked((row * 9) + i); } } } if (hasRow2) { menu.setLocked(19, 20, 21, 22, 23, 24, 25); menu.setActionSlot(18, "Previous", 173); // block of coal menu.setActionSlot(26, "Next", 173); } else { menu.setLocked(10, 11, 12, 13, 14, 15, 16); menu.setActionSlot(9, "Previous", 173); menu.setActionSlot(17, "Next", 173); } return menu; }
From source file:edu.ucsd.library.xdre.imports.RDFDAMS4ImportHandler.java
/** * Procedure to populate the RDF metadata and ingest the files *///from w w w .j a va 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:itslearning.platform.restapi.sdk.learningtoolapp.LearningObjectServicetRestClient.java
private List<AssessmentStatusItem> deserializeXMLToListOfAssessmentStatusItems(InputStream xmlStream) throws ParseException, DocumentException { List<AssessmentStatusItem> result = new ArrayList<AssessmentStatusItem>(); SAXReader reader = new SAXReader(); Document doc = reader.read(xmlStream); String lElem = "//loi:ArrayOfAssessmentStatusItem"; doc.getRootElement().setQName(new QName(doc.getRootElement().getQName().getName(), new Namespace("loi", doc.getRootElement().getNamespaceURI()))); Element root = doc.getRootElement(); List<Node> nodes = root.selectNodes(lElem + "/loi:AssessmentStatusItem"); for (Node node : nodes) { AssessmentStatusItem assessmentStatusItem = new AssessmentStatusItem(); Node n = node.selectSingleNode("loi:AssessmentStatusId"); if (n.hasContent()) { assessmentStatusItem.setAssessmentStatusId(Integer.parseInt(n.getStringValue())); }// w w w . j ava 2 s . c om n = node.selectSingleNode("loi:AssessmentStatusItemId"); if (n.hasContent()) { assessmentStatusItem.setAssessmentStatusItemId(Integer.parseInt(n.getStringValue())); } n = node.selectSingleNode("loi:Title"); if (n.hasContent()) { assessmentStatusItem.setTitle(n.getStringValue()); } result.add(assessmentStatusItem); } return result; }
From source file:itslearning.platform.restapi.sdk.learningtoolapp.LearningObjectServicetRestClient.java
/** * xml looks like this//ww w. jav a 2 s . c om <EntityList xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <CurrentPageIndex>0</CurrentPageIndex> <EntityArray> <Organization> <HierarchyId>1</HierarchyId> <LegalId>FK</LegalId> <Title>Fylkeskommune</Title> <Type>Site</Type> </Organization> <Organization> <HierarchyId>6</HierarchyId> <LegalId>S-B</LegalId> <Title>School B</Title> <Type>School</Type> </Organization> </EntityArray> <PageSize>2</PageSize> <Total>2</Total> </EntityList> * * @param responseBodyAsStream * @return */ private List<Organisation> deserializeXMLToOrganisations(InputStream xmlStream) throws DocumentException { List<Organisation> result = new ArrayList<Organisation>(); SAXReader reader = new SAXReader(); Document doc = reader.read(xmlStream); String lElem = "//org:ArrayOfOrganization"; doc.getRootElement().setQName(new QName(doc.getRootElement().getQName().getName(), new Namespace("org", doc.getRootElement().getNamespaceURI()))); Element root = doc.getRootElement(); List<Node> nodes = root.selectNodes(lElem + "/org:Organization"); for (Node n : nodes) { Organisation organisation = new Organisation(); Node node = n.selectSingleNode("org:HierarchyId"); if (node.hasContent()) { organisation.setHierarchyId(Integer.parseInt(node.getStringValue())); } node = n.selectSingleNode("org:SyncLocationId"); if (node.hasContent()) { organisation.setSyncLocationId(node.getStringValue()); } node = n.selectSingleNode("org:LegalId"); if (node.hasContent()) { organisation.setLegalId(node.getStringValue()); } node = n.selectSingleNode("org:Title"); if (node.hasContent()) { organisation.setTitle(node.getStringValue()); } node = n.selectSingleNode("org:Type"); if (node.hasContent()) { try { organisation.setType(OrganisationType.valueOf(node.getStringValue())); } catch (IllegalArgumentException iea) { organisation.setType(OrganisationType.Unknown); } } result.add(organisation); } return result; }
From source file:itslearning.platform.restapi.sdk.learningtoolapp.LearningObjectServicetRestClient.java
/** * xml looks like this// w ww .j a v a 2 s . c o m <ArrayOfOrganizationRole xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <OrganizationRole> <HierarchyId>1</HierarchyId> <HomeOrganization>false</HomeOrganization> <Role>Administrator</Role> </OrganizationRole> <OrganizationRole> <HierarchyId>2</HierarchyId> <HomeOrganization>false</HomeOrganization> <Role>Administrator</Role> </OrganizationRole> <OrganizationRole> <HierarchyId>3</HierarchyId> <HomeOrganization>false</HomeOrganization> <Role>Administrator</Role> </OrganizationRole> <OrganizationRole> <HierarchyId>5</HierarchyId> <HomeOrganization>false</HomeOrganization> <Role>Administrator</Role> </OrganizationRole> <OrganizationRole> <HierarchyId>6</HierarchyId> <HomeOrganization>true</HomeOrganization> <Role>Administrator</Role> </OrganizationRole> </ArrayOfOrganizationRole> * * @param responseBodyAsStream * @return */ private List<OrganisationRole> deserializeXMLToOrganisationRoles(InputStream xmlStream) throws DocumentException { List<OrganisationRole> result = new ArrayList<OrganisationRole>(); SAXReader reader = new SAXReader(); Document doc = reader.read(xmlStream); String lElem = "//org:ArrayOfOrganizationRole"; doc.getRootElement().setQName(new QName(doc.getRootElement().getQName().getName(), new Namespace("org", doc.getRootElement().getNamespaceURI()))); Element root = doc.getRootElement(); List<Node> nodes = root.selectNodes(lElem + "/org:OrganizationRole"); for (Node n : nodes) { OrganisationRole organisationRole = new OrganisationRole(); Node node = n.selectSingleNode("org:HierarchyId"); if (node.hasContent()) { organisationRole.setHierarchyId(Integer.parseInt(node.getStringValue())); } node = n.selectSingleNode("org:HomeOrganization"); if (node.hasContent()) { organisationRole.setHomeOrganization(Boolean.parseBoolean(node.getStringValue())); } node = n.selectSingleNode("org:Role"); if (node.hasContent()) { organisationRole.setRole(node.getStringValue()); } result.add(organisationRole); } return result; }
From source file:itslearning.platform.restapi.sdk.learningtoolapp.LearningObjectServicetRestClient.java
private List<AppLicense> deserializeXMLToAppLicenses(InputStream xmlStream) throws DocumentException { List<AppLicense> result = new ArrayList<AppLicense>(); SAXReader reader = new SAXReader(); Document doc = reader.read(xmlStream); String lElem = "//loi:ArrayOfAppLicense"; doc.getRootElement().setQName(new QName(doc.getRootElement().getQName().getName(), new Namespace("loi", doc.getRootElement().getNamespaceURI()))); Element root = doc.getRootElement(); List<Node> nodes = root.selectNodes(lElem + "/loi:AppLicense"); for (Node n : nodes) { AppLicense appLicense = new AppLicense(); Node node = n.selectSingleNode("loi:LicenseId"); if (node.hasContent()) { appLicense.setLicenseId(Integer.parseInt(node.getStringValue())); }/*from w w w . j a v a2 s . c o m*/ node = n.selectSingleNode("loi:ExternalLicenseId"); if (node.hasContent()) { appLicense.setExternalLicenseId(node.getStringValue()); } result.add(appLicense); } return result; }
From source file:itslearning.platform.restapi.sdk.learningtoolapp.LearningObjectServicetRestClient.java
private Site deserializeXMLToSite(InputStream xmlStream) throws ParseException, DocumentException { Site site = null;//from ww w . j a v a2 s . c o m SAXReader reader = new SAXReader(); Document doc = reader.read(xmlStream); String lElem = "//loi:Site"; doc.getRootElement().setQName(new QName(doc.getRootElement().getQName().getName(), new Namespace("loi", doc.getRootElement().getNamespaceURI()))); Element root = doc.getRootElement(); if (root.getName().equals("Site")) { site = new Site(); Node node = root.selectSingleNode(lElem + "/loi:Segment"); if (node.hasContent()) { try { site.setSegment(EducationSegment.valueOf(node.getStringValue())); } catch (IllegalArgumentException iea) { site.setSegment(EducationSegment.Other); } } node = root.selectSingleNode(lElem + "/loi:CountryCode"); if (node.hasContent()) { site.setCountryCode(node.getStringValue()); } node = root.selectSingleNode(lElem + "/loi:Name"); if (node.hasContent()) { site.setName(node.getStringValue()); } node = root.selectSingleNode(lElem + "/loi:ShortName"); if (node.hasContent()) { site.setShortName(node.getStringValue()); } node = root.selectSingleNode(lElem + "/loi:BaseUrl"); if (node.hasContent()) { site.setBaseUrl(node.getStringValue()); } } return site; }
From source file:itslearning.platform.restapi.sdk.learningtoolapp.LearningObjectServicetRestClient.java
private CustomerSettings deserializeXMLToCustomerSettings(InputStream xmlStream) throws ParseException, DocumentException { CustomerSettings customerSettings = null; SAXReader reader = new SAXReader(); Document doc = reader.read(xmlStream); String lElem = "//loi:CustomerSettings"; doc.getRootElement().setQName(new QName(doc.getRootElement().getQName().getName(), new Namespace("loi", doc.getRootElement().getNamespaceURI()))); Element root = doc.getRootElement(); if (root.getName().equals("CustomerSettings")) { customerSettings = new CustomerSettings(); Node node = doc.selectSingleNode("loi:PlagiarismCode"); if (node.hasContent()) { customerSettings.setPlagiarismCode(node.getStringValue()); }/*from w w w .ja v a2 s .co m*/ node = doc.selectSingleNode("loi:PlagiarismEmail"); if (node.hasContent()) { customerSettings.setPlagiarismEmail(node.getStringValue()); } node = doc.selectSingleNode("loi:PlagiarismShowStudentName"); if (node.hasContent()) { customerSettings.setPlagiarismShowStudentName(node.getStringValue()); } node = doc.selectSingleNode("loi:UsePlagiarism"); if (node.hasContent()) { customerSettings.setUsePlagiarism(Boolean.parseBoolean(node.getStringValue())); } } return customerSettings; }