/* * 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. */ /* * IMSCP.java * * Created on December 4, 2003, 12:34 PM */ package tufts.vue; import java.net.*; import java.io.*; import java.util.zip.*; /** * * @author akumar03 */ public class IMSCP { public static final String MANIFEST_FILE = "imsmanifest.xml"; public static final String MAP_FILE = "concept_map.vue"; public static final String RESOURCE_FILES = "resource-files"; private final int BUFFER_SIZE = 10240; private URL location; private File tempFile; private ZipFile zipFile; private ZipOutputStream zos; public IMSCP() throws IOException{ tempFile = File.createTempFile("vueCMAP",".zip"); zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tempFile))); } /** public IMSCP(tufts.vue.ConceptMap map,URL location) { } **/ public IMSCP(URL location) throws ZipException,IOException{ this.location = location; createTempFile(); } public InputStream getManifest() throws ZipException,IOException{ return getContent(MANIFEST_FILE); } public InputStream getConceptMap() throws ZipException,IOException { return getContent(MAP_FILE); } public InputStream getResource(String fileName) throws ZipException, IOException{ return getContent(RESOURCE_FILES+File.separator+fileName); } public File getFile() throws IOException { return tempFile; } public void putEntry(String entryName,File file) throws ZipException, IOException { byte[] buf = new byte[1024]; // buffer for reading file int len; if(zos == null) throw new ZipException("IMSCP.putEntry(File file): ZipOutputstream not initialized"); try { ZipEntry ze = new ZipEntry(entryName); zos.putNextEntry(ze); //BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getAbsolutePath().replaceAll("%20"," "))); BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); while ((len = fis.read(buf)) > 0) { zos.write(buf, 0, len); } fis.close(); zos.closeEntry(); } catch(ZipException ex) { if(!ex.getMessage().startsWith("duplicate")) // ignoring duplicate entries throw ex; } } public void putEntry(File file) throws ZipException, IOException { putEntry(file.getName(),file); } private InputStream getContent(String fileName) throws ZipException, IOException { InputStream inputStream; zipFile = new ZipFile(tempFile); ZipEntry entry = zipFile.getEntry(fileName); inputStream = zipFile.getInputStream(entry); return inputStream; } private void createTempFile() throws ZipException, IOException{ String fileName = location.getFile(); String prefix = fileName.substring(fileName.lastIndexOf("/")+1,fileName.indexOf(".")); String suffix = fileName.substring(fileName.indexOf(".")); this.tempFile = File.createTempFile(prefix, suffix); tempFile.deleteOnExit(); FileOutputStream fos = new FileOutputStream(tempFile); InputStream inputStream = location.openStream(); BufferedInputStream bufIS = new BufferedInputStream(inputStream); byte[] buf = new byte[BUFFER_SIZE]; int len = BUFFER_SIZE; byte b; while ((len = bufIS.read(buf,0,len)) > 0) fos.write(buf,0,len); fos.close(); System.out.println("prefix = "+prefix+ " suffix = "+suffix+ " location = "+tempFile.getAbsolutePath()); } public void close() throws IOException{ zipFile.close(); } public void closeZOS() throws IOException { zos.close(); } protected void finalize() throws Throwable{ super.finalize(); close(); } }