diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java index b14ac6092eb852c23ff9473e5db15411877ccf83..c056b12afadb3668e7bca26bb821f8cdc89cee77 100644 --- a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java +++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java @@ -186,27 +186,7 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract } private void transform_mediainfo_output(File temp_media_outputfile, File temp_media_transformed_outputfile) throws Exception { - /* write xsd */ - File temp_xsdfile = File.createTempFile("mediainfo_style", ".xsd"); - InputStream stylestream = getClass().getResourceAsStream(TRANSFORMER_XSL); - if (stylestream == null) { - throw new Exception("stylestream not found!"); - } - /* - OutputStream out = new FileOutputStream(temp_xsdfile); - int read = 0; - byte[] buffer = new byte[8192]; - assert(stylestream != null); - stylestream.read( buffer ); - while((read =stylestream.read( buffer)) != -1) { - out.write(buffer, 0, read); - } - out.flush(); - out.close(); - */ - - Files.copy(stylestream, Path.of(String.valueOf(temp_xsdfile)), StandardCopyOption.REPLACE_EXISTING); - stylestream.close(); + File temp_xsdfile = create_temp_xsd_file(); /* xslt transform */ String exec_xsltproc_string = xsltproc_binary_path + " -o " + temp_media_transformed_outputfile + " " + temp_xsdfile + " " + temp_media_outputfile; System.out.println("executing: " + exec_xsltproc_string); @@ -224,6 +204,18 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract } } + private File create_temp_xsd_file() throws Exception { + /* write xsd */ + File temp_xsdfile = File.createTempFile("mediainfo_style", ".xsd"); + InputStream stylestream = getClass().getResourceAsStream(TRANSFORMER_XSL); + if (stylestream == null) { + throw new Exception("stylestream not found!"); + } + Files.copy(stylestream, Path.of(String.valueOf(temp_xsdfile)), StandardCopyOption.REPLACE_EXISTING); + stylestream.close(); + return temp_xsdfile; + } + private void extract_attributes_of_transformed_result(File temp_media_transformed_outputfile) throws Exception { checkFileExists(String.valueOf(temp_media_transformed_outputfile)); XPathFactory xPathfactory = XPathFactory.newInstance(); @@ -361,112 +353,25 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract public List<String> getSupportedAttributeNames() { //return new ArrayList<String>(attributes.keySet()); List<String> available = new ArrayList<>(); - available.add("mediainfo.track.Audio.BitDepth"); - available.add("mediainfo.track.Audio.BitRate"); - available.add("mediainfo.track.Audio.BitRate_Mode"); - available.add("mediainfo.track.Audio.Channels"); - available.add("mediainfo.track.Audio.CodecID"); - available.add("mediainfo.track.Audio.Commercial_Name"); - available.add("mediainfo.track.Audio.Compression_Mode"); - available.add("mediainfo.track.Audio.Default"); - available.add("mediainfo.track.Audio.Duration"); - available.add("mediainfo.track.Audio.encoded_library"); - available.add("mediainfo.track.Audio.Forced"); - available.add("mediainfo.track.Audio.Format"); - available.add("mediainfo.track.Audio.Format_Profile"); - available.add("mediainfo.track.Audio.Format_Settings_Wrapping"); - available.add("mediainfo.track.Audio.Format_Settings_Sign"); - available.add("mediainfo.track.Audio.Format_Version"); - available.add("mediainfo.track.Audio.FrameRate"); - available.add("mediainfo.track.Audio.ID"); - available.add("mediainfo.track.Audio.SamplingRate"); - available.add("mediainfo.track.Audio.ServiceKind"); - available.add("mediainfo.track.Audio.StreamSize"); - available.add("mediainfo.track.Audio.Title"); - available.add("mediainfo.track.General.AudioCount"); - available.add("mediainfo.track.General.CodecID"); - available.add("mediainfo.track.General.CompleteName"); - available.add("mediainfo.track.General.Description"); - available.add("mediainfo.track.General.Duration"); - available.add("mediainfo.track.General.Encoded_Application"); - available.add("mediainfo.track.General.Encoded_Application_CompanyName"); - available.add("mediainfo.track.General.Encoded_Application_Name"); - available.add("mediainfo.track.General.Encoded_Application_Version"); - available.add("mediainfo.track.General.Encoded_Date"); - available.add("mediainfo.track.General.Encoded_Library"); - available.add("mediainfo.track.General.Encoded_Library_Name"); - available.add("mediainfo.track.General.Encoded_Library_Version"); - available.add("mediainfo.track.General.extra.ErrorDetectionType"); - available.add("mediainfo.track.General.extra.IsTruncated"); - available.add("mediainfo.track.General.extra.bext_Present"); - available.add("mediainfo.track.General.FileSize"); - available.add("mediainfo.track.General.Format"); - available.add("mediainfo.track.General.Format_Profile"); - available.add("mediainfo.track.General.Format_Settings"); - available.add("mediainfo.track.General.Format_Version"); - available.add("mediainfo.track.General.IsStreamable"); - available.add("mediainfo.track.General.MenuCount"); - available.add("mediainfo.track.General.OtherCount"); - available.add("mediainfo.track.General.OverallBitRate"); - available.add("mediainfo.track.General.OverallBitRateMode"); - available.add("mediainfo.track.General.PackageName"); - available.add("mediainfo.track.General.Producer"); - available.add("mediainfo.track.General.StreamSize"); - available.add("mediainfo.track.General.TextCount"); - available.add("mediainfo.track.General.Title"); - available.add("mediainfo.track.General.UniqueID"); - available.add("mediainfo.track.General.VideoCount"); - available.add("mediainfo.track.Image.BitDepth"); - available.add("mediainfo.track.Image.ColorSpace"); - available.add("mediainfo.track.Image.colour_primaries"); - available.add("mediainfo.track.Image.Compression_Mode"); - available.add("mediainfo.track.Image.DisplayAspectRatio"); - available.add("mediainfo.track.Image.Encoded_Date"); - available.add("mediainfo.track.Image.Encoded_Library"); - available.add("mediainfo.track.Image.Format"); - available.add("mediainfo.track.Image.Format_Version"); - available.add("mediainfo.track.Image.FrameRate"); - available.add("mediainfo.track.Image.Height"); - available.add("mediainfo.track.Image.StreamSize"); - available.add("mediainfo.track.Image.transfer_characteristics"); - available.add("mediainfo.track.Image.Width"); - available.add("mediainfo.track.Video.BitDepth"); - available.add("mediainfo.track.Video.BitRate"); - available.add("mediainfo.track.Video.BitRate_Mode"); - available.add("mediainfo.track.Video.ChromaSubsampling"); - available.add("mediainfo.track.Video.CodecID"); - available.add("mediainfo.track.Video.ColorSpace"); - available.add("mediainfo.track.Video.BitsPixel_Frame"); - available.add("mediainfo.track.Video.Compression_Mode"); - available.add("mediainfo.track.Video.Default"); - available.add("mediainfo.track.Video.DisplayAspectRatio"); - available.add("mediainfo.track.Video.Duration"); - available.add("mediainfo.track.Video.Encoded_Library"); - available.add("mediainfo.track.Video.extra.coder_type"); - available.add("mediainfo.track.Video.extra.ErrorDetectionType"); - available.add("mediainfo.track.Video.extra.MaxSlicesCount"); - available.add("mediainfo.track.Video.extra.OriginalSourceMedium"); - available.add("mediainfo.track.Video.Forced"); - available.add("mediainfo.track.Video.Format"); - available.add("mediainfo.track.Video.Format_Profile"); - available.add("mediainfo.track.Video.Format_Settings_GOP"); - available.add("mediainfo.track.Video.Format_Settings_Wrapping"); - available.add("mediainfo.track.Video.Format_Version"); - available.add("mediainfo.track.Video.FrameCount"); - available.add("mediainfo.track.Video.FrameRate"); - available.add("mediainfo.track.Video.Height"); - available.add("mediainfo.track.Video.ID"); - available.add("mediainfo.track.Video.PixelAspectRatio"); - available.add("mediainfo.track.Video.PixelAspectRatioOriginal"); - available.add("mediainfo.track.Video.ScanOrder"); - available.add("mediainfo.track.Video.ScanType"); - available.add("mediainfo.track.Video.Standard"); - available.add("mediainfo.track.Video.StreamSize"); - available.add("mediainfo.track.Video.TimeCode_FirstFrame"); - available.add("mediainfo.track.Video.TimeCode_Source"); - available.add("mediainfo.track.Video.Title"); - available.add("mediainfo.track.Video.transfer_characteristics"); - available.add("mediainfo.track.Video.Width"); + try { + XPathFactory xPathfactory = XPathFactory.newInstance(); + XPath xpath = xPathfactory.newXPath(); + XPathExpression expr = xpath.compile("//*[local-name()='properties']/*[local-name()='property']"); + //XPathExpression expr = xpath.compile("//text()"); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + InputStream stylestream = getClass().getResourceAsStream(TRANSFORMER_XSL); + Document temp_property_list_xml = db.parse(stylestream); + NodeList nl = (NodeList) expr.evaluate(temp_property_list_xml, XPathConstants.NODESET); + int len = nl.getLength(); + for (int i = 0; i < len; i++) { + Node node = nl.item(i); + String value = node.getTextContent(); + available.add(value); + } + } catch (Exception e) { + System.out.println("error in getSupportedAttributeNaes, " + e.getMessage()); + } return available; }