summaryrefslogtreecommitdiffstats
path: root/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java
diff options
context:
space:
mode:
authorManuel Bentele2021-03-25 11:25:18 +0100
committerManuel Bentele2021-03-25 11:25:18 +0100
commit24d4ebdce0a3c022c7ae7c90139235bb4c8dad67 (patch)
tree03435b204d0d3ccd0311c63bb3d2983faf404273 /core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java
parent[qemu]: Add Libvirt XML documents as dependencies (diff)
downloadmltk-24d4ebdce0a3c022c7ae7c90139235bb4c8dad67.tar.gz
mltk-24d4ebdce0a3c022c7ae7c90139235bb4c8dad67.tar.xz
mltk-24d4ebdce0a3c022c7ae7c90139235bb4c8dad67.zip
[qemu] Add filtering/transformation of config files and VM management
Diffstat (limited to 'core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java')
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/configuration/FilterManager.java80
1 files changed, 80 insertions, 0 deletions
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();
+ }
+}