diff options
Diffstat (limited to 'core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration')
6 files changed, 161 insertions, 0 deletions
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/Filter.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/Filter.java new file mode 100644 index 00000000..3fb594a2 --- /dev/null +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/Filter.java @@ -0,0 +1,28 @@ +package org.openslx.runvirt.configuration; + +public abstract class Filter<T, R> implements FilterFunction<T, R> +{ + private final String name; + private boolean enabled; + + public Filter( String name ) + { + this.name = name; + this.setEnabled( true ); + } + + public String getName() + { + return this.name; + } + + public boolean isEnabled() + { + return this.enabled; + } + + public void setEnabled( boolean enabled ) + { + this.enabled = enabled; + } +} diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterException.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterException.java new file mode 100644 index 00000000..8969d1a2 --- /dev/null +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterException.java @@ -0,0 +1,14 @@ +package org.openslx.runvirt.configuration; + +public class FilterException extends Exception +{ + /** + * Version for serialization. + */ + private static final long serialVersionUID = 7293420658901349154L; + + public FilterException( String errorMsg ) + { + super( errorMsg ); + } +} diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterFunction.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterFunction.java new file mode 100644 index 00000000..1d716201 --- /dev/null +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterFunction.java @@ -0,0 +1,12 @@ +package org.openslx.runvirt.configuration; + +@FunctionalInterface +public interface FilterFunction<T, R> +{ + public void filter( T config, R args ) throws FilterException; + + public default void apply( T config, R args ) throws FilterException + { + this.filter( config, args ); + } +} diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterGeneric.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterGeneric.java new file mode 100644 index 00000000..e66c8f21 --- /dev/null +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterGeneric.java @@ -0,0 +1,9 @@ +package org.openslx.runvirt.configuration; + +public abstract class FilterGeneric<T, R> extends Filter<T, R> +{ + public FilterGeneric( String name ) + { + super( name ); + } +} diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java new file mode 100644 index 00000000..a97ad6d1 --- /dev/null +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java @@ -0,0 +1,80 @@ +package org.openslx.runvirt.configuration; + +import java.util.ArrayList; + +public final class FilterManager<T, R> +{ + private ArrayList<Filter<T, R>> filters; + private T config; + private R args; + + public FilterManager( T config, R args ) + { + this.filters = new ArrayList<Filter<T, R>>(); + this.config = config; + this.args = args; + } + + public void register( Filter<T, R> filter ) + { + this.register( filter, true ); + } + + public void register( Filter<T, R> filter, boolean enabled ) + { + filter.setEnabled( enabled ); + this.filters.add( filter ); + } + + public void register( String name, FilterFunction<T, R> filterFunction ) + { + this.register( name, filterFunction, true ); + } + + public void register( String name, FilterFunction<T, R> filterFunction, boolean enabled ) + { + final Filter<T, R> filter = new Filter<T, R>( name ) { + @Override + public void filter( T document, R args ) throws FilterException + { + filterFunction.apply( document, args ); + } + }; + + filter.setEnabled( enabled ); + this.filters.add( filter ); + } + + public void filterAll() throws FilterException + { + for ( Filter<T, R> filter : this.filters ) { + try { + filter.apply( this.config, this.args ); + } catch ( FilterException e ) { + final String errorMsg = new String( + "Error in configuration filter '" + filter.getName() + "':" + e.getLocalizedMessage() ); + throw new FilterException( errorMsg ); + } + } + } + + private String showFilters() + { + String filterSummary = new String(); + final int maxFilterNumCharacters = ( this.filters.size() + 1 ) / 10; + + for ( int i = 0; i < this.filters.size(); i++ ) { + final Filter<T, R> filter = this.filters.get( i ); + final String paddedNumber = String.format( "%-" + maxFilterNumCharacters + "s", i + 1 ); + filterSummary += paddedNumber + ": " + filter.getName() + System.lineSeparator(); + } + + return filterSummary; + } + + @Override + public String toString() + { + return this.showFilters(); + } +} diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterSpecific.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterSpecific.java new file mode 100644 index 00000000..8cff83bd --- /dev/null +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterSpecific.java @@ -0,0 +1,18 @@ +package org.openslx.runvirt.configuration; + +public abstract class FilterSpecific<T, R, H> extends Filter<T, R> +{ + private final H hypervisor; + + public FilterSpecific( String name, H hypervisor ) + { + super( name ); + + this.hypervisor = hypervisor; + } + + public H getHypervisor() + { + return this.hypervisor; + } +} |