Revision 7860
Added by ben leinfelder almost 11 years ago
MNodeService.java | ||
---|---|---|
24 | 24 |
package edu.ucsb.nceas.metacat.dataone; |
25 | 25 |
|
26 | 26 |
import java.io.ByteArrayInputStream; |
27 |
import java.io.ByteArrayOutputStream; |
|
27 | 28 |
import java.io.File; |
28 | 29 |
import java.io.FileInputStream; |
29 | 30 |
import java.io.FileOutputStream; |
30 | 31 |
import java.io.IOException; |
31 | 32 |
import java.io.InputStream; |
33 |
import java.io.OutputStreamWriter; |
|
32 | 34 |
import java.io.UnsupportedEncodingException; |
35 |
import java.io.Writer; |
|
33 | 36 |
import java.math.BigInteger; |
34 | 37 |
import java.net.URISyntaxException; |
35 | 38 |
import java.security.NoSuchAlgorithmException; |
39 |
import java.sql.SQLException; |
|
36 | 40 |
import java.util.ArrayList; |
37 | 41 |
import java.util.Calendar; |
38 | 42 |
import java.util.Date; |
39 | 43 |
import java.util.HashSet; |
44 |
import java.util.Hashtable; |
|
40 | 45 |
import java.util.List; |
41 | 46 |
import java.util.Map; |
42 | 47 |
import java.util.Set; |
... | ... | |
86 | 91 |
import org.dataone.service.types.v1.NodeReference; |
87 | 92 |
import org.dataone.service.types.v1.NodeState; |
88 | 93 |
import org.dataone.service.types.v1.NodeType; |
94 |
import org.dataone.service.types.v1.ObjectFormat; |
|
89 | 95 |
import org.dataone.service.types.v1.ObjectFormatIdentifier; |
90 | 96 |
import org.dataone.service.types.v1.ObjectList; |
91 | 97 |
import org.dataone.service.types.v1.Permission; |
... | ... | |
111 | 117 |
|
112 | 118 |
import edu.ucsb.nceas.ezid.EZIDException; |
113 | 119 |
import edu.ucsb.nceas.metacat.DBQuery; |
120 |
import edu.ucsb.nceas.metacat.DBTransform; |
|
114 | 121 |
import edu.ucsb.nceas.metacat.EventLog; |
115 | 122 |
import edu.ucsb.nceas.metacat.IdentifierManager; |
116 | 123 |
import edu.ucsb.nceas.metacat.McdbDocNotFoundException; |
... | ... | |
129 | 136 |
import edu.ucsb.nceas.utilities.PropertyNotFoundException; |
130 | 137 |
import gov.loc.repository.bagit.Bag; |
131 | 138 |
import gov.loc.repository.bagit.BagFactory; |
132 |
import gov.loc.repository.bagit.writer.Writer; |
|
133 | 139 |
import gov.loc.repository.bagit.writer.impl.ZipWriter; |
134 | 140 |
|
135 | 141 |
/** |
... | ... | |
1699 | 1705 |
// TODO: delete more confidently |
1700 | 1706 |
bagFile.deleteOnExit(); |
1701 | 1707 |
bag.setFile(bagFile); |
1702 |
Writer zipWriter = new ZipWriter(bagFactory); |
|
1708 |
ZipWriter zipWriter = new ZipWriter(bagFactory);
|
|
1703 | 1709 |
bag.write(zipWriter, bagFile); |
1704 | 1710 |
bagFile = bag.getFile(); |
1705 | 1711 |
bagInputStream = new FileInputStream(bagFile); |
... | ... | |
1733 | 1739 |
return bagInputStream; |
1734 | 1740 |
|
1735 | 1741 |
} |
1742 |
|
|
1743 |
/** |
|
1744 |
* Get a rendered view of the object identified by pid. |
|
1745 |
* Uses the registered format given by the format parameter. |
|
1746 |
* Typically, this is structured HTML that can be styled with CSS. |
|
1747 |
* @param session |
|
1748 |
* @param pid |
|
1749 |
* @param format |
|
1750 |
* @return |
|
1751 |
* @throws InvalidToken |
|
1752 |
* @throws ServiceFailure |
|
1753 |
* @throws NotAuthorized |
|
1754 |
* @throws NotFound |
|
1755 |
* @throws NotImplemented |
|
1756 |
*/ |
|
1757 |
public InputStream getPackage(Session session, Identifier pid, String format) throws InvalidToken, ServiceFailure, NotAuthorized, NotFound, NotImplemented { |
|
1758 |
InputStream resultInputStream = null; |
|
1759 |
|
|
1760 |
SystemMetadata sysMeta = this.getSystemMetadata(session, pid); |
|
1761 |
InputStream object = this.get(session, pid); |
|
1762 |
|
|
1763 |
try { |
|
1764 |
// can only transform metadata, really |
|
1765 |
ObjectFormat objectFormat = ObjectFormatService.getInstance().getFormat(sysMeta.getFormatId()); |
|
1766 |
if (objectFormat.getFormatType().equals("METADATA")) { |
|
1767 |
// transform |
|
1768 |
DBTransform transformer = new DBTransform(); |
|
1769 |
String documentContent = IOUtils.toString(object, "UTF-8"); |
|
1770 |
String sourceType = objectFormat.getFormatId().getValue(); |
|
1771 |
String targetType = "-//W3C//HTML//EN"; |
|
1772 |
ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
|
1773 |
Writer writer = new OutputStreamWriter(baos , "UTF-8"); |
|
1774 |
// TODO: include more params? |
|
1775 |
Hashtable<String, String[]> params = new Hashtable<String, String[]>(); |
|
1776 |
params.put("qformat", new String[] {format}); |
|
1777 |
transformer.transformXMLDocument( |
|
1778 |
documentContent , |
|
1779 |
sourceType, |
|
1780 |
targetType , |
|
1781 |
format, |
|
1782 |
writer, |
|
1783 |
params, |
|
1784 |
null //sessionid |
|
1785 |
); |
|
1786 |
|
|
1787 |
// finally, get the HTML back |
|
1788 |
resultInputStream = new ContentTypeByteArrayInputStream(baos.toByteArray()); |
|
1789 |
((ContentTypeByteArrayInputStream) resultInputStream).setContentType("text/html"); |
|
1790 |
|
|
1791 |
} else { |
|
1792 |
// just return the raw bytes |
|
1793 |
resultInputStream = object; |
|
1794 |
} |
|
1795 |
} catch (IOException e) { |
|
1796 |
// report as service failure |
|
1797 |
ServiceFailure sf = new ServiceFailure("1030", e.getMessage()); |
|
1798 |
sf.initCause(e); |
|
1799 |
throw sf; |
|
1800 |
} catch (PropertyNotFoundException e) { |
|
1801 |
// report as service failure |
|
1802 |
ServiceFailure sf = new ServiceFailure("1030", e.getMessage()); |
|
1803 |
sf.initCause(e); |
|
1804 |
throw sf; |
|
1805 |
} catch (SQLException e) { |
|
1806 |
// report as service failure |
|
1807 |
ServiceFailure sf = new ServiceFailure("1030", e.getMessage()); |
|
1808 |
sf.initCause(e); |
|
1809 |
throw sf; |
|
1810 |
} catch (ClassNotFoundException e) { |
|
1811 |
// report as service failure |
|
1812 |
ServiceFailure sf = new ServiceFailure("1030", e.getMessage()); |
|
1813 |
sf.initCause(e); |
|
1814 |
throw sf; |
|
1815 |
} |
|
1816 |
|
|
1817 |
return resultInputStream; |
|
1818 |
|
|
1819 |
} |
|
1736 | 1820 |
|
1737 | 1821 |
} |
Also available in: Unified diff
use StreamSource instead of StringReader for method signature -- can be used with different sources this way. https://projects.ecoinformatics.org/ecoinfo/issues/6019