carbidev/com.nokia.tools.variant.media.ui_1.0.0.v20090225_01-11/src/com/nokia/tools/variant/internal/media/ui/ZipDescriber.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/carbidev/com.nokia.tools.variant.media.ui_1.0.0.v20090225_01-11/src/com/nokia/tools/variant/internal/media/ui/ZipDescriber.java Thu Mar 11 18:39:02 2010 +0200
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Symbian Foundation License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - Initial contribution
+ *
+ * Contributors:
+ *
+ * Description: This file is part of com.nokia.tools.variant.media.ui component.
+ */
+
+package com.nokia.tools.variant.internal.media.ui;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.content.IContentDescriber;
+import org.eclipse.core.runtime.content.IContentDescription;
+
+import com.nokia.tools.variant.common.core.utils.FileUtils;
+import com.nokia.tools.variant.media.ui.MediaUIPlugin;
+
+public class ZipDescriber implements IContentDescriber {
+
+ public ZipDescriber() {
+ super();
+ }
+
+ public int describe(InputStream contents, IContentDescription description)
+ throws IOException {
+
+ int counter = 0;
+ long length = -1;
+ File temp = File.createTempFile("tempzip", ".zip");
+ try {
+ FileOutputStream fos = new FileOutputStream(temp);
+ try {
+ length = FileUtils.copyStream(contents, fos);
+ } finally {
+ FileUtils.closeStream(fos);
+ }
+
+ ZipFile zis = new ZipFile(temp);
+ Enumeration<? extends ZipEntry> en = zis.entries();
+ while (en.hasMoreElements()) {
+ ZipEntry zipEntry = en.nextElement();
+ if (!zipEntry.isDirectory()) {
+ counter++;
+ }
+ }
+ } finally {
+ temp.delete();
+ }
+
+ if (description != null) {
+ description.setProperty(MediaUIPlugin.SIZE, length);
+ description.setProperty(MediaUIPlugin.EMBEDDED_FILE_COUNT, counter);
+ }
+
+ return INDETERMINATE;
+ }
+
+ public QualifiedName[] getSupportedOptions() {
+ return new QualifiedName[] { MediaUIPlugin.SIZE,
+ MediaUIPlugin.EMBEDDED_FILE_COUNT };
+ }
+
+}