package org.eclipse.update.examples.buildzip; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2002. | |
* All Rights Reserved. | |
*/ | |
import java.io.File; | |
import java.io.FileFilter; | |
import java.io.IOException; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import java.net.URLDecoder; | |
import java.util.zip.ZipEntry; | |
import java.util.zip.ZipFile; | |
import org.eclipse.core.runtime.CoreException; | |
import org.eclipse.update.core.*; | |
import org.eclipse.update.core.BaseSiteFactory; | |
import org.eclipse.update.core.ISite; | |
import org.eclipse.update.core.Site; | |
import org.eclipse.update.core.model.InvalidSiteTypeException; | |
import org.eclipse.update.core.model.CategoryModel; | |
public class BuildZipSiteFactory extends BaseSiteFactory { | |
/* | |
* @see ISiteFactory#createSite(URL) | |
*/ | |
public ISite createSite(URL url) throws CoreException,InvalidSiteTypeException { | |
Site site = null; | |
// create site and add category | |
site = (Site) createSiteMapModel(); | |
CategoryModel category = createSiteCategoryModel(); | |
category.setName("eclipse-builds"); | |
category.setLabel("Eclipse Builds"); | |
site.addCategoryModel(category); | |
// set content provider | |
BuildZipSiteContentProvider contentProvider = new BuildZipSiteContentProvider(url); | |
site.setSiteContentProvider(contentProvider); | |
// get all matching zip files on the site | |
FileFilter filter = new FileFilter() { | |
public boolean accept(File file) { | |
if (file.getName().endsWith(".zip")) { | |
try { | |
ZipFile zip = new ZipFile(file); | |
ZipEntry entry = zip.getEntry("eclipse/buildmanifest.properties"); | |
if (entry == null) | |
return false; | |
else | |
return true; | |
} catch (IOException e) { | |
return false; | |
} | |
} else | |
return false; | |
} | |
}; | |
File file = new File(URLDecoder.decode(url.getFile())); | |
File[] zips = file.listFiles(filter); | |
// create a reference for each matching zip | |
SiteFeatureReferenceModel ref = null; | |
for (int i = 0; zips != null && i < zips.length; i++) { | |
ref = createFeatureReferenceModel(); | |
ref.setType("org.eclipse.update.examples.zip"); | |
ref.setSiteModel(site); | |
ref.setURLString("file:" + zips[i].getAbsolutePath()); | |
ref.setCategoryNames(new String[] { "eclipse-builds" }); | |
site.addFeatureReferenceModel(ref); | |
} | |
try { | |
site.resolve(url, null); // resolve any URLs relative to the site | |
} catch (MalformedURLException e){ | |
throw Utilities.newCoreException("",e); | |
} | |
return site; | |
} | |
} |