/** * */ package org.nightlabs.jfire.reporting.admin.ui.platform; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.birt.report.model.api.DefaultResourceLocator; import org.eclipse.birt.report.model.api.IResourceLocator; import org.eclipse.birt.report.model.api.ModuleHandle; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.nightlabs.base.ui.util.RCPUtil; import org.nightlabs.jfire.reporting.admin.ui.layout.editor.l10n.ReportLayoutL10nUtil; import org.nightlabs.jfire.reporting.layout.id.ReportRegistryItemID; /** * @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de --> * */ public class ClientResourceLocator extends DefaultResourceLocator implements IResourceLocator { /** * */ public ClientResourceLocator() { } @Override public URL findResource(ModuleHandle handle, String fileName, int type) { // String locale = ReportLayoutLocalisationData.extractLocale(fileName); if (currentReportLayoutID == null) return null; IFolder bundleFolder = getReportLayoutResourceFolder(currentReportLayoutID); IFile resourceFile = bundleFolder.getFile(fileName); if (resourceFile.exists()) try { File file = RCPUtil.getResourceAsFile(resourceFile); if (!file.exists()) return null; return file.toURI().toURL(); } catch (MalformedURLException e) { throw new RuntimeException(e); } return null; } private static ReportRegistryItemID currentReportLayoutID; public static void setCurrentReportLayoutID(ReportRegistryItemID currentReportLayoutID) { ClientResourceLocator.currentReportLayoutID = currentReportLayoutID; } public static IFolder getReportLayoutResourceFolder(ReportRegistryItemID reportLayoutID) { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(ReportLayoutL10nUtil.PROJECT_NAME_REPORT_LOCALISATION); try { if (!project.exists()) project.create(null); if (!project.isOpen()) project.open(null); } catch (CoreException e) { throw new RuntimeException(e); } IFolder bundleFolder = project.getFolder(reportLayoutID.organisationID + IPath.SEPARATOR + reportLayoutID.reportRegistryItemType + "-" + reportLayoutID.reportRegistryItemID); //$NON-NLS-1$ return bundleFolder; } public static File getReportLayoutResourceFolderAsFile(ReportRegistryItemID reportLayoutID) { IFolder folder = getReportLayoutResourceFolder(reportLayoutID); return RCPUtil.getResourceAsFile(folder); } }