/** * Copyright 2010 The University of North Carolina at Chapel Hill * * Licensed under the Apache 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.apache.org/licenses/LICENSE-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 unc.lib.cdr.workbench.arrange; import gov.loc.mets.DivType; import gov.loc.mets.FLocatType; import gov.loc.mets.FileType; import gov.loc.mets.util.METSConstants; import java.net.URI; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileInfo; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterFactory; import unc.lib.cdr.workbench.originals.OriginalFileStore; import unc.lib.cdr.workbench.project.MetsProjectNature; import unc.lib.cdr.workbench.views.FileStoreImageProvider; import unc.lib.cdr.workbench.views.ImageProvider; public class DivAdapterFactory implements IAdapterFactory { @SuppressWarnings("rawtypes") Class[] adapterTypes = new Class[] { OriginalFileStore.class, ImageProvider.class }; @SuppressWarnings("rawtypes") @Override public Object getAdapter(Object adaptableObject, Class adapterType) { Object result = null; if (OriginalFileStore.class.equals(adapterType)) { if (adaptableObject instanceof DivType) { DivType d = (DivType) adaptableObject; return MetsProjectNature.getOriginalFileStore(d); } } if (ImageProvider.class.equals(adapterType)) { if (adaptableObject instanceof DivType) { DivType d = (DivType) adaptableObject; IFileStore store = MetsProjectNature.getOriginalFileStore(d); if(store == null || !store.fetchInfo().exists()) store = MetsProjectNature.getStagedFileStore(d); IFileInfo info = store.fetchInfo(); if (!info.isDirectory() && info.exists()) { return new FileStoreImageProvider(store); } else { if (d.getFptr().size() > 0) { FileType fileType = (FileType) d.eResource() .getEObject(d.getFptr().get(0).getFILEID()); for (FLocatType test : fileType.getFLocat()) { if (METSConstants.FLocat_USE_STAGE.equals(test .getUSE())) { URI stagedURI = URI.create(test.getHref()); stagedURI = MetsProjectNature.getNatureForMetsObject(test).resolveProjectRelativeURI(stagedURI); try { IFileStore fs = EFS.getStore(stagedURI); return new FileStoreImageProvider(fs); } catch (CoreException ignore) { } } } } } } else if (adaptableObject instanceof IFileStore) { IFileStore store = (IFileStore) adaptableObject; if (!store.fetchInfo().isDirectory()) { return new FileStoreImageProvider(store); } } } return result; } @SuppressWarnings("rawtypes") @Override public Class[] getAdapterList() { return adapterTypes; } }