diff --git a/htroot/Settings_p.java b/htroot/Settings_p.java index 7209e12c2..ba94e66ad 100644 --- a/htroot/Settings_p.java +++ b/htroot/Settings_p.java @@ -53,10 +53,8 @@ import de.anomic.plasma.plasmaParser; import de.anomic.plasma.plasmaParserConfig; import de.anomic.plasma.plasmaSwitchboard; import de.anomic.plasma.parser.ParserInfo; -import de.anomic.server.serverCore; import de.anomic.server.serverObjects; import de.anomic.server.serverSwitch; -import de.anomic.server.portForwarding.serverPortForwarding; import de.anomic.yacy.yacyCore; import de.anomic.yacy.yacySeedUploader; @@ -129,7 +127,7 @@ public final class Settings_p { for (int i=0; i < forwardingMethods.length; i++) { try { - Class forwarder = Class.forName(env.getConfig("portForwarding." + forwardingMethods[i],"")); + Class forwarder = Class.forName(env.getConfig("portForwarding." + forwardingMethods[i],"")); // FIXME: why is forwarder declared, but never used? prop.put("forwardingMethods_" + methodCount + "_name",forwardingMethods[i]); prop.put("forwardingMethods_" + methodCount + "_selected", forwardingMethods[i].equals(currentForwarder)?1:0); methodCount++; diff --git a/htroot/env/page.java b/htroot/env/page.java index 9394be31e..f3a471040 100644 --- a/htroot/env/page.java +++ b/htroot/env/page.java @@ -25,7 +25,6 @@ //note: this isn't useful, yet. //this is only a basic demonstration, what can be done with the supertemplates. import de.anomic.http.httpHeader; -import de.anomic.plasma.plasmaSwitchboard; import de.anomic.server.serverObjects; import de.anomic.server.serverSwitch; diff --git a/source/de/anomic/index/indexCollectionRI.java b/source/de/anomic/index/indexCollectionRI.java index adf0b1c01..7470e8b35 100644 --- a/source/de/anomic/index/indexCollectionRI.java +++ b/source/de/anomic/index/indexCollectionRI.java @@ -55,7 +55,7 @@ public class indexCollectionRI extends indexAbstractRI implements indexRI { return 0; } } - + public Iterator wordContainers(String startWordHash, boolean rot) { return new wordContainersIterator(startWordHash, rot); } diff --git a/source/de/anomic/index/indexRAMCacheRI.java b/source/de/anomic/index/indexRAMCacheRI.java index 1881e8e5f..0635f7af1 100644 --- a/source/de/anomic/index/indexRAMCacheRI.java +++ b/source/de/anomic/index/indexRAMCacheRI.java @@ -275,7 +275,7 @@ public final class indexRAMCacheRI extends indexAbstractRI implements indexRI { public Iterator wordContainers(String startWordHash, boolean rot) { if (rot) throw new UnsupportedOperationException("plasmaWordIndexCache cannot rotate wordContainers"); - return wCache.tailMap(startWordHash).values().iterator(); // FIXME: check if iteration is in order of keys + return wCache.tailMap(startWordHash).values().iterator(); // The collection's iterator will return the values in the order that their corresponding keys appear in the tree. } public void shiftK2W() { diff --git a/source/de/anomic/index/indexRowSetContainer.java b/source/de/anomic/index/indexRowSetContainer.java index 231e04a0e..70e96f1e9 100644 --- a/source/de/anomic/index/indexRowSetContainer.java +++ b/source/de/anomic/index/indexRowSetContainer.java @@ -26,6 +26,7 @@ package de.anomic.index; +import java.lang.reflect.Method; import java.util.Iterator; import de.anomic.kelondro.kelondroRow; @@ -102,6 +103,27 @@ public class indexRowSetContainer extends kelondroRowSet implements indexContain return null; } + public static Method containerMergeMethod = null; + static { + try { + Class c = Class.forName("de.anomic.index.indexRowSetContainer"); + containerMergeMethod = c.getMethod("containerMerge", new Class[]{Object.class, Object.class}); + } catch (SecurityException e) { + System.out.println("Error while initializing containerMerge: " + e.getMessage()); + containerMergeMethod = null; + } catch (ClassNotFoundException e) { + System.out.println("Error while initializing containerMerge: " + e.getMessage()); + containerMergeMethod = null; + } catch (NoSuchMethodException e) { + System.out.println("Error while initializing containerMerge: " + e.getMessage()); + containerMergeMethod = null; + } + } - + public static Object containerMerge(Object a, Object b) { + indexContainer c = (indexContainer) a; + c.add((indexContainer) b, -1); + return c; + } + } diff --git a/source/de/anomic/kelondro/kelondroMergeIterator.java b/source/de/anomic/kelondro/kelondroMergeIterator.java index d176caaf9..8690e909d 100644 --- a/source/de/anomic/kelondro/kelondroMergeIterator.java +++ b/source/de/anomic/kelondro/kelondroMergeIterator.java @@ -41,6 +41,8 @@ package de.anomic.kelondro; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Comparator; import java.util.Iterator; import java.util.Set; @@ -51,14 +53,16 @@ public class kelondroMergeIterator implements Iterator { Comparator comp; Iterator a, b; Object na, nb; + Method merger; boolean up; - public kelondroMergeIterator(Iterator a, Iterator b, Comparator c, boolean up) { + public kelondroMergeIterator(Iterator a, Iterator b, Comparator c, Method m, boolean up) { // this works currently only for String-type key iterations this.a = a; this.b = b; this.up = up; this.comp = c; + this.merger = m; nexta(); nextb(); } @@ -106,7 +110,20 @@ public class kelondroMergeIterator implements Iterator { // compare the Objects int c = comp.compare(na, nb); if (c == 0) { - s = na; + try { + //System.out.print("MERGE OF " + na.toString() + " AND " + nb.toString() + ": "); + s = this.merger.invoke(null, new Object[]{na, nb}); + //System.out.println("RESULT IS " + s.toString()); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + s = null; + } catch (IllegalAccessException e) { + e.printStackTrace(); + s = null; + } catch (InvocationTargetException e) { + e.printStackTrace(); + s = null; + } nexta(); nextb(); return s; @@ -125,19 +142,41 @@ public class kelondroMergeIterator implements Iterator { throw new java.lang.UnsupportedOperationException("merge does not support remove"); } - public static Iterator cascade(Set /*of*/ iterators, Comparator c,boolean up) { + public static Iterator cascade(Set /*of*/ iterators, Comparator c, Method merger, boolean up) { // this extends the ability to combine two iterators // to the abiliy of combining a set of iterators if (iterators == null) return null; if (iterators.size() == 0) return null; - return cascade(iterators.iterator(), c, up); + return cascade(iterators.iterator(), c, merger, up); } - private static Iterator cascade(Iterator /*of*/ iiterators, Comparator c, boolean up) { + private static Iterator cascade(Iterator /*of*/ iiterators, Comparator c, Method merger, boolean up) { if (iiterators == null) return null; if (!(iiterators.hasNext())) return null; Iterator one = (Iterator) iiterators.next(); if (!(iiterators.hasNext())) return one; - return new kelondroMergeIterator(one, cascade(iiterators, c, up), c, up); + return new kelondroMergeIterator(one, cascade(iiterators, c, merger, up), c, merger, up); + } + + public static Method simpleMerge = null; + static { + try { + Class c = Class.forName("de.anomic.kelondro.kelondroMergeIterator"); + simpleMerge = c.getMethod("mergeEqualByReplace", new Class[]{Object.class, Object.class}); + } catch (SecurityException e) { + System.out.println("Error while initializing simpleMerge: " + e.getMessage()); + simpleMerge = null; + } catch (ClassNotFoundException e) { + System.out.println("Error while initializing simpleMerge: " + e.getMessage()); + simpleMerge = null; + } catch (NoSuchMethodException e) { + System.out.println("Error while initializing simpleMerge: " + e.getMessage()); + simpleMerge = null; + } + } + + public static Object mergeEqualByReplace(Object a, Object b) { + return a; } + } diff --git a/source/de/anomic/plasma/plasmaWordIndex.java b/source/de/anomic/plasma/plasmaWordIndex.java index c626ddf26..edeb2383e 100644 --- a/source/de/anomic/plasma/plasmaWordIndex.java +++ b/source/de/anomic/plasma/plasmaWordIndex.java @@ -65,6 +65,7 @@ import de.anomic.index.indexEntryAttribute; import de.anomic.index.indexRAMCacheRI; import de.anomic.index.indexRI; import de.anomic.index.indexAbstractRI; +import de.anomic.index.indexRowSetContainer; import de.anomic.index.indexTreeMapContainer; import de.anomic.index.indexURLEntry; import de.anomic.kelondro.kelondroBase64Order; @@ -450,6 +451,7 @@ public final class plasmaWordIndex extends indexAbstractRI implements indexRI { ramCache.wordContainers(startWordHash, false), assortmentCluster.wordContainers(startWordHash, true, false), new indexContainerOrder(kelondroNaturalOrder.naturalOrder), + indexRowSetContainer.containerMergeMethod, true); } if (resourceLevel == plasmaWordIndex.RL_WORDFILES) { @@ -458,9 +460,11 @@ public final class plasmaWordIndex extends indexAbstractRI implements indexRI { ramCache.wordContainers(startWordHash, false), assortmentCluster.wordContainers(startWordHash, true, false), new indexContainerOrder(kelondroNaturalOrder.naturalOrder), + indexRowSetContainer.containerMergeMethod, true), backend.wordContainers(startWordHash, false), new indexContainerOrder(kelondroNaturalOrder.naturalOrder), + indexRowSetContainer.containerMergeMethod, true); } return null; diff --git a/source/de/anomic/plasma/plasmaWordIndexAssortmentCluster.java b/source/de/anomic/plasma/plasmaWordIndexAssortmentCluster.java index b7d09bf1f..4e48c1415 100644 --- a/source/de/anomic/plasma/plasmaWordIndexAssortmentCluster.java +++ b/source/de/anomic/plasma/plasmaWordIndexAssortmentCluster.java @@ -55,6 +55,7 @@ import de.anomic.index.indexContainer; import de.anomic.index.indexContainerOrder; import de.anomic.index.indexRI; import de.anomic.index.indexAbstractRI; +import de.anomic.index.indexRowSetContainer; import de.anomic.index.indexTreeMapContainer; import de.anomic.index.indexURLEntry; import de.anomic.kelondro.kelondroNaturalOrder; @@ -287,7 +288,7 @@ public final class plasmaWordIndexAssortmentCluster extends indexAbstractRI impl // iterates indexContainer - Objects HashSet containerIterators = new HashSet(); for (int i = 0; i < clusterCount; i++) containerIterators.add(assortments[i].containers(startWordHash, up, rot)); - return kelondroMergeIterator.cascade(containerIterators, new indexContainerOrder(kelondroNaturalOrder.naturalOrder), up); + return kelondroMergeIterator.cascade(containerIterators, new indexContainerOrder(kelondroNaturalOrder.naturalOrder), indexRowSetContainer.containerMergeMethod, up); } public int size() { diff --git a/source/de/anomic/plasma/plasmaWordIndexFileCluster.java b/source/de/anomic/plasma/plasmaWordIndexFileCluster.java index 3b3d28013..81a095fdf 100644 --- a/source/de/anomic/plasma/plasmaWordIndexFileCluster.java +++ b/source/de/anomic/plasma/plasmaWordIndexFileCluster.java @@ -46,7 +46,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Comparator; -import java.util.HashSet; import java.util.Iterator; import java.util.TreeSet; @@ -76,6 +75,39 @@ public class plasmaWordIndexFileCluster extends indexAbstractRI implements index return size; } + + public Iterator wordContainers(String startHash, boolean rot) { + return new containerIterator(wordHashes(startHash, rot)); + } + + public class containerIterator implements Iterator { + + // this is a highly inefficient class that is here for the + // only case to support a compatible interface until the + // new database structure is in place and makes the + // plasmaWordIndexFileCluster class superfluous + + private Iterator wordIterator; + + public containerIterator(Iterator wordIterator) { + this.wordIterator = wordIterator; + } + + public boolean hasNext() { + return wordIterator.hasNext(); + } + + public Object next() { + return getContainer((String) wordIterator.next(), true, 100); + } + + public void remove() { + wordIterator.remove(); + } + + } + + public Iterator wordHashes(String startHash, boolean rot) { // outdated method: to be replaced by wordContainers return wordHashes(startHash, true, rot); @@ -86,11 +118,6 @@ public class plasmaWordIndexFileCluster extends indexAbstractRI implements index return new iterateFiles(startHash, up); } - public Iterator wordContainers(String startHash, boolean rot) { - // wordContainers is not supported ** FIXME ** - return new HashSet().iterator(); - } - public class iterateFiles implements Iterator { private final ArrayList hierarchy; // contains TreeSet elements, earch TreeSet contains File Entries diff --git a/source/de/anomic/server/portForwarding/upnp/serverPortForwardingUpnp.java b/source/de/anomic/server/portForwarding/upnp/serverPortForwardingUpnp.java index 9f5cf7955..20227b5e1 100644 --- a/source/de/anomic/server/portForwarding/upnp/serverPortForwardingUpnp.java +++ b/source/de/anomic/server/portForwarding/upnp/serverPortForwardingUpnp.java @@ -58,8 +58,6 @@ import de.anomic.server.portForwarding.serverPortForwarding; public class serverPortForwardingUpnp implements serverPortForwarding { private InternetGatewayDevice gateway; - - private serverSwitch switchboard; private String localHost; private int localHostPort; @@ -164,7 +162,6 @@ public class serverPortForwardingUpnp implements serverPortForwarding { throws Exception { try { this.log.logFine("Initializing port forwarding via UPnP ..."); - this.switchboard = switchboard; if (localHost.equals("0.0.0.0")) { this.localHost = InetAddress.getLocalHost().getHostAddress();