# HG changeset patch
# User cli
# Date 1250779778 -7200
# Node ID de98fd5b35f5ab8f59a48fe2137631b2eed65c71
# Parent bb6990c0dd1adf7a56e5a2f23993a59386e509c9
Remove aggregated group stubs and fix #543.
diff -r bb6990c0dd1a -r de98fd5b35f5 org/sonews/storage/AggregatedGroup.java
--- a/org/sonews/storage/AggregatedGroup.java Thu Aug 20 14:31:19 2009 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,260 +0,0 @@
-/*
- * SONEWS News Server
- * see AUTHORS for the list of contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.sonews.storage;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.sonews.util.Pair;
-
-/**
- * An aggregated group is a group consisting of several "real" group.
- * @author Christian Lins
- * @since sonews/1.0
- */
-class AggregatedGroup extends Channel
-{
-
- static class GroupElement
- {
- private Group group;
- private long offsetStart, offsetEnd;
-
- public GroupElement(Group group, long offsetStart, long offsetEnd)
- {
- this.group = group;
- this.offsetEnd = offsetEnd;
- this.offsetStart = offsetStart;
- }
- }
-
- public static List getAll()
- {
- List all = new ArrayList();
- all.add(getByName("agg.test"));
- return all;
- }
-
- public static AggregatedGroup getByName(String name)
- {
- if("agg.test".equals(name))
- {
- AggregatedGroup agroup = new AggregatedGroup(name);
- agroup.addGroup(Group.getByName("agg.test0"), 0, 1000);
- agroup.addGroup(Group.getByName("agg.test1"), 2000, 4000);
- return agroup;
- }
- else
- return null;
- }
-
- private GroupElement[] groups = new GroupElement[2];
- private String name;
-
- public AggregatedGroup(String name)
- {
- this.name = name;
- }
-
- private long aggIdxToIdx(long aggIdx)
- throws StorageBackendException
- {
- assert groups != null && groups.length == 2;
- assert groups[0] != null;
- assert groups[1] != null;
-
- // Search in indices of group one
- List idxs0 = groups[0].group.getArticleNumbers();
- Collections.sort(idxs0);
- for(long idx : idxs0)
- {
- if(idx == aggIdx)
- {
- return idx;
- }
- }
-
- // Given aggIdx must be an index of group two
- List idxs1 = groups[1].group.getArticleNumbers();
- return 0;
- }
-
- private long idxToAggIdx(long idx)
- {
- return 0;
- }
-
- /**
- * Adds the given group to this aggregated set.
- * @param group
- * @param offsetStart Lower limit for the article ids range
- */
- public void addGroup(Group group, long offsetStart, long offsetEnd)
- {
- this.groups[groups[0] == null ? 0 : 1]
- = new GroupElement(group, offsetStart, offsetEnd);
- }
-
- @Override
- public Article getArticle(long idx)
- throws StorageBackendException
- {
- Article article = null;
-
- for(GroupElement groupEl : groups)
- {
- if(groupEl.offsetStart <= idx && groupEl.offsetEnd >= idx)
- {
- article = groupEl.group.getArticle(idx - groupEl.offsetStart);
- break;
- }
- }
-
- return article;
- }
-
- @Override
- public List> getArticleHeads(
- final long first, final long last)
- throws StorageBackendException
- {
- List> heads = new ArrayList>();
-
- for(GroupElement groupEl : groups)
- {
- List> partHeads = new ArrayList>();
- if(groupEl.offsetStart <= first && groupEl.offsetEnd >= first)
- {
- long end = Math.min(groupEl.offsetEnd, last);
- partHeads = groupEl.group.getArticleHeads
- (first - groupEl.offsetStart, end - groupEl.offsetStart);
- }
- else if(groupEl.offsetStart <= last && groupEl.offsetEnd >= last)
- {
- long start = Math.max(groupEl.offsetStart, first);
- partHeads = groupEl.group.getArticleHeads
- (start - groupEl.offsetStart, last - groupEl.offsetStart);
- }
-
- for(Pair partHead : partHeads)
- {
- heads.add(new Pair(
- partHead.getA() + groupEl.offsetStart, partHead.getB()));
- }
- }
-
- return heads;
- }
-
- @Override
- public List getArticleNumbers()
- throws StorageBackendException
- {
- List articleNumbers = new ArrayList();
-
- for(GroupElement groupEl : groups)
- {
- List partNums = groupEl.group.getArticleNumbers();
- for(Long partNum : partNums)
- {
- articleNumbers.add(partNum + groupEl.offsetStart);
- }
- }
-
- return articleNumbers;
- }
-
- @Override
- public long getIndexOf(Article art)
- throws StorageBackendException
- {
- for(GroupElement groupEl : groups)
- {
- long idx = groupEl.group.getIndexOf(art);
- if(idx > 0)
- {
- return idx;
- }
- }
- return -1;
- }
-
- public long getInternalID()
- {
- return -1;
- }
-
- @Override
- public String getName()
- {
- return this.name;
- }
-
- @Override
- public long getFirstArticleNumber()
- throws StorageBackendException
- {
- long first = Long.MAX_VALUE;
-
- for(GroupElement groupEl : groups)
- {
- first = Math.min(first, groupEl.group.getFirstArticleNumber() + groupEl.offsetStart);
- }
-
- return first;
- }
-
- @Override
- public long getLastArticleNumber()
- throws StorageBackendException
- {
- long last = 1;
-
- for(GroupElement groupEl : groups)
- {
- last = Math.max(last, groupEl.group.getLastArticleNumber() + groupEl.offsetStart);
- }
-
- return last + getPostingsCount(); // This is a hack
- }
-
- public long getPostingsCount()
- throws StorageBackendException
- {
- long postings = 0;
-
- for(GroupElement groupEl : groups)
- {
- postings += groupEl.group.getPostingsCount();
- }
-
- return postings;
- }
-
- public boolean isDeleted()
- {
- return false;
- }
-
- public boolean isWriteable()
- {
- return false;
- }
-
-}
diff -r bb6990c0dd1a -r de98fd5b35f5 org/sonews/storage/Channel.java
--- a/org/sonews/storage/Channel.java Thu Aug 20 14:31:19 2009 +0200
+++ b/org/sonews/storage/Channel.java Thu Aug 20 16:49:38 2009 +0200
@@ -74,18 +74,7 @@
public static Channel getByName(String name)
{
- Channel channel;
-
- // Check if it's an aggregated group
- channel = AggregatedGroup.getByName(name);
-
- // If it's not an aggregate is probably a "real" group
- if(channel == null)
- {
- channel = Group.getByName(name);
- }
-
- return channel;
+ return Group.getByName(name);
}
public abstract Article getArticle(long idx)