allow multiple loading of same format
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.minres.scviewer.database.loader">
|
||||
<implementation class="com.minres.scviewer.database.internal.WaveformDb"/>
|
||||
<reference bind="bind" cardinality="1..n" interface="com.minres.scviewer.database.IWaveformDbLoader" name="IWaveformDbLoader" policy="dynamic" unbind="unbind"/>
|
||||
<reference bind="bind" cardinality="1..n" interface="com.minres.scviewer.database.IWaveformDbLoaderFactory" name="IWaveformDbLoaderFactory" policy="dynamic" unbind="unbind"/>
|
||||
</scr:component>
|
||||
|
@ -0,0 +1,33 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2015-2021 MINRES Technologies GmbH 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:
|
||||
* MINRES Technologies GmbH - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package com.minres.scviewer.database;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* A factory for creating IWaveformDb objects.
|
||||
*/
|
||||
public interface IWaveformDbLoaderFactory {
|
||||
|
||||
/**
|
||||
* Check if the loader produced by this factory can load the given file.
|
||||
*
|
||||
* @param inputFile the input file
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean canLoad(File inputFile);
|
||||
/**
|
||||
* Gets the database.
|
||||
*
|
||||
* @return the database
|
||||
*/
|
||||
IWaveformDbLoader getLoader();
|
||||
}
|
@ -25,6 +25,7 @@ import com.minres.scviewer.database.IHierNode;
|
||||
import com.minres.scviewer.database.IWaveform;
|
||||
import com.minres.scviewer.database.IWaveformDb;
|
||||
import com.minres.scviewer.database.IWaveformDbLoader;
|
||||
import com.minres.scviewer.database.IWaveformDbLoaderFactory;
|
||||
import com.minres.scviewer.database.RelationType;
|
||||
|
||||
/**
|
||||
@ -33,7 +34,7 @@ import com.minres.scviewer.database.RelationType;
|
||||
public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeListener {
|
||||
|
||||
/** The loaders. */
|
||||
private static List<IWaveformDbLoader> loaders = new LinkedList<>();
|
||||
private static List<IWaveformDbLoaderFactory> loaderFactories = new LinkedList<>();
|
||||
|
||||
/** The loaded. */
|
||||
private boolean loaded;
|
||||
@ -52,8 +53,8 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
|
||||
*
|
||||
* @param loader the loader
|
||||
*/
|
||||
public synchronized void bind(IWaveformDbLoader loader) {
|
||||
loaders.add(loader);
|
||||
public synchronized void bind(IWaveformDbLoaderFactory loader) {
|
||||
loaderFactories.add(loader);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,8 +62,8 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
|
||||
*
|
||||
* @param loader the loader
|
||||
*/
|
||||
public synchronized void unbind(IWaveformDbLoader loader) {
|
||||
loaders.remove(loader);
|
||||
public synchronized void unbind(IWaveformDbLoaderFactory loader) {
|
||||
loaderFactories.remove(loader);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -70,8 +71,8 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
|
||||
*
|
||||
* @return the loaders
|
||||
*/
|
||||
public static List<IWaveformDbLoader> getLoaders() {
|
||||
return Collections.unmodifiableList(loaders);
|
||||
public static List<IWaveformDbLoaderFactory> getLoaders() {
|
||||
return Collections.unmodifiableList(loaderFactories);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -124,8 +125,9 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
|
||||
@Override
|
||||
public boolean load(File inp) {
|
||||
boolean retval = true;
|
||||
for (IWaveformDbLoader loader : loaders) {
|
||||
if (loader.canLoad(inp)) {
|
||||
for (IWaveformDbLoaderFactory loaderFactory : loaderFactories) {
|
||||
if (loaderFactory.canLoad(inp)) {
|
||||
IWaveformDbLoader loader = loaderFactory.getLoader();
|
||||
loader.addPropertyChangeListener(this);
|
||||
try {
|
||||
loader.load(this, inp);
|
||||
|
Reference in New Issue
Block a user