/*******************************************************************************
 * Copyright (c) 2005, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.internal.archive;

import java.util.zip.ZipFile;

import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.jst.jee.archive.ArchiveModelLoadException;
import org.eclipse.jst.jee.archive.IArchive;
import org.eclipse.jst.jee.archive.internal.ZipFileArchiveLoadAdapterImpl;

public class JavaEEEMFZipFileLoadAdapterImpl extends ZipFileArchiveLoadAdapterImpl {

	private JavaEEEMFArchiveAdapterHelper emfHelper = new JavaEEEMFArchiveAdapterHelper();

	public JavaEEEMFZipFileLoadAdapterImpl() {
		super();
	}

	public JavaEEEMFZipFileLoadAdapterImpl(ZipFile zipFile) {
		super(zipFile);
	}

	@Override
	public void setArchive(IArchive archive) {
		super.setArchive(archive);
		emfHelper.setArchive(archive);
	}

	public Resource getResource(IPath resourcePath) throws ArchiveModelLoadException {
		return emfHelper.getResource(resourcePath);
	}
	
	@Override
	public boolean containsModelObject(IPath modelObjectPath) {
		return emfHelper.containsModelObject(modelObjectPath);
	}

	@Override
	public Object getModelObject(IPath modelObjectPath) throws ArchiveModelLoadException {
		return emfHelper.getModelObject(modelObjectPath);
	}
	
	@Override
	public void close() {
		super.close();
		WorkbenchResourceHelperBase.removeAndUnloadAll(emfHelper.getResourceSet().getResources(), emfHelper.getResourceSet());
	}
	
	protected JavaEEEMFArchiveAdapterHelper getEMFHelper() {
		return emfHelper;
	}
}
