Java tutorial
/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing * permissions and limitations under the License. */ package tufts.vue; /** * * @author akumar03 */ import java.util.Vector; import java.util.Iterator; import java.io.*; import java.net.*; import org.apache.commons.net.ftp.*; import java.util.*; import java.util.zip.*; import fedora.server.management.FedoraAPIM; import fedora.server.utilities.StreamUtility; //import fedora.client.ingest.AutoIngestor; import tufts.vue.action.*; public class PublishUtil implements tufts.vue.DublinCoreConstants { public static final String VUE_MIME_TYPE = VueResources.getString("vue.type"); public static final String BINARY_MIME_TYPE = "application/binary"; public static final String ZIP_MIME_TYPE = "application/zip"; public static final int BUFFER_SIZE = 10240;// size for transferring files public static final String IMSCP_MANIFEST_ORGANIZATION = "%organization%"; public static final String IMSCP_MANIFEST_METADATA = "%metadata%"; public static final String IMSCP_MANIFEST_RESOURCES = "%resources%"; public static final String RESOURCE_FOLDER = "resource:resources" + File.separator; public static File activeMapFile; public static String IMSManifest; // the string is written to manifest file; /** Creates a new instance of PublishUtil */ public PublishUtil() { } public static File createZip(LWMap map, Vector resourceVector) throws IOException, URISyntaxException, CloneNotSupportedException, ZipException { System.out.println("Creating a zip file"); IMSCP imscp = new IMSCP(); try { if (map.getFile() == null) { VueUtil.alert(VueResources.getString("dialog.exporterror.message"), VueResources.getString("dialog.exporterror.title")); return null; } String saveEntry = VueUtil.getDefaultUserFolder() + File.separator + map.getFile().getName(); File saveMapFile = new File(saveEntry); ActionUtil.marshallMap(saveMapFile, map); LWMap saveMap = tufts.vue.action.OpenAction.loadMap(saveEntry); //TODO: Need to add resources in zip file /** Iterator i = resourceVector.iterator(); while(i.hasNext()) { Vector vector = (Vector)i.next(); Boolean b = (Boolean)(vector.elementAt(0)); if(b.booleanValue()) { Resource r = (Resource)(vector.elementAt(1)); String rFileName = r.getSpec(); File rFile = new File(rFileName); String entry = RESOURCE_FOLDER+rFile.getName(); imscp.putEntry(entry,rFile); replaceResource(saveMap,r,new MapResource(RESOURCE_FOLDER+rFile.getName())); } } ActionUtil.marshallMap(saveMapFile,saveMap); */ imscp.putEntry(saveMap.getFile().getName(), saveMapFile); saveMapFile.deleteOnExit(); imscp.closeZOS(); } catch (Exception ex) { ex.printStackTrace(); } return imscp.getFile(); } public static File createIMSCP(Vector resourceVector) throws IOException, URISyntaxException, CloneNotSupportedException { String IMSCPMetadata = ""; String IMSCPOrganization = ""; String IMSCPResources = ""; int resourceCount = 2; //resourceIdentifier 1 is used for map Properties props = tufts.vue.VUE.getActiveMap().getMetadata().asProperties(); IMSCPMetadata += getMetadataString(props); IMSCPResources += getResourceTag(props, IMSCP.MAP_FILE, 1); IMSCPOrganization += "<organization identifier=\"TOC1\" structure=\"hierarchical\">"; IMSCPOrganization += "<title>IMS Content Package of VUE Map</title> "; IMSCPOrganization += "<item identifier=\"ITEM1\" identifierref=\"RESOURCE1\">"; IMSCPOrganization += "<title> VUE Cocept Map</title>"; LWMap saveMap = (LWMap) tufts.vue.VUE.getActiveMap().clone(); IMSCP imscp = new IMSCP(); Iterator i = resourceVector.iterator(); while (i.hasNext()) { Vector vector = (Vector) i.next(); Resource r = (Resource) (vector.elementAt(1)); Boolean b = (Boolean) (vector.elementAt(0)); File file = new File(new URL(r.getSpec()).getFile()); //File file = new File((String)vector.elementAt(1)); if (b.booleanValue()) { System.out.println("FileName = " + file.getName() + " index =" + resourceVector.indexOf(vector)); //resourceTable.setValueAt("Processing",resourceVector.indexOf(vector),STATUS_COL); String entry = IMSCP.RESOURCE_FILES + File.separator + file.getName(); imscp.putEntry(entry, file); IMSCPResources += getResourceTag(r.getProperties().asProperties(), entry, resourceCount); IMSCPOrganization += getItemTag("ITEM" + resourceCount, "RESOURCE" + resourceCount, "Resource " + resourceCount + " in Concept Map"); //resourceTable.setValueAt("Done",resourceVector.indexOf(vector),STATUS_COL); replaceResource(saveMap, r, Resource.getFactory().get(IMSCP.RESOURCE_FILES + File.separatorChar + file.getName())); //replaceResource(saveMap,r,new MapResource(IMSCP.RESOURCE_FILES+File.separatorChar+file.getName())); resourceCount++; } } saveMap(saveMap); imscp.putEntry(IMSCP.MAP_FILE, activeMapFile); IMSCPOrganization += "</item>"; IMSCPOrganization += "</organization>"; IMSManifest = readRawManifest(); IMSManifest = IMSManifest.replaceAll(IMSCP_MANIFEST_METADATA, IMSCPMetadata).trim(); IMSManifest = IMSManifest.replaceAll(IMSCP_MANIFEST_ORGANIZATION, IMSCPOrganization); IMSManifest = IMSManifest.replaceAll(IMSCP_MANIFEST_RESOURCES, IMSCPResources); File IMSManifestFile = File.createTempFile("imsmanifest", ".xml"); BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(IMSManifestFile)); fos.write(IMSManifest.getBytes()); fos.close(); imscp.putEntry(IMSCP.MANIFEST_FILE, IMSManifestFile); System.out.println("Writing Active Map : " + activeMapFile.getName()); imscp.closeZOS(); return imscp.getFile(); } public static String getMetadataString(Properties dcFields) { String metadata = ""; Enumeration e = dcFields.keys(); while (e.hasMoreElements()) { String field = (String) e.nextElement(); if (isSupportedMetadataField(field)) metadata += "<" + DC_NAMESPACE + field + ">" + dcFields.getProperty(field) + "</" + DC_NAMESPACE + field + ">"; } return metadata; } public static String getResourceTag(Properties dcFields, String entry, int resourceCount) { String resourceTag = ""; String identifier = "RESOURCE" + resourceCount; resourceTag = "<resource identifier=\"" + identifier + "\" type=\"webcontent\" href=\"" + entry + "\">\n"; resourceTag += "<file href=\"" + entry + "\"/>\n"; resourceTag += "<metadata>\n"; resourceTag += "<schema>Dublin Core</schema> \n"; resourceTag += "<schemaversion>1.1</schemaversion> \n"; resourceTag += getMetadataString(dcFields); resourceTag += "</metadata>\n"; resourceTag += "</resource>\n"; return resourceTag; } public static String getItemTag(String item, String resource, String title) { String itemTag = ""; itemTag += "<item identifier=\"" + item + "\" identifierref=\"" + resource + "\">"; itemTag += "<title>" + title + "</title>"; itemTag += "</item>"; return itemTag; } public static String readRawManifest() { String s = ""; try { BufferedInputStream fis = new BufferedInputStream(VueResources.getURL("imsmanifest").openStream()); byte[] buf = new byte[BUFFER_SIZE]; int ch; int len; while ((len = fis.read(buf)) > 0) { s = s + new String(buf); } fis.close(); } catch (Exception ex) { ex.printStackTrace(); } return s; } public static void replaceResource(LWMap map, Resource r1, Resource r2) { tufts.vue.action.Archive.replaceResource(map, r1, r2); } public static void saveActiveMap() throws IOException, CloneNotSupportedException { LWMap map = (LWMap) tufts.vue.VUE.getActiveMap().clone(); activeMapFile = map.getFile(); if (activeMapFile == null) { String prefix = "concept_map"; String suffix = ".vue"; activeMapFile = File.createTempFile(prefix, suffix); } ActionUtil.marshallMap(activeMapFile, map); } public static File saveMap(LWMap map) throws IOException { activeMapFile = map.getFile(); if (activeMapFile == null) { String prefix = "concept_map"; String suffix = ".vue"; activeMapFile = File.createTempFile(prefix, suffix); } ActionUtil.marshallMap(activeMapFile, map); return activeMapFile; } public static boolean isSupportedMetadataField(String field) { for (int i = 0; i < DC_FIELDS.length; i++) { if (DC_FIELDS[i].equalsIgnoreCase(field)) return true; } return false; } }